From 7dafa258f5488fd1bd1a5fd7d11e08c82286e26b Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 15 Aug 2023 19:55:37 +0100 Subject: [PATCH 001/551] resolved conflicts --- ...sts.TestAccountAbstractionRpcBlockchain.cs | 3 +- .../AuraBlockProcessorTests.cs | 1 + .../AuRaContractGasLimitOverrideTests.cs | 1 + .../Transactions/TxCertifierFilterTests.cs | 3 +- .../Transactions/TxPermissionFilterTest.cs | 1 + .../BlockProcessorTests.cs | 12 +++++-- .../Producers/DevBlockproducerTests.cs | 3 +- .../Nethermind.Blockchain.Test/ReorgTests.cs | 3 +- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 33 +++++-------------- .../BeaconBlockRoot/BeaconRootContract.cs | 32 ++++++++++++++++++ .../IBeaconBlockRootHandler.cs | 9 ++++- .../Contracts/CallableContract.cs | 7 ++++ .../Contracts/Contract.cs | 1 - .../Nethermind.Blockchain/GenesisLoader.cs | 2 -- .../CliqueBlockProducerTests.cs | 6 ++-- .../AuRaBlockProcessor.cs | 6 +++- .../NullBeaconBlockRootHandler.cs | 9 ++++- .../InitializeBlockchainAuRa.cs | 1 + .../StartBlockProducerAuRa.cs | 1 + .../CliquePlugin.cs | 1 + .../NethDevPlugin.cs | 3 +- ...sor.BlockProductionTransactionsExecutor.cs | 2 ++ ...sor.BlockValidationTransactionsExecutor.cs | 2 +- .../Processing/BlockProcessor.cs | 8 ++--- .../Processing/IBlockProcessor.cs | 1 + .../Processing/ReadOnlyChainProcessingEnv.cs | 3 +- .../Producers/BlockProducerEnvFactory.cs | 1 + .../Blockchain/TestBlockchain.cs | 7 ++-- .../Steps/InitializeBlockchain.cs | 3 +- .../Modules/Trace/ParityStyleTracerTests.cs | 3 +- .../AuRaMergeBlockProcessor.cs | 3 ++ .../AuRaMergeBlockProducerEnvFactory.cs | 3 +- .../InitializeBlockchainAuRaMerge.cs | 1 + .../EngineModuleTests.HelperFunctions.cs | 29 ++++++++-------- .../EngineModuleTests.Setup.cs | 3 +- .../EngineModuleTests.V3.cs | 2 +- .../MevRpcModuleTests.TestMevRpcBlockchain.cs | 3 +- .../ChainSpecStyle/ChainParameters.cs | 2 ++ .../SyncThreadTests.cs | 6 ++-- 39 files changed, 149 insertions(+), 71 deletions(-) create mode 100644 src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs diff --git a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs index 9e23adb567f..c9e1e00376d 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs @@ -191,7 +191,8 @@ protected override BlockProcessor CreateBlockProcessor() State, ReceiptStorage, NullWitnessCollector.Instance, - LogManager); + LogManager, + TxProcessor); var parser = new AbiDefinitionParser(); parser.RegisterAbiTypeFactory(new AbiTuple()); diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs index 5798002af55..05b7faf81c1 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs @@ -160,6 +160,7 @@ void Process(AuRaBlockProcessor auRaBlockProcessor, int blockNumber, Keccak stat LimboLogs.Instance, Substitute.For(), new WithdrawalProcessor(stateProvider, LimboLogs.Instance), + transactionProcessor, txFilter, contractRewriter: contractRewriter); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs index c5f1a04d732..01d6600c4c7 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs @@ -100,6 +100,7 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, + TxProcessor, null, GasLimitCalculator as AuRaContractGasLimitOverride); } diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs index 887961a3c6d..84259259439 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs @@ -156,7 +156,8 @@ protected override BlockProcessor CreateBlockProcessor() ReceiptStorage, LimboLogs.Instance, BlockTree, - NullWithdrawalProcessor.Instance); + NullWithdrawalProcessor.Instance, + TxProcessor); } protected override Task AddBlocksOnStart() => Task.CompletedTask; diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs index 099792d03c3..63403377439 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs @@ -298,6 +298,7 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, + TxProcessor, PermissionBasedTxFilter); } diff --git a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs index f5896cbb355..dfd2466116f 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs @@ -10,6 +10,7 @@ using Nethermind.Specs; using Nethermind.Core.Test.Builders; using Nethermind.Db; +using Nethermind.Evm; using Nethermind.Evm.Tracing; using Nethermind.Logging; using Nethermind.Specs.Forks; @@ -25,8 +26,10 @@ using FluentAssertions; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core.Test.Blockchain; using Nethermind.Evm.TransactionProcessing; +using Nethermind.Consensus.BeaconBlockRoot; namespace Nethermind.Blockchain.Test { @@ -49,7 +52,8 @@ public void Prepared_block_contains_author_field() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - LimboLogs.Instance); + LimboLogs.Instance, + transactionProcessor); BlockHeader header = Build.A.BlockHeader.WithAuthor(TestItem.AddressD).TestObject; Block block = Build.A.Block.WithHeader(header).TestObject; @@ -80,7 +84,8 @@ public void Can_store_a_witness() stateProvider, NullReceiptStorage.Instance, witnessCollector, - LimboLogs.Instance); + LimboLogs.Instance, + transactionProcessor); BlockHeader header = Build.A.BlockHeader.WithAuthor(TestItem.AddressD).TestObject; Block block = Build.A.Block.WithHeader(header).TestObject; @@ -109,7 +114,8 @@ public void Recovers_state_on_cancel() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - LimboLogs.Instance); + LimboLogs.Instance, + transactionProcessor); BlockHeader header = Build.A.BlockHeader.WithNumber(1).WithAuthor(TestItem.AddressD).TestObject; Block block = Build.A.Block.WithTransactions(1, MuirGlacier.Instance).WithHeader(header).TestObject; diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs index 95d2a5d3ddc..5c3570e60ce 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs @@ -75,7 +75,8 @@ public void Test() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - LimboLogs.Instance); + LimboLogs.Instance, + txProcessor); BlockchainProcessor blockchainProcessor = new( blockTree, blockProcessor, diff --git a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs index 05291777503..66a7e4f2f93 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs @@ -80,7 +80,8 @@ public void Setup() stateProvider, NullReceiptStorage.Instance, new WitnessCollector(memDbProvider.StateDb, LimboLogs.Instance), - LimboLogs.Instance); + LimboLogs.Instance, + transactionProcessor); _blockchainProcessor = new BlockchainProcessor( _blockTree, blockProcessor, diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index ec90a12f136..2cfb44f9240 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -1,35 +1,20 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Core.Specs; using Nethermind.Core; -using Nethermind.Int256; -using Nethermind.State; -using Nethermind.Core.Crypto; -using Nethermind.Core.Extensions; +using Nethermind.Evm.TransactionProcessing; namespace Nethermind.Consensus.BeaconBlockRoot; public class BeaconBlockRootHandler : IBeaconBlockRootHandler { - public static UInt256 HISTORICAL_ROOTS_LENGTH = 98304; - private static readonly Address DefaultPbbrContractAddress = Address.FromNumber(0x0b); - - public void ApplyContractStateChanges(Block block, IReleaseSpec spec, IWorldState stateProvider) + IBeaconRootContract _beaconRootContract { get; set; } + Address _address = new Address("0x0b"); + public BeaconBlockRootHandler(ITransactionProcessor processor) { - if (!spec.IsBeaconBlockRootAvailable || - block.IsGenesis || - block.Header.ParentBeaconBlockRoot is null) return; - - UInt256 timestamp = (UInt256)block.Timestamp; - Keccak parentBeaconBlockRoot = block.ParentBeaconBlockRoot; - - UInt256.Mod(timestamp, HISTORICAL_ROOTS_LENGTH, out UInt256 timestampReduced); - UInt256 rootIndex = timestampReduced + HISTORICAL_ROOTS_LENGTH; - - StorageCell tsStorageCell = new(spec.Eip4788ContractAddress ?? DefaultPbbrContractAddress, timestampReduced); - StorageCell brStorageCell = new(spec.Eip4788ContractAddress ?? DefaultPbbrContractAddress, rootIndex); - - stateProvider.Set(tsStorageCell, Bytes.WithoutLeadingZeros(timestamp.ToBigEndian()).ToArray()); - stateProvider.Set(brStorageCell, Bytes.WithoutLeadingZeros(parentBeaconBlockRoot.Bytes).ToArray()); + _beaconRootContract = new BeaconRootContract(processor, _address); + } + public void ScheduleSystemCall(Block block) + { + _beaconRootContract.Invoke(block.Header); } } diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs new file mode 100644 index 00000000000..e3d9d1b8438 --- /dev/null +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Nethermind.Abi; +using Nethermind.Blockchain.Contracts; +using Nethermind.Core; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; + +public interface IBeaconRootContract +{ + byte[] Invoke(BlockHeader blockHeader); +} + +public sealed class BeaconRootContract : CallableContract, IBeaconRootContract +{ + public BeaconRootContract(ITransactionProcessor transactionProcessor, Address contractAddress) + : base(transactionProcessor, null, contractAddress ?? throw new ArgumentNullException(nameof(contractAddress))) + { + } + + public byte[] Invoke(BlockHeader blockHeader) + { + var result = Call(blockHeader, Address.SystemUser, UnlimitedGas); + return result; + } +} diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs index d30074fc4cc..949a1ed424b 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs @@ -1,12 +1,19 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; using Nethermind.Core.Specs; using Nethermind.Core; using Nethermind.State; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Evm.Tracing; namespace Nethermind.Consensus.BeaconBlockRoot; public interface IBeaconBlockRootHandler { - void ApplyContractStateChanges(Block block, IReleaseSpec spec, IWorldState state); + void ScheduleSystemCall(Block block); } diff --git a/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs b/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs index 41dff35a7c9..2f5a227d272 100644 --- a/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs @@ -60,6 +60,13 @@ protected object[] Call(BlockHeader header, string functionName, Address sender, return objects; } + protected byte[] Call(BlockHeader header, Address sender, long gasLimit) + { + var transaction = GenerateTransaction(ContractAddress, Array.Empty(), sender, gasLimit, header); + var result = CallCore(_transactionProcessor, header, string.Empty, transaction); + return result; + } + private bool TryCall(BlockHeader header, Transaction transaction, out byte[] result) { CallOutputTracer tracer = new(); diff --git a/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs b/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs index dfa733b619e..8719e521aae 100644 --- a/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs +++ b/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs @@ -201,7 +201,6 @@ protected byte[] CallCore(ITransactionProcessor transactionProcessor, BlockHeade return tracer.ReturnValue; } } - protected object[] DecodeReturnData(string functionName, byte[] data) { AbiEncodingInfo abiEncodingInfo = AbiDefinition.GetFunction(functionName).GetReturnInfo(); diff --git a/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs b/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs index 992376c0378..b98e1801241 100644 --- a/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs +++ b/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs @@ -24,7 +24,6 @@ public class GenesisLoader private readonly ISpecProvider _specProvider; private readonly IWorldState _stateProvider; private readonly ITransactionProcessor _transactionProcessor; - private readonly BeaconBlockRootHandler _beaconBlockRootHandler; public GenesisLoader( ChainSpec chainSpec, @@ -36,7 +35,6 @@ public GenesisLoader( _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _stateProvider = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider)); _transactionProcessor = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor)); - _beaconBlockRootHandler = new BeaconBlockRootHandler(); } public Block Load() diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs index b905d8e6a49..fe2f980abba 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs @@ -132,7 +132,8 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - nodeLogManager); + nodeLogManager, + transactionProcessor); BlockchainProcessor processor = new(blockTree, blockProcessor, new AuthorRecoveryStep(snapshotManager), stateReader, nodeLogManager, BlockchainProcessor.Options.NoReceipts); processor.Start(); @@ -151,7 +152,8 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f minerStateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - nodeLogManager); + nodeLogManager, + minerTransactionProcessor); BlockchainProcessor minerProcessor = new(blockTree, minerBlockProcessor, new AuthorRecoveryStep(snapshotManager), stateReader, nodeLogManager, BlockchainProcessor.Options.NoReceipts); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 1c4c5b44b22..f157cd53374 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -15,6 +15,7 @@ using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; using Nethermind.TxPool; @@ -41,6 +42,7 @@ public AuRaBlockProcessor( ILogManager logManager, IBlockTree blockTree, IWithdrawalProcessor withdrawalProcessor, + ITransactionProcessor transactionProcessor, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, ContractRewriter? contractRewriter = null) @@ -53,7 +55,9 @@ public AuRaBlockProcessor( receiptStorage, NullWitnessCollector.Instance, logManager, - withdrawalProcessor) + transactionProcessor, + withdrawalProcessor + ) { _specProvider = specProvider; _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs index 96138999814..e91d4826ff5 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs @@ -1,15 +1,22 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Core; using Nethermind.Core.Specs; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; using Nethermind.State; namespace Nethermind.Consensus.AuRa.BeaconBlockRoot; internal class NullBeaconBlockRootHandler : IBeaconBlockRootHandler { - public void ApplyContractStateChanges(Block block, IReleaseSpec spec, IWorldState state) + public void ScheduleSystemCall(Block block) { } diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs index 650a82b5dd6..8f10dab279e 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs @@ -97,6 +97,7 @@ protected virtual BlockProcessor NewBlockProcessor(AuRaNethermindApi api, ITxFil _api.LogManager, _api.BlockTree, NullWithdrawalProcessor.Instance, + _api.TransactionProcessor, txFilter, GetGasLimitCalculator(), contractRewriter diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs index c8bd56c76e6..6780fb178c6 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs @@ -159,6 +159,7 @@ private BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv changeableTx _api.LogManager, changeableTxProcessingEnv.BlockTree, NullWithdrawalProcessor.Instance, + _api.TransactionProcessor, auRaTxFilter, CreateGasLimitCalculator(constantContractTxProcessingEnv) as AuRaContractGasLimitOverride, contractRewriter) diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index 4180bd2a69a..48e4261ab8d 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -110,6 +110,7 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd NullReceiptStorage.Instance, NullWitnessCollector.Instance, getFromApi.LogManager, + getFromApi.TransactionProcessor, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager))); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( diff --git a/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs b/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs index 60fa34be699..ba402d9bdf4 100644 --- a/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs @@ -80,7 +80,8 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd producerEnv.StateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - getFromApi.LogManager); + getFromApi.LogManager, + getFromApi.TransactionProcessor); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( readOnlyBlockTree, diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionsExecutor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionsExecutor.cs index 05b11f9d7b7..0c914981091 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionsExecutor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionsExecutor.cs @@ -49,6 +49,8 @@ public BlockProductionTransactionsExecutor( } protected EventHandler? _transactionProcessed; + + event EventHandler? IBlockProcessor.IBlockTransactionsExecutor.TransactionProcessed { add => _transactionProcessed += value; diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs index 958043cadc9..bd3bb03e48f 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs @@ -15,7 +15,7 @@ public partial class BlockProcessor { public class BlockValidationTransactionsExecutor : IBlockProcessor.IBlockTransactionsExecutor { - private readonly ITransactionProcessorAdapter _transactionProcessor; + public readonly ITransactionProcessorAdapter _transactionProcessor; private readonly IWorldState _stateProvider; public BlockValidationTransactionsExecutor(ITransactionProcessor transactionProcessor, IWorldState stateProvider) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 82ee3b1d655..ed0edf2a501 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -16,6 +16,7 @@ using Nethermind.Crypto; using Nethermind.Evm; using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Specs.Forks; @@ -54,6 +55,7 @@ public BlockProcessor( IReceiptStorage? receiptStorage, IWitnessCollector? witnessCollector, ILogManager? logManager, + ITransactionProcessor transactionProcessor, IWithdrawalProcessor? withdrawalProcessor = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); @@ -65,8 +67,7 @@ public BlockProcessor( _withdrawalProcessor = withdrawalProcessor ?? new WithdrawalProcessor(stateProvider, logManager); _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); - _beaconBlockRootHandler = new BeaconBlockRootHandler(); - + _beaconBlockRootHandler = new BeaconBlockRootHandler(transactionProcessor); _receiptsTracer = new BlockReceiptsTracer(); } @@ -226,8 +227,7 @@ protected virtual TxReceipt[] ProcessBlock( _receiptsTracer.SetOtherTracer(blockTracer); _receiptsTracer.StartNewBlockTrace(block); - _beaconBlockRootHandler.ApplyContractStateChanges(block, spec, _stateProvider); - _stateProvider.Commit(spec); + _beaconBlockRootHandler.ScheduleSystemCall(block); TxReceipt[] receipts = _blockTransactionsExecutor.ProcessTransactions(block, options, _receiptsTracer, spec); diff --git a/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs index 277fc7c295b..b2ccd466f5e 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs @@ -7,6 +7,7 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; namespace Nethermind.Consensus.Processing { diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs index 65baaa7ea3e..46e886ef0c4 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs @@ -49,7 +49,8 @@ public ReadOnlyChainProcessingEnv( StateProvider, receiptStorage, NullWitnessCollector.Instance, - logManager); + logManager, + _txEnv.TransactionProcessor); _blockProcessingQueue = new BlockchainProcessor(_txEnv.BlockTree, BlockProcessor, recoveryStep, _txEnv.StateReader, logManager, BlockchainProcessor.Options.NoReceipts); BlockProcessingQueue = _blockProcessingQueue; diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index 3d88b53ba6a..2e433736853 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -149,6 +149,7 @@ protected virtual BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv re receiptStorage, NullWitnessCollector.Instance, logManager, + readOnlyTxProcessingEnv.TransactionProcessor, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager))); } diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index f0c11ba233d..9cac2d7f333 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -161,7 +161,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = TxProcessor = new TransactionProcessor(SpecProvider, State, virtualMachine, LogManager); BlockPreprocessorStep = new RecoverSignatures(EthereumEcdsa, TxPool, SpecProvider, LogManager); HeaderValidator = new HeaderValidator(BlockTree, Always.Valid, SpecProvider, LogManager); - + BeaconBlockRootHandler = new BeaconBlockRootHandler(TxProcessor); new ReceiptCanonicalityMonitor(BlockTree, ReceiptStorage, LogManager); BlockValidator = new BlockValidator( @@ -178,7 +178,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = BloomStorage bloomStorage = new(new BloomConfig(), new MemDb(), new InMemoryDictionaryFileStoreFactory()); ReceiptsRecovery receiptsRecovery = new(new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance), SpecProvider); LogFinder = new LogFinder(BlockTree, ReceiptStorage, ReceiptStorage, bloomStorage, LimboLogs.Instance, receiptsRecovery); - BeaconBlockRootHandler = new BeaconBlockRootHandler(); + BeaconBlockRootHandler = new BeaconBlockRootHandler(TxProcessor); BlockProcessor = CreateBlockProcessor(); BlockchainProcessor chainProcessor = new(BlockTree, BlockProcessor, BlockPreprocessorStep, StateReader, LogManager, Consensus.Processing.BlockchainProcessor.Options.Default); @@ -342,7 +342,8 @@ protected virtual IBlockProcessor CreateBlockProcessor() => State, ReceiptStorage, NullWitnessCollector.Instance, - LogManager); + LogManager, + TxProcessor); public async Task WaitForNewHead() { diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs index 9639c0af8b4..9e77fd992b1 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs @@ -364,7 +364,8 @@ protected virtual BlockProcessor CreateBlockProcessor() _api.WorldState, _api.ReceiptStorage, _api.WitnessCollector, - _api.LogManager); + _api.LogManager, + _api.TransactionProcessor); } // TODO: remove from here - move to consensus? diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs index 3832256c615..4829e4e46d3 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs @@ -74,7 +74,8 @@ public void Setup() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - LimboLogs.Instance); + LimboLogs.Instance, + transactionProcessor); RecoverSignatures txRecovery = new(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), NullTxPool.Instance, specProvider, LimboLogs.Instance); _processor = new BlockchainProcessor(_blockTree, blockProcessor, txRecovery, stateReader, LimboLogs.Instance, BlockchainProcessor.Options.NoReceipts); diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 9f97c9e2574..0349453d17c 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -12,6 +12,7 @@ using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; @@ -29,6 +30,7 @@ public AuRaMergeBlockProcessor( ILogManager logManager, IBlockTree blockTree, IWithdrawalProcessor withdrawalProcessor, + ITransactionProcessor transactionProcessor, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, ContractRewriter? contractRewriter = null @@ -42,6 +44,7 @@ public AuRaMergeBlockProcessor( logManager, blockTree, withdrawalProcessor, + transactionProcessor, txFilter, gasLimitOverride, contractRewriter diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index b8e311bd306..ef4b651659e 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -86,7 +86,8 @@ protected override BlockProcessor CreateBlockProcessor( withdrawalContractFactory.Create(readOnlyTxProcessingEnv.TransactionProcessor), logManager ) - )); + ), + readOnlyTxProcessingEnv.TransactionProcessor); } protected override TxPoolTxSource CreateTxPoolTxSource( diff --git a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs index 7bdf6ee9311..b40ac0bf9d4 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs @@ -34,6 +34,7 @@ protected override BlockProcessor NewBlockProcessor(AuRaNethermindApi api, ITxFi _api.BlockTree!, new AuraWithdrawalProcessor( withdrawalContractFactory.Create(_api.TransactionProcessor!), _api.LogManager), + _api.TransactionProcessor!, txFilter, GetGasLimitCalculator(), contractRewriter diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index e2b86ae6678..51a1b8bba9a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -21,7 +21,6 @@ using Nethermind.Specs.Forks; using Nethermind.State; using Nethermind.Core.Specs; -using Nethermind.Consensus.BeaconBlockRoot; namespace Nethermind.Merge.Plugin.Test { @@ -29,7 +28,6 @@ namespace Nethermind.Merge.Plugin.Test public partial class EngineModuleTests { private static readonly DateTime Timestamp = DateTimeOffset.FromUnixTimeSeconds(1000).UtcDateTime; - private static readonly IBeaconBlockRootHandler _beaconBlockRootHandler = new BeaconBlockRootHandler(); private ITimestamper Timestamper { get; } = new ManualTimestamper(Timestamp); private void AssertExecutionStatusChanged(IBlockFinder blockFinder, Keccak headBlockHash, Keccak finalizedBlockHash, Keccak safeBlockHash) @@ -86,16 +84,14 @@ private ExecutionPayload CreateParentBlockRequestOnHead(IBlockTree blockTree) }; } - private static ExecutionPayload CreateBlockRequest(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, - ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Keccak? parentBeaconBlockRoot = null) - => CreateBlockRequestInternal(spec, state, parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, parentBeaconBlockRoot: parentBeaconBlockRoot); + private static ExecutionPayload CreateBlockRequest(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, Transaction[]? transactions = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Keccak? beaconParentBlockRoot = null) + => CreateBlockRequestInternal(spec, state, parent, miner, withdrawals, transactions: transactions, beaconParentBlockRoot: beaconParentBlockRoot); - private static ExecutionPayloadV3 CreateBlockRequestV3(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, - ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Keccak? parentBeaconBlockRoot = null) + private static ExecutionPayloadV3 CreateBlockRequestV3(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Keccak? parentBeaconBlockRoot = null) { - var blockRequestV3 = CreateBlockRequestInternal(spec, state, parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, parentBeaconBlockRoot: parentBeaconBlockRoot); + var blockRequestV3 = CreateBlockRequestInternal(spec, state, parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, beaconParentBlockRoot: parentBeaconBlockRoot); blockRequestV3.TryGetBlock(out Block? block); - _beaconBlockRootHandler.ApplyContractStateChanges(block!, spec, state); + //_beaconBlockRootHandler.ScheduleSystemCall(block); state.Commit(spec); state.CommitTree(blockRequestV3.BlockNumber); @@ -107,8 +103,7 @@ private static ExecutionPayloadV3 CreateBlockRequestV3(IReleaseSpec spec, IWorld return blockRequestV3; } - private static T CreateBlockRequestInternal(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, - ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Keccak? parentBeaconBlockRoot = null) where T : ExecutionPayload, new() + private static T CreateBlockRequestInternal(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Keccak? beaconParentBlockRoot = null) where T : ExecutionPayload, new() { T blockRequest = new() { @@ -122,11 +117,17 @@ private static T CreateBlockRequestInternal(IReleaseSpec spec, IWorldState st LogsBloom = Bloom.Empty, Timestamp = parent.Timestamp + 1, Withdrawals = withdrawals, - BlobGasUsed = blobGasUsed, - ExcessBlobGas = excessBlobGas, - ParentBeaconBlockRoot = parentBeaconBlockRoot, }; + if (blockRequest is ExecutionPayloadV3 blockRequestV3) + { + blockRequestV3.ParentBeaconBlockRoot = beaconParentBlockRoot; + blockRequestV3.BlobGasUsed = blobGasUsed; + blockRequestV3.ExcessBlobGas = excessBlobGas; + } + + + blockRequest.SetTransactions(transactions ?? Array.Empty()); TryCalculateHash(blockRequest, out Keccak? hash); blockRequest.BlockHash = hash; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index abe7a3f24e6..b4baf31456f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -223,7 +223,8 @@ protected override IBlockProcessor CreateBlockProcessor() State, ReceiptStorage, NullWitnessCollector.Instance, - LogManager); + LogManager, + TxProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs index 87d4df909ce..6a2d3f8cc8d 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs @@ -70,7 +70,7 @@ public async Task NewPayloadV2_should_decline_pre_cancun_with_cancun_fields ExecutionPayload executionPayload = CreateBlockRequest( chain.SpecProvider.GenesisSpec, chain.State, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, withdrawals: Array.Empty(), - blobGasUsed: blobGasUsed, excessBlobGas: excessBlobGas, parentBeaconBlockRoot: parentBlockBeaconRoot); + blobGasUsed: blobGasUsed, excessBlobGas: excessBlobGas, beaconParentBlockRoot: parentBlockBeaconRoot); ResultWrapper result = await rpcModule.engine_newPayloadV2(executionPayload); diff --git a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs index add36b943b6..0b930c4136a 100644 --- a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs @@ -202,7 +202,8 @@ protected override BlockProcessor CreateBlockProcessor() State, ReceiptStorage, NullWitnessCollector.Instance, - LogManager); + LogManager, + TxProcessor); _tracerFactory = new TracerFactory( DbProvider, diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs index fca58477f4c..ddbbbe30e74 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Int256; @@ -9,6 +10,7 @@ namespace Nethermind.Specs.ChainSpecStyle { public class ChainParameters { + //public IDictionary> RewriteBytecode { get; set; } public long? MaxCodeSize { get; set; } public long? MaxCodeSizeTransition { get; set; } public ulong? MaxCodeSizeTransitionTimestamp { get; set; } diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs index c1bebc53a84..0141cdc7d61 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs @@ -298,7 +298,8 @@ private SyncTestContext CreateSyncManager(int index) stateProvider, receiptStorage, NullWitnessCollector.Instance, - logManager); + logManager, + txProcessor); RecoverSignatures step = new(ecdsa, txPool, specProvider, logManager); BlockchainProcessor processor = new(tree, blockProcessor, step, stateReader, logManager, @@ -320,7 +321,8 @@ private SyncTestContext CreateSyncManager(int index) devState, receiptStorage, NullWitnessCollector.Instance, - logManager); + logManager, + devTxProcessor); BlockchainProcessor devChainProcessor = new(tree, devBlockProcessor, step, stateReader, logManager, BlockchainProcessor.Options.NoReceipts); From 06cb95972b48865bc027d0fc1ae0ecaa5f584fc6 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 22 Aug 2023 12:15:59 +0200 Subject: [PATCH 002/551] fix ethereum tests --- .../Ethereum.Test.Base/BlockchainTestBase.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs index 8e3e3a147db..dc3ed6ce71c 100644 --- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs @@ -146,21 +146,23 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? specProvider, _logManager); + TransactionProcessor? txProcessor = new( + specProvider, + stateProvider, + virtualMachine, + _logManager); + IBlockProcessor blockProcessor = new BlockProcessor( specProvider, blockValidator, rewardCalculator, - new BlockProcessor.BlockValidationTransactionsExecutor( - new TransactionProcessor( - specProvider, - stateProvider, - virtualMachine, - _logManager), + new BlockProcessor.BlockValidationTransactionsExecutor(txProcessor, stateProvider), stateProvider, receiptStorage, NullWitnessCollector.Instance, - _logManager); + _logManager, + txProcessor); IBlockchainProcessor blockchainProcessor = new BlockchainProcessor( blockTree, From 4205ff53048c23449ac7fd208c1744a6d8539951 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 22 Aug 2023 12:21:04 +0200 Subject: [PATCH 003/551] whitespace fix --- .../Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs | 2 +- .../EngineModuleTests.HelperFunctions.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs index e3d9d1b8438..cd88a4b0518 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs @@ -12,7 +12,7 @@ using Nethermind.Evm.TransactionProcessing; using Nethermind.Int256; -public interface IBeaconRootContract +public interface IBeaconRootContract { byte[] Invoke(BlockHeader blockHeader); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index 51a1b8bba9a..d5dc263ea38 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -84,7 +84,7 @@ private ExecutionPayload CreateParentBlockRequestOnHead(IBlockTree blockTree) }; } - private static ExecutionPayload CreateBlockRequest(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, Transaction[]? transactions = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Keccak? beaconParentBlockRoot = null) + private static ExecutionPayload CreateBlockRequest(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, Transaction[]? transactions = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Keccak? beaconParentBlockRoot = null) => CreateBlockRequestInternal(spec, state, parent, miner, withdrawals, transactions: transactions, beaconParentBlockRoot: beaconParentBlockRoot); private static ExecutionPayloadV3 CreateBlockRequestV3(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Keccak? parentBeaconBlockRoot = null) From 18e0a6e690c6d617d05248a00024f6e1df72ee8a Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 22 Aug 2023 12:31:55 +0200 Subject: [PATCH 004/551] Benchmarks.sln --- .../Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs index 6f64edef12d..be91ea3634e 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs @@ -79,7 +79,7 @@ TransactionProcessor transactionProcessor IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor = new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider); BlockProcessor blockProcessor = new(specProvider, Always.Valid, new RewardCalculator(specProvider), transactionsExecutor, - stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, LimboLogs.Instance); + stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, LimboLogs.Instance, transactionProcessor); EthereumEcdsa ecdsa = new(specProvider.ChainId, LimboLogs.Instance); BlockchainProcessor blockchainProcessor = new( From 3965ea5184c01c651b14189a112171c0d40d313c Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 22 Aug 2023 14:38:05 +0200 Subject: [PATCH 005/551] test working fine --- .../BlockProcessorTests.cs | 3 - .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 2 +- .../BeaconBlockRoot/BeaconRootContract.cs | 33 ++++++---- .../IBeaconBlockRootHandler.cs | 9 --- .../Contracts/CallableContract.cs | 3 +- .../Contracts/Contract.cs | 6 +- .../Nethermind.Blockchain/GenesisLoader.cs | 1 - .../NullBeaconBlockRootHandler.cs | 9 --- .../Processing/IBlockProcessor.cs | 1 - .../Nethermind.Runner/configs/volta.cfg | 63 ++++++++++++------- .../ChainSpecStyle/ChainParameters.cs | 1 - 11 files changed, 65 insertions(+), 66 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs index dfd2466116f..96f36116df0 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs @@ -10,7 +10,6 @@ using Nethermind.Specs; using Nethermind.Core.Test.Builders; using Nethermind.Db; -using Nethermind.Evm; using Nethermind.Evm.Tracing; using Nethermind.Logging; using Nethermind.Specs.Forks; @@ -26,10 +25,8 @@ using FluentAssertions; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; -using Nethermind.Consensus.Withdrawals; using Nethermind.Core.Test.Blockchain; using Nethermind.Evm.TransactionProcessing; -using Nethermind.Consensus.BeaconBlockRoot; namespace Nethermind.Blockchain.Test { diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index 2cfb44f9240..2b71ffecfab 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -8,7 +8,7 @@ namespace Nethermind.Consensus.BeaconBlockRoot; public class BeaconBlockRootHandler : IBeaconBlockRootHandler { IBeaconRootContract _beaconRootContract { get; set; } - Address _address = new Address("0x0b"); + Address _address = Address.FromNumber(0x0b); // ToDo Address should be configurable public BeaconBlockRootHandler(ITransactionProcessor processor) { _beaconRootContract = new BeaconRootContract(processor, _address); diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs index cd88a4b0518..cb4e13d86a3 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs @@ -2,31 +2,40 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Nethermind.Abi; using Nethermind.Blockchain.Contracts; using Nethermind.Core; +using Nethermind.Crypto; +using Nethermind.Evm.Tracing; using Nethermind.Evm.TransactionProcessing; using Nethermind.Int256; public interface IBeaconRootContract { - byte[] Invoke(BlockHeader blockHeader); + void Invoke(BlockHeader blockHeader); } - -public sealed class BeaconRootContract : CallableContract, IBeaconRootContract +public sealed class BeaconRootContract : IBeaconRootContract { + private readonly ITransactionProcessor _transactionProcessor; public BeaconRootContract(ITransactionProcessor transactionProcessor, Address contractAddress) - : base(transactionProcessor, null, contractAddress ?? throw new ArgumentNullException(nameof(contractAddress))) { + _transactionProcessor = transactionProcessor; } - public byte[] Invoke(BlockHeader blockHeader) + public void Invoke(BlockHeader blockHeader) { - var result = Call(blockHeader, Address.SystemUser, UnlimitedGas); - return result; + // ToDo skip genesis & skip when 4788 not activated + var transaction = new Transaction() + { + Value = UInt256.Zero, + Data = blockHeader.ParentBeaconBlockRoot.Bytes.ToArray(), + To = Address.FromNumber(0x0b), + SenderAddress = Address.SystemUser, + GasLimit = long.MaxValue, // ToDO Unlimited gas will be probably changed to 30mln + GasPrice = UInt256.Zero, + }; + + transaction.Hash = transaction.CalculateHash(); + + _transactionProcessor.Execute(transaction, blockHeader, NullTxTracer.Instance); } } diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs index 949a1ed424b..baa0ea4c630 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs @@ -1,16 +1,7 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Nethermind.Core.Specs; using Nethermind.Core; -using Nethermind.State; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.Evm.Tracing; namespace Nethermind.Consensus.BeaconBlockRoot; public interface IBeaconBlockRootHandler diff --git a/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs b/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs index 2f5a227d272..45854c111da 100644 --- a/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs @@ -60,9 +60,8 @@ protected object[] Call(BlockHeader header, string functionName, Address sender, return objects; } - protected byte[] Call(BlockHeader header, Address sender, long gasLimit) + protected byte[] Call(BlockHeader header, Transaction transaction) { - var transaction = GenerateTransaction(ContractAddress, Array.Empty(), sender, gasLimit, header); var result = CallCore(_transactionProcessor, header, string.Empty, transaction); return result; } diff --git a/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs b/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs index 8719e521aae..a19c9ec1b2f 100644 --- a/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs +++ b/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs @@ -19,8 +19,8 @@ namespace Nethermind.Blockchain.Contracts /// Base class for contracts that will be interacted by the node engine. /// /// - /// This class is intended to be inherited and concrete contract class should provide contract specific methods to be able for the node to use the contract. - /// + /// This class is intended to be inherited and concrete contract class should provide contract specific methods to be able for the node to use the contract. + /// /// There are 3 main ways a node can interact with contract: /// 1. It can that will be added to a block. /// 2. It can contract and modify current state of execution. @@ -29,7 +29,7 @@ namespace Nethermind.Blockchain.Contracts public abstract partial class Contract { /// - /// Default gas limit of transactions generated from contract. + /// Default gas limit of transactions generated from contract. /// public const long DefaultContractGasLimit = 1_600_000L; diff --git a/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs b/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs index b98e1801241..3ddf0122d6b 100644 --- a/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs +++ b/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs @@ -14,7 +14,6 @@ using Nethermind.Evm.TransactionProcessing; using Nethermind.Specs.ChainSpecStyle; using Nethermind.State; -using Nethermind.Consensus.BeaconBlockRoot; namespace Nethermind.Blockchain { diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs index e91d4826ff5..86006a12552 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs @@ -1,17 +1,8 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Core; -using Nethermind.Core.Specs; -using Nethermind.Evm.Tracing; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.State; namespace Nethermind.Consensus.AuRa.BeaconBlockRoot; internal class NullBeaconBlockRootHandler : IBeaconBlockRootHandler diff --git a/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs index b2ccd466f5e..277fc7c295b 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs @@ -7,7 +7,6 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Evm.Tracing; -using Nethermind.Evm.TransactionProcessing; namespace Nethermind.Consensus.Processing { diff --git a/src/Nethermind/Nethermind.Runner/configs/volta.cfg b/src/Nethermind/Nethermind.Runner/configs/volta.cfg index dcf2498376b..e5cadbf7152 100644 --- a/src/Nethermind/Nethermind.Runner/configs/volta.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/volta.cfg @@ -1,34 +1,49 @@ { "Init": { + "PubSubEnabled": true, + "WebSocketsEnabled": true, "IsMining": false, + "UseMemDb": true, "ChainSpecPath": "chainspec/volta.json", - "GenesisHash": "0xebd8b413ca7b7f84a8dd20d17519ce2b01954c74d94a0a739a3e416abe0e43e5", - "BaseDbPath": "nethermind_db/volta", - "LogFileName": "volta.logs.txt", - "MemoryHint": 768000000 + "BaseDbPath": "nethermind_db/hive2", + "LogFileName": "/hive.logs.txt" }, - "Network": { - "ActivePeersMaxCount": 25 - }, - "Sync": { - "FastSync": true, - "PivotNumber": 24240000, - "PivotHash": "0x75855a940c344c195cf10406cae4986e1c9fb63f6a6f8b49cddd6824f653f440", - "PivotTotalDifficulty": "8248444574163548354352200484146061445330974699", - "FastBlocks": true, - "UseGethLimitsInFastBlocks": false, - "FastSyncCatchUpHeightDelta": 10000000000 + "JsonRpc": { + "Enabled": true, + "Host": "0.0.0.0", + "Port": 8545, + "WebSocketsPort": 8546, + "EnabledModules": [ + "Debug", + "Eth", + "Subscribe", + "Trace", + "TxPool", + "Web3", + "Personal", + "Proof", + "Net", + "Parity", + "Health" + ], + "AdditionalRpcUrls": [ + "http://0.0.0.0:8550|http;ws|debug;net;eth;subscribe;engine;web3;client|no-auth", + "http://0.0.0.0:8551|http;ws|debug;net;eth;subscribe;engine;web3;client" + ] }, - "EthStats": { - "Name": "Nethermind Volta" - }, - "Metrics": { - "NodeName": "Volta" + "Network": { + "DiscoveryPort": 30303, + "P2PPort": 30303, + "ExternalIp": "127.0.0.1" }, - "Mining": { - "MinGasPrice": 1 + "Hive": { + "ChainFile": "/chain.rlp", + "GenesisFilePath": "/genesis.json", + "BlocksDir": "/blocks", + "KeysDir": "/keys" }, "Merge": { - "Enabled": false + "Enabled": true, + "TerminalTotalDifficulty": "0" } -} \ No newline at end of file +} diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs index ddbbbe30e74..db732e5b66c 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Int256; From a1cebce6d9b0e5a2109750d2f598eed225b42a42 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 22 Aug 2023 15:19:02 +0200 Subject: [PATCH 006/551] a few fixes --- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 5 +++-- .../BeaconBlockRoot/BeaconRootContract.cs | 10 +++++++--- .../BeaconBlockRoot/IBeaconBlockRootHandler.cs | 3 ++- .../BeaconBlockRoot/NullBeaconBlockRootHandler.cs | 6 +++--- .../Nethermind.Consensus/Processing/BlockProcessor.cs | 2 +- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index 2b71ffecfab..d31a72237f2 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Core.Specs; using Nethermind.Evm.TransactionProcessing; namespace Nethermind.Consensus.BeaconBlockRoot; @@ -13,8 +14,8 @@ public BeaconBlockRootHandler(ITransactionProcessor processor) { _beaconRootContract = new BeaconRootContract(processor, _address); } - public void ScheduleSystemCall(Block block) + public void ScheduleSystemCall(Block block, IReleaseSpec spec) { - _beaconRootContract.Invoke(block.Header); + _beaconRootContract.Invoke(block.Header, spec); } } diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs index cb4e13d86a3..f642a12e0ec 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs @@ -4,6 +4,7 @@ using System; using Nethermind.Blockchain.Contracts; using Nethermind.Core; +using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Evm.Tracing; using Nethermind.Evm.TransactionProcessing; @@ -11,7 +12,7 @@ public interface IBeaconRootContract { - void Invoke(BlockHeader blockHeader); + void Invoke(BlockHeader blockHeader, IReleaseSpec spec); } public sealed class BeaconRootContract : IBeaconRootContract { @@ -21,9 +22,12 @@ public BeaconRootContract(ITransactionProcessor transactionProcessor, Address co _transactionProcessor = transactionProcessor; } - public void Invoke(BlockHeader blockHeader) + public void Invoke(BlockHeader blockHeader, IReleaseSpec spec) { - // ToDo skip genesis & skip when 4788 not activated + if (!spec.IsBeaconBlockRootAvailable || + blockHeader.IsGenesis || + blockHeader.ParentBeaconBlockRoot is null) return; + var transaction = new Transaction() { Value = UInt256.Zero, diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs index baa0ea4c630..58d82d3b7f2 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs @@ -2,9 +2,10 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Core.Specs; namespace Nethermind.Consensus.BeaconBlockRoot; public interface IBeaconBlockRootHandler { - void ScheduleSystemCall(Block block); + void ScheduleSystemCall(Block block, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs index 86006a12552..ba6dfda4ab8 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs @@ -3,13 +3,13 @@ using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Core; +using Nethermind.Core.Specs; namespace Nethermind.Consensus.AuRa.BeaconBlockRoot; internal class NullBeaconBlockRootHandler : IBeaconBlockRootHandler { - public void ScheduleSystemCall(Block block) + public static IBeaconBlockRootHandler Instance { get; } = new NullBeaconBlockRootHandler(); + public void ScheduleSystemCall(Block block, IReleaseSpec spec) { } - - public static IBeaconBlockRootHandler Instance { get; } = new NullBeaconBlockRootHandler(); } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index ed0edf2a501..df62d2bd344 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -227,7 +227,7 @@ protected virtual TxReceipt[] ProcessBlock( _receiptsTracer.SetOtherTracer(blockTracer); _receiptsTracer.StartNewBlockTrace(block); - _beaconBlockRootHandler.ScheduleSystemCall(block); + _beaconBlockRootHandler.ScheduleSystemCall(block, spec); TxReceipt[] receipts = _blockTransactionsExecutor.ProcessTransactions(block, options, _receiptsTracer, spec); From 899547febd0de16865d0c491eda0eaeb0bb089ff Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 22 Aug 2023 15:53:34 +0200 Subject: [PATCH 007/551] a few more cleanups --- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 44 +++++++++++++++--- .../BeaconBlockRoot/BeaconRootContract.cs | 45 ------------------- .../IBeaconBlockRootHandler.cs | 2 +- .../NullBeaconBlockRootHandler.cs | 15 ------- .../Processing/BlockProcessor.cs | 4 +- .../Blockchain/TestBlockchain.cs | 6 +-- .../Nethermind.Core/Specs/IReleaseSpec.cs | 4 +- .../OverridableReleaseSpec.cs | 2 +- .../ChainSpecStyle/ChainParameters.cs | 1 - 9 files changed, 47 insertions(+), 76 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs delete mode 100644 src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index d31a72237f2..296b18312f1 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -1,21 +1,53 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using Nethermind.Core; using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm.Tracing; using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; +using Nethermind.Logging; -namespace Nethermind.Consensus.BeaconBlockRoot; +namespace Nethermind.Blockchain.BeaconBlockRoot; public class BeaconBlockRootHandler : IBeaconBlockRootHandler { - IBeaconRootContract _beaconRootContract { get; set; } - Address _address = Address.FromNumber(0x0b); // ToDo Address should be configurable - public BeaconBlockRootHandler(ITransactionProcessor processor) + private readonly ITransactionProcessor _processor; + private static Address Default4788Address = Address.FromNumber(0x0b); // ToDo this address can change in next version of the spec + private readonly ILogger _logger; + public BeaconBlockRootHandler( + ITransactionProcessor processor, + ILogManager logManager) { - _beaconRootContract = new BeaconRootContract(processor, _address); + _processor = processor; + _logger = logManager.GetClassLogger(); } public void ScheduleSystemCall(Block block, IReleaseSpec spec) { - _beaconRootContract.Invoke(block.Header, spec); + BlockHeader? header = block.Header; + if (!spec.IsBeaconBlockRootAvailable || + header.IsGenesis || + header.ParentBeaconBlockRoot is null) return; + + Transaction? transaction = new() + { + Value = UInt256.Zero, + Data = header.ParentBeaconBlockRoot.Bytes.ToArray(), + To = spec.Eip4788ContractAddress ?? Default4788Address, + SenderAddress = Address.SystemUser, + GasLimit = long.MaxValue, // ToDO Unlimited gas will be probably changed to 30mln + GasPrice = UInt256.Zero, + }; + transaction.Hash = transaction.CalculateHash(); + + try + { + _processor.Execute(transaction, header, NullTxTracer.Instance); + } + catch (Exception e) + { + if (_logger.IsError) _logger.Error("Error during calling BeaconBlockRoot contract", e); + } } } diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs deleted file mode 100644 index f642a12e0ec..00000000000 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconRootContract.cs +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Blockchain.Contracts; -using Nethermind.Core; -using Nethermind.Core.Specs; -using Nethermind.Crypto; -using Nethermind.Evm.Tracing; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.Int256; - -public interface IBeaconRootContract -{ - void Invoke(BlockHeader blockHeader, IReleaseSpec spec); -} -public sealed class BeaconRootContract : IBeaconRootContract -{ - private readonly ITransactionProcessor _transactionProcessor; - public BeaconRootContract(ITransactionProcessor transactionProcessor, Address contractAddress) - { - _transactionProcessor = transactionProcessor; - } - - public void Invoke(BlockHeader blockHeader, IReleaseSpec spec) - { - if (!spec.IsBeaconBlockRootAvailable || - blockHeader.IsGenesis || - blockHeader.ParentBeaconBlockRoot is null) return; - - var transaction = new Transaction() - { - Value = UInt256.Zero, - Data = blockHeader.ParentBeaconBlockRoot.Bytes.ToArray(), - To = Address.FromNumber(0x0b), - SenderAddress = Address.SystemUser, - GasLimit = long.MaxValue, // ToDO Unlimited gas will be probably changed to 30mln - GasPrice = UInt256.Zero, - }; - - transaction.Hash = transaction.CalculateHash(); - - _transactionProcessor.Execute(transaction, blockHeader, NullTxTracer.Instance); - } -} diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs index 58d82d3b7f2..d57eecf6ae3 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs @@ -4,7 +4,7 @@ using Nethermind.Core; using Nethermind.Core.Specs; -namespace Nethermind.Consensus.BeaconBlockRoot; +namespace Nethermind.Blockchain.BeaconBlockRoot; public interface IBeaconBlockRootHandler { void ScheduleSystemCall(Block block, IReleaseSpec spec); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs deleted file mode 100644 index ba6dfda4ab8..00000000000 --- a/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Consensus.BeaconBlockRoot; -using Nethermind.Core; -using Nethermind.Core.Specs; - -namespace Nethermind.Consensus.AuRa.BeaconBlockRoot; -internal class NullBeaconBlockRootHandler : IBeaconBlockRootHandler -{ - public static IBeaconBlockRootHandler Instance { get; } = new NullBeaconBlockRootHandler(); - public void ScheduleSystemCall(Block block, IReleaseSpec spec) - { - } -} diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index df62d2bd344..cf26cb630cd 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -5,8 +5,8 @@ using System.Collections.Generic; using System.Numerics; using Nethermind.Blockchain; +using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Blockchain.Receipts; -using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; @@ -67,7 +67,7 @@ public BlockProcessor( _withdrawalProcessor = withdrawalProcessor ?? new WithdrawalProcessor(stateProvider, logManager); _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); - _beaconBlockRootHandler = new BeaconBlockRootHandler(transactionProcessor); + _beaconBlockRootHandler = new BeaconBlockRootHandler(transactionProcessor, logManager); _receiptsTracer = new BlockReceiptsTracer(); } diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 9cac2d7f333..93a0f76b964 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -6,11 +6,11 @@ using System.Threading; using System.Threading.Tasks; using Nethermind.Blockchain; +using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Blockchain.Find; using Nethermind.Blockchain.Receipts; using Nethermind.Config; using Nethermind.Consensus; -using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; @@ -161,7 +161,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = TxProcessor = new TransactionProcessor(SpecProvider, State, virtualMachine, LogManager); BlockPreprocessorStep = new RecoverSignatures(EthereumEcdsa, TxPool, SpecProvider, LogManager); HeaderValidator = new HeaderValidator(BlockTree, Always.Valid, SpecProvider, LogManager); - BeaconBlockRootHandler = new BeaconBlockRootHandler(TxProcessor); + BeaconBlockRootHandler = new BeaconBlockRootHandler(TxProcessor, LogManager); new ReceiptCanonicalityMonitor(BlockTree, ReceiptStorage, LogManager); BlockValidator = new BlockValidator( @@ -178,7 +178,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = BloomStorage bloomStorage = new(new BloomConfig(), new MemDb(), new InMemoryDictionaryFileStoreFactory()); ReceiptsRecovery receiptsRecovery = new(new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance), SpecProvider); LogFinder = new LogFinder(BlockTree, ReceiptStorage, ReceiptStorage, bloomStorage, LimboLogs.Instance, receiptsRecovery); - BeaconBlockRootHandler = new BeaconBlockRootHandler(TxProcessor); + BeaconBlockRootHandler = new BeaconBlockRootHandler(TxProcessor, LogManager); BlockProcessor = CreateBlockProcessor(); BlockchainProcessor chainProcessor = new(BlockTree, BlockProcessor, BlockPreprocessorStep, StateReader, LogManager, Consensus.Processing.BlockchainProcessor.Options.Default); diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 6a170b29b07..6a45a73f70f 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -271,7 +271,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// Parent Beacon Block precompile /// bool IsEip4788Enabled { get; } - Address Eip4788ContractAddress { get; } + Address? Eip4788ContractAddress { get; } /// /// SELFDESTRUCT only in same transaction @@ -288,7 +288,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public ulong Eip4844TransitionTimestamp { get; } - // STATE related + // STATE related public bool ClearEmptyAccountWhenTouched => IsEip158Enabled; // VM diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index 225168c5b1d..6c975a30e12 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -156,6 +156,6 @@ public ulong Eip4844TransitionTimestamp public bool IsEip5656Enabled => _spec.IsEip5656Enabled; public bool IsEip6780Enabled => _spec.IsEip6780Enabled; public bool IsEip4788Enabled => _spec.IsEip4788Enabled; - public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; + public Address? Eip4788ContractAddress => _spec.Eip4788ContractAddress; } } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs index db732e5b66c..fca58477f4c 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs @@ -9,7 +9,6 @@ namespace Nethermind.Specs.ChainSpecStyle { public class ChainParameters { - //public IDictionary> RewriteBytecode { get; set; } public long? MaxCodeSize { get; set; } public long? MaxCodeSizeTransition { get; set; } public ulong? MaxCodeSizeTransitionTimestamp { get; set; } From 6814bf783da095933ee53498979be25f9691cf45 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 22 Aug 2023 15:55:30 +0200 Subject: [PATCH 008/551] cosmetic --- ...RpcModuleTests.TestAccountAbstractionRpcBlockchain.cs | 3 +-- .../Nethermind.Blockchain.Test/BlockProcessorTests.cs | 9 +++------ .../Producers/DevBlockproducerTests.cs | 3 +-- src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs | 3 +-- .../Nethermind.Clique.Test/CliqueBlockProducerTests.cs | 6 ++---- .../Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs | 4 +--- .../Nethermind.Consensus.Clique/CliquePlugin.cs | 3 +-- .../Nethermind.Consensus.Ethash/NethDevPlugin.cs | 3 +-- .../Nethermind.Consensus/Processing/BlockProcessor.cs | 5 ++--- .../Processing/ReadOnlyChainProcessingEnv.cs | 3 +-- .../Producers/BlockProducerEnvFactory.cs | 3 +-- .../Nethermind.Core.Test/Blockchain/TestBlockchain.cs | 3 +-- .../Nethermind.Init/Steps/InitializeBlockchain.cs | 3 +-- .../Modules/Trace/ParityStyleTracerTests.cs | 3 +-- .../EngineModuleTests.Setup.cs | 3 +-- .../MevRpcModuleTests.TestMevRpcBlockchain.cs | 3 +-- .../Nethermind.Synchronization.Test/SyncThreadTests.cs | 6 ++---- 17 files changed, 22 insertions(+), 44 deletions(-) diff --git a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs index c9e1e00376d..5b4f0c41941 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs @@ -191,8 +191,7 @@ protected override BlockProcessor CreateBlockProcessor() State, ReceiptStorage, NullWitnessCollector.Instance, - LogManager, - TxProcessor); + TxProcessor, LogManager); var parser = new AbiDefinitionParser(); parser.RegisterAbiTypeFactory(new AbiTuple()); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs index 96f36116df0..d20701b7c4b 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs @@ -49,8 +49,7 @@ public void Prepared_block_contains_author_field() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - LimboLogs.Instance, - transactionProcessor); + transactionProcessor, LimboLogs.Instance); BlockHeader header = Build.A.BlockHeader.WithAuthor(TestItem.AddressD).TestObject; Block block = Build.A.Block.WithHeader(header).TestObject; @@ -81,8 +80,7 @@ public void Can_store_a_witness() stateProvider, NullReceiptStorage.Instance, witnessCollector, - LimboLogs.Instance, - transactionProcessor); + transactionProcessor, LimboLogs.Instance); BlockHeader header = Build.A.BlockHeader.WithAuthor(TestItem.AddressD).TestObject; Block block = Build.A.Block.WithHeader(header).TestObject; @@ -111,8 +109,7 @@ public void Recovers_state_on_cancel() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - LimboLogs.Instance, - transactionProcessor); + transactionProcessor, LimboLogs.Instance); BlockHeader header = Build.A.BlockHeader.WithNumber(1).WithAuthor(TestItem.AddressD).TestObject; Block block = Build.A.Block.WithTransactions(1, MuirGlacier.Instance).WithHeader(header).TestObject; diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs index 5c3570e60ce..3fd8780da35 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs @@ -75,8 +75,7 @@ public void Test() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - LimboLogs.Instance, - txProcessor); + txProcessor, LimboLogs.Instance); BlockchainProcessor blockchainProcessor = new( blockTree, blockProcessor, diff --git a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs index 66a7e4f2f93..7e552e6ce69 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs @@ -80,8 +80,7 @@ public void Setup() stateProvider, NullReceiptStorage.Instance, new WitnessCollector(memDbProvider.StateDb, LimboLogs.Instance), - LimboLogs.Instance, - transactionProcessor); + transactionProcessor, LimboLogs.Instance); _blockchainProcessor = new BlockchainProcessor( _blockTree, blockProcessor, diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs index fe2f980abba..25f2d4ba1ae 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs @@ -132,8 +132,7 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - nodeLogManager, - transactionProcessor); + transactionProcessor, nodeLogManager); BlockchainProcessor processor = new(blockTree, blockProcessor, new AuthorRecoveryStep(snapshotManager), stateReader, nodeLogManager, BlockchainProcessor.Options.NoReceipts); processor.Start(); @@ -152,8 +151,7 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f minerStateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - nodeLogManager, - minerTransactionProcessor); + minerTransactionProcessor, nodeLogManager); BlockchainProcessor minerProcessor = new(blockTree, minerBlockProcessor, new AuthorRecoveryStep(snapshotManager), stateReader, nodeLogManager, BlockchainProcessor.Options.NoReceipts); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index f157cd53374..08a2732241c 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -54,10 +54,8 @@ public AuRaBlockProcessor( stateProvider, receiptStorage, NullWitnessCollector.Instance, - logManager, transactionProcessor, - withdrawalProcessor - ) + logManager, withdrawalProcessor) { _specProvider = specProvider; _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index 48e4261ab8d..3d38a76cc82 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -109,9 +109,8 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd producerEnv.StateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - getFromApi.LogManager, getFromApi.TransactionProcessor, - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager))); + getFromApi.LogManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager))); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( readOnlyBlockTree, diff --git a/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs b/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs index ba402d9bdf4..27aa5772c2e 100644 --- a/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs @@ -80,8 +80,7 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd producerEnv.StateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - getFromApi.LogManager, - getFromApi.TransactionProcessor); + getFromApi.TransactionProcessor, getFromApi.LogManager); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( readOnlyBlockTree, diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index cf26cb630cd..57e6eba56b9 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -46,16 +46,15 @@ public partial class BlockProcessor : IBlockProcessor /// private readonly BlockReceiptsTracer _receiptsTracer; - public BlockProcessor( - ISpecProvider? specProvider, + public BlockProcessor(ISpecProvider? specProvider, IBlockValidator? blockValidator, IRewardCalculator? rewardCalculator, IBlockProcessor.IBlockTransactionsExecutor? blockTransactionsExecutor, IWorldState? stateProvider, IReceiptStorage? receiptStorage, IWitnessCollector? witnessCollector, - ILogManager? logManager, ITransactionProcessor transactionProcessor, + ILogManager? logManager, IWithdrawalProcessor? withdrawalProcessor = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs index 46e886ef0c4..da3ae6593d6 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs @@ -49,8 +49,7 @@ public ReadOnlyChainProcessingEnv( StateProvider, receiptStorage, NullWitnessCollector.Instance, - logManager, - _txEnv.TransactionProcessor); + _txEnv.TransactionProcessor, logManager); _blockProcessingQueue = new BlockchainProcessor(_txEnv.BlockTree, BlockProcessor, recoveryStep, _txEnv.StateReader, logManager, BlockchainProcessor.Options.NoReceipts); BlockProcessingQueue = _blockProcessingQueue; diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index 2e433736853..4ca36aeeea8 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -148,9 +148,8 @@ protected virtual BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv re readOnlyTxProcessingEnv.StateProvider, receiptStorage, NullWitnessCollector.Instance, - logManager, readOnlyTxProcessingEnv.TransactionProcessor, - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager))); + logManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager))); } } diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 93a0f76b964..02112894a21 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -342,8 +342,7 @@ protected virtual IBlockProcessor CreateBlockProcessor() => State, ReceiptStorage, NullWitnessCollector.Instance, - LogManager, - TxProcessor); + TxProcessor, LogManager); public async Task WaitForNewHead() { diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs index 9e77fd992b1..3594ae7263c 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs @@ -364,8 +364,7 @@ protected virtual BlockProcessor CreateBlockProcessor() _api.WorldState, _api.ReceiptStorage, _api.WitnessCollector, - _api.LogManager, - _api.TransactionProcessor); + _api.TransactionProcessor, _api.LogManager); } // TODO: remove from here - move to consensus? diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs index 4829e4e46d3..011c29db7c1 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs @@ -74,8 +74,7 @@ public void Setup() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - LimboLogs.Instance, - transactionProcessor); + transactionProcessor, LimboLogs.Instance); RecoverSignatures txRecovery = new(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), NullTxPool.Instance, specProvider, LimboLogs.Instance); _processor = new BlockchainProcessor(_blockTree, blockProcessor, txRecovery, stateReader, LimboLogs.Instance, BlockchainProcessor.Options.NoReceipts); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index b4baf31456f..08181688292 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -223,8 +223,7 @@ protected override IBlockProcessor CreateBlockProcessor() State, ReceiptStorage, NullWitnessCollector.Instance, - LogManager, - TxProcessor); + TxProcessor, LogManager); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } diff --git a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs index 0b930c4136a..388d9a67573 100644 --- a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs @@ -202,8 +202,7 @@ protected override BlockProcessor CreateBlockProcessor() State, ReceiptStorage, NullWitnessCollector.Instance, - LogManager, - TxProcessor); + TxProcessor, LogManager); _tracerFactory = new TracerFactory( DbProvider, diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs index 0141cdc7d61..bcac1168147 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs @@ -298,8 +298,7 @@ private SyncTestContext CreateSyncManager(int index) stateProvider, receiptStorage, NullWitnessCollector.Instance, - logManager, - txProcessor); + txProcessor, logManager); RecoverSignatures step = new(ecdsa, txPool, specProvider, logManager); BlockchainProcessor processor = new(tree, blockProcessor, step, stateReader, logManager, @@ -321,8 +320,7 @@ private SyncTestContext CreateSyncManager(int index) devState, receiptStorage, NullWitnessCollector.Instance, - logManager, - devTxProcessor); + devTxProcessor, logManager); BlockchainProcessor devChainProcessor = new(tree, devBlockProcessor, step, stateReader, logManager, BlockchainProcessor.Options.NoReceipts); From ae3a4693353bfc10a4826ddf28d55de2bd159426 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 22 Aug 2023 17:38:51 +0200 Subject: [PATCH 009/551] fix tests --- .../Processing/BlockProcessor.cs | 3 ++- .../Blockchain/TestBlockchain.cs | 4 +++- .../EngineModuleTests.HelperFunctions.cs | 24 ++++++++----------- .../EngineModuleTests.Setup.cs | 2 ++ .../EngineModuleTests.V3.cs | 14 ++++------- 5 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 57e6eba56b9..97ae97e8c95 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -46,7 +46,8 @@ public partial class BlockProcessor : IBlockProcessor /// private readonly BlockReceiptsTracer _receiptsTracer; - public BlockProcessor(ISpecProvider? specProvider, + public BlockProcessor( + ISpecProvider? specProvider, IBlockValidator? blockValidator, IRewardCalculator? rewardCalculator, IBlockProcessor.IBlockTransactionsExecutor? blockTransactionsExecutor, diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 02112894a21..835ff6142bc 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -33,6 +33,7 @@ using Nethermind.Specs.Test; using Nethermind.State; using Nethermind.State.Repositories; +using Nethermind.Synchronization; using Nethermind.Trie.Pruning; using Nethermind.TxPool; using BlockTree = Nethermind.Blockchain.BlockTree; @@ -50,7 +51,6 @@ public class TestBlockchain : IDisposable public ITxPool TxPool { get; set; } = null!; public IDb CodeDb => DbProvider.CodeDb; public IBlockProcessor BlockProcessor { get; set; } = null!; - public IBeaconBlockRootHandler BeaconBlockRootHandler { get; set; } = null!; public IBlockchainProcessor BlockchainProcessor { get; set; } = null!; public IBlockPreprocessorStep BlockPreprocessorStep { get; set; } = null!; @@ -99,6 +99,8 @@ protected TestBlockchain() public IHeaderValidator HeaderValidator { get; set; } = null!; public IBlockValidator BlockValidator { get; set; } = null!; + + public IBeaconBlockRootHandler BeaconBlockRootHandler { get; set; } = null!; public BuildBlocksWhenRequested BlockProductionTrigger { get; } = new(); public IReadOnlyTrieStore ReadOnlyTrieStore { get; private set; } = null!; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index d5dc263ea38..916f5c065a0 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -85,13 +85,15 @@ private ExecutionPayload CreateParentBlockRequestOnHead(IBlockTree blockTree) } private static ExecutionPayload CreateBlockRequest(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, Transaction[]? transactions = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Keccak? beaconParentBlockRoot = null) - => CreateBlockRequestInternal(spec, state, parent, miner, withdrawals, transactions: transactions, beaconParentBlockRoot: beaconParentBlockRoot); + => CreateBlockRequestInternal(parent, miner, withdrawals, transactions: transactions, blobGasUsed: blobGasUsed, excessBlobGas: excessBlobGas, beaconParentBlockRoot: beaconParentBlockRoot); - private static ExecutionPayloadV3 CreateBlockRequestV3(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Keccak? parentBeaconBlockRoot = null) + private static ExecutionPayloadV3 CreateBlockRequestV3(MergeTestBlockchain chain, ExecutionPayload parent, Address miner, IList? withdrawals = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Keccak? parentBeaconBlockRoot = null) { - var blockRequestV3 = CreateBlockRequestInternal(spec, state, parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, beaconParentBlockRoot: parentBeaconBlockRoot); + var spec = chain.SpecProvider.GenesisSpec; + var state = chain.State; + var blockRequestV3 = CreateBlockRequestInternal(parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, beaconParentBlockRoot: parentBeaconBlockRoot); blockRequestV3.TryGetBlock(out Block? block); - //_beaconBlockRootHandler.ScheduleSystemCall(block); + chain.BeaconBlockRootHandler.ScheduleSystemCall(block, spec); state.Commit(spec); state.CommitTree(blockRequestV3.BlockNumber); @@ -103,7 +105,7 @@ private static ExecutionPayloadV3 CreateBlockRequestV3(IReleaseSpec spec, IWorld return blockRequestV3; } - private static T CreateBlockRequestInternal(IReleaseSpec spec, IWorldState state, ExecutionPayload parent, Address miner, IList? withdrawals = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Keccak? beaconParentBlockRoot = null) where T : ExecutionPayload, new() + private static T CreateBlockRequestInternal(ExecutionPayload parent, Address miner, IList? withdrawals = null, ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Keccak? beaconParentBlockRoot = null) where T : ExecutionPayload, new() { T blockRequest = new() { @@ -117,17 +119,11 @@ private static ExecutionPayloadV3 CreateBlockRequestV3(IReleaseSpec spec, IWorld LogsBloom = Bloom.Empty, Timestamp = parent.Timestamp + 1, Withdrawals = withdrawals, + ParentBeaconBlockRoot = beaconParentBlockRoot, + BlobGasUsed = blobGasUsed, + ExcessBlobGas = excessBlobGas }; - if (blockRequest is ExecutionPayloadV3 blockRequestV3) - { - blockRequestV3.ParentBeaconBlockRoot = beaconParentBlockRoot; - blockRequestV3.BlobGasUsed = blobGasUsed; - blockRequestV3.ExcessBlobGas = excessBlobGas; - } - - - blockRequest.SetTransactions(transactions ?? Array.Empty()); TryCalculateHash(blockRequest, out Keccak? hash); blockRequest.BlockHash = hash; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 08181688292..0689f8aa4df 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Nethermind.Api; using Nethermind.Blockchain; +using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Blockchain.Synchronization; using Nethermind.Config; using Nethermind.Consensus; @@ -214,6 +215,7 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT protected override IBlockProcessor CreateBlockProcessor() { + BeaconBlockRootHandler beaconBlockRootHandler = new BeaconBlockRootHandler(TxProcessor, LogManager); BlockValidator = CreateBlockValidator(); IBlockProcessor processor = new BlockProcessor( SpecProvider, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs index 6a2d3f8cc8d..188954860c3 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs @@ -68,8 +68,7 @@ public async Task NewPayloadV2_should_decline_pre_cancun_with_cancun_fields MergeTestBlockchain chain = await CreateBlockchain(releaseSpec: Shanghai.Instance); IEngineRpcModule rpcModule = CreateEngineModule(chain); ExecutionPayload executionPayload = CreateBlockRequest( - chain.SpecProvider.GenesisSpec, chain.State, - CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, withdrawals: Array.Empty(), + chain.SpecProvider.GenesisSpec, chain.State, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, withdrawals: Array.Empty(), blobGasUsed: blobGasUsed, excessBlobGas: excessBlobGas, beaconParentBlockRoot: parentBlockBeaconRoot); ResultWrapper result = await rpcModule.engine_newPayloadV2(executionPayload); @@ -83,7 +82,7 @@ public async Task NewPayloadV3_should_decline_pre_cancun_payloads() MergeTestBlockchain chain = await CreateBlockchain(releaseSpec: Shanghai.Instance); IEngineRpcModule rpcModule = CreateEngineModule(chain); ExecutionPayloadV3 executionPayload = CreateBlockRequestV3( - chain.SpecProvider.GenesisSpec, chain.State, + chain, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, withdrawals: Array.Empty()); ResultWrapper result = await rpcModule.engine_newPayloadV3(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot); @@ -187,8 +186,7 @@ public async Task NewPayloadV3_should_decline_null_blobversionedhashes() moduleProvider.Register(new SingletonModulePool(new SingletonFactory(rpcModule), true)); ExecutionPayloadV3 executionPayload = CreateBlockRequestV3( - chain.SpecProvider.GenesisSpec, chain.State, - CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, withdrawals: Array.Empty(), blobGasUsed: 0, excessBlobGas: 0, parentBeaconBlockRoot: TestItem.KeccakA); + chain, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, withdrawals: Array.Empty(), blobGasUsed: 0, excessBlobGas: 0, parentBeaconBlockRoot: TestItem.KeccakA); return (new(moduleProvider, LimboLogs.Instance, jsonRpcConfig), new(RpcEndpoint.Http), new(), executionPayload); } @@ -320,8 +318,7 @@ public async Task NewPayloadV3_should_verify_blob_versioned_hashes_again (byte[][] blobVersionedHashes, Transaction[] transactions) = BuildTransactionsAndBlobVersionedHashesList(hashesFirstBytes, transactionsAndFirstBytesOfTheirHashes, blockchain.SpecProvider.ChainId); ExecutionPayloadV3 executionPayload = CreateBlockRequestV3( - blockchain.SpecProvider.GenesisSpec, blockchain.State, - CreateParentBlockRequestOnHead(blockchain.BlockTree), TestItem.AddressD, withdrawals: Array.Empty(), 0, 0, transactions: transactions, parentBeaconBlockRoot: Keccak.Zero); + blockchain, CreateParentBlockRequestOnHead(blockchain.BlockTree), TestItem.AddressD, withdrawals: Array.Empty(), 0, 0, transactions: transactions, parentBeaconBlockRoot: Keccak.Zero); ResultWrapper result = await engineRpcModule.engine_newPayloadV3(executionPayload, blobVersionedHashes, Keccak.Zero); return result.Data.Status; @@ -426,8 +423,7 @@ public static IEnumerable CancunFieldsTestSource private async Task SendNewBlockV3(IEngineRpcModule rpc, MergeTestBlockchain chain, IList? withdrawals) { ExecutionPayloadV3 executionPayload = CreateBlockRequestV3( - chain.SpecProvider.GenesisSpec, chain.State, - CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, withdrawals, 0, 0, parentBeaconBlockRoot: TestItem.KeccakE); + chain, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, withdrawals, 0, 0, parentBeaconBlockRoot: TestItem.KeccakE); ResultWrapper executePayloadResult = await rpc.engine_newPayloadV3(executionPayload, Array.Empty(), executionPayload.ParentBeaconBlockRoot); executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); From bc8df776a81cbe54b526027b820ce99efeb51e5c Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 22 Aug 2023 17:44:54 +0200 Subject: [PATCH 010/551] cosmetic --- .../Nethermind.Blockchain/Contracts/CallableContract.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs b/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs index 45854c111da..41dff35a7c9 100644 --- a/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/Contracts/CallableContract.cs @@ -60,12 +60,6 @@ protected object[] Call(BlockHeader header, string functionName, Address sender, return objects; } - protected byte[] Call(BlockHeader header, Transaction transaction) - { - var result = CallCore(_transactionProcessor, header, string.Empty, transaction); - return result; - } - private bool TryCall(BlockHeader header, Transaction transaction, out byte[] result) { CallOutputTracer tracer = new(); From 9a2dfc60e9e915517cdec22fec4f1cb7a830de25 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 22 Aug 2023 17:47:03 +0200 Subject: [PATCH 011/551] Revert volta.cfg --- .../Nethermind.Runner/configs/volta.cfg | 61 +++++++------------ 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/src/Nethermind/Nethermind.Runner/configs/volta.cfg b/src/Nethermind/Nethermind.Runner/configs/volta.cfg index e5cadbf7152..d4be3de6cbd 100644 --- a/src/Nethermind/Nethermind.Runner/configs/volta.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/volta.cfg @@ -1,49 +1,34 @@ { "Init": { - "PubSubEnabled": true, - "WebSocketsEnabled": true, "IsMining": false, - "UseMemDb": true, "ChainSpecPath": "chainspec/volta.json", - "BaseDbPath": "nethermind_db/hive2", - "LogFileName": "/hive.logs.txt" - }, - "JsonRpc": { - "Enabled": true, - "Host": "0.0.0.0", - "Port": 8545, - "WebSocketsPort": 8546, - "EnabledModules": [ - "Debug", - "Eth", - "Subscribe", - "Trace", - "TxPool", - "Web3", - "Personal", - "Proof", - "Net", - "Parity", - "Health" - ], - "AdditionalRpcUrls": [ - "http://0.0.0.0:8550|http;ws|debug;net;eth;subscribe;engine;web3;client|no-auth", - "http://0.0.0.0:8551|http;ws|debug;net;eth;subscribe;engine;web3;client" - ] + "GenesisHash": "0xebd8b413ca7b7f84a8dd20d17519ce2b01954c74d94a0a739a3e416abe0e43e5", + "BaseDbPath": "nethermind_db/volta", + "LogFileName": "volta.logs.txt", + "MemoryHint": 768000000 }, "Network": { - "DiscoveryPort": 30303, - "P2PPort": 30303, - "ExternalIp": "127.0.0.1" + "ActivePeersMaxCount": 25 + }, + "Sync": { + "FastSync": true, + "PivotNumber": 24240000, + "PivotHash": "0x75855a940c344c195cf10406cae4986e1c9fb63f6a6f8b49cddd6824f653f440", + "PivotTotalDifficulty": "8248444574163548354352200484146061445330974699", + "FastBlocks": true, + "UseGethLimitsInFastBlocks": false, + "FastSyncCatchUpHeightDelta": 10000000000 + }, + "EthStats": { + "Name": "Nethermind Volta" + }, + "Metrics": { + "NodeName": "Volta" }, - "Hive": { - "ChainFile": "/chain.rlp", - "GenesisFilePath": "/genesis.json", - "BlocksDir": "/blocks", - "KeysDir": "/keys" + "Mining": { + "MinGasPrice": 1 }, "Merge": { - "Enabled": true, - "TerminalTotalDifficulty": "0" + "Enabled": false } } From 5f709f0badce3f8a6c4f1c2665f579808862a7dc Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 23 Aug 2023 12:19:28 +0200 Subject: [PATCH 012/551] fix build --- src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs | 4 ++-- .../Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs index dc3ed6ce71c..1793cf96ac9 100644 --- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs @@ -161,8 +161,8 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? stateProvider, receiptStorage, NullWitnessCollector.Instance, - _logManager, - txProcessor); + txProcessor, + _logManager); IBlockchainProcessor blockchainProcessor = new BlockchainProcessor( blockTree, diff --git a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs index be91ea3634e..df9117b4f8d 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs @@ -79,7 +79,7 @@ TransactionProcessor transactionProcessor IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor = new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider); BlockProcessor blockProcessor = new(specProvider, Always.Valid, new RewardCalculator(specProvider), transactionsExecutor, - stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, LimboLogs.Instance, transactionProcessor); + stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, transactionProcessor, LimboLogs.Instance); EthereumEcdsa ecdsa = new(specProvider.ChainId, LimboLogs.Instance); BlockchainProcessor blockchainProcessor = new( From 0e0ae945647a522ceea479cfdfa2325981832b08 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 24 Aug 2023 17:16:34 +0200 Subject: [PATCH 013/551] WIP --- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 6 +- .../IBeaconBlockRootHandler.cs | 3 +- .../Processing/BlockProcessor.cs | 2 +- .../TransactionProcessor.cs | 2 +- .../EngineModuleTests.HelperFunctions.cs | 2 +- .../Nethermind.Runner/configs/volta.cfg | 62 ++++++++++++------- .../SystemTransactionReleaseSpec.cs | 2 +- 7 files changed, 50 insertions(+), 29 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index 296b18312f1..60982ce0858 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -3,12 +3,15 @@ using System; using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Evm.Tracing; using Nethermind.Evm.TransactionProcessing; using Nethermind.Int256; using Nethermind.Logging; +using Nethermind.State; namespace Nethermind.Blockchain.BeaconBlockRoot; public class BeaconBlockRootHandler : IBeaconBlockRootHandler @@ -23,7 +26,7 @@ public BeaconBlockRootHandler( _processor = processor; _logger = logManager.GetClassLogger(); } - public void ScheduleSystemCall(Block block, IReleaseSpec spec) + public void ScheduleSystemCall(Block block, IReleaseSpec spec, IWorldState stateProvider) { BlockHeader? header = block.Header; if (!spec.IsBeaconBlockRootAvailable || @@ -49,5 +52,6 @@ public void ScheduleSystemCall(Block block, IReleaseSpec spec) { if (_logger.IsError) _logger.Error("Error during calling BeaconBlockRoot contract", e); } + } } diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs index d57eecf6ae3..9d9726f265b 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs @@ -3,9 +3,10 @@ using Nethermind.Core; using Nethermind.Core.Specs; +using Nethermind.State; namespace Nethermind.Blockchain.BeaconBlockRoot; public interface IBeaconBlockRootHandler { - void ScheduleSystemCall(Block block, IReleaseSpec spec); + void ScheduleSystemCall(Block block, IReleaseSpec spec, IWorldState stateProvider); } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 97ae97e8c95..cdc3a2514f3 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -227,7 +227,7 @@ protected virtual TxReceipt[] ProcessBlock( _receiptsTracer.SetOtherTracer(blockTracer); _receiptsTracer.StartNewBlockTrace(block); - _beaconBlockRootHandler.ScheduleSystemCall(block, spec); + _beaconBlockRootHandler.ScheduleSystemCall(block,spec, _stateProvider); TxReceipt[] receipts = _blockTransactionsExecutor.ProcessTransactions(block, options, _receiptsTracer, spec); diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index da259dd9a1a..d9ee8a83641 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -477,7 +477,7 @@ protected virtual bool ExecuteEVMCall( // Fixes eth_estimateGas. // If sender is SystemUser subtracting value will cause InsufficientBalanceException - if (validate || !tx.IsSystem()) + if (validate && !tx.IsSystem()) _worldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); try diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index 916f5c065a0..c5fd7d5a1f6 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -93,7 +93,7 @@ private static ExecutionPayloadV3 CreateBlockRequestV3(MergeTestBlockchain chain var state = chain.State; var blockRequestV3 = CreateBlockRequestInternal(parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, beaconParentBlockRoot: parentBeaconBlockRoot); blockRequestV3.TryGetBlock(out Block? block); - chain.BeaconBlockRootHandler.ScheduleSystemCall(block, spec); + chain.BeaconBlockRootHandler.ScheduleSystemCall(block, spec, null); state.Commit(spec); state.CommitTree(blockRequestV3.BlockNumber); diff --git a/src/Nethermind/Nethermind.Runner/configs/volta.cfg b/src/Nethermind/Nethermind.Runner/configs/volta.cfg index d4be3de6cbd..2db376ddc92 100644 --- a/src/Nethermind/Nethermind.Runner/configs/volta.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/volta.cfg @@ -1,34 +1,50 @@ { "Init": { + "PubSubEnabled": true, + "WebSocketsEnabled": true, "IsMining": false, + "UseMemDb": true, "ChainSpecPath": "chainspec/volta.json", - "GenesisHash": "0xebd8b413ca7b7f84a8dd20d17519ce2b01954c74d94a0a739a3e416abe0e43e5", - "BaseDbPath": "nethermind_db/volta", - "LogFileName": "volta.logs.txt", - "MemoryHint": 768000000 + "BaseDbPath": "nethermind_db/hive2", + "LogFileName": "/hive.logs.txt" }, - "Network": { - "ActivePeersMaxCount": 25 - }, - "Sync": { - "FastSync": true, - "PivotNumber": 24240000, - "PivotHash": "0x75855a940c344c195cf10406cae4986e1c9fb63f6a6f8b49cddd6824f653f440", - "PivotTotalDifficulty": "8248444574163548354352200484146061445330974699", - "FastBlocks": true, - "UseGethLimitsInFastBlocks": false, - "FastSyncCatchUpHeightDelta": 10000000000 + "JsonRpc": { + "Enabled": true, + "Host": "0.0.0.0", + "Port": 8545, + "WebSocketsPort": 8546, + "EnabledModules": [ + "Debug", + "Eth", + "Subscribe", + "Trace", + "TxPool", + "Web3", + "Personal", + "Proof", + "Net", + "Parity", + "Health" + ], + "AdditionalRpcUrls": [ + "http://0.0.0.0:8550|http;ws|debug;net;eth;subscribe;engine;web3;client|no-auth", + "http://0.0.0.0:8551|http;ws|debug;net;eth;subscribe;engine;web3;client" + ] }, - "EthStats": { - "Name": "Nethermind Volta" - }, - "Metrics": { - "NodeName": "Volta" + "Network": { + "DiscoveryPort": 30303, + "P2PPort": 30303, + "ExternalIp": "127.0.0.1" }, - "Mining": { - "MinGasPrice": 1 + "Hive": { + "ChainFile": "/chain.rlp", + "GenesisFilePath": "/genesis.json", + "BlocksDir": "/blocks", + "KeysDir": "/keys" }, "Merge": { - "Enabled": false + "Enabled": true, + "TerminalTotalDifficulty": "0" } } + diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index b4c0c4d29e8..bbf82baf015 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -51,7 +51,7 @@ public SystemTransactionReleaseSpec(IReleaseSpec spec) public bool IsEip155Enabled => _spec.IsEip155Enabled; - public bool IsEip158Enabled => false; + public bool IsEip158Enabled => _spec.IsEip158Enabled; public bool IsEip160Enabled => _spec.IsEip160Enabled; From 1527828ab2daff84558cf04d1ae6c94d2dae2fd9 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 25 Aug 2023 12:17:19 +0200 Subject: [PATCH 014/551] Special handling for System account --- .../TransactionProcessing/TransactionProcessor.cs | 2 +- src/Nethermind/Nethermind.State/StateProvider.cs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index d9ee8a83641..da259dd9a1a 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -477,7 +477,7 @@ protected virtual bool ExecuteEVMCall( // Fixes eth_estimateGas. // If sender is SystemUser subtracting value will cause InsufficientBalanceException - if (validate && !tx.IsSystem()) + if (validate || !tx.IsSystem()) _worldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); try diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 9569fe427a6..3a26c185f0f 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -203,6 +203,11 @@ Account GetThroughCacheCheckExists() Account result = GetThroughCache(address); if (result is null) { + if (address == Address.SystemUser) + { + return Account.TotallyEmpty; + } + if (_logger.IsError) _logger.Error("Updating balance of a non-existing account"); throw new InvalidOperationException("Updating balance of a non-existing account"); } From 3e595d33bef3fa371d4b44414be2ebc58d217e87 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 25 Aug 2023 12:23:52 +0200 Subject: [PATCH 015/551] better solution? --- .../TransactionProcessing/TransactionProcessor.cs | 2 +- src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs | 2 +- src/Nethermind/Nethermind.State/StateProvider.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index da259dd9a1a..be634f15d33 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -98,7 +98,7 @@ public void Trace(Transaction transaction, BlockHeader block, ITxTracer txTracer protected virtual void Execute(Transaction tx, BlockHeader header, ITxTracer tracer, ExecutionOptions opts) { IReleaseSpec spec = _specProvider.GetSpec(header); - if (tx.IsSystem()) + if (tx.IsSystem() && spec.IsEip4788Enabled) // ToDo add comment spec = new SystemTransactionReleaseSpec(spec); // restore is CallAndRestore - previous call, we will restore state after the execution diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index bbf82baf015..b4c0c4d29e8 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -51,7 +51,7 @@ public SystemTransactionReleaseSpec(IReleaseSpec spec) public bool IsEip155Enabled => _spec.IsEip155Enabled; - public bool IsEip158Enabled => _spec.IsEip158Enabled; + public bool IsEip158Enabled => false; public bool IsEip160Enabled => _spec.IsEip160Enabled; diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 3a26c185f0f..e1c3e87c144 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -203,7 +203,7 @@ Account GetThroughCacheCheckExists() Account result = GetThroughCache(address); if (result is null) { - if (address == Address.SystemUser) + if (address == Address.SystemUser) // ToDo add comment { return Account.TotallyEmpty; } From ef38eab17922e60f080488b1de07fe246cacc7fe Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 25 Aug 2023 12:31:11 +0200 Subject: [PATCH 016/551] fix --- .../TransactionProcessing/TransactionProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index be634f15d33..e140c40877a 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -98,7 +98,7 @@ public void Trace(Transaction transaction, BlockHeader block, ITxTracer txTracer protected virtual void Execute(Transaction tx, BlockHeader header, ITxTracer tracer, ExecutionOptions opts) { IReleaseSpec spec = _specProvider.GetSpec(header); - if (tx.IsSystem() && spec.IsEip4788Enabled) // ToDo add comment + if (tx.IsSystem() && !spec.IsEip4788Enabled) // ToDo add comment spec = new SystemTransactionReleaseSpec(spec); // restore is CallAndRestore - previous call, we will restore state after the execution From 008abef0a5e5e17718c3178892e478d93c5892e3 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 25 Aug 2023 13:01:20 +0200 Subject: [PATCH 017/551] even better solution? --- src/Nethermind/Nethermind.State/StateProvider.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index e1c3e87c144..a16c81733bc 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -203,10 +203,10 @@ Account GetThroughCacheCheckExists() Account result = GetThroughCache(address); if (result is null) { - if (address == Address.SystemUser) // ToDo add comment - { - return Account.TotallyEmpty; - } + // if (address == Address.SystemUser) // ToDo add comment alternative solution + // { + // return Account.TotallyEmpty; + // } if (_logger.IsError) _logger.Error("Updating balance of a non-existing account"); throw new InvalidOperationException("Updating balance of a non-existing account"); @@ -247,12 +247,18 @@ Account GetThroughCacheCheckExists() public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) { + if (balanceChange == UInt256.Zero) // ToDo Add comment + return; + _needsStateRootUpdate = true; SetNewBalance(address, balanceChange, releaseSpec, true); } public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) { + if (balanceChange == UInt256.Zero) // ToDo add comment + return; + _needsStateRootUpdate = true; SetNewBalance(address, balanceChange, releaseSpec, false); } From 3b03a83984dfee9e3eb0cc63751139ebd27bad8c Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 25 Aug 2023 13:17:37 +0200 Subject: [PATCH 018/551] alternative solution --- src/Nethermind/Nethermind.State/StateProvider.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index a16c81733bc..82e62d367a4 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -218,7 +218,7 @@ Account GetThroughCacheCheckExists() bool isZero = balanceChange.IsZero; if (isZero) { - if (releaseSpec.IsEip158Enabled) + if (releaseSpec.IsEip158Enabled && address != Address.SystemUser) // ToDo comment { Account touched = GetThroughCacheCheckExists(); if (_logger.IsTrace) _logger.Trace($" Touch {address} (balance)"); @@ -247,18 +247,12 @@ Account GetThroughCacheCheckExists() public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) { - if (balanceChange == UInt256.Zero) // ToDo Add comment - return; - _needsStateRootUpdate = true; SetNewBalance(address, balanceChange, releaseSpec, true); } public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) { - if (balanceChange == UInt256.Zero) // ToDo add comment - return; - _needsStateRootUpdate = true; SetNewBalance(address, balanceChange, releaseSpec, false); } From a2bae6ef06e37e0ed84fa04cc5fc84020e276bf6 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 25 Aug 2023 18:16:24 +0200 Subject: [PATCH 019/551] final solution? --- .../Nethermind.Core/Specs/IReleaseSpec.cs | 8 --- .../OverridableReleaseSpec.cs | 5 -- .../SystemTransactionReleaseSpec.cs | 5 -- .../Nethermind.State/StateProvider.cs | 49 +++++++++++++------ 4 files changed, 34 insertions(+), 33 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 6a45a73f70f..46f231f6396 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -201,14 +201,6 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// bool IsEip2930Enabled { get; } - /// - /// Should EIP158 be ignored for this account. - /// - /// THis is needed for SystemUser account compatibility with Parity. - /// - /// - bool IsEip158IgnoredAccount(Address address); - /// /// BaseFee opcode /// diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index 6c975a30e12..a50127a94c2 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -115,11 +115,6 @@ public OverridableReleaseSpec(IReleaseSpec spec) public bool IsEip4844Enabled => _spec.IsEip4844Enabled; public bool IsEip3607Enabled { get; set; } - public bool IsEip158IgnoredAccount(Address address) - { - return _spec.IsEip158IgnoredAccount(address); - } - private long? _overridenEip1559TransitionBlock; public long Eip1559TransitionBlock { diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index b4c0c4d29e8..a3c20db6f39 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -110,11 +110,6 @@ public SystemTransactionReleaseSpec(IReleaseSpec spec) public bool IsEip3541Enabled => _spec.IsEip3541Enabled; public bool IsEip3607Enabled => _spec.IsEip3607Enabled; - public bool IsEip158IgnoredAccount(Address address) - { - return _spec.IsEip158IgnoredAccount(address); - } - public long Eip1559TransitionBlock => _spec.Eip1559TransitionBlock; public ulong WithdrawalTimestamp => _spec.WithdrawalTimestamp; diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 82e62d367a4..42d7270ea63 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -189,7 +189,7 @@ public void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec if (_logger.IsTrace) _logger.Trace($" Touch {address} (code hash)"); if (account.IsEmpty) { - PushTouch(address, account, spec, account.Balance.IsZero); + PushTouch(address, account); } } } @@ -198,18 +198,18 @@ private void SetNewBalance(Address address, in UInt256 balanceChange, IReleaseSp { _needsStateRootUpdate = true; - Account GetThroughCacheCheckExists() + void ThrowNotExistingAccount() + { + if (_logger.IsError) _logger.Error("Updating balance of a non-existing account"); + throw new InvalidOperationException("Updating balance of a non-existing account"); + } + + Account? GetThroughCacheCheckExists() { Account result = GetThroughCache(address); if (result is null) { - // if (address == Address.SystemUser) // ToDo add comment alternative solution - // { - // return Account.TotallyEmpty; - // } - - if (_logger.IsError) _logger.Error("Updating balance of a non-existing account"); - throw new InvalidOperationException("Updating balance of a non-existing account"); + ThrowNotExistingAccount(); } return result; @@ -218,13 +218,21 @@ Account GetThroughCacheCheckExists() bool isZero = balanceChange.IsZero; if (isZero) { - if (releaseSpec.IsEip158Enabled && address != Address.SystemUser) // ToDo comment + if (releaseSpec.IsEip158Enabled) { - Account touched = GetThroughCacheCheckExists(); + Account touched = GetThroughCache(address); + bool accountExists = true; + if (touched is null) + { + accountExists = false; + if (address != Address.SystemUser) // ToDo comment + ThrowNotExistingAccount(); + } + if (_logger.IsTrace) _logger.Trace($" Touch {address} (balance)"); - if (touched.IsEmpty) + if (accountExists && touched.IsEmpty) { - PushTouch(address, touched, releaseSpec, true); + PushTouch(address, touched); } } @@ -245,6 +253,18 @@ Account GetThroughCacheCheckExists() PushUpdate(address, changedAccount); } + // ToDo comment + private void HandleSystemUserAccount() + { + Account account = GetThroughCache(Address.SystemUser); + if (account == null) + { + return; + } + + Push(ChangeType.Touch, Address.SystemUser, account); + } + public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) { _needsStateRootUpdate = true; @@ -725,9 +745,8 @@ private void PushUpdate(Address address, Account account) Push(ChangeType.Update, address, account); } - private void PushTouch(Address address, Account account, IReleaseSpec releaseSpec, bool isZero) + private void PushTouch(Address address, Account account) { - if (isZero && releaseSpec.IsEip158IgnoredAccount(address)) return; Push(ChangeType.Touch, address, account); } From 67df5df3aa67445f3bcd5e907f0db9fc602f5a4a Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 28 Aug 2023 14:04:13 +0200 Subject: [PATCH 020/551] one more try --- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 4 +++- .../Processing/BlockProcessor.cs | 1 + .../Properties/launchSettings.json | 2 +- .../SystemTransactionReleaseSpec.cs | 2 -- src/Nethermind/Nethermind.State/StateProvider.cs | 15 +++++---------- 5 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index 60982ce0858..74acc857aa5 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -19,6 +19,9 @@ public class BeaconBlockRootHandler : IBeaconBlockRootHandler private readonly ITransactionProcessor _processor; private static Address Default4788Address = Address.FromNumber(0x0b); // ToDo this address can change in next version of the spec private readonly ILogger _logger; + + public static UInt256 HISTORICAL_ROOTS_LENGTH = 98304; + private static readonly Address DefaultPbbrContractAddress = Address.FromNumber(0x0b); public BeaconBlockRootHandler( ITransactionProcessor processor, ILogManager logManager) @@ -52,6 +55,5 @@ public void ScheduleSystemCall(Block block, IReleaseSpec spec, IWorldState state { if (_logger.IsError) _logger.Error("Error during calling BeaconBlockRoot contract", e); } - } } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index cdc3a2514f3..61e0818d752 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -111,6 +111,7 @@ the previous head state.*/ // be cautious here as AuRa depends on processing PreCommitBlock(newBranchStateRoot, suggestedBlocks[i].Number); + if (notReadOnly) { _witnessCollector.Persist(processedBlock.Hash!); diff --git a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json index 1c393b255df..85ca5395289 100644 --- a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json +++ b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json @@ -28,7 +28,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" } }, - "Gnosis": { + "Gnosis": { "commandName": "Project", "commandLineArgs": "-c gnosis -dd %NETHERMIND_DATA_DIR%", "environmentVariables": { diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index a3c20db6f39..195bd2b679f 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -112,9 +112,7 @@ public SystemTransactionReleaseSpec(IReleaseSpec spec) public long Eip1559TransitionBlock => _spec.Eip1559TransitionBlock; public ulong WithdrawalTimestamp => _spec.WithdrawalTimestamp; - public ulong Eip4844TransitionTimestamp => _spec.Eip4844TransitionTimestamp; - public Address Eip1559FeeCollector => _spec.Eip1559FeeCollector; public bool IsEip1153Enabled => _spec.IsEip1153Enabled; public bool IsEip3651Enabled => _spec.IsEip3651Enabled; diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 42d7270ea63..d0099527d9e 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -220,17 +220,12 @@ void ThrowNotExistingAccount() { if (releaseSpec.IsEip158Enabled) { - Account touched = GetThroughCache(address); - bool accountExists = true; - if (touched is null) - { - accountExists = false; - if (address != Address.SystemUser) // ToDo comment - ThrowNotExistingAccount(); - } + if (address == Address.SystemUser) // ToDo add comment + return; + Account touched = GetThroughCacheCheckExists(); if (_logger.IsTrace) _logger.Trace($" Touch {address} (balance)"); - if (accountExists && touched.IsEmpty) + if (touched!.IsEmpty) { PushTouch(address, touched); } @@ -241,7 +236,7 @@ void ThrowNotExistingAccount() Account account = GetThroughCacheCheckExists(); - if (isSubtracting && account.Balance < balanceChange) + if (isSubtracting && account!.Balance < balanceChange) { throw new InsufficientBalanceException(address); } From bb5b89cee00b2899beaee7990fdca0db17de0a7e Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 28 Aug 2023 14:25:29 +0200 Subject: [PATCH 021/551] revert volta.cfg --- .../Nethermind.Runner/configs/volta.cfg | 62 +++++++------------ 1 file changed, 23 insertions(+), 39 deletions(-) diff --git a/src/Nethermind/Nethermind.Runner/configs/volta.cfg b/src/Nethermind/Nethermind.Runner/configs/volta.cfg index 2db376ddc92..1c4cb850980 100644 --- a/src/Nethermind/Nethermind.Runner/configs/volta.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/volta.cfg @@ -1,50 +1,34 @@ { "Init": { - "PubSubEnabled": true, - "WebSocketsEnabled": true, "IsMining": false, - "UseMemDb": true, "ChainSpecPath": "chainspec/volta.json", - "BaseDbPath": "nethermind_db/hive2", - "LogFileName": "/hive.logs.txt" - }, - "JsonRpc": { - "Enabled": true, - "Host": "0.0.0.0", - "Port": 8545, - "WebSocketsPort": 8546, - "EnabledModules": [ - "Debug", - "Eth", - "Subscribe", - "Trace", - "TxPool", - "Web3", - "Personal", - "Proof", - "Net", - "Parity", - "Health" - ], - "AdditionalRpcUrls": [ - "http://0.0.0.0:8550|http;ws|debug;net;eth;subscribe;engine;web3;client|no-auth", - "http://0.0.0.0:8551|http;ws|debug;net;eth;subscribe;engine;web3;client" - ] + "GenesisHash": "0xebd8b413ca7b7f84a8dd20d17519ce2b01954c74d94a0a739a3e416abe0e43e5", + "BaseDbPath": "nethermind_db/volta", + "LogFileName": "volta.logs.txt", + "MemoryHint": 768000000 }, "Network": { - "DiscoveryPort": 30303, - "P2PPort": 30303, - "ExternalIp": "127.0.0.1" + "ActivePeersMaxCount": 25 + }, + "Sync": { + "FastSync": true, + "PivotNumber": 24440000, + "PivotHash": "0x27e0ee1c162acde543c2874439d165567658ed86c07a38b1595ad16d243182eb", + "PivotTotalDifficulty": "8316501047547736047044875405632415087621725609", + "FastBlocks": true, + "UseGethLimitsInFastBlocks": false, + "FastSyncCatchUpHeightDelta": 10000000000 + }, + "EthStats": { + "Name": "Nethermind Volta" + }, + "Metrics": { + "NodeName": "Volta" }, - "Hive": { - "ChainFile": "/chain.rlp", - "GenesisFilePath": "/genesis.json", - "BlocksDir": "/blocks", - "KeysDir": "/keys" + "Mining": { + "MinGasPrice": 1 }, "Merge": { - "Enabled": true, - "TerminalTotalDifficulty": "0" + "Enabled": false } } - From 1df46d039448bf9f63339d14e0fee6378d6bf00b Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 29 Aug 2023 12:38:56 +0200 Subject: [PATCH 022/551] cleanup --- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 8 +++----- src/Nethermind/Nethermind.State/StateProvider.cs | 12 ------------ 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index 74acc857aa5..c0fb36615ef 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -17,11 +17,9 @@ namespace Nethermind.Blockchain.BeaconBlockRoot; public class BeaconBlockRootHandler : IBeaconBlockRootHandler { private readonly ITransactionProcessor _processor; - private static Address Default4788Address = Address.FromNumber(0x0b); // ToDo this address can change in next version of the spec + private static Address Default4788Address = Address.FromNumber(0x0b); private readonly ILogger _logger; - - public static UInt256 HISTORICAL_ROOTS_LENGTH = 98304; - private static readonly Address DefaultPbbrContractAddress = Address.FromNumber(0x0b); + private const long GasLimit = 30_000_000L; public BeaconBlockRootHandler( ITransactionProcessor processor, ILogManager logManager) @@ -42,7 +40,7 @@ public void ScheduleSystemCall(Block block, IReleaseSpec spec, IWorldState state Data = header.ParentBeaconBlockRoot.Bytes.ToArray(), To = spec.Eip4788ContractAddress ?? Default4788Address, SenderAddress = Address.SystemUser, - GasLimit = long.MaxValue, // ToDO Unlimited gas will be probably changed to 30mln + GasLimit = GasLimit, GasPrice = UInt256.Zero, }; transaction.Hash = transaction.CalculateHash(); diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index d0099527d9e..4cb553d63cd 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -248,18 +248,6 @@ void ThrowNotExistingAccount() PushUpdate(address, changedAccount); } - // ToDo comment - private void HandleSystemUserAccount() - { - Account account = GetThroughCache(Address.SystemUser); - if (account == null) - { - return; - } - - Push(ChangeType.Touch, Address.SystemUser, account); - } - public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) { _needsStateRootUpdate = true; From 95a9b4a7e7de18e1d84268e128858a5c2a70c55a Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 29 Aug 2023 12:44:17 +0200 Subject: [PATCH 023/551] cosmetic --- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 2 +- .../BeaconBlockRoot/IBeaconBlockRootHandler.cs | 2 +- .../Nethermind.Consensus/Processing/BlockProcessor.cs | 2 +- .../EngineModuleTests.HelperFunctions.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index c0fb36615ef..29e0ad85208 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -27,7 +27,7 @@ public BeaconBlockRootHandler( _processor = processor; _logger = logManager.GetClassLogger(); } - public void ScheduleSystemCall(Block block, IReleaseSpec spec, IWorldState stateProvider) + public void ScheduleSystemCall(Block block, IReleaseSpec spec) { BlockHeader? header = block.Header; if (!spec.IsBeaconBlockRootAvailable || diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs index 9d9726f265b..2b5b84081c3 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs @@ -8,5 +8,5 @@ namespace Nethermind.Blockchain.BeaconBlockRoot; public interface IBeaconBlockRootHandler { - void ScheduleSystemCall(Block block, IReleaseSpec spec, IWorldState stateProvider); + void ScheduleSystemCall(Block block, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 61e0818d752..d08c3344900 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -228,7 +228,7 @@ protected virtual TxReceipt[] ProcessBlock( _receiptsTracer.SetOtherTracer(blockTracer); _receiptsTracer.StartNewBlockTrace(block); - _beaconBlockRootHandler.ScheduleSystemCall(block,spec, _stateProvider); + _beaconBlockRootHandler.ScheduleSystemCall(block, spec); TxReceipt[] receipts = _blockTransactionsExecutor.ProcessTransactions(block, options, _receiptsTracer, spec); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index c5fd7d5a1f6..916f5c065a0 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -93,7 +93,7 @@ private static ExecutionPayloadV3 CreateBlockRequestV3(MergeTestBlockchain chain var state = chain.State; var blockRequestV3 = CreateBlockRequestInternal(parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, beaconParentBlockRoot: parentBeaconBlockRoot); blockRequestV3.TryGetBlock(out Block? block); - chain.BeaconBlockRootHandler.ScheduleSystemCall(block, spec, null); + chain.BeaconBlockRootHandler.ScheduleSystemCall(block, spec); state.Commit(spec); state.CommitTree(blockRequestV3.BlockNumber); From 4a7d599a1f86b40247a3600fb6901957ea9ce6c6 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 6 Sep 2023 09:33:49 +0100 Subject: [PATCH 024/551] apply suggestions --- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 2 +- .../BeaconBlockRoot/IBeaconBlockRootHandler.cs | 2 +- .../BlockProcessor.BlockValidationTransactionsExecutor.cs | 2 +- .../Nethermind.Consensus/Processing/BlockProcessor.cs | 7 ++++--- .../EngineModuleTests.HelperFunctions.cs | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index 29e0ad85208..76df2db5a5a 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -27,7 +27,7 @@ public BeaconBlockRootHandler( _processor = processor; _logger = logManager.GetClassLogger(); } - public void ScheduleSystemCall(Block block, IReleaseSpec spec) + public void ExecuteSystemCall(Block block, IReleaseSpec spec) { BlockHeader? header = block.Header; if (!spec.IsBeaconBlockRootAvailable || diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs index 2b5b84081c3..8ed27077c04 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs @@ -8,5 +8,5 @@ namespace Nethermind.Blockchain.BeaconBlockRoot; public interface IBeaconBlockRootHandler { - void ScheduleSystemCall(Block block, IReleaseSpec spec); + void ExecuteSystemCall(Block block, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs index bd3bb03e48f..958043cadc9 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs @@ -15,7 +15,7 @@ public partial class BlockProcessor { public class BlockValidationTransactionsExecutor : IBlockProcessor.IBlockTransactionsExecutor { - public readonly ITransactionProcessorAdapter _transactionProcessor; + private readonly ITransactionProcessorAdapter _transactionProcessor; private readonly IWorldState _stateProvider; public BlockValidationTransactionsExecutor(ITransactionProcessor transactionProcessor, IWorldState stateProvider) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index d08c3344900..001ff68ea88 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -56,7 +56,8 @@ public BlockProcessor( IWitnessCollector? witnessCollector, ITransactionProcessor transactionProcessor, ILogManager? logManager, - IWithdrawalProcessor? withdrawalProcessor = null) + IWithdrawalProcessor? withdrawalProcessor = null, + IBeaconBlockRootHandler? beaconBlockRootHandler = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); @@ -67,7 +68,7 @@ public BlockProcessor( _withdrawalProcessor = withdrawalProcessor ?? new WithdrawalProcessor(stateProvider, logManager); _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); - _beaconBlockRootHandler = new BeaconBlockRootHandler(transactionProcessor, logManager); + _beaconBlockRootHandler = beaconBlockRootHandler ?? new BeaconBlockRootHandler(transactionProcessor, logManager); _receiptsTracer = new BlockReceiptsTracer(); } @@ -228,7 +229,7 @@ protected virtual TxReceipt[] ProcessBlock( _receiptsTracer.SetOtherTracer(blockTracer); _receiptsTracer.StartNewBlockTrace(block); - _beaconBlockRootHandler.ScheduleSystemCall(block, spec); + _beaconBlockRootHandler.ExecuteSystemCall(block, spec); TxReceipt[] receipts = _blockTransactionsExecutor.ProcessTransactions(block, options, _receiptsTracer, spec); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index 916f5c065a0..c64bf63d880 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -93,7 +93,7 @@ private static ExecutionPayloadV3 CreateBlockRequestV3(MergeTestBlockchain chain var state = chain.State; var blockRequestV3 = CreateBlockRequestInternal(parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, beaconParentBlockRoot: parentBeaconBlockRoot); blockRequestV3.TryGetBlock(out Block? block); - chain.BeaconBlockRootHandler.ScheduleSystemCall(block, spec); + chain.BeaconBlockRootHandler.ExecuteSystemCall(block, spec); state.Commit(spec); state.CommitTree(blockRequestV3.BlockNumber); From ded036ebf46af99911a7ae8606887fd95cb3e8ea Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 7 Sep 2023 13:35:18 +0200 Subject: [PATCH 025/551] further experiments --- .../Nethermind.Core/Specs/IReleaseSpec.cs | 2 + .../TransactionProcessor.cs | 138 ++++++++++++------ .../Nethermind.Runner/configs/volta.cfg | 61 +++++--- .../SystemTransactionReleaseSpec.cs | 2 + .../Nethermind.State/StateProvider.cs | 3 - src/Nethermind/Nethermind.State/StateTree.cs | 2 +- .../Nethermind.Trie/PatriciaTree.cs | 2 +- 7 files changed, 141 insertions(+), 69 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 46f231f6396..b05c9fd49ea 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -352,5 +352,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool IsBeaconBlockRootAvailable => IsEip4788Enabled; public bool MCopyIncluded => IsEip5656Enabled; + + public bool SystemCallsWithStateTouch => false; // GethStyle System calls } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index e140c40877a..b3c6c41c784 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -123,12 +123,16 @@ protected virtual void Execute(Transaction tx, BlockHeader header, ITxTracer tra Metrics.BlockMinGasPrice = Math.Min(gasPrice, Metrics.BlockMinGasPrice); Metrics.BlockMaxGasPrice = Math.Max(gasPrice, Metrics.BlockMaxGasPrice); - Metrics.AveGasPrice = (Metrics.AveGasPrice * Metrics.Transactions + gasPrice) / (Metrics.Transactions + 1); - Metrics.EstMedianGasPrice += Metrics.AveGasPrice * 0.01m * decimal.Sign(gasPrice - Metrics.EstMedianGasPrice); + Metrics.AveGasPrice = + (Metrics.AveGasPrice * Metrics.Transactions + gasPrice) / (Metrics.Transactions + 1); + Metrics.EstMedianGasPrice += + Metrics.AveGasPrice * 0.01m * decimal.Sign(gasPrice - Metrics.EstMedianGasPrice); Metrics.Transactions++; - Metrics.BlockAveGasPrice = (Metrics.BlockAveGasPrice * Metrics.BlockTransactions + gasPrice) / (Metrics.BlockTransactions + 1); - Metrics.BlockEstMedianGasPrice += Metrics.BlockAveGasPrice * 0.01m * decimal.Sign(gasPrice - Metrics.BlockEstMedianGasPrice); + Metrics.BlockAveGasPrice = (Metrics.BlockAveGasPrice * Metrics.BlockTransactions + gasPrice) / + (Metrics.BlockTransactions + 1); + Metrics.BlockEstMedianGasPrice += Metrics.BlockAveGasPrice * 0.01m * + decimal.Sign(gasPrice - Metrics.BlockEstMedianGasPrice); Metrics.BlockTransactions++; } @@ -137,7 +141,8 @@ protected virtual void Execute(Transaction tx, BlockHeader header, ITxTracer tra if (!ValidateSender(tx, header, spec, tracer, opts)) return; - if (!BuyGas(tx, header, spec, tracer, opts, effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment)) + if (!BuyGas(tx, header, spec, tracer, opts, effectiveGasPrice, out UInt256 premiumPerGas, + out UInt256 senderReservedGasPayment)) return; if (!IncrementNonce(tx, header, spec, tracer, opts)) @@ -149,7 +154,8 @@ protected virtual void Execute(Transaction tx, BlockHeader header, ITxTracer tra ExecutionEnvironment env = BuildExecutionEnvironmnet(tx, header, spec, tracer, opts, effectiveGasPrice); long gasAvailable = tx.GasLimit - intrinsicGas; - if (!ExecuteEVMCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode)) + if (!ExecuteEVMCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, + out long spentGas, out byte statusCode)) return; if (!PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode)) @@ -166,7 +172,7 @@ protected virtual void Execute(Transaction tx, BlockHeader header, ITxTracer tra else { if (!opts.HasFlag(ExecutionOptions.NoValidation)) - _worldState.AddToBalance(tx.SenderAddress, senderReservedGasPayment, spec); + AddToBalance(tx, senderReservedGasPayment, spec); if (!tx.IsSystem()) _worldState.DecrementNonce(tx.SenderAddress); @@ -200,6 +206,26 @@ protected virtual void Execute(Transaction tx, BlockHeader header, ITxTracer tra } } + private void AddToBalance(Transaction tx, in UInt256 balanceChange, IReleaseSpec spec) + { + if (SkipAccountTouch(tx, spec)) + return; + + _worldState.AddToBalance(tx.SenderAddress, balanceChange, spec); + } + + private void SubstractFromBalance(Transaction tx, in UInt256 balanceChange, IReleaseSpec spec) + { + if (SkipAccountTouch(tx, spec)) + return; + + _worldState.SubtractFromBalance(tx.SenderAddress, balanceChange, spec); + } + + private bool SkipAccountTouch(Transaction tx, IReleaseSpec spec) => + tx.IsSystem() && !spec.SystemCallsWithStateTouch; + + private void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) { block.GasUsed += tx.GasLimit; @@ -235,7 +261,8 @@ private void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITx /// Options (Flags) to use for execution /// Computed premium per gas /// - protected virtual bool ValidateStatic(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, out long intrinsicGas) + protected virtual bool ValidateStatic(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + ExecutionOptions opts, out long intrinsicGas) { intrinsicGas = IntrinsicGasCalculator.Calculate(tx, spec); @@ -262,7 +289,8 @@ protected virtual bool ValidateStatic(Transaction tx, BlockHeader header, IRelea if (tx.IsAboveInitCode(spec)) { - TraceLogInvalidTx(tx, $"CREATE_TRANSACTION_SIZE_EXCEEDS_MAX_INIT_CODE_SIZE {tx.DataLength} > {spec.MaxInitCodeSize}"); + TraceLogInvalidTx(tx, + $"CREATE_TRANSACTION_SIZE_EXCEEDS_MAX_INIT_CODE_SIZE {tx.DataLength} > {spec.MaxInitCodeSize}"); QuickFail(tx, header, spec, tracer, "EIP-3860 - transaction size over max init code size"); return false; } @@ -278,7 +306,8 @@ protected virtual bool ValidateStatic(Transaction tx, BlockHeader header, IRelea if (validate && tx.GasLimit > header.GasLimit - header.GasUsed) { - TraceLogInvalidTx(tx, $"BLOCK_GAS_LIMIT_EXCEEDED {tx.GasLimit} > {header.GasLimit} - {header.GasUsed}"); + TraceLogInvalidTx(tx, + $"BLOCK_GAS_LIMIT_EXCEEDED {tx.GasLimit} > {header.GasLimit} - {header.GasUsed}"); QuickFail(tx, header, spec, tracer, "block gas limit exceeded"); return false; } @@ -288,7 +317,8 @@ protected virtual bool ValidateStatic(Transaction tx, BlockHeader header, IRelea } // TODO Should we remove this already - private bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionOptions opts, in UInt256 effectiveGasPrice) + private bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionOptions opts, + in UInt256 effectiveGasPrice) { bool commit = opts.HasFlag(ExecutionOptions.Commit) || !spec.IsEip658Enabled; bool restore = opts.HasFlag(ExecutionOptions.Restore); @@ -298,7 +328,8 @@ private bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionO if (!_worldState.AccountExists(tx.SenderAddress)) { - if (_logger.IsDebug) _logger.Debug($"TX sender account does not exist {tx.SenderAddress} - trying to recover it"); + if (_logger.IsDebug) + _logger.Debug($"TX sender account does not exist {tx.SenderAddress} - trying to recover it"); Address prevSender = tx.SenderAddress; // hacky fix for the potential recovery issue @@ -308,7 +339,8 @@ private bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionO if (prevSender != tx.SenderAddress) { if (_logger.IsWarn) - _logger.Warn($"TX recovery issue fixed - tx was coming with sender {prevSender} and the now it recovers to {tx.SenderAddress}"); + _logger.Warn( + $"TX recovery issue fixed - tx was coming with sender {prevSender} and the now it recovers to {tx.SenderAddress}"); } else { @@ -322,7 +354,8 @@ private bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionO if (tx.SenderAddress is null) { - throw new InvalidDataException($"Failed to recover sender address on tx {tx.Hash} when previously recovered sender account did not exist."); + throw new InvalidDataException( + $"Failed to recover sender address on tx {tx.Hash} when previously recovered sender account did not exist."); } } @@ -330,7 +363,8 @@ private bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionO } - protected virtual bool ValidateSender(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) + protected virtual bool ValidateSender(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + ExecutionOptions opts) { bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); @@ -344,8 +378,9 @@ protected virtual bool ValidateSender(Transaction tx, BlockHeader header, IRelea return true; } - private bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, - in UInt256 effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment) + private bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + ExecutionOptions opts, + in UInt256 effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment) { premiumPerGas = UInt256.Zero; senderReservedGasPayment = UInt256.Zero; @@ -363,7 +398,8 @@ private bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTr UInt256 senderBalance = _worldState.GetBalance(tx.SenderAddress); if (UInt256.SubtractUnderflow(senderBalance, tx.Value, out UInt256 balanceLeft)) { - TraceLogInvalidTx(tx, $"INSUFFICIENT_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}"); + TraceLogInvalidTx(tx, + $"INSUFFICIENT_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}"); QuickFail(tx, header, spec, tracer, "insufficient sender balance"); return false; } @@ -375,54 +411,64 @@ private bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTr overflows = UInt256.MultiplyOverflow((UInt256)tx.GasLimit, tx.MaxFeePerGas, out UInt256 maxGasFee); if (overflows || balanceLeft < maxGasFee) { - TraceLogInvalidTx(tx, $"INSUFFICIENT_MAX_FEE_PER_GAS_FOR_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}, MAX_FEE_PER_GAS: {tx.MaxFeePerGas}"); + TraceLogInvalidTx(tx, + $"INSUFFICIENT_MAX_FEE_PER_GAS_FOR_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}, MAX_FEE_PER_GAS: {tx.MaxFeePerGas}"); QuickFail(tx, header, spec, tracer, "insufficient MaxFeePerGas for sender balance"); return false; } + if (tx.SupportsBlobs) { - overflows = UInt256.MultiplyOverflow(BlobGasCalculator.CalculateBlobGas(tx), (UInt256)tx.MaxFeePerBlobGas, out UInt256 maxBlobGasFee); - if (overflows || UInt256.AddOverflow(maxGasFee, maxBlobGasFee, out UInt256 multidimGasFee) || multidimGasFee > balanceLeft) + overflows = UInt256.MultiplyOverflow(BlobGasCalculator.CalculateBlobGas(tx), + (UInt256)tx.MaxFeePerBlobGas, out UInt256 maxBlobGasFee); + if (overflows || UInt256.AddOverflow(maxGasFee, maxBlobGasFee, out UInt256 multidimGasFee) || + multidimGasFee > balanceLeft) { - TraceLogInvalidTx(tx, $"INSUFFICIENT_MAX_FEE_PER_BLOB_GAS_FOR_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}"); + TraceLogInvalidTx(tx, + $"INSUFFICIENT_MAX_FEE_PER_BLOB_GAS_FOR_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}"); QuickFail(tx, header, spec, tracer, "insufficient sender balance"); return false; } } } - overflows = UInt256.MultiplyOverflow((UInt256)tx.GasLimit, effectiveGasPrice, out senderReservedGasPayment); + overflows = UInt256.MultiplyOverflow((UInt256)tx.GasLimit, effectiveGasPrice, + out senderReservedGasPayment); if (!overflows && tx.SupportsBlobs) { overflows = !BlobGasCalculator.TryCalculateBlobGasPrice(header, tx, out UInt256 blobGasFee); if (!overflows) { - overflows = UInt256.AddOverflow(senderReservedGasPayment, blobGasFee, out senderReservedGasPayment); + overflows = UInt256.AddOverflow(senderReservedGasPayment, blobGasFee, + out senderReservedGasPayment); } } if (overflows || senderReservedGasPayment > balanceLeft) { - TraceLogInvalidTx(tx, $"INSUFFICIENT_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}"); + TraceLogInvalidTx(tx, + $"INSUFFICIENT_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}"); QuickFail(tx, header, spec, tracer, "insufficient sender balance"); return false; } } if (validate) - _worldState.SubtractFromBalance(tx.SenderAddress, senderReservedGasPayment, spec); + SubstractFromBalance(tx, senderReservedGasPayment, spec); return true; } - protected virtual bool IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) + protected virtual bool IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + ExecutionOptions opts) { if (tx.IsSystem()) return true; if (tx.Nonce != _worldState.GetNonce(tx.SenderAddress)) { - TraceLogInvalidTx(tx, $"WRONG_TRANSACTION_NONCE: {tx.Nonce} (expected {_worldState.GetNonce(tx.SenderAddress)})"); + TraceLogInvalidTx(tx, + $"WRONG_TRANSACTION_NONCE: {tx.Nonce} (expected {_worldState.GetNonce(tx.SenderAddress)})"); QuickFail(tx, header, spec, tracer, "wrong transaction nonce"); return false; } @@ -436,14 +482,16 @@ protected virtual ExecutionEnvironment BuildExecutionEnvironmnet( in UInt256 effectiveGasPrice) { Address recipient = tx.GetRecipient(tx.IsContractCreation ? _worldState.GetNonce(tx.SenderAddress) : 0) ?? - // this transaction is not a contract creation so it should have the recipient known and not null - throw new InvalidDataException("Recipient has not been resolved properly before tx execution"); + // this transaction is not a contract creation so it should have the recipient known and not null + throw new InvalidDataException( + "Recipient has not been resolved properly before tx execution"); TxExecutionContext executionContext = new(header, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); - CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data.AsArray()) - : _virtualMachine.GetCachedCodeInfo(_worldState, recipient, spec); + CodeInfo codeInfo = tx.IsContractCreation + ? new(tx.Data.AsArray()) + : _virtualMachine.GetCachedCodeInfo(_worldState, recipient, spec); byte[] inputData = tx.IsMessageCall ? tx.Data.AsArray() ?? Array.Empty() : Array.Empty(); @@ -478,7 +526,7 @@ protected virtual bool ExecuteEVMCall( // Fixes eth_estimateGas. // If sender is SystemUser subtracting value will cause InsufficientBalanceException if (validate || !tx.IsSystem()) - _worldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); + SubstractFromBalance(tx, tx.Value, spec); try { @@ -571,9 +619,10 @@ protected virtual bool ExecuteEVMCall( statusCode = StatusCode.Success; } - spentGas = Refund(tx.GasLimit, unspentGas, substate, tx.SenderAddress, env.TxExecutionContext.GasPrice, opts, spec); + spentGas = Refund(tx, unspentGas, substate, env.TxExecutionContext.GasPrice, opts, spec); } - catch (Exception ex) when (ex is EvmException || ex is OverflowException) // TODO: OverflowException? still needed? hope not + catch (Exception ex) when + (ex is EvmException || ex is OverflowException) // TODO: OverflowException? still needed? hope not { if (_logger.IsTrace) _logger.Trace($"EVM EXCEPTION: {ex.GetType().Name}"); @@ -586,7 +635,8 @@ protected virtual bool ExecuteEVMCall( return true; } - protected bool PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) + protected bool PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) { if (tx.IsSystem()) return true; @@ -601,7 +651,8 @@ protected bool PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, IT _worldState.AddToBalanceAndCreateIfNotExists(header.GasBeneficiary, fees, spec); if (spec.IsEip1559Enabled && spec.Eip1559FeeCollector is not null && !burntFees.IsZero) - _worldState.AddToBalanceAndCreateIfNotExists(spec.Eip1559FeeCollector, burntFees, spec); ; + _worldState.AddToBalanceAndCreateIfNotExists(spec.Eip1559FeeCollector, burntFees, spec); + ; if (tracer.IsTracingFees) tracer.ReportFees(fees, burntFees); @@ -641,10 +692,15 @@ private void TraceLogInvalidTx(Transaction transaction, string reason) if (_logger.IsTrace) _logger.Trace($"Invalid tx {transaction.Hash} ({reason})"); } - protected long Refund(long gasLimit, long unspentGas, TransactionSubstate substate, Address sender, - in UInt256 gasPrice, ExecutionOptions opts, IReleaseSpec spec) + private bool IsGethStyleSystemCall(Transaction tx) { - long spentGas = gasLimit; + return tx.IsSystem(); + } + + protected long Refund(Transaction tx, long unspentGas, TransactionSubstate substate, + in UInt256 gasPrice, ExecutionOptions opts, IReleaseSpec spec) + { + long spentGas = tx.GasLimit; if (!substate.IsError) { spentGas -= unspentGas; @@ -657,7 +713,7 @@ protected long Refund(long gasLimit, long unspentGas, TransactionSubstate substa _logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + refund); // If noValidation we didn't charge for gas, so do not refund if (!opts.HasFlag(ExecutionOptions.NoValidation)) - _worldState.AddToBalance(sender, (ulong)(unspentGas + refund) * gasPrice, spec); + AddToBalance(tx, (ulong)(unspentGas + refund) * gasPrice, spec); spentGas -= refund; } diff --git a/src/Nethermind/Nethermind.Runner/configs/volta.cfg b/src/Nethermind/Nethermind.Runner/configs/volta.cfg index 1c4cb850980..e5cadbf7152 100644 --- a/src/Nethermind/Nethermind.Runner/configs/volta.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/volta.cfg @@ -1,34 +1,49 @@ { "Init": { + "PubSubEnabled": true, + "WebSocketsEnabled": true, "IsMining": false, + "UseMemDb": true, "ChainSpecPath": "chainspec/volta.json", - "GenesisHash": "0xebd8b413ca7b7f84a8dd20d17519ce2b01954c74d94a0a739a3e416abe0e43e5", - "BaseDbPath": "nethermind_db/volta", - "LogFileName": "volta.logs.txt", - "MemoryHint": 768000000 + "BaseDbPath": "nethermind_db/hive2", + "LogFileName": "/hive.logs.txt" }, - "Network": { - "ActivePeersMaxCount": 25 - }, - "Sync": { - "FastSync": true, - "PivotNumber": 24440000, - "PivotHash": "0x27e0ee1c162acde543c2874439d165567658ed86c07a38b1595ad16d243182eb", - "PivotTotalDifficulty": "8316501047547736047044875405632415087621725609", - "FastBlocks": true, - "UseGethLimitsInFastBlocks": false, - "FastSyncCatchUpHeightDelta": 10000000000 + "JsonRpc": { + "Enabled": true, + "Host": "0.0.0.0", + "Port": 8545, + "WebSocketsPort": 8546, + "EnabledModules": [ + "Debug", + "Eth", + "Subscribe", + "Trace", + "TxPool", + "Web3", + "Personal", + "Proof", + "Net", + "Parity", + "Health" + ], + "AdditionalRpcUrls": [ + "http://0.0.0.0:8550|http;ws|debug;net;eth;subscribe;engine;web3;client|no-auth", + "http://0.0.0.0:8551|http;ws|debug;net;eth;subscribe;engine;web3;client" + ] }, - "EthStats": { - "Name": "Nethermind Volta" - }, - "Metrics": { - "NodeName": "Volta" + "Network": { + "DiscoveryPort": 30303, + "P2PPort": 30303, + "ExternalIp": "127.0.0.1" }, - "Mining": { - "MinGasPrice": 1 + "Hive": { + "ChainFile": "/chain.rlp", + "GenesisFilePath": "/genesis.json", + "BlocksDir": "/blocks", + "KeysDir": "/keys" }, "Merge": { - "Enabled": false + "Enabled": true, + "TerminalTotalDifficulty": "0" } } diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index 195bd2b679f..df436e346cb 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -123,5 +123,7 @@ public SystemTransactionReleaseSpec(IReleaseSpec spec) public bool IsEip6780Enabled => _spec.IsEip6780Enabled; public bool IsEip4788Enabled => _spec.IsEip4788Enabled; public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; + + public bool SystemCallsWithStateTouch => true; } } diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 4cb553d63cd..7b45d583b4f 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -220,9 +220,6 @@ void ThrowNotExistingAccount() { if (releaseSpec.IsEip158Enabled) { - if (address == Address.SystemUser) // ToDo add comment - return; - Account touched = GetThroughCacheCheckExists(); if (_logger.IsTrace) _logger.Trace($" Touch {address} (balance)"); if (touched!.IsEmpty) diff --git a/src/Nethermind/Nethermind.State/StateTree.cs b/src/Nethermind/Nethermind.State/StateTree.cs index b149070ead8..9c35eca526a 100644 --- a/src/Nethermind/Nethermind.State/StateTree.cs +++ b/src/Nethermind/Nethermind.State/StateTree.cs @@ -33,7 +33,7 @@ public StateTree(ITrieStore? store, ILogManager? logManager) TrieType = TrieType.State; } - [DebuggerStepThrough] + // [DebuggerStepThrough] public Account? Get(Address address, Keccak? rootHash = null) { byte[]? bytes = Get(ValueKeccak.Compute(address.Bytes).BytesAsSpan, rootHash); diff --git a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs index ed4ed344fde..523588895c1 100644 --- a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs +++ b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs @@ -308,7 +308,7 @@ private void SetRootHash(Keccak? value, bool resetObjects) } [SkipLocalsInit] - [DebuggerStepThrough] + // [DebuggerStepThrough] public virtual byte[]? Get(ReadOnlySpan rawKey, Keccak? rootHash = null) { try From c0378236680f3953cec931233cc3401c972cde1f Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 8 Sep 2023 12:34:09 +0200 Subject: [PATCH 026/551] IgnoredAccount --- src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs | 7 +++++++ .../Nethermind.Specs.Test/OverridableReleaseSpec.cs | 4 ++++ .../Nethermind.Specs/SystemTransactionReleaseSpec.cs | 5 ++++- src/Nethermind/Nethermind.Trie/PatriciaTree.cs | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index b05c9fd49ea..170b4bc2e5e 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -201,6 +201,13 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// bool IsEip2930Enabled { get; } + /// + /// Should EIP158 be ignored for this account. + /// + /// THis is needed for SystemUser account compatibility with Parity. + /// + /// + bool IsEip158IgnoredAccount(Address address); /// /// BaseFee opcode /// diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index a50127a94c2..ec89bb48c33 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -114,6 +114,10 @@ public OverridableReleaseSpec(IReleaseSpec spec) public bool IsEip3541Enabled => _spec.IsEip3541Enabled; public bool IsEip4844Enabled => _spec.IsEip4844Enabled; public bool IsEip3607Enabled { get; set; } + public bool IsEip158IgnoredAccount(Address address) + { + return _spec.IsEip158IgnoredAccount(address); + } private long? _overridenEip1559TransitionBlock; public long Eip1559TransitionBlock diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index df436e346cb..61bcde15da4 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -109,7 +109,10 @@ public SystemTransactionReleaseSpec(IReleaseSpec spec) public bool IsEip3541Enabled => _spec.IsEip3541Enabled; public bool IsEip3607Enabled => _spec.IsEip3607Enabled; - + public bool IsEip158IgnoredAccount(Address address) + { + return _spec.IsEip158IgnoredAccount(address); + } public long Eip1559TransitionBlock => _spec.Eip1559TransitionBlock; public ulong WithdrawalTimestamp => _spec.WithdrawalTimestamp; public ulong Eip4844TransitionTimestamp => _spec.Eip4844TransitionTimestamp; diff --git a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs index 523588895c1..ed4ed344fde 100644 --- a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs +++ b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs @@ -308,7 +308,7 @@ private void SetRootHash(Keccak? value, bool resetObjects) } [SkipLocalsInit] - // [DebuggerStepThrough] + [DebuggerStepThrough] public virtual byte[]? Get(ReadOnlySpan rawKey, Keccak? rootHash = null) { try From a62aee43d5cc24f08dc1d34ad884768f17ee6b26 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 8 Sep 2023 13:58:02 +0200 Subject: [PATCH 027/551] MainnetSystemCalls in chainspec --- src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs | 2 +- .../TransactionProcessing/TransactionProcessor.cs | 4 ++-- .../Nethermind.Specs.Test/OverridableReleaseSpec.cs | 2 ++ .../ChainSpecStyle/ChainSpecBasedSpecProvider.cs | 3 +++ src/Nethermind/Nethermind.Specs/ReleaseSpec.cs | 1 + .../Nethermind.Specs/SystemTransactionReleaseSpec.cs | 2 +- src/Nethermind/Nethermind.State/StateProvider.cs | 7 ++++--- src/Nethermind/Nethermind.State/StateTree.cs | 2 +- 8 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 170b4bc2e5e..cd021116363 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -360,6 +360,6 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool IsBeaconBlockRootAvailable => IsEip4788Enabled; public bool MCopyIncluded => IsEip5656Enabled; - public bool SystemCallsWithStateTouch => false; // GethStyle System calls + public bool MainnetSystemCalls { get; } // ToDo add comment } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index b3c6c41c784..44443b4770e 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -98,7 +98,7 @@ public void Trace(Transaction transaction, BlockHeader block, ITxTracer txTracer protected virtual void Execute(Transaction tx, BlockHeader header, ITxTracer tracer, ExecutionOptions opts) { IReleaseSpec spec = _specProvider.GetSpec(header); - if (tx.IsSystem() && !spec.IsEip4788Enabled) // ToDo add comment + if (tx.IsSystem() && !spec.MainnetSystemCalls) // ToDo add comment spec = new SystemTransactionReleaseSpec(spec); // restore is CallAndRestore - previous call, we will restore state after the execution @@ -223,7 +223,7 @@ private void SubstractFromBalance(Transaction tx, in UInt256 balanceChange, IRel } private bool SkipAccountTouch(Transaction tx, IReleaseSpec spec) => - tx.IsSystem() && !spec.SystemCallsWithStateTouch; + tx.IsSystem() && !spec.MainnetSystemCalls; private void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index ec89bb48c33..c435d2139c4 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -146,6 +146,8 @@ public ulong Eip4844TransitionTimestamp } } + public bool MainnetSystemCalls => _spec.MainnetSystemCalls; + public bool IsEip1153Enabled => _spec.IsEip1153Enabled; public bool IsEip3651Enabled => _spec.IsEip3651Enabled; public bool IsEip3855Enabled => _spec.IsEip3855Enabled; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index 85d8226e2d4..1d178df37d0 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Numerics; using System.Reflection; +using Nethermind.Core; using Nethermind.Core.Collections; using Nethermind.Core.Specs; using Nethermind.Int256; @@ -240,6 +241,8 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip6780Enabled = (chainSpec.Parameters.Eip6780TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; + releaseSpec.MainnetSystemCalls = + chainSpec.SealEngineType != SealEngineType.AuRa || releaseSpec.IsEip4788Enabled; // ToDo add comment return releaseSpec; } diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index fa886f82fa6..d67cbeb13e4 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -70,6 +70,7 @@ public ReleaseSpec Clone() public long Eip1559TransitionBlock { get; set; } public ulong WithdrawalTimestamp { get; set; } public ulong Eip4844TransitionTimestamp { get; set; } + public bool MainnetSystemCalls { get; set; } public Address Eip1559FeeCollector { get; set; } public UInt256? Eip1559BaseFeeMinValue { get; set; } public bool IsEip1153Enabled { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index 61bcde15da4..817df033ed0 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -127,6 +127,6 @@ public bool IsEip158IgnoredAccount(Address address) public bool IsEip4788Enabled => _spec.IsEip4788Enabled; public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; - public bool SystemCallsWithStateTouch => true; + public bool MainnetSystemCalls => false; } } diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 7b45d583b4f..28e3476d08c 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -189,7 +189,7 @@ public void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec if (_logger.IsTrace) _logger.Trace($" Touch {address} (code hash)"); if (account.IsEmpty) { - PushTouch(address, account); + PushTouch(address, account, spec, account.Balance.IsZero); } } } @@ -224,7 +224,7 @@ void ThrowNotExistingAccount() if (_logger.IsTrace) _logger.Trace($" Touch {address} (balance)"); if (touched!.IsEmpty) { - PushTouch(address, touched); + PushTouch(address, touched, releaseSpec, true); } } @@ -725,8 +725,9 @@ private void PushUpdate(Address address, Account account) Push(ChangeType.Update, address, account); } - private void PushTouch(Address address, Account account) + private void PushTouch(Address address, Account account, IReleaseSpec releaseSpec, bool isZero) { + if (isZero && releaseSpec.IsEip158IgnoredAccount(address)) return; Push(ChangeType.Touch, address, account); } diff --git a/src/Nethermind/Nethermind.State/StateTree.cs b/src/Nethermind/Nethermind.State/StateTree.cs index 9c35eca526a..b149070ead8 100644 --- a/src/Nethermind/Nethermind.State/StateTree.cs +++ b/src/Nethermind/Nethermind.State/StateTree.cs @@ -33,7 +33,7 @@ public StateTree(ITrieStore? store, ILogManager? logManager) TrieType = TrieType.State; } - // [DebuggerStepThrough] + [DebuggerStepThrough] public Account? Get(Address address, Keccak? rootHash = null) { byte[]? bytes = Get(ValueKeccak.Compute(address.Bytes).BytesAsSpan, rootHash); From 7258c88f4f0f22d9b978abf5e9e1cee87a115249 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 8 Sep 2023 14:07:54 +0200 Subject: [PATCH 028/551] cosmetic fixes --- .../TransactionProcessor.cs | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 44443b4770e..5f2f733d806 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -208,22 +208,22 @@ protected virtual void Execute(Transaction tx, BlockHeader header, ITxTracer tra private void AddToBalance(Transaction tx, in UInt256 balanceChange, IReleaseSpec spec) { - if (SkipAccountTouch(tx, spec)) + if (IsMainnetStyleSystemCall(tx, spec)) return; _worldState.AddToBalance(tx.SenderAddress, balanceChange, spec); } - private void SubstractFromBalance(Transaction tx, in UInt256 balanceChange, IReleaseSpec spec) + private void SubtractFromBalance(Transaction tx, in UInt256 balanceChange, IReleaseSpec spec) { - if (SkipAccountTouch(tx, spec)) + if (IsMainnetStyleSystemCall(tx, spec)) return; _worldState.SubtractFromBalance(tx.SenderAddress, balanceChange, spec); } - private bool SkipAccountTouch(Transaction tx, IReleaseSpec spec) => - tx.IsSystem() && !spec.MainnetSystemCalls; + private bool IsMainnetStyleSystemCall(Transaction tx, IReleaseSpec spec) => + tx.IsSystem() && spec.MainnetSystemCalls; private void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) @@ -454,7 +454,7 @@ private bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTr } if (validate) - SubstractFromBalance(tx, senderReservedGasPayment, spec); + SubtractFromBalance(tx, senderReservedGasPayment, spec); return true; } @@ -483,8 +483,7 @@ protected virtual ExecutionEnvironment BuildExecutionEnvironmnet( { Address recipient = tx.GetRecipient(tx.IsContractCreation ? _worldState.GetNonce(tx.SenderAddress) : 0) ?? // this transaction is not a contract creation so it should have the recipient known and not null - throw new InvalidDataException( - "Recipient has not been resolved properly before tx execution"); + throw new InvalidDataException("Recipient has not been resolved properly before tx execution"); TxExecutionContext executionContext = new(header, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); @@ -526,7 +525,7 @@ protected virtual bool ExecuteEVMCall( // Fixes eth_estimateGas. // If sender is SystemUser subtracting value will cause InsufficientBalanceException if (validate || !tx.IsSystem()) - SubstractFromBalance(tx, tx.Value, spec); + SubtractFromBalance(tx, tx.Value, spec); try { @@ -692,14 +691,9 @@ private void TraceLogInvalidTx(Transaction transaction, string reason) if (_logger.IsTrace) _logger.Trace($"Invalid tx {transaction.Hash} ({reason})"); } - private bool IsGethStyleSystemCall(Transaction tx) - { - return tx.IsSystem(); - } - - protected long Refund(Transaction tx, long unspentGas, TransactionSubstate substate, + protected long Refund(Transaction tx, long unspentGas, TransactionSubstate substate, in UInt256 gasPrice, ExecutionOptions opts, IReleaseSpec spec) - { + { long spentGas = tx.GasLimit; if (!substate.IsError) { From 664e095c9e261a2b3a1e7c7edb076215e482b655 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 8 Sep 2023 14:18:09 +0200 Subject: [PATCH 029/551] cosmetic --- ...RpcModuleTests.TestAccountAbstractionRpcBlockchain.cs | 3 ++- .../Nethermind.Blockchain.Test/BlockProcessorTests.cs | 9 ++++++--- .../Producers/DevBlockproducerTests.cs | 3 ++- src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs | 3 ++- .../Nethermind.Clique.Test/CliqueBlockProducerTests.cs | 6 ++++-- .../Nethermind.Consensus.Clique/CliquePlugin.cs | 3 ++- .../Nethermind.Consensus.Ethash/NethDevPlugin.cs | 3 ++- .../Processing/ReadOnlyChainProcessingEnv.cs | 3 ++- .../Producers/BlockProducerEnvFactory.cs | 3 ++- .../Nethermind.Core.Test/Blockchain/TestBlockchain.cs | 3 ++- .../Nethermind.Init/Steps/InitializeBlockchain.cs | 3 ++- .../EngineModuleTests.Setup.cs | 3 ++- .../MevRpcModuleTests.TestMevRpcBlockchain.cs | 3 ++- .../Nethermind.Synchronization.Test/SyncThreadTests.cs | 6 ++++-- 14 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs index 5b4f0c41941..01e44a2a7e3 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs @@ -191,7 +191,8 @@ protected override BlockProcessor CreateBlockProcessor() State, ReceiptStorage, NullWitnessCollector.Instance, - TxProcessor, LogManager); + TxProcessor, + LogManager); var parser = new AbiDefinitionParser(); parser.RegisterAbiTypeFactory(new AbiTuple()); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs index d20701b7c4b..c36a79f07c1 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs @@ -49,7 +49,8 @@ public void Prepared_block_contains_author_field() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - transactionProcessor, LimboLogs.Instance); + transactionProcessor, + LimboLogs.Instance); BlockHeader header = Build.A.BlockHeader.WithAuthor(TestItem.AddressD).TestObject; Block block = Build.A.Block.WithHeader(header).TestObject; @@ -80,7 +81,8 @@ public void Can_store_a_witness() stateProvider, NullReceiptStorage.Instance, witnessCollector, - transactionProcessor, LimboLogs.Instance); + transactionProcessor, + LimboLogs.Instance); BlockHeader header = Build.A.BlockHeader.WithAuthor(TestItem.AddressD).TestObject; Block block = Build.A.Block.WithHeader(header).TestObject; @@ -109,7 +111,8 @@ public void Recovers_state_on_cancel() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - transactionProcessor, LimboLogs.Instance); + transactionProcessor, + LimboLogs.Instance); BlockHeader header = Build.A.BlockHeader.WithNumber(1).WithAuthor(TestItem.AddressD).TestObject; Block block = Build.A.Block.WithTransactions(1, MuirGlacier.Instance).WithHeader(header).TestObject; diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs index 3fd8780da35..ed8a6092605 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs @@ -75,7 +75,8 @@ public void Test() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - txProcessor, LimboLogs.Instance); + txProcessor, + LimboLogs.Instance); BlockchainProcessor blockchainProcessor = new( blockTree, blockProcessor, diff --git a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs index 7e552e6ce69..776534a35ee 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs @@ -80,7 +80,8 @@ public void Setup() stateProvider, NullReceiptStorage.Instance, new WitnessCollector(memDbProvider.StateDb, LimboLogs.Instance), - transactionProcessor, LimboLogs.Instance); + transactionProcessor, + LimboLogs.Instance); _blockchainProcessor = new BlockchainProcessor( _blockTree, blockProcessor, diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs index 25f2d4ba1ae..cededb1ce64 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs @@ -132,7 +132,8 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - transactionProcessor, nodeLogManager); + transactionProcessor, + nodeLogManager); BlockchainProcessor processor = new(blockTree, blockProcessor, new AuthorRecoveryStep(snapshotManager), stateReader, nodeLogManager, BlockchainProcessor.Options.NoReceipts); processor.Start(); @@ -151,7 +152,8 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f minerStateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - minerTransactionProcessor, nodeLogManager); + minerTransactionProcessor, + nodeLogManager); BlockchainProcessor minerProcessor = new(blockTree, minerBlockProcessor, new AuthorRecoveryStep(snapshotManager), stateReader, nodeLogManager, BlockchainProcessor.Options.NoReceipts); diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index 3d38a76cc82..e14001177a0 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -110,7 +110,8 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd NullReceiptStorage.Instance, NullWitnessCollector.Instance, getFromApi.TransactionProcessor, - getFromApi.LogManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager))); + getFromApi.LogManager, + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager))); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( readOnlyBlockTree, diff --git a/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs b/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs index 27aa5772c2e..a41cba8955a 100644 --- a/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs @@ -80,7 +80,8 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd producerEnv.StateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - getFromApi.TransactionProcessor, getFromApi.LogManager); + getFromApi.TransactionProcessor, + getFromApi.LogManager); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( readOnlyBlockTree, diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs index da3ae6593d6..75d23ad9ef5 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs @@ -49,7 +49,8 @@ public ReadOnlyChainProcessingEnv( StateProvider, receiptStorage, NullWitnessCollector.Instance, - _txEnv.TransactionProcessor, logManager); + _txEnv.TransactionProcessor, + logManager); _blockProcessingQueue = new BlockchainProcessor(_txEnv.BlockTree, BlockProcessor, recoveryStep, _txEnv.StateReader, logManager, BlockchainProcessor.Options.NoReceipts); BlockProcessingQueue = _blockProcessingQueue; diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index 4ca36aeeea8..52a416c59f4 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -149,7 +149,8 @@ protected virtual BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv re receiptStorage, NullWitnessCollector.Instance, readOnlyTxProcessingEnv.TransactionProcessor, - logManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager))); + logManager, + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager))); } } diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 835ff6142bc..a29b0463f5e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -344,7 +344,8 @@ protected virtual IBlockProcessor CreateBlockProcessor() => State, ReceiptStorage, NullWitnessCollector.Instance, - TxProcessor, LogManager); + TxProcessor, + LogManager); public async Task WaitForNewHead() { diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs index 3594ae7263c..f153549d780 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs @@ -364,7 +364,8 @@ protected virtual BlockProcessor CreateBlockProcessor() _api.WorldState, _api.ReceiptStorage, _api.WitnessCollector, - _api.TransactionProcessor, _api.LogManager); + _api.TransactionProcessor, + _api.LogManager); } // TODO: remove from here - move to consensus? diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 0689f8aa4df..8518cbbbbf1 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -225,7 +225,8 @@ protected override IBlockProcessor CreateBlockProcessor() State, ReceiptStorage, NullWitnessCollector.Instance, - TxProcessor, LogManager); + TxProcessor, + LogManager); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } diff --git a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs index 388d9a67573..d57db2c4f15 100644 --- a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs @@ -202,7 +202,8 @@ protected override BlockProcessor CreateBlockProcessor() State, ReceiptStorage, NullWitnessCollector.Instance, - TxProcessor, LogManager); + TxProcessor, + LogManager); _tracerFactory = new TracerFactory( DbProvider, diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs index bcac1168147..f78a6d4a8e4 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs @@ -298,7 +298,8 @@ private SyncTestContext CreateSyncManager(int index) stateProvider, receiptStorage, NullWitnessCollector.Instance, - txProcessor, logManager); + txProcessor, + logManager); RecoverSignatures step = new(ecdsa, txPool, specProvider, logManager); BlockchainProcessor processor = new(tree, blockProcessor, step, stateReader, logManager, @@ -320,7 +321,8 @@ private SyncTestContext CreateSyncManager(int index) devState, receiptStorage, NullWitnessCollector.Instance, - devTxProcessor, logManager); + devTxProcessor, + logManager); BlockchainProcessor devChainProcessor = new(tree, devBlockProcessor, step, stateReader, logManager, BlockchainProcessor.Options.NoReceipts); From 129fbfb60e3bb1c02b41bef05dfaa1aa2186ee92 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 8 Sep 2023 14:49:48 +0200 Subject: [PATCH 030/551] fix --- .../Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs | 3 ++- .../Modules/Trace/ParityStyleTracerTests.cs | 3 ++- .../ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs | 7 ++++++- src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs | 1 + src/Nethermind/Nethermind.State/StateProvider.cs | 6 +++++- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 08a2732241c..4552649dd80 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -55,7 +55,8 @@ public AuRaBlockProcessor( receiptStorage, NullWitnessCollector.Instance, transactionProcessor, - logManager, withdrawalProcessor) + logManager, + withdrawalProcessor) { _specProvider = specProvider; _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs index 011c29db7c1..7a62116bcc7 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs @@ -74,7 +74,8 @@ public void Setup() stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, - transactionProcessor, LimboLogs.Instance); + transactionProcessor, + LimboLogs.Instance); RecoverSignatures txRecovery = new(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), NullTxPool.Instance, specProvider, LimboLogs.Instance); _processor = new BlockchainProcessor(_blockTree, blockProcessor, txRecovery, stateReader, LimboLogs.Instance, BlockchainProcessor.Options.NoReceipts); diff --git a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs index 555fb8faa9b..0be40f5f4b9 100644 --- a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs @@ -315,6 +315,9 @@ private void VerifyGnosisShanghaiExceptions(IReleaseSpec preShanghaiSpec, IRelea preShanghaiSpec.IsEip170Enabled.Should().Be(false); postShanghaiSpec.IsEip170Enabled.Should().Be(true); + + preShanghaiSpec.MainnetSystemCalls.Should().Be(false); + postShanghaiSpec.MainnetSystemCalls.Should().Be(false); } private void VerifyGnosisPreShanghaiExceptions(ISpecProvider specProvider) @@ -459,7 +462,8 @@ private static void CompareSpecs(IReleaseSpec expectedSpec, IReleaseSpec actualS .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.IsEip170Enabled)) .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.IsEip1283Enabled)) .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.LimitCodeSize)) - .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.UseConstantinopleNetGasMetering))) + .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.UseConstantinopleNetGasMetering)) + .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.MainnetSystemCalls))) { Assert.That(propertyInfo.GetValue(actualSpec), Is.EqualTo(propertyInfo.GetValue(expectedSpec)), activation + "." + propertyInfo.Name); @@ -755,6 +759,7 @@ void TestTransitions(ForkActivation activation, Action changes) r.MaximumUncleCount = 2; r.WithdrawalTimestamp = ulong.MaxValue; r.Eip4844TransitionTimestamp = ulong.MaxValue; + r.MainnetSystemCalls = true; }); TestTransitions((ForkActivation)1L, r => diff --git a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs index 4180bb4cd52..adfb0955e20 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs @@ -26,6 +26,7 @@ protected Olympic() Eip1559TransitionBlock = long.MaxValue; ValidateChainId = true; ValidateReceipts = true; + MainnetSystemCalls = true; } public static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Olympic()); diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 28e3476d08c..f02135e7419 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -220,7 +220,11 @@ void ThrowNotExistingAccount() { if (releaseSpec.IsEip158Enabled) { - Account touched = GetThroughCacheCheckExists(); + Account touched = GetThroughCache(address); + if (touched is null) + { + return; + } if (_logger.IsTrace) _logger.Trace($" Touch {address} (balance)"); if (touched!.IsEmpty) { From 0ff3605b32f1d457e29d1789211fb839ada96859 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 11 Sep 2023 13:54:04 +0200 Subject: [PATCH 031/551] fix rest of the tests --- .../Modules/Proof/ProofRpcModuleTests.cs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index 80d74606932..397e5976411 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -350,7 +350,7 @@ public async Task Can_call_with_storage_load() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -363,7 +363,7 @@ public async Task Can_call_with_many_storage_loads() .Op(Instruction.SLOAD) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -376,7 +376,7 @@ public async Task Can_call_with_storage_write() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -390,7 +390,7 @@ public async Task Can_call_with_extcodecopy() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -415,7 +415,7 @@ public async Task Can_call_with_extcodesize() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -438,7 +438,7 @@ public async Task Can_call_with_extcodehash() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -461,7 +461,7 @@ public async Task Can_call_with_just_basic_addresses() .Op(Instruction.STOP) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -474,7 +474,7 @@ public async Task Can_call_with_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -486,7 +486,7 @@ public async Task Can_call_with_self_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -586,7 +586,7 @@ public async Task Can_call_with_call_with_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -603,7 +603,7 @@ public async Task Can_call_with_static_call() .Op(Instruction.STATICCALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -638,7 +638,7 @@ public async Task Can_call_with_call_with_non_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -651,7 +651,7 @@ public async Task Can_call_with_self_destruct() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -679,7 +679,7 @@ public async Task Can_call_with_many_storage_writes() .Op(Instruction.SSTORE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] From d5bdb07dd377f3cc41dc3553823173fdbd3705f2 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 18 Sep 2023 11:57:45 +0200 Subject: [PATCH 032/551] test system tx --- .../ChainSpecStyle/ChainSpecBasedSpecProvider.cs | 4 ++-- src/Nethermind/Nethermind.State/StateProvider.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index 1d178df37d0..fcd25a94758 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -241,8 +241,8 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip6780Enabled = (chainSpec.Parameters.Eip6780TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; - releaseSpec.MainnetSystemCalls = - chainSpec.SealEngineType != SealEngineType.AuRa || releaseSpec.IsEip4788Enabled; // ToDo add comment + releaseSpec.MainnetSystemCalls = false; + // chainSpec.SealEngineType != SealEngineType.AuRa || releaseSpec.IsEip4788Enabled; // ToDo add comment return releaseSpec; } diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index f02135e7419..d3fc6e8155a 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -218,7 +218,7 @@ void ThrowNotExistingAccount() bool isZero = balanceChange.IsZero; if (isZero) { - if (releaseSpec.IsEip158Enabled) + if (releaseSpec.IsEip158Enabled && !isSubtracting) { Account touched = GetThroughCache(address); if (touched is null) From b13fefea84523f1767d2f8919376a163a8f14a60 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 18 Sep 2023 19:50:01 +0200 Subject: [PATCH 033/551] adjust address to tests --- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index 76df2db5a5a..f5f1de856f0 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -17,7 +17,7 @@ namespace Nethermind.Blockchain.BeaconBlockRoot; public class BeaconBlockRootHandler : IBeaconBlockRootHandler { private readonly ITransactionProcessor _processor; - private static Address Default4788Address = Address.FromNumber(0x0b); + private static Address Default4788Address = new Address("0xBEAC00DDB15F3B6D645C48263DC93862413A222D"); private readonly ILogger _logger; private const long GasLimit = 30_000_000L; public BeaconBlockRootHandler( From 54073e899aced7d26d64cb64c5be9d1ea31f34d4 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 19 Sep 2023 12:01:03 +0200 Subject: [PATCH 034/551] change address for experiments --- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 2 +- src/tests | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index 76df2db5a5a..f5f1de856f0 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -17,7 +17,7 @@ namespace Nethermind.Blockchain.BeaconBlockRoot; public class BeaconBlockRootHandler : IBeaconBlockRootHandler { private readonly ITransactionProcessor _processor; - private static Address Default4788Address = Address.FromNumber(0x0b); + private static Address Default4788Address = new Address("0xBEAC00DDB15F3B6D645C48263DC93862413A222D"); private readonly ILogger _logger; private const long GasLimit = 30_000_000L; public BeaconBlockRootHandler( diff --git a/src/tests b/src/tests index 9b00b68593f..661356317ac 160000 --- a/src/tests +++ b/src/tests @@ -1 +1 @@ -Subproject commit 9b00b68593f5869eb51a6659e1cc983e875e616b +Subproject commit 661356317ac6df52208d54187e692472a25a01f8 From 3e4aad7ff6aa3febf622072e73958c77570cf9ef Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 25 Sep 2023 11:34:48 +0200 Subject: [PATCH 035/551] one more experiment --- .../TransactionProcessor.cs | 2 +- .../Nethermind.Runner/configs/volta.cfg | 61 ++++++++++++------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index f945a300715..9882055690f 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -327,7 +327,7 @@ private bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionO bool deleteCallerAccount = false; - if (!_worldState.AccountExists(tx.SenderAddress)) + if (!_worldState.AccountExists(tx.SenderAddress) && tx.IsSystem() == false) // Added for experiments { if (_logger.IsDebug) _logger.Debug($"TX sender account does not exist {tx.SenderAddress} - trying to recover it"); diff --git a/src/Nethermind/Nethermind.Runner/configs/volta.cfg b/src/Nethermind/Nethermind.Runner/configs/volta.cfg index 5e31fcd57fd..e5cadbf7152 100644 --- a/src/Nethermind/Nethermind.Runner/configs/volta.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/volta.cfg @@ -1,34 +1,49 @@ { "Init": { + "PubSubEnabled": true, + "WebSocketsEnabled": true, "IsMining": false, + "UseMemDb": true, "ChainSpecPath": "chainspec/volta.json", - "GenesisHash": "0xebd8b413ca7b7f84a8dd20d17519ce2b01954c74d94a0a739a3e416abe0e43e5", - "BaseDbPath": "nethermind_db/volta", - "LogFileName": "volta.logs.txt", - "MemoryHint": 768000000 + "BaseDbPath": "nethermind_db/hive2", + "LogFileName": "/hive.logs.txt" }, - "Network": { - "ActivePeersMaxCount": 25 - }, - "Sync": { - "FastSync": true, - "PivotNumber": 24630000, - "PivotHash": "0x6656a988ec331a0140c2347e71d6f17ecad3ee804de6fa9f9ec36ec6432af7eb", - "PivotTotalDifficulty": "8381154697262714355102916581044451047797938883", - "FastBlocks": true, - "UseGethLimitsInFastBlocks": false, - "FastSyncCatchUpHeightDelta": 10000000000 + "JsonRpc": { + "Enabled": true, + "Host": "0.0.0.0", + "Port": 8545, + "WebSocketsPort": 8546, + "EnabledModules": [ + "Debug", + "Eth", + "Subscribe", + "Trace", + "TxPool", + "Web3", + "Personal", + "Proof", + "Net", + "Parity", + "Health" + ], + "AdditionalRpcUrls": [ + "http://0.0.0.0:8550|http;ws|debug;net;eth;subscribe;engine;web3;client|no-auth", + "http://0.0.0.0:8551|http;ws|debug;net;eth;subscribe;engine;web3;client" + ] }, - "EthStats": { - "Name": "Nethermind Volta" - }, - "Metrics": { - "NodeName": "Volta" + "Network": { + "DiscoveryPort": 30303, + "P2PPort": 30303, + "ExternalIp": "127.0.0.1" }, - "Mining": { - "MinGasPrice": 1 + "Hive": { + "ChainFile": "/chain.rlp", + "GenesisFilePath": "/genesis.json", + "BlocksDir": "/blocks", + "KeysDir": "/keys" }, "Merge": { - "Enabled": false + "Enabled": true, + "TerminalTotalDifficulty": "0" } } From 6348277163d2bf0e0e5058775877a7349602a765 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 25 Sep 2023 16:21:41 +0200 Subject: [PATCH 036/551] experiments --- .../TransactionProcessing/TransactionProcessor.cs | 10 +++++----- src/Nethermind/Nethermind.State/StateProvider.cs | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 9882055690f..1358315d3fb 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -173,7 +173,7 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT else { if (!opts.HasFlag(ExecutionOptions.NoValidation)) - AddToBalance(tx, senderReservedGasPayment, spec); + _worldState.AddToBalance(tx.SenderAddress, senderReservedGasPayment, spec); if (!tx.IsSystem()) _worldState.DecrementNonce(tx.SenderAddress); @@ -327,7 +327,7 @@ private bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionO bool deleteCallerAccount = false; - if (!_worldState.AccountExists(tx.SenderAddress) && tx.IsSystem() == false) // Added for experiments + if (!_worldState.AccountExists(tx.SenderAddress) && !IsMainnetStyleSystemCall(tx, spec)) // Added for experiments { if (_logger.IsDebug) _logger.Debug($"TX sender account does not exist {tx.SenderAddress} - trying to recover it"); @@ -455,7 +455,7 @@ private bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTr } if (validate) - SubtractFromBalance(tx, senderReservedGasPayment, spec); + _worldState.SubtractFromBalance(tx.SenderAddress, senderReservedGasPayment, spec); return true; } @@ -526,7 +526,7 @@ protected virtual bool ExecuteEVMCall( // Fixes eth_estimateGas. // If sender is SystemUser subtracting value will cause InsufficientBalanceException if (validate || !tx.IsSystem()) - SubtractFromBalance(tx, tx.Value, spec); + _worldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); try { @@ -708,7 +708,7 @@ protected long Refund(Transaction tx, long unspentGas, TransactionSubstate subst _logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + refund); // If noValidation we didn't charge for gas, so do not refund if (!opts.HasFlag(ExecutionOptions.NoValidation)) - AddToBalance(tx, (ulong)(unspentGas + refund) * gasPrice, spec); + _worldState.AddToBalance(tx.SenderAddress, (ulong)(unspentGas + refund) * gasPrice, spec); spentGas -= refund; } diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index d3fc6e8155a..c664d8f058f 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -218,7 +218,8 @@ void ThrowNotExistingAccount() bool isZero = balanceChange.IsZero; if (isZero) { - if (releaseSpec.IsEip158Enabled && !isSubtracting) + bool ignoreTouch = isSubtracting && releaseSpec.MainnetSystemCalls; + if (releaseSpec.IsEip158Enabled && !ignoreTouch) { Account touched = GetThroughCache(address); if (touched is null) From dce9c1ca6d0e6573d4791d3fbc5f0d04128d9ee6 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 25 Sep 2023 16:34:23 +0200 Subject: [PATCH 037/551] more cosmetic --- .../TransactionProcessor.cs | 16 ---------------- .../ChainSpecStyle/ChainSpecBasedSpecProvider.cs | 4 ++-- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 1358315d3fb..348e3cf283e 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -207,22 +207,6 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT } } - private void AddToBalance(Transaction tx, in UInt256 balanceChange, IReleaseSpec spec) - { - if (IsMainnetStyleSystemCall(tx, spec)) - return; - - _worldState.AddToBalance(tx.SenderAddress, balanceChange, spec); - } - - private void SubtractFromBalance(Transaction tx, in UInt256 balanceChange, IReleaseSpec spec) - { - if (IsMainnetStyleSystemCall(tx, spec)) - return; - - _worldState.SubtractFromBalance(tx.SenderAddress, balanceChange, spec); - } - private bool IsMainnetStyleSystemCall(Transaction tx, IReleaseSpec spec) => tx.IsSystem() && spec.MainnetSystemCalls; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index fcd25a94758..797a2fbd1c6 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -241,8 +241,8 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip6780Enabled = (chainSpec.Parameters.Eip6780TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; - releaseSpec.MainnetSystemCalls = false; - // chainSpec.SealEngineType != SealEngineType.AuRa || releaseSpec.IsEip4788Enabled; // ToDo add comment + releaseSpec.MainnetSystemCalls = chainSpec.SealEngineType != SealEngineType.AuRa; + // chainSpec.SealEngineType != SealEngineType.AuRa || releaseSpec.IsEip4788Enabled; // ToDo do we want to change for Gnosis with 4788? return releaseSpec; } From 33de7083d2165631c60be426ca51babb4565a7d4 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 26 Sep 2023 13:41:10 +0200 Subject: [PATCH 038/551] refactoring --- src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs | 2 +- src/Nethermind/Nethermind.Core/TransactionExtensions.cs | 6 ++++-- .../TransactionProcessing/TransactionProcessor.cs | 7 ++----- .../ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs | 8 ++++---- .../Nethermind.Specs.Test/OverridableReleaseSpec.cs | 2 +- .../ChainSpecStyle/ChainSpecBasedSpecProvider.cs | 2 +- src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs | 2 +- src/Nethermind/Nethermind.Specs/ReleaseSpec.cs | 2 +- .../Nethermind.Specs/SystemTransactionReleaseSpec.cs | 2 +- src/Nethermind/Nethermind.State/StateProvider.cs | 2 +- 10 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 18062e4c3f5..b3613d883cd 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -360,7 +360,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool IsBeaconBlockRootAvailable => IsEip4788Enabled; public bool MCopyIncluded => IsEip5656Enabled; - public bool MainnetSystemCalls { get; } // ToDo add comment + public bool AuRaSystemCalls { get; } // ToDo add comment public bool BlobBaseFeeEnabled => IsEip4844Enabled; } } diff --git a/src/Nethermind/Nethermind.Core/TransactionExtensions.cs b/src/Nethermind/Nethermind.Core/TransactionExtensions.cs index 3ec27c75982..6a3151131d0 100644 --- a/src/Nethermind/Nethermind.Core/TransactionExtensions.cs +++ b/src/Nethermind/Nethermind.Core/TransactionExtensions.cs @@ -65,7 +65,9 @@ public static bool IsAboveInitCode(this Transaction tx, IReleaseSpec spec) { return tx.IsContractCreation && spec.IsEip3860Enabled && (tx.DataLength) > spec.MaxInitCodeSize; } - - + public static bool IsGethStyleSystemCall(this Transaction tx, IReleaseSpec spec) => + tx.IsSystem() && !spec.AuRaSystemCalls; + public static bool IsAuRaSystemCall(this Transaction tx, IReleaseSpec spec) => + tx.IsSystem() && spec.AuRaSystemCalls; } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 348e3cf283e..4657590dc76 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -99,7 +99,7 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT { BlockHeader header = blCtx.Header; IReleaseSpec spec = _specProvider.GetSpec(header); - if (tx.IsSystem() && !spec.MainnetSystemCalls) // ToDo add comment + if (tx.IsAuRaSystemCall(spec)) spec = new SystemTransactionReleaseSpec(spec); // restore is CallAndRestore - previous call, we will restore state after the execution @@ -207,9 +207,6 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT } } - private bool IsMainnetStyleSystemCall(Transaction tx, IReleaseSpec spec) => - tx.IsSystem() && spec.MainnetSystemCalls; - private void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) { @@ -311,7 +308,7 @@ private bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionO bool deleteCallerAccount = false; - if (!_worldState.AccountExists(tx.SenderAddress) && !IsMainnetStyleSystemCall(tx, spec)) // Added for experiments + if (!_worldState.AccountExists(tx.SenderAddress) && !tx.IsGethStyleSystemCall(spec)) // ToDo add comment { if (_logger.IsDebug) _logger.Debug($"TX sender account does not exist {tx.SenderAddress} - trying to recover it"); diff --git a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs index 618fbb1c79c..36b504df40d 100644 --- a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs @@ -317,8 +317,8 @@ private void VerifyGnosisShanghaiExceptions(IReleaseSpec preShanghaiSpec, IRelea preShanghaiSpec.IsEip170Enabled.Should().Be(false); postShanghaiSpec.IsEip170Enabled.Should().Be(true); - preShanghaiSpec.MainnetSystemCalls.Should().Be(false); - postShanghaiSpec.MainnetSystemCalls.Should().Be(false); + preShanghaiSpec.AuRaSystemCalls.Should().Be(false); + postShanghaiSpec.AuRaSystemCalls.Should().Be(false); } private void VerifyGnosisPreShanghaiExceptions(ISpecProvider specProvider) @@ -464,7 +464,7 @@ private static void CompareSpecs(IReleaseSpec expectedSpec, IReleaseSpec actualS .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.IsEip1283Enabled)) .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.LimitCodeSize)) .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.UseConstantinopleNetGasMetering)) - .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.MainnetSystemCalls))) + .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.AuRaSystemCalls))) { Assert.That(propertyInfo.GetValue(actualSpec), Is.EqualTo(propertyInfo.GetValue(expectedSpec)), activation + "." + propertyInfo.Name); @@ -760,7 +760,7 @@ void TestTransitions(ForkActivation activation, Action changes) r.MaximumUncleCount = 2; r.WithdrawalTimestamp = ulong.MaxValue; r.Eip4844TransitionTimestamp = ulong.MaxValue; - r.MainnetSystemCalls = true; + r.AuRaSystemCalls = true; }); TestTransitions((ForkActivation)1L, r => diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index c435d2139c4..3796f398fe9 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -146,7 +146,7 @@ public ulong Eip4844TransitionTimestamp } } - public bool MainnetSystemCalls => _spec.MainnetSystemCalls; + public bool AuRaSystemCalls => _spec.AuRaSystemCalls; public bool IsEip1153Enabled => _spec.IsEip1153Enabled; public bool IsEip3651Enabled => _spec.IsEip3651Enabled; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index 797a2fbd1c6..7c2b5a42d8a 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -241,7 +241,7 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip6780Enabled = (chainSpec.Parameters.Eip6780TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; - releaseSpec.MainnetSystemCalls = chainSpec.SealEngineType != SealEngineType.AuRa; + releaseSpec.AuRaSystemCalls = chainSpec.SealEngineType == SealEngineType.AuRa; // chainSpec.SealEngineType != SealEngineType.AuRa || releaseSpec.IsEip4788Enabled; // ToDo do we want to change for Gnosis with 4788? return releaseSpec; diff --git a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs index adfb0955e20..e0e380c5fee 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs @@ -26,7 +26,7 @@ protected Olympic() Eip1559TransitionBlock = long.MaxValue; ValidateChainId = true; ValidateReceipts = true; - MainnetSystemCalls = true; + AuRaSystemCalls = true; } public static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Olympic()); diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index d67cbeb13e4..c9a3ded4269 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -70,7 +70,7 @@ public ReleaseSpec Clone() public long Eip1559TransitionBlock { get; set; } public ulong WithdrawalTimestamp { get; set; } public ulong Eip4844TransitionTimestamp { get; set; } - public bool MainnetSystemCalls { get; set; } + public bool AuRaSystemCalls { get; set; } public Address Eip1559FeeCollector { get; set; } public UInt256? Eip1559BaseFeeMinValue { get; set; } public bool IsEip1153Enabled { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index 817df033ed0..0f6000312a2 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -127,6 +127,6 @@ public bool IsEip158IgnoredAccount(Address address) public bool IsEip4788Enabled => _spec.IsEip4788Enabled; public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; - public bool MainnetSystemCalls => false; + public bool AuRaSystemCalls => false; } } diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index c664d8f058f..e560bb6945f 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -218,7 +218,7 @@ void ThrowNotExistingAccount() bool isZero = balanceChange.IsZero; if (isZero) { - bool ignoreTouch = isSubtracting && releaseSpec.MainnetSystemCalls; + bool ignoreTouch = isSubtracting && !releaseSpec.AuRaSystemCalls; if (releaseSpec.IsEip158Enabled && !ignoreTouch) { Account touched = GetThroughCache(address); From 30bacdd629be3fc35c0df45244f434d4fe935af7 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 26 Sep 2023 13:47:42 +0200 Subject: [PATCH 039/551] fix --- src/Nethermind/Nethermind.State/StateProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index e560bb6945f..585622ce97f 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -732,7 +732,7 @@ private void PushUpdate(Address address, Account account) private void PushTouch(Address address, Account account, IReleaseSpec releaseSpec, bool isZero) { - if (isZero && releaseSpec.IsEip158IgnoredAccount(address)) return; + if (isZero && releaseSpec.IsEip158IgnoredAccount(address) && releaseSpec.AuRaSystemCalls) return; Push(ChangeType.Touch, address, account); } From 12bfa821818a20bc74a17946728e61633d03ae77 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 27 Sep 2023 11:02:22 +0200 Subject: [PATCH 040/551] Update address --- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index 83f6b6d81d0..7f9244a187a 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -17,7 +17,7 @@ namespace Nethermind.Blockchain.BeaconBlockRoot; public class BeaconBlockRootHandler : IBeaconBlockRootHandler { private readonly ITransactionProcessor _processor; - private static Address Default4788Address = new Address("0xbEAC020008aFF7331c0A389CB2AAb67597567d7a"); + private static Address Default4788Address = new Address("0x000f3df6d732807ef1319fb7b8bb8522d0beac02"); private readonly ILogger _logger; private const long GasLimit = 30_000_000L; public BeaconBlockRootHandler( From f80ed7b8cdebbb0229b747f2a6595908167a2223 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 6 Oct 2023 17:02:14 +0200 Subject: [PATCH 041/551] cosmetic changes --- .../Nethermind.Core/Specs/IReleaseSpec.cs | 16 ++++- .../Nethermind.Runner/configs/volta.cfg | 62 +++++++------------ 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index b3613d883cd..5966129629b 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -360,7 +360,21 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool IsBeaconBlockRootAvailable => IsEip4788Enabled; public bool MCopyIncluded => IsEip5656Enabled; - public bool AuRaSystemCalls { get; } // ToDo add comment + /// + /// AuRaSystemCalls - true + /// GethStyleSystemCalls - false + /// + /// + /// We support two types of system calls in Nethermind: + /// 1. Geth-style: + /// - We don't create a system account if it doesn't exist. + /// - We adhere to geth behavior for State clearing - no state touch for subtraction. + /// - We don't use a custom release spec for those transactions. + /// 2. AuRa (Parity-style): + /// - We create a system account if it doesn't exist. + /// - We use a custom release spec with EIP158 disabled. + /// + public bool AuRaSystemCalls { get; } public bool BlobBaseFeeEnabled => IsEip4844Enabled; } } diff --git a/src/Nethermind/Nethermind.Runner/configs/volta.cfg b/src/Nethermind/Nethermind.Runner/configs/volta.cfg index e5cadbf7152..7c250b261d1 100644 --- a/src/Nethermind/Nethermind.Runner/configs/volta.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/volta.cfg @@ -1,49 +1,35 @@ { "Init": { - "PubSubEnabled": true, - "WebSocketsEnabled": true, "IsMining": false, - "UseMemDb": true, "ChainSpecPath": "chainspec/volta.json", - "BaseDbPath": "nethermind_db/hive2", - "LogFileName": "/hive.logs.txt" - }, - "JsonRpc": { - "Enabled": true, - "Host": "0.0.0.0", - "Port": 8545, - "WebSocketsPort": 8546, - "EnabledModules": [ - "Debug", - "Eth", - "Subscribe", - "Trace", - "TxPool", - "Web3", - "Personal", - "Proof", - "Net", - "Parity", - "Health" - ], - "AdditionalRpcUrls": [ - "http://0.0.0.0:8550|http;ws|debug;net;eth;subscribe;engine;web3;client|no-auth", - "http://0.0.0.0:8551|http;ws|debug;net;eth;subscribe;engine;web3;client" - ] + "GenesisHash": "0xebd8b413ca7b7f84a8dd20d17519ce2b01954c74d94a0a739a3e416abe0e43e5", + "BaseDbPath": "nethermind_db/volta", + "LogFileName": "volta.logs.txt", + "MemoryHint": 768000000 }, "Network": { - "DiscoveryPort": 30303, - "P2PPort": 30303, - "ExternalIp": "127.0.0.1" + "ActivePeersMaxCount": 25 + }, + "Sync": { + "FastSync": true, + "PivotNumber": 24630000, + "PivotHash": "0x6656a988ec331a0140c2347e71d6f17ecad3ee804de6fa9f9ec36ec6432af7eb", + "PivotTotalDifficulty": "8381154697262714355102916581044451047797938883", + "FastBlocks": true, + "UseGethLimitsInFastBlocks": false, + "FastSyncCatchUpHeightDelta": 10000000000 + }, + "EthStats": { + "Name": "Nethermind Volta" + }, + "Metrics": { + "NodeName": "Volta" }, - "Hive": { - "ChainFile": "/chain.rlp", - "GenesisFilePath": "/genesis.json", - "BlocksDir": "/blocks", - "KeysDir": "/keys" + "Mining": { + "MinGasPrice": 1 }, "Merge": { - "Enabled": true, - "TerminalTotalDifficulty": "0" + "Enabled": false } } + From f6cd3173864ddc967f3768b57a5ec2f121922bed Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 6 Oct 2023 17:18:00 +0200 Subject: [PATCH 042/551] cosmetic --- .../TransactionProcessing/TransactionProcessor.cs | 2 +- .../ChainSpecStyle/ChainSpecBasedSpecProvider.cs | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 4657590dc76..7945695bd15 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -308,7 +308,7 @@ private bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionO bool deleteCallerAccount = false; - if (!_worldState.AccountExists(tx.SenderAddress) && !tx.IsGethStyleSystemCall(spec)) // ToDo add comment + if (!_worldState.AccountExists(tx.SenderAddress) && !tx.IsGethStyleSystemCall(spec)) { if (_logger.IsDebug) _logger.Debug($"TX sender account does not exist {tx.SenderAddress} - trying to recover it"); diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index 7c2b5a42d8a..121272a8442 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -242,8 +242,7 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; releaseSpec.AuRaSystemCalls = chainSpec.SealEngineType == SealEngineType.AuRa; - // chainSpec.SealEngineType != SealEngineType.AuRa || releaseSpec.IsEip4788Enabled; // ToDo do we want to change for Gnosis with 4788? - + return releaseSpec; } From 43e307ee81b200d720a67e190f18a4d49f63e72a Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 6 Oct 2023 17:27:43 +0200 Subject: [PATCH 043/551] cosmetic --- .../ChainSpecStyle/ChainSpecBasedSpecProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index 121272a8442..56ff7dd6dbc 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -242,7 +242,7 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; releaseSpec.AuRaSystemCalls = chainSpec.SealEngineType == SealEngineType.AuRa; - + return releaseSpec; } From 88e02143b4167ad2f7b167a74c8265ecbf430b98 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Thu, 19 Oct 2023 15:32:12 +0100 Subject: [PATCH 044/551] adjust ProofRpcModuleTests expected values --- .../Modules/Proof/ProofRpcModuleTests.cs | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index 22afef11807..d81ce273219 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -350,7 +350,7 @@ public async Task Can_call_with_storage_load() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -363,7 +363,7 @@ public async Task Can_call_with_many_storage_loads() .Op(Instruction.SLOAD) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -376,7 +376,7 @@ public async Task Can_call_with_storage_write() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -390,7 +390,7 @@ public async Task Can_call_with_extcodecopy() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(3)); } [TestCase] @@ -404,7 +404,7 @@ public async Task Can_call_with_extcodecopy_to_system_account() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -415,7 +415,7 @@ public async Task Can_call_with_extcodesize() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(3)); } [TestCase] @@ -426,7 +426,7 @@ public async Task Can_call_with_extcodesize_to_system_account() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -438,7 +438,7 @@ public async Task Can_call_with_extcodehash() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(3)); } [TestCase] @@ -450,7 +450,7 @@ public async Task Can_call_with_extcodehash_to_system_account() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -461,7 +461,7 @@ public async Task Can_call_with_just_basic_addresses() .Op(Instruction.STOP) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -486,7 +486,7 @@ public async Task Can_call_with_self_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -498,7 +498,7 @@ public async Task Can_call_with_balance_of_system_account() .Op(Instruction.BALANCE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -550,7 +550,7 @@ public async Task Can_call_with_delegate_call_to_system_account() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -586,7 +586,7 @@ public async Task Can_call_with_call_with_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(3)); } [TestCase] @@ -603,7 +603,7 @@ public async Task Can_call_with_static_call() .Op(Instruction.STATICCALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(3)); } [TestCase] @@ -620,7 +620,7 @@ public async Task Can_call_with_delegate_call() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(3)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -638,7 +638,7 @@ public async Task Can_call_with_call_with_non_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(3)); } [TestCase] @@ -651,7 +651,7 @@ public async Task Can_call_with_self_destruct() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(3)); } [TestCase] @@ -679,7 +679,7 @@ public async Task Can_call_with_many_storage_writes() .Op(Instruction.SSTORE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] From 65c0384951e96b4b8cc8fa47e1ffbfd9e5af43b6 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Thu, 19 Oct 2023 22:43:15 +0100 Subject: [PATCH 045/551] Revert "adjust ProofRpcModuleTests expected values" This reverts commit 88e02143b4167ad2f7b167a74c8265ecbf430b98. --- .../Modules/Proof/ProofRpcModuleTests.cs | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index d81ce273219..22afef11807 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -350,7 +350,7 @@ public async Task Can_call_with_storage_load() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -363,7 +363,7 @@ public async Task Can_call_with_many_storage_loads() .Op(Instruction.SLOAD) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -376,7 +376,7 @@ public async Task Can_call_with_storage_write() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -390,7 +390,7 @@ public async Task Can_call_with_extcodecopy() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(3)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -404,7 +404,7 @@ public async Task Can_call_with_extcodecopy_to_system_account() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -415,7 +415,7 @@ public async Task Can_call_with_extcodesize() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(3)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -426,7 +426,7 @@ public async Task Can_call_with_extcodesize_to_system_account() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -438,7 +438,7 @@ public async Task Can_call_with_extcodehash() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(3)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -450,7 +450,7 @@ public async Task Can_call_with_extcodehash_to_system_account() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -461,7 +461,7 @@ public async Task Can_call_with_just_basic_addresses() .Op(Instruction.STOP) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -486,7 +486,7 @@ public async Task Can_call_with_self_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] @@ -498,7 +498,7 @@ public async Task Can_call_with_balance_of_system_account() .Op(Instruction.BALANCE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -550,7 +550,7 @@ public async Task Can_call_with_delegate_call_to_system_account() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -586,7 +586,7 @@ public async Task Can_call_with_call_with_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(3)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -603,7 +603,7 @@ public async Task Can_call_with_static_call() .Op(Instruction.STATICCALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(3)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -620,7 +620,7 @@ public async Task Can_call_with_delegate_call() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(3)); } [TestCase] @@ -638,7 +638,7 @@ public async Task Can_call_with_call_with_non_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(3)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -651,7 +651,7 @@ public async Task Can_call_with_self_destruct() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(3)); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -679,7 +679,7 @@ public async Task Can_call_with_many_storage_writes() .Op(Instruction.SSTORE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1)); } [TestCase] From bd955d88000295b242f158c4906c40c021ce7cdb Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Mon, 23 Oct 2023 13:29:17 +0100 Subject: [PATCH 046/551] adjust ProofRPC tests --- .../Modules/Proof/ProofRpcModuleTests.cs | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index 22afef11807..dbe829d4354 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -350,7 +350,7 @@ public async Task Can_call_with_storage_load() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -363,7 +363,7 @@ public async Task Can_call_with_many_storage_loads() .Op(Instruction.SLOAD) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -376,7 +376,7 @@ public async Task Can_call_with_storage_write() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -390,7 +390,7 @@ public async Task Can_call_with_extcodecopy() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -404,7 +404,7 @@ public async Task Can_call_with_extcodecopy_to_system_account() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -415,7 +415,7 @@ public async Task Can_call_with_extcodesize() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -426,7 +426,7 @@ public async Task Can_call_with_extcodesize_to_system_account() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -438,7 +438,7 @@ public async Task Can_call_with_extcodehash() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -450,7 +450,7 @@ public async Task Can_call_with_extcodehash_to_system_account() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -461,7 +461,7 @@ public async Task Can_call_with_just_basic_addresses() .Op(Instruction.STOP) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -486,7 +486,7 @@ public async Task Can_call_with_self_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -498,7 +498,7 @@ public async Task Can_call_with_balance_of_system_account() .Op(Instruction.BALANCE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -550,7 +550,7 @@ public async Task Can_call_with_delegate_call_to_system_account() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -586,7 +586,7 @@ public async Task Can_call_with_call_with_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -603,7 +603,7 @@ public async Task Can_call_with_static_call() .Op(Instruction.STATICCALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -620,7 +620,7 @@ public async Task Can_call_with_delegate_call() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(3)); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -638,7 +638,7 @@ public async Task Can_call_with_call_with_non_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -651,7 +651,7 @@ public async Task Can_call_with_self_destruct() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -679,7 +679,7 @@ public async Task Can_call_with_many_storage_writes() .Op(Instruction.SSTORE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] From a1fdcd3c78bd152e283098c9aa74d5f65c2145bb Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 25 Oct 2023 13:59:15 +0100 Subject: [PATCH 047/551] update spec tests --- .../ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs index 1e1a9d7ffbd..db14eeb8d93 100644 --- a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs @@ -334,8 +334,8 @@ private void VerifyGnosisShanghaiExceptions(IReleaseSpec preShanghaiSpec, IRelea preShanghaiSpec.IsEip170Enabled.Should().Be(false); postShanghaiSpec.IsEip170Enabled.Should().Be(true); - preShanghaiSpec.AuRaSystemCalls.Should().Be(false); - postShanghaiSpec.AuRaSystemCalls.Should().Be(false); + preShanghaiSpec.AuRaSystemCalls.Should().Be(true); + postShanghaiSpec.AuRaSystemCalls.Should().Be(true); } private void VerifyGnosisPreShanghaiExceptions(ISpecProvider specProvider) @@ -783,7 +783,7 @@ void TestTransitions(ForkActivation activation, Action changes) r.MaximumUncleCount = 2; r.WithdrawalTimestamp = ulong.MaxValue; r.Eip4844TransitionTimestamp = ulong.MaxValue; - r.AuRaSystemCalls = true; + r.AuRaSystemCalls = false; }); TestTransitions((ForkActivation)1L, r => From facf07ccd5bfa53fdb0e74d4249286fc0364b409 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Thu, 2 Nov 2023 17:31:21 +0100 Subject: [PATCH 048/551] minor refactor + fix --- .../AuraSystemTxProcessor.cs | 548 ++++++++++++++++++ .../GethSystemTxProcessor.cs | 46 ++ .../ITransactionProcessor.cs | 29 + .../TransactionProcessor.cs | 92 ++- 4 files changed, 656 insertions(+), 59 deletions(-) create mode 100644 src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs create mode 100644 src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs new file mode 100644 index 00000000000..d404b3bd4d0 --- /dev/null +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs @@ -0,0 +1,548 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm.CodeAnalysis; +using Nethermind.Evm.Tracing; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Specs; +using Nethermind.State; +using Nethermind.State.Tracing; +using static Nethermind.Core.Extensions.MemoryExtensions; + +using static Nethermind.Evm.VirtualMachine; + +namespace Nethermind.Evm.TransactionProcessing +{ + public class AuraSystemTxProcessor : ITransactionProcessor + { + protected EthereumEcdsa Ecdsa { get; private init; } + protected ILogger Logger { get; private init; } + protected ISpecProvider SpecProvider { get; private init; } + protected IWorldState WorldState { get; private init; } + protected IVirtualMachine VirtualMachine { get; private init; } + + public AuraSystemTxProcessor( + ISpecProvider? specProvider, + IWorldState? worldState, + IVirtualMachine? virtualMachine, + EthereumEcdsa? ecdsa, + ILogger? logger) + { + Logger = logger ?? throw new ArgumentNullException(nameof(logger)); + SpecProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); + WorldState = worldState ?? throw new ArgumentNullException(nameof(worldState)); + VirtualMachine = virtualMachine ?? throw new ArgumentNullException(nameof(virtualMachine)); + Ecdsa = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa)); + } + + public void CallAndRestore(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) + { + Execute(transaction, blCtx, txTracer, ExecutionOptions.CommitAndRestore); + } + + public void BuildUp(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) + { + // we need to treat the result of previous transaction as the original value of next transaction + // when we do not commit + WorldState.TakeSnapshot(true); + Execute(transaction, blCtx, txTracer, ExecutionOptions.None); + } + + public void Execute(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) + { + Execute(transaction, blCtx, txTracer, ExecutionOptions.Commit); + } + + public void Trace(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) + { + Execute(transaction, blCtx, txTracer, ExecutionOptions.NoValidation); + } + + protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) + { + GetSpecFromHeader(blCtx, out BlockHeader header, out IReleaseSpec spec); + + // restore is CallAndRestore - previous call, we will restore state after the execution + bool restore = opts.HasFlag(ExecutionOptions.Restore); + // commit - is for standard execute, we will commit thee state after execution + // !commit - is for build up during block production, we won't commit state after each transaction to support rollbacks + // we commit only after all block is constructed + bool commit = opts.HasFlag(ExecutionOptions.Commit) || !spec.IsEip658Enabled; + + if (!ValidateStatic(tx, header, spec, tracer, opts, out long intrinsicGas)) + return; + + UInt256 effectiveGasPrice = + tx.CalculateEffectiveGasPrice(spec.IsEip1559Enabled, header.BaseFeePerGas); + + if (opts == ExecutionOptions.Commit || opts == ExecutionOptions.None) + { + decimal gasPrice = (decimal)effectiveGasPrice / 1_000_000_000m; + Metrics.MinGasPrice = Math.Min(gasPrice, Metrics.MinGasPrice); + Metrics.MaxGasPrice = Math.Max(gasPrice, Metrics.MaxGasPrice); + + Metrics.BlockMinGasPrice = Math.Min(gasPrice, Metrics.BlockMinGasPrice); + Metrics.BlockMaxGasPrice = Math.Max(gasPrice, Metrics.BlockMaxGasPrice); + + Metrics.AveGasPrice = + (Metrics.AveGasPrice * Metrics.Transactions + gasPrice) / (Metrics.Transactions + 1); + Metrics.EstMedianGasPrice += + Metrics.AveGasPrice * 0.01m * decimal.Sign(gasPrice - Metrics.EstMedianGasPrice); + Metrics.Transactions++; + + Metrics.BlockAveGasPrice = (Metrics.BlockAveGasPrice * Metrics.BlockTransactions + gasPrice) / + (Metrics.BlockTransactions + 1); + Metrics.BlockEstMedianGasPrice += Metrics.BlockAveGasPrice * 0.01m * + decimal.Sign(gasPrice - Metrics.BlockEstMedianGasPrice); + Metrics.BlockTransactions++; + } + + bool deleteCallerAccount = RecoverSenderIfNeeded(tx, spec, opts, effectiveGasPrice); + + if (!ValidateSender(tx, header, spec, tracer, opts)) + return; + + if (!BuyGas(tx, header, spec, tracer, opts, effectiveGasPrice, out UInt256 premiumPerGas, + out UInt256 senderReservedGasPayment)) + return; + + if (!IncrementNonce(tx, header, spec, tracer, opts)) + return; + + if (commit) + WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance); + + ExecutionEnvironment env = BuildExecutionEnvironmnet(tx, blCtx, spec, tracer, opts, effectiveGasPrice); + + long gasAvailable = tx.GasLimit - intrinsicGas; + if (!ExecuteEVMCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, + out long spentGas, out byte statusCode)) + return; + + if (!PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode)) + return; + + // Finalize + if (restore) + { + WorldState.Reset(); + if (deleteCallerAccount) + { + WorldState.DeleteAccount(tx.SenderAddress); + } + else + { + if (!opts.HasFlag(ExecutionOptions.NoValidation)) + WorldState.AddToBalance(tx.SenderAddress, senderReservedGasPayment, spec); + + WorldState.Commit(spec); + } + } + else if (commit) + { + WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullStateTracer.Instance); + } + + if (tracer.IsTracingReceipt) + { + Hash256 stateRoot = null; + if (!spec.IsEip658Enabled) + { + WorldState.RecalculateStateRoot(); + stateRoot = WorldState.StateRoot; + } + + if (statusCode == StatusCode.Failure) + { + byte[] output = (substate?.ShouldRevert ?? false) ? substate.Output.ToArray() : Array.Empty(); + tracer.MarkAsFailed(env.ExecutingAccount, spentGas, output, substate?.Error, stateRoot); + } + else + { + LogEntry[] logs = substate.Logs.Any() ? substate.Logs.ToArray() : Array.Empty(); + tracer.MarkAsSuccess(env.ExecutingAccount, spentGas, substate.Output.ToArray(), logs, stateRoot); + } + } + } + + protected virtual void GetSpecFromHeader(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) + { + header = blCtx.Header; + spec = SpecProvider.GetSpec(header); + spec = new SystemTransactionReleaseSpec(spec); + } + + protected void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) + { + block.GasUsed += tx.GasLimit; + + Address recipient = tx.To ?? ContractAddress.From( + tx.SenderAddress ?? Address.Zero, + WorldState.GetNonce(tx.SenderAddress ?? Address.Zero)); + + if (txTracer.IsTracingReceipt) + { + Hash256? stateRoot = null; + if (!spec.IsEip658Enabled) + { + WorldState.RecalculateStateRoot(); + stateRoot = WorldState.StateRoot; + } + + txTracer.MarkAsFailed(recipient, tx.GasLimit, Array.Empty(), reason ?? "invalid", stateRoot); + } + } + + + /// + /// Validates the transaction, in a static manner (i.e. without accesing state/storage). + /// It basically ensures the transaction is well formed (i.e. no null values where not allowed, no overflows, etc). + /// As a part of validating the transaction the premium per gas will be calculated, to save computation this + /// is returned in an out parameter. + /// + /// The transaction to validate + /// The block containing the transaction. Only BaseFee is being used from the block atm. + /// The release spec with which the transaction will be executed + /// The transaction tracer + /// Options (Flags) to use for execution + /// Computed premium per gas + /// + protected virtual bool ValidateStatic(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + ExecutionOptions opts, out long intrinsicGas) + { + intrinsicGas = IntrinsicGasCalculator.Calculate(tx, spec); + + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + if (tx.SenderAddress is null) + { + TraceLogInvalidTx(tx, "SENDER_NOT_SPECIFIED"); + QuickFail(tx, header, spec, tracer, "sender not specified"); + return false; + } + + if (validate && tx.Nonce >= ulong.MaxValue - 1) + { + // we are here if nonce is at least (ulong.MaxValue - 1). If tx is contract creation, + // it is max possible value. Otherwise, (ulong.MaxValue - 1) is allowed, but ulong.MaxValue not. + if (tx.IsContractCreation || tx.Nonce == ulong.MaxValue) + { + TraceLogInvalidTx(tx, "NONCE_OVERFLOW"); + QuickFail(tx, header, spec, tracer, "nonce overflow"); + return false; + } + } + + if (tx.IsAboveInitCode(spec)) + { + TraceLogInvalidTx(tx, + $"CREATE_TRANSACTION_SIZE_EXCEEDS_MAX_INIT_CODE_SIZE {tx.DataLength} > {spec.MaxInitCodeSize}"); + QuickFail(tx, header, spec, tracer, "EIP-3860 - transaction size over max init code size"); + return false; + } + + return true; + } + + // TODO Should we remove this already + protected virtual bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionOptions opts, in UInt256 effectiveGasPrice) + { + bool commit = opts.HasFlag(ExecutionOptions.Commit) || !spec.IsEip658Enabled; + bool restore = opts.HasFlag(ExecutionOptions.Restore); + bool noValidation = opts.HasFlag(ExecutionOptions.NoValidation); + + bool deleteCallerAccount = false; + + if (!WorldState.AccountExists(tx.SenderAddress)) + { + if (Logger.IsDebug) Logger.Debug($"TX sender account does not exist {tx.SenderAddress} - trying to recover it"); + + Address prevSender = tx.SenderAddress; + // hacky fix for the potential recovery issue + if (tx.Signature is not null) + tx.SenderAddress = Ecdsa.RecoverAddress(tx, !spec.ValidateChainId); + + if (prevSender != tx.SenderAddress) + { + if (Logger.IsWarn) + Logger.Warn($"TX recovery issue fixed - tx was coming with sender {prevSender} and the now it recovers to {tx.SenderAddress}"); + } + else + { + TraceLogInvalidTx(tx, $"SENDER_ACCOUNT_DOES_NOT_EXIST {tx.SenderAddress}"); + if (!commit || noValidation || effectiveGasPrice == UInt256.Zero) + { + deleteCallerAccount = !commit || restore; + WorldState.CreateAccount(tx.SenderAddress, UInt256.Zero); + } + } + + if (tx.SenderAddress is null) + { + throw new InvalidDataException( + $"Failed to recover sender address on tx {tx.Hash} when previously recovered sender account did not exist."); + } + } + + return deleteCallerAccount; + } + + + protected virtual bool ValidateSender(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + ExecutionOptions opts) + { + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + if (validate && WorldState.IsInvalidContractSender(spec, tx.SenderAddress)) + { + TraceLogInvalidTx(tx, "SENDER_IS_CONTRACT"); + QuickFail(tx, header, spec, tracer, "sender has deployed code"); + return false; + } + + return true; + } + + protected virtual bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, + in UInt256 effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment) + { + premiumPerGas = UInt256.Zero; + senderReservedGasPayment = UInt256.Zero; + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + if (validate) + WorldState.SubtractFromBalance(tx.SenderAddress, senderReservedGasPayment, spec); + + return true; + } + + protected virtual bool IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + ExecutionOptions opts) + { + return true; + } + + protected virtual ExecutionEnvironment BuildExecutionEnvironmnet( + Transaction tx, BlockExecutionContext blCtx, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, + in UInt256 effectiveGasPrice) + { + Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0) ?? + // this transaction is not a contract creation so it should have the recipient known and not null + throw new InvalidDataException("Recipient has not been resolved properly before tx execution"); + + TxExecutionContext executionContext = + new(blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); + + CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data.AsArray()) + : VirtualMachine.GetCachedCodeInfo(WorldState, recipient, spec); + + byte[] inputData = tx.IsMessageCall ? tx.Data.AsArray() ?? Array.Empty() : Array.Empty(); + + return new ExecutionEnvironment + ( + txExecutionContext: executionContext, + value: tx.Value, + transferValue: tx.Value, + caller: tx.SenderAddress, + codeSource: recipient, + executingAccount: recipient, + inputData: inputData, + codeInfo: codeInfo + ); + } + + protected virtual bool ExecuteEVMCall( + Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, + in long gasAvailable, in ExecutionEnvironment env, + out TransactionSubstate? substate, out long spentGas, out byte statusCode) + { + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + substate = null; + spentGas = tx.GasLimit; + statusCode = StatusCode.Failure; + + long unspentGas = gasAvailable; + + Snapshot snapshot = WorldState.TakeSnapshot(); + + // Fixes eth_estimateGas. + // If sender is SystemUser subtracting value will cause InsufficientBalanceException + if (validate) + WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); + + try + { + if (tx.IsContractCreation) + { + // if transaction is a contract creation then recipient address is the contract deployment address + PrepareAccountForContractDeployment(env.ExecutingAccount, spec); + } + + ExecutionType executionType = + tx.IsContractCreation ? ExecutionType.Create : ExecutionType.Transaction; + + using (EvmState state = new(unspentGas, env, executionType, true, snapshot, false)) + { + if (spec.UseTxAccessLists) + { + state.WarmUp(tx.AccessList); // eip-2930 + } + + if (spec.UseHotAndColdStorage) + { + state.WarmUp(tx.SenderAddress); // eip-2929 + state.WarmUp(env.ExecutingAccount); // eip-2929 + } + + if (spec.AddCoinbaseToTxAccessList) + { + state.WarmUp(header.GasBeneficiary); + } + + if (!tracer.IsTracingActions) + { + substate = VirtualMachine.Run(state, WorldState, tracer); + } + else + { + substate = VirtualMachine.Run(state, WorldState, tracer); + } + + unspentGas = state.GasAvailable; + + if (tracer.IsTracingAccess) + { + tracer.ReportAccess(state.AccessedAddresses, state.AccessedStorageCells); + } + } + + if (substate.ShouldRevert || substate.IsError) + { + if (Logger.IsTrace) + Logger.Trace("Restoring state from before transaction"); + WorldState.Restore(snapshot); + } + else + { + // tks: there is similar code fo contract creation from init and from CREATE + // this may lead to inconsistencies (however it is tested extensively in blockchain tests) + if (tx.IsContractCreation) + { + long codeDepositGasCost = CodeDepositHandler.CalculateCost(substate.Output.Length, spec); + if (unspentGas < codeDepositGasCost && spec.ChargeForTopLevelCreate) + { + throw new OutOfGasException(); + } + + if (CodeDepositHandler.CodeIsInvalid(spec, substate.Output)) + { + throw new InvalidCodeException(); + } + + if (unspentGas >= codeDepositGasCost) + { + WorldState.InsertCode(env.ExecutingAccount, substate.Output, spec); + unspentGas -= codeDepositGasCost; + } + } + + foreach (Address toBeDestroyed in substate.DestroyList) + { + if (Logger.IsTrace) + Logger.Trace($"Destroying account {toBeDestroyed}"); + + WorldState.ClearStorage(toBeDestroyed); + WorldState.DeleteAccount(toBeDestroyed); + + if (tracer.IsTracingRefunds) + tracer.ReportRefund(RefundOf.Destroy(spec.IsEip3529Enabled)); + } + + statusCode = StatusCode.Success; + } + + spentGas = Refund(tx, header, spec, opts, substate, unspentGas, env.TxExecutionContext.GasPrice); + } + catch (Exception ex) when + (ex is EvmException || ex is OverflowException) // TODO: OverflowException? still needed? hope not + { + if (Logger.IsTrace) + Logger.Trace($"EVM EXCEPTION: {ex.GetType().Name}"); + WorldState.Restore(snapshot); + } + + return true; + } + + protected virtual bool PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) + { + return true; + } + + protected void PrepareAccountForContractDeployment(Address contractAddress, IReleaseSpec spec) + { + if (WorldState.AccountExists(contractAddress)) + { + CodeInfo codeInfo = VirtualMachine.GetCachedCodeInfo(WorldState, contractAddress, spec); + bool codeIsNotEmpty = codeInfo.MachineCode.Length != 0; + bool accountNonceIsNotZero = WorldState.GetNonce(contractAddress) != 0; + + // TODO: verify what should happen if code info is a precompile + // (but this would generally be a hash collision) + if (codeIsNotEmpty || accountNonceIsNotZero) + { + if (Logger.IsTrace) + { + Logger.Trace($"Contract collision at {contractAddress}"); + } + + throw new TransactionCollisionException(); + } + + // we clean any existing storage (in case of a previously called self destruct) + WorldState.UpdateStorageRoot(contractAddress, Keccak.EmptyTreeHash); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected void TraceLogInvalidTx(Transaction transaction, string reason) + { + if (Logger.IsTrace) Logger.Trace($"Invalid tx {transaction.Hash} ({reason})"); + } + + protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionOptions opts, + in TransactionSubstate substate, in long unspentGas, in UInt256 gasPrice) + { + long spentGas = tx.GasLimit; + if (!substate.IsError) + { + spentGas -= unspentGas; + long refund = substate.ShouldRevert + ? 0 + : RefundHelper.CalculateClaimableRefund(spentGas, + substate.Refund + substate.DestroyList.Count * RefundOf.Destroy(spec.IsEip3529Enabled), spec); + + if (Logger.IsTrace) + Logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + refund); + // If noValidation we didn't charge for gas, so do not refund + if (!opts.HasFlag(ExecutionOptions.NoValidation)) + WorldState.AddToBalance(tx.SenderAddress, (ulong)(unspentGas + refund) * gasPrice, spec); + spentGas -= refund; + } + + return spentGas; + } + } +} + + diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs new file mode 100644 index 00000000000..0cbb64f8eaf --- /dev/null +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs @@ -0,0 +1,46 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm.CodeAnalysis; +using Nethermind.Evm.Tracing; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Specs; +using Nethermind.State; +using Nethermind.State.Tracing; +using static Nethermind.Core.Extensions.MemoryExtensions; + +using static Nethermind.Evm.VirtualMachine; + +namespace Nethermind.Evm.TransactionProcessing +{ + public class GethSystemTxProcessor : AuraSystemTxProcessor + { + public GethSystemTxProcessor(ISpecProvider? specProvider, IWorldState? worldState, IVirtualMachine? virtualMachine, EthereumEcdsa? ecdsa, ILogger? logger) + : base(specProvider, worldState, virtualMachine, ecdsa, logger) + { + } + + protected override void GetSpecFromHeader(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) + { + header = blCtx.Header; + spec = SpecProvider.GetSpec(header); + } + + // TODO Should we remove this already + protected override bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionOptions opts, in UInt256 effectiveGasPrice) + { + return false; + } + } +} + + diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs index 972ac5be1d8..1300131546a 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs @@ -1,11 +1,40 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using Nethermind.Core; using Nethermind.Evm.Tracing; namespace Nethermind.Evm.TransactionProcessing; +[Flags] +public enum ExecutionOptions +{ + /// + /// Just accumulate the state + /// + None = 0, + + /// + /// Commit the state after execution + /// + Commit = 1, + + /// + /// Restore state after execution + /// + Restore = 2, + + /// + /// Skip potential fail checks + /// + NoValidation = Commit | 4, + + /// + /// Commit and later restore state also skip validation, use for CallAndRestore + /// + CommitAndRestore = Commit | Restore | NoValidation +} public interface ITransactionProcessor { /// diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 3297d54ff39..190b5a8cfe8 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -30,35 +30,6 @@ public class TransactionProcessor : ITransactionProcessor protected IWorldState WorldState { get; private init; } protected IVirtualMachine VirtualMachine { get; private init; } - [Flags] - protected enum ExecutionOptions - { - /// - /// Just accumulate the state - /// - None = 0, - - /// - /// Commit the state after execution - /// - Commit = 1, - - /// - /// Restore state after execution - /// - Restore = 2, - - /// - /// Skip potential fail checks - /// - NoValidation = Commit | 4, - - /// - /// Commit and later restore state also skip validation, use for CallAndRestore - /// - CommitAndRestore = Commit | Restore | NoValidation - } - public TransactionProcessor( ISpecProvider? specProvider, IWorldState? worldState, @@ -97,10 +68,17 @@ public void Trace(Transaction transaction, BlockExecutionContext blCtx, ITxTrace protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) { - BlockHeader header = blCtx.Header; - IReleaseSpec spec = SpecProvider.GetSpec(header); - if (tx.IsAuRaSystemCall(spec)) - spec = new SystemTransactionReleaseSpec(spec); + GetSpecFromHeader(blCtx, out BlockHeader header, out IReleaseSpec spec); + + if(tx.IsSystem()) + { + ITransactionProcessor systemProcessor = spec.AuRaSystemCalls + ? new AuraSystemTxProcessor(SpecProvider, WorldState, VirtualMachine, Ecdsa, Logger) + : new GethSystemTxProcessor(SpecProvider, WorldState, VirtualMachine, Ecdsa, Logger); + + systemProcessor.Execute(tx, blCtx, tracer); + return; + } // restore is CallAndRestore - previous call, we will restore state after the execution bool restore = opts.HasFlag(ExecutionOptions.Restore); @@ -174,8 +152,8 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT { if (!opts.HasFlag(ExecutionOptions.NoValidation)) WorldState.AddToBalance(tx.SenderAddress, senderReservedGasPayment, spec); - if (!tx.IsSystem()) - WorldState.DecrementNonce(tx.SenderAddress); + + WorldState.DecrementNonce(tx.SenderAddress); WorldState.Commit(spec); } @@ -276,27 +254,30 @@ protected virtual bool ValidateStatic(Transaction tx, BlockHeader header, IRelea return false; } - if (!tx.IsSystem()) + if (tx.GasLimit < intrinsicGas) { - if (tx.GasLimit < intrinsicGas) - { - TraceLogInvalidTx(tx, $"GAS_LIMIT_BELOW_INTRINSIC_GAS {tx.GasLimit} < {intrinsicGas}"); - QuickFail(tx, header, spec, tracer, "gas limit below intrinsic gas"); - return false; - } + TraceLogInvalidTx(tx, $"GAS_LIMIT_BELOW_INTRINSIC_GAS {tx.GasLimit} < {intrinsicGas}"); + QuickFail(tx, header, spec, tracer, "gas limit below intrinsic gas"); + return false; + } - if (validate && tx.GasLimit > header.GasLimit - header.GasUsed) - { - TraceLogInvalidTx(tx, - $"BLOCK_GAS_LIMIT_EXCEEDED {tx.GasLimit} > {header.GasLimit} - {header.GasUsed}"); - QuickFail(tx, header, spec, tracer, "block gas limit exceeded"); - return false; - } + if (validate && tx.GasLimit > header.GasLimit - header.GasUsed) + { + TraceLogInvalidTx(tx, + $"BLOCK_GAS_LIMIT_EXCEEDED {tx.GasLimit} > {header.GasLimit} - {header.GasUsed}"); + QuickFail(tx, header, spec, tracer, "block gas limit exceeded"); + return false; } return true; } + protected virtual void GetSpecFromHeader(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) + { + header = blCtx.Header; + spec = SpecProvider.GetSpec(header); + } + // TODO Should we remove this already protected bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionOptions opts, in UInt256 effectiveGasPrice) { @@ -363,7 +344,7 @@ protected virtual bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec s senderReservedGasPayment = UInt256.Zero; bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); - if (!tx.IsSystem() && validate) + if (validate) { if (!tx.TryCalculatePremiumPerGas(header.BaseFeePerGas, out premiumPerGas)) { @@ -439,9 +420,6 @@ protected virtual bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec s protected virtual bool IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) { - if (tx.IsSystem()) - return true; - if (tx.Nonce != WorldState.GetNonce(tx.SenderAddress)) { TraceLogInvalidTx(tx, $"WRONG_TRANSACTION_NONCE: {tx.Nonce} (expected {WorldState.GetNonce(tx.SenderAddress)})"); @@ -499,8 +477,7 @@ protected virtual bool ExecuteEVMCall( // Fixes eth_estimateGas. // If sender is SystemUser subtracting value will cause InsufficientBalanceException - if (validate || !tx.IsSystem()) - WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); + WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); try { @@ -603,7 +580,7 @@ protected virtual bool ExecuteEVMCall( WorldState.Restore(snapshot); } - if (validate && !tx.IsSystem()) + if (validate) header.GasUsed += spentGas; return true; @@ -611,9 +588,6 @@ protected virtual bool ExecuteEVMCall( protected virtual bool PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) { - if (tx.IsSystem()) - return true; - bool gasBeneficiaryNotDestroyed = substate?.DestroyList.Contains(header.GasBeneficiary) != true; if (statusCode == StatusCode.Failure || gasBeneficiaryNotDestroyed) { From 883c9ef8ae2ac80974b90393479d46a80b106311 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Sat, 4 Nov 2023 06:27:32 +0100 Subject: [PATCH 049/551] extract systemTxProcessor selection into method --- .../TransactionProcessing/TransactionProcessor.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 190b5a8cfe8..1550dcc80c2 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -72,9 +72,7 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT if(tx.IsSystem()) { - ITransactionProcessor systemProcessor = spec.AuRaSystemCalls - ? new AuraSystemTxProcessor(SpecProvider, WorldState, VirtualMachine, Ecdsa, Logger) - : new GethSystemTxProcessor(SpecProvider, WorldState, VirtualMachine, Ecdsa, Logger); + ITransactionProcessor systemProcessor = SelectSystemTxProcessor(spec); systemProcessor.Execute(tx, blCtx, tracer); return; @@ -185,6 +183,13 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT } } + private ITransactionProcessor SelectSystemTxProcessor(IReleaseSpec spec) + { + return spec.AuRaSystemCalls + ? new AuraSystemTxProcessor(SpecProvider, WorldState, VirtualMachine, Ecdsa, Logger) + : new GethSystemTxProcessor(SpecProvider, WorldState, VirtualMachine, Ecdsa, Logger); + } + protected void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) { block.GasUsed += tx.GasLimit; From f67633ae70b7e12a496bd31d0ab0865685ae81a7 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 8 Nov 2023 12:33:22 +0100 Subject: [PATCH 050/551] attempt to fix failing tests --- .../TransactionProcessing/AuraSystemTxProcessor.cs | 13 ++++++------- .../TransactionProcessing/GethSystemTxProcessor.cs | 10 ++-------- .../TransactionProcessing/TransactionProcessor.cs | 4 ++-- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs index d404b3bd4d0..0712eb9f129 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs @@ -26,19 +26,19 @@ public class AuraSystemTxProcessor : ITransactionProcessor { protected EthereumEcdsa Ecdsa { get; private init; } protected ILogger Logger { get; private init; } - protected ISpecProvider SpecProvider { get; private init; } + protected IReleaseSpec Spec { get; private init; } protected IWorldState WorldState { get; private init; } protected IVirtualMachine VirtualMachine { get; private init; } public AuraSystemTxProcessor( - ISpecProvider? specProvider, + IReleaseSpec? spec, IWorldState? worldState, IVirtualMachine? virtualMachine, EthereumEcdsa? ecdsa, ILogger? logger) { Logger = logger ?? throw new ArgumentNullException(nameof(logger)); - SpecProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); + Spec = spec ?? throw new ArgumentNullException(nameof(spec)); WorldState = worldState ?? throw new ArgumentNullException(nameof(worldState)); VirtualMachine = virtualMachine ?? throw new ArgumentNullException(nameof(virtualMachine)); Ecdsa = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa)); @@ -69,7 +69,7 @@ public void Trace(Transaction transaction, BlockExecutionContext blCtx, ITxTrace protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) { - GetSpecFromHeader(blCtx, out BlockHeader header, out IReleaseSpec spec); + UpdateSpecBasedOnSystemProcessor(blCtx, out BlockHeader header, out IReleaseSpec spec); // restore is CallAndRestore - previous call, we will restore state after the execution bool restore = opts.HasFlag(ExecutionOptions.Restore); @@ -174,11 +174,10 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT } } - protected virtual void GetSpecFromHeader(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) + protected virtual void UpdateSpecBasedOnSystemProcessor(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) { header = blCtx.Header; - spec = SpecProvider.GetSpec(header); - spec = new SystemTransactionReleaseSpec(spec); + spec = new SystemTransactionReleaseSpec(Spec); } protected void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs index 0cbb64f8eaf..8cd7cf94710 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs @@ -24,17 +24,11 @@ namespace Nethermind.Evm.TransactionProcessing { public class GethSystemTxProcessor : AuraSystemTxProcessor { - public GethSystemTxProcessor(ISpecProvider? specProvider, IWorldState? worldState, IVirtualMachine? virtualMachine, EthereumEcdsa? ecdsa, ILogger? logger) - : base(specProvider, worldState, virtualMachine, ecdsa, logger) + public GethSystemTxProcessor(IReleaseSpec? spec, IWorldState? worldState, IVirtualMachine? virtualMachine, EthereumEcdsa? ecdsa, ILogger? logger) + : base(spec, worldState, virtualMachine, ecdsa, logger) { } - protected override void GetSpecFromHeader(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) - { - header = blCtx.Header; - spec = SpecProvider.GetSpec(header); - } - // TODO Should we remove this already protected override bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionOptions opts, in UInt256 effectiveGasPrice) { diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 1550dcc80c2..2ec6cb22042 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -186,8 +186,8 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT private ITransactionProcessor SelectSystemTxProcessor(IReleaseSpec spec) { return spec.AuRaSystemCalls - ? new AuraSystemTxProcessor(SpecProvider, WorldState, VirtualMachine, Ecdsa, Logger) - : new GethSystemTxProcessor(SpecProvider, WorldState, VirtualMachine, Ecdsa, Logger); + ? new AuraSystemTxProcessor(spec, WorldState, VirtualMachine, Ecdsa, Logger) + : new GethSystemTxProcessor(spec, WorldState, VirtualMachine, Ecdsa, Logger); } protected void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) From c139e0694806c9c108aff61341e778a25332bfea Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Thu, 23 Nov 2023 22:27:22 +0100 Subject: [PATCH 051/551] geth like tx processor experiment --- .../GethSystemTxProcessor.cs | 486 +++++++++++++++++- 1 file changed, 481 insertions(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs index 8cd7cf94710..83882a22b1a 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs @@ -22,17 +22,493 @@ namespace Nethermind.Evm.TransactionProcessing { - public class GethSystemTxProcessor : AuraSystemTxProcessor + public class GethSystemTxProcessor : ITransactionProcessor// : AuraSystemTxProcessor { - public GethSystemTxProcessor(IReleaseSpec? spec, IWorldState? worldState, IVirtualMachine? virtualMachine, EthereumEcdsa? ecdsa, ILogger? logger) - : base(spec, worldState, virtualMachine, ecdsa, logger) + protected EthereumEcdsa Ecdsa { get; private init; } + protected ILogger Logger { get; private init; } + protected IReleaseSpec Spec { get; private init; } + protected IWorldState WorldState { get; private init; } + protected IVirtualMachine VirtualMachine { get; private init; } + + public GethSystemTxProcessor( + IReleaseSpec? spec, + IWorldState? worldState, + IVirtualMachine? virtualMachine, + EthereumEcdsa? ecdsa, + ILogger? logger) + { + Logger = logger ?? throw new ArgumentNullException(nameof(logger)); + Spec = spec ?? throw new ArgumentNullException(nameof(spec)); + WorldState = worldState ?? throw new ArgumentNullException(nameof(worldState)); + VirtualMachine = virtualMachine ?? throw new ArgumentNullException(nameof(virtualMachine)); + Ecdsa = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa)); + } + + public void CallAndRestore(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) { + Execute(transaction, blCtx, txTracer, ExecutionOptions.CommitAndRestore); + } + + public void BuildUp(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) + { + // we need to treat the result of previous transaction as the original value of next transaction + // when we do not commit + WorldState.TakeSnapshot(true); + Execute(transaction, blCtx, txTracer, ExecutionOptions.None); + } + + public void Execute(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) + { + Execute(transaction, blCtx, txTracer, ExecutionOptions.Commit); + } + + public void Trace(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) + { + Execute(transaction, blCtx, txTracer, ExecutionOptions.NoValidation); + } + + protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) + { + UpdateSpecBasedOnSystemProcessor(blCtx, out BlockHeader header, out IReleaseSpec spec); + + // restore is CallAndRestore - previous call, we will restore state after the execution + bool restore = opts.HasFlag(ExecutionOptions.Restore); + // commit - is for standard execute, we will commit thee state after execution + // !commit - is for build up during block production, we won't commit state after each transaction to support rollbacks + // we commit only after all block is constructed + bool commit = opts.HasFlag(ExecutionOptions.Commit) || !spec.IsEip658Enabled; + + if (!ValidateStatic(tx, header, spec, tracer, opts, out long intrinsicGas)) + return; + + UInt256 effectiveGasPrice = + tx.CalculateEffectiveGasPrice(spec.IsEip1559Enabled, header.BaseFeePerGas); + + if (opts == ExecutionOptions.Commit || opts == ExecutionOptions.None) + { + decimal gasPrice = (decimal)effectiveGasPrice / 1_000_000_000m; + Metrics.MinGasPrice = Math.Min(gasPrice, Metrics.MinGasPrice); + Metrics.MaxGasPrice = Math.Max(gasPrice, Metrics.MaxGasPrice); + + Metrics.BlockMinGasPrice = Math.Min(gasPrice, Metrics.BlockMinGasPrice); + Metrics.BlockMaxGasPrice = Math.Max(gasPrice, Metrics.BlockMaxGasPrice); + + Metrics.AveGasPrice = + (Metrics.AveGasPrice * Metrics.Transactions + gasPrice) / (Metrics.Transactions + 1); + Metrics.EstMedianGasPrice += + Metrics.AveGasPrice * 0.01m * decimal.Sign(gasPrice - Metrics.EstMedianGasPrice); + Metrics.Transactions++; + + Metrics.BlockAveGasPrice = (Metrics.BlockAveGasPrice * Metrics.BlockTransactions + gasPrice) / + (Metrics.BlockTransactions + 1); + Metrics.BlockEstMedianGasPrice += Metrics.BlockAveGasPrice * 0.01m * + decimal.Sign(gasPrice - Metrics.BlockEstMedianGasPrice); + Metrics.BlockTransactions++; + } + + bool deleteCallerAccount = RecoverSenderIfNeeded(tx, spec, opts, effectiveGasPrice); + + if (!ValidateSender(tx, header, spec, tracer, opts)) + return; + + if (!BuyGas(tx, header, spec, tracer, opts, effectiveGasPrice, out UInt256 premiumPerGas, + out UInt256 senderReservedGasPayment)) + return; + + if (!IncrementNonce(tx, header, spec, tracer, opts)) + return; + + if (commit) + WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance); + + ExecutionEnvironment env = BuildExecutionEnvironmnet(tx, blCtx, spec, tracer, opts, effectiveGasPrice); + + long gasAvailable = tx.GasLimit - intrinsicGas; + if (!ExecuteEVMCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, + out long spentGas, out byte statusCode)) + return; + + if (!PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode)) + return; + + // Finalize + if (restore) + { + WorldState.Reset(); + if (deleteCallerAccount) + { + WorldState.DeleteAccount(tx.SenderAddress); + } + else + { + if (!opts.HasFlag(ExecutionOptions.NoValidation)) + WorldState.AddToBalance(tx.SenderAddress, senderReservedGasPayment, spec); + + WorldState.Commit(spec); + } + } + else if (commit) + { + WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullStateTracer.Instance); + } + + if (tracer.IsTracingReceipt) + { + Hash256 stateRoot = null; + if (!spec.IsEip658Enabled) + { + WorldState.RecalculateStateRoot(); + stateRoot = WorldState.StateRoot; + } + + if (statusCode == StatusCode.Failure) + { + byte[] output = (substate?.ShouldRevert ?? false) ? substate.Output.ToArray() : Array.Empty(); + tracer.MarkAsFailed(env.ExecutingAccount, spentGas, output, substate?.Error, stateRoot); + } + else + { + LogEntry[] logs = substate.Logs.Any() ? substate.Logs.ToArray() : Array.Empty(); + tracer.MarkAsSuccess(env.ExecutingAccount, spentGas, substate.Output.ToArray(), logs, stateRoot); + } + } + } + + protected virtual void UpdateSpecBasedOnSystemProcessor(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) + { + header = blCtx.Header; + spec = Spec; + } + + protected void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) + { + block.GasUsed += tx.GasLimit; + + Address recipient = tx.To ?? ContractAddress.From( + tx.SenderAddress ?? Address.Zero, + WorldState.GetNonce(tx.SenderAddress ?? Address.Zero)); + + if (txTracer.IsTracingReceipt) + { + Hash256? stateRoot = null; + if (!spec.IsEip658Enabled) + { + WorldState.RecalculateStateRoot(); + stateRoot = WorldState.StateRoot; + } + + txTracer.MarkAsFailed(recipient, tx.GasLimit, Array.Empty(), reason ?? "invalid", stateRoot); + } + } + + + /// + /// Validates the transaction, in a static manner (i.e. without accesing state/storage). + /// It basically ensures the transaction is well formed (i.e. no null values where not allowed, no overflows, etc). + /// As a part of validating the transaction the premium per gas will be calculated, to save computation this + /// is returned in an out parameter. + /// + /// The transaction to validate + /// The block containing the transaction. Only BaseFee is being used from the block atm. + /// The release spec with which the transaction will be executed + /// The transaction tracer + /// Options (Flags) to use for execution + /// Computed premium per gas + /// + protected virtual bool ValidateStatic(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + ExecutionOptions opts, out long intrinsicGas) + { + intrinsicGas = IntrinsicGasCalculator.Calculate(tx, spec); + + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + if (tx.SenderAddress is null) + { + TraceLogInvalidTx(tx, "SENDER_NOT_SPECIFIED"); + QuickFail(tx, header, spec, tracer, "sender not specified"); + return false; + } + + if (validate && tx.Nonce >= ulong.MaxValue - 1) + { + // we are here if nonce is at least (ulong.MaxValue - 1). If tx is contract creation, + // it is max possible value. Otherwise, (ulong.MaxValue - 1) is allowed, but ulong.MaxValue not. + if (tx.IsContractCreation || tx.Nonce == ulong.MaxValue) + { + TraceLogInvalidTx(tx, "NONCE_OVERFLOW"); + QuickFail(tx, header, spec, tracer, "nonce overflow"); + return false; + } + } + + if (tx.IsAboveInitCode(spec)) + { + TraceLogInvalidTx(tx, + $"CREATE_TRANSACTION_SIZE_EXCEEDS_MAX_INIT_CODE_SIZE {tx.DataLength} > {spec.MaxInitCodeSize}"); + QuickFail(tx, header, spec, tracer, "EIP-3860 - transaction size over max init code size"); + return false; + } + + return true; } // TODO Should we remove this already - protected override bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionOptions opts, in UInt256 effectiveGasPrice) + protected virtual bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionOptions opts, in UInt256 effectiveGasPrice) + { + bool commit = opts.HasFlag(ExecutionOptions.Commit) || !spec.IsEip658Enabled; + bool restore = opts.HasFlag(ExecutionOptions.Restore); + bool noValidation = opts.HasFlag(ExecutionOptions.NoValidation); + + bool deleteCallerAccount = false; + + return deleteCallerAccount; + } + + + protected virtual bool ValidateSender(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + ExecutionOptions opts) { - return false; + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + if (validate && WorldState.IsInvalidContractSender(spec, tx.SenderAddress)) + { + TraceLogInvalidTx(tx, "SENDER_IS_CONTRACT"); + QuickFail(tx, header, spec, tracer, "sender has deployed code"); + return false; + } + + return true; + } + + protected virtual bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, + in UInt256 effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment) + { + premiumPerGas = UInt256.Zero; + senderReservedGasPayment = UInt256.Zero; + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + if (validate) + WorldState.SubtractFromBalance(tx.SenderAddress, senderReservedGasPayment, spec); + + return true; + } + + protected virtual bool IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, + ExecutionOptions opts) + { + return true; + } + + protected virtual ExecutionEnvironment BuildExecutionEnvironmnet( + Transaction tx, BlockExecutionContext blCtx, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, + in UInt256 effectiveGasPrice) + { + Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0) ?? + // this transaction is not a contract creation so it should have the recipient known and not null + throw new InvalidDataException("Recipient has not been resolved properly before tx execution"); + + TxExecutionContext executionContext = + new(blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); + + CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data.AsArray()) + : VirtualMachine.GetCachedCodeInfo(WorldState, recipient, spec); + + byte[] inputData = tx.IsMessageCall ? tx.Data.AsArray() ?? Array.Empty() : Array.Empty(); + + return new ExecutionEnvironment + ( + txExecutionContext: executionContext, + value: tx.Value, + transferValue: tx.Value, + caller: tx.SenderAddress, + codeSource: recipient, + executingAccount: recipient, + inputData: inputData, + codeInfo: codeInfo + ); + } + + protected virtual bool ExecuteEVMCall( + Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, + in long gasAvailable, in ExecutionEnvironment env, + out TransactionSubstate? substate, out long spentGas, out byte statusCode) + { + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + substate = null; + spentGas = tx.GasLimit; + statusCode = StatusCode.Failure; + + long unspentGas = gasAvailable; + + Snapshot snapshot = WorldState.TakeSnapshot(); + + // Fixes eth_estimateGas. + // If sender is SystemUser subtracting value will cause InsufficientBalanceException + if (validate) + WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); + + try + { + if (tx.IsContractCreation) + { + // if transaction is a contract creation then recipient address is the contract deployment address + PrepareAccountForContractDeployment(env.ExecutingAccount, spec); + } + + ExecutionType executionType = + tx.IsContractCreation ? ExecutionType.Create : ExecutionType.Transaction; + + using (EvmState state = new(unspentGas, env, executionType, true, snapshot, false)) + { + if (spec.UseTxAccessLists) + { + state.WarmUp(tx.AccessList); // eip-2930 + } + + if (spec.UseHotAndColdStorage) + { + state.WarmUp(tx.SenderAddress); // eip-2929 + state.WarmUp(env.ExecutingAccount); // eip-2929 + } + + if (spec.AddCoinbaseToTxAccessList) + { + state.WarmUp(header.GasBeneficiary); + } + + if (!tracer.IsTracingActions) + { + substate = VirtualMachine.Run(state, WorldState, tracer); + } + else + { + substate = VirtualMachine.Run(state, WorldState, tracer); + } + + unspentGas = state.GasAvailable; + + if (tracer.IsTracingAccess) + { + tracer.ReportAccess(state.AccessedAddresses, state.AccessedStorageCells); + } + } + + if (substate.ShouldRevert || substate.IsError) + { + if (Logger.IsTrace) + Logger.Trace("Restoring state from before transaction"); + WorldState.Restore(snapshot); + } + else + { + // tks: there is similar code fo contract creation from init and from CREATE + // this may lead to inconsistencies (however it is tested extensively in blockchain tests) + if (tx.IsContractCreation) + { + long codeDepositGasCost = CodeDepositHandler.CalculateCost(substate.Output.Length, spec); + if (unspentGas < codeDepositGasCost && spec.ChargeForTopLevelCreate) + { + throw new OutOfGasException(); + } + + if (CodeDepositHandler.CodeIsInvalid(spec, substate.Output)) + { + throw new InvalidCodeException(); + } + + if (unspentGas >= codeDepositGasCost) + { + WorldState.InsertCode(env.ExecutingAccount, substate.Output, spec); + unspentGas -= codeDepositGasCost; + } + } + + foreach (Address toBeDestroyed in substate.DestroyList) + { + if (Logger.IsTrace) + Logger.Trace($"Destroying account {toBeDestroyed}"); + + WorldState.ClearStorage(toBeDestroyed); + WorldState.DeleteAccount(toBeDestroyed); + + if (tracer.IsTracingRefunds) + tracer.ReportRefund(RefundOf.Destroy(spec.IsEip3529Enabled)); + } + + statusCode = StatusCode.Success; + } + + spentGas = Refund(tx, header, spec, opts, substate, unspentGas, env.TxExecutionContext.GasPrice); + } + catch (Exception ex) when + (ex is EvmException || ex is OverflowException) // TODO: OverflowException? still needed? hope not + { + if (Logger.IsTrace) + Logger.Trace($"EVM EXCEPTION: {ex.GetType().Name}"); + WorldState.Restore(snapshot); + } + + return true; + } + + protected virtual bool PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) + { + return true; + } + + protected void PrepareAccountForContractDeployment(Address contractAddress, IReleaseSpec spec) + { + if (WorldState.AccountExists(contractAddress)) + { + CodeInfo codeInfo = VirtualMachine.GetCachedCodeInfo(WorldState, contractAddress, spec); + bool codeIsNotEmpty = codeInfo.MachineCode.Length != 0; + bool accountNonceIsNotZero = WorldState.GetNonce(contractAddress) != 0; + + // TODO: verify what should happen if code info is a precompile + // (but this would generally be a hash collision) + if (codeIsNotEmpty || accountNonceIsNotZero) + { + if (Logger.IsTrace) + { + Logger.Trace($"Contract collision at {contractAddress}"); + } + + throw new TransactionCollisionException(); + } + + // we clean any existing storage (in case of a previously called self destruct) + WorldState.UpdateStorageRoot(contractAddress, Keccak.EmptyTreeHash); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected void TraceLogInvalidTx(Transaction transaction, string reason) + { + if (Logger.IsTrace) Logger.Trace($"Invalid tx {transaction.Hash} ({reason})"); + } + + protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionOptions opts, + in TransactionSubstate substate, in long unspentGas, in UInt256 gasPrice) + { + long spentGas = tx.GasLimit; + if (!substate.IsError) + { + spentGas -= unspentGas; + long refund = substate.ShouldRevert + ? 0 + : RefundHelper.CalculateClaimableRefund(spentGas, + substate.Refund + substate.DestroyList.Count * RefundOf.Destroy(spec.IsEip3529Enabled), spec); + + if (Logger.IsTrace) + Logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + refund); + // If noValidation we didn't charge for gas, so do not refund + if (!opts.HasFlag(ExecutionOptions.NoValidation)) + WorldState.AddToBalance(tx.SenderAddress, (ulong)(unspentGas + refund) * gasPrice, spec); + spentGas -= refund; + } + + return spentGas; } } } From 55c4a137e9b2f12e204ccd0788997f371a743925 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 28 Nov 2023 13:09:17 +0100 Subject: [PATCH 052/551] simplified attempt at separating txProcessor and systxProcessor --- .../GethSystemTxProcessor.cs | 516 ------------------ ...temTxProcessor.cs => SystemTxProcessor.cs} | 14 +- .../TransactionProcessor.cs | 9 +- 3 files changed, 11 insertions(+), 528 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs rename src/Nethermind/Nethermind.Evm/TransactionProcessing/{AuraSystemTxProcessor.cs => SystemTxProcessor.cs} (98%) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs deleted file mode 100644 index 83882a22b1a..00000000000 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/GethSystemTxProcessor.cs +++ /dev/null @@ -1,516 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.IO; -using System.Linq; -using System.Runtime.CompilerServices; -using Nethermind.Core; -using Nethermind.Core.Crypto; -using Nethermind.Core.Specs; -using Nethermind.Crypto; -using Nethermind.Evm.CodeAnalysis; -using Nethermind.Evm.Tracing; -using Nethermind.Int256; -using Nethermind.Logging; -using Nethermind.Specs; -using Nethermind.State; -using Nethermind.State.Tracing; -using static Nethermind.Core.Extensions.MemoryExtensions; - -using static Nethermind.Evm.VirtualMachine; - -namespace Nethermind.Evm.TransactionProcessing -{ - public class GethSystemTxProcessor : ITransactionProcessor// : AuraSystemTxProcessor - { - protected EthereumEcdsa Ecdsa { get; private init; } - protected ILogger Logger { get; private init; } - protected IReleaseSpec Spec { get; private init; } - protected IWorldState WorldState { get; private init; } - protected IVirtualMachine VirtualMachine { get; private init; } - - public GethSystemTxProcessor( - IReleaseSpec? spec, - IWorldState? worldState, - IVirtualMachine? virtualMachine, - EthereumEcdsa? ecdsa, - ILogger? logger) - { - Logger = logger ?? throw new ArgumentNullException(nameof(logger)); - Spec = spec ?? throw new ArgumentNullException(nameof(spec)); - WorldState = worldState ?? throw new ArgumentNullException(nameof(worldState)); - VirtualMachine = virtualMachine ?? throw new ArgumentNullException(nameof(virtualMachine)); - Ecdsa = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa)); - } - - public void CallAndRestore(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) - { - Execute(transaction, blCtx, txTracer, ExecutionOptions.CommitAndRestore); - } - - public void BuildUp(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) - { - // we need to treat the result of previous transaction as the original value of next transaction - // when we do not commit - WorldState.TakeSnapshot(true); - Execute(transaction, blCtx, txTracer, ExecutionOptions.None); - } - - public void Execute(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) - { - Execute(transaction, blCtx, txTracer, ExecutionOptions.Commit); - } - - public void Trace(Transaction transaction, BlockExecutionContext blCtx, ITxTracer txTracer) - { - Execute(transaction, blCtx, txTracer, ExecutionOptions.NoValidation); - } - - protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) - { - UpdateSpecBasedOnSystemProcessor(blCtx, out BlockHeader header, out IReleaseSpec spec); - - // restore is CallAndRestore - previous call, we will restore state after the execution - bool restore = opts.HasFlag(ExecutionOptions.Restore); - // commit - is for standard execute, we will commit thee state after execution - // !commit - is for build up during block production, we won't commit state after each transaction to support rollbacks - // we commit only after all block is constructed - bool commit = opts.HasFlag(ExecutionOptions.Commit) || !spec.IsEip658Enabled; - - if (!ValidateStatic(tx, header, spec, tracer, opts, out long intrinsicGas)) - return; - - UInt256 effectiveGasPrice = - tx.CalculateEffectiveGasPrice(spec.IsEip1559Enabled, header.BaseFeePerGas); - - if (opts == ExecutionOptions.Commit || opts == ExecutionOptions.None) - { - decimal gasPrice = (decimal)effectiveGasPrice / 1_000_000_000m; - Metrics.MinGasPrice = Math.Min(gasPrice, Metrics.MinGasPrice); - Metrics.MaxGasPrice = Math.Max(gasPrice, Metrics.MaxGasPrice); - - Metrics.BlockMinGasPrice = Math.Min(gasPrice, Metrics.BlockMinGasPrice); - Metrics.BlockMaxGasPrice = Math.Max(gasPrice, Metrics.BlockMaxGasPrice); - - Metrics.AveGasPrice = - (Metrics.AveGasPrice * Metrics.Transactions + gasPrice) / (Metrics.Transactions + 1); - Metrics.EstMedianGasPrice += - Metrics.AveGasPrice * 0.01m * decimal.Sign(gasPrice - Metrics.EstMedianGasPrice); - Metrics.Transactions++; - - Metrics.BlockAveGasPrice = (Metrics.BlockAveGasPrice * Metrics.BlockTransactions + gasPrice) / - (Metrics.BlockTransactions + 1); - Metrics.BlockEstMedianGasPrice += Metrics.BlockAveGasPrice * 0.01m * - decimal.Sign(gasPrice - Metrics.BlockEstMedianGasPrice); - Metrics.BlockTransactions++; - } - - bool deleteCallerAccount = RecoverSenderIfNeeded(tx, spec, opts, effectiveGasPrice); - - if (!ValidateSender(tx, header, spec, tracer, opts)) - return; - - if (!BuyGas(tx, header, spec, tracer, opts, effectiveGasPrice, out UInt256 premiumPerGas, - out UInt256 senderReservedGasPayment)) - return; - - if (!IncrementNonce(tx, header, spec, tracer, opts)) - return; - - if (commit) - WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance); - - ExecutionEnvironment env = BuildExecutionEnvironmnet(tx, blCtx, spec, tracer, opts, effectiveGasPrice); - - long gasAvailable = tx.GasLimit - intrinsicGas; - if (!ExecuteEVMCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, - out long spentGas, out byte statusCode)) - return; - - if (!PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode)) - return; - - // Finalize - if (restore) - { - WorldState.Reset(); - if (deleteCallerAccount) - { - WorldState.DeleteAccount(tx.SenderAddress); - } - else - { - if (!opts.HasFlag(ExecutionOptions.NoValidation)) - WorldState.AddToBalance(tx.SenderAddress, senderReservedGasPayment, spec); - - WorldState.Commit(spec); - } - } - else if (commit) - { - WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullStateTracer.Instance); - } - - if (tracer.IsTracingReceipt) - { - Hash256 stateRoot = null; - if (!spec.IsEip658Enabled) - { - WorldState.RecalculateStateRoot(); - stateRoot = WorldState.StateRoot; - } - - if (statusCode == StatusCode.Failure) - { - byte[] output = (substate?.ShouldRevert ?? false) ? substate.Output.ToArray() : Array.Empty(); - tracer.MarkAsFailed(env.ExecutingAccount, spentGas, output, substate?.Error, stateRoot); - } - else - { - LogEntry[] logs = substate.Logs.Any() ? substate.Logs.ToArray() : Array.Empty(); - tracer.MarkAsSuccess(env.ExecutingAccount, spentGas, substate.Output.ToArray(), logs, stateRoot); - } - } - } - - protected virtual void UpdateSpecBasedOnSystemProcessor(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) - { - header = blCtx.Header; - spec = Spec; - } - - protected void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) - { - block.GasUsed += tx.GasLimit; - - Address recipient = tx.To ?? ContractAddress.From( - tx.SenderAddress ?? Address.Zero, - WorldState.GetNonce(tx.SenderAddress ?? Address.Zero)); - - if (txTracer.IsTracingReceipt) - { - Hash256? stateRoot = null; - if (!spec.IsEip658Enabled) - { - WorldState.RecalculateStateRoot(); - stateRoot = WorldState.StateRoot; - } - - txTracer.MarkAsFailed(recipient, tx.GasLimit, Array.Empty(), reason ?? "invalid", stateRoot); - } - } - - - /// - /// Validates the transaction, in a static manner (i.e. without accesing state/storage). - /// It basically ensures the transaction is well formed (i.e. no null values where not allowed, no overflows, etc). - /// As a part of validating the transaction the premium per gas will be calculated, to save computation this - /// is returned in an out parameter. - /// - /// The transaction to validate - /// The block containing the transaction. Only BaseFee is being used from the block atm. - /// The release spec with which the transaction will be executed - /// The transaction tracer - /// Options (Flags) to use for execution - /// Computed premium per gas - /// - protected virtual bool ValidateStatic(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, - ExecutionOptions opts, out long intrinsicGas) - { - intrinsicGas = IntrinsicGasCalculator.Calculate(tx, spec); - - bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); - - if (tx.SenderAddress is null) - { - TraceLogInvalidTx(tx, "SENDER_NOT_SPECIFIED"); - QuickFail(tx, header, spec, tracer, "sender not specified"); - return false; - } - - if (validate && tx.Nonce >= ulong.MaxValue - 1) - { - // we are here if nonce is at least (ulong.MaxValue - 1). If tx is contract creation, - // it is max possible value. Otherwise, (ulong.MaxValue - 1) is allowed, but ulong.MaxValue not. - if (tx.IsContractCreation || tx.Nonce == ulong.MaxValue) - { - TraceLogInvalidTx(tx, "NONCE_OVERFLOW"); - QuickFail(tx, header, spec, tracer, "nonce overflow"); - return false; - } - } - - if (tx.IsAboveInitCode(spec)) - { - TraceLogInvalidTx(tx, - $"CREATE_TRANSACTION_SIZE_EXCEEDS_MAX_INIT_CODE_SIZE {tx.DataLength} > {spec.MaxInitCodeSize}"); - QuickFail(tx, header, spec, tracer, "EIP-3860 - transaction size over max init code size"); - return false; - } - - return true; - } - - // TODO Should we remove this already - protected virtual bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionOptions opts, in UInt256 effectiveGasPrice) - { - bool commit = opts.HasFlag(ExecutionOptions.Commit) || !spec.IsEip658Enabled; - bool restore = opts.HasFlag(ExecutionOptions.Restore); - bool noValidation = opts.HasFlag(ExecutionOptions.NoValidation); - - bool deleteCallerAccount = false; - - return deleteCallerAccount; - } - - - protected virtual bool ValidateSender(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, - ExecutionOptions opts) - { - bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); - - if (validate && WorldState.IsInvalidContractSender(spec, tx.SenderAddress)) - { - TraceLogInvalidTx(tx, "SENDER_IS_CONTRACT"); - QuickFail(tx, header, spec, tracer, "sender has deployed code"); - return false; - } - - return true; - } - - protected virtual bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, - in UInt256 effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment) - { - premiumPerGas = UInt256.Zero; - senderReservedGasPayment = UInt256.Zero; - bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); - - if (validate) - WorldState.SubtractFromBalance(tx.SenderAddress, senderReservedGasPayment, spec); - - return true; - } - - protected virtual bool IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, - ExecutionOptions opts) - { - return true; - } - - protected virtual ExecutionEnvironment BuildExecutionEnvironmnet( - Transaction tx, BlockExecutionContext blCtx, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, - in UInt256 effectiveGasPrice) - { - Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0) ?? - // this transaction is not a contract creation so it should have the recipient known and not null - throw new InvalidDataException("Recipient has not been resolved properly before tx execution"); - - TxExecutionContext executionContext = - new(blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); - - CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data.AsArray()) - : VirtualMachine.GetCachedCodeInfo(WorldState, recipient, spec); - - byte[] inputData = tx.IsMessageCall ? tx.Data.AsArray() ?? Array.Empty() : Array.Empty(); - - return new ExecutionEnvironment - ( - txExecutionContext: executionContext, - value: tx.Value, - transferValue: tx.Value, - caller: tx.SenderAddress, - codeSource: recipient, - executingAccount: recipient, - inputData: inputData, - codeInfo: codeInfo - ); - } - - protected virtual bool ExecuteEVMCall( - Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, - in long gasAvailable, in ExecutionEnvironment env, - out TransactionSubstate? substate, out long spentGas, out byte statusCode) - { - bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); - - substate = null; - spentGas = tx.GasLimit; - statusCode = StatusCode.Failure; - - long unspentGas = gasAvailable; - - Snapshot snapshot = WorldState.TakeSnapshot(); - - // Fixes eth_estimateGas. - // If sender is SystemUser subtracting value will cause InsufficientBalanceException - if (validate) - WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); - - try - { - if (tx.IsContractCreation) - { - // if transaction is a contract creation then recipient address is the contract deployment address - PrepareAccountForContractDeployment(env.ExecutingAccount, spec); - } - - ExecutionType executionType = - tx.IsContractCreation ? ExecutionType.Create : ExecutionType.Transaction; - - using (EvmState state = new(unspentGas, env, executionType, true, snapshot, false)) - { - if (spec.UseTxAccessLists) - { - state.WarmUp(tx.AccessList); // eip-2930 - } - - if (spec.UseHotAndColdStorage) - { - state.WarmUp(tx.SenderAddress); // eip-2929 - state.WarmUp(env.ExecutingAccount); // eip-2929 - } - - if (spec.AddCoinbaseToTxAccessList) - { - state.WarmUp(header.GasBeneficiary); - } - - if (!tracer.IsTracingActions) - { - substate = VirtualMachine.Run(state, WorldState, tracer); - } - else - { - substate = VirtualMachine.Run(state, WorldState, tracer); - } - - unspentGas = state.GasAvailable; - - if (tracer.IsTracingAccess) - { - tracer.ReportAccess(state.AccessedAddresses, state.AccessedStorageCells); - } - } - - if (substate.ShouldRevert || substate.IsError) - { - if (Logger.IsTrace) - Logger.Trace("Restoring state from before transaction"); - WorldState.Restore(snapshot); - } - else - { - // tks: there is similar code fo contract creation from init and from CREATE - // this may lead to inconsistencies (however it is tested extensively in blockchain tests) - if (tx.IsContractCreation) - { - long codeDepositGasCost = CodeDepositHandler.CalculateCost(substate.Output.Length, spec); - if (unspentGas < codeDepositGasCost && spec.ChargeForTopLevelCreate) - { - throw new OutOfGasException(); - } - - if (CodeDepositHandler.CodeIsInvalid(spec, substate.Output)) - { - throw new InvalidCodeException(); - } - - if (unspentGas >= codeDepositGasCost) - { - WorldState.InsertCode(env.ExecutingAccount, substate.Output, spec); - unspentGas -= codeDepositGasCost; - } - } - - foreach (Address toBeDestroyed in substate.DestroyList) - { - if (Logger.IsTrace) - Logger.Trace($"Destroying account {toBeDestroyed}"); - - WorldState.ClearStorage(toBeDestroyed); - WorldState.DeleteAccount(toBeDestroyed); - - if (tracer.IsTracingRefunds) - tracer.ReportRefund(RefundOf.Destroy(spec.IsEip3529Enabled)); - } - - statusCode = StatusCode.Success; - } - - spentGas = Refund(tx, header, spec, opts, substate, unspentGas, env.TxExecutionContext.GasPrice); - } - catch (Exception ex) when - (ex is EvmException || ex is OverflowException) // TODO: OverflowException? still needed? hope not - { - if (Logger.IsTrace) - Logger.Trace($"EVM EXCEPTION: {ex.GetType().Name}"); - WorldState.Restore(snapshot); - } - - return true; - } - - protected virtual bool PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) - { - return true; - } - - protected void PrepareAccountForContractDeployment(Address contractAddress, IReleaseSpec spec) - { - if (WorldState.AccountExists(contractAddress)) - { - CodeInfo codeInfo = VirtualMachine.GetCachedCodeInfo(WorldState, contractAddress, spec); - bool codeIsNotEmpty = codeInfo.MachineCode.Length != 0; - bool accountNonceIsNotZero = WorldState.GetNonce(contractAddress) != 0; - - // TODO: verify what should happen if code info is a precompile - // (but this would generally be a hash collision) - if (codeIsNotEmpty || accountNonceIsNotZero) - { - if (Logger.IsTrace) - { - Logger.Trace($"Contract collision at {contractAddress}"); - } - - throw new TransactionCollisionException(); - } - - // we clean any existing storage (in case of a previously called self destruct) - WorldState.UpdateStorageRoot(contractAddress, Keccak.EmptyTreeHash); - } - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - protected void TraceLogInvalidTx(Transaction transaction, string reason) - { - if (Logger.IsTrace) Logger.Trace($"Invalid tx {transaction.Hash} ({reason})"); - } - - protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionOptions opts, - in TransactionSubstate substate, in long unspentGas, in UInt256 gasPrice) - { - long spentGas = tx.GasLimit; - if (!substate.IsError) - { - spentGas -= unspentGas; - long refund = substate.ShouldRevert - ? 0 - : RefundHelper.CalculateClaimableRefund(spentGas, - substate.Refund + substate.DestroyList.Count * RefundOf.Destroy(spec.IsEip3529Enabled), spec); - - if (Logger.IsTrace) - Logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + refund); - // If noValidation we didn't charge for gas, so do not refund - if (!opts.HasFlag(ExecutionOptions.NoValidation)) - WorldState.AddToBalance(tx.SenderAddress, (ulong)(unspentGas + refund) * gasPrice, spec); - spentGas -= refund; - } - - return spentGas; - } - } -} - - diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs similarity index 98% rename from src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs rename to src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs index 0712eb9f129..0c16142481e 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/AuraSystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs @@ -22,7 +22,7 @@ namespace Nethermind.Evm.TransactionProcessing { - public class AuraSystemTxProcessor : ITransactionProcessor + public class SystemTxProcessor : ITransactionProcessor { protected EthereumEcdsa Ecdsa { get; private init; } protected ILogger Logger { get; private init; } @@ -30,7 +30,7 @@ public class AuraSystemTxProcessor : ITransactionProcessor protected IWorldState WorldState { get; private init; } protected IVirtualMachine VirtualMachine { get; private init; } - public AuraSystemTxProcessor( + public SystemTxProcessor( IReleaseSpec? spec, IWorldState? worldState, IVirtualMachine? virtualMachine, @@ -177,7 +177,13 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT protected virtual void UpdateSpecBasedOnSystemProcessor(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) { header = blCtx.Header; - spec = new SystemTransactionReleaseSpec(Spec); + if(Spec.AuRaSystemCalls) + { + spec = new SystemTransactionReleaseSpec(Spec); + } else + { + spec = Spec; + } } protected void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) @@ -261,7 +267,7 @@ protected virtual bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, bool deleteCallerAccount = false; - if (!WorldState.AccountExists(tx.SenderAddress)) + if (!WorldState.AccountExists(tx.SenderAddress) && !tx.IsGethStyleSystemCall(spec)) { if (Logger.IsDebug) Logger.Debug($"TX sender account does not exist {tx.SenderAddress} - trying to recover it"); diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 2ec6cb22042..8b95199242c 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -72,7 +72,7 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT if(tx.IsSystem()) { - ITransactionProcessor systemProcessor = SelectSystemTxProcessor(spec); + ITransactionProcessor systemProcessor = new SystemTxProcessor(spec, WorldState, VirtualMachine, Ecdsa, Logger); systemProcessor.Execute(tx, blCtx, tracer); return; @@ -183,13 +183,6 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT } } - private ITransactionProcessor SelectSystemTxProcessor(IReleaseSpec spec) - { - return spec.AuRaSystemCalls - ? new AuraSystemTxProcessor(spec, WorldState, VirtualMachine, Ecdsa, Logger) - : new GethSystemTxProcessor(spec, WorldState, VirtualMachine, Ecdsa, Logger); - } - protected void QuickFail(Transaction tx, BlockHeader block, IReleaseSpec spec, ITxTracer txTracer, string? reason) { block.GasUsed += tx.GasLimit; From 4414ade3a13553839a33486af5888123585ea95b Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 5 Dec 2023 11:06:44 +0100 Subject: [PATCH 053/551] fix build --- .../Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs index 0c16142481e..f1d41edae1c 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs @@ -394,7 +394,7 @@ protected virtual bool ExecuteEVMCall( } ExecutionType executionType = - tx.IsContractCreation ? ExecutionType.Create : ExecutionType.Transaction; + tx.IsContractCreation ? ExecutionType.CREATE : ExecutionType.TRANSACTION; using (EvmState state = new(unspentGas, env, executionType, true, snapshot, false)) { From 570b0647034992e5407dfa096c2291804181a5fb Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 5 Dec 2023 17:44:58 +0100 Subject: [PATCH 054/551] fix most faling tests --- src/Nethermind/Nethermind.State/StateProvider.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 0b21c8e19ca..26e4a651913 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -223,7 +223,12 @@ void ThrowNotExistingAccount() // hitting non-existing account when substractin Zero-value from the sender if (releaseSpec.IsEip158Enabled && !isSubtracting) { - Account touched = GetThroughCacheCheckExists(); + Account touched = GetThroughCache(address); + if (touched is null) + { + return; + } + if (_logger.IsTrace) _logger.Trace($" Touch {address} (balance)"); if (touched!.IsEmpty) { From 9a20cd37d0648324a07ed9f1c7464f10dc3ccccb Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 5 Dec 2023 18:22:34 +0100 Subject: [PATCH 055/551] fix 1 extra test --- .../Modules/Proof/ProofRpcModuleTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index c0edab05731..ecbffe0de9b 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -620,7 +620,7 @@ public async Task Can_call_with_delegate_call() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(_createSystemAccount && _useNonZeroGasPrice ? 3 : 2)); + Assert.That(result.Accounts.Length, Is.EqualTo(_createSystemAccount ? 3 : 2)); } [TestCase] From 7d56a5233782d52a0aca0de066348faee1cf0e91 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 6 Dec 2023 12:54:09 +0100 Subject: [PATCH 056/551] attempt #1 --- .../SystemTxProcessor.cs | 8 ++--- .../Nethermind.State/IWorldState.cs | 4 +-- .../Nethermind.State/StateProvider.cs | 33 ++++++++----------- src/Nethermind/Nethermind.State/WorldState.cs | 8 ++--- 4 files changed, 23 insertions(+), 30 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs index f1d41edae1c..a04d322300b 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs @@ -142,7 +142,7 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT else { if (!opts.HasFlag(ExecutionOptions.NoValidation)) - WorldState.AddToBalance(tx.SenderAddress, senderReservedGasPayment, spec); + WorldState.AddToBalance(tx.SenderAddress, senderReservedGasPayment, spec, true); WorldState.Commit(spec); } @@ -325,7 +325,7 @@ protected virtual bool BuyGas(Transaction tx, BlockHeader header, IReleaseSpec s bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); if (validate) - WorldState.SubtractFromBalance(tx.SenderAddress, senderReservedGasPayment, spec); + WorldState.SubtractFromBalance(tx.SenderAddress, senderReservedGasPayment, spec, true); return true; } @@ -383,7 +383,7 @@ protected virtual bool ExecuteEVMCall( // Fixes eth_estimateGas. // If sender is SystemUser subtracting value will cause InsufficientBalanceException if (validate) - WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); + WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec, true); try { @@ -541,7 +541,7 @@ protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec s Logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + refund); // If noValidation we didn't charge for gas, so do not refund if (!opts.HasFlag(ExecutionOptions.NoValidation)) - WorldState.AddToBalance(tx.SenderAddress, (ulong)(unspentGas + refund) * gasPrice, spec); + WorldState.AddToBalance(tx.SenderAddress, (ulong)(unspentGas + refund) * gasPrice, spec, true); spentGas -= refund; } diff --git a/src/Nethermind/Nethermind.State/IWorldState.cs b/src/Nethermind/Nethermind.State/IWorldState.cs index 98c85d14503..0b3d2fa375e 100644 --- a/src/Nethermind/Nethermind.State/IWorldState.cs +++ b/src/Nethermind/Nethermind.State/IWorldState.cs @@ -85,11 +85,11 @@ public interface IWorldState : IJournal, IReadOnlyStateProvider void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false); - void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec); + void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec, bool isSystemCall = false); void AddToBalanceAndCreateIfNotExists(Address address, in UInt256 balanceChange, IReleaseSpec spec); - void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec); + void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec, bool isSystemCall = false); void UpdateStorageRoot(Address address, Hash256 storageRoot); diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 26e4a651913..0bde1c8c49c 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -194,22 +194,17 @@ public void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec } } - private void SetNewBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSubtracting) + private void SetNewBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSubtracting, bool isSystemCall = false) { _needsStateRootUpdate = true; - void ThrowNotExistingAccount() - { - if (_logger.IsError) _logger.Error("Updating balance of a non-existing account"); - throw new InvalidOperationException("Updating balance of a non-existing account"); - } - - Account? GetThroughCacheCheckExists() + Account GetThroughCacheCheckExists() { Account result = GetThroughCache(address); if (result is null) { - ThrowNotExistingAccount(); + if (_logger.IsError) _logger.Error("Updating balance of a non-existing account"); + throw new InvalidOperationException("Updating balance of a non-existing account"); } return result; @@ -223,14 +218,11 @@ void ThrowNotExistingAccount() // hitting non-existing account when substractin Zero-value from the sender if (releaseSpec.IsEip158Enabled && !isSubtracting) { - Account touched = GetThroughCache(address); - if (touched is null) - { - return; - } + Account touched = GetThroughCacheCheckExists(); + if (touched is null) return; if (_logger.IsTrace) _logger.Trace($" Touch {address} (balance)"); - if (touched!.IsEmpty) + if (touched.IsEmpty) { PushTouch(address, touched, releaseSpec, true); } @@ -240,8 +232,9 @@ void ThrowNotExistingAccount() } Account account = GetThroughCacheCheckExists(); + if (account is null) return; - if (isSubtracting && account!.Balance < balanceChange) + if (isSubtracting && account.Balance < balanceChange) { throw new InsufficientBalanceException(address); } @@ -253,16 +246,16 @@ void ThrowNotExistingAccount() PushUpdate(address, changedAccount); } - public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) + public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSystemCall = false) { _needsStateRootUpdate = true; - SetNewBalance(address, balanceChange, releaseSpec, true); + SetNewBalance(address, balanceChange, releaseSpec, true, isSystemCall); } - public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) + public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSystemCall = false) { _needsStateRootUpdate = true; - SetNewBalance(address, balanceChange, releaseSpec, false); + SetNewBalance(address, balanceChange, releaseSpec, false, isSystemCall); } /// diff --git a/src/Nethermind/Nethermind.State/WorldState.cs b/src/Nethermind/Nethermind.State/WorldState.cs index aaeaf4bab1d..6c9dced9d0d 100644 --- a/src/Nethermind/Nethermind.State/WorldState.cs +++ b/src/Nethermind/Nethermind.State/WorldState.cs @@ -110,17 +110,17 @@ public void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec { _stateProvider.InsertCode(address, code, spec, isGenesis); } - public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec) + public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec, bool isSystemCall = false) { - _stateProvider.AddToBalance(address, balanceChange, spec); + _stateProvider.AddToBalance(address, balanceChange, spec, isSystemCall); } public void AddToBalanceAndCreateIfNotExists(Address address, in UInt256 balanceChange, IReleaseSpec spec) { _stateProvider.AddToBalanceAndCreateIfNotExists(address, balanceChange, spec); } - public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec) + public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec, bool isSystemCall = false) { - _stateProvider.SubtractFromBalance(address, balanceChange, spec); + _stateProvider.SubtractFromBalance(address, balanceChange, spec, isSystemCall); } public void UpdateStorageRoot(Address address, Hash256 storageRoot) { From 4ab73794f6123c07e089451bf1e4585d4de75807 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 12 Dec 2023 18:18:07 +0100 Subject: [PATCH 057/551] fix merge issue --- .../InitializationSteps/InitializeBlockchainAuRaMerge.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs index 3f0861f9093..7db976fce85 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs @@ -38,7 +38,7 @@ protected override BlockProcessor NewBlockProcessor(AuRaNethermindApi api, ITxFi _api.BlockTree!, new AuraWithdrawalProcessor( withdrawalContractFactory.Create(transactionProcessor!), _api.LogManager), - _api.TransactionProcessor! + _api.TransactionProcessor!, txFilter, GetGasLimitCalculator(), contractRewriter From 5575a6e8f5bc41513922ac2de1fff4012aa3f9f0 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Thu, 21 Dec 2023 13:10:51 +0100 Subject: [PATCH 058/551] expose IsSystemEnv deep in EVM stackcalls --- .../Nethermind.Evm/ExecutionEnvironment.cs | 5 ++++ .../SystemTxProcessor.cs | 3 ++- .../TransactionProcessor.cs | 3 ++- .../Nethermind.Evm/VirtualMachine.cs | 26 ++++++++++--------- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs index afd332d5a39..580c9084846 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs @@ -20,6 +20,7 @@ public ExecutionEnvironment TxExecutionContext txExecutionContext, UInt256 transferValue, UInt256 value, + bool isSystemExecutionEnv, int callDepth = 0) { CodeInfo = codeInfo; @@ -31,6 +32,7 @@ public ExecutionEnvironment TransferValue = transferValue; Value = value; CallDepth = callDepth; + IsSystemEnv = isSystemExecutionEnv; } /// @@ -77,5 +79,8 @@ public ExecutionEnvironment /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. public readonly int CallDepth; + + /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. + public readonly bool IsSystemEnv; } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs index a04d322300b..3eaca8ea2f3 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs @@ -361,7 +361,8 @@ protected virtual ExecutionEnvironment BuildExecutionEnvironmnet( codeSource: recipient, executingAccount: recipient, inputData: inputData, - codeInfo: codeInfo + codeInfo: codeInfo, + isSystemExecutionEnv: true ); } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 613b5e961e3..d8134640245 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -454,7 +454,8 @@ protected virtual ExecutionEnvironment BuildExecutionEnvironmnet( codeSource: recipient, executingAccount: recipient, inputData: inputData, - codeInfo: codeInfo + codeInfo: codeInfo, + isSystemExecutionEnv: false ); } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index c168656d7ba..681c7c8f62b 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -256,7 +256,7 @@ public TransactionSubstate Run(EvmState state, IWorldState worl if (typeof(TTracingActions) == typeof(IsTracing)) _txTracer.ReportActionError(callResult.ExceptionType); _worldState.Restore(currentState.Snapshot); - RevertParityTouchBugAccount(spec); + RevertParityTouchBugAccount(spec, state.Env.IsSystemEnv); if (currentState.IsTopLevel) { @@ -431,7 +431,7 @@ public TransactionSubstate Run(EvmState state, IWorldState worl _worldState.Restore(currentState.Snapshot); - RevertParityTouchBugAccount(spec); + RevertParityTouchBugAccount(spec, state.Env.IsSystemEnv); if (txTracer.IsTracingInstructions) { @@ -462,13 +462,13 @@ public TransactionSubstate Run(EvmState state, IWorldState worl } } - private void RevertParityTouchBugAccount(IReleaseSpec spec) + private void RevertParityTouchBugAccount(IReleaseSpec spec, bool isSystemEnv) { if (_parityTouchBugAccount.ShouldDelete) { if (_state.AccountExists(_parityTouchBugAccount.Address)) { - _state.AddToBalance(_parityTouchBugAccount.Address, UInt256.Zero, spec); + _state.AddToBalance(_parityTouchBugAccount.Address, UInt256.Zero, spec, isSystemEnv); } _parityTouchBugAccount.ShouldDelete = false; @@ -638,7 +638,7 @@ private CallResult ExecutePrecompile(EvmState state, IReleaseSpec spec) } else { - _state.AddToBalance(state.Env.ExecutingAccount, transferValue, spec); + _state.AddToBalance(state.Env.ExecutingAccount, transferValue, spec, state.Env.IsSystemEnv); } // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-161.md @@ -702,7 +702,7 @@ private CallResult ExecuteCall(EvmState vmState, byte[]? p } else { - _state.AddToBalance(env.ExecutingAccount, env.TransferValue, spec); + _state.AddToBalance(env.ExecutingAccount, env.TransferValue, spec, vmState.Env.IsSystemEnv); } if (vmState.ExecutionType.IsAnyCreate() && spec.ClearEmptyAccountWhenTouched) @@ -2263,7 +2263,7 @@ private EvmExceptionType InstructionCall( ReadOnlyMemory callData = vmState.Memory.Load(in dataOffset, dataLength); Snapshot snapshot = _worldState.TakeSnapshot(); - _state.SubtractFromBalance(caller, transferValue, spec); + _state.SubtractFromBalance(caller, transferValue, spec, env.IsSystemEnv); ExecutionEnvironment callEnv = new ( @@ -2275,7 +2275,8 @@ private EvmExceptionType InstructionCall( transferValue: transferValue, value: callValue, inputData: callData, - codeInfo: GetCachedCodeInfo(_worldState, codeSource, spec) + codeInfo: GetCachedCodeInfo(_worldState, codeSource, spec), + isSystemExecutionEnv: env.IsSystemEnv ); if (typeof(TLogger) == typeof(IsTracing)) _logger.Trace($"Tx call gas {gasLimitUl}"); if (outputLength == 0) @@ -2370,13 +2371,13 @@ private bool InstructionSelfDestruct(EvmState vmState, ref EvmStack(EvmState vmState, ref EvmStack(EvmState vmState, ref EvmStack Date: Fri, 22 Dec 2023 14:27:08 +0100 Subject: [PATCH 059/551] disallow createTx from targeting systemAddress --- .../Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs | 2 +- .../TransactionProcessing/TransactionProcessor.cs | 2 +- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 2 +- .../Modules/Proof/ProofRpcModuleTests.cs | 2 +- src/Nethermind/Nethermind.State.Test/StateProviderTests.cs | 4 ++-- src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs | 4 ++-- src/Nethermind/Nethermind.State/IWorldState.cs | 2 +- src/Nethermind/Nethermind.State/StateProvider.cs | 4 +++- src/Nethermind/Nethermind.State/WorldState.cs | 4 ++-- 9 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs index 3eaca8ea2f3..98efe53d2aa 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs @@ -457,7 +457,7 @@ protected virtual bool ExecuteEVMCall( if (unspentGas >= codeDepositGasCost) { - WorldState.InsertCode(env.ExecutingAccount, substate.Output, spec); + WorldState.InsertCode(env.ExecutingAccount, substate.Output, spec, env.IsSystemEnv); unspentGas -= codeDepositGasCost; } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index d8134640245..950910ea25d 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -549,7 +549,7 @@ protected virtual bool ExecuteEVMCall( if (unspentGas >= codeDepositGasCost) { - WorldState.InsertCode(env.ExecutingAccount, substate.Output, spec); + WorldState.InsertCode(env.ExecutingAccount, substate.Output, spec, env.IsSystemEnv); unspentGas -= codeDepositGasCost; } } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 681c7c8f62b..2343e09e106 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -354,7 +354,7 @@ public TransactionSubstate Run(EvmState state, IWorldState worl bool invalidCode = CodeDepositHandler.CodeIsInvalid(spec, callResult.Output); if (gasAvailableForCodeDeposit >= codeDepositGasCost && !invalidCode) { - _state.InsertCode(callCodeOwner, callResult.Output, spec); + _state.InsertCode(callCodeOwner, callResult.Output, spec, state.Env.IsSystemEnv); currentState.GasAvailable -= codeDepositGasCost; if (typeof(TTracingActions) == typeof(IsTracing)) diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index 3946d9b7759..f364e4d9c0d 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -899,7 +899,7 @@ private void AddAccount(WorldState stateProvider, Address account, UInt256 initi private void AddCode(WorldState stateProvider, Address account, byte[] code) { - stateProvider.InsertCode(account, code, MuirGlacier.Instance); + stateProvider.InsertCode(account, code, MuirGlacier.Instance, false); stateProvider.Commit(MainnetSpecProvider.Instance.GenesisSpec, NullStateTracer.Instance); } } diff --git a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs index e85c1bc8ca8..4235c2c2baf 100644 --- a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs @@ -69,7 +69,7 @@ public void Eip_158_touch_zero_value_system_account_is_not_deleted() provider.Commit(Homestead.Instance); var releaseSpec = new ReleaseSpec() { IsEip158Enabled = true }; - provider.InsertCode(systemUser, System.Text.Encoding.UTF8.GetBytes(""), releaseSpec); + provider.InsertCode(systemUser, System.Text.Encoding.UTF8.GetBytes(""), releaseSpec, false); provider.Commit(releaseSpec); provider.GetAccount(systemUser).Should().NotBeNull(); @@ -194,7 +194,7 @@ public void Restore_in_the_middle() provider.CreateAccount(_address1, 1); provider.AddToBalance(_address1, 1, Frontier.Instance); provider.IncrementNonce(_address1); - provider.InsertCode(_address1, new byte[] { 1 }, Frontier.Instance); + provider.InsertCode(_address1, new byte[] { 1 }, Frontier.Instance, false); provider.UpdateStorageRoot(_address1, Hash2); Assert.That(provider.GetNonce(_address1), Is.EqualTo(UInt256.One)); diff --git a/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs b/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs index 5bb74e075c8..f8e1c2a2d0e 100644 --- a/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs @@ -29,10 +29,10 @@ public void Can_collect_stats([Values(false, true)] bool parallel) WorldState stateProvider = new(trieStore, stateDb, LimboLogs.Instance); stateProvider.CreateAccount(TestItem.AddressA, 1); - stateProvider.InsertCode(TestItem.AddressA, new byte[] { 1, 2, 3 }, Istanbul.Instance); + stateProvider.InsertCode(TestItem.AddressA, new byte[] { 1, 2, 3 }, Istanbul.Instance, false); stateProvider.CreateAccount(TestItem.AddressB, 1); - stateProvider.InsertCode(TestItem.AddressB, new byte[] { 1, 2, 3, 4 }, Istanbul.Instance); + stateProvider.InsertCode(TestItem.AddressB, new byte[] { 1, 2, 3, 4 }, Istanbul.Instance, false); for (int i = 0; i < 1000; i++) { diff --git a/src/Nethermind/Nethermind.State/IWorldState.cs b/src/Nethermind/Nethermind.State/IWorldState.cs index 0b3d2fa375e..6e486b4a5ae 100644 --- a/src/Nethermind/Nethermind.State/IWorldState.cs +++ b/src/Nethermind/Nethermind.State/IWorldState.cs @@ -83,7 +83,7 @@ public interface IWorldState : IJournal, IReadOnlyStateProvider void CreateAccount(Address address, in UInt256 balance, in UInt256 nonce = default); void CreateAccountIfNotExists(Address address, in UInt256 balance, in UInt256 nonce = default); - void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false); + void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec spec, bool isSystemCall = false, bool isGenesis = false); void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec, bool isSystemCall = false); diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 8bd5abdabda..d3d57dc17df 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -144,8 +144,10 @@ public UInt256 GetBalance(Address address) return account?.Balance ?? UInt256.Zero; } - public void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) + public void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false, bool isSystemCall = false) { + if (isSystemCall && address == Address.SystemUser) return; + _needsStateRootUpdate = true; Hash256 codeHash = code.Length == 0 ? Keccak.OfAnEmptyString : Keccak.Compute(code.Span); diff --git a/src/Nethermind/Nethermind.State/WorldState.cs b/src/Nethermind/Nethermind.State/WorldState.cs index 6c9dced9d0d..d20858a1a08 100644 --- a/src/Nethermind/Nethermind.State/WorldState.cs +++ b/src/Nethermind/Nethermind.State/WorldState.cs @@ -106,9 +106,9 @@ public void CreateAccount(Address address, in UInt256 balance, in UInt256 nonce { _stateProvider.CreateAccount(address, balance, nonce); } - public void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) + public void InsertCode(Address address, ReadOnlyMemory code, IReleaseSpec spec, bool isSystemCall, bool isGenesis = false) { - _stateProvider.InsertCode(address, code, spec, isGenesis); + _stateProvider.InsertCode(address, code, spec, isGenesis, isSystemCall); } public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec, bool isSystemCall = false) { From eba84d86f1c188d79610b354c9f6c4872d2178e5 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 26 Dec 2023 14:59:35 +0100 Subject: [PATCH 060/551] fix build issue --- src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs | 2 +- src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs | 3 ++- .../Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs | 3 ++- .../Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index dd032186059..45d0b6a21a8 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -158,7 +158,7 @@ private static void InitializeTestState(GeneralStateTest test, WorldState stateP } stateProvider.CreateAccount(accountState.Key, accountState.Value.Balance); - stateProvider.InsertCode(accountState.Key, accountState.Value.Code, specProvider.GenesisSpec); + stateProvider.InsertCode(accountState.Key, accountState.Value.Code, specProvider.GenesisSpec, false); stateProvider.SetNonce(accountState.Key, accountState.Value.Nonce); } diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs index 5e490186992..6e4ec5f010c 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs @@ -56,7 +56,8 @@ public void GlobalSetup() value: 0, transferValue: 0, txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), - inputData: default + inputData: default, + isSystemExecutionEnv: false ); _evmState = new EvmState(long.MaxValue, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs index d3d8889bcc7..d10c17e794a 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs @@ -87,7 +87,8 @@ public void GlobalSetup() value: 0, transferValue: 0, txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), - inputData: default + inputData: default, + isSystemExecutionEnv: false ); _evmState = new EvmState(100_000_000L, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs index 93e158881a7..7f134cdbc2b 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs @@ -98,7 +98,8 @@ public void GlobalSetup() value: 0, transferValue: 0, txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), - inputData: default + inputData: default, + isSystemExecutionEnv: false ); _evmState = new EvmState(100_000_000L, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); From 99d74569476da1860ffc9cff56692641de1e7e53 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 26 Dec 2023 17:06:20 +0100 Subject: [PATCH 061/551] test fix attempt, ws fix --- .../TransactionProcessing/SystemTxProcessor.cs | 7 ++++--- .../TransactionProcessing/TransactionProcessor.cs | 4 ++-- .../AuRaMergeEngineModuleTests.cs | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs index 98efe53d2aa..73198fac19f 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs @@ -69,7 +69,7 @@ public void Trace(Transaction transaction, BlockExecutionContext blCtx, ITxTrace protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) { - UpdateSpecBasedOnSystemProcessor(blCtx, out BlockHeader header, out IReleaseSpec spec); + UpdateSpecBasedOnSystemProcessor(blCtx, out BlockHeader header, out IReleaseSpec spec); // restore is CallAndRestore - previous call, we will restore state after the execution bool restore = opts.HasFlag(ExecutionOptions.Restore); @@ -177,10 +177,11 @@ protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxT protected virtual void UpdateSpecBasedOnSystemProcessor(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) { header = blCtx.Header; - if(Spec.AuRaSystemCalls) + if (Spec.AuRaSystemCalls) { spec = new SystemTransactionReleaseSpec(Spec); - } else + } + else { spec = Spec; } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 950910ea25d..f8c6c07ec37 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -68,9 +68,9 @@ public void Trace(Transaction transaction, BlockExecutionContext blCtx, ITxTrace protected virtual void Execute(Transaction tx, BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) { - GetSpecFromHeader(blCtx, out BlockHeader header, out IReleaseSpec spec); + GetSpecFromHeader(blCtx, out BlockHeader header, out IReleaseSpec spec); - if(tx.IsSystem()) + if (tx.IsSystem()) { ITransactionProcessor systemProcessor = new SystemTxProcessor(spec, WorldState, VirtualMachine, Ecdsa, Logger); diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 136b9de9d21..b6c94368af7 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -57,8 +57,8 @@ string BlockHash [TestCase( "0xe168b70ac8a6f7d90734010030801fbb2dcce03a657155c4024b36ba8d1e3926", - "0x3e604e45a9a74b66a7e03f828cc2597f0cb5f5e7dc50c9211be3a62fbcd6396d", - "0xdbd87b98a6be7d4e3f11ff8500c38a0736d9a5e7a47b5cb25628d37187a98cb9", + "0x310f4c8c949eb758faa4497e293bb18ef27a465af16553e5fc03752d3be19cc3", + "0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f", "0xcdd08163eccae523")] public override Task Should_process_block_as_expected_V2(string latestValidHash, string blockHash, string stateRoot, string payloadId) => base.Should_process_block_as_expected_V2(latestValidHash, blockHash, stateRoot, payloadId); From c966cf0ffd7b9b4f12f83f602082b220b5d16bb1 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Thu, 11 Jan 2024 12:25:00 +0100 Subject: [PATCH 062/551] fix comment duplicate --- src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs index 2c96535185c..54a58622dd9 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs @@ -80,7 +80,8 @@ public ExecutionEnvironment /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. public readonly int CallDepth; - /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. + /// + /// this field keeps track of wether the execution envirement was initiated by a systemTx. public readonly bool IsSystemEnv; } } From cf138c1f9cde0d2f619eddbd9731556438b9e3ff Mon Sep 17 00:00:00 2001 From: Nikita Mescheryakov Date: Wed, 17 Jan 2024 15:10:38 +0300 Subject: [PATCH 063/551] implementation --- .../ValidatorExit/IValidatorExitEipHandler.cs | 14 ++++ .../ValidatorExit/ValidatorExitEipHandler.cs | 75 +++++++++++++++++++ .../Processing/BlockProcessor.cs | 4 + src/Nethermind/Nethermind.Core/Block.cs | 3 + src/Nethermind/Nethermind.Core/BlockBody.cs | 5 +- src/Nethermind/Nethermind.Core/BlockHeader.cs | 5 +- .../Nethermind.Core/Specs/IReleaseSpec.cs | 8 +- .../Nethermind.Core/ValidatorExit.cs | 12 +++ 8 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs create mode 100644 src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs create mode 100644 src/Nethermind/Nethermind.Core/ValidatorExit.cs diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs new file mode 100644 index 00000000000..c69548c0296 --- /dev/null +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs @@ -0,0 +1,14 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.State; + +namespace Nethermind.Blockchain.ValidatorExit; + +public interface IValidatorExitEipHandler +{ + void UpdateExitPrecompile(IReleaseSpec spec, IWorldState state); + ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state); +} diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs new file mode 100644 index 00000000000..0a3219b5038 --- /dev/null +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs @@ -0,0 +1,75 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Linq; +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.Int256; +using Nethermind.State; + +namespace Nethermind.Blockchain.ValidatorExit; + +// https://eips.ethereum.org/EIPS/eip-7002#block-processing +public class ValidatorExitEipHandler : IValidatorExitEipHandler +{ + // private static readonly UInt256 ExcessExitsStorageSlot = 0; + private static readonly UInt256 ExitCountStorageSlot = 1; + private static readonly UInt256 ExitMessageQueueHeadStorageSlot = 2; + private static readonly UInt256 ExitMessageQueueTailStorageSlot = 3; + private static readonly UInt256 ExitMessageQueueStorageOffset = 4; + private static readonly UInt256 MaxExitsPerBlock = 16; + + + // Updates storage of the precompile after block processing + public void UpdateExitPrecompile(IReleaseSpec spec, IWorldState state) + { + UpdateExitQueue(spec, state); + UpdateExcessExits(spec, state); + ResetExitCount(spec, state); + } + + private static void UpdateExitQueue(IReleaseSpec spec, IWorldState state) + { + + } + + private static void UpdateExcessExits(IReleaseSpec spec, IWorldState state) + { + + } + + private static void ResetExitCount(IReleaseSpec spec, IWorldState state) + { + StorageCell exitCountCell = new(spec.Eip7002ContractAddress, ExitCountStorageSlot); + state.Set(exitCountCell, UInt256.Zero.ToBigEndian()); + } + + // Writes withdrawals information from the precompile to the block + public ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state) + { + StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, ExitMessageQueueHeadStorageSlot); + StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, ExitMessageQueueTailStorageSlot); + + UInt256 queueHeadIndex = new(state.Get(queueHeadIndexCell)); + UInt256 queueTailIndex = new(state.Get(queueTailIndexCell)); + + UInt256 numExitsInQueue = queueTailIndex - queueHeadIndex; + UInt256 numExitsToDeque = UInt256.Min(numExitsInQueue, MaxExitsPerBlock); + + var validatorExits = new ValidatorExit[(int)numExitsToDeque]; + for (UInt256 i = 0; i < numExitsToDeque; ++i) + { + UInt256 queueStorageSlot = ExitMessageQueueStorageOffset + (queueHeadIndex + i) * 3; + StorageCell sourceAddressCell = new(spec.Eip7002ContractAddress, queueStorageSlot); + StorageCell validatorAddressFirstCell = new(spec.Eip7002ContractAddress, queueStorageSlot + 1); + StorageCell validatorAddressSecondCell = new(spec.Eip7002ContractAddress, queueStorageSlot + 2); + Address sourceAddress = new(state.Get(sourceAddressCell)[..32]); + byte[] validatorPubkey = + state.Get(validatorAddressFirstCell)[..32].Concat(state.Get(validatorAddressSecondCell)[..16]) + .ToArray(); + validatorExits[(int)i] = new ValidatorExit { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey }; + } + + return validatorExits; + } +} diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index f7f5bd8c803..c204ce43c0a 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -6,6 +6,7 @@ using System.Numerics; using Nethermind.Blockchain; using Nethermind.Blockchain.Receipts; +using Nethermind.Blockchain.ValidatorExit; using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; @@ -36,6 +37,7 @@ public partial class BlockProcessor : IBlockProcessor private readonly IBlockValidator _blockValidator; private readonly IRewardCalculator _rewardCalculator; private readonly IBlockProcessor.IBlockTransactionsExecutor _blockTransactionsExecutor; + private readonly IValidatorExitEipHandler _validatorExitEipHandler; private const int MaxUncommittedBlocks = 64; @@ -66,6 +68,7 @@ public BlockProcessor( _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); _beaconBlockRootHandler = new BeaconBlockRootHandler(); + _validatorExitEipHandler = new ValidatorExitEipHandler(); ReceiptsTracer = new BlockReceiptsTracer(); } @@ -242,6 +245,7 @@ protected virtual TxReceipt[] ProcessBlock( block.Header.ReceiptsRoot = receipts.GetReceiptsRoot(spec, block.ReceiptsRoot); ApplyMinerRewards(block, blockTracer, spec); _withdrawalProcessor.ProcessWithdrawals(block, spec); + ReceiptsTracer.EndBlockTrace(); _stateProvider.Commit(spec); diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index c9718e82b75..bc6c3bab0b5 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using System.Linq; using System.Text; +using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core.Crypto; using Nethermind.Int256; @@ -58,6 +59,8 @@ public Transaction[] Transactions public Withdrawal[]? Withdrawals => Body.Withdrawals; + public ValidatorExit[]? ValidatorExits => Body.ValidatorExits; // do not add setter here + public Hash256? Hash => Header.Hash; // do not add setter here public Hash256? ParentHash => Header.ParentHash; // do not add setter here diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 76658c6ab8a..58333e8dd55 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -2,12 +2,13 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Core { public class BlockBody { - public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null) + public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null, ValidatorExit[]? validatorExits = null) { Transactions = transactions ?? Array.Empty(); Uncles = uncles ?? Array.Empty(); @@ -30,6 +31,8 @@ public BlockBody() : this(null, null, null) { } public Withdrawal[]? Withdrawals { get; } + public ValidatorExit[]? ValidatorExits { get; } + public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0; } } diff --git a/src/Nethermind/Nethermind.Core/BlockHeader.cs b/src/Nethermind/Nethermind.Core/BlockHeader.cs index e337ab3c735..3d32d4f4ec6 100644 --- a/src/Nethermind/Nethermind.Core/BlockHeader.cs +++ b/src/Nethermind/Nethermind.Core/BlockHeader.cs @@ -27,7 +27,8 @@ public BlockHeader( byte[] extraData, ulong? blobGasUsed = null, ulong? excessBlobGas = null, - Hash256? parentBeaconBlockRoot = null) + Hash256? parentBeaconBlockRoot = null, + Hash256? validatorExitsRoot = null) { ParentHash = parentHash; UnclesHash = unclesHash; @@ -38,6 +39,7 @@ public BlockHeader( Timestamp = timestamp; ExtraData = extraData; ParentBeaconBlockRoot = parentBeaconBlockRoot; + ValidatorExitsRoot = validatorExitsRoot; BlobGasUsed = blobGasUsed; ExcessBlobGas = excessBlobGas; } @@ -69,6 +71,7 @@ public BlockHeader( public long? AuRaStep { get; set; } public UInt256 BaseFeePerGas { get; set; } public Hash256? WithdrawalsRoot { get; set; } + public Hash256? ValidatorExitsRoot { get; set; } public Hash256? ParentBeaconBlockRoot { get; set; } public ulong? BlobGasUsed { get; set; } public ulong? ExcessBlobGas { get; set; } diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index f7e8519de72..8d2fd1513e6 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -273,6 +273,12 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec bool IsEip4788Enabled { get; } Address Eip4788ContractAddress { get; } + /// + /// Execution layer triggerable exits + /// + bool IsEip7002Enabled { get; } + Address Eip7002ContractAddress { get; } + /// /// SELFDESTRUCT only in same transaction /// @@ -288,7 +294,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public ulong Eip4844TransitionTimestamp { get; } - // STATE related + // STATE related public bool ClearEmptyAccountWhenTouched => IsEip158Enabled; // VM diff --git a/src/Nethermind/Nethermind.Core/ValidatorExit.cs b/src/Nethermind/Nethermind.Core/ValidatorExit.cs new file mode 100644 index 00000000000..1c4cb7d3bfd --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ValidatorExit.cs @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; + +namespace Nethermind.Blockchain.ValidatorExit; + +public struct ValidatorExit +{ + public Address SourceAddress; + public byte[] ValidatorPubkey; +} From ee9c127c0a2ba152e03f3468a3cda2fc3a4e5a49 Mon Sep 17 00:00:00 2001 From: Nikita Mescheryakov Date: Tue, 23 Jan 2024 14:43:11 +0300 Subject: [PATCH 064/551] Block processor --- .../ValidatorExit/IValidatorExitEipHandler.cs | 1 - .../Processing/BlockProcessor.cs | 10 ++++++ src/Nethermind/Nethermind.Core/Block.cs | 5 +-- src/Nethermind/Nethermind.Core/BlockBody.cs | 1 + .../ValidatorExitsDecoder.cs | 19 ++++++++++++ .../OverridableReleaseSpec.cs | 2 ++ .../Nethermind.Specs/ReleaseSpec.cs | 2 ++ .../SystemTransactionReleaseSpec.cs | 2 ++ .../Proofs/ValidatorExitsTrie.cs | 31 +++++++++++++++++++ 9 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs create mode 100644 src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs index c69548c0296..0c33f71a84b 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs @@ -9,6 +9,5 @@ namespace Nethermind.Blockchain.ValidatorExit; public interface IValidatorExitEipHandler { - void UpdateExitPrecompile(IReleaseSpec spec, IWorldState state); ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state); } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index c204ce43c0a..6d9edc29f06 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -21,6 +21,7 @@ using Nethermind.Logging; using Nethermind.Specs.Forks; using Nethermind.State; +using Nethermind.State.Proofs; using Metrics = Nethermind.Blockchain.Metrics; namespace Nethermind.Consensus.Processing; @@ -246,6 +247,14 @@ protected virtual TxReceipt[] ProcessBlock( ApplyMinerRewards(block, blockTracer, spec); _withdrawalProcessor.ProcessWithdrawals(block, spec); + if (spec.IsEip7002Enabled) + { + ValidatorExit[] validatorExits = _validatorExitEipHandler.CalculateValidatorExits(spec, _stateProvider); + // TODO: make function + Hash256 root = new ValidatorExitsTrie(validatorExits, true).RootHash; + block.Header.ValidatorExitsRoot = root; + } + ReceiptsTracer.EndBlockTrace(); _stateProvider.Commit(spec); @@ -299,6 +308,7 @@ private Block PrepareBlockForProcessing(Block suggestedBlock) WithdrawalsRoot = bh.WithdrawalsRoot, IsPostMerge = bh.IsPostMerge, ParentBeaconBlockRoot = bh.ParentBeaconBlockRoot, + ValidatorExitsRoot = bh.ValidatorExitsRoot }; if (!ShouldComputeStateRoot(bh)) diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index bc6c3bab0b5..1d95ebb78b1 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -25,10 +25,11 @@ public Block( BlockHeader header, IEnumerable transactions, IEnumerable uncles, - IEnumerable? withdrawals = null) + IEnumerable? withdrawals = null, + IEnumerable? validatorExits = null) { Header = header ?? throw new ArgumentNullException(nameof(header)); - Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray()); + Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray(), validatorExits?.ToArray()); } public Block(BlockHeader header) : this( diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 58333e8dd55..ad686b050e5 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -13,6 +13,7 @@ public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[ Transactions = transactions ?? Array.Empty(); Uncles = uncles ?? Array.Empty(); Withdrawals = withdrawals; + ValidatorExits = validatorExits; } public BlockBody() : this(null, null, null) { } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs new file mode 100644 index 00000000000..bbe6f32b6ba --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs @@ -0,0 +1,19 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Blockchain.ValidatorExit; + +namespace Nethermind.Serialization.Rlp; + +public class ValidatorExitsDecoder : IRlpObjectDecoder +{ + public int GetLength(ValidatorExit item, RlpBehaviors rlpBehaviors) + { + throw new System.NotImplementedException(); + } + + public Rlp Encode(ValidatorExit item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + throw new System.NotImplementedException(); + } +} diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index b36a57071d0..0c1ba888352 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -157,6 +157,8 @@ public ulong Eip4844TransitionTimestamp public bool IsEip6780Enabled => _spec.IsEip6780Enabled; public bool IsEip4788Enabled => _spec.IsEip4788Enabled; public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; + public bool IsEip7002Enabled => _spec.IsEip7002Enabled; + public Address Eip7002ContractAddress => _spec.Eip7002ContractAddress; public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; public long ElasticityMultiplier => _spec.ElasticityMultiplier; diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index 5de83c8356b..7327e8536bc 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -84,6 +84,8 @@ public ReleaseSpec Clone() public bool IsEip5656Enabled { get; set; } public bool IsEip6780Enabled { get; set; } public bool IsEip4788Enabled { get; set; } + public bool IsEip7002Enabled { get; set; } + public Address Eip7002ContractAddress { get; set; } private Address _eip4788ContractAddress; public Address Eip4788ContractAddress diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index 8774d7a03ae..4d45160f9db 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -130,6 +130,8 @@ public bool IsEip158IgnoredAccount(Address address) public bool IsEip6780Enabled => _spec.IsEip6780Enabled; public bool IsEip4788Enabled => _spec.IsEip4788Enabled; public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; + public bool IsEip7002Enabled => _spec.IsEip7002Enabled; + public Address Eip7002ContractAddress => _spec.Eip7002ContractAddress; public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; public long ElasticityMultiplier => _spec.ElasticityMultiplier; diff --git a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs new file mode 100644 index 00000000000..09e159ee797 --- /dev/null +++ b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.Buffers; +using Nethermind.Serialization.Rlp; +using Nethermind.State.Trie; + +namespace Nethermind.State.Proofs; + +public class ValidatorExitsTrie : PatriciaTrie +{ + private static readonly ValidatorExitsDecoder _codec = new(); + + public ValidatorExitsTrie(ValidatorExit[]? validatorExits, bool canBuildProof, ICappedArrayPool? bufferPool = null) + : base(validatorExits, canBuildProof, bufferPool) + { + ArgumentNullException.ThrowIfNull(validatorExits); + } + + protected override void Initialize(ValidatorExit[] validatorExits) + { + var key = 0; + + foreach (ValidatorExit exit in validatorExits) + { + Set(Rlp.Encode(key++).Bytes, _codec.Encode(exit).Bytes); + } + } +} From 51198de7d7d46faa6c365da47a3d4ed41e75c45d Mon Sep 17 00:00:00 2001 From: Nikita Mescheryakov Date: Wed, 31 Jan 2024 18:21:47 +0300 Subject: [PATCH 065/551] Block & Header decoders --- .../ValidatorExit/ValidatorExitEipHandler.cs | 34 +---- .../Processing/BlockProcessor.cs | 21 ++- src/Nethermind/Nethermind.Core/BlockBody.cs | 2 +- .../BlockDecoder.cs | 127 ++++++++++++++++-- .../HeaderDecoder.cs | 22 ++- .../ValidatorExitsDecoder.cs | 14 +- 6 files changed, 163 insertions(+), 57 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs index 0a3219b5038..f0320377043 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs @@ -13,38 +13,13 @@ namespace Nethermind.Blockchain.ValidatorExit; public class ValidatorExitEipHandler : IValidatorExitEipHandler { // private static readonly UInt256 ExcessExitsStorageSlot = 0; - private static readonly UInt256 ExitCountStorageSlot = 1; + // private static readonly UInt256 ExitCountStorageSlot = 1; private static readonly UInt256 ExitMessageQueueHeadStorageSlot = 2; private static readonly UInt256 ExitMessageQueueTailStorageSlot = 3; private static readonly UInt256 ExitMessageQueueStorageOffset = 4; private static readonly UInt256 MaxExitsPerBlock = 16; - - // Updates storage of the precompile after block processing - public void UpdateExitPrecompile(IReleaseSpec spec, IWorldState state) - { - UpdateExitQueue(spec, state); - UpdateExcessExits(spec, state); - ResetExitCount(spec, state); - } - - private static void UpdateExitQueue(IReleaseSpec spec, IWorldState state) - { - - } - - private static void UpdateExcessExits(IReleaseSpec spec, IWorldState state) - { - - } - - private static void ResetExitCount(IReleaseSpec spec, IWorldState state) - { - StorageCell exitCountCell = new(spec.Eip7002ContractAddress, ExitCountStorageSlot); - state.Set(exitCountCell, UInt256.Zero.ToBigEndian()); - } - - // Writes withdrawals information from the precompile to the block + // Reads validator exit information from the precompile public ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state) { StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, ExitMessageQueueHeadStorageSlot); @@ -63,9 +38,10 @@ public ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState st StorageCell sourceAddressCell = new(spec.Eip7002ContractAddress, queueStorageSlot); StorageCell validatorAddressFirstCell = new(spec.Eip7002ContractAddress, queueStorageSlot + 1); StorageCell validatorAddressSecondCell = new(spec.Eip7002ContractAddress, queueStorageSlot + 2); - Address sourceAddress = new(state.Get(sourceAddressCell)[..32]); + Address sourceAddress = new(state.Get(sourceAddressCell)[..20].ToArray()); byte[] validatorPubkey = - state.Get(validatorAddressFirstCell)[..32].Concat(state.Get(validatorAddressSecondCell)[..16]) + state.Get(validatorAddressFirstCell)[..32].ToArray() + .Concat(state.Get(validatorAddressSecondCell)[..16].ToArray()) .ToArray(); validatorExits[(int)i] = new ValidatorExit { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey }; } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 5b2378214af..da36d6b64de 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -250,13 +250,7 @@ protected virtual TxReceipt[] ProcessBlock( ApplyMinerRewards(block, blockTracer, spec); _withdrawalProcessor.ProcessWithdrawals(block, spec); - if (spec.IsEip7002Enabled) - { - ValidatorExit[] validatorExits = _validatorExitEipHandler.CalculateValidatorExits(spec, _stateProvider); - // TODO: make function - Hash256 root = new ValidatorExitsTrie(validatorExits, true).RootHash; - block.Header.ValidatorExitsRoot = root; - } + ProcessValidatorExits(block, spec); ReceiptsTracer.EndBlockTrace(); @@ -273,6 +267,19 @@ protected virtual TxReceipt[] ProcessBlock( return receipts; } + private void ProcessValidatorExits(Block block, IReleaseSpec spec) + { + if (!spec.IsEip7002Enabled) + { + return; + } + + ValidatorExit[] validatorExits = _validatorExitEipHandler.CalculateValidatorExits(spec, _stateProvider); + Hash256 root = new ValidatorExitsTrie(validatorExits, true).RootHash; + block.Body.ValidatorExits = validatorExits; + block.Header.ValidatorExitsRoot = root; + } + // TODO: block processor pipeline private void StoreTxReceipts(Block block, TxReceipt[] txReceipts) { diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index ad686b050e5..1aed998cd84 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -32,7 +32,7 @@ public BlockBody() : this(null, null, null) { } public Withdrawal[]? Withdrawals { get; } - public ValidatorExit[]? ValidatorExits { get; } + public ValidatorExit[]? ValidatorExits { get; set; } public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0; } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 54c26d93d2c..8b8299f4e3a 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -4,6 +4,7 @@ using System; using System.Buffers; using System.Collections.Generic; +using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core; namespace Nethermind.Serialization.Rlp @@ -13,6 +14,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder private readonly HeaderDecoder _headerDecoder = new(); private readonly TxDecoder _txDecoder = new(); private readonly WithdrawalDecoder _withdrawalDecoder = new(); + private readonly ValidatorExitsDecoder _validatorExitsDecoder = new(); public Block? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -52,8 +54,53 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder rlpStream.Check(unclesCheck); - List withdrawals = null; + List? withdrawals = DecodeWithdrawals(rlpStream, blockCheck); + List? validatorExits = DecodeValidatorExits(rlpStream, blockCheck); + if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + { + rlpStream.Check(blockCheck); + } + + return new(header, transactions, uncleHeaders, withdrawals, validatorExits); + } + + private List? DecodeValidatorExits(RlpStream rlpStream, int blockCheck) + { + List? validatorExits = null; + if (rlpStream.Position != blockCheck) + { + bool lengthWasRead = true; + try + { + rlpStream.PeekNextRlpLength(); + } + catch + { + lengthWasRead = false; + } + + if (lengthWasRead) + { + int validatorExistsLength = rlpStream.ReadSequenceLength(); + int validatorExistsCheck = rlpStream.Position + validatorExistsLength; + validatorExits = new(); + + while (rlpStream.Position < validatorExistsCheck) + { + validatorExits.Add(_validatorExitsDecoder.Decode(rlpStream)); + } + + rlpStream.Check(validatorExistsCheck); + } + } + + return validatorExits; + } + + private List? DecodeWithdrawals(RlpStream rlpStream, int blockCheck) + { + List? withdrawals = null; if (rlpStream.Position != blockCheck) { bool lengthWasRead = true; @@ -81,15 +128,10 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder } } - if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) - { - rlpStream.Check(blockCheck); - } - - return new(header, transactions, uncleHeaders, withdrawals); + return withdrawals; } - private (int Total, int Txs, int Uncles, int? Withdrawals) GetContentLength(Block item, RlpBehaviors rlpBehaviors) + private (int Total, int Txs, int Uncles, int? Withdrawals, int? ValidatorExits) GetContentLength(Block item, RlpBehaviors rlpBehaviors) { int contentLength = _headerDecoder.GetLength(item.Header, rlpBehaviors); @@ -108,7 +150,25 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder contentLength += Rlp.LengthOfSequence(withdrawalsLength.Value); } - return (contentLength, txLength, unclesLength, withdrawalsLength); + int? validatorExitsLength = GetValidatorExitsLength(item, rlpBehaviors); + contentLength += validatorExitsLength ?? 0; + + return (contentLength, txLength, unclesLength, withdrawalsLength, validatorExitsLength); + } + + private int? GetValidatorExitsLength(Block item, RlpBehaviors rlpBehaviors) + { + if (item.ValidatorExits is null) + return null; + + int validatorExistsLength = 0; + + for (int i = 0, count = item.ValidatorExits.Length; i < count; i++) + { + validatorExistsLength += _validatorExitsDecoder.GetLength(item.ValidatorExits[i], rlpBehaviors); + } + + return validatorExistsLength; } private int GetUnclesLength(Block item, RlpBehaviors rlpBehaviors) @@ -191,7 +251,20 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) decoderContext.Check(unclesCheck); - List withdrawals = null; + List? withdrawals = DecodeWithdrawals(ref decoderContext, blockCheck); + List? validatorExits = DecodeValidatorExits(ref decoderContext, blockCheck); + + if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + { + decoderContext.Check(blockCheck); + } + + return new(header, transactions, uncleHeaders, withdrawals, validatorExits); + } + + private List? DecodeWithdrawals(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) + { + List? withdrawals = null; if (decoderContext.Position != blockCheck) { @@ -207,12 +280,28 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) decoderContext.Check(withdrawalsCheck); } - if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + return withdrawals; + } + + private List? DecodeValidatorExits(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) + { + List? validatorExits = null; + + if (decoderContext.Position != blockCheck) { - decoderContext.Check(blockCheck); + int validatorExitLength = decoderContext.ReadSequenceLength(); + int validatorExitsCheck = decoderContext.Position + validatorExitLength; + validatorExits = new(); + + while (decoderContext.Position < validatorExitsCheck) + { + validatorExits.Add(_validatorExitsDecoder.Decode(ref decoderContext)); + } + + decoderContext.Check(validatorExitsCheck); } - return new(header, transactions, uncleHeaders, withdrawals); + return validatorExits; } public Rlp Encode(Block? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -235,7 +324,7 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl return; } - (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength) = GetContentLength(item, rlpBehaviors); + (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength, int? validatorExitsLength) = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.Header); stream.StartSequence(txsLength); @@ -259,6 +348,16 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl stream.Encode(item.Withdrawals[i]); } } + + if (validatorExitsLength.HasValue) + { + stream.StartSequence(validatorExitsLength.Value); + + for (int i = 0; i < item.ValidatorExits!.Length; i++) + { + _validatorExitsDecoder.Encode(stream, item.ValidatorExits[i]); + } + } } public static ReceiptRecoveryBlock? DecodeToReceiptRecoveryBlock(MemoryManager? memoryManager, Memory memory, RlpBehaviors rlpBehaviors) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index 80e1a500525..74281a91e49 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -85,10 +85,15 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder= 4 && decoderContext.Position != headerCheck) { blockHeader.ParentBeaconBlockRoot = decoderContext.DecodeKeccak(); } + + if (itemsRemaining == 5 && decoderContext.Position != headerCheck) + { + blockHeader.ValidatorExitsRoot = decoderContext.DecodeKeccak(); + } } @@ -172,10 +177,15 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder= 4 && rlpStream.Position != headerCheck) { blockHeader.ParentBeaconBlockRoot = rlpStream.DecodeKeccak(); } + + if (itemsRemaining == 5 && rlpStream.Position != headerCheck) + { + blockHeader.ValidatorExitsRoot = rlpStream.DecodeKeccak(); + } } if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) @@ -245,6 +255,11 @@ public void Encode(RlpStream rlpStream, BlockHeader? header, RlpBehaviors rlpBeh { rlpStream.Encode(header.ParentBeaconBlockRoot); } + + if (header.ValidatorExitsRoot is not null) + { + rlpStream.Encode(header.ValidatorExitsRoot); + } } public Rlp Encode(BlockHeader? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -286,7 +301,8 @@ private static int GetContentLength(BlockHeader? item, RlpBehaviors rlpBehaviors + (item.WithdrawalsRoot is null && item.BlobGasUsed is null && item.ExcessBlobGas is null ? 0 : Rlp.LengthOfKeccakRlp) + (item.ParentBeaconBlockRoot is null ? 0 : Rlp.LengthOfKeccakRlp) + (item.BlobGasUsed is null ? 0 : Rlp.LengthOf(item.BlobGasUsed.Value)) - + (item.ExcessBlobGas is null ? 0 : Rlp.LengthOf(item.ExcessBlobGas.Value)); + + (item.ExcessBlobGas is null ? 0 : Rlp.LengthOf(item.ExcessBlobGas.Value)) + + (item.ValidatorExitsRoot is null ? 0 : Rlp.LengthOf(item.ValidatorExitsRoot)); if (notForSealing) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs index bbe6f32b6ba..aff0ec10018 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs @@ -5,14 +5,22 @@ namespace Nethermind.Serialization.Rlp; -public class ValidatorExitsDecoder : IRlpObjectDecoder +public class ValidatorExitsDecoder : IRlpStreamDecoder, IRlpValueDecoder { - public int GetLength(ValidatorExit item, RlpBehaviors rlpBehaviors) + public int GetLength(ValidatorExit item, RlpBehaviors rlpBehaviors) => + Rlp.LengthOfSequence(Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey)); + + public ValidatorExit Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + throw new System.NotImplementedException(); + } + + public void Encode(RlpStream stream, ValidatorExit item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { throw new System.NotImplementedException(); } - public Rlp Encode(ValidatorExit item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public ValidatorExit Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { throw new System.NotImplementedException(); } From 7801dbea84b568273dd4898d487b2b2bb99ad8ce Mon Sep 17 00:00:00 2001 From: Nikita Mescheryakov Date: Wed, 31 Jan 2024 18:47:56 +0300 Subject: [PATCH 066/551] Validator exit decoder --- .../Nethermind.Core/ValidatorExit.cs | 6 ++++ .../ValidatorExitsDecoder.cs | 33 ++++++++++++++++--- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/ValidatorExit.cs b/src/Nethermind/Nethermind.Core/ValidatorExit.cs index 1c4cb7d3bfd..4b3cf3e75a2 100644 --- a/src/Nethermind/Nethermind.Core/ValidatorExit.cs +++ b/src/Nethermind/Nethermind.Core/ValidatorExit.cs @@ -7,6 +7,12 @@ namespace Nethermind.Blockchain.ValidatorExit; public struct ValidatorExit { + public ValidatorExit(Address sourceAddress, byte[] validatorPubkey) + { + SourceAddress = sourceAddress; + ValidatorPubkey = validatorPubkey; + } + public Address SourceAddress; public byte[] ValidatorPubkey; } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs index aff0ec10018..6fe53d45342 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs @@ -1,27 +1,50 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core; namespace Nethermind.Serialization.Rlp; -public class ValidatorExitsDecoder : IRlpStreamDecoder, IRlpValueDecoder +public class ValidatorExitsDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder { public int GetLength(ValidatorExit item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey)); public ValidatorExit Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - throw new System.NotImplementedException(); + int _ = rlpStream.ReadSequenceLength(); + Address sourceAddress = rlpStream.DecodeAddress(); + ArgumentNullException.ThrowIfNull(sourceAddress); + byte[] validatorPubkey = rlpStream.DecodeByteArray(); + return new ValidatorExit(sourceAddress, validatorPubkey); + } + + public ValidatorExit Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + int _ = decoderContext.ReadSequenceLength(); + Address sourceAddress = decoderContext.DecodeAddress(); + ArgumentNullException.ThrowIfNull(sourceAddress); + byte[] validatorPubkey = decoderContext.DecodeByteArray(); + return new ValidatorExit(sourceAddress, validatorPubkey); } public void Encode(RlpStream stream, ValidatorExit item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - throw new System.NotImplementedException(); + int contentLength = GetLength(item, rlpBehaviors); + stream.StartSequence(contentLength); + stream.Encode(item.SourceAddress); + stream.Encode(item.ValidatorPubkey); } - public ValidatorExit Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public Rlp Encode(ValidatorExit item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - throw new System.NotImplementedException(); + int contentLength = GetLength(item, rlpBehaviors); + RlpStream rlpStream = new(Rlp.LengthOfSequence(contentLength)); + + Encode(rlpStream, item, rlpBehaviors); + + return new Rlp(rlpStream.Data.ToArray()); } } From fa8177ef37da09883269e5ec18070de69d40000f Mon Sep 17 00:00:00 2001 From: Nikita Mescheryakov Date: Fri, 2 Feb 2024 19:22:39 +0300 Subject: [PATCH 067/551] Decoder tests --- .../Processing/BlockProcessor.cs | 2 +- .../Builders/BlockBuilder.cs | 10 +++++ .../Builders/BlockHeaderBuilder.cs | 6 +++ .../Encoding/BlockDecoderTests.cs | 11 ++++++ .../Encoding/HeaderDecoderTests.cs | 38 +++++++++++++++++++ .../Encoding/ValidatorExitDecoderTests.cs | 37 ++++++++++++++++++ src/Nethermind/Nethermind.Core/BlockBody.cs | 8 ++-- .../BlockDecoder.cs | 10 ++++- .../HeaderDecoder.cs | 2 +- .../Proofs/ValidatorExitsTrie.cs | 9 +++++ 10 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index da36d6b64de..db34402242e 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -275,7 +275,7 @@ private void ProcessValidatorExits(Block block, IReleaseSpec spec) } ValidatorExit[] validatorExits = _validatorExitEipHandler.CalculateValidatorExits(spec, _stateProvider); - Hash256 root = new ValidatorExitsTrie(validatorExits, true).RootHash; + Hash256 root = ValidatorExitsTrie.CalculateRoot(validatorExits); block.Body.ValidatorExits = validatorExits; block.Header.ValidatorExitsRoot = root; } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index ea6fafff77e..8e56d5b8c65 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Crypto; @@ -280,5 +281,14 @@ public BlockBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRoot) TestObjectInternal.Header.ParentBeaconBlockRoot = parentBeaconBlockRoot; return this; } + + public BlockBuilder WithValidatorExits(ValidatorExit[]? validatorExits) + { + TestObjectInternal = TestObjectInternal.WithReplacedBody( + TestObjectInternal.Body.WithChangedValidatorExits(validatorExits)); + + TestObjectInternal.Header.TxRoot = validatorExits is not null ? ValidatorExitsTrie.CalculateRoot(validatorExits) : null; + return this; + } } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs index 6ce7af4acd1..f8c4a85046d 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs @@ -195,4 +195,10 @@ public BlockHeaderBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRo TestObjectInternal.ParentBeaconBlockRoot = parentBeaconBlockRoot; return this; } + + public BlockHeaderBuilder WithValidatorExitsRoot(Hash256? validatorExitsRoot) + { + TestObjectInternal.ValidatorExitsRoot = validatorExitsRoot; + return this; + } } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index bf378f9d01c..7e7f55e620d 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -3,6 +3,7 @@ using System; using System.IO; +using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; @@ -86,6 +87,16 @@ public BlockDecoderTests() .WithBlobGasUsed(ulong.MaxValue) .WithExcessBlobGas(ulong.MaxValue) .WithMixHash(Keccak.EmptyTreeHash) + .TestObject, + Build.A.Block.WithNumber(1) + .WithBaseFeePerGas(1) + .WithTransactions(transactions) + .WithUncles(uncles) + .WithWithdrawals(8) + .WithBlobGasUsed(ulong.MaxValue) + .WithExcessBlobGas(ulong.MaxValue) + .WithMixHash(Keccak.EmptyTreeHash) + .WithValidatorExits(new[] { new ValidatorExit(TestItem.AddressA, new byte[48]) }) .TestObject }; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs index 380e9a66f9a..fd128f916d0 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs @@ -156,6 +156,44 @@ public void Can_encode_decode_with_cancun_fields(ulong? blobGasUsed, ulong? exce blockHeader.ExcessBlobGas.Should().Be(excessBlobGas); } + [Test] + public void Can_encode_decode_with_ValidatorExitRoot() + { + BlockHeader header = Build.A.BlockHeader + .WithTimestamp(ulong.MaxValue) + .WithBaseFee(1) + .WithWithdrawalsRoot(Keccak.Zero) + .WithBlobGasUsed(0) + .WithExcessBlobGas(0) + .WithParentBeaconBlockRoot(TestItem.KeccakB) + .WithValidatorExitsRoot(TestItem.KeccakA).TestObject; + + Rlp rlp = Rlp.Encode(header); + BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); + + blockHeader.ParentBeaconBlockRoot.Should().Be(TestItem.KeccakB); + blockHeader.ValidatorExitsRoot.Should().Be(TestItem.KeccakA); + } + + [Test] + public void Can_encode_decode_with_ValidatorExitRoot_equals_to_null() + { + BlockHeader header = Build.A.BlockHeader + .WithTimestamp(ulong.MaxValue) + .WithBaseFee(1) + .WithWithdrawalsRoot(Keccak.Zero) + .WithBlobGasUsed(0) + .WithExcessBlobGas(0) + .WithParentBeaconBlockRoot(TestItem.KeccakB) + .WithValidatorExitsRoot(null).TestObject; + + Rlp rlp = Rlp.Encode(header); + BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); + + blockHeader.ParentBeaconBlockRoot.Should().Be(TestItem.KeccakB); + blockHeader.ValidatorExitsRoot.Should().BeNull(); + } + public static IEnumerable CancunFieldsSource() { yield return new object?[] { null, null, null }; diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs new file mode 100644 index 00000000000..741fbc8c112 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.Test.Builders; +using Nethermind.Serialization.Rlp; +using NUnit.Framework; + +namespace Nethermind.Core.Test.Encoding; + +[TestFixture] +public class ValidatorExitDecoderTests +{ + private static ValidatorExitsDecoder _decoder = new(); + + [Test] + public void Roundtrip() + { + byte[] validatorPubkey = new byte[48]; + validatorPubkey[11] = 11; + ValidatorExit exit = new(TestItem.AddressA, validatorPubkey); + + Rlp encoded = _decoder.Encode(exit); + ValidatorExit decoded = _decoder.Decode(encoded.Bytes); + + Assert.That(decoded.SourceAddress, Is.EqualTo(TestItem.AddressA), "sourceAddress"); + Assert.That(decoded.ValidatorPubkey, Is.EqualTo(validatorPubkey), "validatorPubKey"); + } + + [Test] + public void GetLength_should_be_72() + { + byte[] validatorPubkey = new byte[48]; + ValidatorExit exit = new(TestItem.AddressA, validatorPubkey); + Assert.That(_decoder.GetLength(exit, RlpBehaviors.None), Is.EqualTo(72), "GetLength"); + } +} diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 1aed998cd84..1ffda921203 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -18,11 +18,13 @@ public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[ public BlockBody() : this(null, null, null) { } - public BlockBody WithChangedTransactions(Transaction[] transactions) => new(transactions, Uncles, Withdrawals); + public BlockBody WithChangedTransactions(Transaction[] transactions) => new(transactions, Uncles, Withdrawals, ValidatorExits); - public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals); + public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals, ValidatorExits); - public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals); + public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals, ValidatorExits); + + public BlockBody WithChangedValidatorExits(ValidatorExit[]? validatorExits) => new(Transactions, Uncles, Withdrawals, validatorExits); public static BlockBody WithOneTransactionOnly(Transaction tx) => new(new[] { tx }, null, null); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 8b8299f4e3a..2795c79d2ad 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -150,8 +150,14 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder contentLength += Rlp.LengthOfSequence(withdrawalsLength.Value); } - int? validatorExitsLength = GetValidatorExitsLength(item, rlpBehaviors); - contentLength += validatorExitsLength ?? 0; + int? validatorExitsLength = null; + if (item.ValidatorExits is not null) + { + validatorExitsLength = GetValidatorExitsLength(item, rlpBehaviors); + + if (validatorExitsLength is not null) + contentLength += Rlp.LengthOfSequence(validatorExitsLength.Value); + } return (contentLength, txLength, unclesLength, withdrawalsLength, validatorExitsLength); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index 74281a91e49..9d5ed1d7bf6 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -73,7 +73,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder 0 && decoderContext.PeekPrefixAndContentLength().ContentLength == Hash256.Size) { diff --git a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs index 09e159ee797..6431bf6a3ab 100644 --- a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs @@ -4,8 +4,10 @@ using System; using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core.Buffers; +using Nethermind.Core.Crypto; using Nethermind.Serialization.Rlp; using Nethermind.State.Trie; +using Nethermind.Trie; namespace Nethermind.State.Proofs; @@ -28,4 +30,11 @@ protected override void Initialize(ValidatorExit[] validatorExits) Set(Rlp.Encode(key++).Bytes, _codec.Encode(exit).Bytes); } } + + public static Hash256 CalculateRoot(ValidatorExit[] validatorExits) + { + using TrackingCappedArrayPool cappedArray = new(validatorExits.Length * 4); + Hash256 rootHash = new ValidatorExitsTrie(validatorExits, canBuildProof: false, bufferPool: cappedArray).RootHash; + return rootHash; + } } From 70a3e5c346bb6e136b32a84ce5c0a437dbdd9d40 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Mon, 5 Feb 2024 00:34:29 +0100 Subject: [PATCH 068/551] + Draft implementation of Eip6110 --- .../Validators/TestBlockValidator.cs | 11 +-- .../AuRaBlockProcessor.cs | 8 +- .../Processing/BlockProcessor.cs | 14 +-- .../Validators/AlwaysValid.cs | 10 +-- .../Validators/BlockValidator.cs | 84 ++++++++++++++++- .../Validators/IBlockValidator.cs | 3 +- .../Validators/NeverValidBlockValidator.cs | 9 +- .../Builders/BlockValidatorBuilder.cs | 3 +- src/Nethermind/Nethermind.Core/Block.cs | 8 +- src/Nethermind/Nethermind.Core/BlockBody.cs | 7 +- src/Nethermind/Nethermind.Core/BlockHeader.cs | 9 +- src/Nethermind/Nethermind.Core/Deposit.cs | 29 ++++++ .../Nethermind.Core/Specs/IReleaseSpec.cs | 7 ++ src/Nethermind/Nethermind.Core/Withdrawal.cs | 1 + .../AuRaMergeBlockProcessor.cs | 6 +- .../InvalidBlockInterceptorTest.cs | 8 +- .../InvalidBlockInterceptor.cs | 5 +- .../OptimismBlockProcessor.cs | 4 +- .../BlockDecoder.cs | 89 +++++++++++++++++-- .../DepositDecoder.cs | 87 ++++++++++++++++++ .../HeaderDecoder.cs | 22 ++++- .../Nethermind.Serialization.Rlp/RlpStream.cs | 2 + .../OverridableReleaseSpec.cs | 4 + .../ChainSpecStyle/ChainParameters.cs | 2 + .../ChainSpecBasedSpecProvider.cs | 3 + .../Nethermind.Specs/Forks/17_Prague.cs | 21 +++++ .../Nethermind.Specs/ReleaseSpec.cs | 9 ++ .../SystemTransactionReleaseSpec.cs | 4 + .../Nethermind.State/Proofs/DepositTrie.cs | 33 +++++++ .../BlockDownloaderTests.cs | 2 +- 30 files changed, 452 insertions(+), 52 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core/Deposit.cs create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs create mode 100644 src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs create mode 100644 src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TestBlockValidator.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TestBlockValidator.cs index 6edc6277341..6bd5cf0fbc1 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TestBlockValidator.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TestBlockValidator.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using Nethermind.Consensus.Validators; using Nethermind.Core; +using Nethermind.Core.Specs; namespace Nethermind.Blockchain.Test.Validators; @@ -44,11 +45,6 @@ public bool ValidateSuggestedBlock(Block block) return _alwaysSameResultForSuggested ?? _suggestedValidationResults.Dequeue(); } - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) - { - return _alwaysSameResultForProcessed ?? _processedValidationResults.Dequeue(); - } - public bool ValidateWithdrawals(Block block, out string? error) { error = null; @@ -61,4 +57,9 @@ public bool ValidateOrphanedBlock(Block block, out string? error) error = null; return _alwaysSameResultForSuggested ?? _suggestedValidationResults.Dequeue(); } + + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) + { + return _alwaysSameResultForProcessed ?? _processedValidationResults.Dequeue(); + } } diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 1c4c5b44b22..44013ce1ab5 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -73,21 +73,21 @@ public IAuRaValidator AuRaValidator set => _auRaValidator = value; } - protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) + protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options, out IReleaseSpec spec) { ValidateAuRa(block); _contractRewriter?.RewriteContracts(block.Number, _stateProvider, _specProvider.GetSpec(block.Header)); AuRaValidator.OnBlockProcessingStart(block, options); - TxReceipt[] receipts = base.ProcessBlock(block, blockTracer, options); + TxReceipt[] receipts = base.ProcessBlock(block, blockTracer, options, out spec); AuRaValidator.OnBlockProcessingEnd(block, receipts, options); Metrics.AuRaStep = block.Header?.AuRaStep ?? 0; return receipts; } // After PoS switch we need to revert to standard block processing, ignoring AuRa customizations - protected TxReceipt[] PostMergeProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) + protected TxReceipt[] PostMergeProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options, out IReleaseSpec spec) { - return base.ProcessBlock(block, blockTracer, options); + return base.ProcessBlock(block, blockTracer, options, out spec); } // This validations cannot be run in AuraSealValidator because they are dependent on state. diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index f7f5bd8c803..9c3d406676b 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -194,8 +194,8 @@ private void RestoreBranch(Hash256 branchingPointStateRoot) ApplyDaoTransition(suggestedBlock); Block block = PrepareBlockForProcessing(suggestedBlock); - TxReceipt[] receipts = ProcessBlock(block, blockTracer, options); - ValidateProcessedBlock(suggestedBlock, options, block, receipts); + TxReceipt[] receipts = ProcessBlock(block, blockTracer, options, out IReleaseSpec spec); + ValidateProcessedBlock(suggestedBlock, options, block, receipts, spec); if (options.ContainsFlag(ProcessingOptions.StoreReceipts)) { StoreTxReceipts(block, receipts); @@ -205,9 +205,9 @@ private void RestoreBranch(Hash256 branchingPointStateRoot) } // TODO: block processor pipeline - private void ValidateProcessedBlock(Block suggestedBlock, ProcessingOptions options, Block block, TxReceipt[] receipts) + private void ValidateProcessedBlock(Block suggestedBlock, ProcessingOptions options, Block block, TxReceipt[] receipts, IReleaseSpec spec) { - if (!options.ContainsFlag(ProcessingOptions.NoValidation) && !_blockValidator.ValidateProcessedBlock(block, receipts, suggestedBlock)) + if (!options.ContainsFlag(ProcessingOptions.NoValidation) && !_blockValidator.ValidateProcessedBlock(block, receipts, suggestedBlock, spec)) { if (_logger.IsError) _logger.Error($"Processed block is not valid {suggestedBlock.ToString(Block.Format.FullHashAndNumber)}"); if (_logger.IsError) _logger.Error($"Suggested block TD: {suggestedBlock.TotalDifficulty}, Suggested block IsPostMerge {suggestedBlock.IsPostMerge}, Block TD: {block.TotalDifficulty}, Block IsPostMerge {block.IsPostMerge}"); @@ -222,9 +222,10 @@ private bool ShouldComputeStateRoot(BlockHeader header) => protected virtual TxReceipt[] ProcessBlock( Block block, IBlockTracer blockTracer, - ProcessingOptions options) + ProcessingOptions options, + out IReleaseSpec spec) { - IReleaseSpec spec = _specProvider.GetSpec(block.Header); + spec = _specProvider.GetSpec(block.Header); ReceiptsTracer.SetOtherTracer(blockTracer); ReceiptsTracer.StartNewBlockTrace(block); @@ -293,6 +294,7 @@ private Block PrepareBlockForProcessing(Block suggestedBlock) ReceiptsRoot = bh.ReceiptsRoot, BaseFeePerGas = bh.BaseFeePerGas, WithdrawalsRoot = bh.WithdrawalsRoot, + DepositsRoot = bh.DepositsRoot, IsPostMerge = bh.IsPostMerge, ParentBeaconBlockRoot = bh.ParentBeaconBlockRoot, }; diff --git a/src/Nethermind/Nethermind.Consensus/Validators/AlwaysValid.cs b/src/Nethermind/Nethermind.Consensus/Validators/AlwaysValid.cs index be60c6375dc..90e409527bd 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/AlwaysValid.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/AlwaysValid.cs @@ -49,11 +49,6 @@ public bool ValidateSuggestedBlock(Block block) return _result; } - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) - { - return _result; - } - public bool ValidateParams(BlockHeader parent, BlockHeader header, bool isUncle = false) { return _result; @@ -86,4 +81,9 @@ public bool ValidateOrphanedBlock(Block block, out string? error) error = null; return _result; } + + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) + { + return _result; + } } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index a2f4e150f41..5283c4c3c16 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; +using System.Linq; using System.Text; using Nethermind.Blockchain; using Nethermind.Core; @@ -11,6 +13,7 @@ using Nethermind.Evm; using Nethermind.Int256; using Nethermind.Logging; +using Nethermind.Serialization.Rlp; using Nethermind.State.Proofs; using Nethermind.TxPool; @@ -117,6 +120,9 @@ public bool ValidateSuggestedBlock(Block block) if (!ValidateWithdrawals(block, spec, out _)) return false; + if (!ValidateDeposits(block, spec, out _)) + return false; + return true; } @@ -128,7 +134,7 @@ public bool ValidateSuggestedBlock(Block block) /// List of tx receipts from the processed block (required only for better diagnostics when the receipt root is invalid). /// Block received from the network - unchanged. /// true if the is valid; otherwise, false. - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) { bool isValid = processedBlock.Header.Hash == suggestedBlock.Header.Hash; if (!isValid && _logger.IsError) @@ -179,6 +185,27 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B } } + List depositList = new List(capacity: processedBlock.Transactions.Length); + for (int i = 0; i < processedBlock.Transactions.Length; i++) + { + foreach(var log in receipts[i].Logs) + { + if(log.LoggersAddress == spec.Eip6110ContractAddress) + { + var depositDecoder = new DepositDecoder(); + Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); + depositList.Add(deposit); + } + } + } + Hash256 expectedDepositsRoot = new DepositTrie(suggestedBlock.Deposits).RootHash; + Hash256 actualDepositsRoot = new DepositTrie(depositList).RootHash; + + if(actualDepositsRoot != expectedDepositsRoot) + { + _logger.Error($"- deposits root : expected {expectedDepositsRoot}, got {actualDepositsRoot}"); + } + if (suggestedBlock.ExtraData is not null) { _logger.Error($"- block extra data : {suggestedBlock.ExtraData.ToHexString()}, UTF8: {Encoding.UTF8.GetString(suggestedBlock.ExtraData)}"); @@ -227,6 +254,45 @@ private bool ValidateWithdrawals(Block block, IReleaseSpec spec, out string? err return true; } + public bool ValidateDeposits(Block block, out string? error) => + ValidateDeposits(block, _specProvider.GetSpec(block.Header), out error); + + private bool ValidateDeposits(Block block, IReleaseSpec spec, out string? error) + { + if (spec.IsEip6110Enabled && block.Deposits is null) + { + error = $"Deposits cannot be null in block {block.Hash} when EIP-6110 activated."; + + if (_logger.IsWarn) _logger.Warn(error); + + return false; + } + + if (!spec.IsEip6110Enabled && block.Deposits is not null) + { + error = $"Deposits must be null in block {block.Hash} when EIP-6110 not activated."; + + if (_logger.IsWarn) _logger.Warn(error); + + return false; + } + + if (block.Deposits is not null) + { + if (!ValidateDepositsHashMatches(block, out Hash256 depositsRoot)) + { + error = $"Deposits root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.DepositsRoot}, got {depositsRoot}"; + if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.DepositsRoot}, got {depositsRoot}"); + + return false; + } + } + + error = null; + + return true; + } + private bool ValidateTransactions(Block block, IReleaseSpec spec) { Transaction[] transactions = block.Transactions; @@ -349,6 +415,22 @@ public static bool ValidateWithdrawalsHashMatches(BlockHeader header, BlockBody return header.WithdrawalsRoot == withdrawalsRoot; } + public static bool ValidateDepositsHashMatches(Block block, out Hash256? withdrawalsRoot) + { + return ValidateDepositsHashMatches(block.Header, block.Body, out withdrawalsRoot); + } + + public static bool ValidateDepositsHashMatches(BlockHeader header, BlockBody body, out Hash256? depositsRoot) + { + depositsRoot = null; + if (body.Deposits == null) + return header.DepositsRoot == null; + + depositsRoot = new DepositTrie(body.Deposits).RootHash; + + return header.WithdrawalsRoot == depositsRoot; + } + private static string Invalid(Block block) => $"Invalid block {block.ToString(Block.Format.FullHashAndNumber)}:"; } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/IBlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/IBlockValidator.cs index 43f99b149c1..a03663a9ba7 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/IBlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/IBlockValidator.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Core.Specs; namespace Nethermind.Consensus.Validators; @@ -11,6 +12,6 @@ public interface IBlockValidator : IHeaderValidator, IWithdrawalValidator bool ValidateSuggestedBlock(Block block); - bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock); + bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/NeverValidBlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/NeverValidBlockValidator.cs index 233119ae23f..bd4d90d8fc8 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/NeverValidBlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/NeverValidBlockValidator.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Core.Specs; namespace Nethermind.Consensus.Validators { @@ -27,20 +28,20 @@ public bool ValidateSuggestedBlock(Block block) return false; } - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) + public bool ValidateWithdrawals(Block block, out string? error) { + error = null; return false; } - public bool ValidateWithdrawals(Block block, out string? error) + public bool ValidateOrphanedBlock(Block block, out string? error) { error = null; return false; } - public bool ValidateOrphanedBlock(Block block, out string? error) + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) { - error = null; return false; } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockValidatorBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockValidatorBuilder.cs index 81d7fc5ff16..6acb14b9099 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockValidatorBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockValidatorBuilder.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Consensus.Validators; +using Nethermind.Specs; using NSubstitute; namespace Nethermind.Core.Test.Builders @@ -36,7 +37,7 @@ public BlockValidatorBuilder ThatAlwaysReturnsTrue protected override void BeforeReturn() { TestObjectInternal.ValidateSuggestedBlock(Arg.Any()).Returns(_alwaysTrue); - TestObjectInternal.ValidateProcessedBlock(Arg.Any(), Arg.Any(), Arg.Any()).Returns(_alwaysTrue); + TestObjectInternal.ValidateProcessedBlock(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()).Returns(_alwaysTrue); base.BeforeReturn(); } } diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index c9718e82b75..99fed40f2bb 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -24,15 +24,16 @@ public Block( BlockHeader header, IEnumerable transactions, IEnumerable uncles, - IEnumerable? withdrawals = null) + IEnumerable? withdrawals = null, + IEnumerable? deposits = null) { Header = header ?? throw new ArgumentNullException(nameof(header)); - Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray()); + Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray(), deposits?.ToArray()); } public Block(BlockHeader header) : this( header, - new(null, null, header.WithdrawalsRoot is null ? null : Array.Empty()) + new(null, null, header.WithdrawalsRoot is null ? null : Array.Empty(), header.DepositsRoot is null ? null : Array.Empty()) ) { } @@ -57,6 +58,7 @@ public Transaction[] Transactions public BlockHeader[] Uncles => Body.Uncles; // do not add setter here public Withdrawal[]? Withdrawals => Body.Withdrawals; + public Deposit[]? Deposits => Body.Deposits; public Hash256? Hash => Header.Hash; // do not add setter here diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 76658c6ab8a..32631436e0e 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -7,11 +7,12 @@ namespace Nethermind.Core { public class BlockBody { - public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null) + public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null, Deposit[]? deposits = null) { Transactions = transactions ?? Array.Empty(); Uncles = uncles ?? Array.Empty(); Withdrawals = withdrawals; + Deposits = deposits; } public BlockBody() : this(null, null, null) { } @@ -30,6 +31,8 @@ public BlockBody() : this(null, null, null) { } public Withdrawal[]? Withdrawals { get; } - public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0; + public Deposit[]? Deposits { get; } + + public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0 && (Deposits?.Length ?? 0) == 0; } } diff --git a/src/Nethermind/Nethermind.Core/BlockHeader.cs b/src/Nethermind/Nethermind.Core/BlockHeader.cs index e337ab3c735..2a9d889a6b5 100644 --- a/src/Nethermind/Nethermind.Core/BlockHeader.cs +++ b/src/Nethermind/Nethermind.Core/BlockHeader.cs @@ -70,11 +70,13 @@ public BlockHeader( public UInt256 BaseFeePerGas { get; set; } public Hash256? WithdrawalsRoot { get; set; } public Hash256? ParentBeaconBlockRoot { get; set; } + public Hash256? DepositsRoot { get; set; } public ulong? BlobGasUsed { get; set; } public ulong? ExcessBlobGas { get; set; } public bool HasBody => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash) || (UnclesHash is not null && UnclesHash != Keccak.OfAnEmptySequenceRlp) - || (WithdrawalsRoot is not null && WithdrawalsRoot != Keccak.EmptyTreeHash); + || (WithdrawalsRoot is not null && WithdrawalsRoot != Keccak.EmptyTreeHash) + || (DepositsRoot is not null && DepositsRoot != Keccak.EmptyTreeHash); public bool HasTransactions => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash); @@ -115,7 +117,10 @@ public string ToString(string indent) } builder.AppendLine($"{indent}IsPostMerge: {IsPostMerge}"); builder.AppendLine($"{indent}TotalDifficulty: {TotalDifficulty}"); - + if (DepositsRoot is not null) + { + builder.AppendLine($"{indent}DepositsRoot: {DepositsRoot}"); + } return builder.ToString(); } diff --git a/src/Nethermind/Nethermind.Core/Deposit.cs b/src/Nethermind/Nethermind.Core/Deposit.cs new file mode 100644 index 00000000000..07442a00c2c --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Deposit.cs @@ -0,0 +1,29 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Text; +using System.Text.Json.Serialization; +using Nethermind.Core.Extensions; +using Nethermind.Int256; + +namespace Nethermind.Core; + +/// +/// Represents a Deposit that has been validated at the consensus layer. +/// +public class Deposit +{ + public byte[]? PublicKey { get; set; } + public byte[]? WithdrawalCredential { get; set; } + public ulong Amount { get; set; } + public byte[]? Signature { get; set; } + public ulong Index { get; set; } + public override string ToString() => ToString(string.Empty); + + public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(Deposit)} {{") + .Append($"{nameof(Index)}: {Index}, ") + .Append($"{nameof(WithdrawalCredential)}: {WithdrawalCredential?.ToHexString()}, ") + .Append($"{nameof(Amount)}: {Amount}, ") + .Append($"{nameof(PublicKey)}: {PublicKey?.ToHexString()}}}") + .ToString(); +} diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index f7e8519de72..380ad581032 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -273,6 +273,13 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec bool IsEip4788Enabled { get; } Address Eip4788ContractAddress { get; } + + /// + /// Parent Beacon Block precompile + /// + bool IsEip6110Enabled { get; } + Address Eip6110ContractAddress { get; } + /// /// SELFDESTRUCT only in same transaction /// diff --git a/src/Nethermind/Nethermind.Core/Withdrawal.cs b/src/Nethermind/Nethermind.Core/Withdrawal.cs index 13741586406..daaaeafb4af 100644 --- a/src/Nethermind/Nethermind.Core/Withdrawal.cs +++ b/src/Nethermind/Nethermind.Core/Withdrawal.cs @@ -45,3 +45,4 @@ public class Withdrawal .Append($"{nameof(AmountInGwei)}: {AmountInGwei}}}") .ToString(); } + diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 9f97c9e2574..260ff1e5e75 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -48,8 +48,8 @@ public AuRaMergeBlockProcessor( ) { } - protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) => + protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options, out IReleaseSpec spec) => block.IsPostMerge - ? PostMergeProcessBlock(block, blockTracer, options) - : base.ProcessBlock(block, blockTracer, options); + ? PostMergeProcessBlock(block, blockTracer, options, out spec) + : base.ProcessBlock(block, blockTracer, options, out spec); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs index d0ac5ed5ed6..25b40fcce00 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs @@ -3,14 +3,18 @@ using System; using System.Linq; +using k8s; using Nethermind.Consensus.Validators; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; using Nethermind.Core.Test.Builders; using Nethermind.Crypto; using Nethermind.Logging; using Nethermind.Merge.Plugin.InvalidChainTracker; using Nethermind.Specs; +using Nethermind.Specs.Forks; using NSubstitute; using NUnit.Framework; @@ -64,8 +68,8 @@ public void TestValidateProcessedBlock(bool baseReturnValue, bool isInvalidBlock Block block = Build.A.Block.TestObject; Block suggestedBlock = Build.A.Block.WithExtraData(new byte[] { 1 }).TestObject; TxReceipt[] txs = { }; - _baseValidator.ValidateProcessedBlock(block, txs, suggestedBlock).Returns(baseReturnValue); - _invalidBlockInterceptor.ValidateProcessedBlock(block, txs, suggestedBlock); + _baseValidator.ValidateProcessedBlock(block, txs, suggestedBlock, Prague.Instance).Returns(baseReturnValue); + _invalidBlockInterceptor.ValidateProcessedBlock(block, txs, suggestedBlock, Prague.Instance); _tracker.Received().SetChildParent(suggestedBlock.GetOrCalculateHash(), suggestedBlock.ParentHash!); if (isInvalidBlockReported) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs index e72a4ad4bd6..2c535875f4c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs @@ -3,6 +3,7 @@ using Nethermind.Consensus.Validators; using Nethermind.Core; +using Nethermind.Core.Specs; using Nethermind.Logging; namespace Nethermind.Merge.Plugin.InvalidChainTracker; @@ -77,9 +78,9 @@ public bool ValidateSuggestedBlock(Block block) return result; } - public bool ValidateProcessedBlock(Block block, TxReceipt[] receipts, Block suggestedBlock) + public bool ValidateProcessedBlock(Block block, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) { - bool result = _baseValidator.ValidateProcessedBlock(block, receipts, suggestedBlock); + bool result = _baseValidator.ValidateProcessedBlock(block, receipts, suggestedBlock, spec); if (!result) { if (_logger.IsTrace) _logger.Trace($"Intercepted a bad block {block}"); diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index 50389d91351..b68c831ce33 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -39,9 +39,9 @@ public OptimismBlockProcessor( ReceiptsTracer = new OptimismBlockReceiptTracer(opConfigHelper, stateProvider); } - protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) + protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options, out IReleaseSpec spec) { _contractRewriter?.RewriteContract(block.Header, _stateProvider); - return base.ProcessBlock(block, blockTracer, options); + return base.ProcessBlock(block, blockTracer, options, out spec); } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 54c26d93d2c..682d880da1f 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -13,6 +13,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder private readonly HeaderDecoder _headerDecoder = new(); private readonly TxDecoder _txDecoder = new(); private readonly WithdrawalDecoder _withdrawalDecoder = new(); + private readonly DepositDecoder _depositDecoder = new(); public Block? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -81,15 +82,43 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder } } + List deposits = null; + + if (rlpStream.Position != blockCheck) + { + bool lengthWasRead = true; + try + { + rlpStream.PeekNextRlpLength(); + } + catch + { + lengthWasRead = false; + } + + if (lengthWasRead) + { + int depositsLength = rlpStream.ReadSequenceLength(); + int depositsCheck = rlpStream.Position + depositsLength; + deposits = new(); + + while (rlpStream.Position < depositsCheck) + { + deposits.Add(Rlp.Decode(rlpStream)); + } + + rlpStream.Check(depositsCheck); + } + } if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) { rlpStream.Check(blockCheck); } - return new(header, transactions, uncleHeaders, withdrawals); + return new(header, transactions, uncleHeaders, withdrawals, deposits); } - private (int Total, int Txs, int Uncles, int? Withdrawals) GetContentLength(Block item, RlpBehaviors rlpBehaviors) + private (int Total, int Txs, int Uncles, int? Withdrawals, int? Deposits) GetContentLength(Block item, RlpBehaviors rlpBehaviors) { int contentLength = _headerDecoder.GetLength(item.Header, rlpBehaviors); @@ -108,7 +137,16 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder contentLength += Rlp.LengthOfSequence(withdrawalsLength.Value); } - return (contentLength, txLength, unclesLength, withdrawalsLength); + int? depositsLength = null; + if (item.Deposits is not null) + { + depositsLength = GetWithdrawalsLength(item, rlpBehaviors); + + if (depositsLength.HasValue) + contentLength += Rlp.LengthOfSequence(depositsLength.Value); + } + + return (contentLength, txLength, unclesLength, withdrawalsLength, depositsLength); } private int GetUnclesLength(Block item, RlpBehaviors rlpBehaviors) @@ -148,6 +186,21 @@ private int GetTxLength(Block item, RlpBehaviors rlpBehaviors) return withdrawalLength; } + private int? GetDepositsLength(Block item, RlpBehaviors rlpBehaviors) + { + if (item.Withdrawals is null) + return null; + + var depositsLength = 0; + + for (int i = 0, count = item.Withdrawals.Length; i < count; i++) + { + depositsLength += _depositDecoder.GetLength(item.Deposits[i], rlpBehaviors); + } + + return depositsLength; + } + public int GetLength(Block? item, RlpBehaviors rlpBehaviors) { if (item is null) @@ -207,12 +260,28 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) decoderContext.Check(withdrawalsCheck); } + List deposits = null; + + if (decoderContext.Position != blockCheck) + { + int depositsLength = decoderContext.ReadSequenceLength(); + int depositsCheck = decoderContext.Position + depositsLength; + deposits = new(); + + while (decoderContext.Position < depositsCheck) + { + deposits.Add(Rlp.Decode(ref decoderContext)); + } + + decoderContext.Check(depositsCheck); + } + if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) { decoderContext.Check(blockCheck); } - return new(header, transactions, uncleHeaders, withdrawals); + return new(header, transactions, uncleHeaders, withdrawals, deposits); } public Rlp Encode(Block? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -235,7 +304,7 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl return; } - (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength) = GetContentLength(item, rlpBehaviors); + (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength, int? depositsLength) = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.Header); stream.StartSequence(txsLength); @@ -259,6 +328,16 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl stream.Encode(item.Withdrawals[i]); } } + + if (depositsLength.HasValue) + { + stream.StartSequence(depositsLength.Value); + + for (int i = 0; i < item.Deposits.Length; i++) + { + stream.Encode(item.Deposits[i]); + } + } } public static ReceiptRecoveryBlock? DecodeToReceiptRecoveryBlock(MemoryManager? memoryManager, Memory memory, RlpBehaviors rlpBehaviors) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs new file mode 100644 index 00000000000..e6a077926d1 --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -0,0 +1,87 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; + +namespace Nethermind.Serialization.Rlp; + +public class DepositDecoder : IRlpStreamDecoder, IRlpValueDecoder +{ + public Deposit? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (rlpStream.IsNextItemNull()) + { + rlpStream.ReadByte(); + + return null; + } + + rlpStream.ReadSequenceLength(); + + return new() + { + PublicKey = rlpStream.DecodeByteArray(), + WithdrawalCredential = rlpStream.DecodeByteArray(), + Amount = rlpStream.DecodeULong(), + Signature = rlpStream.DecodeByteArray(), + Index = rlpStream.DecodeULong(), + }; + } + + public Deposit? Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (decoderContext.IsNextItemNull()) + { + decoderContext.ReadByte(); + + return null; + } + + decoderContext.ReadSequenceLength(); + + return new() + { + PublicKey = decoderContext.DecodeByteArray(), + WithdrawalCredential = decoderContext.DecodeByteArray(), + Amount = decoderContext.DecodeULong(), + Signature = decoderContext.DecodeByteArray(), + Index = decoderContext.DecodeULong(), + }; + } + + public void Encode(RlpStream stream, Deposit? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (item is null) + { + stream.EncodeNullObject(); + return; + } + + var contentLength = GetContentLength(item); + + stream.StartSequence(contentLength); + stream.Encode(item.PublicKey); + stream.Encode(item.WithdrawalCredential); + stream.Encode(item.Amount); + stream.Encode(item.Signature); + stream.Encode(item.Index); + } + + public Rlp Encode(Deposit? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + var stream = new RlpStream(GetLength(item, rlpBehaviors)); + + Encode(stream, item, rlpBehaviors); + + return new(stream.Data.ToArray()); + } + + private static int GetContentLength(Deposit item) => + Rlp.LengthOf(item.PublicKey) + + Rlp.LengthOf(item.WithdrawalCredential) + + Rlp.LengthOf(item.Amount) + + Rlp.LengthOf(item.Signature) + + Rlp.LengthOf(item.Index); + + public int GetLength(Deposit item, RlpBehaviors _) => Rlp.LengthOfSequence(GetContentLength(item)); +} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index 80e1a500525..2bc6d517876 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -85,10 +85,15 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder= 4 && decoderContext.Position != headerCheck) { blockHeader.ParentBeaconBlockRoot = decoderContext.DecodeKeccak(); } + + if (itemsRemaining == 5 && decoderContext.Position != headerCheck) + { + blockHeader.DepositsRoot = decoderContext.DecodeKeccak(); + } } @@ -172,10 +177,15 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder= 4 && rlpStream.Position != headerCheck) { blockHeader.ParentBeaconBlockRoot = rlpStream.DecodeKeccak(); } + + if (itemsRemaining == 5 && rlpStream.Position != headerCheck) + { + blockHeader.DepositsRoot = rlpStream.DecodeKeccak(); + } } if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) @@ -245,6 +255,11 @@ public void Encode(RlpStream rlpStream, BlockHeader? header, RlpBehaviors rlpBeh { rlpStream.Encode(header.ParentBeaconBlockRoot); } + + if (header.DepositsRoot is not null) + { + rlpStream.Encode(header.DepositsRoot); + } } public Rlp Encode(BlockHeader? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -286,7 +301,8 @@ private static int GetContentLength(BlockHeader? item, RlpBehaviors rlpBehaviors + (item.WithdrawalsRoot is null && item.BlobGasUsed is null && item.ExcessBlobGas is null ? 0 : Rlp.LengthOfKeccakRlp) + (item.ParentBeaconBlockRoot is null ? 0 : Rlp.LengthOfKeccakRlp) + (item.BlobGasUsed is null ? 0 : Rlp.LengthOf(item.BlobGasUsed.Value)) - + (item.ExcessBlobGas is null ? 0 : Rlp.LengthOf(item.ExcessBlobGas.Value)); + + (item.ExcessBlobGas is null ? 0 : Rlp.LengthOf(item.ExcessBlobGas.Value)) + + (item.DepositsRoot is null ? 0 : Rlp.LengthOfKeccakRlp); if (notForSealing) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs index 021f3e00e4e..9290bbf9971 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs @@ -25,6 +25,7 @@ public class RlpStream private static readonly TxDecoder _txDecoder = new(); private static readonly ReceiptMessageDecoder _receiptDecoder = new(); private static readonly WithdrawalDecoder _withdrawalDecoder = new(); + private static readonly DepositDecoder _depositDecoder = new(); private static readonly LogEntryDecoder _logEntryDecoder = LogEntryDecoder.Instance; private CappedArray _data; @@ -73,6 +74,7 @@ public void Encode(TxReceipt value) } public void Encode(Withdrawal value) => _withdrawalDecoder.Encode(this, value); + public void Encode(Deposit value) => _depositDecoder.Encode(this, value); public void Encode(LogEntry value) { diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index b36a57071d0..0713e3fab0f 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -160,5 +160,9 @@ public ulong Eip4844TransitionTimestamp public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; public long ElasticityMultiplier => _spec.ElasticityMultiplier; + + public bool IsEip6110Enabled => _spec.IsEip6110Enabled; + + public Address Eip6110ContractAddress => _spec.Eip6110ContractAddress; } } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs index 817250bc01e..7cd8e29c529 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs @@ -117,6 +117,8 @@ public class ChainParameters public ulong? Eip6780TransitionTimestamp { get; set; } public ulong? Eip4788TransitionTimestamp { get; set; } public Address Eip4788ContractAddress { get; set; } + public ulong? Eip6110TransitionTimestamp { get; set; } + public Address Eip6110ContractAddress { get; set; } #region EIP-4844 parameters /// diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index 7aad4bac04f..e8a89aca242 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -252,6 +252,9 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; + releaseSpec.IsEip6110Enabled = (chainSpec.Parameters.Eip6110TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; + releaseSpec.Eip6110ContractAddress = chainSpec.Parameters.Eip6110ContractAddress; + return releaseSpec; } diff --git a/src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs b/src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs new file mode 100644 index 00000000000..0cffcbd6e5e --- /dev/null +++ b/src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Threading; +using Nethermind.Core; +using Nethermind.Core.Specs; + +namespace Nethermind.Specs.Forks; + +public class Prague : Cancun +{ + private static IReleaseSpec _instance; + + protected Prague() + { + Name = "Cancun"; + IsEip6110Enabled = true; + } + + public new static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Prague()); +} diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index 5de83c8356b..0692b21a146 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -91,5 +91,14 @@ public Address Eip4788ContractAddress get => IsEip4788Enabled ? _eip4788ContractAddress : null; set => _eip4788ContractAddress = value; } + + public bool IsEip6110Enabled { get; set; } + + private Address _eip6110ContractAddress; + public Address Eip6110ContractAddress + { + get => IsEip6110Enabled ? _eip6110ContractAddress : null; + set => _eip6110ContractAddress = value; + } } } diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index 8774d7a03ae..572e223652d 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -133,5 +133,9 @@ public bool IsEip158IgnoredAccount(Address address) public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; public long ElasticityMultiplier => _spec.ElasticityMultiplier; + + public bool IsEip6110Enabled => _spec.IsEip6110Enabled; + + public Address Eip6110ContractAddress => _spec.Eip6110ContractAddress; } } diff --git a/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs b/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs new file mode 100644 index 00000000000..ad40fb79b37 --- /dev/null +++ b/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Serialization.Rlp; +using Nethermind.State.Trie; + +namespace Nethermind.State.Proofs; + +/// +/// Represents a Patricia trie built of a collection of . +/// +public class DepositTrie : PatriciaTrie +{ + private static readonly DepositDecoder _codec = new(); + + /// + /// The Deposits to build the trie of. + public DepositTrie(IEnumerable Deposits, bool canBuildProof = false) + : base(Deposits, canBuildProof) => ArgumentNullException.ThrowIfNull(Deposits); + + protected override void Initialize(IEnumerable Deposits) + { + var key = 0; + + foreach (var Deposit in Deposits) + { + Set(Rlp.Encode(key++).Bytes, _codec.Encode(Deposit).Bytes); + } + } +} diff --git a/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs index b6bb46fef53..de79c7f7e9f 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs @@ -468,7 +468,7 @@ public bool ValidateSuggestedBlock(Block block) return true; } - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) { Thread.Sleep(1000); return true; From c541cb1a865a3f260eb453c342401f283f6537e8 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Mon, 5 Feb 2024 00:50:09 +0100 Subject: [PATCH 069/551] fix merge issue --- .../Nethermind.Consensus/Validators/BlockValidator.cs | 2 +- src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index db8830ff606..eb98447dcd3 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -199,7 +199,7 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B } } Hash256 expectedDepositsRoot = new DepositTrie(suggestedBlock.Deposits).RootHash; - Hash256 actualDepositsRoot = new DepositTrie(depositList).RootHash; + Hash256 actualDepositsRoot = new DepositTrie(depositList.ToArray()).RootHash; if(actualDepositsRoot != expectedDepositsRoot) { diff --git a/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs b/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs index ad40fb79b37..175c37d0a03 100644 --- a/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs @@ -18,10 +18,10 @@ public class DepositTrie : PatriciaTrie /// /// The Deposits to build the trie of. - public DepositTrie(IEnumerable Deposits, bool canBuildProof = false) + public DepositTrie(Deposit[] Deposits, bool canBuildProof = false) : base(Deposits, canBuildProof) => ArgumentNullException.ThrowIfNull(Deposits); - protected override void Initialize(IEnumerable Deposits) + protected override void Initialize(Deposit[] Deposits) { var key = 0; From b9d03c4c6dfe12a9edc7d590da36e3297aa6814c Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Mon, 5 Feb 2024 01:26:18 +0100 Subject: [PATCH 070/551] - fix NullPtrException in BlockProcessing --- .../Validators/BlockValidator.cs | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index eb98447dcd3..9111a7579b0 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -185,26 +185,29 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B } } - List depositList = new List(capacity: processedBlock.Transactions.Length); - for (int i = 0; i < processedBlock.Transactions.Length; i++) + if (suggestedBlock.Deposits is not null) { - foreach(var log in receipts[i].Logs) + List depositList = new List(); + for (int i = 0; i < processedBlock.Transactions.Length; i++) { - if(log.LoggersAddress == spec.Eip6110ContractAddress) + foreach (var log in receipts[i].Logs) { - var depositDecoder = new DepositDecoder(); - Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); - depositList.Add(deposit); + if (log.LoggersAddress == spec.Eip6110ContractAddress) + { + var depositDecoder = new DepositDecoder(); + Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); + depositList.Add(deposit); + } } } + Hash256 expectedDepositsRoot = new DepositTrie(suggestedBlock.Deposits).RootHash; + Hash256 actualDepositsRoot = new DepositTrie(depositList.ToArray()).RootHash; + if (actualDepositsRoot != expectedDepositsRoot) + { + _logger.Error($"- deposits root : expected {expectedDepositsRoot}, got {actualDepositsRoot}"); + } } - Hash256 expectedDepositsRoot = new DepositTrie(suggestedBlock.Deposits).RootHash; - Hash256 actualDepositsRoot = new DepositTrie(depositList.ToArray()).RootHash; - if(actualDepositsRoot != expectedDepositsRoot) - { - _logger.Error($"- deposits root : expected {expectedDepositsRoot}, got {actualDepositsRoot}"); - } if (suggestedBlock.ExtraData is not null) { From dfc79d6b4ac9c5f467ac816b01f3adbff88ea380 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Mon, 5 Feb 2024 01:41:07 +0100 Subject: [PATCH 071/551] add missing fields to ChainSpecJson --- .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 3 +++ .../ChainSpecStyle/Json/ChainSpecParamsJson.cs | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index b75e1351b05..b217c1fd6a5 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -161,6 +161,9 @@ bool GetForInnerPathExistence(KeyValuePair o) Eip1559BaseFeeInitialValue = chainSpecJson.Params.Eip1559BaseFeeInitialValue ?? Eip1559Constants.DefaultForkBaseFee, Eip1559BaseFeeMaxChangeDenominator = chainSpecJson.Params.Eip1559BaseFeeMaxChangeDenominator ?? Eip1559Constants.DefaultBaseFeeMaxChangeDenominator, + + Eip6110TransitionTimestamp = chainSpecJson.Params.Eip6110TransitionTimestamp, + Eip6110ContractAddress = chainSpecJson.Params.Eip6110ContractAddress, Eip1559FeeCollector = chainSpecJson.Params.Eip1559FeeCollector, Eip1559FeeCollectorTransition = chainSpecJson.Params.Eip1559FeeCollectorTransition, Eip1559BaseFeeMinValueTransition = chainSpecJson.Params.Eip1559BaseFeeMinValueTransition, diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs index 5f22e8e6a85..c14a113d1a1 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs @@ -145,4 +145,6 @@ internal class ChainSpecParamsJson public ulong? Eip4844MaxBlobGasPerBlock { get; set; } public UInt256? Eip4844MinBlobGasPrice { get; set; } public ulong? Eip4844TargetBlobGasPerBlock { get; set; } + public ulong? Eip6110TransitionTimestamp { get; set; } + public Address Eip6110ContractAddress { get; set; } } From 45e0c441681d2dc61a87e339c51fad253e0cd89d Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Mon, 5 Feb 2024 21:27:35 +0100 Subject: [PATCH 072/551] - added new fields to Builder api --- .../Builders/BlockBuilder.cs | 29 +++++++++++++++++++ src/Nethermind/Nethermind.Core/BlockBody.cs | 7 +++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index ea6fafff77e..e8faaca778f 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -214,6 +214,13 @@ public BlockBuilder WithWithdrawalsRoot(Hash256? withdrawalsRoot) return this; } + public BlockBuilder WithDepositRoot(Hash256? depositsRoot) + { + TestObjectInternal.Header.DepositsRoot = depositsRoot; + + return this; + } + public BlockBuilder WithBloom(Bloom bloom) { TestObjectInternal.Header.Bloom = bloom; @@ -275,6 +282,28 @@ public BlockBuilder WithWithdrawals(params Withdrawal[]? withdrawals) return this; } + public BlockBuilder WithDeposits(int count) + { + var deposits = new Deposit[count]; + + for (var i = 0; i < count; i++) + deposits[i] = new(); + + return WithDeposits(deposits); + } + + public BlockBuilder WithDeposits(params Deposit[]? deposits) + { + TestObjectInternal = TestObjectInternal + .WithReplacedBody(TestObjectInternal.Body.WithChangedDeposits(deposits)); + + TestObjectInternal.Header.DepositsRoot = deposits is null + ? null + : new DepositTrie(deposits).RootHash; + + return this; + } + public BlockBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRoot) { TestObjectInternal.Header.ParentBeaconBlockRoot = parentBeaconBlockRoot; diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 32631436e0e..97977501b71 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -17,11 +17,12 @@ public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[ public BlockBody() : this(null, null, null) { } - public BlockBody WithChangedTransactions(Transaction[] transactions) => new(transactions, Uncles, Withdrawals); + public BlockBody WithChangedTransactions(Transaction[] transactions) => new(transactions, Uncles, Withdrawals, Deposits); - public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals); + public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals, Deposits); - public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals); + public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals, Deposits); + public BlockBody WithChangedDeposits(Deposit[]? deposits) => new(Transactions, Uncles, Withdrawals, deposits); public static BlockBody WithOneTransactionOnly(Transaction tx) => new(new[] { tx }, null, null); From c336a0f124d3cf4c0442bbdd98cb2cf77334e68f Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 6 Feb 2024 16:48:36 +0100 Subject: [PATCH 073/551] - revert ReleaseSpec creeping out + add missing checks --- .../Validators/TestBlockValidator.cs | 11 +++++------ .../AuRaBlockProcessor.cs | 8 ++++---- .../Processing/BlockProcessor.cs | 13 ++++++------- .../Nethermind.Consensus/Validators/AlwaysValid.cs | 10 +++++----- .../Validators/BlockValidator.cs | 14 +++++++++----- .../Validators/IBlockValidator.cs | 2 +- .../Validators/NeverValidBlockValidator.cs | 9 ++++----- .../Builders/BlockValidatorBuilder.cs | 2 +- .../AuRaMergeBlockProcessor.cs | 6 +++--- .../InvalidBlockInterceptorTest.cs | 4 ++-- .../InvalidChainTracker/InvalidBlockInterceptor.cs | 5 ++--- .../Nethermind.Optimism/OptimismBlockProcessor.cs | 4 ++-- .../BlockDownloaderTests.cs | 2 +- 13 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TestBlockValidator.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TestBlockValidator.cs index 6bd5cf0fbc1..6edc6277341 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TestBlockValidator.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TestBlockValidator.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using Nethermind.Consensus.Validators; using Nethermind.Core; -using Nethermind.Core.Specs; namespace Nethermind.Blockchain.Test.Validators; @@ -45,6 +44,11 @@ public bool ValidateSuggestedBlock(Block block) return _alwaysSameResultForSuggested ?? _suggestedValidationResults.Dequeue(); } + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) + { + return _alwaysSameResultForProcessed ?? _processedValidationResults.Dequeue(); + } + public bool ValidateWithdrawals(Block block, out string? error) { error = null; @@ -57,9 +61,4 @@ public bool ValidateOrphanedBlock(Block block, out string? error) error = null; return _alwaysSameResultForSuggested ?? _suggestedValidationResults.Dequeue(); } - - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) - { - return _alwaysSameResultForProcessed ?? _processedValidationResults.Dequeue(); - } } diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 44013ce1ab5..1c4c5b44b22 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -73,21 +73,21 @@ public IAuRaValidator AuRaValidator set => _auRaValidator = value; } - protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options, out IReleaseSpec spec) + protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) { ValidateAuRa(block); _contractRewriter?.RewriteContracts(block.Number, _stateProvider, _specProvider.GetSpec(block.Header)); AuRaValidator.OnBlockProcessingStart(block, options); - TxReceipt[] receipts = base.ProcessBlock(block, blockTracer, options, out spec); + TxReceipt[] receipts = base.ProcessBlock(block, blockTracer, options); AuRaValidator.OnBlockProcessingEnd(block, receipts, options); Metrics.AuRaStep = block.Header?.AuRaStep ?? 0; return receipts; } // After PoS switch we need to revert to standard block processing, ignoring AuRa customizations - protected TxReceipt[] PostMergeProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options, out IReleaseSpec spec) + protected TxReceipt[] PostMergeProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) { - return base.ProcessBlock(block, blockTracer, options, out spec); + return base.ProcessBlock(block, blockTracer, options); } // This validations cannot be run in AuraSealValidator because they are dependent on state. diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 0801ac86b6c..19b39a8b241 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -200,8 +200,8 @@ private void RestoreBranch(Hash256 branchingPointStateRoot) ApplyDaoTransition(suggestedBlock); Block block = PrepareBlockForProcessing(suggestedBlock); - TxReceipt[] receipts = ProcessBlock(block, blockTracer, options, out IReleaseSpec spec); - ValidateProcessedBlock(suggestedBlock, options, block, receipts, spec); + TxReceipt[] receipts = ProcessBlock(block, blockTracer, options); + ValidateProcessedBlock(suggestedBlock, options, block, receipts); if (options.ContainsFlag(ProcessingOptions.StoreReceipts)) { StoreTxReceipts(block, receipts); @@ -211,9 +211,9 @@ private void RestoreBranch(Hash256 branchingPointStateRoot) } // TODO: block processor pipeline - private void ValidateProcessedBlock(Block suggestedBlock, ProcessingOptions options, Block block, TxReceipt[] receipts, IReleaseSpec spec) + private void ValidateProcessedBlock(Block suggestedBlock, ProcessingOptions options, Block block, TxReceipt[] receipts) { - if (!options.ContainsFlag(ProcessingOptions.NoValidation) && !_blockValidator.ValidateProcessedBlock(block, receipts, suggestedBlock, spec)) + if (!options.ContainsFlag(ProcessingOptions.NoValidation) && !_blockValidator.ValidateProcessedBlock(block, receipts, suggestedBlock)) { if (_logger.IsError) _logger.Error($"Processed block is not valid {suggestedBlock.ToString(Block.Format.FullHashAndNumber)}"); if (_logger.IsError) _logger.Error($"Suggested block TD: {suggestedBlock.TotalDifficulty}, Suggested block IsPostMerge {suggestedBlock.IsPostMerge}, Block TD: {block.TotalDifficulty}, Block IsPostMerge {block.IsPostMerge}"); @@ -228,10 +228,9 @@ private bool ShouldComputeStateRoot(BlockHeader header) => protected virtual TxReceipt[] ProcessBlock( Block block, IBlockTracer blockTracer, - ProcessingOptions options, - out IReleaseSpec spec) + ProcessingOptions options) { - spec = _specProvider.GetSpec(block.Header); + IReleaseSpec spec = _specProvider.GetSpec(block.Header); ReceiptsTracer.SetOtherTracer(blockTracer); ReceiptsTracer.StartNewBlockTrace(block); diff --git a/src/Nethermind/Nethermind.Consensus/Validators/AlwaysValid.cs b/src/Nethermind/Nethermind.Consensus/Validators/AlwaysValid.cs index 90e409527bd..be60c6375dc 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/AlwaysValid.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/AlwaysValid.cs @@ -49,6 +49,11 @@ public bool ValidateSuggestedBlock(Block block) return _result; } + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) + { + return _result; + } + public bool ValidateParams(BlockHeader parent, BlockHeader header, bool isUncle = false) { return _result; @@ -81,9 +86,4 @@ public bool ValidateOrphanedBlock(Block block, out string? error) error = null; return _result; } - - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) - { - return _result; - } } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 9111a7579b0..bb650de0b75 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -134,8 +134,10 @@ public bool ValidateSuggestedBlock(Block block) /// List of tx receipts from the processed block (required only for better diagnostics when the receipt root is invalid). /// Block received from the network - unchanged. /// true if the is valid; otherwise, false. - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) { + IReleaseSpec spec = _specProvider.GetSpec(processedBlock.Header); + bool isValid = processedBlock.Header.Hash == suggestedBlock.Header.Hash; if (!isValid && _logger.IsError) { @@ -187,7 +189,8 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B if (suggestedBlock.Deposits is not null) { - List depositList = new List(); + Deposit[] depositList = new Deposit[suggestedBlock.Deposits.Length]; + int depositCount = 0; for (int i = 0; i < processedBlock.Transactions.Length; i++) { foreach (var log in receipts[i].Logs) @@ -196,11 +199,11 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B { var depositDecoder = new DepositDecoder(); Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); - depositList.Add(deposit); + depositList[depositCount++] = deposit; } } } - Hash256 expectedDepositsRoot = new DepositTrie(suggestedBlock.Deposits).RootHash; + Hash256 expectedDepositsRoot = suggestedBlock.Header.DepositsRoot; Hash256 actualDepositsRoot = new DepositTrie(depositList.ToArray()).RootHash; if (actualDepositsRoot != expectedDepositsRoot) { @@ -378,7 +381,8 @@ private bool ValidateEip4844Fields(Block block, IReleaseSpec spec, out string? e public static bool ValidateBodyAgainstHeader(BlockHeader header, BlockBody toBeValidated) => ValidateTxRootMatchesTxs(header, toBeValidated, out _) && ValidateUnclesHashMatches(header, toBeValidated, out _) && - ValidateWithdrawalsHashMatches(header, toBeValidated, out _); + ValidateWithdrawalsHashMatches(header, toBeValidated, out _) && + ValidateDepositsHashMatches(header, toBeValidated, out _); public static bool ValidateTxRootMatchesTxs(Block block, out Hash256 txRoot) { diff --git a/src/Nethermind/Nethermind.Consensus/Validators/IBlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/IBlockValidator.cs index a03663a9ba7..069f2a17cee 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/IBlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/IBlockValidator.cs @@ -12,6 +12,6 @@ public interface IBlockValidator : IHeaderValidator, IWithdrawalValidator bool ValidateSuggestedBlock(Block block); - bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec); + bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock); } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/NeverValidBlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/NeverValidBlockValidator.cs index bd4d90d8fc8..233119ae23f 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/NeverValidBlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/NeverValidBlockValidator.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; -using Nethermind.Core.Specs; namespace Nethermind.Consensus.Validators { @@ -28,20 +27,20 @@ public bool ValidateSuggestedBlock(Block block) return false; } - public bool ValidateWithdrawals(Block block, out string? error) + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) { - error = null; return false; } - public bool ValidateOrphanedBlock(Block block, out string? error) + public bool ValidateWithdrawals(Block block, out string? error) { error = null; return false; } - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) + public bool ValidateOrphanedBlock(Block block, out string? error) { + error = null; return false; } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockValidatorBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockValidatorBuilder.cs index 6acb14b9099..1b70e6bcd41 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockValidatorBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockValidatorBuilder.cs @@ -37,7 +37,7 @@ public BlockValidatorBuilder ThatAlwaysReturnsTrue protected override void BeforeReturn() { TestObjectInternal.ValidateSuggestedBlock(Arg.Any()).Returns(_alwaysTrue); - TestObjectInternal.ValidateProcessedBlock(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()).Returns(_alwaysTrue); + TestObjectInternal.ValidateProcessedBlock(Arg.Any(), Arg.Any(), Arg.Any()).Returns(_alwaysTrue); base.BeforeReturn(); } } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 260ff1e5e75..9f97c9e2574 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -48,8 +48,8 @@ public AuRaMergeBlockProcessor( ) { } - protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options, out IReleaseSpec spec) => + protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) => block.IsPostMerge - ? PostMergeProcessBlock(block, blockTracer, options, out spec) - : base.ProcessBlock(block, blockTracer, options, out spec); + ? PostMergeProcessBlock(block, blockTracer, options) + : base.ProcessBlock(block, blockTracer, options); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs index 25b40fcce00..f324aceea4a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs @@ -68,8 +68,8 @@ public void TestValidateProcessedBlock(bool baseReturnValue, bool isInvalidBlock Block block = Build.A.Block.TestObject; Block suggestedBlock = Build.A.Block.WithExtraData(new byte[] { 1 }).TestObject; TxReceipt[] txs = { }; - _baseValidator.ValidateProcessedBlock(block, txs, suggestedBlock, Prague.Instance).Returns(baseReturnValue); - _invalidBlockInterceptor.ValidateProcessedBlock(block, txs, suggestedBlock, Prague.Instance); + _baseValidator.ValidateProcessedBlock(block, txs, suggestedBlock).Returns(baseReturnValue); + _invalidBlockInterceptor.ValidateProcessedBlock(block, txs, suggestedBlock); _tracker.Received().SetChildParent(suggestedBlock.GetOrCalculateHash(), suggestedBlock.ParentHash!); if (isInvalidBlockReported) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs index 2c535875f4c..e72a4ad4bd6 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs @@ -3,7 +3,6 @@ using Nethermind.Consensus.Validators; using Nethermind.Core; -using Nethermind.Core.Specs; using Nethermind.Logging; namespace Nethermind.Merge.Plugin.InvalidChainTracker; @@ -78,9 +77,9 @@ public bool ValidateSuggestedBlock(Block block) return result; } - public bool ValidateProcessedBlock(Block block, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) + public bool ValidateProcessedBlock(Block block, TxReceipt[] receipts, Block suggestedBlock) { - bool result = _baseValidator.ValidateProcessedBlock(block, receipts, suggestedBlock, spec); + bool result = _baseValidator.ValidateProcessedBlock(block, receipts, suggestedBlock); if (!result) { if (_logger.IsTrace) _logger.Trace($"Intercepted a bad block {block}"); diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index d9d1cb4eaa8..495debee1c5 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -40,9 +40,9 @@ public OptimismBlockProcessor( ReceiptsTracer = new OptimismBlockReceiptTracer(opConfigHelper, stateProvider); } - protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options, out IReleaseSpec spec) + protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) { _contractRewriter?.RewriteContract(block.Header, _stateProvider); - return base.ProcessBlock(block, blockTracer, options, out spec); + return base.ProcessBlock(block, blockTracer, options); } } diff --git a/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs index d110fbc5519..4abc1531674 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs @@ -469,7 +469,7 @@ public bool ValidateSuggestedBlock(Block block) return true; } - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, IReleaseSpec spec) + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) { Thread.Sleep(1000); return true; From f3271b2b9d97a00631c29cefa029c82992990366 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 7 Feb 2024 10:51:33 +0100 Subject: [PATCH 074/551] Ammended PayloadAttribute and ExecutionPayload with new Deposits field --- .../Nethermind.Consensus/EngineApiVersions.cs | 1 + .../Producers/PayloadAttributes.cs | 31 +++++++++++++- .../Validators/BlockValidator.cs | 2 +- .../Data/ExecutionPayload.cs | 33 +++++++++++---- .../Data/ExecutionPayloadV3.cs | 9 ++++ .../Data/ExecutionPayloadV4.cs | 41 +++++++++++++++++++ 6 files changed, 107 insertions(+), 10 deletions(-) create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs diff --git a/src/Nethermind/Nethermind.Consensus/EngineApiVersions.cs b/src/Nethermind/Nethermind.Consensus/EngineApiVersions.cs index 598c8784907..145810a7364 100644 --- a/src/Nethermind/Nethermind.Consensus/EngineApiVersions.cs +++ b/src/Nethermind/Nethermind.Consensus/EngineApiVersions.cs @@ -8,4 +8,5 @@ public static class EngineApiVersions public const int Paris = 1; public const int Shanghai = 2; public const int Cancun = 3; + public const int Prague = 4; } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs index ef241a5b196..d21245cd03b 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs @@ -26,6 +26,8 @@ public class PayloadAttributes public Withdrawal[]? Withdrawals { get; set; } + public Deposit[]? Deposits { get; set; } + public Hash256? ParentBeaconBlockRoot { get; set; } public virtual long? GetGasLimit() => null; @@ -44,6 +46,11 @@ public string ToString(string indentation) sb.Append($", {nameof(Withdrawals)} count: {Withdrawals.Length}"); } + if (Deposits is not null) + { + sb.Append($", {nameof(Deposits)} count: {Deposits.Length}"); + } + if (ParentBeaconBlockRoot is not null) { sb.Append($", {nameof(ParentBeaconBlockRoot)} : {ParentBeaconBlockRoot}"); @@ -72,7 +79,8 @@ protected virtual int ComputePayloadIdMembersSize() => + sizeof(ulong) // timestamp + Keccak.Size // prev randao + Address.Size // suggested fee recipient - + (Withdrawals is null ? 0 : Keccak.Size) // withdrawals root hash + + (Withdrawals is null ? 0 : Keccak.Size) // deposits root hash + + (Deposits is null ? 0 : Keccak.Size) // withdrawals root hash + (ParentBeaconBlockRoot is null ? 0 : Keccak.Size); // parent beacon block root protected static string ComputePayloadId(Span inputSpan) @@ -112,6 +120,15 @@ protected virtual int WritePayloadIdMembers(BlockHeader parentHeader, Span position += Keccak.Size; } + if (Deposits is not null) + { + Hash256 depositsRootHash = Deposits.Length == 0 + ? PatriciaTree.EmptyTreeHash + : new DepositTrie(Deposits).RootHash; + depositsRootHash.Bytes.CopyTo(inputSpan.Slice(position, Keccak.Size)); + position += Keccak.Size; + } + return position; } @@ -122,7 +139,7 @@ private static PayloadAttributesValidationResult ValidateVersion( string methodName, [NotNullWhen(false)] out string? error) { - if (apiVersion >= EngineApiVersions.Cancun) + if (apiVersion >= EngineApiVersions.Prague) { if (actualVersion == apiVersion && expectedVersion != apiVersion) { @@ -130,6 +147,14 @@ private static PayloadAttributesValidationResult ValidateVersion( return PayloadAttributesValidationResult.UnsupportedFork; } } + else if (apiVersion >= EngineApiVersions.Cancun) + { + if (actualVersion == apiVersion && expectedVersion >= EngineApiVersions.Prague) + { + error = $"{methodName}{expectedVersion} expected"; + return PayloadAttributesValidationResult.UnsupportedFork; + } + } else if (apiVersion == EngineApiVersions.Shanghai) { if (actualVersion == apiVersion && expectedVersion >= EngineApiVersions.Cancun) @@ -183,6 +208,7 @@ public static class PayloadAttributesExtensions public static int GetVersion(this PayloadAttributes executionPayload) => executionPayload switch { + { Deposits: not null } => EngineApiVersions.Prague, { ParentBeaconBlockRoot: not null, Withdrawals: not null } => EngineApiVersions.Cancun, { Withdrawals: not null } => EngineApiVersions.Shanghai, _ => EngineApiVersions.Paris @@ -191,6 +217,7 @@ public static int GetVersion(this PayloadAttributes executionPayload) => public static int ExpectedEngineSpecVersion(this IReleaseSpec spec) => spec switch { + { IsEip6110Enabled: true } => EngineApiVersions.Prague, { IsEip4844Enabled: true } => EngineApiVersions.Cancun, { WithdrawalsEnabled: true } => EngineApiVersions.Shanghai, _ => EngineApiVersions.Paris diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index bb650de0b75..6813d1ef2a9 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -204,7 +204,7 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B } } Hash256 expectedDepositsRoot = suggestedBlock.Header.DepositsRoot; - Hash256 actualDepositsRoot = new DepositTrie(depositList.ToArray()).RootHash; + Hash256 actualDepositsRoot = new DepositTrie(depositList).RootHash; if (actualDepositsRoot != expectedDepositsRoot) { _logger.Error($"- deposits root : expected {expectedDepositsRoot}, got {actualDepositsRoot}"); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index 3b3e8c41c1a..0c4ca463f72 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -92,6 +92,13 @@ public byte[][] Transactions public Withdrawal[]? Withdrawals { get; set; } + /// + /// Gets or sets a collection of as defined in + /// EIP-6110. + /// + public virtual Deposit[]? Deposits { get; set; } + + /// /// Gets or sets as defined in /// EIP-4844. @@ -111,7 +118,7 @@ public byte[][] Transactions /// EIP-4788. /// [JsonIgnore] - public Hash256? ParentBeaconBlockRoot { get; set; } + public virtual Hash256? ParentBeaconBlockRoot { get; set; } /// /// Creates the execution block from payload. @@ -149,7 +156,7 @@ public virtual bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nul WithdrawalsRoot = Withdrawals is null ? null : new WithdrawalTrie(Withdrawals).RootHash, }; - block = new(header, transactions, Array.Empty(), Withdrawals); + block = new(header, transactions, Array.Empty(), Withdrawals, Deposits); return true; } @@ -203,12 +210,13 @@ public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, o return ValidationResult.Fail; } - int actualVersion = this switch + if (spec.IsEip6110Enabled) { - { BlobGasUsed: not null } or { ExcessBlobGas: not null } or { ParentBeaconBlockRoot: not null } => 3, - { Withdrawals: not null } => 2, - _ => 1 - }; + error = "ExecutionPayloadV4 expected"; + return ValidationResult.Fail; + } + + var actualVersion = GetExecutionPayloadVersion(); error = actualVersion switch { @@ -220,6 +228,17 @@ public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, o return error is null ? ValidationResult.Success : ValidationResult.Fail; } + private int GetExecutionPayloadVersion() + { + return this switch + { + { Deposits: not null } => 4, + { BlobGasUsed: not null } or { ExcessBlobGas: not null } or { ParentBeaconBlockRoot: not null } => 3, + { Withdrawals: not null } => 2, + _ => 1 + }; + } + public virtual bool ValidateFork(ISpecProvider specProvider) => !specProvider.GetSpec(BlockNumber, Timestamp).IsEip4844Enabled; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs index ff236bab63d..0cb1a84c1fe 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs @@ -3,6 +3,7 @@ using System.Text.Json.Serialization; using Nethermind.Core; +using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Int256; @@ -51,4 +52,12 @@ public override bool ValidateFork(ISpecProvider specProvider) => /// [JsonRequired] public override ulong? ExcessBlobGas { get; set; } + + + /// + /// Gets or sets as defined in + /// EIP-4788. + /// + [JsonRequired] + public override Hash256? ParentBeaconBlockRoot { get; set; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs new file mode 100644 index 00000000000..eb1fb4a9bea --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -0,0 +1,41 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Text.Json.Serialization; +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.Int256; +using Nethermind.State.Proofs; + +namespace Nethermind.Merge.Plugin.Data; + +/// +/// Represents an object mapping the ExecutionPayloadV4 structure of the beacon chain spec. +/// +public class ExecutionPayloadV4 : ExecutionPayload +{ + public ExecutionPayloadV4() { } // Needed for tests + + public ExecutionPayloadV4(Block block) : base(block) + { + Deposits = block.Deposits; + } + + public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = null) + { + if (!base.TryGetBlock(out block, totalDifficulty)) + { + return false; + } + + block!.Header.DepositsRoot = Deposits is null ? null : new DepositTrie(Deposits).RootHash; + return true; + } + + public override bool ValidateFork(ISpecProvider specProvider) => + specProvider.GetSpec(BlockNumber, Timestamp).IsEip6110Enabled; + + /// + [JsonRequired] + public override Deposit[]? Deposits { get; set; } +} From e5c7ed0e566e19b8831db27254af72f6105142c8 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 7 Feb 2024 11:38:06 +0100 Subject: [PATCH 075/551] fix erroneous change --- .../Producers/PayloadAttributes.cs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs index d21245cd03b..1e09af1581c 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs @@ -139,7 +139,7 @@ private static PayloadAttributesValidationResult ValidateVersion( string methodName, [NotNullWhen(false)] out string? error) { - if (apiVersion >= EngineApiVersions.Prague) + if (apiVersion >= EngineApiVersions.Cancun) { if (actualVersion == apiVersion && expectedVersion != apiVersion) { @@ -147,14 +147,6 @@ private static PayloadAttributesValidationResult ValidateVersion( return PayloadAttributesValidationResult.UnsupportedFork; } } - else if (apiVersion >= EngineApiVersions.Cancun) - { - if (actualVersion == apiVersion && expectedVersion >= EngineApiVersions.Prague) - { - error = $"{methodName}{expectedVersion} expected"; - return PayloadAttributesValidationResult.UnsupportedFork; - } - } else if (apiVersion == EngineApiVersions.Shanghai) { if (actualVersion == apiVersion && expectedVersion >= EngineApiVersions.Cancun) From 9fa73bfc245e52aa32a0de3f20ca7e1063e2c27f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Chodo=C5=82a?= <43241881+kamilchodola@users.noreply.github.com> Date: Thu, 29 Feb 2024 17:17:19 +0100 Subject: [PATCH 076/551] Perf/somepath hashdb (#6798) Co-authored-by: Amirul Ashraf Co-authored-by: Ben Adams --- .../Ethereum.Trie.Test/StorageTrieTests.cs | 12 +- .../Nethermind.Api/IApiWithBlockchain.cs | 2 + src/Nethermind/Nethermind.Api/IInitConfig.cs | 4 + src/Nethermind/Nethermind.Api/InitConfig.cs | 2 + .../Nethermind.Api/NethermindApi.cs | 3 +- .../Store/PatriciaTreeBenchmarks.cs | 68 +++ .../FullPruning/CopyTreeVisitorTests.cs | 33 +- .../FullPruning/FullPrunerTests.cs | 118 +++- .../FullPruning/FullPruningDiskTest.cs | 38 +- .../Proofs/ReceiptTrieTests.cs | 2 +- .../FullPruning/CopyTreeVisitor.cs | 33 +- .../FullPruning/FullPruner.cs | 42 +- .../PruningTriggerPersistenceStrategy.cs | 2 + .../Synchronization/ISyncConfig.cs | 2 +- .../Synchronization/SyncConfig.cs | 2 +- .../Blockchain/TestBlockchain.cs | 6 +- .../Builders/Build.Trie.cs | 5 +- .../Builders/TestItem.Tree.cs | 8 +- .../Builders/TrieBuilder.cs | 5 +- src/Nethermind/Nethermind.Core/Address.cs | 2 + .../Nethermind.Core/IKeyValueStore.cs | 6 +- .../Nethermind.Db.Rocks/Config/DbConfig.cs | 44 +- .../Nethermind.Db.Rocks/Config/IDbConfig.cs | 8 + .../Config/PerTableDbConfig.cs | 5 + .../Nethermind.Db.Rocks/DbOnTheRocks.cs | 126 +++- .../Nethermind.Db/IPruningConfig.cs | 3 + src/Nethermind/Nethermind.Db/MemDb.cs | 5 + src/Nethermind/Nethermind.Db/PruningConfig.cs | 1 + .../Nethermind.Init/InitializeStateDb.cs | 34 +- .../Nethermind.Init/MemoryHintMan.cs | 185 +----- .../Nethermind.Init/Steps/InitDatabase.cs | 4 + .../Steps/InitializeNetwork.cs | 1 + .../Eip1186/ProofConverterTests.cs | 4 +- .../Nethermind.Merge.Plugin/MergePlugin.cs | 1 + .../Synchronization/MergeSynchronizer.cs | 3 + .../Nethermind.Optimism/OptimismPlugin.cs | 1 + .../Ethereum/ContextWithMocks.cs | 2 + .../MemoryHintManTests.cs | 45 +- .../ValueRlpStream.cs | 16 +- .../Nethermind.State.Test/NodeTests.cs | 53 +- .../PatriciaTreeTests.cs | 4 +- .../Proofs/AccountProofCollectorTests.cs | 22 +- .../RecreateStateFromAccountRangesTests.cs | 32 +- .../RecreateStateFromStorageRangesTests.cs | 46 +- .../Nethermind.State.Test/StateTreeTests.cs | 62 +- .../StatsCollectorTests.cs | 21 +- .../Nethermind.State/IStateReader.cs | 3 +- .../Nethermind.State/IStorageTreeFactory.cs | 2 +- .../PersistentStorageProvider.cs | 6 +- .../Nethermind.State/Proofs/ProofVerifier.cs | 3 +- .../Nethermind.State/StateProvider.cs | 2 +- .../Nethermind.State/StateReader.cs | 14 +- src/Nethermind/Nethermind.State/StateTree.cs | 7 +- .../Nethermind.State/StorageTree.cs | 7 +- src/Nethermind/Nethermind.State/WorldState.cs | 4 +- .../FastSync/StateSyncFeedHealingTests.cs | 3 +- .../FastSync/StateSyncFeedTests.cs | 27 +- .../FastSync/StateSyncFeedTestsBase.cs | 27 +- .../OldStyleFullSynchronizerTests.cs | 7 +- .../RangeQueryVisitorTests.cs | 1 + .../RecreateStateFromAccountRangesTests.cs | 41 +- .../RecreateStateFromStorageRangesTests.cs | 48 +- .../SnapSync/SnapServerTest.cs | 19 +- .../SyncProgressResolverTests.cs | 2 - .../SyncServerTests.cs | 5 +- .../SyncThreadTests.cs | 2 + .../SynchronizerTests.cs | 5 +- .../Trie/HealingTreeTests.cs | 11 +- .../Trie/HealingTrieStoreTests.cs | 19 +- .../TrieScenarios.cs | 149 ++--- .../FastSync/StateSyncItem.cs | 23 +- .../FastSync/TreeSync.cs | 168 ++---- .../SnapSync/SnapProvider.cs | 24 +- .../SnapSync/SnapProviderHelper.cs | 43 +- .../SnapSync/SnapServer.cs | 18 +- .../Synchronizer.cs | 9 +- .../Trie/HealingStateTree.cs | 5 +- .../Trie/HealingStorageTree.cs | 5 +- .../Trie/HealingStorageTreeFactory.cs | 2 +- .../Trie/HealingTrieStore.cs | 14 +- .../NodeStorageFactoryTests.cs | 97 ++++ .../Nethermind.Trie.Test/NodeStorageTests.cs | 152 +++++ .../Pruning/TestPruningStrategy.cs | 7 +- .../Pruning/TreeStoreTests.cs | 540 ++++++++++++------ .../PruningScenariosTests.cs | 45 +- .../Nethermind.Trie.Test/TinyTreePathTests.cs | 32 ++ .../Nethermind.Trie.Test/TreePathTests.cs | 2 +- .../TrieNodeResolverWithReadFlagsTests.cs | 34 +- .../Nethermind.Trie.Test/TrieNodeTests.cs | 240 ++++---- .../Nethermind.Trie.Test/TrieTests.cs | 22 +- .../Nethermind.Trie.Test/VisitingTests.cs | 28 +- .../Nethermind.Trie/BatchedTrieVisitor.cs | 90 ++- .../Nethermind.Trie/CachedTrieStore.cs | 65 +++ .../Nethermind.Trie/INodeStorage.cs | 49 ++ .../Nethermind.Trie/INodeStorageFactory.cs | 13 + .../Nethermind.Trie/ITreeVisitor.cs | 2 + .../Nethermind.Trie/Nethermind.Trie.csproj | 1 + .../Nethermind.Trie/NibbleExtensions.cs | 7 + .../Nethermind.Trie/NodeCommitInfo.cs | 9 +- src/Nethermind/Nethermind.Trie/NodeStorage.cs | 230 ++++++++ .../Nethermind.Trie/NodeStorageFactory.cs | 94 +++ .../Nethermind.Trie/PatriciaTree.cs | 183 +++--- .../Nethermind.Trie/Pruning/Archive.cs | 2 + .../Pruning/CompositePersistenceStrategy.cs | 1 + .../Pruning/IPersistenceStrategy.cs | 1 + .../Pruning/IScopedTrieStore.cs | 27 + .../Pruning/ISnapshotStrategy.cs | 1 + .../Pruning/ITrieNodeResolver.cs | 20 +- .../Nethermind.Trie/Pruning/ITrieStore.cs | 23 +- .../Pruning/ITrieStoreExtensions.cs | 14 + .../Pruning/IntervalSnapshotting.cs | 2 + .../Nethermind.Trie/Pruning/MemoryLimit.cs | 2 + .../Nethermind.Trie/Pruning/NoPersistence.cs | 2 + .../Nethermind.Trie/Pruning/NoPruning.cs | 2 + .../Pruning/NullTrieNodeResolver.cs | 13 +- .../Nethermind.Trie/Pruning/NullTrieStore.cs | 30 +- .../Nethermind.Trie/Pruning/Prune.cs | 5 + .../Pruning/ReadOnlyTrieStore.cs | 94 ++- .../Pruning/ScopedTrieStore.cs | 62 ++ .../Nethermind.Trie/Pruning/TinyTreePath.cs | 43 ++ .../Pruning/TrackedPastKeyCountStrategy.cs | 24 + .../Nethermind.Trie/Pruning/TreePath.cs | 14 +- .../Nethermind.Trie/Pruning/TrieStore.cs | 507 ++++++++++++---- .../Nethermind.Trie/RangeQueryVisitor.cs | 1 + .../Nethermind.Trie/TrieNode.Decoder.cs | 35 +- .../Nethermind.Trie/TrieNode.Visitor.cs | 110 ++-- src/Nethermind/Nethermind.Trie/TrieNode.cs | 208 ++++++- .../TrieNodeResolverWithReadFlags.cs | 23 +- .../Nethermind.Trie/TrieStoreWithReadFlags.cs | 41 +- .../Nethermind.Trie/Utils/WriteBatcher.cs | 75 +++ .../Nethermind.Trie/VisitContext.cs | 3 +- 131 files changed, 3790 insertions(+), 1385 deletions(-) create mode 100644 src/Nethermind/Nethermind.Trie.Test/NodeStorageFactoryTests.cs create mode 100644 src/Nethermind/Nethermind.Trie.Test/NodeStorageTests.cs create mode 100644 src/Nethermind/Nethermind.Trie.Test/TinyTreePathTests.cs create mode 100644 src/Nethermind/Nethermind.Trie/CachedTrieStore.cs create mode 100644 src/Nethermind/Nethermind.Trie/INodeStorage.cs create mode 100644 src/Nethermind/Nethermind.Trie/INodeStorageFactory.cs create mode 100644 src/Nethermind/Nethermind.Trie/NodeStorage.cs create mode 100644 src/Nethermind/Nethermind.Trie/NodeStorageFactory.cs create mode 100644 src/Nethermind/Nethermind.Trie/Pruning/IScopedTrieStore.cs create mode 100644 src/Nethermind/Nethermind.Trie/Pruning/ITrieStoreExtensions.cs create mode 100644 src/Nethermind/Nethermind.Trie/Pruning/ScopedTrieStore.cs create mode 100644 src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs create mode 100644 src/Nethermind/Nethermind.Trie/Pruning/TrackedPastKeyCountStrategy.cs create mode 100644 src/Nethermind/Nethermind.Trie/Utils/WriteBatcher.cs diff --git a/src/Nethermind/Ethereum.Trie.Test/StorageTrieTests.cs b/src/Nethermind/Ethereum.Trie.Test/StorageTrieTests.cs index 224ab6bfc4b..28aaa7acd7f 100644 --- a/src/Nethermind/Ethereum.Trie.Test/StorageTrieTests.cs +++ b/src/Nethermind/Ethereum.Trie.Test/StorageTrieTests.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core.Crypto; +using Nethermind.Core.Test.Builders; using Nethermind.Db; using Nethermind.Logging; using Nethermind.State; @@ -13,10 +14,15 @@ namespace Ethereum.Trie.Test [TestFixture] public class StorageTrieTests { + private StorageTree CreateStorageTrie() + { + return new StorageTree(new TrieStore(new MemDb(), LimboLogs.Instance).GetTrieStore(TestItem.KeccakA), Keccak.EmptyTreeHash, LimboLogs.Instance); + } + [Test] public void Storage_trie_set_reset_with_empty() { - StorageTree tree = new StorageTree(new TrieStore(new MemDb(), LimboLogs.Instance), Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree tree = CreateStorageTrie(); Hash256 rootBefore = tree.RootHash; tree.Set(1, new byte[] { 1 }); tree.Set(1, new byte[] { }); @@ -28,7 +34,7 @@ public void Storage_trie_set_reset_with_empty() [Test] public void Storage_trie_set_reset_with_long_zero() { - StorageTree tree = new StorageTree(new TrieStore(new MemDb(), LimboLogs.Instance), Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree tree = CreateStorageTrie(); Hash256 rootBefore = tree.RootHash; tree.Set(1, new byte[] { 1 }); tree.Set(1, new byte[] { 0, 0, 0, 0, 0 }); @@ -40,7 +46,7 @@ public void Storage_trie_set_reset_with_long_zero() [Test] public void Storage_trie_set_reset_with_short_zero() { - StorageTree tree = new StorageTree(new TrieStore(new MemDb(), LimboLogs.Instance), Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree tree = CreateStorageTrie(); Hash256 rootBefore = tree.RootHash; tree.Set(1, new byte[] { 1 }); tree.Set(1, new byte[] { 0 }); diff --git a/src/Nethermind/Nethermind.Api/IApiWithBlockchain.cs b/src/Nethermind/Nethermind.Api/IApiWithBlockchain.cs index 01254e07578..7dd4d5b01de 100644 --- a/src/Nethermind/Nethermind.Api/IApiWithBlockchain.cs +++ b/src/Nethermind/Nethermind.Api/IApiWithBlockchain.cs @@ -21,6 +21,7 @@ using Nethermind.JsonRpc; using Nethermind.JsonRpc.Modules.Eth.GasPrice; using Nethermind.State; +using Nethermind.Trie; using Nethermind.Trie.Pruning; using Nethermind.TxPool; @@ -95,6 +96,7 @@ public interface IApiWithBlockchain : IApiWithStores, IBlockchainBridgeFactory CompositePruningTrigger PruningTrigger { get; } IBlockProductionPolicy? BlockProductionPolicy { get; set; } + INodeStorageFactory NodeStorageFactory { get; set; } BackgroundTaskScheduler BackgroundTaskScheduler { get; set; } } } diff --git a/src/Nethermind/Nethermind.Api/IInitConfig.cs b/src/Nethermind/Nethermind.Api/IInitConfig.cs index 5d24b266182..5679dfb6dd9 100644 --- a/src/Nethermind/Nethermind.Api/IInitConfig.cs +++ b/src/Nethermind/Nethermind.Api/IInitConfig.cs @@ -3,6 +3,7 @@ using Nethermind.Config; using Nethermind.Consensus.Processing; +using Nethermind.Trie; namespace Nethermind.Api; @@ -83,6 +84,9 @@ public interface IInitConfig : IConfig [ConfigItem(Description = "[TECHNICAL] Disable setting malloc options. Set to true if using different memory allocator or manually setting malloc opts.", DefaultValue = "false", HiddenFromDocs = true)] bool DisableMallocOpts { get; set; } + [ConfigItem(Description = "[TECHNICAL] Key scheme for state db. Only effect new db.", DefaultValue = "Current", HiddenFromDocs = true)] + INodeStorage.KeyScheme StateDbKeyScheme { get; set; } + [ConfigItem(Description = "[TECHNICAL] Exit when block number is reached. Useful for scripting and testing.", DefaultValue = "null", HiddenFromDocs = true)] long? ExitOnBlockNumber { get; set; } diff --git a/src/Nethermind/Nethermind.Api/InitConfig.cs b/src/Nethermind/Nethermind.Api/InitConfig.cs index ba4ae02ebf5..8fc3835a4be 100644 --- a/src/Nethermind/Nethermind.Api/InitConfig.cs +++ b/src/Nethermind/Nethermind.Api/InitConfig.cs @@ -3,6 +3,7 @@ using System; using Nethermind.Consensus.Processing; +using Nethermind.Trie; namespace Nethermind.Api { @@ -34,6 +35,7 @@ public class InitConfig : IInitConfig public long? BadBlocksStored { get; set; } = 100; public bool DisableGcOnNewPayload { get; set; } = true; public bool DisableMallocOpts { get; set; } = false; + public INodeStorage.KeyScheme StateDbKeyScheme { get; set; } = INodeStorage.KeyScheme.Current; public long? ExitOnBlockNumber { get; set; } = null; public int BackgroundTaskConcurrency { get; set; } = 1; diff --git a/src/Nethermind/Nethermind.Api/NethermindApi.cs b/src/Nethermind/Nethermind.Api/NethermindApi.cs index 24a552f3f68..97e16f3041b 100644 --- a/src/Nethermind/Nethermind.Api/NethermindApi.cs +++ b/src/Nethermind/Nethermind.Api/NethermindApi.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.IO.Abstractions; -using System.Threading; using Nethermind.Abi; using Nethermind.Api.Extensions; using Nethermind.Blockchain; @@ -55,6 +54,7 @@ using Nethermind.TxPool; using Nethermind.Wallet; using Nethermind.Sockets; +using Nethermind.Trie; namespace Nethermind.Api { @@ -208,6 +208,7 @@ public ISealEngine SealEngine public IEthSyncingInfo? EthSyncingInfo { get; set; } public IBlockProductionPolicy? BlockProductionPolicy { get; set; } + public INodeStorageFactory NodeStorageFactory { get; set; } = null!; public BackgroundTaskScheduler BackgroundTaskScheduler { get; set; } = null!; public IWallet? Wallet { get; set; } public IBlockStore? BadBlocksStore { get; set; } diff --git a/src/Nethermind/Nethermind.Benchmark/Store/PatriciaTreeBenchmarks.cs b/src/Nethermind/Nethermind.Benchmark/Store/PatriciaTreeBenchmarks.cs index a2e73915791..5d568377914 100644 --- a/src/Nethermind/Nethermind.Benchmark/Store/PatriciaTreeBenchmarks.cs +++ b/src/Nethermind/Nethermind.Benchmark/Store/PatriciaTreeBenchmarks.cs @@ -13,6 +13,7 @@ using Nethermind.Logging; using Nethermind.State; using Nethermind.Trie.Pruning; +using NUnit.Framework; namespace Nethermind.Benchmarks.Store { @@ -45,6 +46,9 @@ public class PatriciaTreeBenchmarks private (Hash256, Account)[] _entries; private (Hash256, Account)[] _entriesShuffled; + private const int _largerEntryCount = 1024 * 10 * 10; + private (bool, Hash256, Account)[] _largerEntriesAccess; + private (string Name, Action Action)[] _scenarios = new (string, Action)[] { ("set_3_via_address", tree => @@ -260,6 +264,42 @@ public void Setup() } _memoryTrieStore = new TrieStore(_backingMemory, Prune.WhenCacheReaches(1.GB()), No.Persistence, NullLogManager.Instance); + + // Preparing access for large entries + List currentItems = new(); + + _largerEntriesAccess = new (bool, Hash256, Account)[_largerEntryCount]; + Random rand = new Random(0); + for (int i = 0; i < _largerEntryCount; i++) + { + if (rand.NextDouble() < 0.4 && currentItems.Count != 0) + { + // Its an existing read + _largerEntriesAccess[i] = ( + false, + currentItems[(int)(rand.NextInt64() % currentItems.Count)], + Account.TotallyEmpty); + } + else if (rand.NextDouble() < 0.6 && currentItems.Count != 0) + { + // Its an existing write + _largerEntriesAccess[i] = ( + false, + currentItems[(int)(rand.NextInt64() % currentItems.Count)], + new Account((UInt256)rand.NextInt64())); + } + else + { + // Its a new write + Hash256 newAccount = Keccak.Compute(i.ToBigEndianByteArray()); + currentItems.Add(newAccount); + _largerEntriesAccess[i] = ( + false, + newAccount, + new Account((UInt256)rand.NextInt64())); + } + } + } [Benchmark] @@ -293,6 +333,34 @@ public void InsertAndCommit() tempTree.Commit(0); } + [Benchmark] + public void InsertAndCommitRepeatedlyTimes() + { + StateTree tempTree = new StateTree( + new TrieStore(new MemDb(), + Prune.WhenCacheReaches(1.MiB()), + Persist.IfBlockOlderThan(2), + NullLogManager.Instance), NullLogManager.Instance); + + for (int i = 0; i < _largerEntryCount; i++) + { + if (i % 2000 == 0) + { + tempTree.Commit(i / 2000); + } + + (bool isWrite, Hash256 address, Account value) = _largerEntriesAccess[i]; + if (isWrite) + { + tempTree.Set(address, value); + } + else + { + tempTree.Get(address); + } + } + } + [Benchmark] public void ReadWithFullTree() { diff --git a/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/CopyTreeVisitorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/CopyTreeVisitorTests.cs index 2023813ec57..5bd8306685e 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/CopyTreeVisitorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/CopyTreeVisitorTests.cs @@ -25,8 +25,17 @@ namespace Nethermind.Blockchain.Test.FullPruning { [Parallelizable(ParallelScope.All)] + [TestFixture(INodeStorage.KeyScheme.HalfPath)] + [TestFixture(INodeStorage.KeyScheme.Hash)] public class CopyTreeVisitorTests { + private readonly INodeStorage.KeyScheme _keyScheme; + + public CopyTreeVisitorTests(INodeStorage.KeyScheme scheme) + { + _keyScheme = scheme; + } + [TestCase(0, 1)] [TestCase(0, 8)] [TestCase(1, 1)] @@ -56,7 +65,7 @@ public void copies_state_between_dbs(int fullPruningMemoryBudgetMb, int maxDegre clonedDb.Values.Should().BeEquivalentTo(values); clonedDb.KeyWasWrittenWithFlags(keys[0], WriteFlags.LowPriority); - trieDb.KeyWasReadWithFlags(keys[0], ReadFlags.SkipDuplicateRead | ReadFlags.HintCacheMiss); + trieDb.KeyWasReadWithFlags(keys[0], ReadFlags.SkipDuplicateRead | ReadFlags.HintReadAhead); } [Test, Timeout(Timeout.MaxTestTime)] @@ -74,15 +83,27 @@ public void cancel_coping_state_between_dbs() clonedDb.Count.Should().BeLessThan(trieDb.Count); } - private static IPruningContext CopyDb(IPruningContext pruningContext, CancellationToken cancellationToken, MemDb trieDb, VisitingOptions? visitingOptions = null, WriteFlags writeFlags = WriteFlags.None) + private IPruningContext CopyDb(IPruningContext pruningContext, CancellationToken cancellationToken, MemDb trieDb, VisitingOptions? visitingOptions = null, WriteFlags writeFlags = WriteFlags.None) { LimboLogs logManager = LimboLogs.Instance; - PatriciaTree trie = Build.A.Trie(trieDb).WithAccountsByIndex(0, 100).TestObject; + PatriciaTree trie = Build.A.Trie(new NodeStorage(trieDb, _keyScheme)).WithAccountsByIndex(0, 100).TestObject; IStateReader stateReader = new StateReader(new TrieStore(trieDb, logManager), new MemDb(), logManager); - using CopyTreeVisitor copyTreeVisitor = new(pruningContext, writeFlags, logManager, cancellationToken); - stateReader.RunTreeVisitor(copyTreeVisitor, trie.RootHash, visitingOptions); - copyTreeVisitor.Finish(); + if (_keyScheme == INodeStorage.KeyScheme.Hash) + { + NodeStorage nodeStorage = new NodeStorage(pruningContext, _keyScheme); + using CopyTreeVisitor copyTreeVisitor = new(nodeStorage, writeFlags, logManager, cancellationToken); + stateReader.RunTreeVisitor(copyTreeVisitor, trie.RootHash, visitingOptions); + copyTreeVisitor.Finish(); + } + else + { + NodeStorage nodeStorage = new NodeStorage(pruningContext, _keyScheme); + using CopyTreeVisitor copyTreeVisitor = new(nodeStorage, writeFlags, logManager, cancellationToken); + stateReader.RunTreeVisitor(copyTreeVisitor, trie.RootHash, visitingOptions); + copyTreeVisitor.Finish(); + } + return pruningContext; } diff --git a/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/FullPrunerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/FullPrunerTests.cs index b991c29a04b..cb2e7134862 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/FullPrunerTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/FullPrunerTests.cs @@ -50,6 +50,28 @@ public async Task can_prune() test.ShouldCopyAllValues(); } + [Timeout(Timeout.MaxTestTime)] + [TestCase(INodeStorage.KeyScheme.Hash, INodeStorage.KeyScheme.Current, INodeStorage.KeyScheme.Hash)] + [TestCase(INodeStorage.KeyScheme.HalfPath, INodeStorage.KeyScheme.Current, INodeStorage.KeyScheme.HalfPath)] + [TestCase(INodeStorage.KeyScheme.Hash, INodeStorage.KeyScheme.HalfPath, INodeStorage.KeyScheme.HalfPath)] + [TestCase(INodeStorage.KeyScheme.HalfPath, INodeStorage.KeyScheme.Hash, INodeStorage.KeyScheme.HalfPath)] + public async Task can_prune_and_switch_key_scheme(INodeStorage.KeyScheme currentKeyScheme, INodeStorage.KeyScheme newKeyScheme, INodeStorage.KeyScheme expectedNewScheme) + { + TestContext test = new( + true, + false, + FullPruningCompletionBehavior.None, + _fullPrunerMemoryBudgetMb, + _degreeOfParallelism, + currentKeyScheme: currentKeyScheme, + preferredKeyScheme: newKeyScheme); + + test.NodeStorage.Scheme.Should().Be(currentKeyScheme); + await test.RunFullPruning(); + test.ShouldCopyAllValuesWhenVisitingTrie(); + test.NodeStorage.Scheme.Should().Be(expectedNewScheme); + } + [Test, Timeout(Timeout.MaxTestTime)] public async Task pruning_deletes_old_db_on_success() { @@ -162,8 +184,16 @@ public async Task should_duplicate_writes_to_batches_while_pruning() test.FullPruningDb[key].Should().BeEquivalentTo(key); } - private TestContext CreateTest(bool successfulPruning = true, bool clearPrunedDb = false, FullPruningCompletionBehavior completionBehavior = FullPruningCompletionBehavior.None) => - new(successfulPruning, clearPrunedDb, completionBehavior, _fullPrunerMemoryBudgetMb, _degreeOfParallelism); + private TestContext CreateTest( + bool successfulPruning = true, + bool clearPrunedDb = false, + FullPruningCompletionBehavior completionBehavior = FullPruningCompletionBehavior.None) => + new( + successfulPruning, + clearPrunedDb, + completionBehavior, + _fullPrunerMemoryBudgetMb, + _degreeOfParallelism); private class TestContext { @@ -176,6 +206,7 @@ private class TestContext public IStateReader StateReader { get; } public FullPruner Pruner { get; } public MemDb TrieDb { get; } + public INodeStorage NodeStorage { get; } public TestMemDb CopyDb { get; } public IDriveInfo DriveInfo { get; set; } = Substitute.For(); public IChainEstimations _chainEstimations = ChainSizes.UnknownChain.Instance; @@ -187,7 +218,9 @@ public TestContext( bool clearPrunedDb = false, FullPruningCompletionBehavior completionBehavior = FullPruningCompletionBehavior.None, int fullScanMemoryBudgetMb = 0, - int degreeOfParallelism = 0) + int degreeOfParallelism = 0, + INodeStorage.KeyScheme currentKeyScheme = INodeStorage.KeyScheme.HalfPath, + INodeStorage.KeyScheme preferredKeyScheme = INodeStorage.KeyScheme.Current) { BlockTree.OnUpdateMainChain += (_, e) => _head = e.Blocks[^1].Number; _clearPrunedDb = clearPrunedDb; @@ -196,17 +229,26 @@ public TestContext( IDbFactory dbFactory = Substitute.For(); dbFactory.CreateDb(Arg.Any()).Returns(TrieDb, CopyDb); - PatriciaTree trie = Build.A.Trie(TrieDb).WithAccountsByIndex(0, 100).TestObject; + NodeStorage storageForWrite = new NodeStorage(TrieDb, currentKeyScheme); + PatriciaTree trie = Build.A.Trie(storageForWrite).WithAccountsByIndex(0, 100).TestObject; _stateRoot = trie.RootHash; - StateReader = new StateReader(new TrieStore(TrieDb, LimboLogs.Instance), new TestMemDb(), LimboLogs.Instance); FullPruningDb = new TestFullPruningDb(new DbSettings("test", "test"), dbFactory, successfulPruning, clearPrunedDb); - - Pruner = new(FullPruningDb, PruningTrigger, new PruningConfig() - { - FullPruningMaxDegreeOfParallelism = degreeOfParallelism, - FullPruningMemoryBudgetMb = fullScanMemoryBudgetMb, - FullPruningCompletionBehavior = completionBehavior - }, BlockTree, StateReader, ProcessExitSource, _chainEstimations, DriveInfo, Substitute.For(), LimboLogs.Instance); + NodeStorageFactory nodeStorageFactory = new NodeStorageFactory(preferredKeyScheme, LimboLogs.Instance); + nodeStorageFactory.DetectCurrentKeySchemeFrom(TrieDb); + NodeStorage = nodeStorageFactory.WrapKeyValueStore(FullPruningDb); + StateReader = new StateReader(new TrieStore(NodeStorage, LimboLogs.Instance), new TestMemDb(), LimboLogs.Instance); + + Pruner = new( + FullPruningDb, + nodeStorageFactory, + NodeStorage, + PruningTrigger, + new PruningConfig() + { + FullPruningMaxDegreeOfParallelism = degreeOfParallelism, + FullPruningMemoryBudgetMb = fullScanMemoryBudgetMb, + FullPruningCompletionBehavior = completionBehavior + }, BlockTree, StateReader, ProcessExitSource, _chainEstimations, DriveInfo, Substitute.For(), LimboLogs.Instance); } public async Task RunFullPruning() @@ -270,6 +312,13 @@ public void AddBlocks(long count) } } + public void ShouldCopyAllValuesWhenVisitingTrie() + { + PatriciaTree trie = new PatriciaTree(new TrieStore(new NodeStorage(TrieDb), LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); + TrieCopiedNodeVisitor visitor = new TrieCopiedNodeVisitor(new NodeStorage(CopyDb)); + trie.Accept(visitor, BlockTree.Head!.StateRoot!); + } + public void ShouldCopyAllValues() { foreach (KeyValuePair keyValuePair in TrieDb.GetAll()) @@ -375,5 +424,50 @@ public void MarkStart() public CancellationTokenSource CancellationTokenSource { get; } = new(); } } + + class TrieCopiedNodeVisitor : ITreeVisitor + { + private INodeStorage _nodeStorageToCompareTo; + + public TrieCopiedNodeVisitor(INodeStorage nodeStorage) + { + _nodeStorageToCompareTo = nodeStorage; + } + + private void CheckNode(Hash256? storage, in TreePath path, TrieNode node) + { + _nodeStorageToCompareTo.KeyExists(storage, path, node.Keccak).Should().BeTrue(); + } + + public bool IsFullDbScan => true; + public bool ShouldVisit(in TreePathContextWithStorage ctx, Hash256 nextNode) => true; + + public void VisitTree(in TreePathContextWithStorage ctx, Hash256 rootHash, TrieVisitContext trieVisitContext) + { + } + + public void VisitMissingNode(in TreePathContextWithStorage ctx, Hash256 nodeHash, TrieVisitContext trieVisitContext) + { + } + + public void VisitBranch(in TreePathContextWithStorage ctx, TrieNode node, TrieVisitContext trieVisitContext) + { + CheckNode(ctx.Storage, ctx.Path, node); + } + + public void VisitExtension(in TreePathContextWithStorage ctx, TrieNode node, TrieVisitContext trieVisitContext) + { + CheckNode(ctx.Storage, ctx.Path, node); + } + + public void VisitLeaf(in TreePathContextWithStorage ctx, TrieNode node, TrieVisitContext trieVisitContext, ReadOnlySpan value) + { + CheckNode(ctx.Storage, ctx.Path, node); + } + + public void VisitCode(in TreePathContextWithStorage ctx, Hash256 codeHash, TrieVisitContext trieVisitContext) + { + } + } } } diff --git a/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/FullPruningDiskTest.cs b/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/FullPruningDiskTest.cs index 367f678ed3f..08a83248f7a 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/FullPruningDiskTest.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/FullPruning/FullPruningDiskTest.cs @@ -24,6 +24,7 @@ using Nethermind.Int256; using Nethermind.Logging; using Nethermind.State; +using Nethermind.Trie; using Nethermind.Trie.Pruning; using NSubstitute; using NUnit.Framework; @@ -34,7 +35,8 @@ public class FullPruningDiskTest { public class PruningTestBlockchain : TestBlockchain { - public IFullPruningDb PruningDb { get; private set; } = null!; + public FullPruningDb PruningDb { get; private set; } = null!; + public INodeStorage MainNodeStorage { get; private set; } = null!; public TempPath TempDirectory { get; } public IPruningTrigger PruningTrigger { get; } = Substitute.For(); public FullTestPruner FullPruner { get; private set; } = null!; @@ -48,13 +50,33 @@ public PruningTestBlockchain() TempDirectory = TempPath.GetTempDirectory(); } - protected override async Task Build(ISpecProvider? specProvider = null, UInt256? initialValues = null, bool addBlockOnStart = true) + protected override async Task Build( + ISpecProvider? specProvider = null, + UInt256? initialValues = null, + bool addBlockOnStart = true + ) { TestBlockchain chain = await base.Build(specProvider, initialValues, addBlockOnStart); - PruningDb = (IFullPruningDb)DbProvider.StateDb; + PruningDb = (FullPruningDb)DbProvider.StateDb; DriveInfo.AvailableFreeSpace.Returns(long.MaxValue); _chainEstimations.StateSize.Returns((long?)null); - FullPruner = new FullTestPruner(PruningDb, PruningTrigger, PruningConfig, BlockTree, StateReader, ProcessExitSource, DriveInfo, chain.TrieStore, _chainEstimations, LogManager); + + NodeStorageFactory nodeStorageFactory = new NodeStorageFactory(INodeStorage.KeyScheme.Current, LimboLogs.Instance); + MainNodeStorage = nodeStorageFactory.WrapKeyValueStore(PruningDb); + + FullPruner = new FullTestPruner( + PruningDb, + nodeStorageFactory, + MainNodeStorage, + PruningTrigger, + PruningConfig, + BlockTree, + StateReader, + ProcessExitSource, + DriveInfo, + chain.TrieStore, + _chainEstimations, + LogManager); return chain; } @@ -88,16 +110,18 @@ public class FullTestPruner : FullPruner public FullTestPruner( IFullPruningDb pruningDb, + INodeStorageFactory nodeStorageFactory, + INodeStorage mainNodeStorage, IPruningTrigger pruningTrigger, IPruningConfig pruningConfig, IBlockTree blockTree, IStateReader stateReader, IProcessExitSource processExitSource, IDriveInfo driveInfo, - TrieStore trieStore, + IPruningTrieStore trieStore, IChainEstimations chainEstimations, ILogManager logManager) - : base(pruningDb, pruningTrigger, pruningConfig, blockTree, stateReader, processExitSource, chainEstimations, driveInfo, trieStore, logManager) + : base(pruningDb, nodeStorageFactory, mainNodeStorage, pruningTrigger, pruningConfig, blockTree, stateReader, processExitSource, chainEstimations, driveInfo, trieStore, logManager) { } @@ -170,7 +194,7 @@ private static async Task RunPruning(PruningTestBlockchain chain, int time, bool Assert.That( () => chain.PruningDb.InnerDbName, - Is.EqualTo($"State{time + 1}").After(1000, 100) + Is.EqualTo($"State{time + 1}").After(500, 100) ); HashSet currentItems = chain.DbProvider.StateDb.GetAllValues().ToHashSet(Bytes.EqualityComparer); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Proofs/ReceiptTrieTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Proofs/ReceiptTrieTests.cs index 43fe24c6f0c..1fbaa51be02 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Proofs/ReceiptTrieTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Proofs/ReceiptTrieTests.cs @@ -57,7 +57,7 @@ public void Can_collect_proof_with_branch() private static void VerifyProof(byte[][] proof, Hash256 receiptRoot) { TrieNode node = new(NodeType.Unknown, proof.Last()); - node.ResolveNode(Substitute.For()); + node.ResolveNode(Substitute.For(), TreePath.Empty); TxReceipt receipt = new ReceiptMessageDecoder().Decode(node.Value.AsRlpStream()); Assert.NotNull(receipt.Bloom); diff --git a/src/Nethermind/Nethermind.Blockchain/FullPruning/CopyTreeVisitor.cs b/src/Nethermind/Nethermind.Blockchain/FullPruning/CopyTreeVisitor.cs index 62adf4a58bf..ee41061fcad 100644 --- a/src/Nethermind/Nethermind.Blockchain/FullPruning/CopyTreeVisitor.cs +++ b/src/Nethermind/Nethermind.Blockchain/FullPruning/CopyTreeVisitor.cs @@ -2,12 +2,10 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Concurrent; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Threading; using Nethermind.Core; -using Nethermind.Core.Buffers; using Nethermind.Core.Crypto; using Nethermind.Core.Utils; using Nethermind.Db.FullPruning; @@ -22,7 +20,7 @@ namespace Nethermind.Blockchain.FullPruning /// /// During visiting of the state trie at specified state root it copies the existing trie into . /// - public class CopyTreeVisitor : ITreeVisitor, IDisposable + public class CopyTreeVisitor : ICopyTreeVisitor, ITreeVisitor where TContext : struct, ITreePathContextWithStorage, INodeContext { private readonly ILogger _logger; private readonly Stopwatch _stopwatch; @@ -31,10 +29,10 @@ public class CopyTreeVisitor : ITreeVisitor, IDisposable private readonly WriteFlags _writeFlags; private readonly CancellationToken _cancellationToken; private const int Million = 1_000_000; - private readonly ConcurrentWriteBatcher _concurrentWriteBatcher; + private readonly ConcurrentNodeWriteBatcher _concurrentWriteBatcher; public CopyTreeVisitor( - IPruningContext pruningContext, + INodeStorage nodeStorage, WriteFlags writeFlags, ILogManager logManager, CancellationToken cancellationToken) @@ -43,16 +41,16 @@ public CopyTreeVisitor( _writeFlags = writeFlags; _logger = logManager.GetClassLogger(); _stopwatch = new Stopwatch(); - _concurrentWriteBatcher = new ConcurrentWriteBatcher(pruningContext); + _concurrentWriteBatcher = new ConcurrentNodeWriteBatcher(nodeStorage); } public bool IsFullDbScan => true; public ReadFlags ExtraReadFlag => ReadFlags.SkipDuplicateRead; - public bool ShouldVisit(Hash256 nextNode) => !_cancellationToken.IsCancellationRequested; + public bool ShouldVisit(in TContext context, Hash256 nextNode) => !_cancellationToken.IsCancellationRequested; - public void VisitTree(Hash256 rootHash, TrieVisitContext trieVisitContext) + public void VisitTree(in TContext nodeContext, Hash256 rootHash, TrieVisitContext trieVisitContext) { _stopwatch.Start(); if (_logger.IsWarn) _logger.Warn($"Full Pruning Started on root hash {rootHash}: do not close the node until finished or progress will be lost."); @@ -60,7 +58,7 @@ public void VisitTree(Hash256 rootHash, TrieVisitContext trieVisitContext) [DoesNotReturn] [StackTraceHidden] - public void VisitMissingNode(Hash256 nodeHash, TrieVisitContext trieVisitContext) + public void VisitMissingNode(in TContext ctx, Hash256 nodeHash, TrieVisitContext trieVisitContext) { if (_logger.IsWarn) { @@ -71,20 +69,20 @@ public void VisitMissingNode(Hash256 nodeHash, TrieVisitContext trieVisitContext throw new TrieException($"Trie {nodeHash} missing"); } - public void VisitBranch(TrieNode node, TrieVisitContext trieVisitContext) => PersistNode(node); + public void VisitBranch(in TContext ctx, TrieNode node, TrieVisitContext trieVisitContext) => PersistNode(ctx.Storage, ctx.Path, node); - public void VisitExtension(TrieNode node, TrieVisitContext trieVisitContext) => PersistNode(node); + public void VisitExtension(in TContext ctx, TrieNode node, TrieVisitContext trieVisitContext) => PersistNode(ctx.Storage, ctx.Path, node); - public void VisitLeaf(TrieNode node, TrieVisitContext trieVisitContext, ReadOnlySpan value) => PersistNode(node); + public void VisitLeaf(in TContext ctx, TrieNode node, TrieVisitContext trieVisitContext, ReadOnlySpan value) => PersistNode(ctx.Storage, ctx.Path, node); - public void VisitCode(Hash256 codeHash, TrieVisitContext trieVisitContext) { } + public void VisitCode(in TContext ctx, Hash256 codeHash, TrieVisitContext trieVisitContext) { } - private void PersistNode(TrieNode node) + private void PersistNode(Hash256 storage, in TreePath path, TrieNode node) { if (node.Keccak is not null) { // simple copy of nodes RLP - _concurrentWriteBatcher.PutSpan(node.Keccak.Bytes, node.FullRlp.AsSpan(), _writeFlags); + _concurrentWriteBatcher.Set(storage, path, node.Keccak, node.FullRlp.ToArray(), _writeFlags); Interlocked.Increment(ref _persistedNodes); // log message every 1 mln nodes @@ -116,4 +114,9 @@ public void Finish() _concurrentWriteBatcher.Dispose(); } } + + public interface ICopyTreeVisitor : IDisposable + { + void Finish(); + } } diff --git a/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs b/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs index ee5fffb58bd..18583be484c 100755 --- a/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs +++ b/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs @@ -26,6 +26,8 @@ namespace Nethermind.Blockchain.FullPruning public class FullPruner : IDisposable { private readonly IFullPruningDb _fullPruningDb; + private readonly INodeStorageFactory _nodeStorageFactory; + private readonly INodeStorage _nodeStorage; private readonly IPruningTrigger _pruningTrigger; private readonly IPruningConfig _pruningConfig; private readonly IBlockTree _blockTree; @@ -41,6 +43,8 @@ public class FullPruner : IDisposable public FullPruner( IFullPruningDb fullPruningDb, + INodeStorageFactory nodeStorageFactory, + INodeStorage mainNodeStorage, IPruningTrigger pruningTrigger, IPruningConfig pruningConfig, IBlockTree blockTree, @@ -52,6 +56,8 @@ public FullPruner( ILogManager logManager) { _fullPruningDb = fullPruningDb; + _nodeStorageFactory = nodeStorageFactory; + _nodeStorage = mainNodeStorage; _pruningTrigger = pruningTrigger; _pruningConfig = pruningConfig; _blockTree = blockTree; @@ -132,6 +138,7 @@ await WaitForMainChainChange((e) => } catch (Exception e) { + Console.Out.WriteLine($"Its {e}"); if (_logger.IsError) _logger.Error("full pruning failed. ", e); } finally @@ -222,6 +229,8 @@ private void HandlePruningFinished(object? sender, PruningEventArgs e) private async Task CopyTrie(IPruningContext pruning, Hash256 stateRoot, CancellationToken cancellationToken) { + INodeStorage.KeyScheme originalKeyScheme = _nodeStorage.Scheme; + try { pruning.MarkStart(); @@ -232,19 +241,45 @@ private async Task CopyTrie(IPruningContext pruning, Hash256 stateRoot, Cancella writeFlags |= WriteFlags.LowPriority; } - using CopyTreeVisitor copyTreeVisitor = new(pruning, writeFlags, _logManager, cancellationToken); + INodeStorage targetNodeStorage = _nodeStorageFactory.WrapKeyValueStore(pruning, usePreferredKeyScheme: true); + + if (originalKeyScheme == INodeStorage.KeyScheme.HalfPath && targetNodeStorage.Scheme == INodeStorage.KeyScheme.Hash) + { + // Because of write on read duplication, we can't move from HalfPath to Hash scheme as some of the + // read key which are in HalfPath may be written to the new db. This cause a problem as Hash + // scheme can be started with some code not tracking path, which will be unable to read these HalfPath + // keys. + if (_logger.IsWarn) _logger.Warn($"Full pruning from from HalfPath key to Hash key is not supported. Switching to HalfPath key scheme."); + targetNodeStorage.Scheme = INodeStorage.KeyScheme.HalfPath; + } + VisitingOptions visitingOptions = new() { MaxDegreeOfParallelism = _pruningConfig.FullPruningMaxDegreeOfParallelism, FullScanMemoryBudget = ((long)_pruningConfig.FullPruningMemoryBudgetMb).MiB(), }; if (_logger.IsInfo) _logger.Info($"Full pruning started with MaxDegreeOfParallelism: {visitingOptions.MaxDegreeOfParallelism} and FullScanMemoryBudget: {visitingOptions.FullScanMemoryBudget}"); - _stateReader.RunTreeVisitor(copyTreeVisitor, stateRoot, visitingOptions); + + ICopyTreeVisitor visitor = null; + if (targetNodeStorage.Scheme == INodeStorage.KeyScheme.Hash) + { + using CopyTreeVisitor copyTreeVisitor = new(targetNodeStorage, writeFlags, _logManager, cancellationToken); + visitor = copyTreeVisitor; + _stateReader.RunTreeVisitor(copyTreeVisitor, stateRoot, visitingOptions); + } + else + { + using CopyTreeVisitor copyTreeVisitor = new(targetNodeStorage, writeFlags, _logManager, cancellationToken); + visitor = copyTreeVisitor; + _stateReader.RunTreeVisitor(copyTreeVisitor, stateRoot, visitingOptions); + } if (!cancellationToken.IsCancellationRequested) { - copyTreeVisitor.Finish(); + visitor.Finish(); + _nodeStorage.Scheme = targetNodeStorage.Scheme; + // Note: This does means that during full pruning some of the key copied will be of old key scheme. await WaitForMainChainChange((e) => { // The db swap happens here. We do it within the event handler of main chain change to block @@ -259,6 +294,7 @@ await WaitForMainChainChange((e) => catch (Exception e) { _logger.Error("Error during pruning. ", e); + _nodeStorage.Scheme = originalKeyScheme; throw; } } diff --git a/src/Nethermind/Nethermind.Blockchain/FullPruning/PruningTriggerPersistenceStrategy.cs b/src/Nethermind/Nethermind.Blockchain/FullPruning/PruningTriggerPersistenceStrategy.cs index b2d88f9ef7a..6118fc4188a 100644 --- a/src/Nethermind/Nethermind.Blockchain/FullPruning/PruningTriggerPersistenceStrategy.cs +++ b/src/Nethermind/Nethermind.Blockchain/FullPruning/PruningTriggerPersistenceStrategy.cs @@ -67,6 +67,8 @@ public bool ShouldPersist(long blockNumber) return inPruning; } + public bool IsFullPruning => _inPruning != 0; + /// public void Dispose() { diff --git a/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncConfig.cs b/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncConfig.cs index fb76f447677..27be37e7a13 100644 --- a/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncConfig.cs +++ b/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncConfig.cs @@ -140,6 +140,6 @@ public interface ISyncConfig : IConfig [ConfigItem(Description = "Interval, in seconds, between `malloc_trim` calls during sync.", DefaultValue = "300", HiddenFromDocs = true)] public int MallocTrimIntervalSec { get; set; } - [ConfigItem(Description = "_Experimental._ Whether to enable snap serving. WARNING: Very slow on hash db layout.", DefaultValue = "false", HiddenFromDocs = true)] + [ConfigItem(Description = "_Experimental._ Whether to enable snap serving. WARNING: Very slow on hash db layout.", DefaultValue = "true", HiddenFromDocs = true)] bool SnapServingEnabled { get; set; } } diff --git a/src/Nethermind/Nethermind.Blockchain/Synchronization/SyncConfig.cs b/src/Nethermind/Nethermind.Blockchain/Synchronization/SyncConfig.cs index 382de0d089a..82b8b4347a5 100644 --- a/src/Nethermind/Nethermind.Blockchain/Synchronization/SyncConfig.cs +++ b/src/Nethermind/Nethermind.Blockchain/Synchronization/SyncConfig.cs @@ -66,7 +66,7 @@ public string? PivotHash public bool ExitOnSynced { get; set; } = false; public int ExitOnSyncedWaitTimeSec { get; set; } = 60; public int MallocTrimIntervalSec { get; set; } = 300; - public bool SnapServingEnabled { get; set; } = false; + public bool SnapServingEnabled { get; set; } = true; public bool TrieHealing { get; set; } = true; public override string ToString() diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index dc5480b6b7d..a09a9ba51b2 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -32,11 +32,9 @@ using Nethermind.Specs; using Nethermind.Specs.Test; using Nethermind.State; -using Nethermind.State.Repositories; +using Nethermind.Trie; using Nethermind.Trie.Pruning; using Nethermind.TxPool; -using NSubstitute; -using BlockTree = Nethermind.Blockchain.BlockTree; namespace Nethermind.Core.Test.Blockchain; @@ -146,7 +144,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = State.Commit(SpecProvider.GenesisSpec); State.CommitTree(0); - ReadOnlyTrieStore = TrieStore.AsReadOnly(StateDb); + ReadOnlyTrieStore = TrieStore.AsReadOnly(new NodeStorage(StateDb)); WorldStateManager = new WorldStateManager(State, TrieStore, DbProvider, LimboLogs.Instance); StateReader = new StateReader(ReadOnlyTrieStore, CodeDb, LogManager); diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.Trie.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Trie.cs index 92af0a65ca7..6a47af924e6 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/Build.Trie.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Trie.cs @@ -1,10 +1,13 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using Nethermind.Trie; + namespace Nethermind.Core.Test.Builders { public partial class Build { - public TrieBuilder Trie(IKeyValueStoreWithBatching db) => new(db); + public TrieBuilder Trie(IKeyValueStoreWithBatching db) => new(new NodeStorage(db)); + public TrieBuilder Trie(INodeStorage db) => new(db); } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.Tree.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.Tree.cs index d2003bf07fa..aa440794481 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.Tree.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.Tree.cs @@ -51,7 +51,7 @@ public static StateTree GetStateTree(ITrieStore? store = null) { store ??= new TrieStore(new MemDb(), LimboLogs.Instance); - var stateTree = new StateTree(store, LimboLogs.Instance); + var stateTree = new StateTree(store.GetTrieStore(null), LimboLogs.Instance); FillStateTreeWithTestAccounts(stateTree); @@ -83,7 +83,7 @@ public static (StateTree stateTree, StorageTree storageTree, Hash256 accountAddr { store ??= new TrieStore(new MemDb(), LimboLogs.Instance); - var storageTree = new StorageTree(store, LimboLogs.Instance); + var storageTree = new StorageTree(store.GetTrieStore(AccountAddress0), LimboLogs.Instance); storageTree.Set(SlotsWithPaths[0].Path, SlotsWithPaths[0].SlotRlpValue, false); storageTree.Set(SlotsWithPaths[1].Path, SlotsWithPaths[1].SlotRlpValue, false); @@ -96,7 +96,7 @@ public static (StateTree stateTree, StorageTree storageTree, Hash256 accountAddr var account = Build.An.Account.WithBalance(1).WithStorageRoot(storageTree.RootHash).TestObject; - var stateTree = new StateTree(store, LimboLogs.Instance); + var stateTree = new StateTree(store.GetTrieStore(null), LimboLogs.Instance); stateTree.Set(AccountAddress0, account); stateTree.Commit(0); @@ -107,7 +107,7 @@ public static (StateTree stateTree, StorageTree storageTree, Hash256 accountAddr { store ??= new TrieStore(new MemDb(), LimboLogs.Instance); - var storageTree = new StorageTree(store, LimboLogs.Instance); + var storageTree = new StorageTree(store.GetTrieStore(AccountAddress0), LimboLogs.Instance); for (int i = 0; i < slotNumber; i++) { diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TrieBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TrieBuilder.cs index d7e2e9e337f..691f2debad1 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TrieBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TrieBuilder.cs @@ -6,6 +6,7 @@ using Nethermind.Logging; using Nethermind.Serialization.Rlp; using Nethermind.Trie; +using Nethermind.Trie.Pruning; namespace Nethermind.Core.Test.Builders { @@ -13,9 +14,9 @@ public class TrieBuilder : BuilderBase { private readonly AccountDecoder _accountDecoder = new(); - public TrieBuilder(IKeyValueStoreWithBatching db) + public TrieBuilder(INodeStorage db) { - TestObjectInternal = new PatriciaTree(db, Keccak.EmptyTreeHash, false, true, LimboLogs.Instance); + TestObjectInternal = new PatriciaTree(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), Keccak.EmptyTreeHash, false, true, LimboLogs.Instance); } public TrieBuilder WithAccountsByIndex(int start, int count) diff --git a/src/Nethermind/Nethermind.Core/Address.cs b/src/Nethermind/Nethermind.Core/Address.cs index 70890e9321b..d56cda23269 100644 --- a/src/Nethermind/Nethermind.Core/Address.cs +++ b/src/Nethermind/Nethermind.Core/Address.cs @@ -233,6 +233,8 @@ public override bool CanConvertFrom(ITypeDescriptorContext? context, Type source public override bool CanConvertTo(ITypeDescriptorContext? context, Type? destinationType) => destinationType == typeof(string) || base.CanConvertTo(context, destinationType); } + + public Hash256 ToAccountPath => Keccak.Compute(Bytes); } public readonly struct AddressAsKey(Address key) : IEquatable diff --git a/src/Nethermind/Nethermind.Core/IKeyValueStore.cs b/src/Nethermind/Nethermind.Core/IKeyValueStore.cs index 68271142da0..0a0ec8594b0 100644 --- a/src/Nethermind/Nethermind.Core/IKeyValueStore.cs +++ b/src/Nethermind/Nethermind.Core/IKeyValueStore.cs @@ -71,8 +71,12 @@ public enum ReadFlags // Hint that the workload is likely to need the next value in the sequence and should prefetch it. HintReadAhead = 2, + // Shameful hack to use different pool of readahead iterator. + HintReadAhead2 = 4, + HintReadAhead3 = 8, + // Used for full pruning db to skip duplicate read - SkipDuplicateRead = 4, + SkipDuplicateRead = 16, } [Flags] diff --git a/src/Nethermind/Nethermind.Db.Rocks/Config/DbConfig.cs b/src/Nethermind/Nethermind.Db.Rocks/Config/DbConfig.cs index e08a4ac8a22..e0044b780c9 100644 --- a/src/Nethermind/Nethermind.Db.Rocks/Config/DbConfig.cs +++ b/src/Nethermind/Nethermind.Db.Rocks/Config/DbConfig.cs @@ -14,7 +14,7 @@ public class DbConfig : IDbConfig public bool SkipMemoryHintSetting { get; set; } = false; public ulong WriteBufferSize { get; set; } = (ulong)16.MiB(); - public uint WriteBufferNumber { get; set; } = 4; + public uint WriteBufferNumber { get; set; } = 2; public ulong BlockCacheSize { get; set; } = 0; public bool CacheIndexAndFilterBlocks { get; set; } = false; public int? MaxOpenFiles { get; set; } @@ -43,10 +43,15 @@ public class DbConfig : IDbConfig public long? MaxWriteBufferSizeToMaintain { get; set; } = null; public bool UseHashSkipListMemtable { get; set; } = false; public int BlockRestartInterval { get; set; } = 16; - - public ulong ReceiptsDbWriteBufferSize { get; set; } = (ulong)8.MiB(); - public uint ReceiptsDbWriteBufferNumber { get; set; } = 4; - public ulong ReceiptsDbBlockCacheSize { get; set; } = 0; + public double MemtablePrefixBloomSizeRatio { get; set; } = 0.02; + public bool AdviseRandomOnOpen { get; set; } = true; + public bool LevelCompactionDynamicLevelBytes { get; set; } = false; + public int BloomFilterBitsPerKey { get; set; } = 10; + public ulong BytesPerSync { get; set; } = 0; + + public ulong ReceiptsDbWriteBufferSize { get; set; } = (ulong)2.MiB(); + public uint ReceiptsDbWriteBufferNumber { get; set; } = 2; + public ulong ReceiptsDbBlockCacheSize { get; set; } = (ulong)8.MiB(); public bool ReceiptsDbCacheIndexAndFilterBlocks { get; set; } = false; public int? ReceiptsDbMaxOpenFiles { get; set; } public long? ReceiptsDbMaxBytesPerSec { get; set; } @@ -57,9 +62,9 @@ public class DbConfig : IDbConfig public ulong ReceiptsDbTargetFileSizeBase { get; set; } = (ulong)256.MiB(); public IDictionary? ReceiptsDbAdditionalRocksDbOptions { get; set; } - public ulong BlocksDbWriteBufferSize { get; set; } = (ulong)8.MiB(); - public uint BlocksDbWriteBufferNumber { get; set; } = 4; - public ulong BlocksDbBlockCacheSize { get; set; } = 0; + public ulong BlocksDbWriteBufferSize { get; set; } = (ulong)64.MiB(); + public uint BlocksDbWriteBufferNumber { get; set; } = 2; + public ulong BlocksDbBlockCacheSize { get; set; } = (ulong)32.MiB(); public bool BlocksDbCacheIndexAndFilterBlocks { get; set; } = false; public int? BlocksDbMaxOpenFiles { get; set; } public long? BlocksDbMaxBytesPerSec { get; set; } @@ -70,8 +75,8 @@ public class DbConfig : IDbConfig public IDictionary? BlocksDbAdditionalRocksDbOptions { get; set; } public ulong HeadersDbWriteBufferSize { get; set; } = (ulong)8.MiB(); - public uint HeadersDbWriteBufferNumber { get; set; } = 4; - public ulong HeadersDbBlockCacheSize { get; set; } = 0; + public uint HeadersDbWriteBufferNumber { get; set; } = 2; + public ulong HeadersDbBlockCacheSize { get; set; } = (ulong)32.MiB(); public bool HeadersDbCacheIndexAndFilterBlocks { get; set; } = false; public int? HeadersDbMaxOpenFiles { get; set; } public long? HeadersDbMaxBytesPerSec { get; set; } @@ -95,9 +100,9 @@ public class DbConfig : IDbConfig public IDictionary? BlockNumbersDbAdditionalRocksDbOptions { get; set; } public ulong? BlockNumbersDbMaxBytesForLevelBase { get; set; } = (ulong)16.MiB(); - public ulong BlockInfosDbWriteBufferSize { get; set; } = (ulong)8.MiB(); - public uint BlockInfosDbWriteBufferNumber { get; set; } = 4; - public ulong BlockInfosDbBlockCacheSize { get; set; } = 0; + public ulong BlockInfosDbWriteBufferSize { get; set; } = (ulong)4.MiB(); + public uint BlockInfosDbWriteBufferNumber { get; set; } = 2; + public ulong BlockInfosDbBlockCacheSize { get; set; } = (ulong)16.MiB(); public bool BlockInfosDbCacheIndexAndFilterBlocks { get; set; } = false; public int? BlockInfosDbMaxOpenFiles { get; set; } public long? BlockInfosDbMaxBytesPerSec { get; set; } @@ -119,8 +124,8 @@ public class DbConfig : IDbConfig public ulong? PendingTxsDbCompactionReadAhead { get; set; } public IDictionary? PendingTxsDbAdditionalRocksDbOptions { get; set; } - public ulong CodeDbWriteBufferSize { get; set; } = (ulong)2.MiB(); - public uint CodeDbWriteBufferNumber { get; set; } = 4; + public ulong CodeDbWriteBufferSize { get; set; } = (ulong)1.MiB(); + public uint CodeDbWriteBufferNumber { get; set; } = 2; public ulong CodeDbBlockCacheSize { get; set; } = 0; public bool CodeDbCacheIndexAndFilterBlocks { get; set; } = false; public int? CodeDbMaxOpenFiles { get; set; } @@ -176,13 +181,13 @@ public class DbConfig : IDbConfig public ulong? MetadataCompactionReadAhead { get; set; } public IDictionary? MetadataDbAdditionalRocksDbOptions { get; set; } - public ulong StateDbWriteBufferSize { get; set; } = (ulong)16.MB(); - public uint StateDbWriteBufferNumber { get; set; } = 4; + public ulong StateDbWriteBufferSize { get; set; } = (ulong)64.MB(); + public uint StateDbWriteBufferNumber { get; set; } = 2; public ulong StateDbBlockCacheSize { get; set; } public bool StateDbCacheIndexAndFilterBlocks { get; set; } public int? StateDbMaxOpenFiles { get; set; } public long? StateDbMaxBytesPerSec { get; set; } - public int? StateDbBlockSize { get; set; } = 4 * 1024; + public int? StateDbBlockSize { get; set; } = 16 * 1024; public bool? StateDbUseDirectReads { get; set; } = false; public bool? StateDbUseDirectIoForFlushAndCompactions { get; set; } = false; public ulong? StateDbCompactionReadAhead { get; set; } @@ -202,6 +207,9 @@ public class DbConfig : IDbConfig public long? StateDbMaxWriteBufferSizeToMaintain { get; set; } = null; public bool StateDbUseHashSkipListMemtable { get; set; } = false; public int StateDbBlockRestartInterval { get; set; } = 16; + public double StateDbMemtablePrefixBloomSizeRatio { get; set; } = 0.02; + public bool StateDbAdviseRandomOnOpen { get; set; } = true; + public int StateDbBloomFilterBitsPerKey { get; set; } = 10; public IDictionary? StateDbAdditionalRocksDbOptions { get; set; } public uint RecycleLogFileNum { get; set; } = 0; diff --git a/src/Nethermind/Nethermind.Db.Rocks/Config/IDbConfig.cs b/src/Nethermind/Nethermind.Db.Rocks/Config/IDbConfig.cs index 29598b79e80..a34019a7ade 100644 --- a/src/Nethermind/Nethermind.Db.Rocks/Config/IDbConfig.cs +++ b/src/Nethermind/Nethermind.Db.Rocks/Config/IDbConfig.cs @@ -44,6 +44,11 @@ public interface IDbConfig : IConfig long? MaxWriteBufferSizeToMaintain { get; set; } bool UseHashSkipListMemtable { get; set; } int BlockRestartInterval { get; set; } + double MemtablePrefixBloomSizeRatio { get; set; } + bool AdviseRandomOnOpen { get; set; } + bool LevelCompactionDynamicLevelBytes { get; set; } + int BloomFilterBitsPerKey { get; set; } + ulong BytesPerSync { get; set; } ulong ReceiptsDbWriteBufferSize { get; set; } uint ReceiptsDbWriteBufferNumber { get; set; } @@ -202,6 +207,9 @@ public interface IDbConfig : IConfig long? StateDbMaxWriteBufferSizeToMaintain { get; set; } bool StateDbUseHashSkipListMemtable { get; set; } int StateDbBlockRestartInterval { get; set; } + double StateDbMemtablePrefixBloomSizeRatio { get; set; } + bool StateDbAdviseRandomOnOpen { get; set; } + int StateDbBloomFilterBitsPerKey { get; set; } IDictionary? StateDbAdditionalRocksDbOptions { get; set; } /// diff --git a/src/Nethermind/Nethermind.Db.Rocks/Config/PerTableDbConfig.cs b/src/Nethermind/Nethermind.Db.Rocks/Config/PerTableDbConfig.cs index 683f4614ee2..cb2df0c25dd 100644 --- a/src/Nethermind/Nethermind.Db.Rocks/Config/PerTableDbConfig.cs +++ b/src/Nethermind/Nethermind.Db.Rocks/Config/PerTableDbConfig.cs @@ -65,6 +65,11 @@ public PerTableDbConfig(IDbConfig dbConfig, DbSettings dbSettings, string? colum public long? MaxWriteBufferSizeToMaintain => ReadConfig(nameof(MaxWriteBufferSizeToMaintain)); public bool UseHashSkipListMemtable => ReadConfig(nameof(UseHashSkipListMemtable)); public int BlockRestartInterval => ReadConfig(nameof(BlockRestartInterval)); + public double MemtablePrefixBloomSizeRatio => ReadConfig(nameof(MemtablePrefixBloomSizeRatio)); + public bool AdviseRandomOnOpen => ReadConfig(nameof(AdviseRandomOnOpen)); + public bool LevelCompactionDynamicLevelBytes => ReadConfig(nameof(LevelCompactionDynamicLevelBytes)); + public int BloomFilterBitsPerKey => ReadConfig(nameof(BloomFilterBitsPerKey)); + public ulong BytesPerSync => ReadConfig(nameof(BytesPerSync)); private T? ReadConfig(string propertyName) { diff --git a/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs b/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs index 6bee3b0fb61..140810b3f93 100644 --- a/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs +++ b/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Buffers.Binary; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; @@ -73,6 +74,8 @@ public class DbOnTheRocks : IDb, ITunableDb private readonly List _metricsUpdaters = new(); private readonly ManagedIterators _readaheadIterators = new(); + private readonly ManagedIterators _readaheadIterators2 = new(); + private readonly ManagedIterators _readaheadIterators3 = new(); internal long _allocatedSpan = 0; private long _totalReads; @@ -378,7 +381,11 @@ protected virtual void BuildOptions(PerTableDbConfig dbConfig, Options opt } tableOptions.SetFormatVersion(5); - tableOptions.SetFilterPolicy(BloomFilterPolicy.Create(10, false)); + if (dbConfig.BloomFilterBitsPerKey != 0) + { + // Bloom filter size for the sst files. + tableOptions.SetFilterPolicy(BloomFilterPolicy.Create(dbConfig.BloomFilterBitsPerKey, false)); + } // Default value is 16. // So each block consist of several "restart" and each "restart" is BlockRestartInterval number of key. @@ -413,6 +420,21 @@ protected virtual void BuildOptions(PerTableDbConfig dbConfig, Options opt // This reduces disk space utilization, but read of non-existent key will have to go through the database // instead of checking a bloom filter. options.SetOptimizeFiltersForHits(dbConfig.OptimizeFiltersForHits ? 1 : 0); + if (dbConfig.RowCacheSize > 0) + { + _rowCache = RocksDbSharp.Native.Instance.rocksdb_cache_create_lru(new UIntPtr(dbConfig.RowCacheSize.Value)); + _rocksDbNative.rocksdb_options_set_row_cache(options.Handle, _rowCache.Value); + } + + /* + * Multi-Threaded Compactions + * Compactions are needed to remove multiple copies of the same key that may occur if an application overwrites an existing key. Compactions also process deletions of keys. Compactions may occur in multiple threads if configured appropriately. + * The entire database is stored in a set of sstfiles. When a memtable is full, its content is written out to a file in Level-0 (L0). RocksDB removes duplicate and overwritten keys in the memtable when it is flushed to a file in L0. Some files are periodically read in and merged to form larger files - this is called compaction. + * The overall write throughput of an LSM database directly depends on the speed at which compactions can occur, especially when the data is stored in fast storage like SSD or RAM. RocksDB may be configured to issue concurrent compaction requests from multiple threads. It is observed that sustained write rates may increase by as much as a factor of 10 with multi-threaded compaction when the database is on SSDs, as compared to single-threaded compactions. + * TKS: Observed 500MB/s compared to ~100MB/s between multithreaded and single thread compactions on my machine (processor count is returning 12 for 6 cores with hyperthreading) + * TKS: CPU goes to insane 30% usage on idle - compacting only app + */ + options.SetMaxBackgroundCompactions(Environment.ProcessorCount); if (dbConfig.DisableCompression == true) { @@ -441,8 +463,11 @@ protected virtual void BuildOptions(PerTableDbConfig dbConfig, Options opt // But read does go through the write buffer first, before going through the rowcache (or is it before memtable?) // block cache and then finally the LSM/SST files. #region WriteBuffer + + // The memtable have a bloom filter whose size depends on the `prefix_bloom_size_ratio`, which is not actually + // just for prefix. _rocksDbNative.rocksdb_options_set_memtable_whole_key_filtering(options.Handle, true); - _rocksDbNative.rocksdb_options_set_memtable_prefix_bloom_size_ratio(options.Handle, 0.02); + _rocksDbNative.rocksdb_options_set_memtable_prefix_bloom_size_ratio(options.Handle, dbConfig.MemtablePrefixBloomSizeRatio); // Note: Write buffer and write buffer num are modified by MemoryHintMan. ulong writeBufferSize = dbConfig.WriteBufferSize; @@ -510,7 +535,8 @@ protected virtual void BuildOptions(PerTableDbConfig dbConfig, Options opt // This one set the threadpool env, so its actually different from the above two options.IncreaseParallelism(Environment.ProcessorCount); - options.SetLevelCompactionDynamicLevelBytes(false); + // Set to true to enable dynamic level bytes. Its drastically different than standard compaction. + options.SetLevelCompactionDynamicLevelBytes(dbConfig.LevelCompactionDynamicLevelBytes); // VERY important to reduce stalls. Allow L0->L1 compaction to happen with multiple thread. _rocksDbNative.rocksdb_options_set_max_subcompactions(options.Handle, (uint)Environment.ProcessorCount); @@ -526,6 +552,9 @@ protected virtual void BuildOptions(PerTableDbConfig dbConfig, Options opt // tree which means they are more cacheable, so at that point you are trading CPU for cacheability. options.SetMaxBytesForLevelMultiplier(dbConfig.MaxBytesForLevelMultiplier); + // How many bytes before the SST files get synced to disk. + options.SetBytesPerSync(dbConfig.BytesPerSync); + // For reducing temporarily used disk space but come at the cost of parallel compaction. if (dbConfig.MaxCompactionBytes.HasValue) { @@ -558,7 +587,10 @@ protected virtual void BuildOptions(PerTableDbConfig dbConfig, Options opt } options.SetCreateIfMissing(); - options.SetAdviseRandomOnOpen(true); + + // From looking into the source code, this does not have an effect on Windows. + options.SetAdviseRandomOnOpen(dbConfig.AdviseRandomOnOpen); + if (dbConfig.MaxOpenFiles.HasValue) { options.SetMaxOpenFiles(dbConfig.MaxOpenFiles.Value); @@ -645,7 +677,17 @@ public byte[]? this[ReadOnlySpan key] public byte[]? Get(ReadOnlySpan key, ReadFlags flags = ReadFlags.None) { - return GetWithColumnFamily(key, null, _readaheadIterators, flags); + ManagedIterators iterators = _readaheadIterators; + if ((flags & ReadFlags.HintReadAhead2) != 0) + { + iterators = _readaheadIterators2; + } + else if ((flags & ReadFlags.HintReadAhead3) != 0) + { + iterators = _readaheadIterators3; + } + + return GetWithColumnFamily(key, null, iterators, flags); } internal byte[]? GetWithColumnFamily(ReadOnlySpan key, ColumnFamilyHandle? cf, ManagedIterators readaheadIterators, ReadFlags flags = ReadFlags.None) @@ -664,6 +706,12 @@ public byte[]? this[ReadOnlySpan key] } Iterator iterator = readaheadIterators.Value!; + + if (iterator.Valid() && TryCloseReadAhead(iterator, key, out byte[]? closeRes)) + { + return closeRes; + } + iterator.Seek(key); if (iterator.Valid() && Bytes.AreEqual(iterator.GetKeySpan(), key)) { @@ -680,6 +728,72 @@ public byte[]? this[ReadOnlySpan key] } } + /// + /// iterator.Next() is about 10 to 20 times faster than iterator.Seek(). + /// Here we attempt to do that first. To prevent futile attempt some logic is added to approximately detect + /// if the requested key is too far from the current key and skip this entirely. + /// + /// + /// + /// + private bool TryCloseReadAhead(Iterator iterator, ReadOnlySpan key, out byte[]? result) + { + // Probably hash db. Can't really do this with hashdb. Even with batched trie visitor, its going to skip a lot. + if (key.Length <= 32) + { + result = null; + return false; + } + + iterator.Next(); + ReadOnlySpan currentKey = iterator.GetKeySpan(); + int compareResult = currentKey.SequenceCompareTo(key); + if (compareResult == 0) + { + result = iterator.Value(); + return true; // This happens A LOT. + } + + result = null; + if (compareResult > 0) + { + return false; + } + + // This happens, 0.5% of the time. + // This is only useful for state as storage have way too different different address range between different + // contract. That said, there isn't any real good threshold. Threshold is for some reasonably high value + // above the average distance. + ulong currentKeyInt = BinaryPrimitives.ReadUInt64BigEndian(currentKey); + ulong requestedKeyInt = BinaryPrimitives.ReadUInt64BigEndian(key); + ulong distance = requestedKeyInt - currentKeyInt; + if (distance > 1_000_000_000) + { + return false; + } + + for (int i = 0; i < 5 && compareResult < 0; i++) + { + iterator.Next(); + compareResult = iterator.GetKeySpan().SequenceCompareTo(key); + } + + if (compareResult == 0) + { + result = iterator.Value(); + return true; + } + + if (compareResult > 0) + { + // We've skipped it somehow + result = null; + return true; + } + + return false; + } + public void Set(ReadOnlySpan key, byte[]? value, WriteFlags flags = WriteFlags.None) { SetWithColumnFamily(key, null, value, flags); @@ -1217,6 +1331,8 @@ private void ReleaseUnmanagedResources() } _readaheadIterators.DisposeAll(); + _readaheadIterators2.DisposeAll(); + _readaheadIterators3.DisposeAll(); _db.Dispose(); diff --git a/src/Nethermind/Nethermind.Db/IPruningConfig.cs b/src/Nethermind/Nethermind.Db/IPruningConfig.cs index 354025bc1d1..ed3396a3d59 100755 --- a/src/Nethermind/Nethermind.Db/IPruningConfig.cs +++ b/src/Nethermind/Nethermind.Db/IPruningConfig.cs @@ -92,4 +92,7 @@ public interface IPruningConfig : IConfig [ConfigItem(Description = "Whether to enables available disk space check.", DefaultValue = "true")] bool AvailableSpaceCheckEnabled { get; set; } + + [ConfigItem(Description = "[TECHNICAL] Number of past persisted keys to keep track off for possible pruning.", DefaultValue = "1000000")] + int TrackedPastKeyCount { get; set; } } diff --git a/src/Nethermind/Nethermind.Db/MemDb.cs b/src/Nethermind/Nethermind.Db/MemDb.cs index 0baf1dce4d1..12712c4023b 100644 --- a/src/Nethermind/Nethermind.Db/MemDb.cs +++ b/src/Nethermind/Nethermind.Db/MemDb.cs @@ -141,6 +141,11 @@ public virtual void Set(ReadOnlySpan key, byte[]? value, WriteFlags flags } WritesCount++; + if (value == null) + { + _db.TryRemove(key, out _); + return; + } _db[key] = value; } } diff --git a/src/Nethermind/Nethermind.Db/PruningConfig.cs b/src/Nethermind/Nethermind.Db/PruningConfig.cs index 102720f2a6c..d6aa2f8d190 100755 --- a/src/Nethermind/Nethermind.Db/PruningConfig.cs +++ b/src/Nethermind/Nethermind.Db/PruningConfig.cs @@ -32,5 +32,6 @@ public bool Enabled public int FullPruningMinimumDelayHours { get; set; } = 240; public FullPruningCompletionBehavior FullPruningCompletionBehavior { get; set; } = FullPruningCompletionBehavior.None; public bool AvailableSpaceCheckEnabled { get; set; } = true; + public int TrackedPastKeyCount { get; set; } = 1000000; } } diff --git a/src/Nethermind/Nethermind.Init/InitializeStateDb.cs b/src/Nethermind/Nethermind.Init/InitializeStateDb.cs index ded05772ba8..7b08ef652e0 100644 --- a/src/Nethermind/Nethermind.Init/InitializeStateDb.cs +++ b/src/Nethermind/Nethermind.Init/InitializeStateDb.cs @@ -17,8 +17,6 @@ using Nethermind.Db.FullPruning; using Nethermind.Init.Steps; using Nethermind.JsonRpc.Converters; -using Nethermind.JsonRpc.Modules.DebugModule; -using Nethermind.JsonRpc.Modules.Trace; using Nethermind.Logging; using Nethermind.Serialization.Json; using Nethermind.State; @@ -76,9 +74,9 @@ public Task Execute(CancellationToken cancellationToken) setApi.WitnessRepository = NullWitnessCollector.Instance; } + _api.NodeStorageFactory.DetectCurrentKeySchemeFrom(getApi.DbProvider.StateDb); IKeyValueStore codeDb = getApi.DbProvider.CodeDb .WitnessedBy(witnessCollector); - IKeyValueStoreWithBatching stateWitnessedBy = getApi.DbProvider.StateDb.WitnessedBy(witnessCollector); IPersistenceStrategy persistenceStrategy; IPruningStrategy pruningStrategy; @@ -92,7 +90,8 @@ public Task Execute(CancellationToken cancellationToken) persistenceStrategy = persistenceStrategy.Or(triggerPersistenceStrategy); } - pruningStrategy = Prune.WhenCacheReaches(pruningConfig.CacheMb.MB()); // TODO: memory hint should define this + pruningStrategy = Prune.WhenCacheReaches(pruningConfig.CacheMb.MB()) // TODO: memory hint should define this + .TrackingPastKeys(pruningConfig.TrackedPastKeyCount); } else { @@ -100,14 +99,16 @@ public Task Execute(CancellationToken cancellationToken) persistenceStrategy = Persist.EveryBlock; } + INodeStorage mainNodeStorage = _api.NodeStorageFactory.WrapKeyValueStore(stateWitnessedBy); + TrieStore trieStore = syncConfig.TrieHealing ? new HealingTrieStore( - stateWitnessedBy, + mainNodeStorage, pruningStrategy, persistenceStrategy, getApi.LogManager) : new TrieStore( - stateWitnessedBy, + mainNodeStorage, pruningStrategy, persistenceStrategy, getApi.LogManager); @@ -167,7 +168,7 @@ public Task Execute(CancellationToken cancellationToken) worldState.StateRoot = getApi.BlockTree.Head.StateRoot; } - InitializeFullPruning(pruningConfig, initConfig, _api, stateManager.GlobalStateReader, trieStore); + InitializeFullPruning(pruningConfig, initConfig, _api, stateManager.GlobalStateReader, mainNodeStorage, trieStore); return Task.CompletedTask; } @@ -182,7 +183,8 @@ private static void InitializeFullPruning( IInitConfig initConfig, INethermindApi api, IStateReader stateReader, - TrieStore trieStore) + INodeStorage mainNodeStorage, + IPruningTrieStore trieStore) { IPruningTrigger? CreateAutomaticTrigger(string dbPath) { @@ -212,9 +214,19 @@ private static void InitializeFullPruning( } IDriveInfo? drive = api.FileSystem.GetDriveInfos(pruningDbPath).FirstOrDefault(); - FullPruner pruner = new(fullPruningDb, api.PruningTrigger, pruningConfig, api.BlockTree!, - stateReader, api.ProcessExit!, ChainSizes.CreateChainSizeInfo(api.ChainSpec.ChainId), - drive, trieStore, api.LogManager); + FullPruner pruner = new( + fullPruningDb, + api.NodeStorageFactory, + mainNodeStorage, + api.PruningTrigger, + pruningConfig, + api.BlockTree!, + stateReader, + api.ProcessExit!, + ChainSizes.CreateChainSizeInfo(api.ChainSpec.ChainId), + drive, + trieStore, + api.LogManager); api.DisposeStack.Push(pruner); } } diff --git a/src/Nethermind/Nethermind.Init/MemoryHintMan.cs b/src/Nethermind/Nethermind.Init/MemoryHintMan.cs index 5fa5c3da2a0..b12943d09e9 100644 --- a/src/Nethermind/Nethermind.Init/MemoryHintMan.cs +++ b/src/Nethermind/Nethermind.Init/MemoryHintMan.cs @@ -67,7 +67,7 @@ public void SetMemoryAllowances( AssignTrieCacheMemory(dbConfig); _remainingMemory -= TrieCacheMemory; if (_logger.IsInfo) _logger.Info($" Trie memory: {TrieCacheMemory / 1000 / 1000,5} MB"); - UpdateDbConfig(cpuCount, syncConfig, dbConfig, initConfig); + UpdateDbConfig(dbConfig, initConfig); _remainingMemory -= DbMemory; if (_logger.IsInfo) _logger.Info($" DB memory: {DbMemory / 1000 / 1000,5} MB"); @@ -159,7 +159,7 @@ private void AssignFastBlocksMemory(ISyncConfig syncConfig) } } - private void UpdateDbConfig(uint cpuCount, ISyncConfig syncConfig, IDbConfig dbConfig, IInitConfig initConfig) + private void UpdateDbConfig(IDbConfig dbConfig, IInitConfig initConfig) { if (initConfig.DiagnosticMode == DiagnosticMode.MemDb) { @@ -170,101 +170,7 @@ private void UpdateDbConfig(uint cpuCount, ISyncConfig syncConfig, IDbConfig dbC if (dbConfig.SkipMemoryHintSetting) return; DbMemory = _remainingMemory; - long remaining = DbMemory; - DbNeeds dbNeeds = GetHeaderNeeds(cpuCount); - DbGets dbGets = GiveItWhatYouCan(dbNeeds, DbMemory, remaining); - remaining -= dbGets.CacheMem + dbGets.Buffers * dbGets.SingleBufferMem; - dbConfig.HeadersDbWriteBufferNumber = dbGets.Buffers; - dbConfig.HeadersDbWriteBufferSize = (ulong)dbGets.SingleBufferMem; - dbConfig.HeadersDbBlockCacheSize = (ulong)dbGets.CacheMem; - - dbNeeds = GetBlocksNeeds(cpuCount); - dbGets = GiveItWhatYouCan(dbNeeds, DbMemory, remaining); - remaining -= dbGets.CacheMem + dbGets.Buffers * dbGets.SingleBufferMem; - dbConfig.BlocksDbWriteBufferNumber = dbGets.Buffers; - dbConfig.BlocksDbWriteBufferSize = (ulong)dbGets.SingleBufferMem; - dbConfig.BlocksDbBlockCacheSize = (ulong)dbGets.CacheMem; - - dbNeeds = GetBlockInfosNeeds(cpuCount); - dbGets = GiveItWhatYouCan(dbNeeds, DbMemory, remaining); - remaining -= dbGets.CacheMem + dbGets.Buffers * dbGets.SingleBufferMem; - dbConfig.BlockInfosDbWriteBufferNumber = dbGets.Buffers; - dbConfig.BlockInfosDbWriteBufferSize = (ulong)dbGets.SingleBufferMem; - dbConfig.BlockInfosDbBlockCacheSize = (ulong)dbGets.CacheMem; - - dbNeeds = GetReceiptsNeeds(cpuCount); - dbGets = GiveItWhatYouCan(dbNeeds, DbMemory, remaining); - remaining -= dbGets.CacheMem + dbGets.Buffers * dbGets.SingleBufferMem; - dbConfig.ReceiptsDbWriteBufferNumber = dbGets.Buffers; - dbConfig.ReceiptsDbWriteBufferSize = (ulong)dbGets.SingleBufferMem; - dbConfig.ReceiptsDbBlockCacheSize = (ulong)dbGets.CacheMem; - - dbNeeds = GetCodeNeeds(cpuCount); - dbGets = GiveItWhatYouCan(dbNeeds, DbMemory, remaining); - remaining -= dbGets.CacheMem + dbGets.Buffers * dbGets.SingleBufferMem; - dbConfig.CodeDbWriteBufferNumber = dbGets.Buffers; - dbConfig.CodeDbWriteBufferSize = (ulong)dbGets.SingleBufferMem; - dbConfig.CodeDbBlockCacheSize = (ulong)dbGets.CacheMem; - - dbNeeds = GetPendingTxNeeds(cpuCount); - dbGets = GiveItWhatYouCan(dbNeeds, DbMemory, remaining); - remaining -= dbGets.CacheMem + dbGets.Buffers * dbGets.SingleBufferMem; - dbConfig.PendingTxsDbWriteBufferNumber = dbGets.Buffers; - dbConfig.PendingTxsDbWriteBufferSize = (ulong)dbGets.SingleBufferMem; - dbConfig.PendingTxsDbBlockCacheSize = (ulong)dbGets.CacheMem; - - dbNeeds = GetStateNeeds(cpuCount); - dbGets = GiveItWhatYouCan(dbNeeds, DbMemory, remaining); - remaining -= dbGets.CacheMem + dbGets.Buffers * dbGets.SingleBufferMem; - dbConfig.StateDbWriteBufferNumber = dbGets.Buffers; - dbConfig.StateDbWriteBufferSize = (ulong)dbGets.SingleBufferMem; - dbConfig.StateDbBlockCacheSize = (ulong)dbGets.CacheMem; - - dbConfig.SharedBlockCacheSize = (ulong)remaining; - } - - private DbGets GiveItWhatYouCan(DbNeeds dbNeeds, long memoryHint, long remaining) - { - uint buffers = dbNeeds.PreferredBuffers; // this is fine for now - decimal maxPercentage = Math.Min((decimal)remaining / memoryHint, dbNeeds.PreferredMemoryPercentage); - long availableMemory = remaining; - long minBufferMem = buffers * dbNeeds.PreferredMinBufferMemory; - long minCacheMem = dbNeeds.PreferredMinMemory; - long maxBufferMem = buffers * dbNeeds.PreferredMaxBufferMemory; - long minMemory = minBufferMem + minCacheMem; - if (minMemory > availableMemory) - { - throw new ArgumentException($"Memory hint of {TotalMemory} is not enough to cover DB requirements."); - } - - long maxWantedMemory = Math.Max(minMemory, (long)(memoryHint * maxPercentage)); - long availableDynamic = minMemory >= maxWantedMemory ? 0L : maxWantedMemory - minMemory; - long availableForBuffer = (long)(availableDynamic * 0.2m); - long bufferDynamic = Math.Min(maxBufferMem, availableForBuffer); - long bufferMem = minBufferMem + bufferDynamic; - long cacheDynamic = availableDynamic - bufferDynamic; - long cacheMem = Math.Min(dbNeeds.PreferredMaxMemory, minCacheMem + cacheDynamic); - - Debug.Assert(bufferDynamic + cacheDynamic <= availableDynamic, "dynamic exceeded"); - Debug.Assert(bufferMem + cacheMem <= maxWantedMemory, "max wanted exceeded"); - Debug.Assert(bufferMem + cacheMem <= availableMemory, "available exceeded"); - - DbGets dbGets = new DbGets(buffers, bufferMem / buffers, cacheMem); - return dbGets; - } - - private struct DbGets - { - public DbGets(uint buffers, long singleBufferMem, long cacheMem) - { - Buffers = buffers; - SingleBufferMem = singleBufferMem; - CacheMem = cacheMem; - } - - public uint Buffers { get; set; } - public long SingleBufferMem { get; set; } - public long CacheMem { get; set; } + dbConfig.SharedBlockCacheSize = (ulong)DbMemory; } private struct DbNeeds @@ -293,91 +199,6 @@ public DbNeeds( public decimal PreferredMemoryPercentage { get; set; } } - private static DbNeeds GetStateNeeds(uint cpuCount) - { - uint preferredBuffers = Math.Min(cpuCount, 2u); - // remove optimize for point lookup here? - return new DbNeeds( - preferredBuffers, - 1.MB(), // min buffer size - 64.MB(), // max buffer size - 0, // min block cache - 0, // max block cache - 1m); // db memory % - } - - private static DbNeeds GetBlockInfosNeeds(uint cpuCount) - { - uint preferredBuffers = Math.Min(cpuCount, 2u); - // remove optimize for point lookup here? - return new DbNeeds( - preferredBuffers, - 1.MB(), // min buffer size - 8.MB(), // max buffer size - 1.MB(), // min block cache - 512.MB(), // max block cache - 0.02m); // db memory % - } - - private static DbNeeds GetHeaderNeeds(uint cpuCount) - { - uint preferredBuffers = Math.Min(cpuCount, 2u); - return new DbNeeds( - preferredBuffers, - 4.MB(), // min buffer size - 16.MB(), // max buffer size - 1.MB(), // min block cache - 1.GB(), // max block cache - 0.05m); // db memory % - } - - private static DbNeeds GetBlocksNeeds(uint cpuCount) - { - uint preferredBuffers = Math.Min(cpuCount, 2u); - return new DbNeeds( - preferredBuffers, - 4.MB(), // min buffer size - 64.MB(), // max buffer size - 8.MB(), // min block cache - 2.GB(), // max block cache - 0.04m); // db memory % - } - - private static DbNeeds GetReceiptsNeeds(uint cpuCount) - { - uint preferredBuffers = Math.Min(cpuCount, 2u); - return new DbNeeds( - preferredBuffers, - 2.MB(), // min buffer size - 64.MB(), // max buffer size - 8.MB(), // min block cache - 2.GB(), // max block cache - 0.01m); // db memory % - } - - private static DbNeeds GetPendingTxNeeds(uint cpuCount) - { - return new DbNeeds( - 4, - 1.MB(), // min buffer size - 16.MB(), // max buffer size - 2.MB(), // min block cache - 128.MB(), // max block cache - 0.01m); // db memory % - } - - private static DbNeeds GetCodeNeeds(uint cpuCount) - { - uint preferredBuffers = Math.Min(cpuCount, 2u); - return new DbNeeds( - preferredBuffers, - 1.MB(), // min buffer size - 4.MB(), // max buffer size - 0, // min block cache - 0, // max block cache - 0); // db memory % - } - private void AssignNettyMemory(INetworkConfig networkConfig, uint cpuCount) { ValidateCpuCount(cpuCount); diff --git a/src/Nethermind/Nethermind.Init/Steps/InitDatabase.cs b/src/Nethermind/Nethermind.Init/Steps/InitDatabase.cs index b875c96888f..b02c74bbd1f 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitDatabase.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitDatabase.cs @@ -15,6 +15,8 @@ using Nethermind.Db.Rpc; using Nethermind.JsonRpc.Client; using Nethermind.Logging; +using Nethermind.Trie; +using Nethermind.Trie.Pruning; using Nethermind.TxPool; namespace Nethermind.Init.Steps @@ -88,6 +90,8 @@ private void InitDbApi(IInitConfig initConfig, IDbConfig dbConfig, bool storeRec _api.DbFactory = new RocksDbFactory(dbConfig, _api.LogManager, initConfig.BaseDbPath); break; } + + _api.NodeStorageFactory = new NodeStorageFactory(initConfig.StateDbKeyScheme, _api.LogManager); } } } diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeNetwork.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeNetwork.cs index faa3742db87..dbdaf2269d2 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeNetwork.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeNetwork.cs @@ -144,6 +144,7 @@ private async Task Initialize(CancellationToken cancellationToken) _api.Synchronizer ??= new Synchronizer( _api.DbProvider, + _api.NodeStorageFactory.WrapKeyValueStore(_api.DbProvider.StateDb), _api.SpecProvider!, _api.BlockTree, _api.ReceiptStorage!, diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Eip1186/ProofConverterTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Eip1186/ProofConverterTests.cs index 18b81716c4b..cb0b0637829 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Eip1186/ProofConverterTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Eip1186/ProofConverterTests.cs @@ -32,7 +32,7 @@ public void Storage_proofs_have_values_set_complex_3_setup() IDb memDb = new MemDb(); TrieStore trieStore = new(memDb, LimboLogs.Instance); StateTree tree = new(trieStore, LimboLogs.Instance); - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(TestItem.AddressA.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); storageTree.Set(Keccak.Compute(a).Bytes, Rlp.Encode(Bytes.FromHexString("0xab12000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(b).Bytes, Rlp.Encode(Bytes.FromHexString("0xab34000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(c).Bytes, Rlp.Encode(Bytes.FromHexString("0xab56000000000000000000000000000000000000000000000000000000000000000000000000000000"))); @@ -66,7 +66,7 @@ public void Does_not_fail_when_proofs_are_longer_than_number_of_proofs_regressio IDb memDb = new MemDb(); TrieStore trieStore = new(memDb, LimboLogs.Instance); StateTree tree = new(trieStore, LimboLogs.Instance); - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(TestItem.AddressA.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); storageTree.Set(Keccak.Compute(a).Bytes, Rlp.Encode(Bytes.FromHexString("0xab12000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(b).Bytes, Rlp.Encode(Bytes.FromHexString("0xab34000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(c).Bytes, Rlp.Encode(Bytes.FromHexString("0xab56000000000000000000000000000000000000000000000000000000000000000000000000000000"))); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs index aa6a468df6a..fb7920c2d86 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs @@ -429,6 +429,7 @@ public Task InitSynchronization() MergeSynchronizer synchronizer = new MergeSynchronizer( _api.DbProvider, + _api.NodeStorageFactory.WrapKeyValueStore(_api.DbProvider.StateDb), _api.SpecProvider!, _api.BlockTree!, _api.ReceiptStorage!, diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeSynchronizer.cs b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeSynchronizer.cs index 2be83e23cd7..38e65be39e7 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeSynchronizer.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeSynchronizer.cs @@ -18,6 +18,7 @@ using Nethermind.Synchronization.FastBlocks; using Nethermind.Synchronization.ParallelSync; using Nethermind.Synchronization.Peers; +using Nethermind.Trie; using Nethermind.Trie.Pruning; namespace Nethermind.Merge.Plugin.Synchronization; @@ -40,6 +41,7 @@ public class MergeSynchronizer : Synchronizer public MergeSynchronizer( IDbProvider dbProvider, + INodeStorage nodeStorage, ISpecProvider specProvider, IBlockTree blockTree, IReceiptStorage receiptStorage, @@ -59,6 +61,7 @@ public MergeSynchronizer( ILogManager logManager) : base( dbProvider, + nodeStorage, specProvider, blockTree, receiptStorage, diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs index 20c340517d5..7db0dfe4b12 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs @@ -150,6 +150,7 @@ public Task InitSynchronization() _api.Synchronizer = new MergeSynchronizer( _api.DbProvider, + _api.NodeStorageFactory.WrapKeyValueStore(_api.DbProvider.StateDb), _api.SpecProvider!, _api.BlockTree!, _api.ReceiptStorage!, diff --git a/src/Nethermind/Nethermind.Runner.Test/Ethereum/ContextWithMocks.cs b/src/Nethermind/Nethermind.Runner.Test/Ethereum/ContextWithMocks.cs index 6d8f3484754..4224aca2f0d 100644 --- a/src/Nethermind/Nethermind.Runner.Test/Ethereum/ContextWithMocks.cs +++ b/src/Nethermind/Nethermind.Runner.Test/Ethereum/ContextWithMocks.cs @@ -43,6 +43,7 @@ using Nethermind.Sockets; using Nethermind.Specs; using Nethermind.Synchronization.SnapSync; +using Nethermind.Trie; using NSubstitute; using Nethermind.Blockchain.Blocks; @@ -123,6 +124,7 @@ public static NethermindApi ContextWithMocks() }; api.WorldStateManager = new ReadOnlyWorldStateManager(api.DbProvider, Substitute.For(), LimboLogs.Instance); + api.NodeStorageFactory = new NodeStorageFactory(INodeStorage.KeyScheme.HalfPath, LimboLogs.Instance); return api; } } diff --git a/src/Nethermind/Nethermind.Runner.Test/MemoryHintManTests.cs b/src/Nethermind/Nethermind.Runner.Test/MemoryHintManTests.cs index f1b069ee8dd..bc4149133e1 100755 --- a/src/Nethermind/Nethermind.Runner.Test/MemoryHintManTests.cs +++ b/src/Nethermind/Nethermind.Runner.Test/MemoryHintManTests.cs @@ -97,49 +97,8 @@ public void Db_size_are_computed_correctly( syncConfig.FastSync = fastSync; syncConfig.FastBlocks = fastBlocks; - IDbConfig dbConfig = _dbConfig; - - ulong totalForHeaders = dbConfig.HeadersDbBlockCacheSize - + dbConfig.HeadersDbWriteBufferNumber * dbConfig.HeadersDbWriteBufferSize; - - ulong totalForBlocks = dbConfig.BlocksDbBlockCacheSize - + dbConfig.BlocksDbWriteBufferNumber * dbConfig.BlocksDbWriteBufferSize; - - ulong totalForInfos = dbConfig.BlockInfosDbBlockCacheSize - + dbConfig.BlockInfosDbWriteBufferNumber * dbConfig.BlockInfosDbWriteBufferSize; - - ulong totalForReceipts = dbConfig.ReceiptsDbBlockCacheSize - + dbConfig.ReceiptsDbWriteBufferNumber * dbConfig.ReceiptsDbWriteBufferSize; - - ulong totalForCode = dbConfig.CodeDbBlockCacheSize - + dbConfig.CodeDbWriteBufferNumber * dbConfig.CodeDbWriteBufferSize; - - ulong totalForPending = dbConfig.PendingTxsDbBlockCacheSize - + dbConfig.PendingTxsDbWriteBufferNumber * dbConfig.PendingTxsDbWriteBufferSize; - - ulong totalForState = dbConfig.BlockCacheSize - + dbConfig.WriteBufferNumber * dbConfig.WriteBufferSize; - - ulong totalMem = dbConfig.SharedBlockCacheSize - + totalForState - + totalForHeaders - + totalForBlocks - + totalForInfos - + totalForReceipts - + totalForCode - + totalForPending; - - if (_initConfig.DiagnosticMode != DiagnosticMode.MemDb) - { - // some rounding differences are OK - totalMem.Should().BeGreaterThan((ulong)((memoryHint - 200.MB()) * 0.6)); - totalMem.Should().BeLessThan((ulong)((memoryHint - 200.MB()) * 0.9)); - } - else - { - _memoryHintMan.DbMemory.Should().BeGreaterThan((long)((memoryHint - 100.MB()) * 0.6)); - _memoryHintMan.DbMemory.Should().BeLessThan((long)((memoryHint - 100.MB()) * 0.9)); - } + _memoryHintMan.DbMemory.Should().BeGreaterThan((long)((memoryHint - 100.MB()) * 0.5)); + _memoryHintMan.DbMemory.Should().BeLessThan((long)((memoryHint - 100.MB()) * 0.9)); } [TestCase(100 * GB, 16u, -1)] diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ValueRlpStream.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ValueRlpStream.cs index 36706fbaa2d..d0d12a307fa 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ValueRlpStream.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ValueRlpStream.cs @@ -106,13 +106,13 @@ public readonly (int PrefixLength, int ContentLength) PeekPrefixAndContentLength if ((uint)lengthOfLength > 4) { // strange but needed to pass tests - seems that spec gives int64 length and tests int32 length - throw new RlpException("Expected length of length less or equal 4"); + ThrowSequenceLengthTooLong(); } int length = PeekDeserializeLength(1, lengthOfLength); if (length < 56) { - throw new RlpException($"Expected length greater or equal 56 and was {length}"); + ThrowLengthTooLong(length); } result = (lengthOfLength + 1, length); @@ -127,7 +127,7 @@ public readonly (int PrefixLength, int ContentLength) PeekPrefixAndContentLength int contentLength = PeekDeserializeLength(1, lengthOfContentLength); if (contentLength < 56) { - throw new RlpException($"Expected length greater or equal 56 and got {contentLength}"); + ThrowLengthTooLong(contentLength); } @@ -135,6 +135,16 @@ public readonly (int PrefixLength, int ContentLength) PeekPrefixAndContentLength } return result; + + static void ThrowSequenceLengthTooLong() + { + throw new RlpException("Expected length of length less or equal 4"); + } + + static void ThrowLengthTooLong(int length) + { + throw new RlpException($"Expected length greater or equal 56 and was {length}"); + } } public int ReadSequenceLength() diff --git a/src/Nethermind/Nethermind.State.Test/NodeTests.cs b/src/Nethermind/Nethermind.State.Test/NodeTests.cs index c0148a241c2..ed45d2b1e28 100644 --- a/src/Nethermind/Nethermind.State.Test/NodeTests.cs +++ b/src/Nethermind/Nethermind.State.Test/NodeTests.cs @@ -34,8 +34,9 @@ public void Two_children_store_encode() node.SetChild(1, new TrieNode(NodeType.Leaf, TestItem.KeccakB)); ITrieNodeResolver tree = BuildATreeFromNode(node); TrieNode decoded = new(NodeType.Unknown, node.Keccak); - decoded.ResolveNode(tree); - decoded.RlpEncode(tree); + decoded.ResolveNode(tree, TreePath.Empty); + TreePath emptyPath = TreePath.Empty; + decoded.RlpEncode(tree, ref emptyPath); } [Test] @@ -46,8 +47,9 @@ public void Two_children_store_resolve_encode() node.SetChild(1, new TrieNode(NodeType.Leaf, TestItem.KeccakB)); ITrieNodeResolver tree = BuildATreeFromNode(node); TrieNode decoded = new(NodeType.Unknown, node.Keccak); - decoded.ResolveNode(tree); - decoded.RlpEncode(tree); + decoded.ResolveNode(tree, TreePath.Empty); + TreePath emptyPath = TreePath.Empty; + decoded.RlpEncode(tree, ref emptyPath); } [Test] @@ -58,9 +60,10 @@ public void Two_children_store_resolve_get1_encode() node.SetChild(1, new TrieNode(NodeType.Leaf, TestItem.KeccakB)); ITrieNodeResolver tree = BuildATreeFromNode(node); TrieNode decoded = new(NodeType.Unknown, node.Keccak); - decoded.ResolveNode(tree); - TrieNode child0 = decoded.GetChild(tree, 0); - decoded.RlpEncode(tree); + decoded.ResolveNode(tree, TreePath.Empty); + TreePath emptyPath = TreePath.Empty; + TrieNode child0 = decoded.GetChild(tree, ref emptyPath, 0); + decoded.RlpEncode(tree, ref emptyPath); } [Test] @@ -71,9 +74,10 @@ public void Two_children_store_resolve_getnull_encode() node.SetChild(1, new TrieNode(NodeType.Leaf, TestItem.KeccakB)); ITrieNodeResolver tree = BuildATreeFromNode(node); TrieNode decoded = new(NodeType.Unknown, node.Keccak); - decoded.ResolveNode(tree); - TrieNode child = decoded.GetChild(tree, 3); - decoded.RlpEncode(tree); + decoded.ResolveNode(tree, TreePath.Empty); + TreePath emptyPath = TreePath.Empty; + TrieNode child = decoded.GetChild(tree, ref emptyPath, 3); + decoded.RlpEncode(tree, ref emptyPath); } [Test] @@ -84,10 +88,11 @@ public void Two_children_store_resolve_update_encode() node.SetChild(1, new TrieNode(NodeType.Leaf, TestItem.KeccakB)); ITrieNodeResolver tree = BuildATreeFromNode(node); TrieNode decoded = new(NodeType.Unknown, node.Keccak); - decoded.ResolveNode(tree); + decoded.ResolveNode(tree, TreePath.Empty); decoded = decoded.Clone(); decoded.SetChild(0, new TrieNode(NodeType.Leaf, TestItem.KeccakC)); - decoded.RlpEncode(tree); + TreePath emptyPath = TreePath.Empty; + decoded.RlpEncode(tree, ref emptyPath); } [Test] @@ -98,11 +103,12 @@ public void Two_children_store_resolve_update_null_encode() node.SetChild(1, new TrieNode(NodeType.Leaf, TestItem.KeccakB)); ITrieNodeResolver tree = BuildATreeFromNode(node); TrieNode decoded = new(NodeType.Unknown, node.Keccak); - decoded.ResolveNode(tree); + decoded.ResolveNode(tree, TreePath.Empty); decoded = decoded.Clone(); decoded.SetChild(4, new TrieNode(NodeType.Leaf, TestItem.KeccakC)); decoded.SetChild(5, new TrieNode(NodeType.Leaf, TestItem.KeccakD)); - decoded.RlpEncode(tree); + TreePath emptyPath = TreePath.Empty; + decoded.RlpEncode(tree, ref emptyPath); } [Test] @@ -113,11 +119,12 @@ public void Two_children_store_resolve_delete_and_add_encode() node.SetChild(1, new TrieNode(NodeType.Leaf, TestItem.KeccakB)); ITrieNodeResolver tree = BuildATreeFromNode(node); TrieNode decoded = new(NodeType.Unknown, node.Keccak); - decoded.ResolveNode(tree); + decoded.ResolveNode(tree, TreePath.Empty); decoded = decoded.Clone(); decoded.SetChild(0, null); decoded.SetChild(4, new TrieNode(NodeType.Leaf, TestItem.KeccakC)); - decoded.RlpEncode(tree); + TreePath emptyPath = TreePath.Empty; + decoded.RlpEncode(tree, ref emptyPath); } [Test] @@ -127,21 +134,23 @@ public void Child_and_value_store_encode() node.SetChild(0, new TrieNode(NodeType.Leaf, TestItem.KeccakA)); ITrieNodeResolver tree = BuildATreeFromNode(node); TrieNode decoded = new(NodeType.Unknown, node.Keccak); - decoded.ResolveNode(tree); - decoded.RlpEncode(tree); + decoded.ResolveNode(tree, TreePath.Empty); + TreePath emptyPath = TreePath.Empty; + decoded.RlpEncode(tree, ref emptyPath); } private static ITrieNodeResolver BuildATreeFromNode(TrieNode node) { TrieNode.AllowBranchValues = true; - CappedArray rlp = node.RlpEncode(null); - node.ResolveKey(null, true); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = node.RlpEncode(null, ref emptyPath); + node.ResolveKey(null, ref emptyPath, true); MemDb memDb = new(); - memDb[node.Keccak.Bytes] = rlp.ToArray(); + memDb[NodeStorage.GetHalfPathNodeStoragePath(null, TreePath.Empty, node.Keccak)] = rlp.ToArray(); // ITrieNodeResolver tree = new PatriciaTree(memDb, node.Keccak, false, true); - return new TrieStore(memDb, NullLogManager.Instance); + return new TrieStore(memDb, NullLogManager.Instance).GetTrieStore(null); } } } diff --git a/src/Nethermind/Nethermind.State.Test/PatriciaTreeTests.cs b/src/Nethermind/Nethermind.State.Test/PatriciaTreeTests.cs index 5cf78012fba..9f1108a9f33 100644 --- a/src/Nethermind/Nethermind.State.Test/PatriciaTreeTests.cs +++ b/src/Nethermind/Nethermind.State.Test/PatriciaTreeTests.cs @@ -88,11 +88,11 @@ public void Commit_with_skip_root_should_skip_root(bool skipRoot, bool hasRoot) if (hasRoot) { - trieStore.LoadRlp(stateRoot).Length.Should().BeGreaterThan(0); + trieStore.LoadRlp(null, TreePath.Empty, stateRoot).Length.Should().BeGreaterThan(0); } else { - trieStore.Invoking(ts => ts.LoadRlp(stateRoot)).Should().Throw(); + trieStore.Invoking(ts => ts.LoadRlp(null, TreePath.Empty, stateRoot)).Should().Throw(); } } } diff --git a/src/Nethermind/Nethermind.State.Test/Proofs/AccountProofCollectorTests.cs b/src/Nethermind/Nethermind.State.Test/Proofs/AccountProofCollectorTests.cs index dc27bc86144..c19551a2848 100644 --- a/src/Nethermind/Nethermind.State.Test/Proofs/AccountProofCollectorTests.cs +++ b/src/Nethermind/Nethermind.State.Test/Proofs/AccountProofCollectorTests.cs @@ -274,7 +274,7 @@ public void Storage_proofs_have_values_set() IDb memDb = new MemDb(); TrieStore trieStore = new(memDb, LimboLogs.Instance); StateTree tree = new(trieStore, LimboLogs.Instance); - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(TestItem.AddressA.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); storageTree.Set(UInt256.Zero, Bytes.FromHexString("0xab12000000000000000000000000000000000000000000000000000000000000000000000000000000")); storageTree.Set(UInt256.One, Bytes.FromHexString("0xab34000000000000000000000000000000000000000000000000000000000000000000000000000000")); storageTree.Commit(0); @@ -299,7 +299,7 @@ public void Storage_proofs_have_keys_set() IDb memDb = new MemDb(); ITrieStore trieStore = new TrieStore(memDb, LimboLogs.Instance); StateTree tree = new(trieStore, LimboLogs.Instance); - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(TestItem.AddressA.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); storageTree.Set(UInt256.Zero, Bytes.FromHexString("0xab12000000000000000000000000000000000000000000000000000000000000000000000000000000")); storageTree.Set(UInt256.One, Bytes.FromHexString("0xab34000000000000000000000000000000000000000000000000000000000000000000000000000000")); storageTree.Commit(0); @@ -328,7 +328,7 @@ public void Storage_proofs_have_values_set_complex_setup() IDb memDb = new MemDb(); TrieStore trieStore = new(memDb, LimboLogs.Instance); StateTree tree = new(trieStore, LimboLogs.Instance); - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(TestItem.AddressA.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); storageTree.Set(Keccak.Compute(a).Bytes, Rlp.Encode(Bytes.FromHexString("0xab12000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(b).Bytes, Rlp.Encode(Bytes.FromHexString("0xab34000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(c).Bytes, Rlp.Encode(Bytes.FromHexString("0xab56000000000000000000000000000000000000000000000000000000000000000000000000000000"))); @@ -365,7 +365,7 @@ public void Storage_proofs_have_values_set_complex_2_setup() IDb memDb = new MemDb(); TrieStore trieStore = new(memDb, LimboLogs.Instance); StateTree tree = new(trieStore, LimboLogs.Instance); - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(TestItem.AddressA.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); storageTree.Set(Keccak.Compute(a).Bytes, Rlp.Encode(Bytes.FromHexString("0xab12000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(b).Bytes, Rlp.Encode(Bytes.FromHexString("0xab34000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(c).Bytes, Rlp.Encode(Bytes.FromHexString("0xab56000000000000000000000000000000000000000000000000000000000000000000000000000000"))); @@ -406,7 +406,7 @@ public void Storage_proofs_have_values_set_complex_3_setup() IDb memDb = new MemDb(); TrieStore trieStore = new(memDb, LimboLogs.Instance); StateTree tree = new(trieStore, LimboLogs.Instance); - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(TestItem.AddressA.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); storageTree.Set(Keccak.Compute(a).Bytes, Rlp.Encode(Bytes.FromHexString("0xab12000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(b).Bytes, Rlp.Encode(Bytes.FromHexString("0xab34000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(c).Bytes, Rlp.Encode(Bytes.FromHexString("0xab56000000000000000000000000000000000000000000000000000000000000000000000000000000"))); @@ -447,7 +447,7 @@ public void Storage_proofs_when_values_are_missing_setup() IDb memDb = new MemDb(); TrieStore trieStore = new(memDb, LimboLogs.Instance); StateTree tree = new(trieStore, LimboLogs.Instance); - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(TestItem.AddressA.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); storageTree.Set(Keccak.Compute(a).Bytes, Rlp.Encode(Bytes.FromHexString("0xab12000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(c).Bytes, Rlp.Encode(Bytes.FromHexString("0xab56000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(e).Bytes, Rlp.Encode(Bytes.FromHexString("0xab9a000000000000000000000000000000000000000000000000000000000000000000000000000000"))); @@ -513,7 +513,7 @@ public void Storage_proofs_have_values_set_selective_setup() IDb memDb = new MemDb(); TrieStore trieStore = new(memDb, LimboLogs.Instance); StateTree tree = new(trieStore, LimboLogs.Instance); - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(TestItem.AddressA.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); storageTree.Set(Keccak.Compute(a).Bytes, Rlp.Encode(Bytes.FromHexString("0xab12000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(b).Bytes, Rlp.Encode(Bytes.FromHexString("0xab34000000000000000000000000000000000000000000000000000000000000000000000000000000"))); storageTree.Set(Keccak.Compute(c).Bytes, Rlp.Encode(Bytes.FromHexString("0xab56000000000000000000000000000000000000000000000000000000000000000000000000000000"))); @@ -618,7 +618,7 @@ public void _Test_storage_failed_case(string historicallyFailingCase) addressWithStorage.StorageCells = new StorageCell[storageCount]; addressWithStorage.Address = address; - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(address.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); for (int j = 0; j < storageCount; j++) { UInt256 index = UInt256.Parse(lines[j + 2].Replace("storage: ", string.Empty)); @@ -656,7 +656,7 @@ public void _Test_storage_failed_case(string historicallyFailingCase) for (int j = 0; j < accountProof.StorageProofs.Length; j++) { TrieNode node = new(NodeType.Unknown, accountProof.StorageProofs[j].Proof.Last()); - node.ResolveNode(new TrieStore(memDb, NullLogManager.Instance)); + node.ResolveNode(new TrieStore(memDb, NullLogManager.Instance).GetTrieStore(null), TreePath.Empty); if (node.Value.Length != 1) { TestContext.WriteLine($"{j}"); @@ -698,7 +698,7 @@ public void Chaotic_test() for (int i = 0; i < accountsCount; i++) { Account account = Build.An.Account.WithBalance((UInt256)i).TestObject; - StorageTree storageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree storageTree = new(trieStore.GetTrieStore(addressesWithStorage[i].Address.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); for (int j = 0; j < i; j++) { storageTree.Set(addressesWithStorage[i].StorageCells[j].Index, new byte[1] { 1 }); @@ -734,7 +734,7 @@ public void Chaotic_test() accountProof.StorageProofs[j].Key.ToHexString().Should().Be(indexBytes.ToHexString(), $"{i} {j}"); TrieNode node = new(NodeType.Unknown, accountProof.StorageProofs[j].Proof.Last()); - node.ResolveNode(null); + node.ResolveNode(null, TreePath.Empty); // TestContext.Write($"|[{i},{j}]"); if (node.Value.Length != 1) { diff --git a/src/Nethermind/Nethermind.State.Test/SnapSync/RecreateStateFromAccountRangesTests.cs b/src/Nethermind/Nethermind.State.Test/SnapSync/RecreateStateFromAccountRangesTests.cs index 8952cfce3a4..219b1b0b2e0 100644 --- a/src/Nethermind/Nethermind.State.Test/SnapSync/RecreateStateFromAccountRangesTests.cs +++ b/src/Nethermind/Nethermind.State.Test/SnapSync/RecreateStateFromAccountRangesTests.cs @@ -3,6 +3,7 @@ #nullable disable +using System; using System.Collections.Generic; using System.Linq; using Nethermind.Core; @@ -44,7 +45,7 @@ public void Test01() byte[][] lastProof = accountProofCollector.BuildResult().Proof; MemDb db = new(); - TrieStore store = new(db, LimboLogs.Instance); + IScopedTrieStore store = new TrieStore(db, LimboLogs.Instance).GetTrieStore(null); StateTree tree = new(store, LimboLogs.Instance); IList nodes = new List(); @@ -53,7 +54,8 @@ public void Test01() { byte[] nodeBytes = (firstProof!)[i]; var node = new TrieNode(NodeType.Unknown, nodeBytes); - node.ResolveKey(store, i == 0); + TreePath emptyPath = TreePath.Empty; + node.ResolveKey(store, ref emptyPath, i == 0); nodes.Add(node); if (i < (firstProof!).Length - 1) @@ -68,7 +70,8 @@ public void Test01() { byte[] nodeBytes = (lastProof!)[i]; var node = new TrieNode(NodeType.Unknown, nodeBytes); - node.ResolveKey(store, i == 0); + TreePath emptyPath = TreePath.Empty; + node.ResolveKey(store, ref emptyPath, i == 0); nodes.Add(node); if (i < (lastProof!).Length - 1) @@ -111,7 +114,7 @@ public void RecreateAccountStateFromOneRangeWithNonExistenceProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); AddRangeResult result = snapProvider.AddAccountRange(1, rootHash, Keccak.Zero, TestItem.Tree.AccountsWithPaths, firstProof!.Concat(lastProof!).ToArray()); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); @@ -135,7 +138,7 @@ public void RecreateAccountStateFromOneRangeWithExistenceProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); var result = snapProvider.AddAccountRange(1, rootHash, TestItem.Tree.AccountsWithPaths[0].Path, TestItem.Tree.AccountsWithPaths, firstProof!.Concat(lastProof!).ToArray()); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); @@ -152,7 +155,7 @@ public void RecreateAccountStateFromOneRangeWithoutProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); var result = snapProvider.AddAccountRange(1, rootHash, TestItem.Tree.AccountsWithPaths[0].Path, TestItem.Tree.AccountsWithPaths); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); @@ -170,7 +173,7 @@ public void RecreateAccountStateFromMultipleRange() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); AccountProofCollector accountProofCollector = new(Keccak.Zero.Bytes); _inputTree.Accept(accountProofCollector, _inputTree.RootHash); @@ -220,7 +223,7 @@ public void MissingAccountFromRange() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); AccountProofCollector accountProofCollector = new(Keccak.Zero.Bytes); _inputTree.Accept(accountProofCollector, _inputTree.RootHash); @@ -260,5 +263,18 @@ public void MissingAccountFromRange() Assert.That(db.Keys.Count, Is.EqualTo(6)); Assert.IsFalse(db.KeyExists(rootHash)); } + + private SnapProvider CreateSnapProvider(ProgressTracker progressTracker, IDbProvider dbProvider) + { + try + { + IDb _ = dbProvider.CodeDb; + } + catch (ArgumentException) + { + dbProvider.RegisterDb(DbNames.Code, new MemDb()); + } + return new(progressTracker, dbProvider.CodeDb, new NodeStorage(dbProvider.StateDb), LimboLogs.Instance); + } } } diff --git a/src/Nethermind/Nethermind.State.Test/SnapSync/RecreateStateFromStorageRangesTests.cs b/src/Nethermind/Nethermind.State.Test/SnapSync/RecreateStateFromStorageRangesTests.cs index d6bd79d6f5a..8fe302679ac 100644 --- a/src/Nethermind/Nethermind.State.Test/SnapSync/RecreateStateFromStorageRangesTests.cs +++ b/src/Nethermind/Nethermind.State.Test/SnapSync/RecreateStateFromStorageRangesTests.cs @@ -3,6 +3,7 @@ #nullable disable +using System; using System.Linq; using Nethermind.Core; using Nethermind.Core.Crypto; @@ -14,6 +15,7 @@ using Nethermind.State.Proofs; using Nethermind.State.Snap; using Nethermind.Synchronization.SnapSync; +using Nethermind.Trie; using Nethermind.Trie.Pruning; using NUnit.Framework; @@ -27,13 +29,12 @@ public class RecreateStateFromStorageRangesTests private StateTree _inputStateTree; private StorageTree _inputStorageTree; private PathWithAccount _pathWithAccount = new PathWithAccount(TestItem.Tree.AccountAddress0.ValueHash256, new Account(UInt256.Zero)); - private Hash256 _accountAddr; [OneTimeSetUp] public void Setup() { _store = new TrieStore(new MemDb(), LimboLogs.Instance); - (_inputStateTree, _inputStorageTree, _accountAddr) = TestItem.Tree.GetTrees(_store); + (_inputStateTree, _inputStorageTree, _) = TestItem.Tree.GetTrees(_store); } [OneTimeTearDown] @@ -52,8 +53,8 @@ public void RecreateStorageStateFromOneRangeWithNonExistenceProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); - var result = snapProvider.AddStorageRange(1, null, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths, proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); + var result = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths, proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); } @@ -71,8 +72,8 @@ public void RecreateAccountStateFromOneRangeWithExistenceProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); - var result = snapProvider.AddStorageRange(1, null, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths, proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); + var result = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths, proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); } @@ -86,8 +87,8 @@ public void RecreateStorageStateFromOneRangeWithoutProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); - var result = snapProvider.AddStorageRange(1, null, rootHash, TestItem.Tree.SlotsWithPaths[0].Path, TestItem.Tree.SlotsWithPaths); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); + var result = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, TestItem.Tree.SlotsWithPaths[0].Path, TestItem.Tree.SlotsWithPaths); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); } @@ -102,25 +103,25 @@ public void RecreateAccountStateFromMultipleRange() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); AccountProofCollector accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { Keccak.Zero, TestItem.Tree.SlotsWithPaths[1].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); var proof = accountProofCollector.BuildResult(); - var result1 = snapProvider.AddStorageRange(1, null, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths[0..2], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result1 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths[0..2], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[3].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); proof = accountProofCollector.BuildResult(); - var result2 = snapProvider.AddStorageRange(1, null, rootHash, TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[2..4], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result2 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[2..4], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[5].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); proof = accountProofCollector.BuildResult(); - var result3 = snapProvider.AddStorageRange(1, null, rootHash, TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[4..6], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result3 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[4..6], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); Assert.That(result1, Is.EqualTo(AddRangeResult.OK)); Assert.That(result2, Is.EqualTo(AddRangeResult.OK)); @@ -137,29 +138,42 @@ public void MissingAccountFromRange() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); AccountProofCollector accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { Keccak.Zero, TestItem.Tree.SlotsWithPaths[1].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); var proof = accountProofCollector.BuildResult(); - var result1 = snapProvider.AddStorageRange(1, null, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths[0..2], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result1 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths[0..2], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[3].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); proof = accountProofCollector.BuildResult(); - var result2 = snapProvider.AddStorageRange(1, null, rootHash, TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[3..4], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result2 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[3..4], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[5].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); proof = accountProofCollector.BuildResult(); - var result3 = snapProvider.AddStorageRange(1, null, rootHash, TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[4..6], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result3 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[4..6], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); Assert.That(result1, Is.EqualTo(AddRangeResult.OK)); Assert.That(result2, Is.EqualTo(AddRangeResult.DifferentRootHash)); Assert.That(result3, Is.EqualTo(AddRangeResult.OK)); } + + private SnapProvider CreateSnapProvider(ProgressTracker progressTracker, IDbProvider dbProvider) + { + try + { + IDb _ = dbProvider.CodeDb; + } + catch (ArgumentException) + { + dbProvider.RegisterDb(DbNames.Code, new MemDb()); + } + return new(progressTracker, dbProvider.CodeDb, new NodeStorage(dbProvider.StateDb), LimboLogs.Instance); + } } } diff --git a/src/Nethermind/Nethermind.State.Test/StateTreeTests.cs b/src/Nethermind/Nethermind.State.Test/StateTreeTests.cs index 1f8fee41850..c60d6d29afc 100644 --- a/src/Nethermind/Nethermind.State.Test/StateTreeTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StateTreeTests.cs @@ -33,7 +33,7 @@ public void Setup() public void No_reads_when_setting_on_empty() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(TestItem.AddressA, _account0); tree.Set(TestItem.AddressB, _account0); tree.Set(TestItem.AddressC, _account0); @@ -45,7 +45,7 @@ public void No_reads_when_setting_on_empty() public void Minimal_writes_when_setting_on_empty() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(TestItem.AddressA, _account0); tree.Set(TestItem.AddressB, _account0); tree.Set(TestItem.AddressC, _account0); @@ -57,7 +57,7 @@ public void Minimal_writes_when_setting_on_empty() public void Minimal_writes_when_setting_on_empty_scenario_2() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb0"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb1"), _account0); @@ -71,7 +71,7 @@ public void Minimal_writes_when_setting_on_empty_scenario_2() public void Minimal_writes_when_setting_on_empty_scenario_3() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb0"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb1"), _account0); @@ -86,7 +86,7 @@ public void Minimal_writes_when_setting_on_empty_scenario_3() public void Minimal_writes_when_setting_on_empty_scenario_4() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb0"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb1"), _account0); @@ -102,7 +102,7 @@ public void Minimal_writes_when_setting_on_empty_scenario_4() public void Minimal_writes_when_setting_on_empty_scenario_5() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb0"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb1"), _account0); @@ -119,7 +119,7 @@ public void Minimal_writes_when_setting_on_empty_scenario_5() public void Scenario_traverse_extension_read_full_match() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), _account1); Account account = tree.Get(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111")); @@ -136,7 +136,7 @@ public void Scenario_traverse_extension_read_full_match() public void Scenario_traverse_extension_read_missing() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), _account1); Account account = tree.Get(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeedddddddddddddddddddddddd")); @@ -152,7 +152,7 @@ public void Scenario_traverse_extension_read_missing() public void Scenario_traverse_extension_new_branching() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), _account1); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeedddddddddddddddddddddddd"), _account2); @@ -167,7 +167,7 @@ public void Scenario_traverse_extension_new_branching() public void Scenario_traverse_extension_delete_missing() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), _account1); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeddddddddddddddddddddddddd"), null); @@ -183,7 +183,7 @@ public void Scenario_traverse_extension_delete_missing() public void Scenario_traverse_extension_create_new_extension() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), _account1); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaab00000000"), _account2); @@ -200,7 +200,7 @@ public void Scenario_traverse_extension_create_new_extension() public void Scenario_traverse_leaf_update_new_value() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), _account0); tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), _account1); tree.UpdateRootHash(); @@ -214,7 +214,7 @@ public void Scenario_traverse_leaf_update_new_value() public void Scenario_traverse_leaf_update_no_change() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), _account0); tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), _account0); tree.UpdateRootHash(); @@ -228,7 +228,7 @@ public void Scenario_traverse_leaf_update_no_change() public void Scenario_traverse_leaf_read_matching_leaf() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), _account0); tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), null); tree.UpdateRootHash(); @@ -242,7 +242,7 @@ public void Scenario_traverse_leaf_read_matching_leaf() public void Scenario_traverse_leaf_delete_missing() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), _account0); tree.Set(new Hash256("1111111111111111111111111111111ddddddddddddddddddddddddddddddddd"), null); tree.UpdateRootHash(); @@ -256,7 +256,7 @@ public void Scenario_traverse_leaf_delete_missing() public void Scenario_traverse_leaf_update_with_extension() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111111111111111111111111111"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000000000000000000000000000"), _account1); tree.UpdateRootHash(); @@ -270,7 +270,7 @@ public void Scenario_traverse_leaf_update_with_extension() public void Scenario_traverse_leaf_delete_matching_leaf() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), _account0); Account account = tree.Get(new Hash256("1111111111111111111111111111111111111111111111111111111111111111")); Assert.NotNull(account); @@ -285,7 +285,7 @@ public void Scenario_traverse_leaf_delete_matching_leaf() public void Scenario_traverse_leaf_read_missing() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), _account0); Account account = tree.Get(new Hash256("111111111111111111111111111111111111111111111111111111111ddddddd")); Assert.Null(account); @@ -300,7 +300,7 @@ public void Scenario_traverse_leaf_read_missing() public void Scenario_traverse_branch_update_missing() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111"), _account1); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb22222"), _account2); @@ -315,7 +315,7 @@ public void Scenario_traverse_branch_update_missing() public void Scenario_traverse_branch_read_missing() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111"), _account1); Account account = tree.Get(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb22222")); @@ -331,7 +331,7 @@ public void Scenario_traverse_branch_read_missing() public void Scenario_traverse_branch_delete_missing() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000"), _account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111"), _account1); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb22222"), null); @@ -346,7 +346,7 @@ public void Scenario_traverse_branch_delete_missing() public void Minimal_hashes_when_setting_on_empty() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(TestItem.AddressA, _account0); tree.Set(TestItem.AddressB, _account0); tree.Set(TestItem.AddressC, _account0); @@ -358,7 +358,7 @@ public void Minimal_hashes_when_setting_on_empty() public void Minimal_encodings_when_setting_on_empty() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(TestItem.AddressA, _account0); tree.Set(TestItem.AddressB, _account0); tree.Set(TestItem.AddressC, _account0); @@ -370,7 +370,7 @@ public void Minimal_encodings_when_setting_on_empty() public void Zero_decodings_when_setting_on_empty() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(TestItem.AddressA, _account0); tree.Set(TestItem.AddressB, _account0); tree.Set(TestItem.AddressC, _account0); @@ -382,7 +382,7 @@ public void Zero_decodings_when_setting_on_empty() public void No_writes_on_continues_update() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(TestItem.AddressA, _account0); tree.Set(TestItem.AddressA, _account1); tree.Set(TestItem.AddressA, _account2); @@ -396,7 +396,7 @@ public void No_writes_on_continues_update() public void No_writes_on_reverted_update() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(TestItem.AddressA, _account0); tree.Commit(0); Assert.That(db.WritesCount, Is.EqualTo(1), "writes before"); // extension, branch, two leaves @@ -410,7 +410,7 @@ public void No_writes_on_reverted_update() public void No_writes_without_commit() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(TestItem.AddressA, _account0); Assert.That(db.WritesCount, Is.EqualTo(0), "writes"); } @@ -419,7 +419,7 @@ public void No_writes_without_commit() public void Can_ask_about_root_hash_without_commiting() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(TestItem.AddressA, _account0); tree.UpdateRootHash(); Assert.That(tree.RootHash.ToString(true), Is.EqualTo("0x545a417202afcb10925b2afddb70a698710bb1cf4ab32942c42e9f019d564fdc")); @@ -429,7 +429,7 @@ public void Can_ask_about_root_hash_without_commiting() public void Can_ask_about_root_hash_without_when_emptied() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), _account0); tree.UpdateRootHash(); Assert.That(tree.RootHash, Is.Not.EqualTo(PatriciaTree.EmptyTreeHash)); @@ -456,7 +456,7 @@ public void Can_ask_about_root_hash_without_when_emptied() public void hash_empty_tree_root_hash_initially() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); Assert.That(tree.RootHash, Is.EqualTo(PatriciaTree.EmptyTreeHash)); } @@ -464,7 +464,7 @@ public void hash_empty_tree_root_hash_initially() public void Can_save_null() { MemDb db = new(); - StateTree tree = new(new TrieStore(db, LimboLogs.Instance), LimboLogs.Instance); + StateTree tree = new(new TrieStore(db, LimboLogs.Instance).GetTrieStore(null), LimboLogs.Instance); tree.Set(TestItem.AddressA, null); } } diff --git a/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs b/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs index 5bb74e075c8..21c6b823c78 100644 --- a/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using FluentAssertions; using Nethermind.Core; using Nethermind.Core.Crypto; @@ -23,10 +24,11 @@ public class StatsCollectorTests [Test] public void Can_collect_stats([Values(false, true)] bool parallel) { - MemDb memDb = new(); - IDb stateDb = memDb; - TrieStore trieStore = new(stateDb, new MemoryLimit(0.MB()), Persist.EveryBlock, LimboLogs.Instance); - WorldState stateProvider = new(trieStore, stateDb, LimboLogs.Instance); + MemDb codeDb = new(); + MemDb stateDb = new MemDb(); + NodeStorage nodeStorage = new NodeStorage(stateDb); + TrieStore trieStore = new(nodeStorage, new MemoryLimit(0.MB()), Persist.EveryBlock, LimboLogs.Instance); + WorldState stateProvider = new(trieStore, codeDb, LimboLogs.Instance); stateProvider.CreateAccount(TestItem.AddressA, 1); stateProvider.InsertCode(TestItem.AddressA, new byte[] { 1, 2, 3 }, Istanbul.Instance); @@ -45,12 +47,17 @@ public void Can_collect_stats([Values(false, true)] bool parallel) stateProvider.CommitTree(0); stateProvider.CommitTree(1); - memDb.Delete(Keccak.Compute(new byte[] { 1, 2, 3, 4 })); // missing code + codeDb.Delete(Keccak.Compute(new byte[] { 1, 2, 3, 4 })); // missing code + + // delete some storage + Hash256 address = new("0x55227dead52ea912e013e7641ccd6b3b174498e55066b0c174a09c8c3cc4bf5e"); + TreePath path = new TreePath(new ValueHash256("0x1800000000000000000000000000000000000000000000000000000000000000"), 2); Hash256 storageKey = new("0x345e54154080bfa9e8f20c99d7a0139773926479bc59e5b4f830ad94b6425332"); - memDb.Delete(storageKey); // deletes some storage + nodeStorage.Set(address, path, storageKey, null); + trieStore.ClearCache(); - TrieStatsCollector statsCollector = new(stateDb, LimboLogs.Instance); + TrieStatsCollector statsCollector = new(codeDb, LimboLogs.Instance); VisitingOptions visitingOptions = new VisitingOptions() { MaxDegreeOfParallelism = parallel ? 0 : 1 diff --git a/src/Nethermind/Nethermind.State/IStateReader.cs b/src/Nethermind/Nethermind.State/IStateReader.cs index d098c33881f..4aef785753b 100644 --- a/src/Nethermind/Nethermind.State/IStateReader.cs +++ b/src/Nethermind/Nethermind.State/IStateReader.cs @@ -15,7 +15,8 @@ public interface IStateReader ReadOnlySpan GetStorage(Hash256 stateRoot, Address address, in UInt256 index); byte[]? GetCode(Hash256 codeHash); byte[]? GetCode(in ValueHash256 codeHash); - void RunTreeVisitor(ITreeVisitor treeVisitor, Hash256 stateRoot, VisitingOptions? visitingOptions = null); + void RunTreeVisitor(ITreeVisitor treeVisitor, Hash256 stateRoot, VisitingOptions? visitingOptions = null) => RunTreeVisitor(new ContextNotAwareTreeVisitor(treeVisitor), stateRoot, visitingOptions); + void RunTreeVisitor(ITreeVisitor treeVisitor, Hash256 stateRoot, VisitingOptions? visitingOptions = null) where TCtx : struct, INodeContext; bool HasStateForRoot(Hash256 stateRoot); } } diff --git a/src/Nethermind/Nethermind.State/IStorageTreeFactory.cs b/src/Nethermind/Nethermind.State/IStorageTreeFactory.cs index 284a247b033..6b60dc3f3fe 100644 --- a/src/Nethermind/Nethermind.State/IStorageTreeFactory.cs +++ b/src/Nethermind/Nethermind.State/IStorageTreeFactory.cs @@ -10,5 +10,5 @@ namespace Nethermind.State; public interface IStorageTreeFactory { - StorageTree Create(Address address, ITrieStore trieStore, Hash256 storageRoot, Hash256 stateRoot, ILogManager? logManager); + StorageTree Create(Address address, IScopedTrieStore trieStore, Hash256 storageRoot, Hash256 stateRoot, ILogManager? logManager); } diff --git a/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs b/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs index 6dda0dcae16..2da0d21557f 100644 --- a/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs +++ b/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs @@ -227,7 +227,7 @@ private StorageTree GetOrCreateStorage(Address address) ref StorageTree? value = ref _storages.GetValueRefOrAddDefault(address, out bool exists); if (!exists) { - value = _storageTreeFactory.Create(address, _trieStore, _stateProvider.GetStorageRoot(address), StateRoot, _logManager); + value = _storageTreeFactory.Create(address, _trieStore.GetTrieStore(address.ToAccountPath), _stateProvider.GetStorageRoot(address), StateRoot, _logManager); return value; } @@ -292,12 +292,12 @@ public override void ClearStorage(Address address) // by means of CREATE 2 - notice that the cached trie may carry information about items that were not // touched in this block, hence were not zeroed above // TODO: how does it work with pruning? - _storages[address] = new StorageTree(_trieStore, Keccak.EmptyTreeHash, _logManager); + _storages[address] = new StorageTree(_trieStore.GetTrieStore(address.ToAccountPath), Keccak.EmptyTreeHash, _logManager); } private class StorageTreeFactory : IStorageTreeFactory { - public StorageTree Create(Address address, ITrieStore trieStore, Hash256 storageRoot, Hash256 stateRoot, ILogManager? logManager) + public StorageTree Create(Address address, IScopedTrieStore trieStore, Hash256 storageRoot, Hash256 stateRoot, ILogManager? logManager) => new(trieStore, storageRoot, logManager); } } diff --git a/src/Nethermind/Nethermind.State/Proofs/ProofVerifier.cs b/src/Nethermind/Nethermind.State/Proofs/ProofVerifier.cs index f453d7a4c14..234614a826f 100644 --- a/src/Nethermind/Nethermind.State/Proofs/ProofVerifier.cs +++ b/src/Nethermind/Nethermind.State/Proofs/ProofVerifier.cs @@ -8,6 +8,7 @@ using Nethermind.Core.Crypto; using Nethermind.Serialization.Rlp; using Nethermind.Trie; +using Nethermind.Trie.Pruning; namespace Nethermind.State.Proofs { @@ -44,7 +45,7 @@ public static CappedArray VerifyOneProof(byte[][] proof, Hash256 root) } TrieNode trieNode = new(NodeType.Unknown, proof.Last()); - trieNode.ResolveNode(null); + trieNode.ResolveNode(null, TreePath.Empty); return trieNode.Value; } diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 906ca2b8132..0e2bbd5b94d 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -41,7 +41,7 @@ internal class StateProvider private Change?[] _changes = new Change?[StartCapacity]; private int _currentPosition = Resettable.EmptyPosition; - public StateProvider(ITrieStore? trieStore, IKeyValueStore? codeDb, ILogManager? logManager, StateTree? stateTree = null) + public StateProvider(IScopedTrieStore? trieStore, IKeyValueStore? codeDb, ILogManager? logManager, StateTree? stateTree = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _codeDb = codeDb ?? throw new ArgumentNullException(nameof(codeDb)); diff --git a/src/Nethermind/Nethermind.State/StateReader.cs b/src/Nethermind/Nethermind.State/StateReader.cs index ee29d3e7845..a978013ba34 100644 --- a/src/Nethermind/Nethermind.State/StateReader.cs +++ b/src/Nethermind/Nethermind.State/StateReader.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Runtime.CompilerServices; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -17,8 +18,9 @@ namespace Nethermind.State public class StateReader(ITrieStore trieStore, IKeyValueStore? codeDb, ILogManager? logManager) : IStateReader { private readonly IKeyValueStore _codeDb = codeDb ?? throw new ArgumentNullException(nameof(codeDb)); - private readonly StateTree _state = new(trieStore, logManager); - private readonly StorageTree _storage = new(trieStore, Keccak.EmptyTreeHash, logManager); + private readonly StateTree _state = new StateTree(trieStore.GetTrieStore(null), logManager); + private readonly ITrieStore _trieStore = trieStore ?? throw new ArgumentNullException(nameof(trieStore)); + private readonly ILogManager _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager)); public bool TryGetAccount(Hash256 stateRoot, Address address, out AccountStruct account) => TryGetState(stateRoot, address, out account); @@ -34,8 +36,8 @@ public ReadOnlySpan GetStorage(Hash256 stateRoot, Address address, in UInt Metrics.StorageTreeReads++; - return _storage.Get(index, new Hash256(storageRoot)); - + StorageTree storage = new StorageTree(_trieStore.GetTrieStore(address.ToAccountPath), Keccak.EmptyTreeHash, _logManager); + return storage.Get(index, new Hash256(storageRoot)); } public UInt256 GetBalance(Hash256 stateRoot, Address address) @@ -46,9 +48,9 @@ public UInt256 GetBalance(Hash256 stateRoot, Address address) public byte[]? GetCode(Hash256 codeHash) => codeHash == Keccak.OfAnEmptyString ? Array.Empty() : _codeDb[codeHash.Bytes]; - public void RunTreeVisitor(ITreeVisitor treeVisitor, Hash256 rootHash, VisitingOptions? visitingOptions = null) + public void RunTreeVisitor(ITreeVisitor treeVisitor, Hash256 stateRoot, VisitingOptions? visitingOptions = null) where TCtx : struct, INodeContext { - _state.Accept(treeVisitor, rootHash, visitingOptions); + _state.Accept(treeVisitor, stateRoot, visitingOptions); } public bool HasStateForRoot(Hash256 stateRoot) => trieStore.HasRoot(stateRoot); diff --git a/src/Nethermind/Nethermind.State/StateTree.cs b/src/Nethermind/Nethermind.State/StateTree.cs index 0ebbb966ca7..9d32c8e28ab 100644 --- a/src/Nethermind/Nethermind.State/StateTree.cs +++ b/src/Nethermind/Nethermind.State/StateTree.cs @@ -28,12 +28,17 @@ public StateTree(ICappedArrayPool? bufferPool = null) } [DebuggerStepThrough] - public StateTree(ITrieStore? store, ILogManager? logManager) + public StateTree(IScopedTrieStore? store, ILogManager? logManager) : base(store, Keccak.EmptyTreeHash, true, true, logManager) { TrieType = TrieType.State; } + public StateTree(ITrieStore? store, ILogManager? logManager) + : base(store.GetTrieStore(null), logManager) + { + } + [DebuggerStepThrough] public Account? Get(Address address, Hash256? rootHash = null) { diff --git a/src/Nethermind/Nethermind.State/StorageTree.cs b/src/Nethermind/Nethermind.State/StorageTree.cs index d5b2719c9ad..a6e8d894876 100644 --- a/src/Nethermind/Nethermind.State/StorageTree.cs +++ b/src/Nethermind/Nethermind.State/StorageTree.cs @@ -34,13 +34,12 @@ static StorageTree() } } - public StorageTree(ITrieStore? trieStore, ILogManager? logManager) - : base(trieStore, Keccak.EmptyTreeHash, false, true, logManager) + public StorageTree(IScopedTrieStore? trieStore, ILogManager? logManager) + : this(trieStore, Keccak.EmptyTreeHash, logManager) { - TrieType = TrieType.Storage; } - public StorageTree(ITrieStore? trieStore, Hash256 rootHash, ILogManager? logManager) + public StorageTree(IScopedTrieStore? trieStore, Hash256 rootHash, ILogManager? logManager) : base(trieStore, rootHash, false, true, logManager) { TrieType = TrieType.Storage; diff --git a/src/Nethermind/Nethermind.State/WorldState.cs b/src/Nethermind/Nethermind.State/WorldState.cs index 1066fb0dbf2..2ea7b3365e3 100644 --- a/src/Nethermind/Nethermind.State/WorldState.cs +++ b/src/Nethermind/Nethermind.State/WorldState.cs @@ -42,14 +42,14 @@ public Hash256 StateRoot public WorldState(ITrieStore? trieStore, IKeyValueStore? codeDb, ILogManager? logManager) { _trieStore = trieStore; - _stateProvider = new StateProvider(trieStore, codeDb, logManager); + _stateProvider = new StateProvider(trieStore.GetTrieStore(null), codeDb, logManager); _persistentStorageProvider = new PersistentStorageProvider(trieStore, _stateProvider, logManager); _transientStorageProvider = new TransientStorageProvider(logManager); } internal WorldState(ITrieStore? trieStore, IKeyValueStore? codeDb, ILogManager? logManager, StateTree stateTree, IStorageTreeFactory storageTreeFactory) { - _stateProvider = new StateProvider(trieStore, codeDb, logManager, stateTree); + _stateProvider = new StateProvider(trieStore.GetTrieStore(null), codeDb, logManager, stateTree); _persistentStorageProvider = new PersistentStorageProvider(trieStore, _stateProvider, logManager, storageTreeFactory); _transientStorageProvider = new TransientStorageProvider(logManager); } diff --git a/src/Nethermind/Nethermind.Synchronization.Test/FastSync/StateSyncFeedHealingTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/FastSync/StateSyncFeedHealingTests.cs index 06517851364..2733ca9ff90 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/FastSync/StateSyncFeedHealingTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/FastSync/StateSyncFeedHealingTests.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -137,7 +138,7 @@ public async Task HealBigSqueezedRandomTree() dbContext.LocalStateTree.RootHash = dbContext.RemoteStateTree.RootHash; SafeContext ctx = PrepareDownloader(dbContext); - await ActivateAndWait(ctx, dbContext, 9); + await ActivateAndWait(ctx, dbContext, 9, timeout: 10000); DetailedProgress data = ctx.TreeFeed.GetDetailedProgress(); diff --git a/src/Nethermind/Nethermind.Synchronization.Test/FastSync/StateSyncFeedTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/FastSync/StateSyncFeedTests.cs index 76d5a9d12cb..07505497bea 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/FastSync/StateSyncFeedTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/FastSync/StateSyncFeedTests.cs @@ -58,7 +58,10 @@ public async Task Big_test((string Name, Action Setu dbContext.CompareTrees("BEFORE FIRST SYNC", true); SafeContext ctx = PrepareDownloader(dbContext, mock => - mock.SetFilter(((MemDb)dbContext.RemoteStateDb).Keys.Take(((MemDb)dbContext.RemoteStateDb).Keys.Count - 4).Select(k => new Hash256(k)).ToArray())); + mock.SetFilter(((MemDb)dbContext.RemoteStateDb).Keys.Take(((MemDb)dbContext.RemoteStateDb).Keys.Count - 4).Select(k => + { + return HashKey(k); + }).ToArray())); await ActivateAndWait(ctx, dbContext, 1024); @@ -70,7 +73,7 @@ public async Task Big_test((string Name, Action Setu .Set(TestItem.Addresses[i], TrieScenarios.AccountJustState0.WithChangedBalance(i) .WithChangedNonce(1) .WithChangedCodeHash(Keccak.Compute(TrieScenarios.Code3)) - .WithChangedStorageRoot(SetStorage(dbContext.RemoteTrieStore, i).RootHash)); + .WithChangedStorageRoot(SetStorage(dbContext.RemoteTrieStore, i, TestItem.Addresses[i]).RootHash)); dbContext.RemoteStateTree.UpdateRootHash(); dbContext.RemoteStateTree.Commit(0); @@ -88,7 +91,7 @@ public async Task Big_test((string Name, Action Setu .Set(TestItem.Addresses[i], TrieScenarios.AccountJustState0.WithChangedBalance(i) .WithChangedNonce(2) .WithChangedCodeHash(Keccak.Compute(TrieScenarios.Code3)) - .WithChangedStorageRoot(SetStorage(dbContext.RemoteTrieStore, (byte)(i % 7)).RootHash)); + .WithChangedStorageRoot(SetStorage(dbContext.RemoteTrieStore, (byte)(i % 7), TestItem.Addresses[i]).RootHash)); dbContext.RemoteStateTree.UpdateRootHash(); dbContext.RemoteStateTree.Commit(0); @@ -107,6 +110,11 @@ public async Task Big_test((string Name, Action Setu dbContext.AssertFlushed(); } + private static Hash256 HashKey(byte[] k) + { + return new Hash256(k[^32..]); + } + [Test] [TestCaseSource(nameof(Scenarios))] [Repeat(TestRepeatCount)] @@ -209,7 +217,7 @@ public async Task Can_download_with_moving_target((string Name, Action - mock.SetFilter(((MemDb)dbContext.RemoteStateDb).Keys.Take(((MemDb)dbContext.RemoteStateDb).Keys.Count - 1).Select(k => new Hash256(k)).ToArray())); + mock.SetFilter(((MemDb)dbContext.RemoteStateDb).Keys.Take(((MemDb)dbContext.RemoteStateDb).Keys.Count - 1).Select(k => HashKey(k)).ToArray())); await ActivateAndWait(ctx, dbContext, 1024, 1000); @@ -253,7 +261,7 @@ public async Task Dependent_branch_counter_is_zero_and_leaf_is_short((string Nam testCase.SetupTree(dbContext.RemoteStateTree, dbContext.RemoteTrieStore, dbContext.RemoteCodeDb); - StorageTree remoteStorageTree = new(dbContext.RemoteTrieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + StorageTree remoteStorageTree = new(dbContext.RemoteTrieStore.GetTrieStore(TestItem.AddressD.ToAccountPath), Keccak.EmptyTreeHash, LimboLogs.Instance); remoteStorageTree.Set( Bytes.FromHexString("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb000"), new byte[] { 1 }); remoteStorageTree.Set( @@ -311,7 +319,7 @@ public async Task Scenario_plus_one_code_one_storage((string Name, Action> GetNodeData(IReadOnlyList { if (i >= MaxResponseLength) break; - if (_filter is null || _filter.Contains(item)) responses[i] = _stateDb[item.Bytes] ?? _codeDb[item.Bytes]!; + if (_filter is null || _filter.Contains(item)) + { + byte[]? response = _codeDb[item.Bytes] ?? _stateDb[item.Bytes]; + if (response == null) + { + // Well, patricia tree can't get the rlp of node yet. So can't really make a correct snap sync implementation. + foreach (KeyValuePair keyValuePair in _stateDb.GetAll()) + { + if (!Bytes.AreEqual(item.Bytes, keyValuePair.Key.AsSpan()[^32..])) continue; + + response = keyValuePair.Value; + break; + } + } + responses[i] = response!; + } i++; } diff --git a/src/Nethermind/Nethermind.Synchronization.Test/OldStyleFullSynchronizerTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/OldStyleFullSynchronizerTests.cs index 5615e6a6fb4..d956adea689 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/OldStyleFullSynchronizerTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/OldStyleFullSynchronizerTests.cs @@ -26,6 +26,9 @@ using Nethermind.Stats; using Nethermind.Synchronization.Blocks; using Nethermind.Synchronization.Peers; +using Nethermind.Synchronization.Reporting; +using Nethermind.Synchronization.SnapSync; +using Nethermind.Trie; using Nethermind.Trie.Pruning; using NSubstitute; using NUnit.Framework; @@ -55,7 +58,8 @@ public async Task Setup() _pool = new SyncPeerPool(_blockTree, stats, new TotalDifficultyBetterPeerStrategy(LimboLogs.Instance), LimboLogs.Instance, 25); SyncConfig syncConfig = new(); - TrieStore trieStore = new(_stateDb, LimboLogs.Instance); + NodeStorage nodeStorage = new NodeStorage(_stateDb); + TrieStore trieStore = new(nodeStorage, LimboLogs.Instance); TotalDifficultyBetterPeerStrategy bestPeerStrategy = new(LimboLogs.Instance); Pivot pivot = new(syncConfig); BlockDownloaderFactory blockDownloaderFactory = new( @@ -69,6 +73,7 @@ public async Task Setup() _synchronizer = new Synchronizer( dbProvider, + nodeStorage, MainnetSpecProvider.Instance, _blockTree, _receiptStorage, diff --git a/src/Nethermind/Nethermind.Synchronization.Test/RangeQueryVisitorTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/RangeQueryVisitorTests.cs index 50c27f10385..381c2ba3485 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/RangeQueryVisitorTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/RangeQueryVisitorTests.cs @@ -90,6 +90,7 @@ public void AccountRangeFetch_AfterTree() tree.Set(new Hash256("0400000000000000000000000000000000000000000000000000000000000000"), TestItem.GenerateRandomAccount()); tree.Set(new Hash256("0500000000000000000000000000000000000000000000000000000000000000"), TestItem.GenerateRandomAccount()); tree.UpdateRootHash(); + tree.Commit(0); var startHash = new Hash256("0510000000000000000000000000000000000000000000000000000000000000"); var limitHash = new Hash256("0600000000000000000000000000000000000000000000000000000000000000"); diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/RecreateStateFromAccountRangesTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/RecreateStateFromAccountRangesTests.cs index 08c4cb831ff..5c2528ddc2f 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/RecreateStateFromAccountRangesTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/RecreateStateFromAccountRangesTests.cs @@ -54,16 +54,18 @@ public void Test01() byte[][] lastProof = CreateProofForPath(TestItem.Tree.AccountsWithPaths[5].Path.Bytes); MemDb db = new(); - TrieStore store = new(db, LimboLogs.Instance); + TrieStore fullStore = new(db, LimboLogs.Instance); + IScopedTrieStore store = fullStore.GetTrieStore(null); StateTree tree = new(store, LimboLogs.Instance); IList nodes = new List(); + TreePath emptyPath = TreePath.Empty; for (int i = 0; i < (firstProof!).Length; i++) { byte[] nodeBytes = (firstProof!)[i]; var node = new TrieNode(NodeType.Unknown, nodeBytes); - node.ResolveKey(store, i == 0); + node.ResolveKey(store, ref emptyPath, i == 0); nodes.Add(node); if (i < (firstProof!).Length - 1) @@ -78,7 +80,7 @@ public void Test01() { byte[] nodeBytes = (lastProof!)[i]; var node = new TrieNode(NodeType.Unknown, nodeBytes); - node.ResolveKey(store, i == 0); + node.ResolveKey(store, ref emptyPath, i == 0); nodes.Add(node); if (i < (lastProof!).Length - 1) @@ -117,7 +119,7 @@ public void RecreateAccountStateFromOneRangeWithNonExistenceProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); AddRangeResult result = snapProvider.AddAccountRange(1, rootHash, Keccak.Zero, TestItem.Tree.AccountsWithPaths, firstProof!.Concat(lastProof!).ToArray()); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); @@ -137,7 +139,7 @@ public void RecreateAccountStateFromOneRangeWithExistenceProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); var result = snapProvider.AddAccountRange(1, rootHash, TestItem.Tree.AccountsWithPaths[0].Path, TestItem.Tree.AccountsWithPaths, firstProof!.Concat(lastProof!).ToArray()); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); @@ -154,7 +156,7 @@ public void RecreateAccountStateFromOneRangeWithoutProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); var result = snapProvider.AddAccountRange(1, rootHash, TestItem.Tree.AccountsWithPaths[0].Path, TestItem.Tree.AccountsWithPaths); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); @@ -172,7 +174,7 @@ public void RecreateAccountStateFromMultipleRange() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); byte[][] firstProof = CreateProofForPath(Keccak.Zero.Bytes); byte[][] lastProof = CreateProofForPath(TestItem.Tree.AccountsWithPaths[1].Path.Bytes); @@ -210,7 +212,7 @@ public void RecreateAccountStateFromMultipleRange_InReverseOrder() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); byte[][] firstProof = CreateProofForPath(TestItem.Tree.AccountsWithPaths[4].Path.Bytes); byte[][] lastProof = CreateProofForPath(TestItem.Tree.AccountsWithPaths[5].Path.Bytes); @@ -245,7 +247,7 @@ public void RecreateAccountStateFromMultipleRange_OutOfOrder() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); byte[][] firstProof = CreateProofForPath(TestItem.Tree.AccountsWithPaths[4].Path.Bytes); byte[][] lastProof = CreateProofForPath(TestItem.Tree.AccountsWithPaths[5].Path.Bytes); @@ -280,7 +282,7 @@ public void RecreateAccountStateFromMultipleOverlappingRange() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); byte[][] firstProof = CreateProofForPath(Keccak.Zero.Bytes); byte[][] lastProof = CreateProofForPath(TestItem.Tree.AccountsWithPaths[2].Path.Bytes); @@ -324,7 +326,7 @@ public void CorrectlyDetermineHasMoreChildren() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); byte[][] firstProof = CreateProofForPath(Keccak.Zero.Bytes); byte[][] lastProof = CreateProofForPath(TestItem.Tree.AccountsWithPaths[1].Path.Bytes); @@ -378,7 +380,7 @@ public void CorrectlyDetermineMaxKeccakExist() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); byte[][] firstProof = CreateProofForPath(ac1.Path.Bytes, tree); byte[][] lastProof = CreateProofForPath(ac2.Path.Bytes, tree); @@ -417,7 +419,7 @@ public void MissingAccountFromRange() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); byte[][] firstProof = CreateProofForPath(Keccak.Zero.Bytes); byte[][] lastProof = CreateProofForPath(TestItem.Tree.AccountsWithPaths[1].Path.Bytes); @@ -445,5 +447,18 @@ public void MissingAccountFromRange() Assert.That(db.Keys.Count, Is.EqualTo(6)); Assert.IsFalse(db.KeyExists(rootHash)); } + + private SnapProvider CreateSnapProvider(ProgressTracker progressTracker, IDbProvider dbProvider) + { + try + { + IDb _ = dbProvider.CodeDb; + } + catch (ArgumentException) + { + dbProvider.RegisterDb(DbNames.Code, new MemDb()); + } + return new(progressTracker, dbProvider.CodeDb, new NodeStorage(dbProvider.StateDb), LimboLogs.Instance); + } } } diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/RecreateStateFromStorageRangesTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/RecreateStateFromStorageRangesTests.cs index a524539d9c1..f9d801e85fc 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/RecreateStateFromStorageRangesTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/RecreateStateFromStorageRangesTests.cs @@ -3,14 +3,19 @@ #nullable disable +using System; using System.Linq; +using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Test.Builders; using Nethermind.Db; +using Nethermind.Int256; using Nethermind.Logging; using Nethermind.State; using Nethermind.State.Proofs; +using Nethermind.State.Snap; using Nethermind.Synchronization.SnapSync; +using Nethermind.Trie; using Nethermind.Trie.Pruning; using NUnit.Framework; @@ -25,6 +30,8 @@ public class RecreateStateFromStorageRangesTests private StorageTree _inputStorageTree; private Hash256 _storage; + private PathWithAccount _pathWithAccount = new PathWithAccount(TestItem.Tree.AccountAddress0.ValueHash256, new Account(UInt256.Zero)); + [OneTimeSetUp] public void Setup() { @@ -48,9 +55,9 @@ public void RecreateStorageStateFromOneRangeWithNonExistenceProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); - var result = snapProvider.AddStorageRange(1, null, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths, proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths, proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); } @@ -68,9 +75,9 @@ public void RecreateAccountStateFromOneRangeWithExistenceProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); - var result = snapProvider.AddStorageRange(1, null, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths, proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths, proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); } @@ -84,9 +91,9 @@ public void RecreateStorageStateFromOneRangeWithoutProof() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); - var result = snapProvider.AddStorageRange(1, null, rootHash, TestItem.Tree.SlotsWithPaths[0].Path, TestItem.Tree.SlotsWithPaths); + var result = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, TestItem.Tree.SlotsWithPaths[0].Path, TestItem.Tree.SlotsWithPaths); Assert.That(result, Is.EqualTo(AddRangeResult.OK)); } @@ -101,25 +108,25 @@ public void RecreateAccountStateFromMultipleRange() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); AccountProofCollector accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { Keccak.Zero, TestItem.Tree.SlotsWithPaths[1].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); var proof = accountProofCollector.BuildResult(); - var result1 = snapProvider.AddStorageRange(1, null, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths[0..2], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result1 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths[0..2], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[3].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); proof = accountProofCollector.BuildResult(); - var result2 = snapProvider.AddStorageRange(1, null, rootHash, TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[2..4], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result2 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[2..4], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[5].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); proof = accountProofCollector.BuildResult(); - var result3 = snapProvider.AddStorageRange(1, null, rootHash, TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[4..6], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result3 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[4..6], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); Assert.That(result1, Is.EqualTo(AddRangeResult.OK)); Assert.That(result2, Is.EqualTo(AddRangeResult.OK)); @@ -136,29 +143,42 @@ public void MissingAccountFromRange() DbProvider dbProvider = new(); dbProvider.RegisterDb(DbNames.State, db); ProgressTracker progressTracker = new(null, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProvider, LimboLogs.Instance); + SnapProvider snapProvider = CreateSnapProvider(progressTracker, dbProvider); AccountProofCollector accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { Keccak.Zero, TestItem.Tree.SlotsWithPaths[1].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); var proof = accountProofCollector.BuildResult(); - var result1 = snapProvider.AddStorageRange(1, null, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths[0..2], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result1 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, Keccak.Zero, TestItem.Tree.SlotsWithPaths[0..2], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[3].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); proof = accountProofCollector.BuildResult(); - var result2 = snapProvider.AddStorageRange(1, null, rootHash, TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[3..4], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result2 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, TestItem.Tree.SlotsWithPaths[2].Path, TestItem.Tree.SlotsWithPaths[3..4], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); accountProofCollector = new(TestItem.Tree.AccountAddress0.Bytes, new ValueHash256[] { TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[5].Path }); _inputStateTree!.Accept(accountProofCollector, _inputStateTree.RootHash); proof = accountProofCollector.BuildResult(); - var result3 = snapProvider.AddStorageRange(1, null, rootHash, TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[4..6], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); + var result3 = snapProvider.AddStorageRange(1, _pathWithAccount, rootHash, TestItem.Tree.SlotsWithPaths[4].Path, TestItem.Tree.SlotsWithPaths[4..6], proof!.StorageProofs![0].Proof!.Concat(proof!.StorageProofs![1].Proof!).ToArray()); Assert.That(result1, Is.EqualTo(AddRangeResult.OK)); Assert.That(result2, Is.EqualTo(AddRangeResult.DifferentRootHash)); Assert.That(result3, Is.EqualTo(AddRangeResult.OK)); } + + private SnapProvider CreateSnapProvider(ProgressTracker progressTracker, IDbProvider dbProvider) + { + try + { + IDb _ = dbProvider.CodeDb; + } + catch (ArgumentException) + { + dbProvider.RegisterDb(DbNames.Code, new MemDb()); + } + return new(progressTracker, dbProvider.CodeDb, new NodeStorage(dbProvider.StateDb), LimboLogs.Instance); + } } } diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapServerTest.cs b/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapServerTest.cs index a2e0126897d..d38287a94cc 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapServerTest.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapServerTest.cs @@ -14,6 +14,7 @@ using Nethermind.State; using Nethermind.State.Snap; using Nethermind.Synchronization.SnapSync; +using Nethermind.Trie; using Nethermind.Trie.Pruning; using NSubstitute; using NUnit.Framework; @@ -38,19 +39,19 @@ private Context CreateContext(ILastNStateRootTracker? stateRootTracker = null) StateTree tree = new(store, LimboLogs.Instance); SnapServer server = new(store.AsReadOnly(), codeDbServer, stateRootTracker ?? CreateConstantStateRootTracker(true), LimboLogs.Instance); - IDbProvider dbProviderClient = new DbProvider(); - var stateDbClient = new MemDb(); - dbProviderClient.RegisterDb(DbNames.State, stateDbClient); - ProgressTracker progressTracker = new(null!, dbProviderClient.StateDb, LimboLogs.Instance); + MemDb clientStateDb = new(); + ProgressTracker progressTracker = new(null!, clientStateDb, LimboLogs.Instance); + + INodeStorage nodeStorage = new NodeStorage(clientStateDb); - SnapProvider snapProvider = new(progressTracker, dbProviderClient, LimboLogs.Instance); + SnapProvider snapProvider = new(progressTracker, new MemDb(), nodeStorage, LimboLogs.Instance); return new Context() { Server = server, SnapProvider = snapProvider, Tree = tree, - ClientStateDb = stateDbClient + ClientStateDb = clientStateDb }; } @@ -183,7 +184,7 @@ public void TestGetStorageRange() dbProviderClient.RegisterDb(DbNames.Code, new MemDb()); ProgressTracker progressTracker = new(null!, dbProviderClient.StateDb, LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProviderClient, LimboLogs.Instance); + SnapProvider snapProvider = new(progressTracker, dbProviderClient.CodeDb, new NodeStorage(dbProviderClient.StateDb), LimboLogs.Instance); (IOwnedReadOnlyList storageSlots, IOwnedReadOnlyList? proofs) = server.GetStorageRanges(InputStateTree.RootHash, new PathWithAccount[] { TestItem.Tree.AccountsWithPaths[0] }, @@ -211,7 +212,7 @@ public void TestGetStorageRangeMulti() dbProviderClient.RegisterDb(DbNames.Code, new MemDb()); ProgressTracker progressTracker = new(null!, dbProviderClient.StateDb, LimboLogs.Instance); - SnapProvider snapProvider = new(progressTracker, dbProviderClient, LimboLogs.Instance); + SnapProvider snapProvider = new(progressTracker, dbProviderClient.CodeDb, new NodeStorage(dbProviderClient.StateDb), LimboLogs.Instance); Hash256 startRange = Keccak.Zero; while (true) @@ -252,7 +253,7 @@ public void TestWithHugeTree() for (int i = 1000; i < 10000; i += 1000) { Address address = TestItem.GetRandomAddress(); - StorageTree storageTree = new(store, LimboLogs.Instance); + StorageTree storageTree = new(store.GetTrieStore(address.ToAccountPath), LimboLogs.Instance); for (int j = 0; j < i; j += 1) { storageTree.Set(TestItem.GetRandomKeccak(), TestItem.GetRandomKeccak().Bytes.ToArray()); diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncProgressResolverTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncProgressResolverTests.cs index 2a82088423e..7e094578bc4 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncProgressResolverTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncProgressResolverTests.cs @@ -6,13 +6,11 @@ using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Test.Builders; -using Nethermind.Db; using Nethermind.Logging; using Nethermind.State; using Nethermind.Synchronization.FastBlocks; using Nethermind.Synchronization.ParallelSync; using Nethermind.Synchronization.SnapSync; -using Nethermind.Trie.Pruning; using NSubstitute; using NSubstitute.ReturnsExtensions; using NUnit.Framework; diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs index d21eb692624..adce701b001 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs @@ -665,8 +665,9 @@ public void GetNodeData_returns_cached_trie_nodes() Hash256 nodeKey = TestItem.KeccakA; TrieNode node = new(NodeType.Leaf, nodeKey, TestItem.KeccakB.Bytes); - trieStore.CommitNode(1, new NodeCommitInfo(node)); - trieStore.FinishBlockCommit(TrieType.State, 1, node); + IScopedTrieStore scopedTrieStore = trieStore.GetTrieStore(null); + scopedTrieStore.CommitNode(1, new NodeCommitInfo(node, TreePath.Empty)); + scopedTrieStore.FinishBlockCommit(TrieType.State, 1, node); stateDb.KeyExists(nodeKey).Should().BeFalse(); ctx.SyncServer.GetNodeData(new[] { nodeKey }, CancellationToken.None, NodeDataType.All).Should().BeEquivalentTo(new[] { TestItem.KeccakB.BytesToArray() }); diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs index ae0632f1f22..0111224a4f1 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs @@ -41,6 +41,7 @@ using Nethermind.Synchronization.SnapSync; using Nethermind.Config; using Nethermind.Specs.ChainSpecStyle; +using Nethermind.Trie; namespace Nethermind.Synchronization.Test { @@ -351,6 +352,7 @@ private SyncTestContext CreateSyncManager(int index) logManager); Synchronizer synchronizer = new( dbProvider, + new NodeStorage(dbProvider.StateDb), MainnetSpecProvider.Instance, tree, NullReceiptStorage.Instance, diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs index 0ec476cecef..93531891ace 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs @@ -43,6 +43,7 @@ using NSubstitute; using NUnit.Framework; using Nethermind.Synchronization.SnapSync; +using Nethermind.Trie; namespace Nethermind.Synchronization.Test { @@ -335,8 +336,8 @@ ISyncConfig GetSyncConfig() => : totalDifficultyBetterPeerStrategy; StateReader reader = new StateReader(trieStore, codeDb, LimboLogs.Instance); - FullStateFinder fullStateFinder = new FullStateFinder(BlockTree, reader); + INodeStorage nodeStorage = new NodeStorage(dbProvider.StateDb); SyncPeerPool = new SyncPeerPool(BlockTree, stats, bestPeerStrategy, _logManager, 25); Pivot pivot = new(syncConfig); @@ -357,6 +358,7 @@ ISyncConfig GetSyncConfig() => ); Synchronizer = new MergeSynchronizer( dbProvider, + nodeStorage, MainnetSpecProvider.Instance, BlockTree, NullReceiptStorage.Instance, @@ -386,6 +388,7 @@ ISyncConfig GetSyncConfig() => Synchronizer = new Synchronizer( dbProvider, + nodeStorage, MainnetSpecProvider.Instance, BlockTree, NullReceiptStorage.Instance, diff --git a/src/Nethermind/Nethermind.Synchronization.Test/Trie/HealingTreeTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/Trie/HealingTreeTests.cs index f0338db56ad..46b7f75d844 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/Trie/HealingTreeTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/Trie/HealingTreeTests.cs @@ -35,7 +35,7 @@ public void get_state_tree_works() [Test] public void get_storage_tree_works() { - HealingStorageTree stateTree = new(Substitute.For(), Keccak.EmptyTreeHash, LimboLogs.Instance, TestItem.AddressA, TestItem.KeccakA, null); + HealingStorageTree stateTree = new(Substitute.For(), Keccak.EmptyTreeHash, LimboLogs.Instance, TestItem.AddressA, TestItem.KeccakA, null); stateTree.Get(stackalloc byte[] { 1, 2, 3 }); } @@ -63,7 +63,7 @@ private static bool PathMatch(GetTrieNodesRequest r, byte[] path, int lastPathIn public void recovery_works_storage_trie([Values(true, false)] bool isMainThread, [Values(true, false)] bool successfullyRecovered) { HealingStorageTree CreateHealingStorageTree(ITrieStore trieStore, ITrieNodeRecovery recovery) => - new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance, TestItem.AddressA, _key, recovery); + new(trieStore.GetTrieStore(null), Keccak.EmptyTreeHash, LimboLogs.Instance, TestItem.AddressA, _key, recovery); byte[] path = { 1, 2 }; byte[] addressPath = ValueKeccak.Compute(TestItem.AddressA.Bytes).Bytes.ToArray(); recovery_works(isMainThread, successfullyRecovered, path, CreateHealingStorageTree, @@ -79,9 +79,11 @@ private void recovery_works( where T : PatriciaTree { ITrieStore trieStore = Substitute.For(); - trieStore.FindCachedOrUnknown(_key).Returns( + trieStore.FindCachedOrUnknown(null, TreePath.Empty, _key).Returns( k => throw new MissingTrieNodeException("", new TrieNodeException("", _key), path, 1), k => new TrieNode(NodeType.Leaf) { Key = path }); + trieStore.GetTrieStore(Arg.Any()) + .Returns((callInfo) => new ScopedTrieStore(trieStore, (Hash256?)callInfo[0])); TestMemDb db = new(); trieStore.TrieNodeRlpStore.Returns(db); @@ -95,7 +97,8 @@ private void recovery_works( if (isMainThread && successfullyRecovered) { action.Should().NotThrow(); - trieStore.Received().Set(ValueKeccak.Compute(_rlp), _rlp); + trieStore.Received() + .Set(null, TreePath.FromNibble(path), ValueKeccak.Compute(_rlp), _rlp); } else { diff --git a/src/Nethermind/Nethermind.Synchronization.Test/Trie/HealingTrieStoreTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/Trie/HealingTrieStoreTests.cs index 0c1aa51d442..66848bdc7c3 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/Trie/HealingTrieStoreTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/Trie/HealingTrieStoreTests.cs @@ -26,29 +26,32 @@ public class HealingTrieStoreTests public void get_works() { TestMemDb db = new(); - db[TestItem.KeccakA.Bytes] = new byte[] { 1, 2 }; - HealingTrieStore healingTrieStore = new(db, Nethermind.Trie.Pruning.No.Pruning, Persist.EveryBlock, LimboLogs.Instance); - healingTrieStore.LoadRlp(TestItem.KeccakA, ReadFlags.None); + NodeStorage storage = new NodeStorage(db); + storage.Set(null, TreePath.Empty, TestItem.KeccakA, new byte[] { 1, 2 }); + HealingTrieStore healingTrieStore = new(storage, Nethermind.Trie.Pruning.No.Pruning, Persist.EveryBlock, LimboLogs.Instance); + healingTrieStore.LoadRlp(null, TreePath.Empty, TestItem.KeccakA); } [Test] public void recovery_works([Values(true, false)] bool isMainThread, [Values(true, false)] bool successfullyRecovered) { byte[] rlp = { 1, 2 }; - Hash256 key = TestItem.KeccakA; + Hash256 hash = TestItem.KeccakA; + byte[] key = NodeStorage.GetHalfPathNodeStoragePath(null, TreePath.Empty, hash); + TestMemDb db = new(); - HealingTrieStore healingTrieStore = new(db, Nethermind.Trie.Pruning.No.Pruning, Persist.EveryBlock, LimboLogs.Instance); + HealingTrieStore healingTrieStore = new(new NodeStorage(db), Nethermind.Trie.Pruning.No.Pruning, Persist.EveryBlock, LimboLogs.Instance); ITrieNodeRecovery> recovery = Substitute.For>>(); recovery.CanRecover.Returns(isMainThread); - recovery.Recover(key, Arg.Is>(l => l.SequenceEqual(new[] { key }))) + recovery.Recover(hash, Arg.Is>(l => l.SequenceEqual(new[] { hash }))) .Returns(successfullyRecovered ? Task.FromResult(rlp) : Task.FromResult(null)); healingTrieStore.InitializeNetwork(recovery); - Action action = () => healingTrieStore.LoadRlp(key, ReadFlags.None); + Action action = () => healingTrieStore.LoadRlp(null, TreePath.Empty, hash, ReadFlags.None); if (isMainThread && successfullyRecovered) { action.Should().NotThrow(); - db.KeyWasWritten(kvp => Bytes.AreEqual(kvp.Item1, key.Bytes) && Bytes.AreEqual(kvp.Item2, rlp)); + db.KeyWasWritten(kvp => Bytes.AreEqual(kvp.Item1, key) && Bytes.AreEqual(kvp.Item2, rlp)); } else { diff --git a/src/Nethermind/Nethermind.Synchronization.Test/TrieScenarios.cs b/src/Nethermind/Nethermind.Synchronization.Test/TrieScenarios.cs index 91f9e632a53..5d3c8cde41d 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/TrieScenarios.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/TrieScenarios.cs @@ -40,7 +40,7 @@ public static void InitOnce() if (!Inited) { // this setup is just for finding the storage root - StorageTree remoteStorageTree = SetStorage(new TrieStore(new MemDb(), LimboLogs.Instance)); + StorageTree remoteStorageTree = SetStorage(new TrieStore(new MemDb(), LimboLogs.Instance), TestItem.AddressA); Hash256 storageRoot = remoteStorageTree.RootHash; Empty = Build.An.Account.WithBalance(0).TestObject; @@ -73,49 +73,62 @@ private static (string Name, Action Action)[] InitSc }), ("set_3_via_address", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; - tree.Set(TestItem.AddressA, Account0); - tree.Set(TestItem.AddressB, Account0); - tree.Set(TestItem.AddressC, Account0); + SetStorage(tree, stateDb, TestItem.AddressA, Account0); + SetStorage(tree, stateDb, TestItem.AddressB, Account0); + SetStorage(tree, stateDb, TestItem.AddressC, Account0); tree.Commit(0); }), ("storage_hash_and_code_hash_same", (tree, stateDb, codeDb) => { byte[] code = Bytes.FromHexString("e3a120b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601"); Hash256 codeHash = Keccak.Compute(code); - StorageTree remoteStorageTree = new(stateDb, Keccak.EmptyTreeHash, LimboLogs.Instance); + Hash256 account = new Hash256("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); + StorageTree remoteStorageTree = new(stateDb.GetTrieStore(account), Keccak.EmptyTreeHash, LimboLogs.Instance); remoteStorageTree.Set((UInt256) 1, new byte[] {1}); remoteStorageTree.Commit(0); remoteStorageTree.UpdateRootHash(); codeDb[codeHash.Bytes] = code; - tree.Set(new Hash256("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), AccountJustState0.WithChangedStorageRoot(remoteStorageTree.RootHash).WithChangedCodeHash(codeHash)); + tree.Set(account, AccountJustState0.WithChangedStorageRoot(remoteStorageTree.RootHash).WithChangedCodeHash(codeHash)); tree.Commit(0); }), ("storage_hash_and_code_hash_same_with_additional_account_of_same_storage_root", (tree, stateDb, codeDb) => { byte[] code = Bytes.FromHexString("e3a120b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601"); Hash256 codeHash = Keccak.Compute(code); - StorageTree remoteStorageTree = new(stateDb, Keccak.EmptyTreeHash, LimboLogs.Instance); - remoteStorageTree.Set((UInt256) 1, new byte[] {1}); - remoteStorageTree.Commit(0); - remoteStorageTree.UpdateRootHash(); + + Hash256 account1 = new Hash256("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); + StorageTree remoteStorageTree1 = new(stateDb.GetTrieStore(account1), Keccak.EmptyTreeHash, LimboLogs.Instance); + remoteStorageTree1.Set((UInt256) 1, new byte[] {1}); + remoteStorageTree1.Commit(0); + remoteStorageTree1.UpdateRootHash(); + + Hash256 account2 = new Hash256("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"); + StorageTree remoteStorageTree2 = new(stateDb.GetTrieStore(account2), Keccak.EmptyTreeHash, LimboLogs.Instance); + remoteStorageTree2.Set((UInt256) 1, new byte[] {1}); + remoteStorageTree2.Commit(0); + remoteStorageTree2.UpdateRootHash(); + codeDb[codeHash.Bytes] = code; - tree.Set(new Hash256("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), AccountJustState0.WithChangedStorageRoot(remoteStorageTree.RootHash)); - tree.Set(new Hash256("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), AccountJustState0.WithChangedStorageRoot(remoteStorageTree.RootHash).WithChangedCodeHash(codeHash)); + tree.Set(account1, AccountJustState0.WithChangedStorageRoot(remoteStorageTree1.RootHash)); + tree.Set(account2, AccountJustState0.WithChangedStorageRoot(remoteStorageTree2.RootHash).WithChangedCodeHash(codeHash)); tree.Commit(0); }), ("storage_hash_and_code_hash_same_with_additional_account_of_same_code", (tree, stateDb, codeDb) => { byte[] code = Bytes.FromHexString("e3a120b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601"); Hash256 codeHash = Keccak.Compute(code); - StorageTree remoteStorageTree = new(stateDb, Keccak.EmptyTreeHash, LimboLogs.Instance); + + Hash256 accountWithStorage = + new Hash256("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"); + StorageTree remoteStorageTree = new(stateDb.GetTrieStore(accountWithStorage), Keccak.EmptyTreeHash, LimboLogs.Instance); remoteStorageTree.Set((UInt256) 1, new byte[] {1}); remoteStorageTree.Commit(0); remoteStorageTree.UpdateRootHash(); + codeDb[codeHash.Bytes] = code; tree.Set(new Hash256("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), AccountJustState0.WithChangedCodeHash(codeHash)); - tree.Set(new Hash256("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), AccountJustState0.WithChangedStorageRoot(remoteStorageTree.RootHash).WithChangedCodeHash(codeHash)); + tree.Set(accountWithStorage, AccountJustState0.WithChangedStorageRoot(remoteStorageTree.RootHash).WithChangedCodeHash(codeHash)); tree.Commit(0); }), ("branch_with_same_accounts_at_different_addresses", (tree, _, codeDb) => @@ -127,21 +140,19 @@ private static (string Name, Action Action)[] InitSc }), ("set_3_delete_1", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb0"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb1"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb0"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb1"), Account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb1"), null); tree.Commit(0); }), ("set_3_delete_2", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb0"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb1"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb0"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb1"), Account0); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb0"), null); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb1eeeeeb1"), null); tree.Commit(0); @@ -159,11 +170,10 @@ private static (string Name, Action Action)[] InitSc }), ("extension_read_full_match", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; codeDb[Keccak.Compute(Code1).Bytes] = Code1; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), Account1); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), Account1); Account _ = tree.Get(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"))!; tree.UpdateRootHash(); Hash256 __ = tree.RootHash; @@ -171,11 +181,10 @@ private static (string Name, Action Action)[] InitSc }), ("extension_read_missing", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; codeDb[Keccak.Compute(Code1).Bytes] = Code1; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), Account1); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), Account1); Account _ = tree.Get(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeedddddddddddddddddddddddd"))!; tree.UpdateRootHash(); Hash256 __ = tree.RootHash; @@ -183,13 +192,12 @@ private static (string Name, Action Action)[] InitSc }), ("extension_new_branch", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; codeDb[Keccak.Compute(Code1).Bytes] = Code1; codeDb[Keccak.Compute(Code2).Bytes] = Code2; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), Account1); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeedddddddddddddddddddddddd"), Account2); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), Account1); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeedddddddddddddddddddddddd"), Account2); tree.UpdateRootHash(); Hash256 _ = tree.RootHash; tree.Commit(0); @@ -205,11 +213,10 @@ private static (string Name, Action Action)[] InitSc }), ("extension_delete_missing", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; codeDb[Keccak.Compute(Code1).Bytes] = Code1; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), Account1); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), Account1); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeddddddddddddddddddddddddd"), null); tree.UpdateRootHash(); Hash256 _ = tree.RootHash; @@ -217,35 +224,32 @@ private static (string Name, Action Action)[] InitSc }), ("extension_create_new_extension", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; codeDb[Keccak.Compute(Code1).Bytes] = Code1; codeDb[Keccak.Compute(Code2).Bytes] = Code2; codeDb[Keccak.Compute(Code3).Bytes] = Code3; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), Account1); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaab00000000"), Account2); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaab11111111"), Account3); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111"), Account1); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaab00000000"), Account2); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaab11111111"), Account3); tree.UpdateRootHash(); Hash256 _ = tree.RootHash; tree.Commit(0); }), ("leaf_new_value", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code1).Bytes] = Code1; - tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); - tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account1); + SetStorage(tree, stateDb, new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); + SetStorage(tree, stateDb, new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account1); tree.UpdateRootHash(); Hash256 _ = tree.RootHash; tree.Commit(0); }), ("leaf_no_change", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; - tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); - tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); + SetStorage(tree, stateDb, new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); + SetStorage(tree, stateDb, new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); tree.UpdateRootHash(); Hash256 _ = tree.RootHash; tree.Commit(0); @@ -260,9 +264,8 @@ private static (string Name, Action Action)[] InitSc }), ("leaf_delete_missing", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; - tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); + SetStorage(tree, stateDb, new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); tree.Set(new Hash256("1111111111111111111111111111111ddddddddddddddddddddddddddddddddd"), null); tree.UpdateRootHash(); Hash256 _ = tree.RootHash; @@ -270,20 +273,18 @@ private static (string Name, Action Action)[] InitSc }), ("leaf_update_extension", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; codeDb[Keccak.Compute(Code1).Bytes] = Code1; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111111111111111111111111111"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000000000000000000000000000"), Account1); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111111111111111111111111111111"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000000000000000000000000000000"), Account1); tree.UpdateRootHash(); Hash256 _ = tree.RootHash; tree.Commit(0); }), ("leaf_read", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; - tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); + SetStorage(tree, stateDb, new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); Account _ = tree.Get(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"))!; tree.UpdateRootHash(); Hash256 __ = tree.RootHash; @@ -291,9 +292,8 @@ private static (string Name, Action Action)[] InitSc }), ("leaf_update_missing", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; - tree.Set(new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); + SetStorage(tree, stateDb, new Hash256("1111111111111111111111111111111111111111111111111111111111111111"), Account0); Account _ = tree.Get(new Hash256("111111111111111111111111111111111111111111111111111111111ddddddd"))!; tree.UpdateRootHash(); Hash256 __ = tree.RootHash; @@ -301,24 +301,22 @@ private static (string Name, Action Action)[] InitSc }), ("branch_update_missing", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; codeDb[Keccak.Compute(Code1).Bytes] = Code1; codeDb[Keccak.Compute(Code2).Bytes] = Code2; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111"), Account1); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb22222"), Account2); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111"), Account1); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb22222"), Account2); tree.UpdateRootHash(); Hash256 _ = tree.RootHash; tree.Commit(0); }), ("branch_read_missing", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; codeDb[Keccak.Compute(Code1).Bytes] = Code1; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111"), Account1); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111"), Account1); Account _ = tree.Get(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb22222"))!; tree.UpdateRootHash(); Hash256 __ = tree.RootHash; @@ -326,11 +324,10 @@ private static (string Name, Action Action)[] InitSc }), ("branch_delete_missing", (tree, stateDb, codeDb) => { - SetStorage(stateDb); codeDb[Keccak.Compute(Code0).Bytes] = Code0; codeDb[Keccak.Compute(Code1).Bytes] = Code1; - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000"), Account0); - tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111"), Account1); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb00000"), Account0); + SetStorage(tree, stateDb, new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb11111"), Account1); tree.Set(new Hash256("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb22222"), null); tree.UpdateRootHash(); Hash256 _ = tree.RootHash; @@ -339,9 +336,14 @@ private static (string Name, Action Action)[] InitSc }; } - private static StorageTree SetStorage(ITrieStore trieStore) + private static StorageTree SetStorage(ITrieStore trieStore, Address account) { - StorageTree remoteStorageTree = new(trieStore, Keccak.EmptyTreeHash, LimboLogs.Instance); + return SetStorage(trieStore, account.ToAccountPath); + } + + private static StorageTree SetStorage(ITrieStore trieStore, Hash256 account) + { + StorageTree remoteStorageTree = new(trieStore.GetTrieStore(account), Keccak.EmptyTreeHash, LimboLogs.Instance); remoteStorageTree.Set((UInt256)1, new byte[] { 1 }); remoteStorageTree.Set((UInt256)2, new byte[] { 2 }); @@ -355,5 +357,16 @@ private static StorageTree SetStorage(ITrieStore trieStore) remoteStorageTree.Commit(0); return remoteStorageTree; } + + private static void SetStorage(StateTree stateTree, ITrieStore trieStore, Address address, Account account) + { + SetStorage(stateTree, trieStore, address.ToAccountPath, account); + } + + private static void SetStorage(StateTree stateTree, ITrieStore trieStore, Hash256 address, Account account) + { + SetStorage(trieStore, address); + stateTree.Set(address, account); + } } } diff --git a/src/Nethermind/Nethermind.Synchronization/FastSync/StateSyncItem.cs b/src/Nethermind/Nethermind.Synchronization/FastSync/StateSyncItem.cs index 1b1f747ea33..c6d58b64389 100644 --- a/src/Nethermind/Nethermind.Synchronization/FastSync/StateSyncItem.cs +++ b/src/Nethermind/Nethermind.Synchronization/FastSync/StateSyncItem.cs @@ -3,7 +3,9 @@ using System; using System.Diagnostics; +using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Trie; namespace Nethermind.Synchronization.FastSync { @@ -20,16 +22,6 @@ public StateSyncItem(Hash256 hash, byte[]? accountPathNibbles, byte[]? pathNibbl Rightness = rightness; } - public StateSyncItem(StateSyncItem original, NodeDataType nodeDataType) - { - Hash = original.Hash; - AccountPathNibbles = original.AccountPathNibbles; - PathNibbles = original.PathNibbles; - NodeDataType = nodeDataType; - Level = original.Level; - Rightness = original.Rightness; - } - public Hash256 Hash { get; } /// @@ -55,5 +47,16 @@ public StateSyncItem(StateSyncItem original, NodeDataType nodeDataType) public uint Rightness { get; } public bool IsRoot => Level == 0 && NodeDataType == NodeDataType.State; + + private TreePath? _treePath = null; + public TreePath Path => _treePath ??= TreePath.FromNibble(PathNibbles); + + private Hash256? _address = null; + public Hash256? Address => (AccountPathNibbles?.Length ?? 0) != 0 ? (_address ??= new Hash256(Nibbles.ToBytes(AccountPathNibbles))) : null; + + private NodeKey? _key = null; + public NodeKey Key => _key ??= new(Address, Path, Hash); + + public record NodeKey(Hash256? Address, TreePath? Path, Hash256 Hash); } } diff --git a/src/Nethermind/Nethermind.Synchronization/FastSync/TreeSync.cs b/src/Nethermind/Nethermind.Synchronization/FastSync/TreeSync.cs index 5da5557778c..1a3eff28967 100644 --- a/src/Nethermind/Nethermind.Synchronization/FastSync/TreeSync.cs +++ b/src/Nethermind/Nethermind.Synchronization/FastSync/TreeSync.cs @@ -56,7 +56,7 @@ public class TreeSync private readonly ILogger _logger; private readonly IDb _codeDb; - private readonly IDb _stateDb; + private readonly INodeStorage _nodeStorage; private readonly IBlockTree _blockTree; @@ -65,21 +65,20 @@ public class TreeSync // concurrent request handling with the read lock. private readonly ReaderWriterLockSlim _syncStateLock = new(); private readonly ConcurrentDictionary _pendingRequests = new(); - private Dictionary> _dependencies = new(); - private readonly LruKeyCache _alreadySavedNode = new(AlreadySavedCapacity, "saved nodes"); + private Dictionary> _dependencies = new(); + private readonly LruKeyCache _alreadySavedNode = new LruKeyCache(AlreadySavedCapacity, "saved nodes"); private readonly LruKeyCache _alreadySavedCode = new(AlreadySavedCapacity, "saved nodes"); - private readonly HashSet _codesSameAsNodes = new(); private BranchProgress _branchProgress; private int _hintsToResetRoot; private long _blockNumber; private readonly SyncMode _syncMode; - public TreeSync(SyncMode syncMode, IDb codeDb, IDb stateDb, IBlockTree blockTree, ILogManager logManager) + public TreeSync(SyncMode syncMode, IDb codeDb, INodeStorage nodeStorage, IBlockTree blockTree, ILogManager logManager) { _syncMode = syncMode; _codeDb = codeDb ?? throw new ArgumentNullException(nameof(codeDb)); - _stateDb = stateDb ?? throw new ArgumentNullException(nameof(stateDb)); + _nodeStorage = nodeStorage ?? throw new ArgumentNullException(nameof(nodeStorage)); _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); @@ -237,26 +236,8 @@ shorter than the request */ NodeDataType nodeDataType = currentStateSyncItem.NodeDataType; if (nodeDataType == NodeDataType.Code) { - bool processAsStorage = false; - lock (_codesSameAsNodes) - { - // It could be that a code request was sent before another branch found storage same as - // code situation, in which case, the storage request (for later branch) would not get - // sent out because of _dependencies check. - processAsStorage = _codesSameAsNodes.Contains(currentStateSyncItem.Hash); - } - - // It is possible that the _codesSameAsNode is populated during processing of the code - // before its _dependencies record is removed. But this *should* be fairly rare, we dont - // want to introduce more lock and when the state root change, the request would have been - // re-sent for the storage. So user should not be blocked by this. - if (!processAsStorage) - { - SaveNode(currentStateSyncItem, currentResponseItem); - continue; - } - - currentStateSyncItem = new StateSyncItem(currentStateSyncItem, NodeDataType.Storage); + SaveNode(currentStateSyncItem, currentResponseItem); + continue; } HandleTrieNode(currentStateSyncItem, currentResponseItem, ref invalidNodes); @@ -376,7 +357,7 @@ shorter than the request */ try { // it finished downloading - rootNodeKeyExists = _stateDb.KeyExists(_rootNode); + rootNodeKeyExists = _nodeStorage.KeyExists(null, TreePath.Empty, _rootNode); } catch (ObjectDisposedException) { @@ -449,7 +430,6 @@ public void ResetStateRoot(long blockNumber, Hash256 stateRoot, SyncFeedState cu _blockNumber = blockNumber; _rootNode = stateRoot; lock (_dependencies) _dependencies.Clear(); - lock (_codesSameAsNodes) _codesSameAsNodes.Clear(); if (_logger.IsDebug) _logger.Debug($"Clearing node stacks ({_pendingItems.Description})"); _pendingItems.Clear(); @@ -511,9 +491,15 @@ private AddNodeResult AddNodeToPending(StateSyncItem syncItem, DependentItem? de _branchProgress.ReportSynced(syncItem, NodeProgressState.Requested); } - LruKeyCache alreadySavedCache = - syncItem.NodeDataType == NodeDataType.Code ? _alreadySavedCode : _alreadySavedNode; - if (alreadySavedCache.Get(syncItem.Hash)) + if (syncItem.NodeDataType == NodeDataType.Code && _alreadySavedCode.Get(syncItem.Hash)) + { + Interlocked.Increment(ref _data.CheckWasCached); + if (_logger.IsTrace) _logger.Trace($"Node already in the DB - skipping {syncItem.Hash}"); + _branchProgress.ReportSynced(syncItem, NodeProgressState.AlreadySaved); + return AddNodeResult.AlreadySaved; + } + + if (syncItem.NodeDataType != NodeDataType.Code && _alreadySavedNode.Get(syncItem.Key)) { Interlocked.Increment(ref _data.CheckWasCached); if (_logger.IsTrace) _logger.Trace($"Node already in the DB - skipping {syncItem.Hash}"); @@ -525,14 +511,30 @@ private AddNodeResult AddNodeToPending(StateSyncItem syncItem, DependentItem? de lockToTake.EnterReadLock(); try { - IDb dbToCheck = syncItem.NodeDataType == NodeDataType.Code ? _codeDb : _stateDb; + bool keyExists; Interlocked.Increment(ref _data.DbChecks); - bool keyExists = dbToCheck.KeyExists(syncItem.Hash); + if (syncItem.NodeDataType == NodeDataType.Code) + { + keyExists = _codeDb.KeyExists(syncItem.Hash); + } + else + { + keyExists = _nodeStorage.KeyExists(syncItem.Address, syncItem.Path, syncItem.Hash); + } if (keyExists) { if (_logger.IsTrace) _logger.Trace($"Node already in the DB - skipping {syncItem.Hash}"); - alreadySavedCache.Set(syncItem.Hash); + + if (syncItem.NodeDataType == NodeDataType.Code) + { + _alreadySavedCode.Set(syncItem.Hash); + } + if (syncItem.NodeDataType != NodeDataType.Code) + { + _alreadySavedNode.Set(syncItem.Key); + } + Interlocked.Increment(ref _data.StateWasThere); _branchProgress.ReportSynced(syncItem, NodeProgressState.AlreadySaved); return AddNodeResult.AlreadySaved; @@ -548,11 +550,11 @@ private AddNodeResult AddNodeToPending(StateSyncItem syncItem, DependentItem? de bool isAlreadyRequested; lock (_dependencies) { - isAlreadyRequested = _dependencies.ContainsKey(syncItem.Hash); + isAlreadyRequested = _dependencies.ContainsKey(syncItem.Key); if (dependentItem is not null) { if (_logger.IsTrace) _logger.Trace($"Adding dependency {syncItem.Hash} -> {dependentItem.SyncItem.Hash}"); - AddDependency(syncItem.Hash, dependentItem); + AddDependency(syncItem.Key, dependentItem); } } @@ -572,19 +574,19 @@ private AddNodeResult AddNodeToPending(StateSyncItem syncItem, DependentItem? de return AddNodeResult.Added; } - private void PossiblySaveDependentNodes(Hash256 hash) + private void PossiblySaveDependentNodes(StateSyncItem.NodeKey key) { List nodesToSave = new(); lock (_dependencies) { - if (_dependencies.TryGetValue(hash, out HashSet value)) + if (_dependencies.TryGetValue(key, out HashSet value)) { HashSet dependentItems = value; if (_logger.IsTrace) { string nodeNodes = dependentItems.Count == 1 ? "node" : "nodes"; - _logger.Trace($"{dependentItems.Count} {nodeNodes} dependent on {hash}"); + _logger.Trace($"{dependentItems.Count} {nodeNodes} dependent on {key}"); } foreach (DependentItem dependentItem in dependentItems) @@ -597,11 +599,11 @@ private void PossiblySaveDependentNodes(Hash256 hash) } } - _dependencies.Remove(hash); + _dependencies.Remove(key); } else { - if (_logger.IsTrace) _logger.Trace($"No nodes dependent on {hash}"); + if (_logger.IsTrace) _logger.Trace($"No nodes dependent on {key}"); } } @@ -626,7 +628,8 @@ private void SaveNode(StateSyncItem syncItem, byte[] data) { Interlocked.Add(ref _data.DataSize, data.Length); Interlocked.Increment(ref Metrics.SyncedStateTrieNodes); - _stateDb.Set(syncItem.Hash, data); + + _nodeStorage.Set(syncItem.Address, syncItem.Path, syncItem.Hash, data); } finally { @@ -637,26 +640,6 @@ private void SaveNode(StateSyncItem syncItem, byte[] data) } case NodeDataType.Storage: { - lock (_codesSameAsNodes) - { - if (_codesSameAsNodes.Contains(syncItem.Hash)) - { - _codeDbLock.EnterWriteLock(); - try - { - Interlocked.Add(ref _data.DataSize, data.Length); - Interlocked.Increment(ref Metrics.SyncedCodes); - _codeDb.Set(syncItem.Hash, data); - } - finally - { - _codeDbLock.ExitWriteLock(); - } - - _codesSameAsNodes.Remove(syncItem.Hash); - } - } - Interlocked.Increment(ref _data.SavedStorageCount); _stateDbLock.EnterWriteLock(); @@ -664,7 +647,7 @@ private void SaveNode(StateSyncItem syncItem, byte[] data) { Interlocked.Add(ref _data.DataSize, data.Length); Interlocked.Increment(ref Metrics.SyncedStorageTrieNodes); - _stateDb.Set(syncItem.Hash, data); + _nodeStorage.Set(syncItem.Address, syncItem.Path, syncItem.Hash, data); } finally { @@ -696,14 +679,14 @@ private void SaveNode(StateSyncItem syncItem, byte[] data) { if (_logger.IsInfo) _logger.Info($"Saving root {syncItem.Hash} of {_branchProgress.CurrentSyncBlock}"); - _stateDb.Flush(); + _nodeStorage.Flush(); _codeDb.Flush(); Interlocked.Exchange(ref _rootSaved, 1); } _branchProgress.ReportSynced(syncItem.Level, syncItem.ParentBranchChildIndex, syncItem.BranchChildIndex, syncItem.NodeDataType, NodeProgressState.Saved); - PossiblySaveDependentNodes(syncItem.Hash); + PossiblySaveDependentNodes(syncItem.Key); } private void VerifyPostSyncCleanUp() @@ -715,7 +698,7 @@ private void VerifyPostSyncCleanUp() if (_logger.IsError) _logger.Error($"POSSIBLE FAST SYNC CORRUPTION | Dependencies hanging after the root node saved - count: {_dependencies.Count}, first: {_dependencies.Keys.First()}"); } - _dependencies = new Dictionary>(); + _dependencies = new Dictionary>(); // _alreadySaved = new LruKeyCache(AlreadySavedCapacity, "saved nodes"); } @@ -736,7 +719,6 @@ private void CleanupMemory() _dependencies.Clear(); _alreadySavedNode.Clear(); _alreadySavedCode.Clear(); - _codesSameAsNodes.Clear(); } finally { @@ -769,8 +751,10 @@ private void StoreProgressInDb() private void HandleTrieNode(StateSyncItem currentStateSyncItem, byte[] currentResponseItem, ref int invalidNodes) { NodeDataType nodeDataType = currentStateSyncItem.NodeDataType; + TreePath path = currentStateSyncItem.Path; + TrieNode trieNode = new(NodeType.Unknown, currentResponseItem); - trieNode.ResolveNode(NullTrieNodeResolver.Instance); // TODO: will this work now? + trieNode.ResolveNode(NullTrieNodeResolver.Instance, path); // TODO: will this work now? switch (trieNode.NodeType) { case NodeType.Unknown: @@ -782,23 +766,12 @@ private void HandleTrieNode(StateSyncItem currentStateSyncItem, byte[] currentRe // than the node is downloaded during the loop which may trigger a save on this node. DependentItem dependentBranch = new(currentStateSyncItem, currentResponseItem, 16); - // children may have the same hashes (e.g. a set of accounts with the same code at different addresses) - HashSet alreadyProcessedChildHashes = new(); - Span branchChildPath = stackalloc byte[currentStateSyncItem.PathNibbles.Length + 1]; currentStateSyncItem.PathNibbles.CopyTo(branchChildPath[..currentStateSyncItem.PathNibbles.Length]); for (int childIndex = 15; childIndex >= 0; childIndex--) { Hash256? childHash = trieNode.GetChildHash(childIndex); - if (childHash is not null && - alreadyProcessedChildHashes.Contains(childHash)) - { - dependentBranch.Counter--; - continue; - } - - alreadyProcessedChildHashes.Add(childHash); if (childHash is not null) { @@ -836,7 +809,7 @@ private void HandleTrieNode(StateSyncItem currentStateSyncItem, byte[] currentRe break; case NodeType.Extension: - Hash256? next = trieNode.GetChild(NullTrieNodeResolver.Instance, 0)?.Keccak; + Hash256? next = trieNode.GetChild(NullTrieNodeResolver.Instance, ref path, 0)?.Keccak; if (next is not null) { DependentItem dependentItem = new(currentStateSyncItem, currentResponseItem, 1); @@ -866,7 +839,7 @@ private void HandleTrieNode(StateSyncItem currentStateSyncItem, byte[] currentRe else { /* this happens when we have a short RLP format of the node - * that would not be stored as Keccak but full RLP*/ + * that would not be stored as Keccak but full RLP */ SaveNode(currentStateSyncItem, currentResponseItem); } @@ -879,22 +852,8 @@ private void HandleTrieNode(StateSyncItem currentStateSyncItem, byte[] currentRe (Hash256 codeHash, Hash256 storageRoot) = AccountDecoder.DecodeHashesOnly(trieNode.Value.AsRlpStream()); if (codeHash != Keccak.OfAnEmptyString) { - // prepare a branch without the code DB - // this only protects against being same as storage root? - if (codeHash == storageRoot) - { - lock (_codesSameAsNodes) - { - _codesSameAsNodes.Add(codeHash); - } - - dependentItem.Counter--; - } - else - { - AddNodeResult addCodeResult = AddNodeToPending(new StateSyncItem(codeHash, null, null, NodeDataType.Code, 0, currentStateSyncItem.Rightness), dependentItem, "code"); - if (addCodeResult == AddNodeResult.AlreadySaved) dependentItem.Counter--; - } + AddNodeResult addCodeResult = AddNodeToPending(new StateSyncItem(codeHash, null, null, NodeDataType.Code, 0, currentStateSyncItem.Rightness), dependentItem, "code"); + if (addCodeResult == AddNodeResult.AlreadySaved) dependentItem.Counter--; } else { @@ -910,17 +869,7 @@ private void HandleTrieNode(StateSyncItem currentStateSyncItem, byte[] currentRe trieNode.Key!.CopyTo(childPath[currentStateSyncItem.PathNibbles.Length..]); AddNodeResult addStorageNodeResult = AddNodeToPending(new StateSyncItem(storageRoot, childPath.ToArray(), null, NodeDataType.Storage, 0, currentStateSyncItem.Rightness), dependentItem, "storage"); - if (addStorageNodeResult != AddNodeResult.AlreadySaved) - { - } - else if (codeHash == storageRoot) - { - // Maybe a storageRoot equal to the codeHash was stored by another branch. - // Double checking code... - AddNodeResult addCodeResult = AddNodeToPending(new StateSyncItem(codeHash, null, null, NodeDataType.Code, 0, currentStateSyncItem.Rightness), dependentItem, "code"); - if (addCodeResult == AddNodeResult.AlreadySaved) dependentItem.Counter--; - } - else + if (addStorageNodeResult == AddNodeResult.AlreadySaved) { dependentItem.Counter--; } @@ -970,8 +919,7 @@ private static uint CalculateRightness(NodeType nodeType, StateSyncItem currentS /// get persisted. /// /// Sync item that this item is dependent on. - /// Item that can only be persisted if all its dependencies are persisted - private void AddDependency(Hash256 dependency, DependentItem dependentItem) + private void AddDependency(StateSyncItem.NodeKey dependency, DependentItem dependentItem) { lock (_dependencies) { diff --git a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProvider.cs b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProvider.cs index 8234bb65d32..797dfde4980 100644 --- a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProvider.cs +++ b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProvider.cs @@ -23,17 +23,17 @@ namespace Nethermind.Synchronization.SnapSync public class SnapProvider : ISnapProvider { private readonly ObjectPool _trieStorePool; - private readonly IDbProvider _dbProvider; + private readonly IDb _codeDb; private readonly ILogManager _logManager; private readonly ILogger _logger; private readonly ProgressTracker _progressTracker; - public SnapProvider(ProgressTracker progressTracker, IDbProvider dbProvider, ILogManager logManager) + public SnapProvider(ProgressTracker progressTracker, IDb codeDb, INodeStorage nodeStorage, ILogManager logManager) { - _dbProvider = dbProvider ?? throw new ArgumentNullException(nameof(dbProvider)); + _codeDb = codeDb ?? throw new ArgumentNullException(nameof(codeDb)); _progressTracker = progressTracker ?? throw new ArgumentNullException(nameof(progressTracker)); - _trieStorePool = new DefaultObjectPool(new TrieStorePoolPolicy(_dbProvider.StateDb, logManager)); + _trieStorePool = new DefaultObjectPool(new TrieStorePoolPolicy(nodeStorage, logManager)); _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager)); _logger = logManager.GetClassLogger(); @@ -74,7 +74,7 @@ public AddRangeResult AddAccountRange(long blockNumber, in ValueHash256 expected ITrieStore store = _trieStorePool.Get(); try { - StateTree tree = new(store, _logManager); + StateTree tree = new(store.GetTrieStore(null), _logManager); ValueHash256 effectiveHashLimit = hashLimit.HasValue ? hashLimit.Value : ValueKeccak.MaxValue; @@ -164,7 +164,7 @@ public AddRangeResult AddStorageRange(StorageRange request, SlotsAndProofs respo public AddRangeResult AddStorageRange(long blockNumber, PathWithAccount pathWithAccount, in ValueHash256 expectedRootHash, in ValueHash256? startingHash, IReadOnlyList slots, IReadOnlyList? proofs = null) { ITrieStore store = _trieStorePool.Get(); - StorageTree tree = new(store, _logManager); + StorageTree tree = new(store.GetTrieStore(pathWithAccount.Path.ToCommitment()), _logManager); try { (AddRangeResult result, bool moreChildrenToRight) = SnapProviderHelper.AddStorageRange(tree, blockNumber, startingHash, slots, expectedRootHash, proofs); @@ -207,6 +207,7 @@ public void RefreshAccounts(AccountsToRefreshRequest request, IOwnedReadOnlyList { int respLength = response.Count; ITrieStore store = _trieStorePool.Get(); + IScopedTrieStore stateStore = store.GetTrieStore(null); try { for (int reqi = 0; reqi < request.Paths.Count; reqi++) @@ -226,9 +227,10 @@ public void RefreshAccounts(AccountsToRefreshRequest request, IOwnedReadOnlyList try { + TreePath emptyTreePath = TreePath.Empty; TrieNode node = new(NodeType.Unknown, nodeData, isDirty: true); - node.ResolveNode(store); - node.ResolveKey(store, true); + node.ResolveNode(stateStore, emptyTreePath); + node.ResolveKey(stateStore, ref emptyTreePath, true); requestedPath.PathAndAccount.Account = requestedPath.PathAndAccount.Account.WithChangedStorageRoot(node.Keccak); @@ -277,7 +279,7 @@ public void AddCodes(IReadOnlyList requestedHashes, IOwnedReadOnly { HashSet set = requestedHashes.ToHashSet(); - using (IWriteBatch writeBatch = _dbProvider.CodeDb.StartWriteBatch()) + using (IWriteBatch writeBatch = _codeDb.StartWriteBatch()) { for (int i = 0; i < codes.Count; i++) { @@ -326,10 +328,10 @@ public void UpdatePivot() private class TrieStorePoolPolicy : IPooledObjectPolicy { - private readonly IKeyValueStoreWithBatching _stateDb; + private readonly INodeStorage _stateDb; private readonly ILogManager _logManager; - public TrieStorePoolPolicy(IKeyValueStoreWithBatching stateDb, ILogManager logManager) + public TrieStorePoolPolicy(INodeStorage stateDb, ILogManager logManager) { _stateDb = stateDb; _logManager = logManager; diff --git a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProviderHelper.cs b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProviderHelper.cs index 62a930bd6a8..a3aaf5efa10 100644 --- a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProviderHelper.cs +++ b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProviderHelper.cs @@ -12,6 +12,7 @@ using Nethermind.Serialization.Rlp; using Nethermind.State; using Nethermind.State.Snap; +using Nethermind.Stats.Model; using Nethermind.Trie; using Nethermind.Trie.Pruning; @@ -33,7 +34,7 @@ public static (AddRangeResult result, bool moreChildrenToRight, List sortedBoundaryList, bool moreChildrenToRight) = + (AddRangeResult result, List<(TrieNode, TreePath)> sortedBoundaryList, bool moreChildrenToRight) = FillBoundaryTree(tree, startingHash, lastHash, limitHash, expectedRootHash, proofs); if (result != AddRangeResult.OK) @@ -91,7 +92,7 @@ public static (AddRangeResult result, bool moreChildrenToRight) AddStorageRange( ValueHash256 lastHash = slots[^1].Path; - (AddRangeResult result, List sortedBoundaryList, bool moreChildrenToRight) = FillBoundaryTree( + (AddRangeResult result, List<(TrieNode, TreePath)> sortedBoundaryList, bool moreChildrenToRight) = FillBoundaryTree( tree, startingHash, lastHash, ValueKeccak.MaxValue, expectedRootHash, proofs); if (result != AddRangeResult.OK) @@ -121,7 +122,7 @@ public static (AddRangeResult result, bool moreChildrenToRight) AddStorageRange( } [SkipLocalsInit] - private static (AddRangeResult result, List sortedBoundaryList, bool moreChildrenToRight) FillBoundaryTree( + private static (AddRangeResult result, List<(TrieNode, TreePath)> sortedBoundaryList, bool moreChildrenToRight) FillBoundaryTree( PatriciaTree tree, in ValueHash256? startingHash, in ValueHash256 endHash, @@ -138,7 +139,7 @@ private static (AddRangeResult result, List sortedBoundaryList, bool m ArgumentNullException.ThrowIfNull(tree); ValueHash256 effectiveStartingHAsh = startingHash.HasValue ? startingHash.Value : ValueKeccak.Zero; - List sortedBoundaryList = new(); + List<(TrieNode, TreePath)> sortedBoundaryList = new(); Dictionary dict = CreateProofDict(proofs, tree.TrieStore); @@ -164,7 +165,7 @@ private static (AddRangeResult result, List sortedBoundaryList, bool m tree.RootRef = root; proofNodesToProcess.Push((null, root, -1, new List())); - sortedBoundaryList.Add(root); + sortedBoundaryList.Add((root, TreePath.Empty)); bool moreChildrenToRight = false; @@ -183,7 +184,7 @@ private static (AddRangeResult result, List sortedBoundaryList, bool m pathIndex += node.Key.Length; path.AddRange(node.Key); proofNodesToProcess.Push((node, child, pathIndex, path)); - sortedBoundaryList.Add(child); + sortedBoundaryList.Add((child, TreePath.FromNibble(CollectionsMarshal.AsSpan(path)))); } else { @@ -240,7 +241,7 @@ private static (AddRangeResult result, List sortedBoundaryList, bool m }; proofNodesToProcess.Push((node, child, pathIndex, newPath)); - sortedBoundaryList.Add(child); + sortedBoundaryList.Add((child, TreePath.FromNibble(CollectionsMarshal.AsSpan(newPath)))); } } } @@ -250,7 +251,7 @@ private static (AddRangeResult result, List sortedBoundaryList, bool m return (AddRangeResult.OK, sortedBoundaryList, moreChildrenToRight); } - private static Dictionary CreateProofDict(IReadOnlyList proofs, ITrieStore store) + private static Dictionary CreateProofDict(IReadOnlyList proofs, IScopedTrieStore store) { Dictionary dict = new(); @@ -259,8 +260,10 @@ private static Dictionary CreateProofDict(IReadOnlyList< byte[] proof = proofs[i]; TrieNode node = new(NodeType.Unknown, proof, isDirty: true); node.IsBoundaryProofNode = true; - node.ResolveNode(store); - node.ResolveKey(store, isRoot: i == 0); + + TreePath emptyPath = TreePath.Empty; + node.ResolveNode(store, emptyPath); + node.ResolveKey(store, ref emptyPath, isRoot: i == 0); dict[node.Keccak] = node; } @@ -268,7 +271,7 @@ private static Dictionary CreateProofDict(IReadOnlyList< return dict; } - private static void StitchBoundaries(List sortedBoundaryList, ITrieStore store) + private static void StitchBoundaries(List<(TrieNode, TreePath)> sortedBoundaryList, IScopedTrieStore store) { if (sortedBoundaryList is null || sortedBoundaryList.Count == 0) { @@ -277,13 +280,13 @@ private static void StitchBoundaries(List sortedBoundaryList, ITrieSto for (int i = sortedBoundaryList.Count - 1; i >= 0; i--) { - TrieNode node = sortedBoundaryList[i]; + (TrieNode node, TreePath path) = sortedBoundaryList[i]; if (!node.IsPersisted) { if (node.IsExtension) { - if (IsChildPersisted(node, 1, store)) + if (IsChildPersisted(node, ref path, 1, store)) { node.IsBoundaryProofNode = false; } @@ -294,7 +297,7 @@ private static void StitchBoundaries(List sortedBoundaryList, ITrieSto bool isBoundaryProofNode = false; for (int ci = 0; ci <= 15; ci++) { - if (!IsChildPersisted(node, ci, store)) + if (!IsChildPersisted(node, ref path, ci, store)) { isBoundaryProofNode = true; break; @@ -307,7 +310,7 @@ private static void StitchBoundaries(List sortedBoundaryList, ITrieSto } } - private static bool IsChildPersisted(TrieNode node, int childIndex, ITrieStore store) + private static bool IsChildPersisted(TrieNode node, ref TreePath nodePath, int childIndex, IScopedTrieStore store) { TrieNode data = node.GetData(childIndex) as TrieNode; if (data is not null) @@ -320,7 +323,15 @@ private static bool IsChildPersisted(TrieNode node, int childIndex, ITrieStore s return true; } - return store.IsPersisted(childKeccak); + int previousPathLength = node.AppendChildPath(ref nodePath, childIndex); + try + { + return store.IsPersisted(nodePath, childKeccak); + } + finally + { + nodePath.TruncateMut(previousPathLength); + } } } } diff --git a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapServer.cs b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapServer.cs index 2a210aa3a6c..94d5d7373d4 100644 --- a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapServer.cs +++ b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapServer.cs @@ -55,11 +55,16 @@ public class SnapServer : ISnapServer public SnapServer(IReadOnlyTrieStore trieStore, IReadOnlyKeyValueStore codeDb, ILastNStateRootTracker stateRootTracker, ILogManager logManager) { _store = trieStore ?? throw new ArgumentNullException(nameof(trieStore)); - _storeWithReadFlag = new TrieStoreWithReadFlags(_store, _optimizedReadFlags); _codeDb = codeDb ?? throw new ArgumentNullException(nameof(codeDb)); _stateRootTracker = stateRootTracker; _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager)); _logger = logManager.GetClassLogger(); + + if (_store.Scheme == INodeStorage.KeyScheme.HalfPath) + { + _optimizedReadFlags = ReadFlags.HintReadAhead; + } + _storeWithReadFlag = new TrieStoreWithReadFlags(_store.GetTrieStore(null), _optimizedReadFlags); } private bool IsRootMissing(in ValueHash256 stateRoot) @@ -99,13 +104,14 @@ private bool IsRootMissing(in ValueHash256 stateRoot) default: try { + Hash256 storagePath = new Hash256(requestedPath[0]); Account? account = GetAccountByPath(tree, rootHash, requestedPath[0]); if (account is not null) { Hash256? storageRoot = account.StorageRoot; if (!storageRoot.Bytes.SequenceEqual(Keccak.EmptyTreeHash.Bytes)) { - StorageTree sTree = new(_store, storageRoot, _logManager); + StorageTree sTree = new(_store.GetTrieStore(storagePath), storageRoot, _logManager); for (int reqStorage = 1; reqStorage < requestedPath.Length; reqStorage++) { @@ -186,9 +192,6 @@ public IOwnedReadOnlyList GetByteCodes(IReadOnlyList reque if (IsRootMissing(rootHash)) return (ArrayPoolList.Empty(), ArrayPoolList.Empty()); byteLimit = Math.Max(Math.Min(byteLimit, HardResponseByteLimit), 1); - long responseSize = 0; - StateTree tree = new(_storeWithReadFlag, _logManager); - ValueHash256 startingHash1 = startingHash ?? ValueKeccak.Zero; ValueHash256 limitHash1 = limitHash ?? ValueKeccak.MaxValue; if (limitHash1 == ValueKeccak.Zero) @@ -196,6 +199,11 @@ public IOwnedReadOnlyList GetByteCodes(IReadOnlyList reque limitHash1 = ValueKeccak.MaxValue; } + long responseSize = 0; + StateTree tree = startingHash1 == ValueKeccak.Zero + ? new StateTree(new CachedTrieStore(_storeWithReadFlag), _logManager) + : new StateTree(_storeWithReadFlag, _logManager); + ArrayPoolList responseNodes = new(accounts.Count); for (int i = 0; i < accounts.Count; i++) { diff --git a/src/Nethermind/Nethermind.Synchronization/Synchronizer.cs b/src/Nethermind/Nethermind.Synchronization/Synchronizer.cs index 9cde79a661c..28b9acc6f68 100644 --- a/src/Nethermind/Nethermind.Synchronization/Synchronizer.cs +++ b/src/Nethermind/Nethermind.Synchronization/Synchronizer.cs @@ -26,7 +26,7 @@ using Nethermind.Synchronization.Reporting; using Nethermind.Synchronization.SnapSync; using Nethermind.Synchronization.StateSync; -using Nethermind.Trie.Pruning; +using Nethermind.Trie; namespace Nethermind.Synchronization { @@ -90,6 +90,7 @@ public class Synchronizer : ISynchronizer protected ISyncModeSelector? _syncModeSelector; private readonly IStateReader _stateReader; + private INodeStorage _nodeStorage; public virtual ISyncModeSelector SyncModeSelector => _syncModeSelector ??= new MultiSyncModeSelector( SyncProgressResolver, @@ -102,6 +103,7 @@ public class Synchronizer : ISynchronizer public Synchronizer( IDbProvider dbProvider, + INodeStorage nodeStorage, ISpecProvider specProvider, IBlockTree blockTree, IReceiptStorage receiptStorage, @@ -117,6 +119,7 @@ public Synchronizer( ILogManager logManager) { _dbProvider = dbProvider ?? throw new ArgumentNullException(nameof(dbProvider)); + _nodeStorage = nodeStorage ?? throw new ArgumentNullException(nameof(nodeStorage)); _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); @@ -139,7 +142,7 @@ public Synchronizer( dbProvider.StateDb, logManager, _syncConfig.SnapSyncAccountRangePartitionCount); - SnapProvider = new SnapProvider(progressTracker, dbProvider, logManager); + SnapProvider = new SnapProvider(progressTracker, dbProvider.CodeDb, nodeStorage, logManager); } public virtual void Start() @@ -273,7 +276,7 @@ private void StartFastSyncComponents() private void StartStateSyncComponents() { - TreeSync treeSync = new(SyncMode.StateNodes, _dbProvider.CodeDb, _dbProvider.StateDb, _blockTree, _logManager); + TreeSync treeSync = new(SyncMode.StateNodes, _dbProvider.CodeDb, _nodeStorage, _blockTree, _logManager); _stateSyncFeed = new StateSyncFeed(treeSync, _logManager); SyncDispatcher stateSyncDispatcher = CreateDispatcher( _stateSyncFeed, diff --git a/src/Nethermind/Nethermind.Synchronization/Trie/HealingStateTree.cs b/src/Nethermind/Nethermind.Synchronization/Trie/HealingStateTree.cs index 0bcac7bde70..a5ac514157b 100644 --- a/src/Nethermind/Nethermind.Synchronization/Trie/HealingStateTree.cs +++ b/src/Nethermind/Nethermind.Synchronization/Trie/HealingStateTree.cs @@ -19,7 +19,7 @@ public class HealingStateTree : StateTree [DebuggerStepThrough] public HealingStateTree(ITrieStore? store, ILogManager? logManager) - : base(store, logManager) + : base(store.GetTrieStore(null), logManager) { } @@ -83,7 +83,8 @@ private bool Recover(in ValueHash256 rlpHash, ReadOnlySpan pathPart, Hash2 byte[]? rlp = _recovery.Recover(rlpHash, request).GetAwaiter().GetResult(); if (rlp is not null) { - TrieStore.Set(rlpHash, rlp); + TreePath path = TreePath.FromNibble(pathPart); + TrieStore.Set(path, rlpHash, rlp); return true; } } diff --git a/src/Nethermind/Nethermind.Synchronization/Trie/HealingStorageTree.cs b/src/Nethermind/Nethermind.Synchronization/Trie/HealingStorageTree.cs index e7c917cab11..275c5ef4c96 100644 --- a/src/Nethermind/Nethermind.Synchronization/Trie/HealingStorageTree.cs +++ b/src/Nethermind/Nethermind.Synchronization/Trie/HealingStorageTree.cs @@ -19,7 +19,7 @@ public class HealingStorageTree : StorageTree private readonly Hash256 _stateRoot; private readonly ITrieNodeRecovery? _recovery; - public HealingStorageTree(ITrieStore? trieStore, Hash256 rootHash, ILogManager? logManager, Address address, Hash256 stateRoot, ITrieNodeRecovery? recovery) + public HealingStorageTree(IScopedTrieStore? trieStore, Hash256 rootHash, ILogManager? logManager, Address address, Hash256 stateRoot, ITrieNodeRecovery? recovery) : base(trieStore, rootHash, logManager) { _address = address; @@ -82,7 +82,8 @@ private bool Recover(in ValueHash256 rlpHash, ReadOnlySpan pathPart) byte[]? rlp = _recovery.Recover(rlpHash, request).GetAwaiter().GetResult(); if (rlp is not null) { - TrieStore.Set(rlpHash, rlp); + TreePath path = TreePath.FromNibble(pathPart); + TrieStore.Set(path, rlpHash, rlp); return true; } } diff --git a/src/Nethermind/Nethermind.Synchronization/Trie/HealingStorageTreeFactory.cs b/src/Nethermind/Nethermind.Synchronization/Trie/HealingStorageTreeFactory.cs index e21a03158ba..7885b93eedb 100644 --- a/src/Nethermind/Nethermind.Synchronization/Trie/HealingStorageTreeFactory.cs +++ b/src/Nethermind/Nethermind.Synchronization/Trie/HealingStorageTreeFactory.cs @@ -19,6 +19,6 @@ public void InitializeNetwork(ITrieNodeRecovery recovery) _recovery = recovery; } - public StorageTree Create(Address address, ITrieStore trieStore, Hash256 storageRoot, Hash256 stateRoot, ILogManager? logManager) => + public StorageTree Create(Address address, IScopedTrieStore trieStore, Hash256 storageRoot, Hash256 stateRoot, ILogManager? logManager) => new HealingStorageTree(trieStore, storageRoot, logManager, address, stateRoot, _recovery); } diff --git a/src/Nethermind/Nethermind.Synchronization/Trie/HealingTrieStore.cs b/src/Nethermind/Nethermind.Synchronization/Trie/HealingTrieStore.cs index 2a0248a5426..9c2db526d9c 100644 --- a/src/Nethermind/Nethermind.Synchronization/Trie/HealingTrieStore.cs +++ b/src/Nethermind/Nethermind.Synchronization/Trie/HealingTrieStore.cs @@ -20,11 +20,11 @@ public class HealingTrieStore : TrieStore private ITrieNodeRecovery>? _recovery; public HealingTrieStore( - IKeyValueStoreWithBatching? keyValueStore, + INodeStorage nodeStorage, IPruningStrategy? pruningStrategy, IPersistenceStrategy? persistenceStrategy, ILogManager? logManager) - : base(keyValueStore, pruningStrategy, persistenceStrategy, logManager) + : base(nodeStorage, pruningStrategy, persistenceStrategy, logManager) { } @@ -33,15 +33,15 @@ public void InitializeNetwork(ITrieNodeRecovery> recovery _recovery = recovery; } - public override byte[] LoadRlp(Hash256 keccak, ReadFlags readFlags = ReadFlags.None) + public override byte[]? LoadRlp(Hash256? address, in TreePath path, Hash256 keccak, ReadFlags readFlags = ReadFlags.None) { try { - return base.LoadRlp(keccak, readFlags); + return base.LoadRlp(address, path, keccak, readFlags); } catch (TrieNodeException) { - if (TryRecover(keccak, out byte[] rlp)) + if (TryRecover(address, path, keccak, out byte[] rlp)) { return rlp; } @@ -50,7 +50,7 @@ public override byte[] LoadRlp(Hash256 keccak, ReadFlags readFlags = ReadFlags.N } } - private bool TryRecover(Hash256 rlpHash, [NotNullWhen(true)] out byte[]? rlp) + private bool TryRecover(Hash256? address, in TreePath path, Hash256 rlpHash, [NotNullWhen(true)] out byte[]? rlp) { if (_recovery?.CanRecover == true) { @@ -58,7 +58,7 @@ private bool TryRecover(Hash256 rlpHash, [NotNullWhen(true)] out byte[]? rlp) rlp = _recovery.Recover(rlpHash, request).GetAwaiter().GetResult(); if (rlp is not null) { - _keyValueStore.Set(rlpHash.Bytes, rlp); + _nodeStorage.Set(address, path, rlpHash, rlp); return true; } } diff --git a/src/Nethermind/Nethermind.Trie.Test/NodeStorageFactoryTests.cs b/src/Nethermind/Nethermind.Trie.Test/NodeStorageFactoryTests.cs new file mode 100644 index 00000000000..c904a1b67a6 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie.Test/NodeStorageFactoryTests.cs @@ -0,0 +1,97 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using FluentAssertions; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Db; +using Nethermind.Logging; +using NUnit.Framework; + +namespace Nethermind.Trie.Test; + +public class NodeStorageFactoryTests +{ + [TestCase(INodeStorage.KeyScheme.Hash)] + [TestCase(INodeStorage.KeyScheme.HalfPath)] + public void Should_DetectHashBasedLayout(INodeStorage.KeyScheme preferredKeyScheme) + { + IDb memDb = PrepareMemDbWithKeyScheme(INodeStorage.KeyScheme.Hash); + + NodeStorageFactory nodeStorageFactory = new NodeStorageFactory(preferredKeyScheme, LimboLogs.Instance); + nodeStorageFactory.DetectCurrentKeySchemeFrom(memDb); + nodeStorageFactory.WrapKeyValueStore(memDb).Scheme.Should().Be(INodeStorage.KeyScheme.Hash); + } + + [TestCase(INodeStorage.KeyScheme.Hash)] + [TestCase(INodeStorage.KeyScheme.HalfPath)] + public void Should_DetectHalfPathBasedLayout(INodeStorage.KeyScheme preferredKeyScheme) + { + IDb memDb = PrepareMemDbWithKeyScheme(INodeStorage.KeyScheme.HalfPath); + + NodeStorageFactory nodeStorageFactory = new NodeStorageFactory(preferredKeyScheme, LimboLogs.Instance); + nodeStorageFactory.DetectCurrentKeySchemeFrom(memDb); + nodeStorageFactory.WrapKeyValueStore(memDb).Scheme.Should().Be(INodeStorage.KeyScheme.HalfPath); + } + + [TestCase(INodeStorage.KeyScheme.Hash)] + [TestCase(INodeStorage.KeyScheme.HalfPath)] + public void When_NotEnoughKey_Then_UsePreferredKeyScheme(INodeStorage.KeyScheme preferredKeyScheme) + { + IDb memDb = new MemDb(); + for (int i = 0; i < 5; i++) + { + Hash256 hash = Keccak.Compute(i.ToBigEndianByteArray()); + memDb[hash.Bytes] = hash.Bytes.ToArray(); + } + + NodeStorageFactory nodeStorageFactory = new NodeStorageFactory(preferredKeyScheme, LimboLogs.Instance); + nodeStorageFactory.DetectCurrentKeySchemeFrom(memDb); + nodeStorageFactory.WrapKeyValueStore(memDb).Scheme.Should().Be(preferredKeyScheme); + } + + [TestCase(INodeStorage.KeyScheme.HalfPath, INodeStorage.KeyScheme.Hash, INodeStorage.KeyScheme.Hash, true)] + [TestCase(INodeStorage.KeyScheme.Hash, INodeStorage.KeyScheme.HalfPath, INodeStorage.KeyScheme.HalfPath, true)] + [TestCase(INodeStorage.KeyScheme.HalfPath, INodeStorage.KeyScheme.Current, INodeStorage.KeyScheme.HalfPath, true)] + [TestCase(INodeStorage.KeyScheme.Hash, INodeStorage.KeyScheme.Current, INodeStorage.KeyScheme.Hash, false)] + [TestCase(null, INodeStorage.KeyScheme.Current, INodeStorage.KeyScheme.HalfPath, true)] + public void When_ForceUsePreferredIsTrue_Then_UsePreferred(INodeStorage.KeyScheme? currentKeyScheme, INodeStorage.KeyScheme preferredKeyScheme, INodeStorage.KeyScheme expectedScheme, bool requirePath) + { + IDb memDb = PrepareMemDbWithKeyScheme(currentKeyScheme); + + NodeStorageFactory nodeStorageFactory = new NodeStorageFactory(preferredKeyScheme, LimboLogs.Instance); + nodeStorageFactory.DetectCurrentKeySchemeFrom(memDb); + INodeStorage nodeStorage = nodeStorageFactory.WrapKeyValueStore(memDb, forceUsePreferredKeyScheme: true); + nodeStorage.Scheme.Should().Be(expectedScheme); + nodeStorage.RequirePath.Should().Be(requirePath); + } + + private MemDb PrepareMemDbWithKeyScheme(INodeStorage.KeyScheme? scheme) + { + MemDb memDb = new MemDb(); + if (scheme == INodeStorage.KeyScheme.Hash) + { + for (int i = 0; i < 20; i++) + { + Hash256 hash = Keccak.Compute(i.ToBigEndianByteArray()); + memDb[hash.Bytes] = hash.Bytes.ToArray(); + } + } + else if (scheme == INodeStorage.KeyScheme.HalfPath) + { + for (int i = 0; i < 10; i++) + { + Hash256 hash = Keccak.Compute(i.ToBigEndianByteArray()); + memDb[NodeStorage.GetHalfPathNodeStoragePath(null, TreePath.Empty, hash)] = hash.Bytes.ToArray(); + } + for (int i = 0; i < 10; i++) + { + Hash256 hash = Keccak.Compute(i.ToBigEndianByteArray()); + memDb[NodeStorage.GetHalfPathNodeStoragePath(hash, TreePath.Empty, hash)] = hash.Bytes.ToArray(); + } + } + + return memDb; + } +} diff --git a/src/Nethermind/Nethermind.Trie.Test/NodeStorageTests.cs b/src/Nethermind/Nethermind.Trie.Test/NodeStorageTests.cs new file mode 100644 index 00000000000..3e5cd920204 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie.Test/NodeStorageTests.cs @@ -0,0 +1,152 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using FluentAssertions; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Test; +using Nethermind.Core.Test.Builders; +using Nethermind.Trie.Pruning; +using NUnit.Framework; +using Org.BouncyCastle.Asn1.X509; + +namespace Nethermind.Trie.Test; + +[TestFixture(INodeStorage.KeyScheme.Hash)] +[TestFixture(INodeStorage.KeyScheme.HalfPath)] +public class NodeStorageTests +{ + private readonly INodeStorage.KeyScheme _currentKeyScheme; + + public NodeStorageTests(INodeStorage.KeyScheme currentKeyScheme) + { + _currentKeyScheme = currentKeyScheme; + } + + [Test] + public void Should_StoreAndRead() + { + TestMemDb testDb = new TestMemDb(); + NodeStorage nodeStorage = new NodeStorage(testDb, _currentKeyScheme); + + nodeStorage.KeyExists(null, TreePath.Empty, TestItem.KeccakA).Should().BeFalse(); + nodeStorage.Set(null, TreePath.Empty, TestItem.KeccakA, TestItem.KeccakA.BytesToArray()); + nodeStorage.Get(null, TreePath.Empty, TestItem.KeccakA).Should().BeEquivalentTo(TestItem.KeccakA.BytesToArray()); + nodeStorage.KeyExists(null, TreePath.Empty, TestItem.KeccakA).Should().BeTrue(); + + if (_currentKeyScheme == INodeStorage.KeyScheme.Hash) + { + testDb[TestItem.KeccakA.Bytes].Should().NotBeNull(); + } + else if (_currentKeyScheme == INodeStorage.KeyScheme.HalfPath) + { + testDb[NodeStorage.GetHalfPathNodeStoragePath(null, TreePath.Empty, TestItem.KeccakA)].Should().NotBeNull(); + } + } + + [Test] + public void Should_StoreAndRead_WithStorage() + { + TestMemDb testDb = new TestMemDb(); + NodeStorage nodeStorage = new NodeStorage(testDb, _currentKeyScheme); + + nodeStorage.KeyExists(TestItem.KeccakB, TreePath.Empty, TestItem.KeccakA).Should().BeFalse(); + nodeStorage.Set(TestItem.KeccakB, TreePath.Empty, TestItem.KeccakA, TestItem.KeccakA.BytesToArray()); + nodeStorage.Get(TestItem.KeccakB, TreePath.Empty, TestItem.KeccakA).Should().BeEquivalentTo(TestItem.KeccakA.BytesToArray()); + nodeStorage.KeyExists(TestItem.KeccakB, TreePath.Empty, TestItem.KeccakA).Should().BeTrue(); + + if (_currentKeyScheme == INodeStorage.KeyScheme.Hash) + { + testDb[TestItem.KeccakA.Bytes].Should().NotBeNull(); + } + else if (_currentKeyScheme == INodeStorage.KeyScheme.HalfPath) + { + testDb[NodeStorage.GetHalfPathNodeStoragePath(TestItem.KeccakB, TreePath.Empty, TestItem.KeccakA)].Should().NotBeNull(); + } + } + + [Test] + public void When_KeyNotExist_Should_TryBothKeyType() + { + TestMemDb testDb = new TestMemDb(); + NodeStorage nodeStorage = new NodeStorage(testDb, _currentKeyScheme); + + nodeStorage.Get(TestItem.KeccakB, TreePath.Empty, TestItem.KeccakA).Should().BeNull(); + + testDb.KeyWasRead(TestItem.KeccakA.Bytes.ToArray()); + testDb.KeyWasRead(NodeStorage.GetHalfPathNodeStoragePath(TestItem.KeccakB, TreePath.Empty, TestItem.KeccakA)); + } + + [Test] + public void When_EntryOfDifferentScheme_Should_StillBeAbleToRead() + { + TestMemDb testDb = new TestMemDb(); + NodeStorage nodeStorage = new NodeStorage(testDb, _currentKeyScheme); + + if (_currentKeyScheme == INodeStorage.KeyScheme.Hash) + { + testDb[NodeStorage.GetHalfPathNodeStoragePath(TestItem.KeccakB, TreePath.Empty, TestItem.KeccakA)] = + TestItem.KeccakA.BytesToArray(); + } + else + { + testDb[TestItem.KeccakA.Bytes] = TestItem.KeccakA.BytesToArray(); + } + + nodeStorage.Get(TestItem.KeccakB, TreePath.Empty, TestItem.KeccakA).Should().BeEquivalentTo(TestItem.KeccakA.BytesToArray()); + } + + [TestCase(false, 0, "000000000000000000003333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(false, 1, "002000000000000000013333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(false, 4, "002222000000000000043333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(false, 5, "002222200000000000053333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(false, 6, "012222220000000000063333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(false, 10, "0122222222220000000a3333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(false, 32, "012222222222222222203333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(true, 0, "0211111111111111111111111111111111111111111111111111111111111111110000000000000000003333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(true, 1, "0211111111111111111111111111111111111111111111111111111111111111112000000000000000013333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(true, 5, "0211111111111111111111111111111111111111111111111111111111111111112222200000000000053333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(true, 10, "02111111111111111111111111111111111111111111111111111111111111111122222222220000000a3333333333333333333333333333333333333333333333333333333333333333")] + [TestCase(true, 32, "0211111111111111111111111111111111111111111111111111111111111111112222222222222222203333333333333333333333333333333333333333333333333333333333333333")] + public void Test_HalfPathEncodng(bool hasAddress, int pathLength, string expectedKey) + { + if (_currentKeyScheme == INodeStorage.KeyScheme.Hash) return; + + Hash256? address = null; + if (hasAddress) + { + address = new Hash256("1111111111111111111111111111111111111111111111111111111111111111"); + } + + TreePath path = new TreePath(new Hash256("2222222222222222222222222222222222222222222222222222222222222222"), 64); + path.TruncateMut(pathLength); + + Hash256? hash = new Hash256("3333333333333333333333333333333333333333333333333333333333333333"); + + NodeStorage.GetHalfPathNodeStoragePath(address, path, hash).ToHexString().Should().Be(expectedKey); + } + + [TestCase(false, 3, ReadFlags.HintReadAhead)] + [TestCase(false, 10, ReadFlags.HintReadAhead | ReadFlags.HintReadAhead2)] + [TestCase(true, 3, ReadFlags.HintReadAhead | ReadFlags.HintReadAhead3)] + public void Test_WhenReadaheadUseDifferentReadaheadOnDifferentSection(bool hasAddress, int pathLength, ReadFlags expectedReadFlags) + { + if (_currentKeyScheme == INodeStorage.KeyScheme.Hash) return; + + TestMemDb testDb = new TestMemDb(); + NodeStorage nodeStorage = new NodeStorage(testDb, _currentKeyScheme); + + Hash256? address = null; + if (hasAddress) + { + address = new Hash256("1111111111111111111111111111111111111111111111111111111111111111"); + } + + TreePath path = new TreePath(new Hash256("2222222222222222222222222222222222222222222222222222222222222222"), 64); + path.TruncateMut(pathLength); + + nodeStorage.Get(address, path, Keccak.Zero, ReadFlags.HintReadAhead); + testDb.KeyWasReadWithFlags(NodeStorage.GetHalfPathNodeStoragePath(address, path, Keccak.Zero), expectedReadFlags); + } +} diff --git a/src/Nethermind/Nethermind.Trie.Test/Pruning/TestPruningStrategy.cs b/src/Nethermind/Nethermind.Trie.Test/Pruning/TestPruningStrategy.cs index ef9fb10b020..c3f4fcfe6de 100644 --- a/src/Nethermind/Nethermind.Trie.Test/Pruning/TestPruningStrategy.cs +++ b/src/Nethermind/Nethermind.Trie.Test/Pruning/TestPruningStrategy.cs @@ -8,10 +8,13 @@ namespace Nethermind.Trie.Test.Pruning public class TestPruningStrategy : IPruningStrategy { private readonly bool _pruningEnabled; - public TestPruningStrategy(bool pruningEnabled, bool shouldPrune = false) + private readonly int _trackedPastKeyCount; + + public TestPruningStrategy(bool pruningEnabled, bool shouldPrune = false, int trackedPastKeyCount = 0) { _pruningEnabled = pruningEnabled; ShouldPruneEnabled = shouldPrune; + _trackedPastKeyCount = trackedPastKeyCount; } public bool PruningEnabled => _pruningEnabled; @@ -27,5 +30,7 @@ public bool ShouldPrune(in long currentMemory) return false; } + + public int TrackedPastKeyCount => _trackedPastKeyCount; } } diff --git a/src/Nethermind/Nethermind.Trie.Test/Pruning/TreeStoreTests.cs b/src/Nethermind/Nethermind.Trie.Test/Pruning/TreeStoreTests.cs index 43e3e05c3f0..b36f35af072 100644 --- a/src/Nethermind/Nethermind.Trie.Test/Pruning/TreeStoreTests.cs +++ b/src/Nethermind/Nethermind.Trie.Test/Pruning/TreeStoreTests.cs @@ -16,16 +16,44 @@ using Nethermind.State; using Nethermind.State.Witnesses; using Nethermind.Trie.Pruning; +using NSubstitute; using NUnit.Framework; namespace Nethermind.Trie.Test.Pruning { - [TestFixture] + [TestFixture(INodeStorage.KeyScheme.HalfPath)] + [TestFixture(INodeStorage.KeyScheme.Hash)] public class TreeStoreTests { private readonly ILogManager _logManager = LimboLogs.Instance; // new OneLoggerLogManager(new NUnitLogger(LogLevel.Trace)); + private readonly AccountDecoder _accountDecoder = new(); + private readonly INodeStorage.KeyScheme _scheme; + + public TreeStoreTests(INodeStorage.KeyScheme scheme) + { + _scheme = scheme; + } + + private TrieStore CreateTrieStore( + IPruningStrategy? pruningStrategy = null, + IKeyValueStoreWithBatching? kvStore = null, + IPersistenceStrategy? persistenceStrategy = null, + long? reorgDepthOverride = null + ) + { + pruningStrategy ??= No.Pruning; + kvStore ??= new TestMemDb(); + persistenceStrategy ??= No.Persistence; + return new( + new NodeStorage(kvStore, _scheme, requirePath: _scheme == INodeStorage.KeyScheme.HalfPath), + pruningStrategy, + persistenceStrategy, + _logManager, + reorgDepthOverride: reorgDepthOverride); + } + [SetUp] public void Setup() { @@ -34,7 +62,7 @@ public void Setup() [Test] public void Initial_memory_is_0() { - using TrieStore trieStore = new(new MemDb(), new TestPruningStrategy(true), No.Persistence, _logManager); + using TrieStore trieStore = CreateTrieStore(pruningStrategy: new TestPruningStrategy(true)); trieStore.MemoryUsedByDirtyCache.Should().Be(0); } @@ -43,10 +71,11 @@ public void Memory_with_one_node_is_288() { TrieNode trieNode = new(NodeType.Leaf, Keccak.Zero); // 56B - using TrieStore trieStore = new(new MemDb(), new TestPruningStrategy(true), No.Persistence, _logManager); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode)); - trieStore.MemoryUsedByDirtyCache.Should().Be( - trieNode.GetMemorySize(false)); + using TrieStore fullTrieStore = CreateTrieStore(pruningStrategy: new TestPruningStrategy(true)); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode, TreePath.Empty)); + fullTrieStore.MemoryUsedByDirtyCache.Should().Be( + trieNode.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize); } @@ -57,12 +86,13 @@ public void Pruning_off_cache_should_not_change_commit_node() TrieNode trieNode2 = new(NodeType.Branch, TestItem.KeccakA); TrieNode trieNode3 = new(NodeType.Branch, TestItem.KeccakB); - using TrieStore trieStore = new(new MemDb(), No.Pruning, No.Persistence, _logManager); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode)); + using TrieStore fullTrieStore = CreateTrieStore(); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 1234, trieNode); - trieStore.CommitNode(124, new NodeCommitInfo(trieNode2)); - trieStore.CommitNode(11234, new NodeCommitInfo(trieNode3)); - trieStore.MemoryUsedByDirtyCache.Should().Be(0); + trieStore.CommitNode(124, new NodeCommitInfo(trieNode2, TreePath.Empty)); + trieStore.CommitNode(11234, new NodeCommitInfo(trieNode3, TreePath.Empty)); + fullTrieStore.MemoryUsedByDirtyCache.Should().Be(0); } [Test] @@ -72,10 +102,19 @@ public void When_commit_forward_write_flag_if_available() TestMemDb testMemDb = new TestMemDb(); - using TrieStore trieStore = new(testMemDb, No.Pruning, No.Persistence, _logManager); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode), WriteFlags.LowPriority); + using TrieStore fullTrieStore = CreateTrieStore(kvStore: testMemDb); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode, TreePath.Empty), WriteFlags.LowPriority); trieStore.FinishBlockCommit(TrieType.State, 1234, trieNode, WriteFlags.LowPriority); - testMemDb.KeyWasWrittenWithFlags(trieNode.Keccak.BytesToArray(), WriteFlags.LowPriority); + + if (_scheme == INodeStorage.KeyScheme.HalfPath) + { + testMemDb.KeyWasWrittenWithFlags(NodeStorage.GetHalfPathNodeStoragePath(null, TreePath.Empty, trieNode.Keccak), WriteFlags.LowPriority); + } + else + { + testMemDb.KeyWasWrittenWithFlags(trieNode.Keccak.Bytes.ToArray(), WriteFlags.LowPriority); + } } [Test] @@ -84,8 +123,9 @@ public void Should_always_announce_block_number_when_pruning_disabled_and_persis TrieNode trieNode = new(NodeType.Leaf, Keccak.Zero) { LastSeen = 1 }; long reorgBoundaryCount = 0L; - using TrieStore trieStore = new(new MemDb(), No.Pruning, Archive.Instance, _logManager); - trieStore.ReorgBoundaryReached += (_, e) => reorgBoundaryCount += e.BlockNumber; + using TrieStore fullTrieStore = CreateTrieStore(persistenceStrategy: Archive.Instance); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + fullTrieStore.ReorgBoundaryReached += (_, e) => reorgBoundaryCount += e.BlockNumber; trieStore.FinishBlockCommit(TrieType.State, 1, trieNode); reorgBoundaryCount.Should().Be(0); trieStore.FinishBlockCommit(TrieType.State, 2, trieNode); @@ -102,8 +142,9 @@ public void Should_always_announce_zero_when_not_persisting() TrieNode trieNode = new(NodeType.Leaf, Keccak.Zero); long reorgBoundaryCount = 0L; - using TrieStore trieStore = new(new MemDb(), No.Pruning, No.Persistence, _logManager); - trieStore.ReorgBoundaryReached += (_, e) => reorgBoundaryCount += e.BlockNumber; + using TrieStore fullTrieStore = CreateTrieStore(); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + fullTrieStore.ReorgBoundaryReached += (_, e) => reorgBoundaryCount += e.BlockNumber; trieStore.FinishBlockCommit(TrieType.State, 1, trieNode); trieStore.FinishBlockCommit(TrieType.State, 2, trieNode); trieStore.FinishBlockCommit(TrieType.State, 3, trieNode); @@ -114,10 +155,10 @@ public void Should_always_announce_zero_when_not_persisting() [Test] public void Pruning_off_cache_should_not_find_cached_or_unknown() { - using TrieStore trieStore = new(new MemDb(), No.Pruning, No.Persistence, _logManager); - TrieNode returnedNode = trieStore.FindCachedOrUnknown(TestItem.KeccakA); - TrieNode returnedNode2 = trieStore.FindCachedOrUnknown(TestItem.KeccakB); - TrieNode returnedNode3 = trieStore.FindCachedOrUnknown(TestItem.KeccakC); + using TrieStore trieStore = CreateTrieStore(); + TrieNode returnedNode = trieStore.FindCachedOrUnknown(null, TreePath.Empty, TestItem.KeccakA); + TrieNode returnedNode2 = trieStore.FindCachedOrUnknown(null, TreePath.Empty, TestItem.KeccakB); + TrieNode returnedNode3 = trieStore.FindCachedOrUnknown(null, TreePath.Empty, TestItem.KeccakC); Assert.That(returnedNode.NodeType, Is.EqualTo(NodeType.Unknown)); Assert.That(returnedNode2.NodeType, Is.EqualTo(NodeType.Unknown)); Assert.That(returnedNode3.NodeType, Is.EqualTo(NodeType.Unknown)); @@ -127,19 +168,19 @@ public void Pruning_off_cache_should_not_find_cached_or_unknown() [Test] public void FindCachedOrUnknown_CorrectlyCalculatedMemoryUsedByDirtyCache() { - using TrieStore trieStore = new(new MemDb(), new TestPruningStrategy(true), No.Persistence, _logManager); + using TrieStore trieStore = CreateTrieStore(pruningStrategy: new TestPruningStrategy(true)); long startSize = trieStore.MemoryUsedByDirtyCache; - trieStore.FindCachedOrUnknown(TestItem.KeccakA); + trieStore.FindCachedOrUnknown(null, TreePath.Empty, TestItem.KeccakA); TrieNode trieNode = new(NodeType.Leaf, Keccak.Zero); - long oneKeccakSize = trieNode.GetMemorySize(false); + long oneKeccakSize = trieNode.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize; Assert.That(trieStore.MemoryUsedByDirtyCache, Is.EqualTo(startSize + oneKeccakSize)); - trieStore.FindCachedOrUnknown(TestItem.KeccakB); + trieStore.FindCachedOrUnknown(null, TreePath.Empty, TestItem.KeccakB); Assert.That(trieStore.MemoryUsedByDirtyCache, Is.EqualTo(2 * oneKeccakSize + startSize)); - trieStore.FindCachedOrUnknown(TestItem.KeccakB); + trieStore.FindCachedOrUnknown(null, TreePath.Empty, TestItem.KeccakB); Assert.That(trieStore.MemoryUsedByDirtyCache, Is.EqualTo(2 * oneKeccakSize + startSize)); - trieStore.FindCachedOrUnknown(TestItem.KeccakC); + trieStore.FindCachedOrUnknown(null, TreePath.Empty, TestItem.KeccakC); Assert.That(trieStore.MemoryUsedByDirtyCache, Is.EqualTo(3 * oneKeccakSize + startSize)); - trieStore.FindCachedOrUnknown(TestItem.KeccakD, true); + trieStore.FindCachedOrUnknown(null, TreePath.Empty, TestItem.KeccakD, true); Assert.That(trieStore.MemoryUsedByDirtyCache, Is.EqualTo(3 * oneKeccakSize + startSize)); } @@ -149,12 +190,13 @@ public void Memory_with_two_nodes_is_correct() TrieNode trieNode1 = new(NodeType.Leaf, TestItem.KeccakA); TrieNode trieNode2 = new(NodeType.Leaf, TestItem.KeccakB); - using TrieStore trieStore = new(new MemDb(), new TestPruningStrategy(true), No.Persistence, _logManager); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1)); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2)); - trieStore.MemoryUsedByDirtyCache.Should().Be( - trieNode1.GetMemorySize(false) + - trieNode2.GetMemorySize(false)); + using TrieStore fullTrieStore = CreateTrieStore(pruningStrategy: new TestPruningStrategy(true)); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1, TreePath.Empty)); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2, TreePath.Empty)); + fullTrieStore.MemoryUsedByDirtyCache.Should().Be( + trieNode1.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize + + trieNode2.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize); } [Test] @@ -165,161 +207,185 @@ public void Memory_with_two_times_two_nodes_is_correct() TrieNode trieNode3 = new(NodeType.Leaf, TestItem.KeccakA); TrieNode trieNode4 = new(NodeType.Leaf, TestItem.KeccakB); - using TrieStore trieStore = new(new MemDb(), new TestPruningStrategy(true), No.Persistence, _logManager); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1)); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2)); + using TrieStore fullTrieStore = CreateTrieStore(pruningStrategy: new TestPruningStrategy(true)); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1, TreePath.Empty)); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 1234, trieNode2); - trieStore.CommitNode(1235, new NodeCommitInfo(trieNode3)); - trieStore.CommitNode(1235, new NodeCommitInfo(trieNode4)); + trieStore.CommitNode(1235, new NodeCommitInfo(trieNode3, TreePath.Empty)); + trieStore.CommitNode(1235, new NodeCommitInfo(trieNode4, TreePath.Empty)); // depending on whether the node gets resolved it gives different values here in debugging and run // needs some attention - trieStore.MemoryUsedByDirtyCache.Should().BeLessOrEqualTo( - trieNode1.GetMemorySize(false) + - trieNode2.GetMemorySize(false)); + fullTrieStore.MemoryUsedByDirtyCache.Should().BeLessOrEqualTo( + trieNode1.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize + + trieNode2.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize); } [Test] public void Dispatcher_will_try_to_clear_memory() { TrieNode trieNode1 = new(NodeType.Leaf, new byte[0]); - trieNode1.ResolveKey(null!, true); + TreePath emptyPath = TreePath.Empty; + trieNode1.ResolveKey(null!, ref emptyPath, true); TrieNode trieNode2 = new(NodeType.Leaf, new byte[1]); - trieNode2.ResolveKey(null!, true); + trieNode2.ResolveKey(null!, ref emptyPath, true); TrieNode trieNode3 = new(NodeType.Leaf, new byte[2]); - trieNode3.ResolveKey(null!, true); + trieNode3.ResolveKey(null!, ref emptyPath, true); TrieNode trieNode4 = new(NodeType.Leaf, new byte[3]); - trieNode4.ResolveKey(null!, true); + trieNode4.ResolveKey(null!, ref emptyPath, true); - using TrieStore trieStore = new(new MemDb(), new MemoryLimit(640), No.Persistence, _logManager); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1)); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2)); + using TrieStore fullTrieStore = CreateTrieStore(pruningStrategy: new MemoryLimit(640)); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1, TreePath.Empty)); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 1234, trieNode2); - trieStore.CommitNode(1235, new NodeCommitInfo(trieNode3)); - trieStore.CommitNode(1235, new NodeCommitInfo(trieNode4)); + trieStore.CommitNode(1235, new NodeCommitInfo(trieNode3, TreePath.Empty)); + trieStore.CommitNode(1235, new NodeCommitInfo(trieNode4, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 1235, trieNode2); trieStore.FinishBlockCommit(TrieType.State, 1236, trieNode2); - trieStore.MemoryUsedByDirtyCache.Should().Be( - trieNode1.GetMemorySize(false) + - trieNode2.GetMemorySize(false) + - trieNode3.GetMemorySize(false) + - trieNode4.GetMemorySize(false)); + fullTrieStore.MemoryUsedByDirtyCache.Should().Be( + trieNode1.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize + + trieNode2.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize + + trieNode3.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize + + trieNode4.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize); } [Test] public void Dispatcher_will_try_to_clear_memory_the_soonest_possible() { TrieNode trieNode1 = new(NodeType.Leaf, new byte[0]); - trieNode1.ResolveKey(null!, true); + TreePath emptyPath = TreePath.Empty; + trieNode1.ResolveKey(null!, ref emptyPath, true); TrieNode trieNode2 = new(NodeType.Leaf, new byte[1]); - trieNode2.ResolveKey(null!, true); + trieNode2.ResolveKey(null!, ref emptyPath, true); TrieNode trieNode3 = new(NodeType.Leaf, new byte[2]); - trieNode3.ResolveKey(null!, true); + trieNode3.ResolveKey(null!, ref emptyPath, true); TrieNode trieNode4 = new(NodeType.Leaf, new byte[3]); - trieNode4.ResolveKey(null!, true); + trieNode4.ResolveKey(null!, ref emptyPath, true); - using TrieStore trieStore = new(new MemDb(), new MemoryLimit(512), No.Persistence, _logManager); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1)); - trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2)); + using TrieStore fullTrieStore = CreateTrieStore(pruningStrategy: new MemoryLimit(512)); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode1, TreePath.Empty)); + trieStore.CommitNode(1234, new NodeCommitInfo(trieNode2, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 1234, trieNode2); - trieStore.CommitNode(1235, new NodeCommitInfo(trieNode3)); - trieStore.CommitNode(1235, new NodeCommitInfo(trieNode4)); - trieStore.MemoryUsedByDirtyCache.Should().Be( - trieNode1.GetMemorySize(false) + - trieNode2.GetMemorySize(false) + - trieNode3.GetMemorySize(false) + - trieNode4.GetMemorySize(false)); + trieStore.CommitNode(1235, new NodeCommitInfo(trieNode3, TreePath.Empty)); + trieStore.CommitNode(1235, new NodeCommitInfo(trieNode4, TreePath.Empty)); + fullTrieStore.MemoryUsedByDirtyCache.Should().Be( + trieNode1.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize + + trieNode2.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize + + trieNode3.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize + + trieNode4.GetMemorySize(false) + ExpectedPerNodeKeyMemorySize); } [Test] public void Dispatcher_will_always_try_to_clear_memory() { - TrieStore trieStore = new(new MemDb(), new MemoryLimit(512), No.Persistence, _logManager); + TrieStore fullTrieStore = CreateTrieStore(pruningStrategy: new MemoryLimit(512)); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + TreePath emptyPath = TreePath.Empty; for (int i = 0; i < 1024; i++) { for (int j = 0; j < 1 + i % 3; j++) { TrieNode trieNode = new(NodeType.Leaf, new byte[0]); // 192B - trieNode.ResolveKey(NullTrieNodeResolver.Instance, true); - trieStore.CommitNode(i, new NodeCommitInfo(trieNode)); + trieNode.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); + trieStore.CommitNode(i, new NodeCommitInfo(trieNode, TreePath.Empty)); } TrieNode fakeRoot = new(NodeType.Leaf, new byte[0]); // 192B - fakeRoot.ResolveKey(NullTrieNodeResolver.Instance, true); + fakeRoot.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); trieStore.FinishBlockCommit(TrieType.State, i, fakeRoot); } - trieStore.MemoryUsedByDirtyCache.Should().BeLessThan(512 * 2); + fullTrieStore.MemoryUsedByDirtyCache.Should().BeLessThan(512 * 2); } [Test] public void Dispatcher_will_save_to_db_everything_from_snapshot_blocks() { TrieNode a = new(NodeType.Leaf, new byte[0]); // 192B - a.ResolveKey(NullTrieNodeResolver.Instance, true); + TreePath emptyPath = TreePath.Empty; + a.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); MemDb memDb = new(); + NodeStorage storage = new NodeStorage(memDb); - using TrieStore trieStore = new(memDb, new MemoryLimit(16.MB()), new ConstantInterval(4), _logManager); + using TrieStore fullTrieStore = CreateTrieStore( + pruningStrategy: new MemoryLimit(16.MB()), + kvStore: memDb, + persistenceStrategy: new ConstantInterval(4)); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); - trieStore.CommitNode(0, new NodeCommitInfo(a)); + trieStore.CommitNode(0, new NodeCommitInfo(a, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 0, a); trieStore.FinishBlockCommit(TrieType.State, 1, a); trieStore.FinishBlockCommit(TrieType.State, 2, a); trieStore.FinishBlockCommit(TrieType.State, 3, a); trieStore.FinishBlockCommit(TrieType.State, 4, a); - memDb[a.Keccak!.Bytes].Should().NotBeNull(); - trieStore.IsNodeCached(a.Keccak).Should().BeTrue(); + storage.Get(null, TreePath.Empty, a.Keccak).Should().NotBeNull(); + fullTrieStore.IsNodeCached(null, TreePath.Empty, a.Keccak).Should().BeTrue(); } [Test] public void Stays_in_memory_until_persisted() { TrieNode a = new(NodeType.Leaf, new byte[0]); // 192B - a.ResolveKey(NullTrieNodeResolver.Instance, true); + TreePath emptyPath = TreePath.Empty; + a.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); MemDb memDb = new(); + NodeStorage storage = new NodeStorage(memDb); - using TrieStore trieStore = new(memDb, new MemoryLimit(16.MB()), No.Persistence, _logManager); + using TrieStore fullTrieStore = CreateTrieStore(pruningStrategy: new MemoryLimit(16.MB())); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); - trieStore.CommitNode(0, new NodeCommitInfo(a)); + trieStore.CommitNode(0, new NodeCommitInfo(a, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 0, a); trieStore.FinishBlockCommit(TrieType.State, 1, a); trieStore.FinishBlockCommit(TrieType.State, 2, a); trieStore.FinishBlockCommit(TrieType.State, 3, a); // <- do not persist in this test - memDb[a.Keccak!.Bytes].Should().BeNull(); - trieStore.IsNodeCached(a.Keccak).Should().BeTrue(); + storage.Get(null, TreePath.Empty, a.Keccak).Should().BeNull(); + fullTrieStore.IsNodeCached(null, TreePath.Empty, a.Keccak).Should().BeTrue(); } [Test] public void Can_load_from_rlp() { - MemDb memDb = new(); - memDb[Keccak.Zero.Bytes] = new byte[] { 1, 2, 3 }; + MemDb memDb = new MemDb(); + NodeStorage storage = new NodeStorage(memDb); + storage.Set(null, TreePath.Empty, Keccak.Zero, new byte[] { 1, 2, 3 }, WriteFlags.None); - using TrieStore trieStore = new(memDb, _logManager); - trieStore.LoadRlp(Keccak.Zero).Should().NotBeNull(); + using TrieStore trieStore = CreateTrieStore(kvStore: memDb); + trieStore.LoadRlp(null, TreePath.Empty, Keccak.Zero).Should().NotBeNull(); } [Test] public void Will_get_persisted_on_snapshot_if_referenced() { TrieNode a = new(NodeType.Leaf, new byte[0]); // 192B - a.ResolveKey(NullTrieNodeResolver.Instance, true); + TreePath emptyPath = TreePath.Empty; + a.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); MemDb memDb = new(); + NodeStorage storage = new NodeStorage(memDb); - using TrieStore trieStore = new(memDb, new MemoryLimit(16.MB()), new ConstantInterval(4), _logManager); + using TrieStore fullTrieStore = CreateTrieStore( + kvStore: memDb, + pruningStrategy: new MemoryLimit(16.MB()), + persistenceStrategy: new ConstantInterval(4) + ); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); trieStore.FinishBlockCommit(TrieType.State, 0, null); - trieStore.CommitNode(1, new NodeCommitInfo(a)); + trieStore.CommitNode(1, new NodeCommitInfo(a, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 1, a); trieStore.FinishBlockCommit(TrieType.State, 2, a); trieStore.FinishBlockCommit(TrieType.State, 3, a); @@ -329,57 +395,70 @@ public void Will_get_persisted_on_snapshot_if_referenced() trieStore.FinishBlockCommit(TrieType.State, 7, a); trieStore.FinishBlockCommit(TrieType.State, 8, a); - memDb[a.Keccak!.Bytes].Should().NotBeNull(); - trieStore.IsNodeCached(a.Keccak).Should().BeTrue(); + storage.Get(null, TreePath.Empty, a.Keccak).Should().NotBeNull(); + fullTrieStore.IsNodeCached(null, TreePath.Empty, a.Keccak).Should().BeTrue(); } [Test] public void Will_not_get_dropped_on_snapshot_if_unreferenced_in_later_blocks() { TrieNode a = new(NodeType.Leaf, new byte[0]); - a.ResolveKey(NullTrieNodeResolver.Instance, true); + TreePath emptyPath = TreePath.Empty; + a.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); TrieNode b = new(NodeType.Leaf, new byte[1]); - b.ResolveKey(NullTrieNodeResolver.Instance, true); + b.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); MemDb memDb = new(); + NodeStorage nodeStorage = new NodeStorage(memDb); - using TrieStore trieStore = new(memDb, new MemoryLimit(16.MB()), new ConstantInterval(4), _logManager); + using TrieStore fullTrieStore = CreateTrieStore( + kvStore: memDb, + pruningStrategy: new MemoryLimit(16.MB()), + persistenceStrategy: new ConstantInterval(4)); + + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); trieStore.FinishBlockCommit(TrieType.State, 0, null); - trieStore.CommitNode(1, new NodeCommitInfo(a)); + trieStore.CommitNode(1, new NodeCommitInfo(a, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 1, a); trieStore.FinishBlockCommit(TrieType.State, 2, a); trieStore.FinishBlockCommit(TrieType.State, 3, a); trieStore.FinishBlockCommit(TrieType.State, 4, a); trieStore.FinishBlockCommit(TrieType.State, 5, a); trieStore.FinishBlockCommit(TrieType.State, 6, a); - trieStore.CommitNode(7, new NodeCommitInfo(b)); + trieStore.CommitNode(7, new NodeCommitInfo(b, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 7, b); trieStore.FinishBlockCommit(TrieType.State, 8, b); - memDb[a.Keccak!.Bytes].Should().NotBeNull(); - trieStore.IsNodeCached(a.Keccak).Should().BeTrue(); + nodeStorage.Get(null, TreePath.Empty, a.Keccak).Should().NotBeNull(); + fullTrieStore.IsNodeCached(null, TreePath.Empty, a.Keccak).Should().BeTrue(); } [Test] public void Will_get_dropped_on_snapshot_if_it_was_a_transient_node() { TrieNode a = new(NodeType.Leaf, new byte[] { 1 }); - a.ResolveKey(NullTrieNodeResolver.Instance, true); + TreePath emptyPath = TreePath.Empty; + a.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); TrieNode b = new(NodeType.Leaf, new byte[] { 2 }); - b.ResolveKey(NullTrieNodeResolver.Instance, true); + b.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); MemDb memDb = new(); - using TrieStore trieStore = new(memDb, new MemoryLimit(16.MB()), new ConstantInterval(4), _logManager); + using TrieStore fullTrieStore = CreateTrieStore( + kvStore: memDb, + pruningStrategy: new MemoryLimit(16.MB()), + persistenceStrategy: new ConstantInterval(4)); + + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); trieStore.FinishBlockCommit(TrieType.State, 0, null); - trieStore.CommitNode(1, new NodeCommitInfo(a)); + trieStore.CommitNode(1, new NodeCommitInfo(a, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 1, a); trieStore.FinishBlockCommit(TrieType.State, 2, a); - trieStore.CommitNode(3, new NodeCommitInfo(b)); // <- new root + trieStore.CommitNode(3, new NodeCommitInfo(b, TreePath.Empty)); // <- new root trieStore.FinishBlockCommit(TrieType.State, 3, b); trieStore.FinishBlockCommit(TrieType.State, 4, b); // should be 'a' to test properly trieStore.FinishBlockCommit(TrieType.State, 5, b); // should be 'a' to test properly @@ -388,7 +467,7 @@ public void Will_get_dropped_on_snapshot_if_it_was_a_transient_node() trieStore.FinishBlockCommit(TrieType.State, 8, b); // should be 'a' to test properly memDb[a.Keccak!.Bytes].Should().BeNull(); - trieStore.IsNodeCached(a.Keccak).Should().BeTrue(); + fullTrieStore.IsNodeCached(null, TreePath.Empty, a.Keccak).Should().BeTrue(); } private class BadDb : IKeyValueStoreWithBatching @@ -446,26 +525,34 @@ public void Trie_store_multi_threaded_scenario() tree.Set(TestItem.AddressB, Build.A.Account.WithBalance(1000).TestObject); } - private readonly AccountDecoder _accountDecoder = new(); - [Test] public void Will_store_storage_on_snapshot() { TrieNode storage1 = new(NodeType.Leaf, new byte[2]); - storage1.ResolveKey(NullTrieNodeResolver.Instance, true); + TreePath emptyPath = TreePath.Empty; + storage1.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); TrieNode a = new(NodeType.Leaf); Account account = new(1, 1, storage1.Keccak, Keccak.OfAnEmptyString); a.Value = _accountDecoder.Encode(account).Bytes; - a.Key = Bytes.FromHexString("abc"); - a.ResolveKey(NullTrieNodeResolver.Instance, true); + a.Key = Nibbles.BytesToNibbleBytes(TestItem.KeccakA.BytesToArray()); + a.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); MemDb memDb = new(); + NodeStorage asStorage = new NodeStorage(memDb); - using TrieStore trieStore = new(memDb, new MemoryLimit(16.MB()), new ConstantInterval(4), _logManager); + using TrieStore fullTrieStore = CreateTrieStore( + kvStore: memDb, + pruningStrategy: new MemoryLimit(16.MB()), + persistenceStrategy: new ConstantInterval(4)); + + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); trieStore.FinishBlockCommit(TrieType.State, 0, null); - trieStore.CommitNode(1, new NodeCommitInfo(a)); - trieStore.CommitNode(1, new NodeCommitInfo(storage1)); + trieStore.CommitNode(1, new NodeCommitInfo(a, TreePath.Empty)); + fullTrieStore.GetTrieStore(TestItem.KeccakA) + .CommitNode(1, new NodeCommitInfo(storage1, TreePath.Empty)); + fullTrieStore.GetTrieStore(TestItem.KeccakA) + .FinishBlockCommit(TrieType.Storage, 1, storage1); trieStore.FinishBlockCommit(TrieType.Storage, 1, storage1); trieStore.FinishBlockCommit(TrieType.State, 1, a); trieStore.FinishBlockCommit(TrieType.State, 2, a); @@ -476,9 +563,9 @@ public void Will_store_storage_on_snapshot() trieStore.FinishBlockCommit(TrieType.State, 7, a); trieStore.FinishBlockCommit(TrieType.State, 8, a); - memDb[a.Keccak!.Bytes].Should().NotBeNull(); - memDb[storage1.Keccak!.Bytes].Should().NotBeNull(); - trieStore.IsNodeCached(a.Keccak).Should().BeTrue(); + asStorage.Get(null, TreePath.Empty, a.Keccak).Should().NotBeNull(); + asStorage.Get(TestItem.KeccakA, TreePath.Empty, storage1.Keccak).Should().NotBeNull(); + fullTrieStore.IsNodeCached(null, TreePath.Empty, a.Keccak).Should().BeTrue(); // trieStore.IsInMemory(storage1.Keccak).Should().BeFalse(); } @@ -486,28 +573,34 @@ public void Will_store_storage_on_snapshot() public void Will_drop_transient_storage() { TrieNode storage1 = new(NodeType.Leaf, new byte[2]); - storage1.ResolveKey(NullTrieNodeResolver.Instance, true); + TreePath emptyPath = TreePath.Empty; + storage1.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); TrieNode a = new(NodeType.Leaf); Account account = new(1, 1, storage1.Keccak, Keccak.OfAnEmptyString); a.Value = _accountDecoder.Encode(account).Bytes; a.Key = Bytes.FromHexString("abc"); - a.ResolveKey(NullTrieNodeResolver.Instance, true); + a.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); TrieNode b = new(NodeType.Leaf, new byte[1]); - b.ResolveKey(NullTrieNodeResolver.Instance, true); + b.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); MemDb memDb = new(); - using TrieStore trieStore = new(memDb, new MemoryLimit(16.MB()), new ConstantInterval(4), _logManager); + using TrieStore fullTrieStore = CreateTrieStore( + kvStore: memDb, + pruningStrategy: new MemoryLimit(16.MB()), + persistenceStrategy: new ConstantInterval(4)); + + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); trieStore.FinishBlockCommit(TrieType.State, 0, null); - trieStore.CommitNode(1, new NodeCommitInfo(a)); - trieStore.CommitNode(1, new NodeCommitInfo(storage1)); + trieStore.CommitNode(1, new NodeCommitInfo(a, TreePath.Empty)); + trieStore.CommitNode(1, new NodeCommitInfo(storage1, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.Storage, 1, storage1); trieStore.FinishBlockCommit(TrieType.State, 1, a); trieStore.FinishBlockCommit(TrieType.State, 2, a); - trieStore.CommitNode(3, new NodeCommitInfo(b)); // <- new root + trieStore.CommitNode(3, new NodeCommitInfo(b, TreePath.Empty)); // <- new root trieStore.FinishBlockCommit(TrieType.State, 3, b); trieStore.FinishBlockCommit(TrieType.State, 4, b); // should be 'a' to test properly trieStore.FinishBlockCommit(TrieType.State, 5, b); // should be 'a' to test properly @@ -517,48 +610,65 @@ public void Will_drop_transient_storage() memDb[a.Keccak!.Bytes].Should().BeNull(); memDb[storage1.Keccak!.Bytes].Should().BeNull(); - trieStore.IsNodeCached(a.Keccak).Should().BeTrue(); - trieStore.IsNodeCached(storage1.Keccak).Should().BeTrue(); + fullTrieStore.IsNodeCached(null, TreePath.Empty, a.Keccak).Should().BeTrue(); + fullTrieStore.IsNodeCached(null, TreePath.Empty, storage1.Keccak).Should().BeTrue(); } [Test] public void Will_combine_same_storage() { + byte[] storage1Nib = Nibbles.BytesToNibbleBytes(TestItem.KeccakA.BytesToArray()); + storage1Nib[0] = 0; + byte[] storage2Nib = Nibbles.BytesToNibbleBytes(TestItem.KeccakA.BytesToArray()); + storage2Nib[0] = 1; + TrieNode storage1 = new(NodeType.Leaf, new byte[32]); - storage1.ResolveKey(NullTrieNodeResolver.Instance, true); + TreePath emptyPath = TreePath.Empty; + storage1.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); TrieNode a = new(NodeType.Leaf); Account account = new(1, 1, storage1.Keccak, Keccak.OfAnEmptyString); a.Value = _accountDecoder.Encode(account).Bytes; - a.Key = Bytes.FromHexString("abc"); - a.ResolveKey(NullTrieNodeResolver.Instance, true); + a.Key = storage1Nib[1..]; + a.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); TrieNode storage2 = new(NodeType.Leaf, new byte[32]); - storage2.ResolveKey(NullTrieNodeResolver.Instance, true); + storage2.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); TrieNode b = new(NodeType.Leaf); Account accountB = new(2, 1, storage2.Keccak, Keccak.OfAnEmptyString); b.Value = _accountDecoder.Encode(accountB).Bytes; - b.Key = Bytes.FromHexString("abcd"); - b.ResolveKey(NullTrieNodeResolver.Instance, true); + b.Key = storage2Nib[1..]; + b.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); TrieNode branch = new(NodeType.Branch); branch.SetChild(0, a); branch.SetChild(1, b); - branch.ResolveKey(NullTrieStore.Instance, true); + branch.ResolveKey(NullTrieStore.Instance, ref emptyPath, true); MemDb memDb = new(); + NodeStorage storage = new NodeStorage(memDb); + + using TrieStore fullTrieStore = CreateTrieStore( + kvStore: memDb, + pruningStrategy: new MemoryLimit(16.MB()), + persistenceStrategy: new ConstantInterval(4)); - using TrieStore trieStore = new(memDb, new MemoryLimit(16.MB()), new ConstantInterval(4), _logManager); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); trieStore.FinishBlockCommit(TrieType.State, 0, null); - trieStore.CommitNode(1, new NodeCommitInfo(storage1)); - trieStore.FinishBlockCommit(TrieType.Storage, 1, storage1); - trieStore.CommitNode(1, new NodeCommitInfo(storage2)); - trieStore.FinishBlockCommit(TrieType.Storage, 1, storage2); - trieStore.CommitNode(1, new NodeCommitInfo(a)); - trieStore.CommitNode(1, new NodeCommitInfo(b)); - trieStore.CommitNode(1, new NodeCommitInfo(branch)); + + IScopedTrieStore storageTrieStore = fullTrieStore.GetTrieStore(new Hash256(Nibbles.ToBytes(storage1Nib))); + storageTrieStore.CommitNode(1, new NodeCommitInfo(storage1, TreePath.Empty)); + storageTrieStore.FinishBlockCommit(TrieType.Storage, 1, storage1); + + storageTrieStore = fullTrieStore.GetTrieStore(new Hash256(Nibbles.ToBytes(storage2Nib))); + storageTrieStore.CommitNode(1, new NodeCommitInfo(storage2, TreePath.Empty)); + storageTrieStore.FinishBlockCommit(TrieType.Storage, 1, storage2); + + trieStore.CommitNode(1, new NodeCommitInfo(a, TreePath.Empty)); + trieStore.CommitNode(1, new NodeCommitInfo(b, TreePath.Empty)); + trieStore.CommitNode(1, new NodeCommitInfo(branch, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 1, branch); trieStore.FinishBlockCommit(TrieType.State, 2, branch); trieStore.FinishBlockCommit(TrieType.State, 3, branch); @@ -568,10 +678,10 @@ public void Will_combine_same_storage() trieStore.FinishBlockCommit(TrieType.State, 7, branch); trieStore.FinishBlockCommit(TrieType.State, 8, branch); - memDb[a.Keccak!.Bytes].Should().NotBeNull(); - memDb[storage1.Keccak!.Bytes].Should().NotBeNull(); - trieStore.IsNodeCached(a.Keccak).Should().BeTrue(); - trieStore.IsNodeCached(storage1.Keccak).Should().BeTrue(); + storage.Get(null, TreePath.FromNibble(new byte[] { 0 }), a.Keccak).Should().NotBeNull(); + storage.Get(new Hash256(Nibbles.ToBytes(storage1Nib)), TreePath.Empty, storage1.Keccak).Should().NotBeNull(); + fullTrieStore.IsNodeCached(null, TreePath.Empty, a.Keccak).Should().BeTrue(); + fullTrieStore.IsNodeCached(new Hash256(Nibbles.ToBytes(storage1Nib)), TreePath.Empty, storage1.Keccak).Should().BeTrue(); } [Test] @@ -581,17 +691,19 @@ public void ReadOnly_store_doesnt_change_witness() Account account = new(1, 1, TestItem.KeccakA, Keccak.OfAnEmptyString); node.Value = _accountDecoder.Encode(account).Bytes; node.Key = Bytes.FromHexString("abc"); - node.ResolveKey(NullTrieNodeResolver.Instance, true); + TreePath emptyPath = TreePath.Empty; + node.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); MemDb originalStore = new MemDb(); WitnessCollector witnessCollector = new WitnessCollector(new MemDb(), LimboLogs.Instance); IKeyValueStoreWithBatching store = originalStore.WitnessedBy(witnessCollector); - using TrieStore trieStore = new(store, new TestPruningStrategy(false), No.Persistence, _logManager); - trieStore.CommitNode(0, new NodeCommitInfo(node)); + using TrieStore fullTrieStore = CreateTrieStore(pruningStrategy: new TestPruningStrategy(false), kvStore: store); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + trieStore.CommitNode(0, new NodeCommitInfo(node, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 0, node); - IReadOnlyTrieStore readOnlyTrieStore = trieStore.AsReadOnly(originalStore); - readOnlyTrieStore.LoadRlp(node.Keccak); + IReadOnlyTrieStore readOnlyTrieStore = fullTrieStore.AsReadOnly(new NodeStorage(originalStore)); + readOnlyTrieStore.LoadRlp(null, TreePath.Empty, node.Keccak); witnessCollector.Collected.Should().BeEmpty(); } @@ -609,14 +721,19 @@ public async Task Read_only_trie_store_is_allowing_many_thread_to_work_with_the_ trieNode.Seal(); MemDb memDb = new(); - using TrieStore store = new(memDb, Prune.WhenCacheReaches(10.MB()), Persist.IfBlockOlderThan(10), _logManager); - ITrieStore trieStore = store; - trieNode.ResolveKey(trieStore, false); - trieStore.CommitNode(1, new NodeCommitInfo(trieNode)); + using TrieStore fullTrieStore = CreateTrieStore( + kvStore: memDb, + pruningStrategy: new MemoryLimit(10.MB()), + persistenceStrategy: new ConstantInterval(10)); + + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + TreePath emptyPath = TreePath.Empty; + trieNode.ResolveKey(trieStore, ref emptyPath, false); + trieStore.CommitNode(1, new NodeCommitInfo(trieNode, TreePath.Empty)); if (beThreadSafe) { - trieStore = trieStore.AsReadOnly(memDb); + trieStore = fullTrieStore.AsReadOnly().GetTrieStore(null); } void CheckChildren() @@ -625,7 +742,7 @@ void CheckChildren() { try { - trieStore.FindCachedOrUnknown(trieNode.Keccak).GetChildHash(i % 16).Should().BeEquivalentTo(TestItem.Keccaks[i % 16], i.ToString()); + trieStore.FindCachedOrUnknown(TreePath.Empty, trieNode.Keccak).GetChildHash(i % 16).Should().BeEquivalentTo(TestItem.Keccaks[i % 16], i.ToString()); } catch (Exception) { @@ -659,16 +776,18 @@ public void ReadOnly_store_returns_copies(bool pruning) TrieNode node = new(NodeType.Leaf); Account account = new(1, 1, TestItem.KeccakA, Keccak.OfAnEmptyString); node.Value = _accountDecoder.Encode(account).Bytes; - node.Key = Bytes.FromHexString("abc"); - node.ResolveKey(NullTrieNodeResolver.Instance, true); + node.Key = Nibbles.BytesToNibbleBytes(TestItem.KeccakA.BytesToArray()); + TreePath emptyPath = TreePath.Empty; + node.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); - using TrieStore trieStore = new(new MemDb(), new TestPruningStrategy(pruning), No.Persistence, _logManager); - trieStore.CommitNode(0, new NodeCommitInfo(node)); + using TrieStore fullTrieStore = CreateTrieStore(pruningStrategy: new TestPruningStrategy(pruning)); + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + trieStore.CommitNode(0, new NodeCommitInfo(node, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 0, node); - var originalNode = trieStore.FindCachedOrUnknown(node.Keccak); + var originalNode = trieStore.FindCachedOrUnknown(TreePath.Empty, node.Keccak); - IReadOnlyTrieStore readOnlyTrieStore = trieStore.AsReadOnly(); - var readOnlyNode = readOnlyTrieStore.FindCachedOrUnknown(node.Keccak); + IReadOnlyTrieStore readOnlyTrieStore = fullTrieStore.AsReadOnly(); + var readOnlyNode = readOnlyTrieStore.FindCachedOrUnknown(null, TreePath.Empty, node.Keccak); readOnlyNode.Should().NotBe(originalNode); readOnlyNode.Should().BeEquivalentTo(originalNode, @@ -682,6 +801,8 @@ public void ReadOnly_store_returns_copies(bool pruning) readOnlyNode.Key?.ToString().Should().Be(originalNode.Key?.ToString()); } + private long ExpectedPerNodeKeyMemorySize => _scheme == INodeStorage.KeyScheme.Hash ? 0 : TrieStore.DirtyNodesCache.Key.MemoryUsage; + [Test] public void After_commit_should_have_has_root() { @@ -701,5 +822,94 @@ public void After_commit_should_have_has_root() stateTree.Commit(0); trieStore.HasRoot(stateTree.RootHash).Should().BeTrue(); } + + [Test] + public async Task Will_RemovePastKeys_OnSnapshot() + { + MemDb memDb = new(); + + using TrieStore fullTrieStore = CreateTrieStore( + kvStore: memDb, + pruningStrategy: new TestPruningStrategy(true, true, 100000), + persistenceStrategy: No.Persistence, + reorgDepthOverride: 2); + + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + + for (int i = 0; i < 64; i++) + { + TrieNode node = new(NodeType.Leaf, TestItem.Keccaks[i], new byte[2]); + trieStore.CommitNode(i, new NodeCommitInfo(node, TreePath.Empty)); + trieStore.FinishBlockCommit(TrieType.State, i, node); + + // Pruning is done in background + await Task.Delay(TimeSpan.FromMilliseconds(10)); + } + + if (_scheme == INodeStorage.KeyScheme.Hash) + { + memDb.Count.Should().NotBe(1); + } + else + { + memDb.Count.Should().Be(1); + } + } + + [Test] + public async Task Will_Not_RemovePastKeys_OnSnapshot_DuringFullPruning() + { + MemDb memDb = new(); + + IPersistenceStrategy isPruningPersistenceStrategy = Substitute.For(); + isPruningPersistenceStrategy.IsFullPruning.Returns(true); + + using TrieStore fullTrieStore = CreateTrieStore( + kvStore: memDb, + pruningStrategy: new TestPruningStrategy(true, true, 100000), + persistenceStrategy: isPruningPersistenceStrategy, + reorgDepthOverride: 2); + + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + + for (int i = 0; i < 64; i++) + { + TrieNode node = new(NodeType.Leaf, TestItem.Keccaks[i], new byte[2]); + trieStore.CommitNode(i, new NodeCommitInfo(node, TreePath.Empty)); + trieStore.FinishBlockCommit(TrieType.State, i, node); + + // Pruning is done in background + await Task.Delay(TimeSpan.FromMilliseconds(10)); + } + + memDb.Count.Should().Be(61); + } + + [Test] + public async Task Will_NotRemove_ReCommittedNode() + { + MemDb memDb = new(); + + using TrieStore fullTrieStore = CreateTrieStore( + kvStore: memDb, + pruningStrategy: new TestPruningStrategy(true, true, 100000), + persistenceStrategy: No.Persistence, + reorgDepthOverride: 2); + + IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); + + for (int i = 0; i < 64; i++) + { + TrieNode node = new(NodeType.Leaf, TestItem.Keccaks[i % 4], new byte[2]); + trieStore.CommitNode(i, new NodeCommitInfo(node, TreePath.Empty)); + node = trieStore.FindCachedOrUnknown(TreePath.Empty, node.Keccak); + trieStore.FinishBlockCommit(TrieType.State, i, node); + + // Pruning is done in background + await Task.Delay(TimeSpan.FromMilliseconds(10)); + } + + memDb.Count.Should().Be(4); + } } } diff --git a/src/Nethermind/Nethermind.Trie.Test/PruningScenariosTests.cs b/src/Nethermind/Nethermind.Trie.Test/PruningScenariosTests.cs index 0ab43cfa6a3..c9a9c1343b3 100644 --- a/src/Nethermind/Nethermind.Trie.Test/PruningScenariosTests.cs +++ b/src/Nethermind/Nethermind.Trie.Test/PruningScenariosTests.cs @@ -76,7 +76,7 @@ public static PruningContext InMemory public static PruningContext InMemoryAlwaysPrune { [DebuggerStepThrough] - get => new(new TestPruningStrategy(true, true), No.Persistence); + get => new(new TestPruningStrategy(true, true, 1000000), No.Persistence); } public static PruningContext SetupWithPersistenceEveryEightBlocks @@ -264,7 +264,7 @@ public void Storage_subtree_resolution() // B // L1 L2 // Then we read L2 from account 1 so that B is resolved from cache. - // When persisting account 2, storage should not get persisted again. + // When persisting account 2, storage should get persisted again. PruningContext.SnapshotEveryOtherBlockWithManualPruning .CreateAccount(1) @@ -290,7 +290,7 @@ public void Storage_subtree_resolution() .CommitEmptyBlock() .PruneOldBlock() .PruneOldBlock() - .VerifyPersisted(9); + .VerifyPersisted(12); } [Test] @@ -348,7 +348,7 @@ public void Do_not_delete_storage_before_persisting() } [Test] - public void Two_accounts_adding_shared_storage_in_same_block() + public void Two_accounts_adding_same_storage_in_same_block() { PruningContext.SnapshotEveryOtherBlockWithManualPruning .CreateAccount(1) @@ -361,12 +361,12 @@ public void Two_accounts_adding_shared_storage_in_same_block() .CommitEmptyBlock() .PruneOldBlock() .PruneOldBlock() - .VerifyPersisted(6) - .VerifyCached(6); + .VerifyPersisted(9) + .VerifyCached(9); } [Test] - public void Two_accounts_adding_shared_storage_in_same_block_then_one_account_storage_is_cleared() + public void Two_accounts_adding_same_storage_in_same_block_then_one_account_storage_is_cleared() { PruningContext.SnapshotEveryOtherBlockWithManualPruning .CreateAccount(1) @@ -382,7 +382,7 @@ public void Two_accounts_adding_shared_storage_in_same_block_then_one_account_st .PruneOldBlock() .PruneOldBlock() .VerifyPersisted(6) - .VerifyCached(8); + .VerifyCached(11); } [Test] @@ -746,5 +746,34 @@ public void StateRoot_reset_at_lower_level_and_accessed_at_just_the_right_time() .VerifyAccountBalance(3, 101); } + + [Test] + public void When_Reorg_OldValueIsNotRemoved() + { + Reorganization.MaxDepth = 2; + + PruningContext.InMemoryAlwaysPrune + .SetAccountBalance(1, 100) + .SetAccountBalance(2, 100) + .Commit() + + .SetAccountBalance(3, 100) + .SetAccountBalance(4, 100) + .Commit() + + .SaveBranchingPoint("revert_main") + + .SetAccountBalance(4, 200) + .Commit() + + .RestoreBranchingPoint("revert_main") + + .Commit() + .Commit() + .Commit() + .Commit() + + .VerifyAccountBalance(4, 100); + } } } diff --git a/src/Nethermind/Nethermind.Trie.Test/TinyTreePathTests.cs b/src/Nethermind/Nethermind.Trie.Test/TinyTreePathTests.cs new file mode 100644 index 00000000000..a2d51d1a5a1 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie.Test/TinyTreePathTests.cs @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using FluentAssertions; +using Nethermind.Core.Crypto; +using NUnit.Framework; + +namespace Nethermind.Trie.Test; + +public class TinyTreePathTests +{ + [Test] + public void Should_ConvertFromAndToTreePath() + { + TreePath path = new TreePath(new ValueHash256("0123456789abcd00000000000000000000000000000000000000000000000000"), 14); + + TinyTreePath tinyPath = new TinyTreePath(path); + + tinyPath.ToTreePath().Should().Be(path); + } + + [Test] + public void When_PathIsTooLong_Should_Throw() + { + TreePath path = new TreePath(new ValueHash256("0123456789000000000000000000000000000000000000000000000000000000"), 15); + + Action act = () => new TinyTreePath(path); + act.Should().Throw(); + } +} + diff --git a/src/Nethermind/Nethermind.Trie.Test/TreePathTests.cs b/src/Nethermind/Nethermind.Trie.Test/TreePathTests.cs index 6a45c8c8d5c..3947bd2ab07 100644 --- a/src/Nethermind/Nethermind.Trie.Test/TreePathTests.cs +++ b/src/Nethermind/Nethermind.Trie.Test/TreePathTests.cs @@ -27,7 +27,7 @@ public void TestIndexWrite() TreePath path = new TreePath(Keccak.Zero, 64); for (int i = 0; i < 64; i++) { - path[i] = ((byte)(i % 16)); + path[i] = (byte)(i % 16); } string asHex = path.Span.ToHexString(); diff --git a/src/Nethermind/Nethermind.Trie.Test/TrieNodeResolverWithReadFlagsTests.cs b/src/Nethermind/Nethermind.Trie.Test/TrieNodeResolverWithReadFlagsTests.cs index 29eececa23e..69ab15bd58e 100644 --- a/src/Nethermind/Nethermind.Trie.Test/TrieNodeResolverWithReadFlagsTests.cs +++ b/src/Nethermind/Nethermind.Trie.Test/TrieNodeResolverWithReadFlagsTests.cs @@ -19,27 +19,43 @@ public void LoadRlp_shouldPassTheFlag() ReadFlags theFlags = ReadFlags.HintCacheMiss; TestMemDb memDb = new(); ITrieStore trieStore = new TrieStore(memDb, LimboLogs.Instance); - TrieNodeResolverWithReadFlags resolver = new(trieStore, theFlags); + TrieNodeResolverWithReadFlags resolver = new(trieStore.GetTrieStore(null), theFlags); Hash256 theKeccak = TestItem.KeccakA; - memDb[theKeccak.Bytes] = TestItem.KeccakA.BytesToArray(); - resolver.LoadRlp(theKeccak); + memDb[NodeStorage.GetHalfPathNodeStoragePath(null, TreePath.Empty, theKeccak)] = TestItem.KeccakA.BytesToArray(); + resolver.LoadRlp(TreePath.Empty, theKeccak); - memDb.KeyWasReadWithFlags(theKeccak.BytesToArray(), theFlags); + memDb.KeyWasReadWithFlags(NodeStorage.GetHalfPathNodeStoragePath(null, TreePath.Empty, theKeccak), theFlags); } [Test] - public void LoadRlp_combine_passed_fleag() + public void LoadRlp_combine_passed_flaeg() { ReadFlags theFlags = ReadFlags.HintCacheMiss; TestMemDb memDb = new(); ITrieStore trieStore = new TrieStore(memDb, LimboLogs.Instance); - TrieNodeResolverWithReadFlags resolver = new(trieStore, theFlags); + TrieNodeResolverWithReadFlags resolver = new(trieStore.GetTrieStore(null), theFlags); Hash256 theKeccak = TestItem.KeccakA; - memDb[theKeccak.Bytes] = TestItem.KeccakA.BytesToArray(); - resolver.LoadRlp(theKeccak, ReadFlags.HintReadAhead); + memDb[NodeStorage.GetHalfPathNodeStoragePath(null, TreePath.Empty, theKeccak)] = TestItem.KeccakA.BytesToArray(); + resolver.LoadRlp(TreePath.Empty, theKeccak, ReadFlags.HintReadAhead); - memDb.KeyWasReadWithFlags(theKeccak.BytesToArray(), theFlags | ReadFlags.HintReadAhead); + memDb.KeyWasReadWithFlags(NodeStorage.GetHalfPathNodeStoragePath(null, TreePath.Empty, theKeccak), theFlags | ReadFlags.HintReadAhead); + } + + [Test] + public void LoadRlp_shouldPassTheFlag_forStorageStoreAlso() + { + ReadFlags theFlags = ReadFlags.HintCacheMiss; + TestMemDb memDb = new(); + ITrieStore trieStore = new TrieStore(memDb, LimboLogs.Instance); + ITrieNodeResolver resolver = new TrieNodeResolverWithReadFlags(trieStore.GetTrieStore(null), theFlags); + resolver = resolver.GetStorageTrieNodeResolver(TestItem.KeccakA); + + Hash256 theKeccak = TestItem.KeccakA; + memDb[NodeStorage.GetHalfPathNodeStoragePath(TestItem.KeccakA, TreePath.Empty, theKeccak)] = TestItem.KeccakA.BytesToArray(); + resolver.LoadRlp(TreePath.Empty, theKeccak); + + memDb.KeyWasReadWithFlags(NodeStorage.GetHalfPathNodeStoragePath(TestItem.KeccakA, TreePath.Empty, theKeccak), theFlags); } } diff --git a/src/Nethermind/Nethermind.Trie.Test/TrieNodeTests.cs b/src/Nethermind/Nethermind.Trie.Test/TrieNodeTests.cs index e9022f3c77e..b5ae6c9616a 100644 --- a/src/Nethermind/Nethermind.Trie.Test/TrieNodeTests.cs +++ b/src/Nethermind/Nethermind.Trie.Test/TrieNodeTests.cs @@ -57,44 +57,44 @@ public void Throws_trie_exception_when_setting_value_on_branch() public void Throws_trie_exception_on_missing_node() { TrieNode trieNode = new(NodeType.Unknown); - Assert.Throws(() => trieNode.ResolveNode(NullTrieNodeResolver.Instance)); + Assert.Throws(() => trieNode.ResolveNode(NullTrieNodeResolver.Instance, TreePath.Empty)); } [Test] public void Forward_read_flags_on_resolve() { ITrieNodeResolver resolver = Substitute.For(); - resolver.LoadRlp(TestItem.KeccakA, ReadFlags.HintReadAhead).Returns((byte[])null); + resolver.LoadRlp(TreePath.Empty, TestItem.KeccakA, ReadFlags.HintReadAhead).Returns((byte[])null); TrieNode trieNode = new(NodeType.Unknown, TestItem.KeccakA); try { - Assert.Throws(() => trieNode.ResolveNode(resolver, ReadFlags.HintReadAhead)); + Assert.Throws(() => trieNode.ResolveNode(resolver, TreePath.Empty, ReadFlags.HintReadAhead)); } catch (TrieException) { } - resolver.Received().LoadRlp(TestItem.KeccakA, ReadFlags.HintReadAhead); + resolver.Received().LoadRlp(TreePath.Empty, TestItem.KeccakA, ReadFlags.HintReadAhead); } [Test] public void Throws_trie_exception_on_unexpected_format() { TrieNode trieNode = new(NodeType.Unknown, new byte[42]); - Assert.Throws(() => trieNode.ResolveNode(NullTrieNodeResolver.Instance)); + Assert.Throws(() => trieNode.ResolveNode(NullTrieNodeResolver.Instance, TreePath.Empty)); } [Test] public void When_resolving_an_unknown_node_without_keccak_and_rlp_trie_exception_should_be_thrown() { TrieNode trieNode = new(NodeType.Unknown); - Assert.Throws(() => trieNode.ResolveNode(NullTrieNodeResolver.Instance)); + Assert.Throws(() => trieNode.ResolveNode(NullTrieNodeResolver.Instance, TreePath.Empty)); } [Test] public void When_resolving_an_unknown_node_without_rlp_trie_exception_should_be_thrown() { TrieNode trieNode = new(NodeType.Unknown, Keccak.Zero); - Assert.Throws(() => trieNode.ResolveNode(NullTrieNodeResolver.Instance)); + Assert.Throws(() => trieNode.ResolveNode(NullTrieNodeResolver.Instance, TreePath.Empty)); } [Test] @@ -102,14 +102,16 @@ public void Encoding_leaf_without_key_throws_trie_exception() { TrieNode trieNode = new(NodeType.Leaf); trieNode.Value = new byte[] { 1, 2, 3 }; - Assert.Throws(() => trieNode.RlpEncode(NullTrieNodeResolver.Instance)); + TreePath emptyPath = TreePath.Empty; + Assert.Throws(() => trieNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath)); } [Test] public void Throws_trie_exception_when_resolving_key_on_missing_rlp() { TrieNode trieNode = new(NodeType.Unknown); - Assert.Throws(() => trieNode.ResolveKey(NullTrieNodeResolver.Instance, false)); + TreePath emptyPath = TreePath.Empty; + Assert.Throws(() => trieNode.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, false)); } [Test(Description = "This is controversial and only used in visitors. Can consider an exception instead.")] @@ -154,7 +156,8 @@ public void Can_check_if_child_is_null_on_a_branch() trieNode.SetChild(j, ctx.TiniestLeaf); } - CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode restoredNode = new(NodeType.Branch, rlp); for (int childIndex = 0; childIndex < 16; childIndex++) @@ -180,12 +183,13 @@ public void Can_encode_decode_tiny_branch() TrieNode trieNode = new(NodeType.Branch); trieNode.SetChild(11, ctx.TiniestLeaf); - CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode decoded = new(NodeType.Unknown, rlp); - decoded.ResolveNode(NullTrieNodeResolver.Instance); - TrieNode decodedTiniest = decoded.GetChild(NullTrieNodeResolver.Instance, 11); - decodedTiniest.ResolveNode(NullTrieNodeResolver.Instance); + decoded.ResolveNode(NullTrieNodeResolver.Instance, TreePath.Empty); + TrieNode decodedTiniest = decoded.GetChild(NullTrieNodeResolver.Instance, ref emptyPath, 11); + decodedTiniest.ResolveNode(NullTrieNodeResolver.Instance, TreePath.Empty); Assert.That(decodedTiniest.Value.ToArray(), Is.EqualTo(ctx.TiniestLeaf.Value.ToArray()), "value"); Assert.That(HexPrefix.ToBytes(decodedTiniest.Key!, true), Is.EqualTo(HexPrefix.ToBytes(ctx.TiniestLeaf.Key!, true)), "key"); @@ -198,11 +202,12 @@ public void Can_encode_decode_heavy_branch() TrieNode trieNode = new(NodeType.Branch); trieNode.SetChild(11, ctx.HeavyLeaf); - CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode decoded = new(NodeType.Unknown, rlp); - decoded.ResolveNode(NullTrieNodeResolver.Instance); - TrieNode decodedTiniest = decoded.GetChild(NullTrieNodeResolver.Instance, 11); + decoded.ResolveNode(NullTrieNodeResolver.Instance, TreePath.Empty); + TrieNode decodedTiniest = decoded.GetChild(NullTrieNodeResolver.Instance, ref emptyPath, 11); Assert.That(decodedTiniest.Keccak, Is.EqualTo(decoded.GetChildHash(11)), "value"); } @@ -215,12 +220,13 @@ public void Can_encode_decode_tiny_extension() trieNode.Key = new byte[] { 5 }; trieNode.SetChild(0, ctx.TiniestLeaf); - CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode decoded = new(NodeType.Unknown, rlp); - decoded.ResolveNode(NullTrieNodeResolver.Instance); - TrieNode? decodedTiniest = decoded.GetChild(NullTrieNodeResolver.Instance, 0); - decodedTiniest?.ResolveNode(NullTrieNodeResolver.Instance); + decoded.ResolveNode(NullTrieNodeResolver.Instance, TreePath.Empty); + TrieNode? decodedTiniest = decoded.GetChild(NullTrieNodeResolver.Instance, ref emptyPath, 0); + decodedTiniest?.ResolveNode(NullTrieNodeResolver.Instance, TreePath.Empty); Assert.That(decodedTiniest.Value.ToArray(), Is.EqualTo(ctx.TiniestLeaf.Value.ToArray()), "value"); Assert.That(HexPrefix.ToBytes(decodedTiniest.Key!, true), Is.EqualTo(HexPrefix.ToBytes(ctx.TiniestLeaf.Key!, true)), @@ -235,11 +241,12 @@ public void Can_encode_decode_heavy_extension() trieNode.Key = new byte[] { 5 }; trieNode.SetChild(0, ctx.HeavyLeaf); - CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode decoded = new(NodeType.Unknown, rlp); - decoded.ResolveNode(NullTrieNodeResolver.Instance); - TrieNode decodedTiniest = decoded.GetChild(NullTrieNodeResolver.Instance, 0); + decoded.ResolveNode(NullTrieNodeResolver.Instance, TreePath.Empty); + TrieNode decodedTiniest = decoded.GetChild(NullTrieNodeResolver.Instance, ref emptyPath, 0); Assert.That(decodedTiniest.Keccak, Is.EqualTo(decoded.GetChildHash(0)), "keccak"); } @@ -253,7 +260,8 @@ public void Can_set_and_get_children_using_indexer() TrieNode trieNode = new(NodeType.Branch); trieNode[11] = tiniest; - TrieNode getResult = trieNode.GetChild(NullTrieNodeResolver.Instance, 11); + TreePath emptyPath = TreePath.Empty; + TrieNode getResult = trieNode.GetChild(NullTrieNodeResolver.Instance, ref emptyPath, 11); Assert.That(getResult, Is.SameAs(tiniest)); } @@ -263,7 +271,8 @@ public void Get_child_hash_works_on_hashed_child_of_a_branch() Context ctx = new(); TrieNode trieNode = new(NodeType.Branch); trieNode[11] = ctx.HeavyLeaf; - CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode decoded = new(NodeType.Branch, rlp); Hash256 getResult = decoded.GetChildHash(11); @@ -277,7 +286,8 @@ public void Get_child_hash_works_on_inlined_child_of_a_branch() TrieNode trieNode = new(NodeType.Branch); trieNode[11] = ctx.TiniestLeaf; - CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode decoded = new(NodeType.Branch, rlp); Hash256 getResult = decoded.GetChildHash(11); @@ -291,7 +301,8 @@ public void Get_child_hash_works_on_hashed_child_of_an_extension() TrieNode trieNode = new(NodeType.Extension); trieNode[0] = ctx.HeavyLeaf; trieNode.Key = new byte[] { 5 }; - CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode decoded = new(NodeType.Extension, rlp); Hash256 getResult = decoded.GetChildHash(0); @@ -305,7 +316,8 @@ public void Get_child_hash_works_on_inlined_child_of_an_extension() TrieNode trieNode = new(NodeType.Extension); trieNode[0] = ctx.TiniestLeaf; trieNode.Key = new byte[] { 5 }; - CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = trieNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode decoded = new(NodeType.Extension, rlp); Hash256 getResult = decoded.GetChildHash(0); @@ -320,7 +332,8 @@ public void Extension_can_accept_visitors() TrieNode ignore = TrieNodeFactory.CreateLeaf(Bytes.FromHexString("ccc"), Array.Empty()); TrieNode node = TrieNodeFactory.CreateExtension(Bytes.FromHexString("aa"), ignore); - node.Accept(visitor, NullTrieNodeResolver.Instance, context); + TreePath emptyPath = TreePath.Empty; + node.Accept(visitor, NullTrieNodeResolver.Instance, ref emptyPath, context); visitor.Received().VisitExtension(node, context); } @@ -332,7 +345,8 @@ public void Unknown_node_with_missing_data_can_accept_visitor() TrieVisitContext context = new(); TrieNode node = new(NodeType.Unknown); - node.Accept(visitor, NullTrieNodeResolver.Instance, context); + TreePath emptyPath = TreePath.Empty; + node.Accept(visitor, NullTrieNodeResolver.Instance, ref emptyPath, context); visitor.Received().VisitMissingNode(node.Keccak, context); } @@ -346,9 +360,10 @@ public void Leaf_with_simple_account_can_accept_visitors() AccountDecoder decoder = new(); TrieNode node = TrieNodeFactory.CreateLeaf(Bytes.FromHexString("aa"), decoder.Encode(account).Bytes); - node.Accept(visitor, NullTrieNodeResolver.Instance, context); + TreePath emptyPath = TreePath.Empty; + node.Accept(visitor, default, NullTrieNodeResolver.Instance, ref emptyPath, context); - visitor.VisitLeafReceived[(node, context, node.Value.ToArray())].Should().Be(1); + visitor.VisitLeafReceived[(TreePath.Empty, node, context, node.Value.ToArray())].Should().Be(1); } [Test] @@ -360,9 +375,10 @@ public void Leaf_with_contract_without_storage_and_empty_code_can_accept_visitor AccountDecoder decoder = new(); TrieNode node = TrieNodeFactory.CreateLeaf(Bytes.FromHexString("aa"), decoder.Encode(account).Bytes); - node.Accept(visitor, NullTrieNodeResolver.Instance, context); + TreePath emptyPath = TreePath.Empty; + node.Accept(visitor, default, NullTrieNodeResolver.Instance, ref emptyPath, context); - visitor.VisitLeafReceived[(node, context, node.Value.ToArray())].Should().Be(1); + visitor.VisitLeafReceived[(TreePath.Empty, node, context, node.Value.ToArray())].Should().Be(1); } [Test] @@ -374,9 +390,10 @@ public void Leaf_with_contract_without_storage_and_with_code_can_accept_visitors AccountDecoder decoder = new(); TrieNode node = TrieNodeFactory.CreateLeaf(Bytes.FromHexString("aa"), decoder.Encode(account).Bytes); - node.Accept(visitor, NullTrieNodeResolver.Instance, context); + TreePath emptyPath = TreePath.Empty; + node.Accept(visitor, default, NullTrieNodeResolver.Instance, ref emptyPath, context); - visitor.VisitLeafReceived[(node, context, node.Value.ToArray())].Should().Be(1); + visitor.VisitLeafReceived[(TreePath.Empty, node, context, node.Value.ToArray())].Should().Be(1); } [Test] @@ -388,9 +405,10 @@ public void Leaf_with_contract_with_storage_and_without_code_can_accept_visitors AccountDecoder decoder = new(); TrieNode node = TrieNodeFactory.CreateLeaf(Bytes.FromHexString("aa"), decoder.Encode(account).Bytes); - node.Accept(visitor, NullTrieNodeResolver.Instance, context); + TreePath emptyPath = TreePath.Empty; + node.Accept(visitor, default, NullTrieNodeResolver.Instance, ref emptyPath, context); - visitor.VisitLeafReceived[(node, context, node.Value.ToArray())].Should().Be(1); + visitor.VisitLeafReceived[(TreePath.Empty, node, context, node.Value.ToArray())].Should().Be(1); } [Test] @@ -401,10 +419,11 @@ public void Extension_with_leaf_can_be_visited() TrieVisitContext context = new(); TrieNode node = TrieNodeFactory.CreateExtension(Bytes.FromHexString("aa"), ctx.AccountLeaf); - node.Accept(visitor, NullTrieNodeResolver.Instance, context); + TreePath emptyPath = TreePath.Empty; + node.Accept(visitor, default, NullTrieNodeResolver.Instance, ref emptyPath, context); - visitor.VisitExtensionReceived[(node, context)].Should().Be(1); - visitor.VisitLeafReceived[(ctx.AccountLeaf, context, ctx.AccountLeaf.Value.ToArray())].Should().Be(1); + visitor.VisitExtensionReceived[(TreePath.Empty, node, context)].Should().Be(1); + visitor.VisitLeafReceived[(new(new(Bytes.FromHexString("0xa000000000000000000000000000000000000000000000000000000000000000")), 1), ctx.AccountLeaf, context, ctx.AccountLeaf.Value.ToArray())].Should().Be(1); } [Test] @@ -419,10 +438,15 @@ public void Branch_with_children_can_be_visited() node.SetChild(i, ctx.AccountLeaf); } - node.Accept(visitor, NullTrieNodeResolver.Instance, context); + TreePath emptyPath = TreePath.Empty; + node.Accept(visitor, default, NullTrieNodeResolver.Instance, ref emptyPath, context); - visitor.VisitBranchReceived[(node, context)].Should().Be(1); - visitor.VisitLeafReceived[(ctx.AccountLeaf, context, ctx.AccountLeaf.Value.ToArray())].Should().Be(16); + visitor.VisitBranchReceived[(TreePath.Empty, node, context)].Should().Be(1); + for (byte i = 0; i < 16; i++) + { + var hex = "0x" + i.ToString("x2")[1] + "000000000000000000000000000000000000000000000000000000000000000"; + visitor.VisitLeafReceived[(new(new(Bytes.FromHexString(hex)), 1), ctx.AccountLeaf, context, ctx.AccountLeaf.Value.ToArray())].Should().Be(1); + } } [Test] @@ -436,7 +460,8 @@ public void Branch_can_accept_visitors() node.SetChild(i, null); } - node.Accept(visitor, NullTrieNodeResolver.Instance, context); + TreePath emptyPath = TreePath.Empty; + node.Accept(visitor, NullTrieNodeResolver.Instance, ref emptyPath, context); visitor.Received().VisitBranch(node, context); } @@ -445,7 +470,8 @@ public void Branch_can_accept_visitors() public void Can_encode_branch_with_nulls() { TrieNode node = new(NodeType.Branch); - node.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + node.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); } [Test] @@ -509,11 +535,12 @@ public void Can_encode_branch_with_unresolved_children() node.SetChild(i, randomTrieNode); } - CappedArray rlp = node.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = node.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode restoredNode = new(NodeType.Branch, rlp); - restoredNode.RlpEncode(NullTrieNodeResolver.Instance); + restoredNode.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); } [Test] @@ -686,7 +713,8 @@ public void Pruning_regression() trieNode.PrunePersistedRecursively(1); trieNode.Key = Bytes.FromHexString("abcd"); - trieNode.RlpEncode(NullTrieStore.Instance); + TreePath emptyPath = TreePath.Empty; + trieNode.RlpEncode(NullTrieStore.Instance, ref emptyPath); } [Test] @@ -697,7 +725,8 @@ public void Extension_child_as_keccak() trieNode.SetChild(0, child); trieNode.PrunePersistedRecursively(1); - trieNode.GetChild(NullTrieStore.Instance, 0).Should().BeOfType(); + TreePath emptyPath = TreePath.Empty; + trieNode.GetChild(NullTrieStore.Instance, ref emptyPath, 0).Should().BeOfType(); } [Test] @@ -731,7 +760,8 @@ public void Unresolve_of_persisted() TrieNode trieNode = new(NodeType.Extension); trieNode.SetChild(0, child); trieNode.Key = Bytes.FromHexString("abcd"); - trieNode.ResolveKey(NullTrieStore.Instance, false); + TreePath emptyPath = TreePath.Empty; + trieNode.ResolveKey(NullTrieStore.Instance, ref emptyPath, false); trieNode.PrunePersistedRecursively(1); trieNode.PrunePersistedRecursively(1); @@ -743,16 +773,17 @@ public void Small_child_unresolve() TrieNode child = new(NodeType.Leaf); child.Value = Bytes.FromHexString("a"); child.Key = Bytes.FromHexString("b"); - child.ResolveKey(NullTrieStore.Instance, false); + TreePath emptyPath = TreePath.Empty; + child.ResolveKey(NullTrieStore.Instance, ref emptyPath, false); child.IsPersisted = true; TrieNode trieNode = new(NodeType.Extension); trieNode.SetChild(0, child); trieNode.Key = Bytes.FromHexString("abcd"); - trieNode.ResolveKey(NullTrieStore.Instance, false); + trieNode.ResolveKey(NullTrieStore.Instance, ref emptyPath, false); trieNode.PrunePersistedRecursively(2); - trieNode.GetChild(NullTrieStore.Instance, 0).Should().Be(child); + trieNode.GetChild(NullTrieStore.Instance, ref emptyPath, 0).Should().Be(child); } [Test] @@ -776,7 +807,8 @@ public void Extension_child_as_keccak_call_recursively(bool skipPersisted) trieNode.PrunePersistedRecursively(1); int count = 0; - trieNode.CallRecursively(n => count++, NullTrieStore.Instance, skipPersisted, LimboTraceLogger.Instance); + TreePath emptyPath = TreePath.Empty; + trieNode.CallRecursively((n, s, p) => count++, null, ref emptyPath, NullTrieStore.Instance, skipPersisted, LimboTraceLogger.Instance); count.Should().Be(1); } @@ -789,7 +821,8 @@ public void Branch_child_as_keccak_encode() trieNode.SetChild(4, child); trieNode.PrunePersistedRecursively(1); - trieNode.RlpEncode(NullTrieStore.Instance); + TreePath emptyPath = TreePath.Empty; + trieNode.RlpEncode(NullTrieStore.Instance, ref emptyPath); } [Test] @@ -802,10 +835,11 @@ public void Branch_child_as_keccak_resolved() trieNode.PrunePersistedRecursively(1); var trieStore = Substitute.For(); - trieStore.FindCachedOrUnknown(Arg.Any()).Returns(child); - trieNode.GetChild(trieStore, 0).Should().Be(child); - trieNode.GetChild(trieStore, 1).Should().BeNull(); - trieNode.GetChild(trieStore, 4).Should().Be(child); + trieStore.FindCachedOrUnknown(Arg.Any(), Arg.Any()).Returns(child); + TreePath emptyPath = TreePath.Empty; + trieNode.GetChild(trieStore, ref emptyPath, 0).Should().Be(child); + trieNode.GetChild(trieStore, ref emptyPath, 1).Should().BeNull(); + trieNode.GetChild(trieStore, ref emptyPath, 4).Should().Be(child); } [Test] @@ -817,8 +851,9 @@ public void Child_as_keccak_cached() trieNode.PrunePersistedRecursively(1); var trieStore = Substitute.For(); - trieStore.FindCachedOrUnknown(Arg.Any()).Returns(child); - trieNode.GetChild(trieStore, 0).Should().Be(child); + trieStore.FindCachedOrUnknown(Arg.Any(), Arg.Any()).Returns(child); + TreePath emptyPath = TreePath.Empty; + trieNode.GetChild(trieStore, ref emptyPath, 0).Should().Be(child); } [Test] @@ -830,17 +865,19 @@ public void Batch_not_db_regression() child.Seal(); TrieNode trieNode = new(NodeType.Extension); + trieNode.Key = Bytes.FromHexString("000102030506"); trieNode.SetChild(0, child); trieNode.Seal(); ITrieNodeResolver trieStore = Substitute.For(); - trieStore.LoadRlp(Arg.Any()).Throws(new TrieException()); - child.ResolveKey(trieStore, false); + trieStore.LoadRlp(Arg.Any(), Arg.Any()).Throws(new TrieException()); + TreePath emptyPath = TreePath.Empty; + child.ResolveKey(trieStore, ref emptyPath, false); child.IsPersisted = true; - trieStore.FindCachedOrUnknown(Arg.Any()).Returns(new TrieNode(NodeType.Unknown, child.Keccak!)); - trieNode.GetChild(trieStore, 0); - Assert.Throws(() => trieNode.GetChild(trieStore, 0).ResolveNode(trieStore)); + trieStore.FindCachedOrUnknown(Arg.Any(), Arg.Any()).Returns(new TrieNode(NodeType.Unknown, child.Keccak!)); + trieNode.GetChild(trieStore, ref emptyPath, 0); + Assert.Throws(() => trieNode.GetChild(trieStore, ref emptyPath, 0).ResolveNode(trieStore, TreePath.Empty)); } [Ignore("This does not fail on the build server")] @@ -854,7 +891,8 @@ public async Task Trie_node_is_not_thread_safe() } trieNode.Seal(); - trieNode.ResolveKey(Substitute.For(), false); + TreePath emptyPath = TreePath.Empty; + trieNode.ResolveKey(Substitute.For(), ref emptyPath, false); void CheckChildren() { @@ -886,35 +924,36 @@ void CheckChildren() [Test] public void Rlp_is_cloned_when_cloning() { - TrieStore trieStore = new(new MemDb(), NullLogManager.Instance); + IScopedTrieStore trieStore = new TrieStore(new MemDb(), NullLogManager.Instance).GetTrieStore(null); TrieNode leaf1 = new(NodeType.Leaf); leaf1.Key = Bytes.FromHexString("abc"); leaf1.Value = new byte[111]; - leaf1.ResolveKey(trieStore, false); + TreePath emptyPath = TreePath.Empty; + leaf1.ResolveKey(trieStore, ref emptyPath, false); leaf1.Seal(); - trieStore.CommitNode(0, new NodeCommitInfo(leaf1)); + trieStore.CommitNode(0, new NodeCommitInfo(leaf1, TreePath.Empty)); TrieNode leaf2 = new(NodeType.Leaf); leaf2.Key = Bytes.FromHexString("abd"); leaf2.Value = new byte[222]; - leaf2.ResolveKey(trieStore, false); + leaf2.ResolveKey(trieStore, ref emptyPath, false); leaf2.Seal(); - trieStore.CommitNode(0, new NodeCommitInfo(leaf2)); + trieStore.CommitNode(0, new NodeCommitInfo(leaf2, TreePath.Empty)); trieStore.FinishBlockCommit(TrieType.State, 0, leaf2); TrieNode trieNode = new(NodeType.Branch); trieNode.SetChild(1, leaf1); trieNode.SetChild(2, leaf2); - trieNode.ResolveKey(trieStore, true); + trieNode.ResolveKey(trieStore, ref emptyPath, true); CappedArray rlp = trieNode.FullRlp; TrieNode restoredBranch = new(NodeType.Branch, rlp); TrieNode clone = restoredBranch.Clone(); - var restoredLeaf1 = clone.GetChild(trieStore, 1); + var restoredLeaf1 = clone.GetChild(trieStore, ref emptyPath, 1); restoredLeaf1.Should().NotBeNull(); - restoredLeaf1.ResolveNode(trieStore); + restoredLeaf1.ResolveNode(trieStore, TreePath.Empty); restoredLeaf1.Value.ToArray().Should().BeEquivalentTo(leaf1.Value.ToArray()); } @@ -930,11 +969,16 @@ public void Can_parallel_read_unresolved_children() node.SetChild(i, randomTrieNode); } - CappedArray rlp = node.RlpEncode(NullTrieNodeResolver.Instance); + TreePath emptyPath = TreePath.Empty; + CappedArray rlp = node.RlpEncode(NullTrieNodeResolver.Instance, ref emptyPath); TrieNode restoredNode = new(NodeType.Branch, rlp); - Parallel.For(0, 32, (index, _) => restoredNode.GetChild(NullTrieNodeResolver.Instance, index % 3)); + Parallel.For(0, 32, (index, _) => + { + TreePath emptyPathParallel = TreePath.Empty; + restoredNode.GetChild(NullTrieNodeResolver.Instance, ref emptyPathParallel, index % 3); + }); } private class Context @@ -961,50 +1005,50 @@ public Context() } } - private class TreeVisitorMock : ITreeVisitor + private class TreeVisitorMock : ITreeVisitor { - public readonly Dictionary<(TrieNode, TrieVisitContext), int> VisitExtensionReceived = new(); - public readonly Dictionary<(TrieNode, TrieVisitContext), int> VisitBranchReceived = new(); - public readonly Dictionary<(TrieNode, TrieVisitContext, byte[]), int> VisitLeafReceived = new(new LeafComparer()); + public readonly Dictionary<(TreePath path, TrieNode, TrieVisitContext), int> VisitExtensionReceived = new(); + public readonly Dictionary<(TreePath path, TrieNode, TrieVisitContext), int> VisitBranchReceived = new(); + public readonly Dictionary<(TreePath path, TrieNode, TrieVisitContext, byte[]), int> VisitLeafReceived = new(new LeafComparer()); public bool IsFullDbScan => true; - public bool ShouldVisit(Hash256 nextNode) => true; + public bool ShouldVisit(in TreePathContext nodeContext, Hash256 nextNode) => true; - public void VisitTree(Hash256 rootHash, TrieVisitContext trieVisitContext) + public void VisitTree(in TreePathContext nodeContext, Hash256 rootHash, TrieVisitContext trieVisitContext) { } - public void VisitMissingNode(Hash256 nodeHash, TrieVisitContext trieVisitContext) + public void VisitMissingNode(in TreePathContext ctx, Hash256 nodeHash, TrieVisitContext trieVisitContext) { } - public void VisitBranch(TrieNode node, TrieVisitContext trieVisitContext) + public void VisitBranch(in TreePathContext ctx, TrieNode node, TrieVisitContext trieVisitContext) { - CollectionsMarshal.GetValueRefOrAddDefault(VisitBranchReceived, (node, trieVisitContext), out _) += 1; + CollectionsMarshal.GetValueRefOrAddDefault(VisitBranchReceived, (ctx.Path, node, trieVisitContext), out _) += 1; } - public void VisitExtension(TrieNode node, TrieVisitContext trieVisitContext) + public void VisitExtension(in TreePathContext ctx, TrieNode node, TrieVisitContext trieVisitContext) { - CollectionsMarshal.GetValueRefOrAddDefault(VisitExtensionReceived, (node, trieVisitContext), out _) += 1; + CollectionsMarshal.GetValueRefOrAddDefault(VisitExtensionReceived, (ctx.Path, node, trieVisitContext), out _) += 1; } - public void VisitLeaf(TrieNode node, TrieVisitContext trieVisitContext, ReadOnlySpan value) + public void VisitLeaf(in TreePathContext ctx, TrieNode node, TrieVisitContext trieVisitContext, ReadOnlySpan value) { - CollectionsMarshal.GetValueRefOrAddDefault(VisitLeafReceived, (node, trieVisitContext, value.ToArray()), out _) += 1; + CollectionsMarshal.GetValueRefOrAddDefault(VisitLeafReceived, (ctx.Path, node, trieVisitContext, value.ToArray()), out _) += 1; } - public void VisitCode(Hash256 codeHash, TrieVisitContext trieVisitContext) + public void VisitCode(in TreePathContext ctx, Hash256 codeHash, TrieVisitContext trieVisitContext) { } - private class LeafComparer : IEqualityComparer<(TrieNode, TrieVisitContext, byte[])> + private class LeafComparer : IEqualityComparer<(TreePath, TrieNode, TrieVisitContext, byte[])> { - public bool Equals((TrieNode, TrieVisitContext, byte[]) x, (TrieNode, TrieVisitContext, byte[]) y) => - Equals(x.Item1, y.Item1) && Equals(x.Item2, y.Item2) && Bytes.EqualityComparer.Equals(x.Item3, y.Item3); + public bool Equals((TreePath, TrieNode, TrieVisitContext, byte[]) x, (TreePath, TrieNode, TrieVisitContext, byte[]) y) => + Equals(x.Item1, y.Item1) && Equals(x.Item2, y.Item2) && Equals(x.Item3, y.Item3) && Bytes.EqualityComparer.Equals(x.Item4, y.Item4); - public int GetHashCode((TrieNode, TrieVisitContext, byte[]) obj) => - HashCode.Combine(obj.Item1, obj.Item2, Bytes.EqualityComparer.GetHashCode(obj.Item3)); + public int GetHashCode((TreePath, TrieNode, TrieVisitContext, byte[]) obj) => + HashCode.Combine(obj.Item1, obj.Item2, obj.Item3, Bytes.EqualityComparer.GetHashCode(obj.Item4)); } } } diff --git a/src/Nethermind/Nethermind.Trie.Test/TrieTests.cs b/src/Nethermind/Nethermind.Trie.Test/TrieTests.cs index 948d3be2d1a..47953a99e84 100644 --- a/src/Nethermind/Nethermind.Trie.Test/TrieTests.cs +++ b/src/Nethermind/Nethermind.Trie.Test/TrieTests.cs @@ -49,10 +49,10 @@ private static readonly byte[] _longLeaf2 private static readonly byte[] _longLeaf3 = Bytes.FromHexString("0000000000000000000000000000000000000000000000000000000000000000000000000000000003"); - private static readonly byte[] _keyA = Bytes.FromHexString("000000000000000aa"); - private static readonly byte[] _keyB = Bytes.FromHexString("000000000000000bb"); - private static readonly byte[] _keyC = Bytes.FromHexString("000000000000001aa"); - private static readonly byte[] _keyD = Bytes.FromHexString("000000000000001bb"); + private static readonly byte[] _keyA = Bytes.FromHexString("00000000000aa"); + private static readonly byte[] _keyB = Bytes.FromHexString("00000000000bb"); + private static readonly byte[] _keyC = Bytes.FromHexString("00000000001aa"); + private static readonly byte[] _keyD = Bytes.FromHexString("00000000001bb"); [Test] public void Single_leaf() @@ -271,7 +271,7 @@ public void Test_add_many(int i) { MemDb memDb = new(); using TrieStore trieStore = new(memDb, new MemoryLimit(128.MB()), Persist.EveryBlock, _logManager); - PatriciaTree patriciaTree = new(trieStore, Keccak.EmptyTreeHash, true, true, _logManager); + PatriciaTree patriciaTree = new(trieStore.GetTrieStore(null), Keccak.EmptyTreeHash, true, true, _logManager); for (int j = 0; j < i; j++) { @@ -296,7 +296,7 @@ public void Test_try_delete_and_read_missing_nodes(int i) { MemDb memDb = new(); using TrieStore trieStore = new(memDb, new MemoryLimit(128.MB()), Persist.EveryBlock, _logManager); - PatriciaTree patriciaTree = new(trieStore, Keccak.EmptyTreeHash, true, true, _logManager); + PatriciaTree patriciaTree = new(trieStore.GetTrieStore(null), Keccak.EmptyTreeHash, true, true, _logManager); for (int j = 0; j < i; j++) { @@ -496,7 +496,7 @@ public void Two_branches_exactly_same_leaf() patriciaTree.Commit(0); // leaf (root) - memDb.Keys.Should().HaveCount(5); + memDb.Keys.Should().HaveCount(8); PatriciaTree checkTree = CreateCheckTree(memDb, patriciaTree); checkTree.Get(_keyA).ToArray().Should().BeEquivalentTo(_longLeaf1); checkTree.Get(_keyB).ToArray().Should().BeEquivalentTo(_longLeaf1); @@ -708,7 +708,7 @@ public void When_two_branches_with_two_same_children_change_one_and_change_back_ patriciaTree.UpdateRootHash(); patriciaTree.Commit(1); - memDb.Keys.Should().HaveCount(5); + memDb.Keys.Should().HaveCount(8); PatriciaTree checkTree = CreateCheckTree(memDb, patriciaTree); checkTree.Get(_keyA).ToArray().Should().BeEquivalentTo(_longLeaf1); checkTree.Get(_keyB).ToArray().Should().BeEquivalentTo(_longLeaf1); @@ -1086,7 +1086,11 @@ public void Fuzz_accounts_with_storage( stateProvider.Commit(MuirGlacier.Instance); stateProvider.CommitTree(blockNumber); - rootQueue.Enqueue(stateProvider.StateRoot); + + if (blockNumber > blocksCount - Reorganization.MaxDepth) + { + rootQueue.Enqueue(stateProvider.StateRoot); + } } streamWriter.Flush(); diff --git a/src/Nethermind/Nethermind.Trie.Test/VisitingTests.cs b/src/Nethermind/Nethermind.Trie.Test/VisitingTests.cs index eb947f5088e..28a7d2bb514 100644 --- a/src/Nethermind/Nethermind.Trie.Test/VisitingTests.cs +++ b/src/Nethermind/Nethermind.Trie.Test/VisitingTests.cs @@ -66,18 +66,27 @@ public void Visitors_storage(VisitingOptions options) MemDb memDb = new(); using TrieStore trieStore = new(memDb, Prune.WhenCacheReaches(1.MB()), Persist.EveryBlock, LimboLogs.Instance); - StorageTree storage = new(trieStore, LimboLogs.Instance); byte[] value = Enumerable.Range(1, 32).Select(i => (byte)i).ToArray(); + Hash256 stateRootHash = Keccak.Zero; - for (int i = 0; i < 64; i++) + for (int outi = 0; outi < 64; outi++) { - ValueHash256 storageKey = default; - storageKey.BytesAsSpan[i / 2] = (byte)(1 << (4 * (1 - i % 2))); - storage.Set(storageKey, value); + ValueHash256 stateKey = default; + stateKey.BytesAsSpan[outi / 2] = (byte)(1 << (4 * (1 - outi % 2))); + + StorageTree storage = new(trieStore.GetTrieStore(stateKey.ToCommitment()), LimboLogs.Instance); + for (int i = 0; i < 64; i++) + { + ValueHash256 storageKey = default; + storageKey.BytesAsSpan[i / 2] = (byte)(1 << (4 * (1 - i % 2))); + storage.Set(storageKey, value); + } + storage.Commit(0); + + stateRootHash = storage.RootHash; } - storage.Commit(0); StateTree stateTree = new(trieStore, LimboLogs.Instance); @@ -87,7 +96,7 @@ public void Visitors_storage(VisitingOptions options) stateKey.BytesAsSpan[i / 2] = (byte)(1 << (4 * (1 - i % 2))); stateTree.Set(stateKey, - new Account(10, (UInt256)(10_000_000 + i), storage.RootHash, Keccak.OfAnEmptySequenceRlp)); + new Account(10, (UInt256)(10_000_000 + i), stateRootHash, Keccak.OfAnEmptySequenceRlp)); } stateTree.Commit(0); @@ -170,6 +179,11 @@ public readonly PathGatheringContext Add(byte nibble) return new PathGatheringContext(@new); } + + public PathGatheringContext AddStorage(in ValueHash256 storage) + { + return this; + } } public bool IsFullDbScan => true; diff --git a/src/Nethermind/Nethermind.Trie/BatchedTrieVisitor.cs b/src/Nethermind/Nethermind.Trie/BatchedTrieVisitor.cs index 2831ef7f482..3331a747e5f 100644 --- a/src/Nethermind/Nethermind.Trie/BatchedTrieVisitor.cs +++ b/src/Nethermind/Nethermind.Trie/BatchedTrieVisitor.cs @@ -68,6 +68,8 @@ public BatchedTrieVisitor( { _visitor = visitor; _resolver = resolver; + if (resolver.Scheme != INodeStorage.KeyScheme.Hash) + throw new InvalidOperationException("BatchedTrieVisitor can only be used with Hash database."); _maxBatchSize = 128; @@ -197,7 +199,7 @@ public void Start( for (int i = 0; i < _maxBatchSize; i++) { if (!theStack.TryPop(out Job item)) break; - finalBatch.Add((_resolver.FindCachedOrUnknown(item.Key.ToCommitment()), item.NodeContext, + finalBatch.Add((_resolver.FindCachedOrUnknown(TreePath.Empty, item.Key.ToCommitment()), item.NodeContext, item.Context)); Interlocked.Decrement(ref _queuedJobs); } @@ -231,7 +233,7 @@ public void Start( { Job job = preSort[i]; - TrieNode node = _resolver.FindCachedOrUnknown(job.Key.ToCommitment()); + TrieNode node = _resolver.FindCachedOrUnknown(TreePath.Empty, job.Key.ToCommitment()); finalBatch.Add((node, job.NodeContext, job.Context)); } @@ -253,6 +255,7 @@ public void Start( void QueueNextNodes(ArrayPoolList<(TrieNode, TNodeContext, SmallTrieVisitContext)> batchResult) { // Reverse order is important so that higher level appear at the end of the stack. + TreePath emptyPath = TreePath.Empty; for (int i = batchResult.Count - 1; i >= 0; i--) { (TrieNode trieNode, TNodeContext nodeContext, SmallTrieVisitContext ctx) = batchResult[i]; @@ -261,7 +264,7 @@ void QueueNextNodes(ArrayPoolList<(TrieNode, TNodeContext, SmallTrieVisitContext // Inline node. Seems rare, so its fine to create new list for this. Does not have a keccak // to queue, so we'll just process it inline. using ArrayPoolList<(TrieNode, TNodeContext, SmallTrieVisitContext)> recursiveResult = new(1); - trieNode.ResolveNode(_resolver); + trieNode.ResolveNode(_resolver, emptyPath); Interlocked.Increment(ref _activeJobs); trieNode.AcceptResolvedNode(_visitor, nodeContext, _resolver, ctx, recursiveResult); QueueNextNodes(recursiveResult); @@ -289,6 +292,7 @@ private void BatchedThread() using ArrayPoolList<(TrieNode, TNodeContext, SmallTrieVisitContext)> nextToProcesses = new(_maxBatchSize); using ArrayPoolList resolveOrdering = new(_maxBatchSize); ArrayPoolList<(TrieNode, TNodeContext, SmallTrieVisitContext)>? currentBatch; + TreePath emptyPath = TreePath.Empty; while ((currentBatch = GetNextBatch()) is not null) { // Storing the idx separately as the ordering is important to reduce memory (approximate dfs ordering) @@ -298,7 +302,7 @@ private void BatchedThread() { (TrieNode? cur, TNodeContext _, SmallTrieVisitContext ctx) = currentBatch[i]; - cur.ResolveKey(_resolver, false); + cur.ResolveKey(_resolver, ref emptyPath, false); if (cur.FullRlp.IsNotNull) continue; if (cur.Keccak is null) @@ -328,7 +332,7 @@ private void BatchedThread() try { Hash256 theKeccak = nodeToResolve.Keccak; - nodeToResolve.ResolveNode(_resolver, flags); + nodeToResolve.ResolveNode(_resolver, emptyPath, flags); nodeToResolve.Keccak = theKeccak; // The resolve may set a key which clear the keccak } catch (TrieException) @@ -386,6 +390,7 @@ public Job(ValueHash256 key, TNodeContext nodeContext, SmallTrieVisitContext con { public EmptyContext Add(ReadOnlySpan nibblePath) => this; public EmptyContext Add(byte nibble) => this; + public EmptyContext AddStorage(in ValueHash256 storage) => this; } public struct TreePathContext : INodeContext @@ -411,8 +416,82 @@ public TreePathContext Add(byte nibble) Path = Path.Append(nibble) }; } + + public readonly TreePathContext AddStorage(in ValueHash256 storage) + { + return new TreePathContext(); + } +} + +public interface ITreePathContextWithStorage +{ + public TreePath Path { get; } + public Hash256? Storage { get; } +} + +public struct TreePathContextWithStorage : ITreePathContextWithStorage, INodeContext +{ + public TreePath Path { get; init; } = TreePath.Empty; + public Hash256? Storage { get; init; } = null; // Not using ValueHash as value is shared with many context. + + public TreePathContextWithStorage() + { + } + + public TreePathContextWithStorage Add(ReadOnlySpan nibblePath) + { + return new TreePathContextWithStorage() + { + Path = Path.Append(nibblePath), + Storage = Storage + }; + } + + public TreePathContextWithStorage Add(byte nibble) + { + return new TreePathContextWithStorage() + { + Path = Path.Append(nibble), + Storage = Storage + }; + } + + public readonly TreePathContextWithStorage AddStorage(in ValueHash256 storage) + { + return new TreePathContextWithStorage() + { + Path = TreePath.Empty, + Storage = Path.Path.ToCommitment(), + }; + } } +/// +/// Used as a substitute for TreePathContextWithStorage but does not actually keep track of path and storage. +/// Used for hash only database pruning to reduce memory usage. +/// +public struct NoopTreePathContextWithStorage : ITreePathContextWithStorage, INodeContext +{ + public NoopTreePathContextWithStorage Add(ReadOnlySpan nibblePath) + { + return this; + } + + public NoopTreePathContextWithStorage Add(byte nibble) + { + return this; + } + + public readonly NoopTreePathContextWithStorage AddStorage(in ValueHash256 storage) + { + return this; + } + + public TreePath Path => TreePath.Empty; + public Hash256? Storage => null; +} + + public interface INodeContext // The context needs to be the struct so that it's passed nicely via in and returned from the methods. where TNodeContext : struct, INodeContext @@ -420,4 +499,5 @@ public interface INodeContext TNodeContext Add(ReadOnlySpan nibblePath); TNodeContext Add(byte nibble); + TNodeContext AddStorage(in ValueHash256 storage); } diff --git a/src/Nethermind/Nethermind.Trie/CachedTrieStore.cs b/src/Nethermind/Nethermind.Trie/CachedTrieStore.cs new file mode 100644 index 00000000000..f49332e1cb1 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/CachedTrieStore.cs @@ -0,0 +1,65 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Diagnostics.Metrics; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Trie.Pruning; + +namespace Nethermind.Trie; + +/// +/// For use with read only trie store where the node is not cached. For when using readahead flag +/// where multiple get will traverse the trie. A single trie, will have increasing read order which is +/// fine, but the second get will get back to the root of the trie, meaning the iterator for readhead flag +/// will need to seek back. +/// +/// +public class CachedTrieStore(IScopedTrieStore @base) : IScopedTrieStore +{ + private NonBlocking.ConcurrentDictionary<(TreePath path, Hash256 hash), TrieNode> _cachedNode = new(); + + public TrieNode FindCachedOrUnknown(in TreePath path, Hash256 hash) + { + return _cachedNode.GetOrAdd((path, hash), (key) => @base.FindCachedOrUnknown(key.path, key.hash)); + } + + public byte[]? LoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) + { + return @base.LoadRlp(in path, hash, flags); + } + + public byte[]? TryLoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) + { + return @base.TryLoadRlp(in path, hash, flags); + } + + public ITrieNodeResolver GetStorageTrieNodeResolver(Hash256? address) + { + throw new InvalidOperationException("unsupported"); + } + + public INodeStorage.KeyScheme Scheme => @base.Scheme; + + public void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None) + { + @base.CommitNode(blockNumber, nodeCommitInfo, writeFlags); + } + + public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? root, WriteFlags writeFlags = WriteFlags.None) + { + @base.FinishBlockCommit(trieType, blockNumber, root, writeFlags); + } + + public bool IsPersisted(in TreePath path, in ValueHash256 keccak) + { + return @base.IsPersisted(in path, in keccak); + } + + public void Set(in TreePath path, in ValueHash256 keccak, byte[] rlp) + { + @base.Set(in path, in keccak, rlp); + } +} + diff --git a/src/Nethermind/Nethermind.Trie/INodeStorage.cs b/src/Nethermind/Nethermind.Trie/INodeStorage.cs new file mode 100644 index 00000000000..66b7c686787 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/INodeStorage.cs @@ -0,0 +1,49 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Trie; + +public interface INodeStorage +{ + /// + /// What is the current key scheme + /// + public KeyScheme Scheme { get; set; } + + /// + /// When running completely from hash based db, some code path that calculate path can be ignored. + /// + public bool RequirePath { get; } + + byte[]? Get(Hash256? address, in TreePath path, in ValueHash256 keccak, ReadFlags readFlags = ReadFlags.None); + void Set(Hash256? address, in TreePath path, in ValueHash256 hash, byte[] toArray, WriteFlags writeFlags = WriteFlags.None); + WriteBatch StartWriteBatch(); + + /// + /// Used by StateSync + /// + bool KeyExists(Hash256? address, in TreePath path, in ValueHash256 hash); + + /// + /// Used by StateSync to make sure values are flushed. + /// + void Flush(); + + public enum KeyScheme + { + Hash, + HalfPath, + + // The default setting in config, which for some reason, can't be a null enum. + Current, + } + + public interface WriteBatch : IDisposable + { + void Set(Hash256? address, in TreePath path, in ValueHash256 currentNodeKeccak, byte[] toArray, WriteFlags writeFlags); + void Remove(Hash256? address, in TreePath path, in ValueHash256 currentNodeKeccak); + } +} diff --git a/src/Nethermind/Nethermind.Trie/INodeStorageFactory.cs b/src/Nethermind/Nethermind.Trie/INodeStorageFactory.cs new file mode 100644 index 00000000000..a68b8622cdc --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/INodeStorageFactory.cs @@ -0,0 +1,13 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Db; + +namespace Nethermind.Trie; + +public interface INodeStorageFactory +{ + INodeStorage WrapKeyValueStore(IKeyValueStore keyValueStore, bool usePreferredKeyScheme = false); + void DetectCurrentKeySchemeFrom(IDb mainStateDb); +} diff --git a/src/Nethermind/Nethermind.Trie/ITreeVisitor.cs b/src/Nethermind/Nethermind.Trie/ITreeVisitor.cs index de324b810b7..6fcf79bd270 100644 --- a/src/Nethermind/Nethermind.Trie/ITreeVisitor.cs +++ b/src/Nethermind/Nethermind.Trie/ITreeVisitor.cs @@ -40,6 +40,8 @@ public interface ITreeVisitor /// public bool IsFullDbScan { get; } + public bool IsRangeScan => IsFullDbScan; + ReadFlags ExtraReadFlag => ReadFlags.None; bool ShouldVisit(in TNodeContext nodeContext, Hash256 nextNode); diff --git a/src/Nethermind/Nethermind.Trie/Nethermind.Trie.csproj b/src/Nethermind/Nethermind.Trie/Nethermind.Trie.csproj index 41f8adb8b1c..c459591b43c 100644 --- a/src/Nethermind/Nethermind.Trie/Nethermind.Trie.csproj +++ b/src/Nethermind/Nethermind.Trie/Nethermind.Trie.csproj @@ -11,6 +11,7 @@ + diff --git a/src/Nethermind/Nethermind.Trie/NibbleExtensions.cs b/src/Nethermind/Nethermind.Trie/NibbleExtensions.cs index 04db634bddc..d75939e201e 100644 --- a/src/Nethermind/Nethermind.Trie/NibbleExtensions.cs +++ b/src/Nethermind/Nethermind.Trie/NibbleExtensions.cs @@ -28,6 +28,13 @@ public static Nibble[] FromBytes(ReadOnlySpan bytes) return nibbles; } + public static byte[] BytesToNibbleBytes(ReadOnlySpan bytes) + { + byte[] output = new byte[bytes.Length * 2]; + BytesToNibbleBytes(bytes, output); + return output; + } + public unsafe static void BytesToNibbleBytes(ReadOnlySpan bytes, Span nibbles) { // Ensure the length of the nibbles span is exactly twice the length of the bytes span. diff --git a/src/Nethermind/Nethermind.Trie/NodeCommitInfo.cs b/src/Nethermind/Nethermind.Trie/NodeCommitInfo.cs index 8ff9fb947cc..bf85db2709d 100644 --- a/src/Nethermind/Nethermind.Trie/NodeCommitInfo.cs +++ b/src/Nethermind/Nethermind.Trie/NodeCommitInfo.cs @@ -2,24 +2,31 @@ namespace Nethermind.Trie { public readonly struct NodeCommitInfo { - public NodeCommitInfo(TrieNode node) + public NodeCommitInfo( + TrieNode node, + in TreePath path + ) { ChildPositionAtParent = 0; Node = node; + Path = path; NodeParent = null; } public NodeCommitInfo( TrieNode node, TrieNode nodeParent, + in TreePath path, int childPositionAtParent) { ChildPositionAtParent = childPositionAtParent; Node = node; + Path = path; NodeParent = nodeParent; } public TrieNode? Node { get; } + public readonly TreePath Path; public TrieNode? NodeParent { get; } diff --git a/src/Nethermind/Nethermind.Trie/NodeStorage.cs b/src/Nethermind/Nethermind.Trie/NodeStorage.cs new file mode 100644 index 00000000000..28bf3dc5243 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/NodeStorage.cs @@ -0,0 +1,230 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Diagnostics; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Db; + +namespace Nethermind.Trie; + +public class NodeStorage : INodeStorage +{ + private readonly IKeyValueStore _keyValueStore; + private static readonly byte[] EmptyTreeHashBytes = { 128 }; + private const int StoragePathLength = 74; + private const int TopStateBoundary = 5; + + public INodeStorage.KeyScheme Scheme { get; set; } + public bool RequirePath { get; } + + public NodeStorage(IKeyValueStore keyValueStore, INodeStorage.KeyScheme scheme = INodeStorage.KeyScheme.HalfPath, bool requirePath = true) + { + _keyValueStore = keyValueStore ?? throw new ArgumentNullException(nameof(keyValueStore)); + Scheme = scheme; + RequirePath = requirePath; + } + + public Span GetExpectedPath(Span pathSpan, Hash256? address, in TreePath path, in ValueHash256 keccak) + { + if (Scheme == INodeStorage.KeyScheme.HalfPath) + { + return GetHalfPathNodeStoragePathSpan(pathSpan, address, path, keccak); + } + + return GetHashBasedStoragePath(pathSpan, keccak); + } + + public static byte[] GetHalfPathNodeStoragePath(Hash256? address, in TreePath path, in ValueHash256 keccak) + { + return GetHalfPathNodeStoragePathSpan(stackalloc byte[StoragePathLength], address, path, keccak).ToArray(); + } + + private static Span GetHalfPathNodeStoragePathSpan(Span pathSpan, Hash256? address, in TreePath path, in ValueHash256 keccak) + { + Debug.Assert(pathSpan.Length == StoragePathLength); + + // Key structure look like this. + // + // For state (total 42 byte) + // + // +--------------+------------------+------------------+--------------+ + // | section byte | 8 byte from path | path length byte | 32 byte hash | + // +--------------+------------------+------------------+--------------+ + // + // For storage (total 74 byte) + // +--------------+---------------------+------------------+------------------+--------------+ + // | section byte | 32 byte from address | 8 byte from path | path length byte | 32 byte hash | + // +--------------+---------------------+------------------+------------------+--------------+ + // + // The section byte is: + // - 0 if state and path length is <= 5. + // - 1 if state and path length is > 5. + // - 2 if storage. + // + // The keys are separated due to the different characteristics of these nodes. The idea being that top level + // node can be up to 5 times bigger than lower node, and grew a lot due to pruning. So mixing them makes lower + // node sparser and have poorer cache hit, and make traversing leaves for snap serving slower. + // + // Technically, you'll need 9 byte for state and 8 byte for storage on mainnet for the path. But we want to keep + // key small at the same time too. If the key are too small, multiple node will be out of order, which + // can be slower but as long as they are in the same data block, it should not make a difference. + // On mainnet, the out of order key is around 0.03% for address and 0.07% for storage. + + if (address == null) + { + // Separate the top level tree into its own section. This marginally improve cache hit rate, but not much. + // 70% of duplicated keys is in this section, making them pretty bad, so we isolate them here to not expand + // the space of other things, hopefully we can cache them by key somehow. Separating by the path length 4 + // does improve cache hit and processing time a little bit, until a few hundreds prune persist where it grew + // beyond block cache size. + if (path.Length <= TopStateBoundary) + { + pathSpan[0] = 0; + } + else + { + pathSpan[0] = 1; + } + + // Keep key small + path.Path.BytesAsSpan[..8].CopyTo(pathSpan[1..]); + keccak.Bytes.CopyTo(pathSpan[10..]); + + pathSpan[9] = (byte)path.Length; + return pathSpan[..42]; + } + else + { + pathSpan[0] = 2; + address.Bytes.CopyTo(pathSpan[1..]); + path.Path.BytesAsSpan[..8].CopyTo(pathSpan[33..]); + + pathSpan[41] = (byte)path.Length; + keccak.Bytes.CopyTo(pathSpan[42..]); + return pathSpan; + } + + } + + private static Span GetHashBasedStoragePath(Span pathSpan, in ValueHash256 keccak) + { + Debug.Assert(pathSpan.Length == StoragePathLength); + keccak.Bytes.CopyTo(pathSpan); + return pathSpan[..32]; + } + + public byte[]? Get(Hash256? address, in TreePath path, in ValueHash256 keccak, ReadFlags readFlags = ReadFlags.None) + { + // Some of the code does not save empty tree at all so this is more about correctness than optimization. + if (keccak == Keccak.EmptyTreeHash) + { + return EmptyTreeHashBytes; + } + + if (Scheme == INodeStorage.KeyScheme.HalfPath && (readFlags & ReadFlags.HintReadAhead) != 0) + { + if (address == null && path.Length > TopStateBoundary) + { + readFlags |= ReadFlags.HintReadAhead2; + } + else if (address != null) + { + readFlags |= ReadFlags.HintReadAhead3; + } + } + + Span storagePathSpan = stackalloc byte[StoragePathLength]; + if (Scheme == INodeStorage.KeyScheme.HalfPath) + { + return _keyValueStore.Get(GetHalfPathNodeStoragePathSpan(storagePathSpan, address, path, keccak), readFlags) + ?? _keyValueStore.Get(GetHashBasedStoragePath(storagePathSpan, keccak), readFlags); + } + else + { + return _keyValueStore.Get(GetHashBasedStoragePath(storagePathSpan, keccak), readFlags) + ?? _keyValueStore.Get(GetHalfPathNodeStoragePathSpan(storagePathSpan, address, path, keccak), readFlags); + } + } + + public bool KeyExists(Hash256? address, in TreePath path, in ValueHash256 keccak) + { + if (keccak == Keccak.EmptyTreeHash) + { + return true; + } + + Span storagePathSpan = stackalloc byte[StoragePathLength]; + if (Scheme == INodeStorage.KeyScheme.HalfPath) + { + return _keyValueStore.Get(GetHalfPathNodeStoragePathSpan(storagePathSpan, address, path, keccak)) != null + || _keyValueStore.Get(GetHashBasedStoragePath(storagePathSpan, keccak)) != null; + } + else + { + return _keyValueStore.Get(GetHashBasedStoragePath(storagePathSpan, keccak)) != null + || _keyValueStore.Get(GetHalfPathNodeStoragePathSpan(storagePathSpan, address, path, keccak)) != null; + } + } + + public INodeStorage.WriteBatch StartWriteBatch() + { + if (_keyValueStore is IKeyValueStoreWithBatching withBatching) + { + return new WriteBatch(withBatching.StartWriteBatch(), this); + } + return new WriteBatch(new InMemoryWriteBatch(_keyValueStore), this); + } + + public void Set(Hash256? address, in TreePath path, in ValueHash256 keccak, byte[] toArray, WriteFlags writeFlags = WriteFlags.None) + { + if (keccak == Keccak.EmptyTreeHash) + { + return; + } + + _keyValueStore.Set(GetExpectedPath(stackalloc byte[StoragePathLength], address, path, keccak), toArray, writeFlags); + } + + public void Flush() + { + if (_keyValueStore is IDb db) + { + db.Flush(); + } + } + + private class WriteBatch : INodeStorage.WriteBatch + { + private readonly IWriteBatch _writeBatch; + private readonly NodeStorage _nodeStorage; + + public WriteBatch(IWriteBatch writeBatch, NodeStorage nodeStorage) + { + _writeBatch = writeBatch; + _nodeStorage = nodeStorage; + } + + public void Dispose() + { + _writeBatch.Dispose(); + } + + public void Set(Hash256? address, in TreePath path, in ValueHash256 keccak, byte[] toArray, WriteFlags writeFlags) + { + if (keccak == Keccak.EmptyTreeHash) + { + return; + } + + _writeBatch.Set(_nodeStorage.GetExpectedPath(stackalloc byte[StoragePathLength], address, path, keccak), toArray, writeFlags); + } + + public void Remove(Hash256? address, in TreePath path, in ValueHash256 keccak) + { + // Only delete half path key. DO NOT delete hash based key. + _writeBatch.Remove(GetHalfPathNodeStoragePathSpan(stackalloc byte[StoragePathLength], address, path, keccak)); + } + } +} diff --git a/src/Nethermind/Nethermind.Trie/NodeStorageFactory.cs b/src/Nethermind/Nethermind.Trie/NodeStorageFactory.cs new file mode 100644 index 00000000000..ddcc902dfc5 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/NodeStorageFactory.cs @@ -0,0 +1,94 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Linq; +using Nethermind.Core; +using Nethermind.Db; +using Nethermind.Logging; + +namespace Nethermind.Trie; + +public class NodeStorageFactory : INodeStorageFactory +{ + private readonly INodeStorage.KeyScheme _preferredKeyScheme; + private INodeStorage.KeyScheme? _currentKeyScheme; + private readonly ILogger _logger; + + public NodeStorageFactory(INodeStorage.KeyScheme preferredKeyScheme, ILogManager logManager) + { + _logger = logManager.GetClassLogger(); + _preferredKeyScheme = preferredKeyScheme; + _currentKeyScheme = null; + } + + public void DetectCurrentKeySchemeFrom(IDb mainStateDb) + { + _currentKeyScheme = DetectKeyScheme(mainStateDb); + if (_currentKeyScheme == null) + { + _logger.Info("No current state db key scheme."); + } + else + { + _logger.Info($"Detected {_currentKeyScheme} key scheme."); + } + } + + public INodeStorage WrapKeyValueStore(IKeyValueStore keyValueStore, bool forceUsePreferredKeyScheme = false) + { + INodeStorage.KeyScheme effectiveKeyScheme; + if (forceUsePreferredKeyScheme && _preferredKeyScheme != INodeStorage.KeyScheme.Current) + { + effectiveKeyScheme = _preferredKeyScheme; + } + else + { + if (_currentKeyScheme != null) + { + effectiveKeyScheme = _currentKeyScheme.Value; + } + else if (_preferredKeyScheme != INodeStorage.KeyScheme.Current) + { + effectiveKeyScheme = _preferredKeyScheme; + } + else + { + effectiveKeyScheme = INodeStorage.KeyScheme.HalfPath; + } + } + + bool requirePath = effectiveKeyScheme == INodeStorage.KeyScheme.HalfPath || + _currentKeyScheme == INodeStorage.KeyScheme.HalfPath || + _preferredKeyScheme == INodeStorage.KeyScheme.HalfPath; + + return new NodeStorage( + keyValueStore, + effectiveKeyScheme, + requirePath + ); + } + + private static INodeStorage.KeyScheme? DetectKeyScheme(IDb db) + { + // Sample 20 keys + // If most of them have length == 32, they are hash db. + // Otherwise, its probably halfpath + + int total = 0; + int keyOfLength32 = 0; + foreach (KeyValuePair keyValuePair in db.GetAll().Take(20)) + { + total++; + if (keyValuePair.Key.Length == 32) + { + keyOfLength32++; + } + } + + // Eh.. can't decide. + if (total < 20) return null; + + return keyOfLength32 > 10 ? INodeStorage.KeyScheme.Hash : INodeStorage.KeyScheme.HalfPath; + } +} diff --git a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs index f1f4538225a..c0ef126ef58 100644 --- a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs +++ b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs @@ -41,7 +41,7 @@ public class PatriciaTree private ConcurrentQueue? _commitExceptions; private ConcurrentQueue? _currentCommit; - public ITrieStore TrieStore { get; } + public IScopedTrieStore TrieStore { get; } public ICappedArrayPool? _bufferPool; private readonly bool _parallelBranches; @@ -61,7 +61,7 @@ internal TrieNode? Root { get { - RootRef?.ResolveNode(TrieStore); + RootRef?.ResolveNode(TrieStore, TreePath.Empty); return RootRef; } } @@ -83,6 +83,11 @@ public PatriciaTree(IKeyValueStoreWithBatching keyValueStore) } public PatriciaTree(ITrieStore trieStore, ILogManager logManager, ICappedArrayPool? bufferPool = null) + : this(trieStore.GetTrieStore(null), EmptyTreeHash, false, true, logManager, bufferPool: bufferPool) + { + } + + public PatriciaTree(IScopedTrieStore trieStore, ILogManager logManager, ICappedArrayPool? bufferPool = null) : this(trieStore, EmptyTreeHash, false, true, logManager, bufferPool: bufferPool) { } @@ -95,7 +100,7 @@ public PatriciaTree( ILogManager logManager, ICappedArrayPool? bufferPool = null) : this( - new TrieStore(keyValueStore, logManager), + new TrieStore(keyValueStore, logManager).GetTrieStore(null), rootHash, parallelBranches, allowCommits, @@ -105,7 +110,7 @@ public PatriciaTree( } public PatriciaTree( - ITrieStore? trieStore, + IScopedTrieStore? trieStore, Hash256 rootHash, bool parallelBranches, bool allowCommits, @@ -133,7 +138,7 @@ public void Commit(long blockNumber, bool skipRoot = false, WriteFlags writeFlag if (RootRef is not null && RootRef.IsDirty) { - Commit(new NodeCommitInfo(RootRef), skipSelf: skipRoot); + Commit(new NodeCommitInfo(RootRef, TreePath.Empty), skipSelf: skipRoot); while (TryDequeueCommit(out NodeCommitInfo node)) { if (_logger.IsTrace) Trace(blockNumber, node); @@ -141,7 +146,8 @@ public void Commit(long blockNumber, bool skipRoot = false, WriteFlags writeFlag } // reset objects - RootRef!.ResolveKey(TrieStore, true, bufferPool: _bufferPool); + TreePath path = TreePath.Empty; + RootRef!.ResolveKey(TrieStore, ref path, true, bufferPool: _bufferPool); SetRootHash(RootRef.Keccak!, true); } @@ -176,6 +182,7 @@ private void Commit(NodeCommitInfo nodeCommitInfo, bool skipSelf = false) } TrieNode node = nodeCommitInfo.Node; + TreePath path = nodeCommitInfo.Path; if (node!.IsBranch) { // idea from EthereumJ - testing parallel branches @@ -185,13 +192,14 @@ private void Commit(NodeCommitInfo nodeCommitInfo, bool skipSelf = false) { if (node.IsChildDirty(i)) { - Commit(new NodeCommitInfo(node.GetChild(TrieStore, i)!, node, i)); + TreePath childPath = node.GetChildPath(nodeCommitInfo.Path, i); + Commit(new NodeCommitInfo(node.GetChildWithChildPath(TrieStore, ref childPath, i)!, node, childPath, i)); } else { if (_logger.IsTrace) { - Trace(node, i); + Trace(node, ref path, i); } } } @@ -203,13 +211,14 @@ private void Commit(NodeCommitInfo nodeCommitInfo, bool skipSelf = false) { if (node.IsChildDirty(i)) { - nodesToCommit.Add(new NodeCommitInfo(node.GetChild(TrieStore, i)!, node, i)); + TreePath childPath = node.GetChildPath(nodeCommitInfo.Path, i); + nodesToCommit.Add(new NodeCommitInfo(node.GetChildWithChildPath(TrieStore, ref childPath, i)!, node, childPath, i)); } else { if (_logger.IsTrace) { - Trace(node, i); + Trace(node, ref path, i); } } } @@ -245,7 +254,8 @@ private void Commit(NodeCommitInfo nodeCommitInfo, bool skipSelf = false) } else if (node.NodeType == NodeType.Extension) { - TrieNode extensionChild = node.GetChild(TrieStore, 0); + TreePath childPath = node.GetChildPath(nodeCommitInfo.Path, 0); + TrieNode extensionChild = node.GetChildWithChildPath(TrieStore, ref childPath, 0); if (extensionChild is null) { ThrowInvalidExtension(); @@ -253,7 +263,7 @@ private void Commit(NodeCommitInfo nodeCommitInfo, bool skipSelf = false) if (extensionChild.IsDirty) { - Commit(new NodeCommitInfo(extensionChild, node, 0)); + Commit(new NodeCommitInfo(extensionChild, node, childPath, 0)); } else { @@ -261,7 +271,7 @@ private void Commit(NodeCommitInfo nodeCommitInfo, bool skipSelf = false) } } - node.ResolveKey(TrieStore, nodeCommitInfo.IsRoot, bufferPool: _bufferPool); + node.ResolveKey(TrieStore, ref path, nodeCommitInfo.IsRoot, bufferPool: _bufferPool); node.Seal(); if (node.FullRlp.Length >= 32) @@ -312,9 +322,9 @@ ConcurrentQueue CreateQueue(ref ConcurrentQueue queueRef) static void ThrowInvalidExtension() => throw new InvalidOperationException("An attempt to store an extension without a child."); [MethodImpl(MethodImplOptions.NoInlining)] - void Trace(TrieNode node, int i) + void Trace(TrieNode node, ref TreePath path, int i) { - TrieNode child = node.GetChild(TrieStore, i); + TrieNode child = node.GetChild(TrieStore, ref path, i); if (child is not null) { _logger.Trace($"Skipping commit of {child}"); @@ -336,7 +346,8 @@ void TraceSkipInlineNode(TrieNode node) public void UpdateRootHash() { - RootRef?.ResolveKey(TrieStore, true, bufferPool: _bufferPool); + TreePath path = TreePath.Empty; + RootRef?.ResolveKey(TrieStore, ref path, true, bufferPool: _bufferPool); SetRootHash(RootRef?.Keccak ?? EmptyTreeHash, false); } @@ -349,7 +360,7 @@ private void SetRootHash(Hash256? value, bool resetObjects) } else if (resetObjects) { - RootRef = TrieStore.FindCachedOrUnknown(_rootHash); + RootRef = TrieStore.FindCachedOrUnknown(TreePath.Empty, _rootHash); } } @@ -367,7 +378,8 @@ public virtual ReadOnlySpan Get(ReadOnlySpan rawKey, Hash256? rootHa [..nibblesCount]; // Slice to exact size; Nibbles.BytesToNibbleBytes(rawKey, nibbles); - ref readonly CappedArray result = ref Run(nibbles, nibblesCount, in CappedArray.Empty, isUpdate: false, startRootHash: rootHash); + TreePath updatePathTreePath = TreePath.Empty; // Only used on update. + ref readonly CappedArray result = ref Run(nibbles, nibblesCount, ref updatePathTreePath, in CappedArray.Empty, isUpdate: false, startRootHash: rootHash); if (array is not null) ArrayPool.Shared.Return(array); return result.AsSpan(); @@ -385,7 +397,8 @@ public virtual ReadOnlySpan Get(ReadOnlySpan rawKey, Hash256? rootHa try { int nibblesCount = nibbles.Length; - CappedArray result = Run(nibbles, nibblesCount, Array.Empty(), false, startRootHash: rootHash, + TreePath updatePathTreePath = TreePath.Empty; // Only used on update. + CappedArray result = Run(nibbles, nibblesCount, ref updatePathTreePath, Array.Empty(), false, startRootHash: rootHash, isNodeRead: true); return result.ToArray() ?? Array.Empty(); } @@ -408,7 +421,8 @@ public virtual ReadOnlySpan Get(ReadOnlySpan rawKey, Hash256? rootHa : array = ArrayPool.Shared.Rent(nibblesCount)) [..nibblesCount]; // Slice to exact size; Nibbles.BytesToNibbleBytes(rawKey, nibbles); - CappedArray result = Run(nibbles, nibblesCount, Array.Empty(), false, startRootHash: rootHash, + TreePath updatePathTreePath = TreePath.Empty; // Only used on update. + CappedArray result = Run(nibbles, nibblesCount, ref updatePathTreePath, Array.Empty(), false, startRootHash: rootHash, isNodeRead: true); if (array is not null) ArrayPool.Shared.Return(array); return result.ToArray() ?? Array.Empty(); @@ -490,7 +504,8 @@ public virtual void Set(ReadOnlySpan rawKey, in CappedArray value) Nibbles.BytesToNibbleBytes(rawKey, nibbles); // lazy stack cleaning after the previous update ClearNodeStack(); - Run(nibbles, nibblesCount, in value, isUpdate: true); + TreePath updatePathTreePath = TreePath.FromPath(rawKey); // Only used on update. + Run(nibbles, nibblesCount, ref updatePathTreePath, in value, isUpdate: true); if (array is not null) ArrayPool.Shared.Return(array); } @@ -521,6 +536,7 @@ public void Set(ReadOnlySpan rawKey, Rlp? value) private ref readonly CappedArray Run( Span updatePath, int nibblesCount, + ref TreePath updatePathTreePath, in CappedArray updateValue, bool isUpdate, bool ignoreMissingDelete = true, @@ -534,14 +550,15 @@ private ref readonly CappedArray Run( } #endif TraverseContext traverseContext = - new(updatePath[..nibblesCount], updateValue, isUpdate, ignoreMissingDelete, isNodeRead: isNodeRead); + new(updatePath[..nibblesCount], ref updatePathTreePath, updateValue, isUpdate, ignoreMissingDelete, isNodeRead: isNodeRead); if (startRootHash is not null) { if (_logger.IsTrace) TraceStart(startRootHash, in traverseContext); - TrieNode startNode = TrieStore.FindCachedOrUnknown(startRootHash); - ResolveNode(startNode, in traverseContext); - return ref TraverseNode(startNode, in traverseContext); + TreePath startingPath = TreePath.Empty; + TrieNode startNode = TrieStore.FindCachedOrUnknown(startingPath, startRootHash); + ResolveNode(startNode, in traverseContext, in startingPath); + return ref TraverseNode(startNode, in traverseContext, ref startingPath); } else { @@ -560,9 +577,10 @@ private ref readonly CappedArray Run( } else { - ResolveNode(RootRef, in traverseContext); + TreePath startingPath = TreePath.Empty; + ResolveNode(RootRef, in traverseContext, in startingPath); if (_logger.IsTrace) TraceNode(in traverseContext); - return ref TraverseNode(RootRef, in traverseContext); + return ref TraverseNode(RootRef, in traverseContext, ref startingPath); } } @@ -587,11 +605,11 @@ void TraceNode(in TraverseContext traverseContext) } } - private void ResolveNode(TrieNode node, in TraverseContext traverseContext) + private void ResolveNode(TrieNode node, in TraverseContext traverseContext, in TreePath path) { try { - node.ResolveNode(TrieStore); + node.ResolveNode(TrieStore, path); } catch (TrieNodeException e) { @@ -599,7 +617,7 @@ private void ResolveNode(TrieNode node, in TraverseContext traverseContext) } } - private ref readonly CappedArray TraverseNode(TrieNode node, scoped in TraverseContext traverseContext) + private ref readonly CappedArray TraverseNode(TrieNode node, scoped in TraverseContext traverseContext, scoped ref TreePath path) { if (_logger.IsTrace) Trace(node, traverseContext); @@ -611,11 +629,11 @@ private ref readonly CappedArray TraverseNode(TrieNode node, scoped in Tra switch (node.NodeType) { case NodeType.Branch: - return ref TraverseBranch(node, in traverseContext); + return ref TraverseBranch(node, in traverseContext, ref path); case NodeType.Extension: - return ref TraverseExtension(node, in traverseContext); + return ref TraverseExtension(node, in traverseContext, ref path); case NodeType.Leaf: - return ref TraverseLeaf(node, in traverseContext); + return ref TraverseLeaf(node, in traverseContext, ref path); case NodeType.Unknown: return ref TraverseUnknown(node); default: @@ -645,6 +663,7 @@ static ref readonly CappedArray ThrowNotSupported(TrieNode node) private void ConnectNodes(TrieNode? node, in TraverseContext traverseContext) { + TreePath path = traverseContext.UpdatePathTreePath; bool isRoot = IsNodeStackEmpty(); TrieNode nextNode = node; @@ -652,6 +671,7 @@ private void ConnectNodes(TrieNode? node, in TraverseContext traverseContext) { StackedNode parentOnStack = PopFromNodeStack(); node = parentOnStack.Node; + path.TruncateMut(parentOnStack.PathLength); isRoot = IsNodeStackEmpty(); @@ -710,7 +730,8 @@ L X - - - - - - - - - - - - - - */ } } - TrieNode childNode = node.GetChild(TrieStore, childNodeIndex); + node.AppendChildPathBranch(ref path, childNodeIndex); + TrieNode childNode = node.GetChildWithChildPath(TrieStore, ref path, childNodeIndex); if (childNode is null) { /* potential corrupted trie data state when we find a branch that has only one child */ @@ -718,7 +739,9 @@ L X - - - - - - - - - - - - - - */ "Before updating branch should have had at least two non-empty children"); } - ResolveNode(childNode, in traverseContext); + ResolveNode(childNode, in traverseContext, in path); + path.TruncateOne(); + if (childNode.IsBranch) { TrieNode extensionFromBranch = @@ -864,7 +887,7 @@ L L - - - - - - - - - - - - - - */ RootRef = nextNode; } - private ref readonly CappedArray TraverseBranch(TrieNode node, scoped in TraverseContext traverseContext) + private ref readonly CappedArray TraverseBranch(TrieNode node, scoped in TraverseContext traverseContext, scoped ref TreePath path) { if (traverseContext.RemainingUpdatePathLength == 0) { @@ -902,11 +925,12 @@ which is not possible within the Ethereum protocol which has keys of the same le return ref traverseContext.UpdateValue; } - int pathIndex = traverseContext.UpdatePath[traverseContext.CurrentIndex]; - TrieNode childNode = node.GetChild(TrieStore, pathIndex); + int childIdx = traverseContext.UpdatePath[traverseContext.CurrentIndex]; + node.AppendChildPathBranch(ref path, childIdx); + TrieNode childNode = node.GetChildWithChildPath(TrieStore, ref path, childIdx); if (traverseContext.IsUpdate) { - PushToNodeStack(new StackedNode(node, pathIndex)); + PushToNodeStack(new StackedNode(node, traverseContext.CurrentIndex, childIdx)); } if (childNode is null) @@ -935,12 +959,12 @@ which is not possible within the Ethereum protocol which has keys of the same le return ref traverseContext.UpdateValue; } - ResolveNode(childNode, in traverseContext); - - return ref TraverseNext(childNode, in traverseContext, 1); + ResolveNode(childNode, in traverseContext, in path); + ref readonly CappedArray response = ref TraverseNext(childNode, in traverseContext, ref path, 1); + return ref response; } - private ref readonly CappedArray TraverseLeaf(TrieNode node, scoped in TraverseContext traverseContext) + private ref readonly CappedArray TraverseLeaf(TrieNode node, scoped in TraverseContext traverseContext, scoped ref TreePath path) { if (node.Key is null) { @@ -1021,7 +1045,7 @@ private ref readonly CappedArray TraverseLeaf(TrieNode node, scoped in Tra { ReadOnlySpan extensionPath = longerPath[..extensionLength]; TrieNode extension = TrieNodeFactory.CreateExtension(extensionPath.ToArray()); - PushToNodeStack(new StackedNode(extension, 0)); + PushToNodeStack(new StackedNode(extension, traverseContext.CurrentIndex, 0)); } TrieNode branch = TrieNodeFactory.CreateBranch(); @@ -1040,13 +1064,13 @@ private ref readonly CappedArray TraverseLeaf(TrieNode node, scoped in Tra TrieNode withUpdatedKeyAndValue = node.CloneWithChangedKeyAndValue( leafPath.ToArray(), longerPathValue); - PushToNodeStack(new StackedNode(branch, longerPath[extensionLength])); + PushToNodeStack(new StackedNode(branch, traverseContext.CurrentIndex, longerPath[extensionLength])); ConnectNodes(withUpdatedKeyAndValue, in traverseContext); return ref traverseContext.UpdateValue; } - private ref readonly CappedArray TraverseExtension(TrieNode node, scoped in TraverseContext traverseContext) + private ref readonly CappedArray TraverseExtension(TrieNode node, scoped in TraverseContext traverseContext, scoped ref TreePath path) { if (node.Key is null) { @@ -1061,18 +1085,18 @@ private ref readonly CappedArray TraverseExtension(TrieNode node, scoped i { if (traverseContext.IsUpdate) { - PushToNodeStack(new StackedNode(node, 0)); + PushToNodeStack(new StackedNode(node, traverseContext.CurrentIndex, 0)); } - TrieNode next = node.GetChild(TrieStore, 0); + int previousPathLength = node.AppendChildPath(ref path, 0); + TrieNode next = node.GetChildWithChildPath(TrieStore, ref path, 0); if (next is null) { ThrowMissingChildException(node); } - ResolveNode(next, in traverseContext); - - return ref TraverseNext(next, in traverseContext, extensionLength); + ResolveNode(next, in traverseContext, in path); + return ref TraverseNext(next, in traverseContext, ref path, extensionLength); } if (traverseContext.IsRead) @@ -1095,9 +1119,10 @@ private ref readonly CappedArray TraverseExtension(TrieNode node, scoped i { byte[] extensionPath = node.Key.Slice(0, extensionLength); node = node.CloneWithChangedKey(extensionPath); - PushToNodeStack(new StackedNode(node, 0)); + PushToNodeStack(new StackedNode(node, traverseContext.CurrentIndex, 0)); } + // The node from extension become a branch TrieNode branch = TrieNodeFactory.CreateBranch(); if (extensionLength == remaining.Length) { @@ -1105,12 +1130,12 @@ private ref readonly CappedArray TraverseExtension(TrieNode node, scoped i } else { - byte[] path = remaining.Slice(extensionLength + 1, remaining.Length - extensionLength - 1).ToArray(); - TrieNode shortLeaf = TrieNodeFactory.CreateLeaf(path, in traverseContext.UpdateValue); + byte[] remainingPath = remaining.Slice(extensionLength + 1, remaining.Length - extensionLength - 1).ToArray(); + TrieNode shortLeaf = TrieNodeFactory.CreateLeaf(remainingPath, in traverseContext.UpdateValue); branch.SetChild(remaining[extensionLength], shortLeaf); } - TrieNode originalNodeChild = originalNode.GetChild(TrieStore, 0); + TrieNode originalNodeChild = originalNode.GetChild(TrieStore, ref path, 0); if (originalNodeChild is null) { ThrowInvalidDataException(originalNode); @@ -1133,18 +1158,19 @@ TrieNode secondExtension return ref traverseContext.UpdateValue; } - private ref readonly CappedArray TraverseNext(TrieNode next, scoped in TraverseContext traverseContext, int extensionLength) + private ref readonly CappedArray TraverseNext(TrieNode next, scoped in TraverseContext traverseContext, scoped ref TreePath path, int extensionLength) { // Move large struct creation out of flow so doesn't force additional stack space // in calling method even if not used TraverseContext newContext = traverseContext.WithNewIndex(traverseContext.CurrentIndex + extensionLength); - return ref TraverseNode(next, in newContext); + return ref TraverseNode(next, in newContext, ref path); } private readonly ref struct TraverseContext { public readonly ref readonly CappedArray UpdateValue; public readonly ReadOnlySpan UpdatePath; + public readonly ref readonly TreePath UpdatePathTreePath; public bool IsUpdate { get; } public bool IsNodeRead { get; } public bool IsReadValue => !IsUpdate && !IsNodeRead; @@ -1172,12 +1198,14 @@ public TraverseContext(scoped in TraverseContext context, int index) public TraverseContext( Span updatePath, + ref TreePath updatePathTreePath, in CappedArray updateValue, bool isUpdate, bool ignoreMissingDelete = true, bool isNodeRead = false) { UpdatePath = updatePath; + UpdatePathTreePath = ref updatePathTreePath; UpdateValue = ref updateValue.IsNotNull && updateValue.Length == 0 ? ref CappedArray.Null : ref updateValue; IsUpdate = isUpdate; IgnoreMissingDelete = ignoreMissingDelete; @@ -1193,13 +1221,15 @@ public override string ToString() private readonly struct StackedNode { - public StackedNode(TrieNode node, int pathIndex) + public StackedNode(TrieNode node, int pathLength, int pathIndex) { Node = node; + PathLength = pathLength; PathIndex = pathIndex; } public TrieNode Node { get; } + public int PathLength { get; } public int PathIndex { get; } public override string ToString() @@ -1239,7 +1269,7 @@ public void Accept( // but we know that we have multiple optimizations and assumptions on trees ExpectAccounts = visitingOptions.ExpectAccounts, MaxDegreeOfParallelism = visitingOptions.MaxDegreeOfParallelism, - IsStorage = storageAddr is not null + IsStorage = storageAddr != null }; if (storageAddr is not null) @@ -1254,21 +1284,38 @@ Hash256 DecodeStorageRoot(Hash256 root, Hash256 address) rootHash = storageRoot ?? DecodeStorageRoot(rootHash, storageAddr); } - ReadFlags flags = visitor.IsFullDbScan - ? visitor.ExtraReadFlag | ReadFlags.HintCacheMiss - : visitor.ExtraReadFlag; + ReadFlags flags = visitor.ExtraReadFlag; + if (visitor.IsFullDbScan) + { + if (TrieStore.Scheme == INodeStorage.KeyScheme.HalfPath) + { + // With halfpath or flat, the nodes are ordered so readahead will make things faster. + flags |= ReadFlags.HintReadAhead; + } + else + { + // With hash, we don't wanna add cache as that will take some CPU time away. + flags |= ReadFlags.HintCacheMiss; + } + } ITrieNodeResolver resolver = flags != ReadFlags.None ? new TrieNodeResolverWithReadFlags(TrieStore, flags) : TrieStore; + if (storageAddr != null) + { + resolver = resolver.GetStorageTrieNodeResolver(storageAddr); + } + bool TryGetRootRef(out TrieNode? rootRef) { rootRef = null; if (rootHash != Keccak.EmptyTreeHash) { - rootRef = RootHash == rootHash ? RootRef : resolver.FindCachedOrUnknown(rootHash); - if (!rootRef!.TryResolveNode(resolver)) + TreePath emptyPath = TreePath.Empty; + rootRef = RootHash == rootHash ? RootRef : resolver.FindCachedOrUnknown(emptyPath, rootHash); + if (!rootRef!.TryResolveNode(resolver, ref emptyPath)) { visitor.VisitMissingNode(default, rootHash, trieVisitContext); return false; @@ -1283,11 +1330,12 @@ bool TryGetRootRef(out TrieNode? rootRef) visitor.VisitTree(default, rootHash, trieVisitContext); if (TryGetRootRef(out TrieNode rootRef)) { - rootRef?.Accept(visitor, default, resolver, trieVisitContext); + TreePath emptyPath = TreePath.Empty; + rootRef?.Accept(visitor, default, resolver, ref emptyPath, trieVisitContext); } } // Full db scan - else if (visitingOptions.FullScanMemoryBudget != 0) + else if (TrieStore.Scheme == INodeStorage.KeyScheme.Hash && visitingOptions.FullScanMemoryBudget != 0) { visitor.VisitTree(default, rootHash, trieVisitContext); BatchedTrieVisitor batchedTrieVisitor = new(visitor, resolver, visitingOptions); @@ -1295,8 +1343,9 @@ bool TryGetRootRef(out TrieNode? rootRef) } else if (TryGetRootRef(out TrieNode rootRef)) { + TreePath emptyPath = TreePath.Empty; visitor.VisitTree(default, rootHash, trieVisitContext); - rootRef?.Accept(visitor, default, resolver, trieVisitContext); + rootRef?.Accept(visitor, default, resolver, ref emptyPath, trieVisitContext); } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/Archive.cs b/src/Nethermind/Nethermind.Trie/Pruning/Archive.cs index 8e534c70c68..1b70bec140d 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/Archive.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/Archive.cs @@ -13,5 +13,7 @@ public bool ShouldPersist(long blockNumber) { return true; } + + public bool IsFullPruning => false; } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/CompositePersistenceStrategy.cs b/src/Nethermind/Nethermind.Trie/Pruning/CompositePersistenceStrategy.cs index 25fdd5e4ed8..25653237786 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/CompositePersistenceStrategy.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/CompositePersistenceStrategy.cs @@ -22,4 +22,5 @@ public IPersistenceStrategy AddStrategy(IPersistenceStrategy strategy) } public bool ShouldPersist(long blockNumber) => _strategies.Any(strategy => strategy.ShouldPersist(blockNumber)); + public bool IsFullPruning => _strategies.Any(strategy => strategy.IsFullPruning); } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/IPersistenceStrategy.cs b/src/Nethermind/Nethermind.Trie/Pruning/IPersistenceStrategy.cs index 69ce05438ca..671663d2aec 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/IPersistenceStrategy.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/IPersistenceStrategy.cs @@ -6,5 +6,6 @@ namespace Nethermind.Trie.Pruning public interface IPersistenceStrategy { bool ShouldPersist(long blockNumber); + bool IsFullPruning { get; } } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/IScopedTrieStore.cs b/src/Nethermind/Nethermind.Trie/Pruning/IScopedTrieStore.cs new file mode 100644 index 00000000000..f8d2384fd0e --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/Pruning/IScopedTrieStore.cs @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core; +using Nethermind.Core.Crypto; + +namespace Nethermind.Trie.Pruning; + +/// +/// Interface with PatriciaTrie. Its `scoped` as it have underlying storage address for storage trie. It basically +/// an adapter to the standard ITrieStore. +/// +public interface IScopedTrieStore : ITrieNodeResolver +{ + // TODO: Commit and FinishBlockCommit is unnecessary. Geth just compile the changes and return it in a batch, + // which get committed in a single call. + void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None); + + void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? root, WriteFlags writeFlags = WriteFlags.None); + + // Only used by snap provider, so ValueHash instead of Hash + bool IsPersisted(in TreePath path, in ValueHash256 keccak); + + // Used for trie node recovery + void Set(in TreePath path, in ValueHash256 keccak, byte[] rlp); +} diff --git a/src/Nethermind/Nethermind.Trie/Pruning/ISnapshotStrategy.cs b/src/Nethermind/Nethermind.Trie/Pruning/ISnapshotStrategy.cs index ba4a9ba13ef..70272411373 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/ISnapshotStrategy.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/ISnapshotStrategy.cs @@ -7,5 +7,6 @@ public interface IPruningStrategy { bool PruningEnabled { get; } bool ShouldPrune(in long currentMemory); + int TrackedPastKeyCount { get; } } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/ITrieNodeResolver.cs b/src/Nethermind/Nethermind.Trie/Pruning/ITrieNodeResolver.cs index 3773cb26104..5b2dbe205a3 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/ITrieNodeResolver.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/ITrieNodeResolver.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Core.Attributes; using Nethermind.Core.Crypto; namespace Nethermind.Trie.Pruning @@ -15,20 +16,31 @@ public interface ITrieNodeResolver /// /// Keccak hash of the RLP of the node. /// - TrieNode FindCachedOrUnknown(Hash256 hash); + TrieNode FindCachedOrUnknown(in TreePath path, Hash256 hash); /// /// Loads RLP of the node. /// /// /// - byte[]? LoadRlp(Hash256 hash, ReadFlags flags = ReadFlags.None); + byte[]? LoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None); /// - /// Loads RLP of the node. + /// Loads RLP of the node, but return null instead of throwing if does not exist. /// /// /// - byte[]? TryLoadRlp(Hash256 hash, ReadFlags flags = ReadFlags.None); + byte[]? TryLoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None); + + /// + /// Got another node resolver for another trie. Used for tree traversal. For simplicity, if address is null, + /// return state trie. + /// + /// + /// + [Todo("Find a way to not have this. PatriciaTrie on its own does not need the concept of storage.")] + ITrieNodeResolver GetStorageTrieNodeResolver(Hash256? address); + + INodeStorage.KeyScheme Scheme { get; } } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/ITrieStore.cs b/src/Nethermind/Nethermind.Trie/Pruning/ITrieStore.cs index d29a3c4c24a..dbd434459bf 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/ITrieStore.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/ITrieStore.cs @@ -9,15 +9,18 @@ namespace Nethermind.Trie.Pruning { - public interface ITrieStore : ITrieNodeResolver, IDisposable + /// + /// Full traditional trie store. + /// + public interface ITrieStore : IDisposable { - void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None); + void CommitNode(long blockNumber, Hash256? address, NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None); - void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? root, WriteFlags writeFlags = WriteFlags.None); + void FinishBlockCommit(TrieType trieType, long blockNumber, Hash256? address, TrieNode? root, WriteFlags writeFlags = WriteFlags.None); - bool IsPersisted(in ValueHash256 keccak); + bool IsPersisted(Hash256? address, in TreePath path, in ValueHash256 keccak); - IReadOnlyTrieStore AsReadOnly(IKeyValueStore? keyValueStore = null); + IReadOnlyTrieStore AsReadOnly(INodeStorage? keyValueStore = null); event EventHandler? ReorgBoundaryReached; @@ -25,8 +28,16 @@ public interface ITrieStore : ITrieNodeResolver, IDisposable IReadOnlyKeyValueStore TrieNodeRlpStore { get; } // Used by healing - void Set(in ValueHash256 hash, byte[] rlp); + void Set(Hash256? address, in TreePath path, in ValueHash256 keccak, byte[] rlp); + bool HasRoot(Hash256 stateRoot); + + IScopedTrieStore GetTrieStore(Hash256? address); + + TrieNode FindCachedOrUnknown(Hash256? address, in TreePath path, Hash256 hash); + byte[]? LoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None); + byte[]? TryLoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None); + INodeStorage.KeyScheme Scheme { get; } } public interface IPruningTrieStore diff --git a/src/Nethermind/Nethermind.Trie/Pruning/ITrieStoreExtensions.cs b/src/Nethermind/Nethermind.Trie/Pruning/ITrieStoreExtensions.cs new file mode 100644 index 00000000000..7c9626b32b8 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/Pruning/ITrieStoreExtensions.cs @@ -0,0 +1,14 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; + +namespace Nethermind.Trie.Pruning +{ + // ReSharper disable once InconsistentNaming + public static class ITrieStoreExtensions + { + public static IReadOnlyTrieStore AsReadOnly(this ITrieStore trieStore, INodeStorage? readOnlyStore = null) => + trieStore.AsReadOnly(readOnlyStore); + } +} diff --git a/src/Nethermind/Nethermind.Trie/Pruning/IntervalSnapshotting.cs b/src/Nethermind/Nethermind.Trie/Pruning/IntervalSnapshotting.cs index cff18422c7b..a1440f92b50 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/IntervalSnapshotting.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/IntervalSnapshotting.cs @@ -16,5 +16,7 @@ public bool ShouldPersist(long blockNumber) { return blockNumber % _snapshotInterval == 0; } + + public bool IsFullPruning => false; } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/MemoryLimit.cs b/src/Nethermind/Nethermind.Trie/Pruning/MemoryLimit.cs index 0fbd8949d25..da2e9714c1e 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/MemoryLimit.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/MemoryLimit.cs @@ -21,5 +21,7 @@ public bool ShouldPrune(in long currentMemory) { return PruningEnabled && currentMemory >= _memoryLimit; } + + public int TrackedPastKeyCount => 0; } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/NoPersistence.cs b/src/Nethermind/Nethermind.Trie/Pruning/NoPersistence.cs index 41f788f3996..4d6d560cec4 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/NoPersistence.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/NoPersistence.cs @@ -13,5 +13,7 @@ public bool ShouldPersist(long blockNumber) { return false; } + + public bool IsFullPruning => false; } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/NoPruning.cs b/src/Nethermind/Nethermind.Trie/Pruning/NoPruning.cs index 50303ea515c..a1418e7c887 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/NoPruning.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/NoPruning.cs @@ -15,5 +15,7 @@ public bool ShouldPrune(in long currentMemory) { return false; } + + public int TrackedPastKeyCount => 0; } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/NullTrieNodeResolver.cs b/src/Nethermind/Nethermind.Trie/Pruning/NullTrieNodeResolver.cs index 5856ac64bb4..004fb8b3c8c 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/NullTrieNodeResolver.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/NullTrieNodeResolver.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using Nethermind.Core; using Nethermind.Core.Crypto; @@ -12,8 +13,14 @@ private NullTrieNodeResolver() { } public static readonly NullTrieNodeResolver Instance = new(); - public TrieNode FindCachedOrUnknown(Hash256 hash) => new(NodeType.Unknown, hash); - public byte[]? LoadRlp(Hash256 hash, ReadFlags flags = ReadFlags.None) => null; - public byte[]? TryLoadRlp(Hash256 hash, ReadFlags flags = ReadFlags.None) => null; + public TrieNode FindCachedOrUnknown(in TreePath path, Hash256 hash) => new(NodeType.Unknown, hash); + public byte[]? LoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => null; + public byte[]? TryLoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => null; + public ITrieNodeResolver GetStorageTrieNodeResolver(Hash256 storage) + { + return this; + } + + public INodeStorage.KeyScheme Scheme => INodeStorage.KeyScheme.HalfPath; } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/NullTrieStore.cs b/src/Nethermind/Nethermind.Trie/Pruning/NullTrieStore.cs index a4ae7173723..4982d7166b8 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/NullTrieStore.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/NullTrieStore.cs @@ -9,7 +9,7 @@ namespace Nethermind.Trie.Pruning { - public class NullTrieStore : IReadOnlyTrieStore + public class NullTrieStore : IScopedTrieStore { private NullTrieStore() { } @@ -19,33 +19,23 @@ public void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFla public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? root, WriteFlags flags = WriteFlags.None) { } - public IReadOnlyTrieStore AsReadOnly(IKeyValueStore? keyValueStore = null) => this; + public TrieNode FindCachedOrUnknown(in TreePath treePath, Hash256 hash) => new(NodeType.Unknown, hash); - public event EventHandler ReorgBoundaryReached - { - add { } - remove { } - } - - public IReadOnlyKeyValueStore TrieNodeRlpStore => null!; - - public TrieNode FindCachedOrUnknown(Hash256 hash) => new(NodeType.Unknown, hash); + public byte[] LoadRlp(in TreePath treePath, Hash256 hash, ReadFlags flags = ReadFlags.None) => Array.Empty(); - public byte[] TryLoadRlp(Hash256 hash, ReadFlags flags = ReadFlags.None) => null; + public byte[]? TryLoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => Array.Empty(); - public byte[] LoadRlp(Hash256 hash, ReadFlags flags = ReadFlags.None) => Array.Empty(); + public bool IsPersisted(in TreePath path, in ValueHash256 keccak) => true; - public bool IsPersisted(in ValueHash256 keccak) => true; - - public void Dispose() { } - - public void Set(in ValueHash256 hash, byte[] rlp) + public void Set(in TreePath path, in ValueHash256 keccak, byte[] rlp) { } - public bool HasRoot(Hash256 stateRoot) + public ITrieNodeResolver GetStorageTrieNodeResolver(Hash256 storageRoot) { - return stateRoot == Keccak.EmptyTreeHash; + return this; } + + public INodeStorage.KeyScheme Scheme => INodeStorage.KeyScheme.HalfPath; } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/Prune.cs b/src/Nethermind/Nethermind.Trie/Pruning/Prune.cs index 19c26b41490..7ba5acfba9b 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/Prune.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/Prune.cs @@ -7,5 +7,10 @@ public static class Prune { public static IPruningStrategy WhenCacheReaches(long sizeInBytes) => new MemoryLimit(sizeInBytes); + + public static IPruningStrategy TrackingPastKeys(this IPruningStrategy baseStrategy, int trackedPastKeyCount) + => trackedPastKeyCount <= 0 + ? baseStrategy + : new TrackedPastKeyCountStrategy(baseStrategy, trackedPastKeyCount); } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/ReadOnlyTrieStore.cs b/src/Nethermind/Nethermind.Trie/Pruning/ReadOnlyTrieStore.cs index 3bc73baa2d4..583471fc6a4 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/ReadOnlyTrieStore.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/ReadOnlyTrieStore.cs @@ -15,32 +15,33 @@ namespace Nethermind.Trie.Pruning public class ReadOnlyTrieStore : IReadOnlyTrieStore { private readonly TrieStore _trieStore; - private readonly IKeyValueStore? _readOnlyStore; - private readonly IReadOnlyKeyValueStore _publicStore; + private readonly INodeStorage? _readOnlyStore; + public INodeStorage.KeyScheme Scheme => _trieStore.Scheme; - public ReadOnlyTrieStore(TrieStore trieStore, IKeyValueStore? readOnlyStore) + public ReadOnlyTrieStore(TrieStore trieStore, INodeStorage? readOnlyStore) { _trieStore = trieStore ?? throw new ArgumentNullException(nameof(trieStore)); _readOnlyStore = readOnlyStore; - _publicStore = _trieStore.TrieNodeRlpStore; } - public TrieNode FindCachedOrUnknown(Hash256 hash) => - _trieStore.FindCachedOrUnknown(hash, true); + public TrieNode FindCachedOrUnknown(Hash256? address, in TreePath treePath, Hash256 hash) => + _trieStore.FindCachedOrUnknown(address, treePath, hash, true); - public byte[]? TryLoadRlp(Hash256 hash, ReadFlags flags) => _trieStore.TryLoadRlp(hash, _readOnlyStore, flags); - public byte[] LoadRlp(Hash256 hash, ReadFlags flags) => _trieStore.LoadRlp(hash, _readOnlyStore, flags); + public byte[] LoadRlp(Hash256? address, in TreePath treePath, Hash256 hash, ReadFlags flags) => + _trieStore.LoadRlp(address, treePath, hash, _readOnlyStore, flags); + public byte[]? TryLoadRlp(Hash256? address, in TreePath treePath, Hash256 hash, ReadFlags flags) => + _trieStore.TryLoadRlp(address, treePath, hash, _readOnlyStore, flags); - public bool IsPersisted(in ValueHash256 keccak) => _trieStore.IsPersisted(keccak); + public bool IsPersisted(Hash256? address, in TreePath path, in ValueHash256 keccak) => _trieStore.IsPersisted(address, path, keccak); - public IReadOnlyTrieStore AsReadOnly(IKeyValueStore keyValueStore) + public IReadOnlyTrieStore AsReadOnly(INodeStorage nodeStore) { - return new ReadOnlyTrieStore(_trieStore, keyValueStore); + return new ReadOnlyTrieStore(_trieStore, nodeStore); } - public void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFlags flags = WriteFlags.None) { } + public void CommitNode(long blockNumber, Hash256? address, NodeCommitInfo nodeCommitInfo, WriteFlags flags = WriteFlags.None) { } - public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? root, WriteFlags flags = WriteFlags.None) { } + public void FinishBlockCommit(TrieType trieType, long blockNumber, Hash256? address, TrieNode? root, WriteFlags flags = WriteFlags.None) { } public event EventHandler ReorgBoundaryReached { @@ -48,17 +49,80 @@ public event EventHandler ReorgBoundaryReached remove { } } - public IReadOnlyKeyValueStore TrieNodeRlpStore => _publicStore; + public IReadOnlyKeyValueStore TrieNodeRlpStore => _trieStore.TrieNodeRlpStore; - public void Set(in ValueHash256 hash, byte[] rlp) + public void Set(Hash256? address, in TreePath path, in ValueHash256 keccak, byte[] rlp) { } + public IScopedTrieStore GetTrieStore(Hash256? address) + { + return new ScopedReadOnlyTrieStore(this, address); + } + + + public void PersistCache(CancellationToken cancellationToken) + { + _trieStore.PersistCache(cancellationToken); + } + public bool HasRoot(Hash256 stateRoot) { return _trieStore.HasRoot(stateRoot); } public void Dispose() { } + + private class ScopedReadOnlyTrieStore : IScopedTrieStore + { + private readonly ReadOnlyTrieStore _trieStoreImplementation; + private readonly Hash256? _address; + + public ScopedReadOnlyTrieStore(ReadOnlyTrieStore fullTrieStore, Hash256? address) + { + _trieStoreImplementation = fullTrieStore; + _address = address; + } + + public TrieNode FindCachedOrUnknown(in TreePath path, Hash256 hash) + { + return _trieStoreImplementation.FindCachedOrUnknown(_address, path, hash); + } + + public byte[]? LoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) + { + return _trieStoreImplementation.LoadRlp(_address, path, hash, flags); + } + + public byte[]? TryLoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) + { + return _trieStoreImplementation.TryLoadRlp(_address, path, hash, flags); + } + + public ITrieNodeResolver GetStorageTrieNodeResolver(Hash256? address) + { + if (address == _address) return this; + return new ScopedReadOnlyTrieStore(_trieStoreImplementation, address); + } + + public INodeStorage.KeyScheme Scheme => _trieStoreImplementation.Scheme; + + public void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None) + { + } + + public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? root, WriteFlags writeFlags = WriteFlags.None) + { + } + + public bool IsPersisted(in TreePath path, in ValueHash256 keccak) + { + return _trieStoreImplementation.IsPersisted(_address, path, in keccak); + } + + public void Set(in TreePath path, in ValueHash256 keccak, byte[] rlp) + { + } + } } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/ScopedTrieStore.cs b/src/Nethermind/Nethermind.Trie/Pruning/ScopedTrieStore.cs new file mode 100644 index 00000000000..877fbfda40a --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/Pruning/ScopedTrieStore.cs @@ -0,0 +1,62 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Crypto; + +namespace Nethermind.Trie.Pruning; + +public class ScopedTrieStore : IScopedTrieStore +{ + private ITrieStore _trieStoreImplementation; + private readonly Hash256? _address; + + public ScopedTrieStore(ITrieStore fullTrieStore, Hash256? address) + { + _trieStoreImplementation = fullTrieStore; + _address = address; + } + + public TrieNode FindCachedOrUnknown(in TreePath path, Hash256 hash) + { + return _trieStoreImplementation.FindCachedOrUnknown(_address, path, hash); + } + + public byte[]? LoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) + { + return _trieStoreImplementation.LoadRlp(_address, path, hash, flags); + } + + public byte[]? TryLoadRlp(in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) + { + return _trieStoreImplementation.TryLoadRlp(_address, path, hash, flags); + } + + public ITrieNodeResolver GetStorageTrieNodeResolver(Hash256? address) + { + if (address == _address) return this; + return new ScopedTrieStore(_trieStoreImplementation, address); + } + + public INodeStorage.KeyScheme Scheme => _trieStoreImplementation.Scheme; + + public void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None) + { + _trieStoreImplementation.CommitNode(blockNumber, _address, nodeCommitInfo, writeFlags); + } + + public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? root, WriteFlags writeFlags = WriteFlags.None) + { + _trieStoreImplementation.FinishBlockCommit(trieType, blockNumber, _address, root, writeFlags); + } + + public bool IsPersisted(in TreePath path, in ValueHash256 keccak) + { + return _trieStoreImplementation.IsPersisted(_address, path, in keccak); + } + + public void Set(in TreePath path, in ValueHash256 keccak, byte[] rlp) + { + _trieStoreImplementation.Set(_address, path, keccak, rlp); + } +} diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs b/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs new file mode 100644 index 00000000000..b0aa85ff870 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs @@ -0,0 +1,43 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Nethermind.Core.Crypto; + +namespace Nethermind.Trie; + +/// +/// Like TreePath, but tiny. Fit in 8 byte, like a long. Can only represent 14 nibble. +/// +public struct TinyTreePath +{ + public const int MaxNibbleLength = 14; + + long _data; + + // Eh.. readonly? + private Span AsSpan => MemoryMarshal.AsBytes(MemoryMarshal.CreateSpan(ref _data, 1)); + + public TinyTreePath(in TreePath path) + { + if (path.Length > MaxNibbleLength) throw new InvalidOperationException("Unable to represent more than 14 nibble"); + Span pathSpan = path.Path.BytesAsSpan; + Span selfSpan = AsSpan; + pathSpan[..7].CopyTo(selfSpan); + selfSpan[7] = (byte)path.Length; + } + + public int Length => AsSpan[7]; + + public TreePath ToTreePath() + { + ValueHash256 rawPath = Keccak.Zero; + Span pathSpan = rawPath.BytesAsSpan; + Span selfSpan = AsSpan; + selfSpan[..7].CopyTo(pathSpan); + + return new TreePath(rawPath, selfSpan[7]); + } +} diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TrackedPastKeyCountStrategy.cs b/src/Nethermind/Nethermind.Trie/Pruning/TrackedPastKeyCountStrategy.cs new file mode 100644 index 00000000000..2f21eef4666 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/Pruning/TrackedPastKeyCountStrategy.cs @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Trie.Pruning; + +public class TrackedPastKeyCountStrategy : IPruningStrategy +{ + private IPruningStrategy _baseStrategy; + private readonly int _trackedPastKeyCount; + public bool PruningEnabled => _baseStrategy.PruningEnabled; + + public TrackedPastKeyCountStrategy(IPruningStrategy baseStrategy, int trackedPastKeyCount) + { + _baseStrategy = baseStrategy; + _trackedPastKeyCount = trackedPastKeyCount; + } + + public bool ShouldPrune(in long currentMemory) + { + return _baseStrategy.ShouldPrune(in currentMemory); + } + + public int TrackedPastKeyCount => _trackedPastKeyCount; +} diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TreePath.cs b/src/Nethermind/Nethermind.Trie/Pruning/TreePath.cs index c374c319ac2..dd0ea9fc0fa 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/TreePath.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/TreePath.cs @@ -2,16 +2,16 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Diagnostics.CodeAnalysis; using System.Diagnostics; -using System.Linq; +using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Linq; using System.Runtime.Intrinsics; using Nethermind.Core.Attributes; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; -using System.Runtime.InteropServices; namespace Nethermind.Trie; @@ -94,7 +94,7 @@ public readonly TreePath Append(ReadOnlySpan nibbles) return copy; } - public readonly TreePath Append(byte nib) + public readonly TreePath Append(int nib) { TreePath copy = this; copy.AppendMut(nib); @@ -141,6 +141,12 @@ internal void AppendMut(int nib) Length++; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetLast(int nib) + { + this[Length - 1] = nib; + } + public readonly int this[int index] { [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs b/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs index acff3b6ac6d..dfcc38a20a4 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs @@ -5,9 +5,11 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Threading; using System.Threading.Tasks; using Nethermind.Core; +using Nethermind.Core.Caching; using Nethermind.Core.Collections; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -21,93 +23,160 @@ namespace Nethermind.Trie.Pruning /// public class TrieStore : ITrieStore, IPruningTrieStore { - private class DirtyNodesCache + internal class DirtyNodesCache { private readonly TrieStore _trieStore; + private readonly bool _storeByHash; + public readonly long KeyMemoryUsage; public DirtyNodesCache(TrieStore trieStore) { _trieStore = trieStore; + // If the nodestore indicated that path is not required, + // we will use a map with hash as its key instead of the full Key to reduce memory usage. + _storeByHash = !trieStore._nodeStorage.RequirePath; + KeyMemoryUsage = _storeByHash ? 0 : Key.MemoryUsage; // 0 because previously it was not counted. } - public void SaveInCache(TrieNode node) + public void SaveInCache(in Key key, TrieNode node) { Debug.Assert(node.Keccak is not null, "Cannot store in cache nodes without resolved key."); - if (_objectsCache.TryAdd(node.Keccak!, node)) + if (TryAdd(key, node)) { Metrics.CachedNodesCount = Interlocked.Increment(ref _count); - _trieStore.MemoryUsedByDirtyCache += node.GetMemorySize(false); + _trieStore.MemoryUsedByDirtyCache += node.GetMemorySize(false) + KeyMemoryUsage; } } - public TrieNode FindCachedOrUnknown(Hash256 hash) + public TrieNode FindCachedOrUnknown(in Key key) { - if (_objectsCache.TryGetValue(hash, out TrieNode trieNode)) + if (TryGetValue(key, out TrieNode trieNode)) { Metrics.LoadedFromCacheNodesCount++; } else { + trieNode = new TrieNode(NodeType.Unknown, key.Keccak); if (_trieStore._logger.IsTrace) _trieStore._logger.Trace($"Creating new node {trieNode}"); - trieNode = new TrieNode(NodeType.Unknown, hash); - SaveInCache(trieNode); + SaveInCache(key, trieNode); } return trieNode; } - public TrieNode FromCachedRlpOrUnknown(Hash256 hash) + public TrieNode FromCachedRlpOrUnknown(in Key key) { // ReSharper disable once ConditionIsAlwaysTrueOrFalse - if (_objectsCache.TryGetValue(hash, out TrieNode? trieNode)) + if (TryGetValue(key, out TrieNode trieNode)) { if (trieNode!.FullRlp.IsNull) { // // this happens in SyncProgressResolver // throw new InvalidAsynchronousStateException("Read only trie store is trying to read a transient node."); - return new TrieNode(NodeType.Unknown, hash); + return new TrieNode(NodeType.Unknown, key.Keccak); } // we returning a copy to avoid multithreaded access - trieNode = new TrieNode(NodeType.Unknown, hash, trieNode.FullRlp); - trieNode.ResolveNode(_trieStore); - trieNode.Keccak = hash; + trieNode = new TrieNode(NodeType.Unknown, key.Keccak, trieNode.FullRlp); + trieNode.ResolveNode(_trieStore.GetTrieStore(key.Address), key.Path); + trieNode.Keccak = key.Keccak; Metrics.LoadedFromCacheNodesCount++; } else { - trieNode = new TrieNode(NodeType.Unknown, hash); + trieNode = new TrieNode(NodeType.Unknown, key.Keccak); } if (_trieStore._logger.IsTrace) _trieStore._logger.Trace($"Creating new node {trieNode}"); return trieNode; } - public bool IsNodeCached(Hash256 hash) => _objectsCache.ContainsKey(hash); + private readonly ConcurrentDictionary _byKeyObjectCache = new(); + private readonly ConcurrentDictionary _byHashObjectCache = new(); - public ConcurrentDictionary AllNodes => _objectsCache; + public bool IsNodeCached(in Key key) + { + if (_storeByHash) return _byHashObjectCache.ContainsKey(key.Keccak); + return _byKeyObjectCache.ContainsKey(key); + } - private readonly ConcurrentDictionary _objectsCache = new(); + public IEnumerable> AllNodes + { + get + { + if (_storeByHash) + { + return _byHashObjectCache.Select( + pair => new KeyValuePair(new Key(null, TreePath.Empty, pair.Key.Value), pair.Value)); + } - private int _count = 0; + return _byKeyObjectCache; + } + } - public int Count => _count; + public bool TryGetValue(in Key key, out TrieNode node) + { + if (_storeByHash) + { + return _byHashObjectCache.TryGetValue(key.Keccak, out node); + } + return _byKeyObjectCache.TryGetValue(key, out node); + } - public void Remove(Hash256 hash) + public bool TryAdd(in Key key, TrieNode node) { - if (_objectsCache.Remove(hash, out _)) + if (_storeByHash) + { + return _byHashObjectCache.TryAdd(key.Keccak, node); + } + return _byKeyObjectCache.TryAdd(key, node); + } + + public void Remove(in Key key) + { + if (_storeByHash) + { + if (_byHashObjectCache.Remove(key.Keccak, out _)) + { + Metrics.CachedNodesCount = Interlocked.Decrement(ref _count); + } + + return; + } + if (_byKeyObjectCache.Remove(key, out _)) { Metrics.CachedNodesCount = Interlocked.Decrement(ref _count); } } + public MapLock AcquireMapLock() + { + if (_storeByHash) + { + return new MapLock() + { + _storeByHash = _storeByHash, + _byHashLock = _byHashObjectCache.AcquireLock() + }; + } + return new MapLock() + { + _storeByHash = _storeByHash, + _byKeyLock = _byKeyObjectCache.AcquireLock() + }; + } + + private int _count = 0; + + public int Count => _count; + public void Dump() { if (_trieStore._logger.IsTrace) { _trieStore._logger.Trace($"Trie node dirty cache ({Count})"); - foreach (KeyValuePair keyValuePair in _objectsCache) + foreach (KeyValuePair keyValuePair in AllNodes) { _trieStore._logger.Trace($" {keyValuePair.Value}"); } @@ -116,40 +185,130 @@ public void Dump() public void Clear() { - _objectsCache.Clear(); + _byHashObjectCache.Clear(); + _byKeyObjectCache.Clear(); Interlocked.Exchange(ref _count, 0); Metrics.CachedNodesCount = 0; _trieStore.MemoryUsedByDirtyCache = 0; } + + internal readonly struct Key : IEquatable + { + internal const long MemoryUsage = 8 + 36 + 8; // (address (probably shared), path, keccak pointer (shared with TrieNode)) + public Hash256? Address { get; } + public TreePath Path { get; } + public Hash256 Keccak { get; } + + public Key(Hash256? address, in TreePath path, Hash256 keccak) + { + Address = address; + Path = path; + Keccak = keccak; + } + + public override int GetHashCode() + { + return Keccak.GetHashCode(); + } + + public bool Equals(Key other) + { + return other.Keccak == Keccak && other.Path == Path && other.Address == Address; + } + + public override bool Equals(object? obj) + { + return obj is Key other && Equals(other); + } + } + + internal ref struct MapLock + { + public bool _storeByHash; + public ConcurrentDictionaryLock.Lock _byHashLock; + public ConcurrentDictionaryLock.Lock _byKeyLock; + + public readonly void Dispose() + { + if (_storeByHash) + { + _byHashLock.Dispose(); + } + else + { + _byKeyLock.Dispose(); + } + } + } } private int _isFirst; - private IWriteBatch? _currentBatch = null; + private INodeStorage.WriteBatch? _currentBatch = null; private readonly DirtyNodesCache _dirtyNodes; + // Track some of the persisted path hash. Used to be able to remove keys when it is replaced. + // If null, disable removing key. + private LruCache<(Hash256?, TinyTreePath), ValueHash256>? _pastPathHash; + + // Track ALL of the recently re-committed persisted nodes. This is so that we don't accidentally remove + // recommitted persisted nodes (which will not get re-persisted). + private ConcurrentDictionary<(Hash256?, TinyTreePath, ValueHash256), long> _persistedLastSeens = new(); + private bool _lastPersistedReachedReorgBoundary; private Task _pruningTask = Task.CompletedTask; private readonly CancellationTokenSource _pruningTaskCancellationTokenSource = new(); + private long _reorgDepth = Reorganization.MaxDepth; + public TrieStore(IKeyValueStoreWithBatching? keyValueStore, ILogManager? logManager) : this(keyValueStore, No.Pruning, Pruning.Persist.EveryBlock, logManager) { } + public TrieStore(INodeStorage nodeStorage, ILogManager? logManager) + : this(nodeStorage, No.Pruning, Pruning.Persist.EveryBlock, logManager) + { + } + public TrieStore( IKeyValueStoreWithBatching? keyValueStore, IPruningStrategy? pruningStrategy, IPersistenceStrategy? persistenceStrategy, - ILogManager? logManager) + ILogManager? logManager) : this(new NodeStorage(keyValueStore), pruningStrategy, persistenceStrategy, logManager) + { + } + + public TrieStore( + INodeStorage? nodeStorage, + IPruningStrategy? pruningStrategy, + IPersistenceStrategy? persistenceStrategy, + ILogManager? logManager, + long? reorgDepthOverride = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - _keyValueStore = keyValueStore ?? throw new ArgumentNullException(nameof(keyValueStore)); + _nodeStorage = nodeStorage ?? throw new ArgumentNullException(nameof(nodeStorage)); _pruningStrategy = pruningStrategy ?? throw new ArgumentNullException(nameof(pruningStrategy)); _persistenceStrategy = persistenceStrategy ?? throw new ArgumentNullException(nameof(persistenceStrategy)); _dirtyNodes = new DirtyNodesCache(this); _publicStore = new TrieKeyValueStore(this); + + if (reorgDepthOverride != null) _reorgDepth = reorgDepthOverride.Value; + + if (pruningStrategy.TrackedPastKeyCount > 0 && nodeStorage.RequirePath) + { + _pastPathHash = new(pruningStrategy.TrackedPastKeyCount, ""); + } + else + { + _pastPathHash = null; + } + } + + public IScopedTrieStore GetTrieStore(Hash256? address) + { + return new ScopedTrieStore(this, address); } public long LastPersistedBlockNumber @@ -205,7 +364,7 @@ public int CachedNodesCount } } - public void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None) + public void CommitNode(long blockNumber, Hash256? address, NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None) { ArgumentOutOfRangeException.ThrowIfNegative(blockNumber); EnsureCommitSetExistsForBlock(blockNumber); @@ -230,29 +389,31 @@ public void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFla throw new TrieStoreException($"{nameof(TrieNode.LastSeen)} set on {node} committed at {blockNumber}."); } - node = SaveOrReplaceInDirtyNodesCache(nodeCommitInfo, node); + node = SaveOrReplaceInDirtyNodesCache(address, nodeCommitInfo, node); node.LastSeen = Math.Max(blockNumber, node.LastSeen ?? 0); if (!_pruningStrategy.PruningEnabled) { - PersistNode(node, blockNumber, writeFlags); + PersistNode(address, nodeCommitInfo.Path, node, blockNumber, writeFlags); } CommittedNodesCount++; } } - private TrieNode SaveOrReplaceInDirtyNodesCache(NodeCommitInfo nodeCommitInfo, TrieNode node) + private TrieNode SaveOrReplaceInDirtyNodesCache(Hash256? address, NodeCommitInfo nodeCommitInfo, TrieNode node) { if (_pruningStrategy.PruningEnabled) { - if (IsNodeCached(node.Keccak)) + DirtyNodesCache.Key key = new DirtyNodesCache.Key(address, nodeCommitInfo.Path, node.Keccak); + if (IsNodeCached(key)) { - TrieNode cachedNodeCopy = FindCachedOrUnknown(node.Keccak); + TrieNode cachedNodeCopy = FindCachedOrUnknown(key, false); if (!ReferenceEquals(cachedNodeCopy, node)) { if (_logger.IsTrace) _logger.Trace($"Replacing {node} with its cached copy {cachedNodeCopy}."); - cachedNodeCopy.ResolveKey(this, nodeCommitInfo.IsRoot); + TreePath path = nodeCommitInfo.Path; + cachedNodeCopy.ResolveKey(GetTrieStore(address), ref path, nodeCommitInfo.IsRoot); if (node.Keccak != cachedNodeCopy.Keccak) { throw new InvalidOperationException($"The hash of replacement node {cachedNodeCopy} is not the same as the original {node}."); @@ -269,14 +430,14 @@ private TrieNode SaveOrReplaceInDirtyNodesCache(NodeCommitInfo nodeCommitInfo, T } else { - _dirtyNodes.SaveInCache(node); + _dirtyNodes.SaveInCache(key, node); } } return node; } - public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? root, WriteFlags writeFlags = WriteFlags.None) + public void FinishBlockCommit(TrieType trieType, long blockNumber, Hash256? address, TrieNode? root, WriteFlags writeFlags = WriteFlags.None) { ArgumentOutOfRangeException.ThrowIfNegative(blockNumber); EnsureCommitSetExistsForBlock(blockNumber); @@ -296,10 +457,10 @@ public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? roo bool shouldPersistSnapshot = _persistenceStrategy.ShouldPersist(set.BlockNumber); if (shouldPersistSnapshot) { - _currentBatch ??= _keyValueStore.StartWriteBatch(); + _currentBatch ??= _nodeStorage.StartWriteBatch(); try { - PersistBlockCommitSet(set, _currentBatch, writeFlags); + PersistBlockCommitSet(address, set, _currentBatch, writeFlags: writeFlags); PruneCurrentSet(); } finally @@ -333,10 +494,10 @@ public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? roo public event EventHandler? ReorgBoundaryReached; - public byte[]? TryLoadRlp(Hash256 keccak, IKeyValueStore? keyValueStore, ReadFlags readFlags = ReadFlags.None) + public byte[]? TryLoadRlp(Hash256? address, in TreePath path, Hash256 keccak, INodeStorage? nodeStorage, ReadFlags readFlags = ReadFlags.None) { - keyValueStore ??= _keyValueStore; - byte[]? rlp = keyValueStore.Get(keccak.Bytes, readFlags); + nodeStorage ??= _nodeStorage; + byte[]? rlp = nodeStorage.Get(address, path, keccak, readFlags); if (rlp is not null) { @@ -346,9 +507,10 @@ public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? roo return rlp; } - public byte[] LoadRlp(Hash256 keccak, IKeyValueStore? keyValueStore, ReadFlags readFlags = ReadFlags.None) + + public byte[] LoadRlp(Hash256? address, in TreePath path, Hash256 keccak, INodeStorage? nodeStorage, ReadFlags readFlags = ReadFlags.None) { - byte[]? rlp = TryLoadRlp(keccak, keyValueStore, readFlags); + byte[]? rlp = TryLoadRlp(address, path, keccak, nodeStorage, readFlags); if (rlp is null) { throw new TrieNodeException($"Node {keccak} is missing from the DB", keccak); @@ -357,12 +519,12 @@ public byte[] LoadRlp(Hash256 keccak, IKeyValueStore? keyValueStore, ReadFlags r return rlp; } - public virtual byte[] LoadRlp(Hash256 keccak, ReadFlags readFlags = ReadFlags.None) => LoadRlp(keccak, null, readFlags); - public virtual byte[]? TryLoadRlp(Hash256 keccak, ReadFlags readFlags = ReadFlags.None) => TryLoadRlp(keccak, null, readFlags); + public virtual byte[]? LoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => LoadRlp(address, path, hash, null, flags); + public byte[]? TryLoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => TryLoadRlp(address, path, hash, null, flags); - public bool IsPersisted(in ValueHash256 keccak) + public bool IsPersisted(Hash256? address, in TreePath path, in ValueHash256 keccak) { - byte[]? rlp = _keyValueStore[keccak.Bytes]; + byte[]? rlp = _nodeStorage.Get(address, path, keccak, ReadFlags.None); if (rlp is null) { @@ -374,15 +536,20 @@ public bool IsPersisted(in ValueHash256 keccak) return true; } - public IReadOnlyTrieStore AsReadOnly(IKeyValueStore? keyValueStore = null) => - new ReadOnlyTrieStore(this, keyValueStore); + public IReadOnlyTrieStore AsReadOnly(INodeStorage? store) + { + return new ReadOnlyTrieStore(this, store); + } - public bool IsNodeCached(Hash256 hash) => _dirtyNodes.IsNodeCached(hash); + public bool IsNodeCached(Hash256? address, in TreePath path, Hash256? hash) => _dirtyNodes.IsNodeCached(new DirtyNodesCache.Key(address, path, hash)); + private bool IsNodeCached(DirtyNodesCache.Key key) => _dirtyNodes.IsNodeCached(key); - public TrieNode FindCachedOrUnknown(Hash256? hash) => - FindCachedOrUnknown(hash, false); + public TrieNode FindCachedOrUnknown(Hash256? address, in TreePath path, Hash256? hash) + { + return FindCachedOrUnknown(address, path, hash, false); + } - internal TrieNode FindCachedOrUnknown(Hash256? hash, bool isReadOnly) + internal TrieNode FindCachedOrUnknown(Hash256? address, in TreePath path, Hash256? hash, bool isReadOnly) { ArgumentNullException.ThrowIfNull(hash); @@ -391,7 +558,13 @@ internal TrieNode FindCachedOrUnknown(Hash256? hash, bool isReadOnly) return new TrieNode(NodeType.Unknown, hash); } - return isReadOnly ? _dirtyNodes.FromCachedRlpOrUnknown(hash) : _dirtyNodes.FindCachedOrUnknown(hash); + DirtyNodesCache.Key key = new DirtyNodesCache.Key(address, path, hash); + return FindCachedOrUnknown(key, isReadOnly); + } + + private TrieNode FindCachedOrUnknown(DirtyNodesCache.Key key, bool isReadOnly) + { + return isReadOnly ? _dirtyNodes.FromCachedRlpOrUnknown(key) : _dirtyNodes.FindCachedOrUnknown(key); } public void Dump() => _dirtyNodes.Dump(); @@ -406,7 +579,7 @@ public void Prune() { lock (_dirtyNodes) { - using (_dirtyNodes.AllNodes.AcquireLock()) + using (_dirtyNodes.AcquireMapLock()) { if (_logger.IsDebug) _logger.Debug($"Locked {nameof(TrieStore)} for pruning."); @@ -442,7 +615,7 @@ private bool CanPruneCacheFurther() using ArrayPoolList candidateSets = new(_commitSetQueue.Count); while (_commitSetQueue.TryDequeue(out BlockCommitSet frontSet)) { - if (frontSet!.BlockNumber >= LatestCommittedBlockNumber - Reorganization.MaxDepth) + if (frontSet!.BlockNumber >= LatestCommittedBlockNumber - _reorgDepth) { toAddBack.Add(frontSet); } @@ -463,12 +636,35 @@ private bool CanPruneCacheFurther() _commitSetQueue.Enqueue(toAddBack[index]); } - IWriteBatch writeBatch = _keyValueStore.StartWriteBatch(); + bool shouldDeletePersistedNode = + // Its disabled + _pastPathHash != null && + // Full pruning need to visit all node, so can't delete anything. + !_persistenceStrategy.IsFullPruning && + // If more than one candidate set, its a reorg, we can't remove node as persisted node may not be canonical + candidateSets.Count == 1; + + Dictionary<(Hash256?, TinyTreePath), Hash256?>? persistedHashes = + shouldDeletePersistedNode + ? new Dictionary<(Hash256?, TinyTreePath), Hash256?>() + : null; + + INodeStorage.WriteBatch writeBatch = _nodeStorage.StartWriteBatch(); for (int index = 0; index < candidateSets.Count; index++) { BlockCommitSet blockCommitSet = candidateSets[index]; if (_logger.IsDebug) _logger.Debug($"Elevated pruning for candidate {blockCommitSet.BlockNumber}"); - PersistBlockCommitSet(blockCommitSet, writeBatch); + PersistBlockCommitSet(null, blockCommitSet, writeBatch, persistedHashes: persistedHashes); + } + + RemovePastKeys(persistedHashes); + + foreach (KeyValuePair<(Hash256, TinyTreePath, ValueHash256), long> keyValuePair in _persistedLastSeens) + { + if (IsNoLongerNeeded(keyValuePair.Value)) + { + _persistedLastSeens.Remove(keyValuePair.Key, out _); + } } writeBatch.Dispose(); @@ -478,12 +674,51 @@ private bool CanPruneCacheFurther() } _commitSetQueue.TryPeek(out BlockCommitSet? uselessFrontSet); - if (_logger.IsDebug) _logger.Debug($"Found no candidate for elevated pruning (sets: {_commitSetQueue.Count}, earliest: {uselessFrontSet?.BlockNumber}, newest kept: {LatestCommittedBlockNumber}, reorg depth {Reorganization.MaxDepth})"); + if (_logger.IsDebug) _logger.Debug($"Found no candidate for elevated pruning (sets: {_commitSetQueue.Count}, earliest: {uselessFrontSet?.BlockNumber}, newest kept: {LatestCommittedBlockNumber}, reorg depth {_reorgDepth})"); } return false; } + private void RemovePastKeys(Dictionary<(Hash256, TinyTreePath), Hash256?>? persistedHashes) + { + if (persistedHashes == null) return; + + bool CanRemove(Hash256? address, TinyTreePath path, TreePath fullPath, ValueHash256 keccak, Hash256? currentlyPersistingKeccak) + { + // Multiple current hash that we don't keep track for simplicity. Just ignore this case. + if (currentlyPersistingKeccak == null) return false; + + // The persisted hash is the same as currently persisting hash. Do nothing. + if (currentlyPersistingKeccak == keccak) return false; + + // We have is in cache and it is still needed. + if (_dirtyNodes.TryGetValue(new DirtyNodesCache.Key(address, fullPath, keccak.ToCommitment()), out TrieNode node) && + !IsNoLongerNeeded(node)) return false; + + // We don't have it in cache, but we know it was re-committed, so if it is still needed, don't remove + if (_persistedLastSeens.TryGetValue((address, path, keccak), out long commitBlock) && + !IsNoLongerNeeded(commitBlock)) return false; + + return true; + } + + using INodeStorage.WriteBatch deleteNodeBatch = _nodeStorage.StartWriteBatch(); + foreach (KeyValuePair<(Hash256?, TinyTreePath), Hash256> keyValuePair in persistedHashes) + { + (Hash256? addr, TinyTreePath path) key = keyValuePair.Key; + if (key.path.Length > TinyTreePath.MaxNibbleLength) continue; + if (_pastPathHash.TryGet((key.addr, key.path), out ValueHash256 prevHash)) + { + TreePath fullPath = key.path.ToTreePath(); // Micro op to reduce double convert + if (CanRemove(key.addr, key.path, fullPath, prevHash, keyValuePair.Value)) + { + deleteNodeBatch.Remove(key.addr, fullPath, prevHash); + } + } + } + } + /// /// Prunes persisted branches of the current commit set root. /// @@ -513,23 +748,27 @@ private void PruneCache() Stopwatch stopwatch = Stopwatch.StartNew(); long newMemory = 0; - foreach ((Hash256AsKey key, TrieNode node) in _dirtyNodes.AllNodes) + foreach ((DirtyNodesCache.Key key, TrieNode node) in _dirtyNodes.AllNodes) { if (node.IsPersisted) { if (_logger.IsTrace) _logger.Trace($"Removing persisted {node} from memory."); + + TrackPrunedPersistedNodes(key, node); + Hash256? keccak = node.Keccak; if (keccak is null) { - keccak = node.GenerateKey(this, isRoot: true); - if (keccak != key) + TreePath path2 = key.Path; + Hash256? newKeccak = node.GenerateKey(this.GetTrieStore(key.Address), ref path2, isRoot: true); + if (newKeccak != key.Keccak) { - throw new InvalidOperationException($"Persisted {node} {key} != {keccak}"); + throw new InvalidOperationException($"Persisted {node} {newKeccak} != {keccak}"); } - node.Keccak = keccak; + node.Keccak = key.Keccak; } - _dirtyNodes.Remove(keccak); + _dirtyNodes.Remove(key); Metrics.PrunedPersistedNodesCount++; } @@ -540,18 +779,18 @@ private void PruneCache() { throw new InvalidOperationException($"Removed {node}"); } - _dirtyNodes.Remove(node.Keccak); + _dirtyNodes.Remove(key); Metrics.PrunedTransientNodesCount++; } else { node.PrunePersistedRecursively(1); - newMemory += node.GetMemorySize(false); + newMemory += node.GetMemorySize(false) + _dirtyNodes.KeyMemoryUsage; } } - MemoryUsedByDirtyCache = newMemory; + MemoryUsedByDirtyCache = newMemory + _persistedLastSeens.Count * 48; Metrics.CachedNodesCount = _dirtyNodes.Count; stopwatch.Stop(); @@ -559,6 +798,28 @@ private void PruneCache() if (_logger.IsDebug) _logger.Debug($"Finished pruning nodes in {stopwatch.ElapsedMilliseconds}ms {MemoryUsedByDirtyCache / 1.MB()} MB, last persisted block: {LastPersistedBlockNumber} current: {LatestCommittedBlockNumber}."); } + private void TrackPrunedPersistedNodes(in DirtyNodesCache.Key key, TrieNode node) + { + if (key.Path.Length > TinyTreePath.MaxNibbleLength) return; + if (_pastPathHash == null) return; + + TinyTreePath treePath = new TinyTreePath(key.Path); + // Persisted node with LastSeen is a node that has been re-committed, likely due to processing + // recalculated to the same hash. + if (node.LastSeen != null) + { + // Update _persistedLastSeen to later value. + if (!_persistedLastSeens.TryGetValue((key.Address, treePath, key.Keccak), out long currentLastSeen) || currentLastSeen < node.LastSeen.Value) + { + _persistedLastSeens[(key.Address, treePath, key.Keccak)] = node.LastSeen.Value; + } + } + + // This persisted node is being removed from cache. Keep it in mind in case of an update to the same + // path. + _pastPathHash.Set((key.Address, treePath), key.Keccak); + } + /// /// This method is here to support testing. /// @@ -574,7 +835,7 @@ public void Dispose() #region Private - protected readonly IKeyValueStoreWithBatching _keyValueStore; + protected readonly INodeStorage _nodeStorage; private readonly TrieKeyValueStore _publicStore; @@ -599,6 +860,7 @@ public void Dispose() private bool IsCurrentListSealed => CurrentPackage is null || CurrentPackage.IsSealed; private long LatestCommittedBlockNumber { get; set; } + public INodeStorage.KeyScheme Scheme => _nodeStorage.Scheme; private void CreateCommitSet(long blockNumber) { @@ -623,15 +885,43 @@ private void CreateCommitSet(long blockNumber) /// Already persisted nodes are skipped. After this action we are sure that the full state is available /// for the block represented by this commit set. /// + /// /// A commit set of a block which root is to be persisted. - private void PersistBlockCommitSet(BlockCommitSet commitSet, IWriteBatch writeBatch, WriteFlags writeFlags = WriteFlags.None) + /// The write batch to write to + /// Track persisted hashes in this dictionary if not null + /// + private void PersistBlockCommitSet( + Hash256? address, + BlockCommitSet commitSet, + INodeStorage.WriteBatch writeBatch, + Dictionary<(Hash256?, TinyTreePath), Hash256?>? persistedHashes = null, + WriteFlags writeFlags = WriteFlags.None + ) { - void PersistNode(TrieNode tn) => this.PersistNode(tn, commitSet.BlockNumber, writeFlags, writeBatch); + void PersistNode(TrieNode tn, Hash256? address2, TreePath path) + { + if (persistedHashes != null && path.Length <= TinyTreePath.MaxNibbleLength) + { + (Hash256 address2, TinyTreePath path) key = (address2, new TinyTreePath(path)); + if (persistedHashes.ContainsKey(key)) + { + // Null mark that there are multiple saved hash for this path. So we don't attempt to remove anything. + // Otherwise this would have to be a list, which is such a rare case that its not worth it to have a list. + persistedHashes[key] = null; + } + else + { + persistedHashes[key] = tn.Keccak; + } + } + this.PersistNode(address2, path, tn, commitSet.BlockNumber, writeFlags, writeBatch); + } if (_logger.IsDebug) _logger.Debug($"Persisting from root {commitSet.Root} in {commitSet.BlockNumber}"); Stopwatch stopwatch = Stopwatch.StartNew(); - commitSet.Root?.CallRecursively(PersistNode, this, true, _logger); + TreePath path = TreePath.Empty; + commitSet.Root?.CallRecursively(PersistNode, address, ref path, GetTrieStore(null), true, _logger); stopwatch.Stop(); Metrics.SnapshotPersistenceTime = stopwatch.ElapsedMilliseconds; @@ -640,9 +930,9 @@ private void PersistBlockCommitSet(BlockCommitSet commitSet, IWriteBatch writeBa LastPersistedBlockNumber = commitSet.BlockNumber; } - private void PersistNode(TrieNode currentNode, long blockNumber, WriteFlags writeFlags = WriteFlags.None, IWriteBatch? writeBatch = null) + private void PersistNode(Hash256? address, in TreePath path, TrieNode currentNode, long blockNumber, WriteFlags writeFlags = WriteFlags.None, INodeStorage.WriteBatch? writeBatch = null) { - writeBatch ??= _currentBatch ??= _keyValueStore.StartWriteBatch(); + writeBatch ??= _currentBatch ??= _nodeStorage.StartWriteBatch(); ArgumentNullException.ThrowIfNull(currentNode); if (currentNode.Keccak is not null) @@ -654,7 +944,8 @@ private void PersistNode(TrieNode currentNode, long blockNumber, WriteFlags writ // to prevent it from being removed from cache and also want to have it persisted. if (_logger.IsTrace) _logger.Trace($"Persisting {nameof(TrieNode)} {currentNode} in snapshot {blockNumber}."); - writeBatch.Set(currentNode.Keccak, currentNode.FullRlp, writeFlags); + // TODO: Pass span + writeBatch.Set(address, path, currentNode.Keccak, currentNode.FullRlp.ToArray(), writeFlags); currentNode.IsPersisted = true; currentNode.LastSeen = Math.Max(blockNumber, currentNode.LastSeen ?? 0); PersistedNodesCount++; @@ -668,18 +959,23 @@ private void PersistNode(TrieNode currentNode, long blockNumber, WriteFlags writ private bool IsNoLongerNeeded(TrieNode node) { - Debug.Assert(node.LastSeen.HasValue, $"Any node that is cache should have {nameof(TrieNode.LastSeen)} set."); - return node.LastSeen < LastPersistedBlockNumber - && node.LastSeen < LatestCommittedBlockNumber - Reorganization.MaxDepth; + return IsNoLongerNeeded(node.LastSeen); + } + + private bool IsNoLongerNeeded(long? lastSeen) + { + Debug.Assert(lastSeen.HasValue, $"Any node that is cache should have {nameof(TrieNode.LastSeen)} set."); + return lastSeen < LastPersistedBlockNumber + && lastSeen < LatestCommittedBlockNumber - _reorgDepth; } private void DequeueOldCommitSets() { while (_commitSetQueue.TryPeek(out BlockCommitSet blockCommitSet)) { - if (blockCommitSet.BlockNumber < LatestCommittedBlockNumber - Reorganization.MaxDepth - 1) + if (blockCommitSet.BlockNumber < LatestCommittedBlockNumber - _reorgDepth - 1) { - if (_logger.IsDebug) _logger.Debug($"Removing historical ({_commitSetQueue.Count}) {blockCommitSet.BlockNumber} < {LatestCommittedBlockNumber} - {Reorganization.MaxDepth}"); + if (_logger.IsDebug) _logger.Debug($"Removing historical ({_commitSetQueue.Count}) {blockCommitSet.BlockNumber} < {LatestCommittedBlockNumber} - {_reorgDepth}"); _commitSetQueue.TryDequeue(out _); } else @@ -728,7 +1024,7 @@ private void AnnounceReorgBoundaries() { // even after we persist a block we do not really remember it as a safe checkpoint // until max reorgs blocks after - if (LatestCommittedBlockNumber >= LastPersistedBlockNumber + Reorganization.MaxDepth) + if (LatestCommittedBlockNumber >= LastPersistedBlockNumber + _reorgDepth) { shouldAnnounceReorgBoundary = true; } @@ -752,11 +1048,11 @@ private void PersistOnShutdown() using ArrayPoolList candidateSets = new(_commitSetQueue.Count); while (_commitSetQueue.TryDequeue(out BlockCommitSet frontSet)) { - if (candidateSets.Count == 0 || candidateSets[0].BlockNumber == frontSet!.BlockNumber) + if (!frontSet.IsSealed || candidateSets.Count == 0 || candidateSets[0].BlockNumber == frontSet!.BlockNumber) { candidateSets.Add(frontSet); } - else if (frontSet!.BlockNumber < LatestCommittedBlockNumber - Reorganization.MaxDepth + else if (frontSet!.BlockNumber < LatestCommittedBlockNumber - _reorgDepth && frontSet!.BlockNumber > candidateSets[0].BlockNumber) { candidateSets.Clear(); @@ -764,12 +1060,12 @@ private void PersistOnShutdown() } } - IWriteBatch writeBatch = _keyValueStore.StartWriteBatch(); + INodeStorage.WriteBatch writeBatch = _nodeStorage.StartWriteBatch(); for (int index = 0; index < candidateSets.Count; index++) { BlockCommitSet blockCommitSet = candidateSets[index]; if (_logger.IsDebug) _logger.Debug($"Persisting on disposal {blockCommitSet} (cache memory at {MemoryUsedByDirtyCache})"); - PersistBlockCommitSet(blockCommitSet, writeBatch); + PersistBlockCommitSet(null, blockCommitSet, writeBatch); } writeBatch.Dispose(); @@ -808,8 +1104,8 @@ void ClearCommitSetQueue() } commitSetCount++; - using IWriteBatch writeBatch = _keyValueStore.StartWriteBatch(); - PersistBlockCommitSet(commitSet, writeBatch); + using INodeStorage.WriteBatch writeBatch = _nodeStorage.StartWriteBatch(); + PersistBlockCommitSet(null, commitSet, writeBatch); } PruneCurrentSet(); } @@ -822,57 +1118,62 @@ void ClearCommitSetQueue() stopwatch.Restart(); lock (_dirtyNodes) { - using (_dirtyNodes.AllNodes.AcquireLock()) + using (_dirtyNodes.AcquireMapLock()) { // Double check ClearCommitSetQueue(); // This should clear most nodes. For some reason, not all. PruneCache(); - KeyValuePair[] nodesCopy = _dirtyNodes.AllNodes.ToArray(); + KeyValuePair[] nodesCopy = _dirtyNodes.AllNodes.ToArray(); - NonBlocking.ConcurrentDictionary wasPersisted = new(); - void PersistNode(TrieNode n) + ConcurrentDictionary wasPersisted = new(); + void PersistNode(TrieNode n, Hash256? address, TreePath path) { - Hash256? hash = n.Keccak; - if (hash is not null && wasPersisted.TryAdd(hash, true)) + if (n.Keccak == null) return; + DirtyNodesCache.Key key = new DirtyNodesCache.Key(address, path, n.Keccak); + if (wasPersisted.TryAdd(key, true)) { - _keyValueStore.Set(hash, n.FullRlp); + _nodeStorage.Set(address, path, n.Keccak, n.FullRlp.ToArray()); n.IsPersisted = true; } } Parallel.For(0, nodesCopy.Length, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount / 2 }, i => { if (cancellationToken.IsCancellationRequested) return; - nodesCopy[i].Value.CallRecursively(PersistNode, this, false, _logger, false); + DirtyNodesCache.Key key = nodesCopy[i].Key; + TreePath path = key.Path; + nodesCopy[i].Value.CallRecursively(PersistNode, key.Address, ref path, GetTrieStore(key.Address), false, _logger, false); }); PruneCache(); - if (_dirtyNodes.AllNodes.Count != 0) + if (_dirtyNodes.Count != 0) { - if (_logger.IsWarn) _logger.Warn($"{_dirtyNodes.AllNodes.Count} cache entry remains."); + if (_logger.IsWarn) _logger.Warn($"{_dirtyNodes.Count} cache entry remains."); } } } if (_logger.IsInfo) _logger.Info($"Clear cache took {stopwatch.Elapsed}."); } + // Used to serve node by hash private byte[]? GetByHash(ReadOnlySpan key, ReadFlags flags = ReadFlags.None) { + Hash256 asHash = new Hash256(key); return _pruningStrategy.PruningEnabled - && _dirtyNodes.AllNodes.TryGetValue(new Hash256(key), out TrieNode? trieNode) + && _dirtyNodes.TryGetValue(new DirtyNodesCache.Key(null, TreePath.Empty, asHash), out TrieNode? trieNode) && trieNode is not null && trieNode.NodeType != NodeType.Unknown && trieNode.FullRlp.IsNotNull ? trieNode.FullRlp.ToArray() - : _keyValueStore.Get(key, flags); + : _nodeStorage.Get(null, TreePath.Empty, asHash, flags); } public IReadOnlyKeyValueStore TrieNodeRlpStore => _publicStore; - public void Set(in ValueHash256 hash, byte[] rlp) + public void Set(Hash256? address, in TreePath path, in ValueHash256 keccak, byte[] rlp) { - _keyValueStore.Set(hash, rlp); + _nodeStorage.Set(address, path, keccak, rlp); } private class TrieKeyValueStore : IReadOnlyKeyValueStore @@ -890,10 +1191,10 @@ public TrieKeyValueStore(TrieStore trieStore) public bool HasRoot(Hash256 stateRoot) { if (stateRoot == Keccak.EmptyTreeHash) return true; - TrieNode node = FindCachedOrUnknown(stateRoot, true); + TrieNode node = FindCachedOrUnknown(null, TreePath.Empty, stateRoot, true); if (node.NodeType == NodeType.Unknown) { - return TryLoadRlp(node.Keccak, ReadFlags.None) is not null; + return TryLoadRlp(null, TreePath.Empty, node.Keccak, ReadFlags.None) is not null; } return true; diff --git a/src/Nethermind/Nethermind.Trie/RangeQueryVisitor.cs b/src/Nethermind/Nethermind.Trie/RangeQueryVisitor.cs index 0bb905798f3..29a3ee9cfac 100644 --- a/src/Nethermind/Nethermind.Trie/RangeQueryVisitor.cs +++ b/src/Nethermind/Nethermind.Trie/RangeQueryVisitor.cs @@ -51,6 +51,7 @@ public class RangeQueryVisitor : ITreeVisitor, IDisposable public bool StoppedEarly { get; set; } = false; public bool IsFullDbScan => false; + public bool IsRangeScan => true; private readonly AccountDecoder _standardDecoder = new AccountDecoder(); private readonly AccountDecoder _slimDecoder = new AccountDecoder(slimFormat: true); private readonly CancellationToken _cancellationToken; diff --git a/src/Nethermind/Nethermind.Trie/TrieNode.Decoder.cs b/src/Nethermind/Nethermind.Trie/TrieNode.Decoder.cs index 7e86b52dbd7..8e019862037 100644 --- a/src/Nethermind/Nethermind.Trie/TrieNode.Decoder.cs +++ b/src/Nethermind/Nethermind.Trie/TrieNode.Decoder.cs @@ -4,6 +4,8 @@ using System; using System.Buffers; using System.Diagnostics; +using System.IO; +using System.Linq; using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; using Nethermind.Core.Buffers; @@ -23,7 +25,7 @@ public partial class TrieNode private class TrieNodeDecoder { - public static CappedArray Encode(ITrieNodeResolver tree, TrieNode? item, ICappedArrayPool? bufferPool) + public static CappedArray Encode(ITrieNodeResolver tree, ref TreePath path, TrieNode? item, ICappedArrayPool? bufferPool) { Metrics.TreeNodeRlpEncodings++; @@ -34,8 +36,8 @@ public static CappedArray Encode(ITrieNodeResolver tree, TrieNode? item, I return item.NodeType switch { - NodeType.Branch => RlpEncodeBranch(tree, item, bufferPool), - NodeType.Extension => EncodeExtension(tree, item, bufferPool), + NodeType.Branch => RlpEncodeBranch(tree, ref path, item, bufferPool), + NodeType.Extension => EncodeExtension(tree, ref path, item, bufferPool), NodeType.Leaf => EncodeLeaf(item, bufferPool), _ => ThrowUnhandledNodeType(item) }; @@ -56,7 +58,7 @@ static CappedArray ThrowUnhandledNodeType(TrieNode item) } [SkipLocalsInit] - private static CappedArray EncodeExtension(ITrieNodeResolver tree, TrieNode item, ICappedArrayPool? bufferPool) + private static CappedArray EncodeExtension(ITrieNodeResolver tree, ref TreePath path, TrieNode item, ICappedArrayPool? bufferPool) { Debug.Assert(item.NodeType == NodeType.Extension, $"Node passed to {nameof(EncodeExtension)} is {item.NodeType}"); @@ -75,11 +77,13 @@ private static CappedArray EncodeExtension(ITrieNodeResolver tree, TrieNod HexPrefix.CopyToSpan(hexPrefix, isLeaf: false, keyBytes); - TrieNode nodeRef = item.GetChild(tree, 0); + int previousLength = item.AppendChildPath(ref path, 0); + TrieNode nodeRef = item.GetChildWithChildPath(tree, ref path, 0); Debug.Assert(nodeRef is not null, "Extension child is null when encoding."); - nodeRef.ResolveKey(tree, false, bufferPool: bufferPool); + nodeRef.ResolveKey(tree, ref path, false, bufferPool: bufferPool); + path.TruncateMut(previousLength); int contentLength = Rlp.LengthOf(keyBytes) + (nodeRef.Keccak is null ? nodeRef.FullRlp.Length : Rlp.LengthOfKeccakRlp); int totalLength = Rlp.LengthOfSequence(contentLength); @@ -151,15 +155,15 @@ private static void ThrowNullKey(TrieNode node) throw new TrieException($"Hex prefix of a leaf node is null at node {node.Keccak}"); } - private static CappedArray RlpEncodeBranch(ITrieNodeResolver tree, TrieNode item, ICappedArrayPool? pool) + private static CappedArray RlpEncodeBranch(ITrieNodeResolver tree, ref TreePath path, TrieNode item, ICappedArrayPool? pool) { int valueRlpLength = AllowBranchValues ? Rlp.LengthOf(item.Value.AsSpan()) : 1; - int contentLength = valueRlpLength + GetChildrenRlpLength(tree, item, pool); + int contentLength = valueRlpLength + GetChildrenRlpLengthForBranch(tree, ref path, item, pool); int sequenceLength = Rlp.LengthOfSequence(contentLength); CappedArray result = pool.SafeRentBuffer(sequenceLength); Span resultSpan = result.AsSpan(); int position = Rlp.StartSequence(resultSpan, 0, contentLength); - WriteChildrenRlp(tree, item, resultSpan.Slice(position, contentLength - valueRlpLength), pool); + WriteChildrenRlpBranch(tree, ref path, item, resultSpan.Slice(position, contentLength - valueRlpLength), pool); position = sequenceLength - valueRlpLength; if (AllowBranchValues) { @@ -173,7 +177,7 @@ private static CappedArray RlpEncodeBranch(ITrieNodeResolver tree, TrieNod return result; } - private static int GetChildrenRlpLength(ITrieNodeResolver tree, TrieNode item, ICappedArrayPool? bufferPool) + private static int GetChildrenRlpLengthForBranch(ITrieNodeResolver tree, ref TreePath path, TrieNode item, ICappedArrayPool? bufferPool) { int totalLength = 0; item.EnsureInitialized(); @@ -201,7 +205,9 @@ private static int GetChildrenRlpLength(ITrieNodeResolver tree, TrieNode item, I else { TrieNode childNode = (TrieNode)data; - childNode!.ResolveKey(tree, false, bufferPool: bufferPool); + item.AppendChildPathBranch(ref path, i); + childNode!.ResolveKey(tree, ref path, false, bufferPool: bufferPool); + path.TruncateOne(); totalLength += childNode.Keccak is null ? childNode.FullRlp.Length : Rlp.LengthOfKeccakRlp; } } @@ -212,7 +218,7 @@ private static int GetChildrenRlpLength(ITrieNodeResolver tree, TrieNode item, I return totalLength; } - private static void WriteChildrenRlp(ITrieNodeResolver tree, TrieNode item, Span destination, ICappedArrayPool? bufferPool) + private static void WriteChildrenRlpBranch(ITrieNodeResolver tree, ref TreePath path, TrieNode item, Span destination, ICappedArrayPool? bufferPool) { int position = 0; item.EnsureInitialized(); @@ -244,7 +250,10 @@ private static void WriteChildrenRlp(ITrieNodeResolver tree, TrieNode item, Span else { TrieNode childNode = (TrieNode)data; - childNode!.ResolveKey(tree, false, bufferPool: bufferPool); + item.AppendChildPathBranch(ref path, i); + childNode!.ResolveKey(tree, ref path, false, bufferPool: bufferPool); + path.TruncateOne(); + if (childNode.Keccak is null) { Span fullRlp = childNode.FullRlp!.AsSpan(); diff --git a/src/Nethermind/Nethermind.Trie/TrieNode.Visitor.cs b/src/Nethermind/Nethermind.Trie/TrieNode.Visitor.cs index 52d54339a50..a7342a448bc 100644 --- a/src/Nethermind/Nethermind.Trie/TrieNode.Visitor.cs +++ b/src/Nethermind/Nethermind.Trie/TrieNode.Visitor.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Nethermind.Core; using Nethermind.Core.Buffers; +using Nethermind.Core.Crypto; using Nethermind.Serialization.Rlp; using Nethermind.Trie.Pruning; @@ -27,6 +28,7 @@ public partial class TrieNode internal void AcceptResolvedNode(ITreeVisitor visitor, in TNodeContext nodeContext, ITrieNodeResolver nodeResolver, SmallTrieVisitContext trieVisitContext, IList<(TrieNode, TNodeContext, SmallTrieVisitContext)> nextToVisit) where TNodeContext : struct, INodeContext { + TreePath emptyPath = TreePath.Empty; switch (NodeType) { case NodeType.Branch: @@ -36,10 +38,10 @@ internal void AcceptResolvedNode(ITreeVisitor visito for (int i = 0; i < BranchesCount; i++) { - TrieNode child = GetChild(nodeResolver, i); + TrieNode child = GetChild(nodeResolver, ref emptyPath, i); if (child is not null) { - child.ResolveKey(nodeResolver, false); + child.ResolveKey(nodeResolver, ref emptyPath, false); TNodeContext childContext = nodeContext.Add((byte)i); if (visitor.ShouldVisit(childContext, child.Keccak!)) @@ -61,13 +63,13 @@ internal void AcceptResolvedNode(ITreeVisitor visito case NodeType.Extension: { visitor.VisitExtension(nodeContext, this, trieVisitContext.ToVisitContext()); - TrieNode child = GetChild(nodeResolver, 0); + TrieNode child = GetChild(nodeResolver, ref emptyPath, 0); if (child is null) { throw new InvalidDataException($"Child of an extension {Key} should not be null."); } - child.ResolveKey(nodeResolver, false); + child.ResolveKey(nodeResolver, ref emptyPath, false); TNodeContext childContext = nodeContext.Add(Key!); if (visitor.ShouldVisit(childContext, child.Keccak!)) { @@ -101,17 +103,20 @@ internal void AcceptResolvedNode(ITreeVisitor visito if (account.HasStorage && visitor.ShouldVisit(childContext, account.StorageRoot)) { trieVisitContext.IsStorage = true; + TNodeContext storageContext = childContext.AddStorage(account.StorageRoot); trieVisitContext.Level++; trieVisitContext.BranchChildIndex = null; - if (TryResolveStorageRoot(nodeResolver, out TrieNode? storageRoot)) + if (TryResolveStorageRoot(nodeResolver, ref emptyPath, out TrieNode? storageRoot)) { - nextToVisit.Add((storageRoot!, childContext, trieVisitContext)); + nextToVisit.Add((storageRoot!, storageContext, trieVisitContext)); } else { - visitor.VisitMissingNode(childContext, account.StorageRoot, trieVisitContext.ToVisitContext()); + visitor.VisitMissingNode(storageContext, account.StorageRoot, trieVisitContext.ToVisitContext()); } + + trieVisitContext.IsStorage = false; } } @@ -123,17 +128,17 @@ internal void AcceptResolvedNode(ITreeVisitor visito } } - internal void Accept(ITreeVisitor visitor, ITrieNodeResolver nodeResolver, TrieVisitContext trieVisitContext) + internal void Accept(ITreeVisitor visitor, ITrieNodeResolver nodeResolver, ref TreePath path, TrieVisitContext trieVisitContext) { - Accept(new ContextNotAwareTreeVisitor(visitor), default, nodeResolver, trieVisitContext); + Accept(new ContextNotAwareTreeVisitor(visitor), default, nodeResolver, ref path, trieVisitContext); } - internal void Accept(ITreeVisitor visitor, in TNodeContext nodeContext, ITrieNodeResolver nodeResolver, TrieVisitContext trieVisitContext) + internal void Accept(ITreeVisitor visitor, in TNodeContext nodeContext, ITrieNodeResolver nodeResolver, ref TreePath path, TrieVisitContext trieVisitContext) where TNodeContext : struct, INodeContext { try { - ResolveNode(nodeResolver); + ResolveNode(nodeResolver, path); } catch (TrieException) { @@ -141,25 +146,26 @@ internal void Accept(ITreeVisitor visitor, in TNodeC return; } - ResolveKey(nodeResolver, trieVisitContext.Level == 0); + ResolveKey(nodeResolver, ref path, trieVisitContext.Level == 0); switch (NodeType) { case NodeType.Branch: { [MethodImpl(MethodImplOptions.AggressiveInlining)] - void VisitChild(int i, TrieNode? child, ITrieNodeResolver resolver, ITreeVisitor v, in TNodeContext nodeContext, TrieVisitContext context) + void VisitChild(ref TreePath path, int i, TrieNode? child, ITrieNodeResolver resolver, ITreeVisitor v, in TNodeContext nodeContext, TrieVisitContext context) { if (child is not null) { - child.ResolveKey(resolver, false); + int previousPathLength = AppendChildPath(ref path, i); + child.ResolveKey(resolver, ref path, false); TNodeContext childContext = nodeContext.Add((byte)i); - if (v.ShouldVisit(childContext, child.Keccak!)) { context.BranchChildIndex = i; - child.Accept(v, childContext, resolver, context); + child.Accept(v, childContext, resolver, ref path, context); } + path.TruncateMut(previousPathLength); if (child.IsPersisted) { @@ -169,17 +175,17 @@ void VisitChild(int i, TrieNode? child, ITrieNodeResolver resolver, ITreeVisitor } [MethodImpl(MethodImplOptions.AggressiveInlining)] - void VisitSingleThread(ITreeVisitor treeVisitor, in TNodeContext nodeContext, ITrieNodeResolver trieNodeResolver, TrieVisitContext visitContext) + void VisitSingleThread(ref TreePath parentPath, ITreeVisitor treeVisitor, in TNodeContext nodeContext, ITrieNodeResolver trieNodeResolver, TrieVisitContext visitContext) { // single threaded route for (int i = 0; i < BranchesCount; i++) { - VisitChild(i, GetChild(trieNodeResolver, i), trieNodeResolver, treeVisitor, nodeContext, visitContext); + VisitChild(ref parentPath, i, GetChild(trieNodeResolver, ref parentPath, i), trieNodeResolver, treeVisitor, nodeContext, visitContext); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] - void VisitMultiThread(ITreeVisitor treeVisitor, in TNodeContext nodeContext, ITrieNodeResolver trieNodeResolver, TrieVisitContext visitContext, TrieNode?[] children) + void VisitMultiThread(TreePath parentPath, ITreeVisitor treeVisitor, in TNodeContext nodeContext, ITrieNodeResolver trieNodeResolver, TrieVisitContext visitContext, TrieNode?[] children) { var copy = nodeContext; @@ -189,10 +195,10 @@ void VisitMultiThread(ITreeVisitor treeVisitor, in TNodeContext no visitContext.Semaphore.Wait(); try { + TreePath closureParentPath = parentPath; // we need to have separate context for each thread as context tracks level and branch child index TrieVisitContext childContext = visitContext.Clone(); - - VisitChild(i, children[i], trieNodeResolver, treeVisitor, copy, childContext); + VisitChild(ref closureParentPath, i, children[i], trieNodeResolver, treeVisitor, copy, childContext); } finally { @@ -201,6 +207,27 @@ void VisitMultiThread(ITreeVisitor treeVisitor, in TNodeContext no }); } + static void VisitAllSingleThread(TrieNode currentNode, ref TreePath path, ITreeVisitor visitor, TNodeContext nodeContext, ITrieNodeResolver nodeResolver, TrieVisitContext visitContext) + { + TrieNode?[] output = new TrieNode?[16]; + currentNode.ResolveAllChildBranch(nodeResolver, ref path, output); + currentNode.AppendChildPathBranch(ref path, 0); + for (int i = 0; i < 16; i++) + { + if (output[i] == null) continue; + TrieNode child = output[i]; + path.SetLast(i); + child.ResolveKey(nodeResolver, ref path, false); + TNodeContext childContext = nodeContext.Add((byte)i); + if (visitor.ShouldVisit(childContext, child.Keccak!)) + { + visitContext.BranchChildIndex = i; + child.Accept(visitor, childContext, nodeResolver, ref path, visitContext); + } + } + path.TruncateOne(); + } + visitor.VisitBranch(nodeContext, this, trieVisitContext); trieVisitContext.AddVisited(); trieVisitContext.Level++; @@ -211,21 +238,28 @@ void VisitMultiThread(ITreeVisitor treeVisitor, in TNodeContext no TrieNode?[] children = new TrieNode?[BranchesCount]; for (int i = 0; i < BranchesCount; i++) { - children[i] = GetChild(nodeResolver, i); + children[i] = GetChild(nodeResolver, ref path, i); } if (trieVisitContext.Semaphore.CurrentCount > 1) { - VisitMultiThread(visitor, nodeContext, nodeResolver, trieVisitContext, children); + VisitMultiThread(path, visitor, nodeContext, nodeResolver, trieVisitContext, children); } else { - VisitSingleThread(visitor, nodeContext, nodeResolver, trieVisitContext); + VisitSingleThread(ref path, visitor, nodeContext, nodeResolver, trieVisitContext); } } else { - VisitSingleThread(visitor, nodeContext, nodeResolver, trieVisitContext); + if (visitor.IsRangeScan) + { + VisitAllSingleThread(this, ref path, visitor, nodeContext, nodeResolver, trieVisitContext); + } + else + { + VisitSingleThread(ref path, visitor, nodeContext, nodeResolver, trieVisitContext); + } } trieVisitContext.Level--; @@ -237,21 +271,23 @@ void VisitMultiThread(ITreeVisitor treeVisitor, in TNodeContext no { visitor.VisitExtension(nodeContext, this, trieVisitContext); trieVisitContext.AddVisited(); - TrieNode child = GetChild(nodeResolver, 0); + TrieNode child = GetChild(nodeResolver, ref path, 0); if (child is null) { throw new InvalidDataException($"Child of an extension {Key} should not be null."); } - child.ResolveKey(nodeResolver, false); + int previousPathLength = AppendChildPath(ref path, 0); + child.ResolveKey(nodeResolver, ref path, false); TNodeContext childContext = nodeContext.Add(Key!); if (visitor.ShouldVisit(childContext, child.Keccak!)) { trieVisitContext.Level++; trieVisitContext.BranchChildIndex = null; - child.Accept(visitor, childContext, nodeResolver, trieVisitContext); + child.Accept(visitor, childContext, nodeResolver, ref path, trieVisitContext); trieVisitContext.Level--; } + path.TruncateMut(previousPathLength); break; } @@ -277,13 +313,24 @@ void VisitMultiThread(ITreeVisitor treeVisitor, in TNodeContext no if (account.HasStorage && visitor.ShouldVisit(leafContext, account.StorageRoot)) { - trieVisitContext.IsStorage = true; trieVisitContext.Level++; trieVisitContext.BranchChildIndex = null; - if (TryResolveStorageRoot(nodeResolver, out TrieNode? storageRoot)) + if (TryResolveStorageRoot(nodeResolver, ref path, out TrieNode? storageRoot)) { - storageRoot!.Accept(visitor, leafContext, nodeResolver, trieVisitContext); + Hash256 storageAccount; + using (path.ScopedAppend(Key)) + { + storageAccount = path.Path.ToCommitment(); + } + + trieVisitContext.IsStorage = true; + + TNodeContext storageContext = leafContext.AddStorage(storageAccount); + TreePath emptyPath = TreePath.Empty; + storageRoot!.Accept(visitor, storageContext, nodeResolver.GetStorageTrieNodeResolver(storageAccount), ref emptyPath, trieVisitContext); + + trieVisitContext.IsStorage = false; } else { @@ -291,7 +338,6 @@ void VisitMultiThread(ITreeVisitor treeVisitor, in TNodeContext no } trieVisitContext.Level--; - trieVisitContext.IsStorage = false; } } diff --git a/src/Nethermind/Nethermind.Trie/TrieNode.cs b/src/Nethermind/Nethermind.Trie/TrieNode.cs index a8a5e7e4e19..adb38f0368c 100644 --- a/src/Nethermind/Nethermind.Trie/TrieNode.cs +++ b/src/Nethermind/Nethermind.Trie/TrieNode.cs @@ -4,6 +4,7 @@ using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; +using System.IO; using System.Runtime.CompilerServices; using System.Threading; using Nethermind.Core; @@ -33,7 +34,7 @@ public partial class TrieNode private static readonly object _nullNode = new(); private static readonly TrieNodeDecoder _nodeDecoder = new(); private static readonly AccountDecoder _accountDecoder = new(); - private static Action _markPersisted => tn => tn.IsPersisted = true; + private static Action _markPersisted => (tn, _, _) => tn.IsPersisted = true; private RlpFactory? _rlp; private object?[]? _data; private int _isDirty; @@ -325,17 +326,17 @@ void ThrowAlreadySealed() } } - public void ResolveNode(ITrieNodeResolver tree, ReadFlags readFlags = ReadFlags.None, ICappedArrayPool? bufferPool = null) + public void ResolveNode(ITrieNodeResolver tree, in TreePath path, ReadFlags readFlags = ReadFlags.None, ICappedArrayPool? bufferPool = null) { if (NodeType != NodeType.Unknown) return; - ResolveUnknownNode(tree, readFlags, bufferPool); + ResolveUnknownNode(tree, path, readFlags, bufferPool); } /// /// Highly optimized /// - private void ResolveUnknownNode(ITrieNodeResolver tree, ReadFlags readFlags = ReadFlags.None, ICappedArrayPool? bufferPool = null) + private void ResolveUnknownNode(ITrieNodeResolver tree, in TreePath path, ReadFlags readFlags = ReadFlags.None, ICappedArrayPool? bufferPool = null) { try { @@ -348,7 +349,7 @@ private void ResolveUnknownNode(ITrieNodeResolver tree, ReadFlags readFlags = Re ThrowMissingKeccak(); } - CappedArray fullRlp = tree.LoadRlp(keccak, readFlags); + CappedArray fullRlp = tree.LoadRlp(path, keccak, readFlags); if (fullRlp.IsNull) { @@ -401,7 +402,7 @@ void ThrowDecodingError(RlpException rlpException) /// /// Highly optimized /// - public bool TryResolveNode(ITrieNodeResolver tree, ReadFlags readFlags = ReadFlags.None, ICappedArrayPool? bufferPool = null) + public bool TryResolveNode(ITrieNodeResolver tree, ref TreePath path, ReadFlags readFlags = ReadFlags.None, ICappedArrayPool? bufferPool = null) { try { @@ -416,7 +417,7 @@ public bool TryResolveNode(ITrieNodeResolver tree, ReadFlags readFlags = ReadFla return false; } - var fullRlp = tree.TryLoadRlp(keccak, readFlags); + var fullRlp = tree.TryLoadRlp(path, keccak, readFlags); if (fullRlp is null) { @@ -488,7 +489,7 @@ private bool DecodeRlp(ValueRlpStream rlpStream, ICappedArrayPool bufferPool, ou return true; } - public void ResolveKey(ITrieNodeResolver tree, bool isRoot, ICappedArrayPool? bufferPool = null) + public void ResolveKey(ITrieNodeResolver tree, ref TreePath path, bool isRoot, ICappedArrayPool? bufferPool = null) { if (Keccak is not null) { @@ -497,16 +498,16 @@ public void ResolveKey(ITrieNodeResolver tree, bool isRoot, ICappedArrayPool? bu return; } - Keccak = GenerateKey(tree, isRoot, bufferPool); + Keccak = GenerateKey(tree, ref path, isRoot, bufferPool); } - public Hash256? GenerateKey(ITrieNodeResolver tree, bool isRoot, ICappedArrayPool? bufferPool = null) + public Hash256? GenerateKey(ITrieNodeResolver tree, ref TreePath path, bool isRoot, ICappedArrayPool? bufferPool = null) { RlpFactory rlp = _rlp; if (rlp is null || IsDirty) { ref readonly CappedArray oldRlp = ref rlp is not null ? ref rlp.Data : ref CappedArray.Empty; - CappedArray fullRlp = RlpEncode(tree, bufferPool); + CappedArray fullRlp = RlpEncode(tree, ref path, bufferPool); if (fullRlp.IsNotNullOrEmpty) { bufferPool.SafeReturnBuffer(oldRlp); @@ -526,9 +527,34 @@ public void ResolveKey(ITrieNodeResolver tree, bool isRoot, ICappedArrayPool? bu return null; } - internal CappedArray RlpEncode(ITrieNodeResolver tree, ICappedArrayPool? bufferPool = null) + /* + public bool TryResolveStorageRootHash(ITrieNodeResolver resolver, out Hash256? storageRootHash) { - CappedArray rlp = TrieNodeDecoder.Encode(tree, this, bufferPool); + storageRootHash = null; + + if (IsLeaf) + { + try + { + storageRootHash = _accountDecoder.DecodeStorageRootOnly(Value.AsRlpStream()); + if (storageRootHash is not null && storageRootHash != Nethermind.Core.Crypto.Keccak.EmptyTreeHash) + { + return true; + } + } + catch + { + return false; + } + } + + return false; + } + */ + + internal CappedArray RlpEncode(ITrieNodeResolver tree, ref TreePath path, ICappedArrayPool? bufferPool = null) + { + CappedArray rlp = TrieNodeDecoder.Encode(tree, ref path, this, bufferPool); // just included here to improve the class reading // after some analysis I believe that any non-test Ethereum cases of a trie ever have nodes with RLP shorter than 32 bytes // if (rlp.Bytes.Length < 32) @@ -639,13 +665,49 @@ public TrieNode? this[int i] set => SetChild(i, value); } - public TrieNode? GetChild(ITrieNodeResolver tree, int childIndex) + public TreePath GetChildPath(in TreePath currentPath, int childIndex) + { + TreePath copy = currentPath; + AppendChildPath(ref copy, childIndex); + return copy; + } + + public int AppendChildPath(ref TreePath currentPath, int childIndex) + { + int previousLength = currentPath.Length; + if (IsExtension) + { + currentPath.AppendMut(Key); + } + else + { + currentPath.AppendMut(childIndex); + } + + return previousLength; + } + + public void AppendChildPathBranch(ref TreePath currentPath, int childIndex) + { + currentPath.AppendMut(childIndex); + } + + public TrieNode? GetChild(ITrieNodeResolver tree, ref TreePath path, int childIndex) + { + int originalLength = path.Length; + AppendChildPath(ref path, childIndex); + TrieNode? childNode = GetChildWithChildPath(tree, ref path, childIndex); + path.TruncateMut(originalLength); + return childNode; + } + + public TrieNode? GetChildWithChildPath(ITrieNodeResolver tree, ref TreePath childPath, int childIndex) { /* extensions store value before the child while branches store children before the value * so just to treat them in the same way we update index on extensions */ childIndex = IsExtension ? childIndex + 1 : childIndex; - object childOrRef = ResolveChild(tree, childIndex); + object childOrRef = ResolveChildWithChildPath(tree, ref childPath, childIndex); TrieNode? child; if (ReferenceEquals(childOrRef, _nullNode) || childOrRef is null) @@ -658,7 +720,7 @@ public TrieNode? this[int i] } else if (childOrRef is Hash256 reference) { - child = tree.FindCachedOrUnknown(reference); + child = tree.FindCachedOrUnknown(childPath, reference); } else { @@ -668,7 +730,10 @@ public TrieNode? this[int i] } // pruning trick so we never store long persisted paths - if (child?.IsPersisted == true) + // Dont unresolve node of path length <= 4. there should be a relatively small number of these, enough to fit + // in RAM, but they are hit quite a lot, and don't have very good data locality. + // That said, in practice, it does nothing notable, except for significantly improving benchmark score. + if (child?.IsPersisted == true && childPath.Length > 4 && childPath.Length % 2 == 0) { UnresolveChild(childIndex); } @@ -844,7 +909,9 @@ public TrieNode CloneWithChangedKeyAndValue(byte[] key, in CappedArray cha /// Note that nodes referenced by hash are not called. /// public void CallRecursively( - Action action, + Action action, + Hash256? storageAddress, + ref TreePath currentPath, ITrieNodeResolver resolver, bool skipPersisted, in ILogger logger, @@ -866,7 +933,9 @@ public void CallRecursively( if (o is TrieNode child) { if (logger.IsTrace) logger.Trace($"Persist recursively on child {i} {child} of {this}"); - child.CallRecursively(action, resolver, skipPersisted, logger); + int previousLength = AppendChildPath(ref currentPath, i); + child.CallRecursively(action, storageAddress, ref currentPath, resolver, skipPersisted, logger); + currentPath.TruncateMut(previousLength); } } } @@ -874,14 +943,28 @@ public void CallRecursively( else { TrieNode? storageRoot = _storageRoot; - if (storageRoot is not null || (resolveStorageRoot && TryResolveStorageRoot(resolver, out storageRoot))) + if (storageRoot is not null || (resolveStorageRoot && TryResolveStorageRoot(resolver, ref currentPath, out storageRoot))) { if (logger.IsTrace) logger.Trace($"Persist recursively on storage root {_storageRoot} of {this}"); - storageRoot!.CallRecursively(action, resolver, skipPersisted, logger); + Hash256 storagePathAddr; + using (currentPath.ScopedAppend(Key)) + { + if (currentPath.Length != 64) throw new Exception("unexpected storage path length. Total nibble count should add up to 64."); + storagePathAddr = currentPath.Path.ToCommitment(); + } + + TreePath emptyPath = TreePath.Empty; + storageRoot!.CallRecursively( + action, + storagePathAddr, + ref emptyPath, + resolver.GetStorageTrieNodeResolver(storagePathAddr), + skipPersisted, + logger); } } - action(this); + action(this, storageAddress, currentPath); } /// @@ -937,7 +1020,7 @@ public void PrunePersistedRecursively(int maxLevelsDeep) // } } - private bool TryResolveStorageRoot(ITrieNodeResolver resolver, out TrieNode? storageRoot) + private bool TryResolveStorageRoot(ITrieNodeResolver resolver, ref TreePath currentPath, out TrieNode? storageRoot) { bool hasStorage = false; storageRoot = _storageRoot; @@ -954,8 +1037,15 @@ private bool TryResolveStorageRoot(ITrieNodeResolver resolver, out TrieNode? sto Hash256 storageRootKey = _accountDecoder.DecodeStorageRootOnly(ref valueContext); if (storageRootKey != Nethermind.Core.Crypto.Keccak.EmptyTreeHash) { + Hash256 storagePath; + using (currentPath.ScopedAppend(Key)) + { + storagePath = currentPath.Path.ToCommitment(); + } hasStorage = true; - _storageRoot = storageRoot = resolver.FindCachedOrUnknown(storageRootKey); + TreePath emptyPath = TreePath.Empty; + _storageRoot = storageRoot = resolver.GetStorageTrieNodeResolver(storagePath) + .FindCachedOrUnknown(in emptyPath, storageRootKey); } } } @@ -1022,7 +1112,7 @@ private void SeekChildNotNull(ref ValueRlpStream rlpStream, int itemToSetOn) } } - private object? ResolveChild(ITrieNodeResolver tree, int i) + private object? ResolveChildWithChildPath(ITrieNodeResolver tree, ref TreePath childPath, int i) { object? childOrRef; RlpFactory rlp = _rlp; @@ -1052,12 +1142,13 @@ private void SeekChildNotNull(ref ValueRlpStream rlpStream, int itemToSetOn) { rlpStream.Position--; Hash256 keccak = rlpStream.DecodeKeccak(); - TrieNode child = tree.FindCachedOrUnknown(keccak); + + TrieNode child = tree.FindCachedOrUnknown(childPath, keccak); _data![i] = childOrRef = child; if (IsPersisted && !child.IsPersisted) { - child.CallRecursively(_markPersisted, tree, false, NullLogger.Instance); + child.CallRecursively(_markPersisted, null, ref childPath, tree, false, NullLogger.Instance); } break; @@ -1081,6 +1172,69 @@ private void SeekChildNotNull(ref ValueRlpStream rlpStream, int itemToSetOn) return childOrRef; } + /// + /// Fast path for trie visitor which visit ranges. Assume node is persisted and has RLP. Does not check for + /// data[i] and does not modify it as it assume its not in the cache most of the time. + /// + /// + /// + /// + private void ResolveAllChildBranch(ITrieNodeResolver tree, ref TreePath path, TrieNode?[] output) + { + RlpFactory rlp = _rlp; + if (rlp is null) + { + AppendChildPathBranch(ref path, 0); + for (int i = 0; i < 16; i++) + { + path.SetLast(i); + output[i] = GetChildWithChildPath(tree, ref path, i); + } + path.TruncateOne(); + return; + } + + ValueRlpStream rlpStream = rlp.GetRlpStream(); + rlpStream.Reset(); + rlpStream.SkipLength(); + + AppendChildPathBranch(ref path, 0); + for (int i = 0; i < 16; i++) + { + // Allows to load children in parallel + int prefix = rlpStream.PeekByte(); + + switch (prefix) + { + case 0: + case 128: + { + rlpStream.Position++; + output[i] = null; + break; + } + case 160: + { + path.SetLast(i); + Hash256 keccak = rlpStream.DecodeKeccak(); + TrieNode child = tree.FindCachedOrUnknown(path, keccak); + output[i] = child; + + break; + } + default: + { + Span fullRlp = rlpStream.PeekNextItem(); + TrieNode child = new(NodeType.Unknown, fullRlp.ToArray()); + rlpStream.SkipItem(); + output[i] = child; + break; + } + } + } + path.TruncateOne(); + } + private void UnresolveChild(int i) { if (IsPersisted) diff --git a/src/Nethermind/Nethermind.Trie/TrieNodeResolverWithReadFlags.cs b/src/Nethermind/Nethermind.Trie/TrieNodeResolverWithReadFlags.cs index e66811565f9..27035114192 100644 --- a/src/Nethermind/Nethermind.Trie/TrieNodeResolverWithReadFlags.cs +++ b/src/Nethermind/Nethermind.Trie/TrieNodeResolverWithReadFlags.cs @@ -18,28 +18,35 @@ public TrieNodeResolverWithReadFlags(ITrieNodeResolver baseResolver, ReadFlags d _defaultFlags = defaultFlags; } - public TrieNode FindCachedOrUnknown(Hash256 hash) + public TrieNode FindCachedOrUnknown(in TreePath treePath, Hash256 hash) { - return _baseResolver.FindCachedOrUnknown(hash); + return _baseResolver.FindCachedOrUnknown(treePath, hash); } - public byte[]? TryLoadRlp(Hash256 hash, ReadFlags flags = ReadFlags.None) + public byte[]? TryLoadRlp(in TreePath treePath, Hash256 hash, ReadFlags flags = ReadFlags.None) { if (flags != ReadFlags.None) { - return _baseResolver.TryLoadRlp(hash, flags | _defaultFlags); + return _baseResolver.TryLoadRlp(treePath, hash, flags | _defaultFlags); } - return _baseResolver.TryLoadRlp(hash, _defaultFlags); + return _baseResolver.TryLoadRlp(treePath, hash, _defaultFlags); } - public byte[]? LoadRlp(Hash256 hash, ReadFlags flags = ReadFlags.None) + public byte[]? LoadRlp(in TreePath treePath, Hash256 hash, ReadFlags flags = ReadFlags.None) { if (flags != ReadFlags.None) { - return _baseResolver.LoadRlp(hash, flags | _defaultFlags); + return _baseResolver.LoadRlp(treePath, hash, flags | _defaultFlags); } - return _baseResolver.LoadRlp(hash, _defaultFlags); + return _baseResolver.LoadRlp(treePath, hash, _defaultFlags); } + + public ITrieNodeResolver GetStorageTrieNodeResolver(Hash256 address) + { + return new TrieNodeResolverWithReadFlags(_baseResolver.GetStorageTrieNodeResolver(address), _defaultFlags); + } + + public INodeStorage.KeyScheme Scheme => _baseResolver.Scheme; } diff --git a/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs b/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs index d1b0ca809c9..4341abacac3 100644 --- a/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs +++ b/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs @@ -8,53 +8,32 @@ namespace Nethermind.Trie; -public class TrieStoreWithReadFlags : TrieNodeResolverWithReadFlags, ITrieStore +public class TrieStoreWithReadFlags : TrieNodeResolverWithReadFlags, IScopedTrieStore { - private ITrieStore _baseImplementation; + private IScopedTrieStore _scopedTrieStoreImplementation; - public TrieStoreWithReadFlags(ITrieStore baseImplementation, ReadFlags readFlags) : base(baseImplementation, readFlags) + public TrieStoreWithReadFlags(IScopedTrieStore implementation, ReadFlags flags) : base(implementation, flags) { - _baseImplementation = baseImplementation; - } - - public void Dispose() - { - _baseImplementation.Dispose(); + _scopedTrieStoreImplementation = implementation; } public void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None) { - _baseImplementation.CommitNode(blockNumber, nodeCommitInfo, writeFlags); + _scopedTrieStoreImplementation.CommitNode(blockNumber, nodeCommitInfo, writeFlags); } public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? root, WriteFlags writeFlags = WriteFlags.None) { - _baseImplementation.FinishBlockCommit(trieType, blockNumber, root, writeFlags); - } - - public bool IsPersisted(in ValueHash256 keccak) - { - return _baseImplementation.IsPersisted(in keccak); + _scopedTrieStoreImplementation.FinishBlockCommit(trieType, blockNumber, root, writeFlags); } - public IReadOnlyTrieStore AsReadOnly(IKeyValueStore? keyValueStore = null) => - _baseImplementation.AsReadOnly(keyValueStore); - - public event EventHandler? ReorgBoundaryReached - { - add => _baseImplementation.ReorgBoundaryReached += value; - remove => _baseImplementation.ReorgBoundaryReached -= value; - } - - public IReadOnlyKeyValueStore TrieNodeRlpStore => _baseImplementation.TrieNodeRlpStore; - - public void Set(in ValueHash256 hash, byte[] rlp) + public bool IsPersisted(in TreePath path, in ValueHash256 keccak) { - _baseImplementation.Set(in hash, rlp); + return _scopedTrieStoreImplementation.IsPersisted(in path, in keccak); } - public bool HasRoot(Hash256 stateRoot) + public void Set(in TreePath path, in ValueHash256 keccak, byte[] rlp) { - return _baseImplementation.HasRoot(stateRoot); + _scopedTrieStoreImplementation.Set(in path, in keccak, rlp); } } diff --git a/src/Nethermind/Nethermind.Trie/Utils/WriteBatcher.cs b/src/Nethermind/Nethermind.Trie/Utils/WriteBatcher.cs new file mode 100644 index 00000000000..1ff14e28f58 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/Utils/WriteBatcher.cs @@ -0,0 +1,75 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Concurrent; +using System.Threading; +using Nethermind.Core.Crypto; +using Nethermind.Trie; + +namespace Nethermind.Core.Utils; + +/// +/// Batches writes into a set of concurrent batches. For cases where throughput matter, but not atomicity. +/// +public class ConcurrentNodeWriteBatcher : INodeStorage.WriteBatch +{ + private long _counter = 0; + private readonly ConcurrentQueue _batches = new(); + private readonly INodeStorage _underlyingDb; + private bool _disposing = false; + + public ConcurrentNodeWriteBatcher(INodeStorage underlyingDb) + { + _underlyingDb = underlyingDb; + } + + public void Dispose() + { + _disposing = true; + foreach (INodeStorage.WriteBatch batch in _batches) + { + batch.Dispose(); + } + } + + public void Set(Hash256? address, in TreePath path, in ValueHash256 currentNodeKeccak, byte[] toArray, WriteFlags writeFlags) + { + if (_disposing) throw new InvalidOperationException("Trying to set while disposing"); + if (!_batches.TryDequeue(out INodeStorage.WriteBatch? currentBatch)) + { + currentBatch = _underlyingDb.StartWriteBatch(); + } + + currentBatch.Set(address, path, currentNodeKeccak, toArray, writeFlags); + long val = Interlocked.Increment(ref _counter); + if (val % 10000 == 0) + { + currentBatch.Dispose(); + } + else + { + _batches.Enqueue(currentBatch); + } + } + + public void Remove(Hash256? address, in TreePath path, in ValueHash256 currentNodeKeccak) + { + if (_disposing) throw new InvalidOperationException("Trying to set while disposing"); + if (!_batches.TryDequeue(out INodeStorage.WriteBatch? currentBatch)) + { + currentBatch = _underlyingDb.StartWriteBatch(); + } + + currentBatch.Remove(address, path, currentNodeKeccak); + long val = Interlocked.Increment(ref _counter); + if (val % 10000 == 0) + { + currentBatch.Dispose(); + } + else + { + _batches.Enqueue(currentBatch); + } + } +} diff --git a/src/Nethermind/Nethermind.Trie/VisitContext.cs b/src/Nethermind/Nethermind.Trie/VisitContext.cs index c7c8ed277a1..546387f3bc9 100644 --- a/src/Nethermind/Nethermind.Trie/VisitContext.cs +++ b/src/Nethermind/Nethermind.Trie/VisitContext.cs @@ -4,6 +4,7 @@ using System; using System.Runtime.InteropServices; using System.Threading; +using Nethermind.Core.Crypto; namespace Nethermind.Trie { @@ -14,7 +15,7 @@ public class TrieVisitContext : IDisposable private int _visitedNodes; public int Level { get; internal set; } - public bool IsStorage { get; internal set; } + public bool IsStorage { get; set; } public int? BranchChildIndex { get; internal set; } public bool ExpectAccounts { get; init; } public int VisitedNodes => _visitedNodes; From b4d378fb205c93da0731810176e6ed90946b55cf Mon Sep 17 00:00:00 2001 From: Nikita Mescheryakov Date: Thu, 14 Mar 2024 13:32:48 +0300 Subject: [PATCH 077/551] UpdateExitPrecompile implementation --- .../ValidatorExit/IValidatorExitEipHandler.cs | 2 + .../ValidatorExit/ValidatorExitEipHandler.cs | 59 ++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs index 0c33f71a84b..83a6382c4c5 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs @@ -10,4 +10,6 @@ namespace Nethermind.Blockchain.ValidatorExit; public interface IValidatorExitEipHandler { ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state); + + void UpdateExitPrecompile(IReleaseSpec spec, IWorldState state); } diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs index f0320377043..1d68d06f10b 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs @@ -12,12 +12,13 @@ namespace Nethermind.Blockchain.ValidatorExit; // https://eips.ethereum.org/EIPS/eip-7002#block-processing public class ValidatorExitEipHandler : IValidatorExitEipHandler { - // private static readonly UInt256 ExcessExitsStorageSlot = 0; - // private static readonly UInt256 ExitCountStorageSlot = 1; + private static readonly UInt256 ExcessExitsStorageSlot = 0; + private static readonly UInt256 ExitCountStorageSlot = 1; private static readonly UInt256 ExitMessageQueueHeadStorageSlot = 2; private static readonly UInt256 ExitMessageQueueTailStorageSlot = 3; private static readonly UInt256 ExitMessageQueueStorageOffset = 4; private static readonly UInt256 MaxExitsPerBlock = 16; + private static readonly UInt256 TargetExitsPerBlock = 2; // Reads validator exit information from the precompile public ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state) @@ -48,4 +49,58 @@ public ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState st return validatorExits; } + + // Will be moved to system transaction + public void UpdateExitPrecompile(IReleaseSpec spec, IWorldState state) + { + UpdateExitQueue(spec, state); + UpdateExcessExits(spec, state); + ResetExitCount(spec, state); + } + + private void UpdateExitQueue(IReleaseSpec spec, IWorldState state) + { + StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, ExitMessageQueueHeadStorageSlot); + StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, ExitMessageQueueTailStorageSlot); + + UInt256 queueHeadIndex = new(state.Get(queueHeadIndexCell)); + UInt256 queueTailIndex = new(state.Get(queueTailIndexCell)); + + UInt256 numExitsInQueue = queueTailIndex - queueHeadIndex; + UInt256 numExitsDequeued = UInt256.Min(numExitsInQueue, MaxExitsPerBlock); + UInt256 newQueueHeadIndex = queueHeadIndex + numExitsDequeued; + if (newQueueHeadIndex == queueTailIndex) + { + state.Set(queueHeadIndexCell, UInt256.Zero.ToLittleEndian()); + state.Set(queueTailIndexCell, UInt256.Zero.ToLittleEndian()); + } + else + { + state.Set(queueHeadIndexCell, newQueueHeadIndex.ToLittleEndian()); + } + } + + private void UpdateExcessExits(IReleaseSpec spec, IWorldState state) + { + StorageCell previousExcessExitsCell = new(spec.Eip7002ContractAddress, ExcessExitsStorageSlot); + StorageCell exitCountCell = new(spec.Eip7002ContractAddress, ExitCountStorageSlot); + + UInt256 previousExcessExits = new(state.Get(previousExcessExitsCell)); + UInt256 exitCount = new(state.Get(exitCountCell)); + + UInt256 newExcessExits = 0; + if (previousExcessExits + exitCount > TargetExitsPerBlock) + { + newExcessExits = previousExcessExits + exitCount - TargetExitsPerBlock; + } + + + state.Set(previousExcessExitsCell, newExcessExits.ToLittleEndian()); + } + + private void ResetExitCount(IReleaseSpec spec, IWorldState state) + { + StorageCell exitCountCell = new(spec.Eip7002ContractAddress, ExitCountStorageSlot); + state.Set(exitCountCell, UInt256.Zero.ToLittleEndian()); + } } From 7ee1fefad797f3e618ec5944c188c11200b5a1ca Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 27 Mar 2024 14:35:37 +0100 Subject: [PATCH 078/551] fix --- .../Nethermind.Consensus/Producers/PayloadAttributes.cs | 4 ++-- .../Nethermind.Consensus/Validators/BlockValidator.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs index 1e09af1581c..89005a8eedb 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs @@ -79,8 +79,8 @@ protected virtual int ComputePayloadIdMembersSize() => + sizeof(ulong) // timestamp + Keccak.Size // prev randao + Address.Size // suggested fee recipient - + (Withdrawals is null ? 0 : Keccak.Size) // deposits root hash - + (Deposits is null ? 0 : Keccak.Size) // withdrawals root hash + + (Withdrawals is null ? 0 : Keccak.Size) // withdrawals root hash + + (Deposits is null ? 0 : Keccak.Size) // deposits root hash + (ParentBeaconBlockRoot is null ? 0 : Keccak.Size); // parent beacon block root protected static string ComputePayloadId(Span inputSpan) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index ee672226727..c0744d40b43 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -484,7 +484,7 @@ public static bool ValidateDepositsHashMatches(BlockHeader header, BlockBody bod depositsRoot = new DepositTrie(body.Deposits).RootHash; - return header.WithdrawalsRoot == depositsRoot; + return header.DepositsRoot == depositsRoot; } private static string Invalid(Block block) => From d7006290d384b96f5d553608c63f3f32772a088e Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 27 Mar 2024 16:38:18 +0100 Subject: [PATCH 079/551] Typo credentials --- src/Nethermind/Nethermind.Core/Deposit.cs | 4 ++-- .../Nethermind.Serialization.Rlp/DepositDecoder.cs | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Deposit.cs b/src/Nethermind/Nethermind.Core/Deposit.cs index 07442a00c2c..9a3c73b22bf 100644 --- a/src/Nethermind/Nethermind.Core/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/Deposit.cs @@ -14,7 +14,7 @@ namespace Nethermind.Core; public class Deposit { public byte[]? PublicKey { get; set; } - public byte[]? WithdrawalCredential { get; set; } + public byte[]? WithdrawalCredentials { get; set; } public ulong Amount { get; set; } public byte[]? Signature { get; set; } public ulong Index { get; set; } @@ -22,7 +22,7 @@ public class Deposit public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(Deposit)} {{") .Append($"{nameof(Index)}: {Index}, ") - .Append($"{nameof(WithdrawalCredential)}: {WithdrawalCredential?.ToHexString()}, ") + .Append($"{nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, ") .Append($"{nameof(Amount)}: {Amount}, ") .Append($"{nameof(PublicKey)}: {PublicKey?.ToHexString()}}}") .ToString(); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs index e6a077926d1..141d7aa2bd6 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -21,7 +21,7 @@ public class DepositDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpValueDecoder Rlp.LengthOf(item.PublicKey) + - Rlp.LengthOf(item.WithdrawalCredential) + + Rlp.LengthOf(item.WithdrawalCredentials) + Rlp.LengthOf(item.Amount) + Rlp.LengthOf(item.Signature) + Rlp.LengthOf(item.Index); From 3d9ab43c72be64e199d7604258fd3614590c43fe Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 27 Mar 2024 16:42:31 +0100 Subject: [PATCH 080/551] cosmetic comment fix --- src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 380ad581032..7f626e212d8 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -275,7 +275,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// - /// Parent Beacon Block precompile + /// EIP-6110: Supply validator deposits on chain /// bool IsEip6110Enabled { get; } Address Eip6110ContractAddress { get; } @@ -295,7 +295,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public ulong Eip4844TransitionTimestamp { get; } - // STATE related + // STATE related public bool ClearEmptyAccountWhenTouched => IsEip158Enabled; // VM From 758ffa510f101e0c04a997e9b26f1d878f4e8034 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 27 Mar 2024 16:53:05 +0100 Subject: [PATCH 081/551] more fixes --- src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 962a7dad5cc..1229502f25f 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -140,7 +140,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder int? depositsLength = null; if (item.Deposits is not null) { - depositsLength = GetWithdrawalsLength(item, rlpBehaviors); + depositsLength = GetDepositsLength(item, rlpBehaviors); if (depositsLength.HasValue) contentLength += Rlp.LengthOfSequence(depositsLength.Value); @@ -188,12 +188,12 @@ private int GetTxLength(Block item, RlpBehaviors rlpBehaviors) private int? GetDepositsLength(Block item, RlpBehaviors rlpBehaviors) { - if (item.Withdrawals is null) + if (item.Deposits is null) return null; var depositsLength = 0; - for (int i = 0, count = item.Withdrawals.Length; i < count; i++) + for (int i = 0, count = item.Deposits.Length; i < count; i++) { depositsLength += _depositDecoder.GetLength(item.Deposits[i], rlpBehaviors); } From 130593c789e8a2ffe3e8c590847316d6688c1f22 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Thu, 28 Mar 2024 01:18:33 +0000 Subject: [PATCH 082/551] Added roundtrip tests --- .../Builders/DepositBuilder.cs | 43 ++++++++++++ .../Encoding/DepositDecoderTests.cs | 70 +++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs new file mode 100644 index 00000000000..b7237b35a96 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs @@ -0,0 +1,43 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core.Test.Builders; + +public class DepositBuilder : BuilderBase +{ + public DepositBuilder() => TestObject = new(); + + public DepositBuilder WithAmount(ulong amount) + { + TestObject.Amount = amount; + + return this; + } + + public DepositBuilder WithIndex(ulong index) + { + TestObject.Index = index; + + return this; + } + + public DepositBuilder WithWithdrawalCredentials(byte[] withdrawalCredentials) + { + TestObject.WithdrawalCredentials = withdrawalCredentials; + + return this; + } + + public DepositBuilder WithSignature(byte[] signature) + { + TestObject.Signature = signature; + + return this; + } + public DepositBuilder WithPublicKey(byte[] pubKey) + { + TestObject.PubKey = pubKey; + + return this; + } +} diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs new file mode 100644 index 00000000000..4609770dac5 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs @@ -0,0 +1,70 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using FluentAssertions; +using Nethermind.Core.Extensions; +using Nethermind.Evm.Tracing.GethStyle.JavaScript; +using Nethermind.Serialization.Rlp; +using NUnit.Framework; + +namespace Nethermind.Core.Test.Encoding; + +public class DepositDecoderTests +{ + [Test] + public void Should_decode() + { + Deposit Deposit = new() + { + Index = long.MaxValue, + PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + byte[] rlp = Rlp.Encode(Deposit).Bytes; + Deposit decoded = Rlp.Decode(rlp); + + decoded.Should().BeEquivalentTo(Deposit); + } + + [Test] + public void Should_decode_with_ValueDecoderContext() + { + Deposit Deposit = new() + { + Index = long.MaxValue, + PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + RlpStream stream = new(1024); + DepositDecoder codec = new(); + + codec.Encode(stream, Deposit); + + Rlp.ValueDecoderContext decoderContext = new(stream.Data.AsSpan()); + Deposit? decoded = codec.Decode(ref decoderContext); + + decoded.Should().BeEquivalentTo(Deposit); + } + + [Test] + public void Should_encode_same_for_Rlp_Encode_and_DepositDecoder_Encode() + { + Deposit Deposit = new() + { + Index = long.MaxValue, + PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + byte[] rlp1 = new DepositDecoder().Encode(Deposit).Bytes; + byte[] rlp2 = Rlp.Encode(Deposit).Bytes; + + rlp1.Should().BeEquivalentTo(rlp2); + } +} From 852b4b721aef307fde330e50ae9bac9045bcd0b8 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 2 Apr 2024 00:09:10 +0000 Subject: [PATCH 083/551] add v4 capabilities --- .../Encoding/DepositDecoderTests.cs | 2 +- .../EngineModuleTests.Setup.cs | 4 +++ .../EngineModuleTests.V1.cs | 2 +- .../EngineModuleTests.V3.cs | 1 + .../Data/ExecutionPayloadV4.cs | 3 ++ .../Data/GetPayloadV4Result.cs | 25 ++++++++++++++ .../EngineRpcModule.Prague.cs | 26 +++++++++++++++ .../EngineRpcModule.cs | 2 ++ .../Handlers/EngineRpcCapabilitiesProvider.cs | 6 ++++ .../Handlers/GetPayloadV4Handler.cs | 24 ++++++++++++++ .../IEngineRpcModule.Prague.cs | 33 +++++++++++++++++++ .../Nethermind.Merge.Plugin/MergePlugin.cs | 1 + .../Nethermind.Optimism/OptimismPlugin.cs | 1 + 13 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs index 4609770dac5..e5d19c3ec25 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs @@ -4,7 +4,7 @@ using System; using FluentAssertions; using Nethermind.Core.Extensions; -using Nethermind.Evm.Tracing.GethStyle.JavaScript; +using Nethermind.Evm.Tracing.GethStyle.Custom.JavaScript; using Nethermind.Serialization.Rlp; using NUnit.Framework; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index f921d7c861b..b6e538bee8a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -93,6 +93,10 @@ private IEngineRpcModule CreateEngineModule(MergeTestBlockchain chain, ISyncConf chain.PayloadPreparationService!, chain.SpecProvider!, chain.LogManager), + new GetPayloadV4Handler( + chain.PayloadPreparationService!, + chain.SpecProvider!, + chain.LogManager), new NewPayloadHandler( chain.BlockValidator, chain.BlockTree, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs index bfd1368d636..98393a9125e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs @@ -1529,7 +1529,7 @@ public async Task Should_return_ClientVersionV1() [Test] public async Task Should_return_capabilities() { - using MergeTestBlockchain chain = await CreateBlockchain(Cancun.Instance); + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance); IEngineRpcModule rpcModule = CreateEngineModule(chain); IOrderedEnumerable expected = typeof(IEngineRpcModule).GetMethods() .Select(m => m.Name) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs index 3e4e6991e87..d1af298d17f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs @@ -356,6 +356,7 @@ public async Task NewPayloadV3_should_verify_blob_versioned_hashes_again Substitute.For>(), Substitute.For>(), Substitute.For>(), + Substitute.For < IAsyncHandler>(), newPayloadHandlerMock, Substitute.For(), Substitute.For, IEnumerable>>(), diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index eb1fb4a9bea..8b83a03568c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -35,6 +35,9 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu public override bool ValidateFork(ISpecProvider specProvider) => specProvider.GetSpec(BlockNumber, Timestamp).IsEip6110Enabled; + /// + /// Gets or sets as defined in + /// EIP-6110. /// [JsonRequired] public override Deposit[]? Deposits { get; set; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs new file mode 100644 index 00000000000..57c639098d8 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Int256; + +namespace Nethermind.Merge.Plugin.Data; + +public class GetPayloadV4Result : GetPayloadV2Result +{ + public GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : base(block, blockFees) + { + ExecutionPayload = new(block); + BlobsBundle = blobsBundle; + } + + public BlobsBundleV1 BlobsBundle { get; } + + public override ExecutionPayloadV4 ExecutionPayload { get; } + + public bool ShouldOverrideBuilder { get; } + + public override string ToString() => + $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}}}"; +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs new file mode 100644 index 00000000000..b4659093d83 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Threading.Tasks; +using Nethermind.Consensus; +using Nethermind.Consensus.Producers; +using Nethermind.Core.Crypto; +using Nethermind.JsonRpc; +using Nethermind.Merge.Plugin.Data; +using Nethermind.Merge.Plugin.Handlers; + +namespace Nethermind.Merge.Plugin; + +public partial class EngineRpcModule : IEngineRpcModule +{ + private readonly IAsyncHandler _getPayloadHandlerV4; + + public Task> engine_forkchoiceUpdatedV4(ForkchoiceStateV1 forkchoiceState, PayloadAttributes? payloadAttributes = null) + => ForkchoiceUpdated(forkchoiceState, payloadAttributes, EngineApiVersions.Cancun); + + public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload) => + NewPayload(executionPayload, EngineApiVersions.Prague); + + public async Task> engine_getPayloadV4(byte[] payloadId) => + await _getPayloadHandlerV4.HandleAsync(payloadId); +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs index 24aaf85a38b..0ead869fd12 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs @@ -24,6 +24,7 @@ public EngineRpcModule( IAsyncHandler getPayloadHandlerV1, IAsyncHandler getPayloadHandlerV2, IAsyncHandler getPayloadHandlerV3, + IAsyncHandler getPayloadHandlerV4, IAsyncHandler newPayloadV1Handler, IForkchoiceUpdatedHandler forkchoiceUpdatedV1Handler, IAsyncHandler, IEnumerable> executionGetPayloadBodiesByHashV1Handler, @@ -38,6 +39,7 @@ public EngineRpcModule( _getPayloadHandlerV1 = getPayloadHandlerV1; _getPayloadHandlerV2 = getPayloadHandlerV2; _getPayloadHandlerV3 = getPayloadHandlerV3; + _getPayloadHandlerV4 = getPayloadHandlerV4; _newPayloadV1Handler = newPayloadV1Handler; _forkchoiceUpdatedV1Handler = forkchoiceUpdatedV1Handler; _executionGetPayloadBodiesByHashV1Handler = executionGetPayloadBodiesByHashV1Handler; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs index 729abe4ce86..6fb18fb9103 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs @@ -46,6 +46,12 @@ public EngineRpcCapabilitiesProvider(ISpecProvider specProvider) _capabilities[nameof(IEngineRpcModule.engine_forkchoiceUpdatedV3)] = (spec.IsEip4844Enabled, spec.IsEip4844Enabled); _capabilities[nameof(IEngineRpcModule.engine_newPayloadV3)] = (spec.IsEip4844Enabled, spec.IsEip4844Enabled); #endregion + + #region Prague + _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.IsEip6110Enabled, spec.IsEip6110Enabled); + _capabilities[nameof(IEngineRpcModule.engine_forkchoiceUpdatedV4)] = (spec.IsEip6110Enabled, spec.IsEip6110Enabled); + _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.IsEip6110Enabled, spec.IsEip6110Enabled); + #endregion } return _capabilities; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs new file mode 100644 index 00000000000..3071c32f39a --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Specs; +using Nethermind.Logging; +using Nethermind.Merge.Plugin.BlockProduction; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Merge.Plugin.Handlers; + +/// +/// +/// engine_getpayloadv3 +/// +public class GetPayloadV4Handler : GetPayloadHandlerBase +{ + public GetPayloadV4Handler(IPayloadPreparationService payloadPreparationService, ISpecProvider specProvider, ILogManager logManager) : base( + 4, payloadPreparationService, specProvider, logManager) + { + } + + protected override GetPayloadV4Result GetPayloadResultFromBlock(IBlockProductionContext context) => + new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!)); +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs new file mode 100644 index 00000000000..468c4e9e392 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Threading.Tasks; +using Nethermind.Consensus.Producers; +using Nethermind.Core.Crypto; +using Nethermind.JsonRpc; +using Nethermind.JsonRpc.Modules; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Merge.Plugin; + +public partial interface IEngineRpcModule : IRpcModule +{ + + [JsonRpcMethod( + Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", + IsSharable = true, + IsImplemented = true)] + Task> engine_forkchoiceUpdatedV4(ForkchoiceStateV1 forkchoiceState, PayloadAttributes? payloadAttributes = null); + + [JsonRpcMethod( + Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", + IsSharable = true, + IsImplemented = true)] + Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload); + + [JsonRpcMethod( + Description = "Returns the most recent version of an execution payload and fees with respect to the transaction set contained by the mempool.", + IsSharable = true, + IsImplemented = true)] + public Task> engine_getPayloadV4(byte[] payloadId); +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs index 487fde057c8..abc216e523b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs @@ -323,6 +323,7 @@ public Task InitRpcModules() new GetPayloadV1Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new GetPayloadV2Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new GetPayloadV3Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), + new GetPayloadV4Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new NewPayloadHandler( _api.BlockValidator, _api.BlockTree, diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs index 7db0dfe4b12..6f20189718e 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs @@ -217,6 +217,7 @@ public async Task InitRpcModules() new GetPayloadV1Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new GetPayloadV2Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new GetPayloadV3Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), + new GetPayloadV4Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new NewPayloadHandler( _api.BlockValidator, _api.BlockTree, From ec51f7f3b753d80badad1c0155b57ce5d5b32717 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 3 Apr 2024 05:50:30 +0000 Subject: [PATCH 084/551] add back executionParloadV3 params to executionParloadV4 --- .../Data/IExecutionPayloadParams.cs | 7 ++++--- .../Nethermind.Merge.Plugin/EngineRpcModule.Cancun.cs | 2 +- .../Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs | 4 ++-- .../Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs index 3afb9a42338..2ea492b1dcf 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs @@ -19,13 +19,14 @@ public interface IExecutionPayloadParams public enum ValidationResult : byte { Success, Fail, Invalid }; -public class ExecutionPayloadV3Params : IExecutionPayloadParams +public class ExecutionPayloadParams : IExecutionPayloadParams + where TVersionedExecutionPayload : ExecutionPayload { - private readonly ExecutionPayloadV3 _executionPayload; + private readonly TVersionedExecutionPayload _executionPayload; private readonly byte[]?[] _blobVersionedHashes; private readonly Hash256? _parentBeaconBlockRoot; - public ExecutionPayloadV3Params(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) + public ExecutionPayloadParams(TVersionedExecutionPayload executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) { _executionPayload = executionPayload; _blobVersionedHashes = blobVersionedHashes; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Cancun.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Cancun.cs index 4a28ae4ac0d..cb2d46cfb07 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Cancun.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Cancun.cs @@ -19,7 +19,7 @@ public Task> engine_forkchoiceUpdatedV3 => ForkchoiceUpdated(forkchoiceState, payloadAttributes, EngineApiVersions.Cancun); public Task> engine_newPayloadV3(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) => - NewPayload(new ExecutionPayloadV3Params(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Cancun); + NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Cancun); public async Task> engine_getPayloadV3(byte[] payloadId) => await _getPayloadHandlerV3.HandleAsync(payloadId); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs index b4659093d83..63bf328117d 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs @@ -18,8 +18,8 @@ public partial class EngineRpcModule : IEngineRpcModule public Task> engine_forkchoiceUpdatedV4(ForkchoiceStateV1 forkchoiceState, PayloadAttributes? payloadAttributes = null) => ForkchoiceUpdated(forkchoiceState, payloadAttributes, EngineApiVersions.Cancun); - public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload) => - NewPayload(executionPayload, EngineApiVersions.Prague); + public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) => + NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Prague); public async Task> engine_getPayloadV4(byte[] payloadId) => await _getPayloadHandlerV4.HandleAsync(payloadId); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs index 468c4e9e392..a19c5f95295 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs @@ -23,7 +23,7 @@ public partial interface IEngineRpcModule : IRpcModule Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", IsSharable = true, IsImplemented = true)] - Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload); + Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot); [JsonRpcMethod( Description = "Returns the most recent version of an execution payload and fees with respect to the transaction set contained by the mempool.", From 04f881bca582e7521556403960f056d85047a2dc Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 3 Apr 2024 12:04:56 +0000 Subject: [PATCH 085/551] minor fixes --- .../Data/ExecutionPayloadV4.cs | 2 +- .../Data/GetPayloadV4Result.cs | 12 ++---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index 8b83a03568c..60a54b7c6cb 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -12,7 +12,7 @@ namespace Nethermind.Merge.Plugin.Data; /// /// Represents an object mapping the ExecutionPayloadV4 structure of the beacon chain spec. /// -public class ExecutionPayloadV4 : ExecutionPayload +public class ExecutionPayloadV4 : ExecutionPayloadV3 { public ExecutionPayloadV4() { } // Needed for tests diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs index 57c639098d8..2349362d7df 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs @@ -6,20 +6,12 @@ namespace Nethermind.Merge.Plugin.Data; -public class GetPayloadV4Result : GetPayloadV2Result +public class GetPayloadV4Result : GetPayloadV3Result { - public GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : base(block, blockFees) + public GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : base(block, blockFees, blobsBundle) { ExecutionPayload = new(block); - BlobsBundle = blobsBundle; } - public BlobsBundleV1 BlobsBundle { get; } - public override ExecutionPayloadV4 ExecutionPayload { get; } - - public bool ShouldOverrideBuilder { get; } - - public override string ToString() => - $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}}}"; } From b0a809f8350f95c343c5807766e1b164853db81e Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Fri, 5 Apr 2024 19:19:17 +0000 Subject: [PATCH 086/551] revert change --- .../Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs index 0cb1a84c1fe..ab1dd0b57dd 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs @@ -52,12 +52,4 @@ public override bool ValidateFork(ISpecProvider specProvider) => /// [JsonRequired] public override ulong? ExcessBlobGas { get; set; } - - - /// - /// Gets or sets as defined in - /// EIP-4788. - /// - [JsonRequired] - public override Hash256? ParentBeaconBlockRoot { get; set; } } From 1f5882514791befc04b27d35db1d5f6771ccba27 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 9 Apr 2024 12:52:28 +0530 Subject: [PATCH 087/551] add execution payload --- .../Data/ExecutionPayload.cs | 10 +++++++++- .../Data/ExecutionPayloadV4.cs | 13 ++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index 0c4ca463f72..a5c7b47ea54 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -99,6 +100,13 @@ public byte[][] Transactions public virtual Deposit[]? Deposits { get; set; } + /// + /// Gets or sets a collection of as defined in + /// EIP-7002. + /// + public virtual ValidatorExit[]? ValidatorExits { get; set; } + + /// /// Gets or sets as defined in /// EIP-4844. @@ -156,7 +164,7 @@ public virtual bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nul WithdrawalsRoot = Withdrawals is null ? null : new WithdrawalTrie(Withdrawals).RootHash, }; - block = new(header, transactions, Array.Empty(), Withdrawals, Deposits); + block = new(header, transactions, Array.Empty(), Withdrawals, Deposits, ValidatorExits); return true; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index 60a54b7c6cb..7025726ac94 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -6,6 +6,7 @@ using Nethermind.Core.Specs; using Nethermind.Int256; using Nethermind.State.Proofs; +using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Merge.Plugin.Data; @@ -19,6 +20,7 @@ public class ExecutionPayloadV4 : ExecutionPayloadV3 public ExecutionPayloadV4(Block block) : base(block) { Deposits = block.Deposits; + ValidatorExits = block.ValidatorExits; } public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = null) @@ -29,11 +31,13 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu } block!.Header.DepositsRoot = Deposits is null ? null : new DepositTrie(Deposits).RootHash; + block!.Header.ValidatorExitsRoot = ValidatorExits is null ? null : new ValidatorExitsTrie(ValidatorExits, false).RootHash; return true; } public override bool ValidateFork(ISpecProvider specProvider) => - specProvider.GetSpec(BlockNumber, Timestamp).IsEip6110Enabled; + specProvider.GetSpec(BlockNumber, Timestamp).IsEip6110Enabled + && specProvider.GetSpec(BlockNumber, Timestamp).IsEip7002Enabled; /// /// Gets or sets as defined in @@ -41,4 +45,11 @@ public override bool ValidateFork(ISpecProvider specProvider) => /// [JsonRequired] public override Deposit[]? Deposits { get; set; } + + /// + /// Gets or sets as defined in + /// EIP-7002. + /// + [JsonRequired] + public override ValidatorExit[]? ValidatorExits { get; set; } } From 752cd5fd0c04ead0696cae7834c77b1f0168fb89 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 9 Apr 2024 12:54:02 +0530 Subject: [PATCH 088/551] change root function --- .../Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index 7025726ac94..fc0b69f9cca 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -31,7 +31,7 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu } block!.Header.DepositsRoot = Deposits is null ? null : new DepositTrie(Deposits).RootHash; - block!.Header.ValidatorExitsRoot = ValidatorExits is null ? null : new ValidatorExitsTrie(ValidatorExits, false).RootHash; + block!.Header.ValidatorExitsRoot = ValidatorExits is null ? null : ValidatorExitsTrie.CalculateRoot(ValidatorExits); return true; } From 68aba28c12e6318dc4e546fa114e450b896b5047 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Tue, 9 Apr 2024 09:22:25 +0000 Subject: [PATCH 089/551] fix build issues --- .../Transactions/TxCertifierFilterTests.cs | 3 +- .../Transactions/TxPermissionFilterTest.cs | 1 + .../InitializeBlockchainAuRa.cs | 2 +- .../Nethermind.Db.Rocks/DbOnTheRocks.cs | 47 ------------------- .../AuRaMergeBlockProducerEnvFactory.cs | 2 +- .../InitializeBlockchainAuRaMerge.cs | 2 +- .../PruningScenariosTests.cs | 29 ------------ src/Nethermind/Nethermind.Trie/NodeStorage.cs | 6 ++- .../Nethermind.Trie/Pruning/TrieStore.cs | 15 +----- .../Nethermind.Trie/TrieStoreWithReadFlags.cs | 5 +- 10 files changed, 15 insertions(+), 97 deletions(-) diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs index 0012a876d9b..98ee43f0de1 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs @@ -156,7 +156,8 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, - TxProcessor); + TxProcessor, + null); } protected override Task AddBlocksOnStart() => Task.CompletedTask; diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs index 30635a59177..87706013ea2 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs @@ -298,6 +298,7 @@ protected override BlockProcessor CreateBlockProcessor() BlockTree, NullWithdrawalProcessor.Instance, TxProcessor, + null, PermissionBasedTxFilter); } diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs index 6883affb812..a50ef57416e 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs @@ -109,8 +109,8 @@ protected virtual AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter) _api.LogManager, _api.BlockTree!, NullWithdrawalProcessor.Instance, - CreateAuRaValidator(), _api.TransactionProcessor, + CreateAuRaValidator(), txFilter, GetGasLimitCalculator(), contractRewriter diff --git a/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs b/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs index b0f8c277457..6be2d3c4abe 100644 --- a/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs +++ b/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs @@ -431,21 +431,6 @@ protected virtual void BuildOptions(PerTableDbConfig dbConfig, Options opt // This reduces disk space utilization, but read of non-existent key will have to go through the database // instead of checking a bloom filter. options.SetOptimizeFiltersForHits(dbConfig.OptimizeFiltersForHits ? 1 : 0); - if (dbConfig.RowCacheSize > 0) - { - _rowCache = RocksDbSharp.Native.Instance.rocksdb_cache_create_lru(new UIntPtr(dbConfig.RowCacheSize.Value)); - _rocksDbNative.rocksdb_options_set_row_cache(options.Handle, _rowCache.Value); - } - - /* - * Multi-Threaded Compactions - * Compactions are needed to remove multiple copies of the same key that may occur if an application overwrites an existing key. Compactions also process deletions of keys. Compactions may occur in multiple threads if configured appropriately. - * The entire database is stored in a set of sstfiles. When a memtable is full, its content is written out to a file in Level-0 (L0). RocksDB removes duplicate and overwritten keys in the memtable when it is flushed to a file in L0. Some files are periodically read in and merged to form larger files - this is called compaction. - * The overall write throughput of an LSM database directly depends on the speed at which compactions can occur, especially when the data is stored in fast storage like SSD or RAM. RocksDB may be configured to issue concurrent compaction requests from multiple threads. It is observed that sustained write rates may increase by as much as a factor of 10 with multi-threaded compaction when the database is on SSDs, as compared to single-threaded compactions. - * TKS: Observed 500MB/s compared to ~100MB/s between multithreaded and single thread compactions on my machine (processor count is returning 12 for 6 cores with hyperthreading) - * TKS: CPU goes to insane 30% usage on idle - compacting only app - */ - options.SetMaxBackgroundCompactions(Environment.ProcessorCount); if (dbConfig.DisableCompression == true) { @@ -730,38 +715,6 @@ public byte[]? this[ReadOnlySpan key] } } - /// - /// iterator.Next() is about 10 to 20 times faster than iterator.Seek(). - /// Here we attempt to do that first. To prevent futile attempt some logic is added to approximately detect - /// if the requested key is too far from the current key and skip this entirely. - /// - /// - /// - /// - private bool TryCloseReadAhead(Iterator iterator, ReadOnlySpan key, out byte[]? result) - { - // Probably hash db. Can't really do this with hashdb. Even with batched trie visitor, its going to skip a lot. - if (key.Length <= 32) - { - result = null; - return false; - } - - iterator.Next(); - ReadOnlySpan currentKey = iterator.GetKeySpan(); - int compareResult = currentKey.SequenceCompareTo(key); - if (compareResult == 0) - { - result = iterator.Value(); - return true; // This happens A LOT. - } - - result = null; - if (compareResult > 0) - { - return false; - } - /// /// iterator.Next() is about 10 to 20 times faster than iterator.Seek(). /// Here we attempt to do that first. To prevent futile attempt some logic is added to approximately detect diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index e0fc325dc5c..df528019b15 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -78,7 +78,7 @@ protected override BlockProcessor CreateBlockProcessor( logManager ) ), - readOnlyTxProcessingEnv.TransactionProcessor); + readOnlyTxProcessingEnv.TransactionProcessor, null); } protected override TxPoolTxSource CreateTxPoolTxSource( diff --git a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs index 73f94ae560b..432ae7742d0 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs @@ -44,8 +44,8 @@ protected override AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter) _api.BlockTree!, new AuraWithdrawalProcessor( withdrawalContractFactory.Create(transactionProcessor!), _api.LogManager), - CreateAuRaValidator(), _api.TransactionProcessor!, + CreateAuRaValidator(), txFilter, GetGasLimitCalculator(), contractRewriter diff --git a/src/Nethermind/Nethermind.Trie.Test/PruningScenariosTests.cs b/src/Nethermind/Nethermind.Trie.Test/PruningScenariosTests.cs index 84be7bfd1d0..ca75c6df572 100644 --- a/src/Nethermind/Nethermind.Trie.Test/PruningScenariosTests.cs +++ b/src/Nethermind/Nethermind.Trie.Test/PruningScenariosTests.cs @@ -814,34 +814,5 @@ public void When_Reorg_OldValueIsNotRemoved() .VerifyAccountBalance(4, 100); } - - [Test] - public void When_Reorg_OldValueIsNotRemoved() - { - Reorganization.MaxDepth = 2; - - PruningContext.InMemoryAlwaysPrune - .SetAccountBalance(1, 100) - .SetAccountBalance(2, 100) - .Commit() - - .SetAccountBalance(3, 100) - .SetAccountBalance(4, 100) - .Commit() - - .SaveBranchingPoint("revert_main") - - .SetAccountBalance(4, 200) - .Commit() - - .RestoreBranchingPoint("revert_main") - - .Commit() - .Commit() - .Commit() - .Commit() - - .VerifyAccountBalance(4, 100); - } } } diff --git a/src/Nethermind/Nethermind.Trie/NodeStorage.cs b/src/Nethermind/Nethermind.Trie/NodeStorage.cs index d6d23178ba9..6f1291b2da9 100644 --- a/src/Nethermind/Nethermind.Trie/NodeStorage.cs +++ b/src/Nethermind/Nethermind.Trie/NodeStorage.cs @@ -139,7 +139,6 @@ private static Span GetHashBasedStoragePath(Span pathSpan, in ValueH return _keyValueStore.Get(GetHashBasedStoragePath(storagePathSpan, keccak), readFlags) ?? _keyValueStore.Get(GetHalfPathNodeStoragePathSpan(storagePathSpan, address, path, keccak), readFlags); } - } public bool KeyExists(Hash256? address, in TreePath path, in ValueHash256 keccak) { @@ -193,6 +192,8 @@ public void Flush() } } + public void Set(Hash256? address, in TreePath path, in ValueHash256 hash, byte[] toArray, WriteFlags writeFlags = WriteFlags.None) + => Set(address, path, hash, toArray, writeFlags); private class WriteBatch : INodeStorage.WriteBatch { private readonly IWriteBatch _writeBatch; @@ -224,5 +225,8 @@ public void Remove(Hash256? address, in TreePath path, in ValueHash256 keccak) // Only delete half path key. DO NOT delete hash based key. _writeBatch.Remove(GetHalfPathNodeStoragePathSpan(stackalloc byte[StoragePathLength], address, path, keccak)); } + + public void Set(Hash256? address, in TreePath path, in ValueHash256 currentNodeKeccak, byte[] toArray, WriteFlags writeFlags) + => Set(address, path, currentNodeKeccak, toArray, writeFlags); } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs b/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs index 59279a44faa..13b85ae3bdc 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs @@ -264,8 +264,6 @@ public readonly void Dispose() private Task _pruningTask = Task.CompletedTask; private readonly CancellationTokenSource _pruningTaskCancellationTokenSource = new(); - private long _reorgDepth = Reorganization.MaxDepth; - public TrieStore(IKeyValueStoreWithBatching? keyValueStore, ILogManager? logManager) : this(keyValueStore, No.Pruning, Pruning.Persist.EveryBlock, logManager) { @@ -289,15 +287,6 @@ public TrieStore( IPruningStrategy? pruningStrategy, IPersistenceStrategy? persistenceStrategy, ILogManager? logManager) - { - } - - public TrieStore( - INodeStorage? nodeStorage, - IPruningStrategy? pruningStrategy, - IPersistenceStrategy? persistenceStrategy, - ILogManager? logManager, - long? reorgDepthOverride = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _nodeStorage = nodeStorage ?? throw new ArgumentNullException(nameof(nodeStorage)); @@ -813,10 +802,10 @@ private void PruneCache(bool skipRecalculateMemory = false) keccak = node.GenerateKey(this.GetTrieStore(key.Address), ref path2, isRoot: true); if (keccak != key.Keccak) { - throw new InvalidOperationException($"Persisted {node} {newKeccak} != {keccak}"); + throw new InvalidOperationException($"Persisted {node} {key} != {keccak}"); } - node.Keccak = key.Keccak; + node.Keccak = keccak; } _dirtyNodes.Remove(key); diff --git a/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs b/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs index 956a2ec6457..7b4f3f472e0 100644 --- a/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs +++ b/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Trie.Pruning; @@ -19,12 +18,12 @@ public TrieStoreWithReadFlags(IScopedTrieStore implementation, ReadFlags flags) public void CommitNode(long blockNumber, NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None) { - _scopedTrieStoreImplementation.CommitNode(blockNumber, nodeCommitInfo, writeFlags); + _baseImplementation.CommitNode(blockNumber, nodeCommitInfo, writeFlags); } public void FinishBlockCommit(TrieType trieType, long blockNumber, TrieNode? root, WriteFlags writeFlags = WriteFlags.None) { - _scopedTrieStoreImplementation.FinishBlockCommit(trieType, blockNumber, root, writeFlags); + _baseImplementation.FinishBlockCommit(trieType, blockNumber, root, writeFlags); } public bool IsPersisted(in TreePath path, in ValueHash256 keccak) From 642b59fff12cf9654b4151daa83d3bbd6ba34f00 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 10 Apr 2024 13:24:02 +0530 Subject: [PATCH 090/551] add corresponding change from 6110 --- .../Messages/BlockErrorMessages.cs | 4 ++ .../Processing/BlockExtensions.cs | 2 +- .../Producers/BlockToProduce.cs | 6 +- .../Producers/PayloadAttributes.cs | 22 ++++++- .../Validators/BlockValidator.cs | 59 +++++++++++++++++++ src/Nethermind/Nethermind.Core/BlockHeader.cs | 7 ++- .../BlockProduction/PostMergeBlockProducer.cs | 2 +- .../Data/ExecutionPayload.cs | 4 +- .../Handlers/EngineRpcCapabilitiesProvider.cs | 6 +- .../OptimismPostMergeBlockProducer.cs | 2 +- .../Nethermind.Serialization.Rlp/RlpStream.cs | 3 + .../ChainSpecStyle/ChainParameters.cs | 2 + .../ChainSpecBasedSpecProvider.cs | 3 + .../ChainSpecStyle/ChainSpecLoader.cs | 17 +++++- .../Json/ChainSpecParamsJson.cs | 2 + .../Nethermind.Specs/Forks/17_Prague.cs | 1 + 16 files changed, 128 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index 982d3107791..fff5ffce6bf 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -3,6 +3,7 @@ using Nethermind.Core; using Nethermind.Crypto; +using Nethermind.Evm; namespace Nethermind.Consensus.Messages; public static class BlockErrorMessages @@ -118,4 +119,7 @@ public static string InvalidTxInBlock(int i) => "NegativeGasUsed: Cannot be negative."; public static string InvalidDepositsRoot(Core.Crypto.Hash256 expected, Core.Crypto.Hash256 actual) => $"InvalidDepositsRoot: expected {expected}, got {actual}"; + + public static string InvalidValidatorExitsRoot(Core.Crypto.Hash256 expected, Core.Crypto.Hash256 actual) => + $"InvalidValidatorExitsRoot: expected {expected}, got {actual}"; } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs index e12cc2baa15..e9c446fbe66 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs @@ -19,7 +19,7 @@ internal static class BlockExtensions public static Block CreateCopy(this Block block, BlockHeader header) => block is BlockToProduce blockToProduce ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals) - : new Block(header, block.Transactions, block.Uncles, block.Withdrawals, block.Deposits); + : new Block(header, block.Transactions, block.Uncles, block.Withdrawals, block.Deposits, block.ValidatorExits); public static IEnumerable GetTransactions(this Block block) => block is BlockToProduce blockToProduce diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs index 6f68fcdf417..cfd19244553 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using Nethermind.Core; +using Nethermind.Blockchain.ValidatorExit; //TODO: Redo clique block producer [assembly: InternalsVisibleTo("Nethermind.Consensus.Clique")] @@ -34,8 +35,9 @@ public BlockToProduce( IEnumerable transactions, IEnumerable uncles, IEnumerable? withdrawals = null, - IEnumerable? deposits = null) - : base(blockHeader, Array.Empty(), uncles, withdrawals, deposits) + IEnumerable? deposits = null, + IEnumerable? validatorExits = null) + : base(blockHeader, Array.Empty(), uncles, withdrawals, deposits, validatorExits) { Transactions = transactions; } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs index 58734204cbf..46fe7e465fc 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs @@ -12,6 +12,7 @@ using Nethermind.Core.Specs; using Nethermind.State.Proofs; using Nethermind.Trie; +using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Consensus.Producers; @@ -27,6 +28,8 @@ public class PayloadAttributes public Deposit[]? Deposits { get; set; } + public ValidatorExit[]? ValidatorExits { get; set; } + public Hash256? ParentBeaconBlockRoot { get; set; } public virtual long? GetGasLimit() => null; @@ -50,6 +53,11 @@ public string ToString(string indentation) sb.Append($", {nameof(Deposits)} count: {Deposits.Length}"); } + if (ValidatorExits is not null) + { + sb.Append($", {nameof(ValidatorExits)} count: {ValidatorExits.Length}"); + } + if (ParentBeaconBlockRoot is not null) { sb.Append($", {nameof(ParentBeaconBlockRoot)} : {ParentBeaconBlockRoot}"); @@ -80,6 +88,7 @@ protected virtual int ComputePayloadIdMembersSize() => + Address.Size // suggested fee recipient + (Withdrawals is null ? 0 : Keccak.Size) // withdrawals root hash + (Deposits is null ? 0 : Keccak.Size) // deposits root hash + + (ValidatorExits is null ? 0 : Keccak.Size) // validator exits root hash + (ParentBeaconBlockRoot is null ? 0 : Keccak.Size); // parent beacon block root protected static string ComputePayloadId(Span inputSpan) @@ -128,6 +137,15 @@ protected virtual int WritePayloadIdMembers(BlockHeader parentHeader, Span position += Keccak.Size; } + if (ValidatorExits is not null) + { + Hash256 validatorExitsRootHash = ValidatorExits.Length == 0 + ? PatriciaTree.EmptyTreeHash + : ValidatorExitsTrie.CalculateRoot(ValidatorExits); + validatorExitsRootHash.Bytes.CopyTo(inputSpan.Slice(position, Keccak.Size)); + position += Keccak.Size; + } + return position; } @@ -184,7 +202,7 @@ public static class PayloadAttributesExtensions public static int GetVersion(this PayloadAttributes executionPayload) => executionPayload switch { - { Deposits: not null } => EngineApiVersions.Prague, + { Deposits: not null, ValidatorExits: not null } => EngineApiVersions.Prague, { ParentBeaconBlockRoot: not null, Withdrawals: not null } => EngineApiVersions.Cancun, { Withdrawals: not null } => EngineApiVersions.Shanghai, _ => EngineApiVersions.Paris @@ -193,7 +211,7 @@ public static int GetVersion(this PayloadAttributes executionPayload) => public static int ExpectedEngineSpecVersion(this IReleaseSpec spec) => spec switch { - { IsEip6110Enabled: true } => EngineApiVersions.Prague, + { IsEip6110Enabled: true, IsEip7002Enabled: true } => EngineApiVersions.Prague, { IsEip4844Enabled: true } => EngineApiVersions.Cancun, { WithdrawalsEnabled: true } => EngineApiVersions.Shanghai, _ => EngineApiVersions.Paris diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 9ba1417e432..3213d24d52c 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -150,6 +150,9 @@ public bool ValidateSuggestedBlock(Block block, out string? errorMessage) if (!ValidateDeposits(block, spec, out _)) return false; + if (!ValidateValidatorExits(block, spec, out _)) + return false; + return true; } @@ -350,6 +353,46 @@ private bool ValidateDeposits(Block block, IReleaseSpec spec, out string? error) return true; } + public bool ValidateValidatorExits(Block block, out string error) => + ValidateValidatorExits(block, _specProvider.GetSpec(block.Header), out error); + + + private bool ValidateValidatorExits(Block block, IReleaseSpec spec, out string error) + { + if(spec.IsEip7002Enabled && block.ValidatorExits is null) + { + error = $"ValidatorExits cannot be null in block {block.Hash} when EIP-7002 activated."; + + if (_logger.IsWarn) _logger.Warn(error); + + return false; + } + + if (!spec.IsEip7002Enabled && block.ValidatorExits is not null) + { + error = $"ValidatorExits must be null in block {block.Hash} when EIP-7002 not activated."; + + if (_logger.IsWarn) _logger.Warn(error); + + return false; + } + + if(block.ValidatorExits is not null) + { + if (!ValidateValidatorExitsHashMatches(block, out Hash256 validatorExitsRoot)) + { + error = $"ValidatorExits root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.ValidatorExitsRoot}, got {validatorExitsRoot}"; + if (_logger.IsWarn) _logger.Warn($"ValidatorExits root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.ValidatorExitsRoot}, got {validatorExitsRoot}"); + + return false; + } + } + + error = null; + + return true; + } + private bool ValidateTransactions(Block block, IReleaseSpec spec, out string errorMessage) { Transaction[] transactions = block.Transactions; @@ -489,6 +532,22 @@ public static bool ValidateDepositsHashMatches(BlockHeader header, BlockBody bod return header.DepositsRoot == depositsRoot; } + private static bool ValidateValidatorExitsHashMatches(Block block, out Hash256? validatorExitsRoot) + { + return ValidateValidatorExitsHashMatches(block.Header, block.Body, out validatorExitsRoot); + } + + public static bool ValidateValidatorExitsHashMatches(BlockHeader header, BlockBody body, out Hash256? validatorExitsRoot) + { + validatorExitsRoot = null; + if (body.ValidatorExits == null) + return header.ValidatorExitsRoot == null; + + validatorExitsRoot = ValidatorExitsTrie.CalculateRoot(body.ValidatorExits); + + return header.ValidatorExitsRoot == validatorExitsRoot; + } + private static string Invalid(Block block) => $"Invalid block {block.ToString(Block.Format.FullHashAndNumber)}:"; } diff --git a/src/Nethermind/Nethermind.Core/BlockHeader.cs b/src/Nethermind/Nethermind.Core/BlockHeader.cs index dd0a98888e0..50133d6b020 100644 --- a/src/Nethermind/Nethermind.Core/BlockHeader.cs +++ b/src/Nethermind/Nethermind.Core/BlockHeader.cs @@ -79,7 +79,8 @@ public BlockHeader( public bool HasBody => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash) || (UnclesHash is not null && UnclesHash != Keccak.OfAnEmptySequenceRlp) || (WithdrawalsRoot is not null && WithdrawalsRoot != Keccak.EmptyTreeHash) - || (DepositsRoot is not null && DepositsRoot != Keccak.EmptyTreeHash); + || (DepositsRoot is not null && DepositsRoot != Keccak.EmptyTreeHash) + || (ValidatorExitsRoot is not null && ValidatorExitsRoot != Keccak.EmptyTreeHash); public bool HasTransactions => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash); @@ -124,6 +125,10 @@ public string ToString(string indent) { builder.AppendLine($"{indent}DepositsRoot: {DepositsRoot}"); } + if (ValidatorExitsRoot is not null) + { + builder.AppendLine($"{indent}ValidatorExitsRoot: {ValidatorExitsRoot}"); + } return builder.ToString(); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs index cbe098877c8..12443edc42f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs @@ -54,7 +54,7 @@ public virtual Block PrepareEmptyBlock(BlockHeader parent, PayloadAttributes? pa blockHeader.ReceiptsRoot = Keccak.EmptyTreeHash; blockHeader.TxRoot = Keccak.EmptyTreeHash; blockHeader.Bloom = Bloom.Empty; - var block = new Block(blockHeader, Array.Empty(), Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits); + var block = new Block(blockHeader, Array.Empty(), Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits, payloadAttributes?.ValidatorExits); if (_producingBlockLock.Wait(BlockProductionTimeout)) { diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index a5c7b47ea54..9d435001f27 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -218,7 +218,7 @@ public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, o return ValidationResult.Fail; } - if (spec.IsEip6110Enabled) + if (spec.IsEip6110Enabled || spec.IsEip7002Enabled) { error = "ExecutionPayloadV4 expected"; return ValidationResult.Fail; @@ -240,7 +240,7 @@ private int GetExecutionPayloadVersion() { return this switch { - { Deposits: not null } => 4, + { Deposits: not null, ValidatorExits: not null } => 4, { BlobGasUsed: not null } or { ExcessBlobGas: not null } or { ParentBeaconBlockRoot: not null } => 3, { Withdrawals: not null } => 2, _ => 1 diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs index 6fb18fb9103..5943b1d821a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs @@ -48,9 +48,9 @@ public EngineRpcCapabilitiesProvider(ISpecProvider specProvider) #endregion #region Prague - _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.IsEip6110Enabled, spec.IsEip6110Enabled); - _capabilities[nameof(IEngineRpcModule.engine_forkchoiceUpdatedV4)] = (spec.IsEip6110Enabled, spec.IsEip6110Enabled); - _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.IsEip6110Enabled, spec.IsEip6110Enabled); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.IsEip6110Enabled || spec.IsEip7002Enabled, spec.IsEip6110Enabled || spec.IsEip7002Enabled); + _capabilities[nameof(IEngineRpcModule.engine_forkchoiceUpdatedV4)] = (spec.IsEip6110Enabled || spec.IsEip7002Enabled, spec.IsEip6110Enabled || spec.IsEip7002Enabled); + _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.IsEip6110Enabled || spec.IsEip7002Enabled, spec.IsEip6110Enabled || spec.IsEip7002Enabled); #endregion } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs b/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs index aa321b77fb3..96d7f1373d4 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs @@ -59,7 +59,7 @@ public override Block PrepareEmptyBlock(BlockHeader parent, PayloadAttributes? p IEnumerable txs = _payloadAttrsTxSource.GetTransactions(parent, attrs.GasLimit, attrs); - Block block = new(blockHeader, txs, Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits); + Block block = new(blockHeader, txs, Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits ,payloadAttributes?.ValidatorExits); if (_producingBlockLock.Wait(BlockProductionTimeout)) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs index ee72ccdb37c..9379d728245 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs @@ -16,6 +16,7 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Int256; +using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Serialization.Rlp { @@ -28,6 +29,7 @@ public class RlpStream private static readonly ReceiptMessageDecoder _receiptDecoder = new(); private static readonly WithdrawalDecoder _withdrawalDecoder = new(); private static readonly DepositDecoder _depositDecoder = new(); + private static readonly ValidatorExitsDecoder _validatorExitsDecoder = new(); private static readonly LogEntryDecoder _logEntryDecoder = LogEntryDecoder.Instance; private readonly CappedArray _data; @@ -78,6 +80,7 @@ public void Encode(TxReceipt value) public void Encode(Withdrawal value) => _withdrawalDecoder.Encode(this, value); public void Encode(Deposit value) => _depositDecoder.Encode(this, value); + public void Encode(ValidatorExit value) => _validatorExitsDecoder.Encode(this, value); public void Encode(LogEntry value) { diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs index 7cd8e29c529..d8ed18a7e5d 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs @@ -119,6 +119,8 @@ public class ChainParameters public Address Eip4788ContractAddress { get; set; } public ulong? Eip6110TransitionTimestamp { get; set; } public Address Eip6110ContractAddress { get; set; } + public ulong? Eip7002TransitionTimestamp { get; set; } + public Address Eip7002ContractAddress { get; set; } #region EIP-4844 parameters /// diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index e8a89aca242..bf877a50cd8 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -255,6 +255,9 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip6110Enabled = (chainSpec.Parameters.Eip6110TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip6110ContractAddress = chainSpec.Parameters.Eip6110ContractAddress; + releaseSpec.IsEip7002Enabled = (chainSpec.Parameters.Eip7002TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; + releaseSpec.Eip7002ContractAddress = chainSpec.Parameters.Eip7002ContractAddress; + return releaseSpec; } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 185d0da07b0..b763123bb7a 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -15,6 +15,7 @@ using Nethermind.Int256; using Nethermind.Serialization.Json; using Nethermind.Specs.ChainSpecStyle.Json; +using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Specs.ChainSpecStyle; @@ -154,6 +155,8 @@ bool GetForInnerPathExistence(KeyValuePair o) => Eip6110TransitionTimestamp = chainSpecJson.Params.Eip6110TransitionTimestamp, Eip6110ContractAddress = chainSpecJson.Params.Eip6110ContractAddress, + Eip7002TransitionTimestamp = chainSpecJson.Params.Eip7002TransitionTimestamp, + Eip7002ContractAddress = chainSpecJson.Params.Eip7002ContractAddress, Eip1559FeeCollector = chainSpecJson.Params.Eip1559FeeCollector, Eip1559FeeCollectorTransition = chainSpecJson.Params.Eip1559FeeCollectorTransition, Eip1559BaseFeeMinValueTransition = chainSpecJson.Params.Eip1559BaseFeeMinValueTransition, @@ -426,13 +429,25 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.ParentBeaconBlockRoot = Keccak.Zero; } + bool IsEip7002Enabled = chainSpecJson.Params.Eip7002TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip7002TransitionTimestamp; + + if (IsEip7002Enabled) + { + genesisHeader.ValidatorExitsRoot = Keccak.EmptyTreeHash; + } + genesisHeader.AuRaStep = step; genesisHeader.AuRaSignature = auRaSignature; if (withdrawalsEnabled) - chainSpec.Genesis = new Block(genesisHeader, Array.Empty(), Array.Empty(), Array.Empty(), Array.Empty()); + { + if(IsEip7002Enabled) chainSpec.Genesis = new Block(genesisHeader, Array.Empty(), Array.Empty(), Array.Empty(), Array.Empty(), Array.Empty()); + else chainSpec.Genesis = new Block(genesisHeader, Array.Empty(), Array.Empty(), Array.Empty()); + } else + { chainSpec.Genesis = new Block(genesisHeader); + } } private static void LoadAllocations(ChainSpecJson chainSpecJson, ChainSpec chainSpec) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs index c14a113d1a1..2c37e3b7bc5 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs @@ -147,4 +147,6 @@ internal class ChainSpecParamsJson public ulong? Eip4844TargetBlobGasPerBlock { get; set; } public ulong? Eip6110TransitionTimestamp { get; set; } public Address Eip6110ContractAddress { get; set; } + public ulong? Eip7002TransitionTimestamp { get; set; } + public Address Eip7002ContractAddress { get; set; } } diff --git a/src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs b/src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs index 0ff13121544..14cd4b49a6c 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs @@ -15,6 +15,7 @@ protected Prague() { Name = "Prague"; IsEip6110Enabled = true; + IsEip7002Enabled = true; } public new static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Prague()); From bcb200ea5eddc58dbe545c5c14f0e279794e8f8d Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 10 Apr 2024 13:32:44 +0530 Subject: [PATCH 091/551] add exists in BlockForRpc --- .../Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs index 4d0d491ce83..b945be98656 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs @@ -13,6 +13,7 @@ using Nethermind.Serialization.Rlp; using System.Text.Json.Serialization; using System.Runtime.CompilerServices; +using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.JsonRpc.Modules.Eth; @@ -83,6 +84,8 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s Uncles = block.Uncles.Select(o => o.Hash); Withdrawals = block.Withdrawals; WithdrawalsRoot = block.Header.WithdrawalsRoot; + ValidatorExits = block.ValidatorExits; + ValidatorExitsRoot = block.Header.ValidatorExitsRoot; } public Address Author { get; set; } @@ -140,4 +143,10 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Hash256? ParentBeaconBlockRoot { get; set; } + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public IEnumerable? ValidatorExits { get; set; } + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public Hash256? ValidatorExitsRoot { get; set; } } From 3ada2826a3607838f0a63a2fbbedb7c52363952c Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 10 Apr 2024 14:21:58 +0530 Subject: [PATCH 092/551] add deposists in BlockForRPC --- .../Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs | 9 +++++++++ .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs index 4d0d491ce83..56a895620d1 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs @@ -83,6 +83,8 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s Uncles = block.Uncles.Select(o => o.Hash); Withdrawals = block.Withdrawals; WithdrawalsRoot = block.Header.WithdrawalsRoot; + Deposits = block.Deposits; + DepositsRoot = block.Header.DepositsRoot; } public Address Author { get; set; } @@ -140,4 +142,11 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Hash256? ParentBeaconBlockRoot { get; set; } + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public IEnumerable? Deposits { get; set; } + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public Hash256? DepositsRoot { get; set; } + } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 185d0da07b0..59d633c6374 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -426,11 +426,17 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.ParentBeaconBlockRoot = Keccak.Zero; } + bool isEip6110Enabled = chainSpecJson.Params.Eip6110TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip6110TransitionTimestamp; + if (isEip6110Enabled) + { + genesisHeader.DepositsRoot = Keccak.EmptyTreeHash; + } + genesisHeader.AuRaStep = step; genesisHeader.AuRaSignature = auRaSignature; if (withdrawalsEnabled) - chainSpec.Genesis = new Block(genesisHeader, Array.Empty(), Array.Empty(), Array.Empty(), Array.Empty()); + chainSpec.Genesis = new Block(genesisHeader, Array.Empty(), Array.Empty(), Array.Empty(), isEip6110Enabled ? Array.Empty(): null); else chainSpec.Genesis = new Block(genesisHeader); } From c9be5afc56eae4f3a5e56839ff09889b3041ab95 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 10 Apr 2024 21:32:00 +0000 Subject: [PATCH 093/551] - minor chainspecloader fixes - moving code from BlockValidator to BlockProcessor - fixing error discards --- .../AuraBlockProcessorTests.cs | 2 +- .../AuRaBlockProcessor.cs | 6 +- .../Withdrawals/NullWithdrawalProcessor.cs | 2 +- .../CliquePlugin.cs | 5 +- .../Deposits/DepositsProcessor.cs | 55 +++++++++++++++++++ .../Deposits/IDepositsProcessor.cs | 12 ++++ .../Messages/BlockErrorMessages.cs | 6 +- .../Processing/BlockProcessor.cs | 7 ++- .../Producers/BlockProducerEnvFactory.cs | 2 +- .../Validators/BlockValidator.cs | 35 ++---------- .../BlockProductionWithdrawalProcessor.cs | 2 +- .../Withdrawals/IWithdrawalProcessor.cs | 2 +- .../Withdrawals/WithdrawalProcessor.cs | 2 +- .../AuRaMergeEngineModuleTests.cs | 6 +- .../AuRaMergeBlockProcessor.cs | 2 +- .../AuRaMergeBlockProducerEnvFactory.cs | 2 +- .../Withdrawals/AuraWithdrawalProcessor.cs | 2 +- .../EngineModuleTests.HelperFunctions.cs | 2 +- .../EngineModuleTests.Setup.cs | 8 ++- .../OptimismBlockProcessor.cs | 7 ++- .../OptimismBlockProducerEnvFactory.cs | 5 +- .../ChainSpecStyle/ChainSpecLoader.cs | 6 ++ 22 files changed, 122 insertions(+), 56 deletions(-) create mode 100644 src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs index efb076ce2a8..1fde7c90d69 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs @@ -11,7 +11,7 @@ using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 42885a70090..7997dbef4f6 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -10,7 +10,7 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Crypto; @@ -40,6 +40,7 @@ public AuRaBlockProcessor( ILogManager logManager, IBlockTree blockTree, IWithdrawalProcessor withdrawalProcessor, + IDepositsProcessor depositsProcessor, IAuRaValidator? auRaValidator, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, @@ -53,7 +54,8 @@ public AuRaBlockProcessor( receiptStorage, NullWitnessCollector.Instance, logManager, - withdrawalProcessor) + withdrawalProcessor, + depositsProcessor) { _specProvider = specProvider; _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Withdrawals/NullWithdrawalProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Withdrawals/NullWithdrawalProcessor.cs index 24f84f52ba2..62684f460fc 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Withdrawals/NullWithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Withdrawals/NullWithdrawalProcessor.cs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core; using Nethermind.Core.Specs; diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index c416e75cea0..76698a8f5ea 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -13,7 +13,7 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core.Attributes; using Nethermind.Db; using Nethermind.JsonRpc.Modules; @@ -108,7 +108,8 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd NullReceiptStorage.Instance, NullWitnessCollector.Instance, getFromApi.LogManager, - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager))); + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager)), + new DepositsProcessor(getFromApi.LogManager)); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( readOnlyBlockTree, diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs new file mode 100644 index 00000000000..37c8f9e6e67 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs @@ -0,0 +1,55 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Logging; +using Nethermind.Serialization.Rlp; +using Nethermind.State; +using Nethermind.State.Proofs; + +namespace Nethermind.Consensus.Deposits; + +public class DepositsProcessor : IDepositsProcessor +{ + private readonly ILogger _logger; + + public DepositsProcessor(ILogManager logManager) + { + ArgumentNullException.ThrowIfNull(logManager); + + _logger = logManager.GetClassLogger(); + } + + public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) + { + if (!spec.IsEip6110Enabled) + return; + + + if (block.Deposits is not null) + { + List depositList = []; + for (int i = 0; i < block.Transactions.Length; i++) + { + foreach (var log in receipts[i].Logs) + { + if (log.LoggersAddress == spec.Eip6110ContractAddress) + { + var depositDecoder = new DepositDecoder(); + Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); + depositList.Add(deposit); + } + } + } + + block.Header.DepositsRoot = depositList.Count == 0 + ? Keccak.EmptyTreeHash + : new DepositTrie(block.Deposits!).RootHash; + } + + } +} diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs new file mode 100644 index 00000000000..d774a852658 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Specs; + +namespace Nethermind.Consensus.Deposits; + +public interface IDepositsProcessor +{ + void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec); +} diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index 982d3107791..3b0bbd4f4ab 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Core.Crypto; using Nethermind.Crypto; namespace Nethermind.Consensus.Messages; @@ -116,6 +117,7 @@ public static string InvalidTxInBlock(int i) => public const string NegativeGasUsed = "NegativeGasUsed: Cannot be negative."; - public static string InvalidDepositsRoot(Core.Crypto.Hash256 expected, Core.Crypto.Hash256 actual) => - $"InvalidDepositsRoot: expected {expected}, got {actual}"; + public static string MissingDeposits => "Deposits cannot be null in block when EIP-6110 activated."; + public static string DepositsNotEnabled => "Deposits must be null in block when EIP-6110 not activated."; + public static string InvalidDepositsRoot(Hash256 expected, Hash256 actual) => $"Deposits root hash mismatch in block: expected {expected}, got {actual}"; } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 6500dc50750..1f2a33a9914 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -11,7 +11,7 @@ using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -39,7 +39,7 @@ public partial class BlockProcessor : IBlockProcessor private readonly IBlockValidator _blockValidator; private readonly IRewardCalculator _rewardCalculator; private readonly IBlockProcessor.IBlockTransactionsExecutor _blockTransactionsExecutor; - + private readonly IDepositsProcessor _depositsProcessor; private const int MaxUncommittedBlocks = 64; /// @@ -58,6 +58,7 @@ public BlockProcessor( IWitnessCollector? witnessCollector, ILogManager? logManager, IWithdrawalProcessor? withdrawalProcessor = null, + IDepositsProcessor? depositsProcessor = null, IReceiptsRootCalculator? receiptsRootCalculator = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); @@ -70,6 +71,7 @@ public BlockProcessor( _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); _receiptsRootCalculator = receiptsRootCalculator ?? ReceiptsRootCalculator.Instance; + _depositsProcessor = depositsProcessor ?? new DepositsProcessor(logManager); _beaconBlockRootHandler = new BeaconBlockRootHandler(); ReceiptsTracer = new BlockReceiptsTracer(); @@ -248,6 +250,7 @@ protected virtual TxReceipt[] ProcessBlock( block.Header.ReceiptsRoot = _receiptsRootCalculator.GetReceiptsRoot(receipts, spec, block.ReceiptsRoot); ApplyMinerRewards(block, blockTracer, spec); _withdrawalProcessor.ProcessWithdrawals(block, spec); + _depositsProcessor.ProcessDeposits(block, receipts, spec); ReceiptsTracer.EndBlockTrace(); _stateProvider.Commit(spec); diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index 3a4f595ca23..e5b685e236e 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -9,7 +9,7 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core.Specs; using Nethermind.Logging; using Nethermind.State; diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 9ba1417e432..fa5923d200a 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text; using Nethermind.Blockchain; @@ -147,7 +148,7 @@ public bool ValidateSuggestedBlock(Block block, out string? errorMessage) if (!ValidateWithdrawals(block, spec, out errorMessage)) return false; - if (!ValidateDeposits(block, spec, out _)) + if (!ValidateDeposits(block, spec, out errorMessage)) return false; return true; @@ -239,32 +240,6 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B } } - if (suggestedBlock.Deposits is not null) - { - List depositList = []; - for (int i = 0; i < processedBlock.Transactions.Length; i++) - { - foreach (var log in receipts[i].Logs) - { - if (log.LoggersAddress == spec.Eip6110ContractAddress) - { - var depositDecoder = new DepositDecoder(); - Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); - depositList.Add(deposit); - } - } - } - - Hash256 expectedDepositsRoot = suggestedBlock.Header.DepositsRoot; - Hash256 actualDepositsRoot = new DepositTrie(depositList.ToArray()).RootHash; - if (actualDepositsRoot != expectedDepositsRoot) - { - if (_logger.IsWarn) _logger.Error($"- deposits root : expected {expectedDepositsRoot}, got {actualDepositsRoot}"); - error = error ?? BlockErrorMessages.InvalidDepositsRoot(expectedDepositsRoot, actualDepositsRoot); - } - } - - if (suggestedBlock.ExtraData is not null) { if (_logger.IsWarn) _logger.Warn($"- block extra data : {suggestedBlock.ExtraData.ToHexString()}, UTF8: {Encoding.UTF8.GetString(suggestedBlock.ExtraData)}"); @@ -318,7 +293,7 @@ private bool ValidateDeposits(Block block, IReleaseSpec spec, out string? error) { if (spec.IsEip6110Enabled && block.Deposits is null) { - error = $"Deposits cannot be null in block {block.Hash} when EIP-6110 activated."; + error = BlockErrorMessages.MissingDeposits; if (_logger.IsWarn) _logger.Warn(error); @@ -327,7 +302,7 @@ private bool ValidateDeposits(Block block, IReleaseSpec spec, out string? error) if (!spec.IsEip6110Enabled && block.Deposits is not null) { - error = $"Deposits must be null in block {block.Hash} when EIP-6110 not activated."; + error = BlockErrorMessages.DepositsNotEnabled; if (_logger.IsWarn) _logger.Warn(error); @@ -338,7 +313,7 @@ private bool ValidateDeposits(Block block, IReleaseSpec spec, out string? error) { if (!ValidateDepositsHashMatches(block, out Hash256 depositsRoot)) { - error = $"Deposits root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.DepositsRoot}, got {depositsRoot}"; + error = BlockErrorMessages.InvalidDepositsRoot(block.Header.DepositsRoot, depositsRoot); if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.DepositsRoot}, got {depositsRoot}"); return false; diff --git a/src/Nethermind/Nethermind.Consensus/Withdrawals/BlockProductionWithdrawalProcessor.cs b/src/Nethermind/Nethermind.Consensus/Withdrawals/BlockProductionWithdrawalProcessor.cs index c03f0702002..c630b6e0f61 100644 --- a/src/Nethermind/Nethermind.Consensus/Withdrawals/BlockProductionWithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Withdrawals/BlockProductionWithdrawalProcessor.cs @@ -7,7 +7,7 @@ using Nethermind.Core.Specs; using Nethermind.State.Proofs; -namespace Nethermind.Consensus.Withdrawals; +namespace Nethermind.Consensus.Deposits; public class BlockProductionWithdrawalProcessor : IWithdrawalProcessor { diff --git a/src/Nethermind/Nethermind.Consensus/Withdrawals/IWithdrawalProcessor.cs b/src/Nethermind/Nethermind.Consensus/Withdrawals/IWithdrawalProcessor.cs index 5909ba1f220..0bdccd7292c 100644 --- a/src/Nethermind/Nethermind.Consensus/Withdrawals/IWithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Withdrawals/IWithdrawalProcessor.cs @@ -4,7 +4,7 @@ using Nethermind.Core; using Nethermind.Core.Specs; -namespace Nethermind.Consensus.Withdrawals; +namespace Nethermind.Consensus.Deposits; public interface IWithdrawalProcessor { diff --git a/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs b/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs index c9fe1bddde3..a62d9f0e418 100644 --- a/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs @@ -7,7 +7,7 @@ using Nethermind.Logging; using Nethermind.State; -namespace Nethermind.Consensus.Withdrawals; +namespace Nethermind.Consensus.Deposits; public class WithdrawalProcessor : IWithdrawalProcessor { diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 8a8d3d562fe..815097b65b0 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -11,6 +11,7 @@ using Nethermind.Consensus.AuRa.InitializationSteps; using Nethermind.Consensus.AuRa.Validators; using Nethermind.Consensus.Comparers; +using Nethermind.Consensus.Deposits; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; using Nethermind.Consensus.Rewards; @@ -122,6 +123,8 @@ protected override IBlockProcessor CreateBlockProcessor() LogManager ); + DepositsProcessor depositsProcessor = new(LogManager); + BlockValidator = CreateBlockValidator(); IBlockProcessor processor = new BlockProcessor( SpecProvider, @@ -132,7 +135,8 @@ protected override IBlockProcessor CreateBlockProcessor() ReceiptStorage, NullWitnessCollector.Instance, LogManager, - WithdrawalProcessor); + WithdrawalProcessor, + depositsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 44d181f7d4d..40947808aa5 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -9,7 +9,7 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Evm.Tracing; diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index 7f8c59775da..4ef3bee2575 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -72,7 +72,7 @@ protected override BlockProcessor CreateBlockProcessor( receiptStorage, logManager, _blockTree, - new Consensus.Withdrawals.BlockProductionWithdrawalProcessor( + new Consensus.Deposits.BlockProductionWithdrawalProcessor( new AuraWithdrawalProcessor( withdrawalContractFactory.Create(readOnlyTxProcessingEnv.TransactionProcessor), logManager diff --git a/src/Nethermind/Nethermind.Merge.AuRa/Withdrawals/AuraWithdrawalProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/Withdrawals/AuraWithdrawalProcessor.cs index 85776645e9a..36273703c35 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/Withdrawals/AuraWithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/Withdrawals/AuraWithdrawalProcessor.cs @@ -4,7 +4,7 @@ using System; using System.Numerics; using Nethermind.Blockchain; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core; using Nethermind.Core.Collections; using Nethermind.Core.Specs; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index 42df50543de..a8f02631ea2 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -22,7 +22,7 @@ using Nethermind.State; using Nethermind.Core.Specs; using Nethermind.Consensus.BeaconBlockRoot; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core.Test.Blockchain; namespace Nethermind.Merge.Plugin.Test diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index b6e538bee8a..691bedbf2d0 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -15,7 +15,7 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -152,6 +152,8 @@ public class MergeTestBlockchain : TestBlockchain public IWithdrawalProcessor? WithdrawalProcessor { get; set; } + public IDepositsProcessor? DepositsProcessor { get; set; } + public ISyncPeerPool SyncPeerPool { get; set; } protected int _blockProcessingThrottle = 0; @@ -231,6 +233,7 @@ protected override IBlockProcessor CreateBlockProcessor() { BlockValidator = CreateBlockValidator(); WithdrawalProcessor = new WithdrawalProcessor(State, LogManager); + DepositsProcessor = new DepositsProcessor(LogManager); IBlockProcessor processor = new BlockProcessor( SpecProvider, BlockValidator, @@ -240,7 +243,8 @@ protected override IBlockProcessor CreateBlockProcessor() ReceiptStorage, NullWitnessCollector.Instance, LogManager, - WithdrawalProcessor); + WithdrawalProcessor, + DepositsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index f289c36f041..6a7efcb14ea 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -6,7 +6,7 @@ using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -31,9 +31,10 @@ public OptimismBlockProcessor( ILogManager? logManager, IOPConfigHelper opConfigHelper, Create2DeployerContractRewriter contractRewriter, - IWithdrawalProcessor? withdrawalProcessor = null) + IWithdrawalProcessor? withdrawalProcessor = null, + IDepositsProcessor? depositsProcessor = null) : base(specProvider, blockValidator, rewardCalculator, blockTransactionsExecutor, - stateProvider, receiptStorage, witnessCollector, logManager, withdrawalProcessor, OptimismReceiptsRootCalculator.Instance) + stateProvider, receiptStorage, witnessCollector, logManager, withdrawalProcessor, depositsProcessor, OptimismReceiptsRootCalculator.Instance) { ArgumentNullException.ThrowIfNull(stateProvider); _contractRewriter = contractRewriter; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs index 42df6a18aa3..a45f6c212b3 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs @@ -10,7 +10,7 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Withdrawals; +using Nethermind.Consensus.Deposits; using Nethermind.Core.Specs; using Nethermind.Logging; using Nethermind.Specs.ChainSpecStyle; @@ -91,6 +91,7 @@ protected override BlockProcessor CreateBlockProcessor( logManager, _specHelper, new Create2DeployerContractRewriter(_specHelper, _specProvider, _blockTree), - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager))); + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager)), + new DepositsProcessor(logManager)); } } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 185d0da07b0..f1745cc94ea 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -410,9 +410,13 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.TxRoot = Keccak.EmptyTreeHash; genesisHeader.BaseFeePerGas = baseFee; bool withdrawalsEnabled = chainSpecJson.Params.Eip4895TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4895TransitionTimestamp; + bool depositsEnabled = chainSpecJson.Params.Eip6110TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip6110TransitionTimestamp; if (withdrawalsEnabled) genesisHeader.WithdrawalsRoot = Keccak.EmptyTreeHash; + if(depositsEnabled) + genesisHeader.DepositsRoot = Keccak.EmptyTreeHash; + bool isEip4844Enabled = chainSpecJson.Params.Eip4844TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4844TransitionTimestamp; if (isEip4844Enabled) { @@ -430,6 +434,8 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.AuRaSignature = auRaSignature; if (withdrawalsEnabled) + chainSpec.Genesis = new Block(genesisHeader, Array.Empty(), Array.Empty(), Array.Empty()); + if (depositsEnabled) chainSpec.Genesis = new Block(genesisHeader, Array.Empty(), Array.Empty(), Array.Empty(), Array.Empty()); else chainSpec.Genesis = new Block(genesisHeader); From 4018745eac94c3107c09a4a1cd2225dd349aaf5d Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 10 Apr 2024 22:18:44 +0000 Subject: [PATCH 094/551] fix build issues --- .../AuraBlockProcessorTests.cs | 1 + .../AuRaContractGasLimitOverrideTests.cs | 2 ++ .../Transactions/TxCertifierFilterTests.cs | 2 ++ .../Transactions/TxPermissionFilterTest.cs | 2 ++ .../Deposits/NullDepositsProcessor.cs | 17 +++++++++++++++++ .../InitializeBlockchainAuRa.cs | 2 ++ .../StartBlockProducerAuRa.cs | 2 ++ .../AuRaMergeBlockProcessor.cs | 2 ++ .../AuRaMergeBlockProducerEnvFactory.cs | 1 + .../InitializeBlockchainAuRaMerge.cs | 2 ++ 10 files changed, 33 insertions(+) create mode 100644 src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs index 1fde7c90d69..f260952652f 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs @@ -160,6 +160,7 @@ void Process(AuRaBlockProcessor auRaBlockProcessor, int blockNumber, Hash256 sta LimboLogs.Instance, Substitute.For(), new WithdrawalProcessor(stateProvider, LimboLogs.Instance), + new DepositsProcessor(LimboLogs.Instance), null, txFilter, contractRewriter: contractRewriter); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs index 2fc2439574b..eb7383a4a83 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs @@ -10,6 +10,7 @@ using Nethermind.Consensus; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Contracts; +using Nethermind.Consensus.AuRa.Depositss; using Nethermind.Consensus.AuRa.Withdrawals; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; @@ -100,6 +101,7 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, + NullDepositsProcessor.Instance, null, null, GasLimitCalculator as AuRaContractGasLimitOverride); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs index 594d365cb23..66132337e6e 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs @@ -8,6 +8,7 @@ using Nethermind.AuRa.Test.Contract; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Contracts; +using Nethermind.Consensus.AuRa.Depositss; using Nethermind.Consensus.AuRa.Transactions; using Nethermind.Consensus.AuRa.Withdrawals; using Nethermind.Consensus.Processing; @@ -156,6 +157,7 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, + NullDepositsProcessor.Instance, null ); } diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs index 2a43f1bd7ab..702c3500de1 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs @@ -30,6 +30,7 @@ using Nethermind.TxPool; using NSubstitute; using NUnit.Framework; +using Nethermind.Consensus.AuRa.Depositss; namespace Nethermind.AuRa.Test.Transactions; @@ -297,6 +298,7 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, + NullDepositsProcessor.Instance, null, PermissionBasedTxFilter); } diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs new file mode 100644 index 00000000000..0d4e52d6aee --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs @@ -0,0 +1,17 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Consensus.Deposits; +using Nethermind.Core; +using Nethermind.Core.Specs; + +namespace Nethermind.Consensus.AuRa.Depositss; + +public class NullDepositsProcessor : IDepositsProcessor +{ + public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) + { + } + + public static IDepositsProcessor Instance { get; } = new NullDepositsProcessor(); +} diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs index 2a13fb695ca..37c68b7f224 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs @@ -13,6 +13,7 @@ using Nethermind.Consensus.AuRa.Config; using Nethermind.Consensus.AuRa.Contracts; using Nethermind.Consensus.AuRa.Contracts.DataStore; +using Nethermind.Consensus.AuRa.Depositss; using Nethermind.Consensus.AuRa.Rewards; using Nethermind.Consensus.AuRa.Services; using Nethermind.Consensus.AuRa.Transactions; @@ -109,6 +110,7 @@ protected virtual AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter) _api.LogManager, _api.BlockTree!, NullWithdrawalProcessor.Instance, + NullDepositsProcessor.Instance, CreateAuRaValidator(), txFilter, GetGasLimitCalculator(), diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs index 2a6cf3e083d..bb3af5cc27d 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs @@ -13,6 +13,7 @@ using Nethermind.Consensus.AuRa.Config; using Nethermind.Consensus.AuRa.Contracts; using Nethermind.Consensus.AuRa.Contracts.DataStore; +using Nethermind.Consensus.AuRa.Depositss; using Nethermind.Consensus.AuRa.Transactions; using Nethermind.Consensus.AuRa.Validators; using Nethermind.Consensus.AuRa.Withdrawals; @@ -157,6 +158,7 @@ private BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv changeableTx _api.LogManager, changeableTxProcessingEnv.BlockTree, NullWithdrawalProcessor.Instance, + NullDepositsProcessor.Instance, _validator, auRaTxFilter, CreateGasLimitCalculator(_api) as AuRaContractGasLimitOverride, diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 40947808aa5..780a8738108 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -30,6 +30,7 @@ public AuRaMergeBlockProcessor( ILogManager logManager, IBlockTree blockTree, IWithdrawalProcessor withdrawalProcessor, + IDepositsProcessor depositsProcessor, IAuRaValidator? validator, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, @@ -44,6 +45,7 @@ public AuRaMergeBlockProcessor( logManager, blockTree, withdrawalProcessor, + depositsProcessor, validator, txFilter, gasLimitOverride, diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index 4ef3bee2575..07e93bd7fed 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -78,6 +78,7 @@ protected override BlockProcessor CreateBlockProcessor( logManager ) ), + new Consensus.Deposits.DepositsProcessor(logManager), null); } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs index e85eb2b5799..b755e0715dc 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs @@ -5,6 +5,7 @@ using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.InitializationSteps; using Nethermind.Consensus.AuRa.Validators; +using Nethermind.Consensus.Deposits; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Transactions; using Nethermind.Core; @@ -44,6 +45,7 @@ protected override AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter) _api.BlockTree!, new AuraWithdrawalProcessor( withdrawalContractFactory.Create(transactionProcessor!), _api.LogManager), + new DepositsProcessor(_api.LogManager), CreateAuRaValidator(), txFilter, GetGasLimitCalculator(), From 685617de397b0d2f48ff0cb639b1c1d9a26c826d Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Sun, 14 Apr 2024 03:21:28 +0100 Subject: [PATCH 095/551] minor fix --- .../Deposits/NullDepositsProcessor.cs | 5 +++ .../Deposits/DepositsProcessor.cs | 31 ++++++++++--------- .../Deposits/IDepositsProcessor.cs | 3 ++ .../Nethermind.Core.Test/Builders/TestItem.cs | 7 +++++ 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs index 0d4e52d6aee..31395692e33 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs @@ -4,6 +4,7 @@ using Nethermind.Consensus.Deposits; using Nethermind.Core; using Nethermind.Core.Specs; +using System.Collections.Generic; namespace Nethermind.Consensus.AuRa.Depositss; @@ -13,5 +14,9 @@ public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec { } + public void ProcessDeposits(Block block, IEnumerable deposits, IReleaseSpec spec) + { + } + public static IDepositsProcessor Instance { get; } = new NullDepositsProcessor(); } diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs index 37c8f9e6e67..9ed77b017b2 100644 --- a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs @@ -3,6 +3,8 @@ using System; using System.Collections.Generic; +using System.Linq; +using Microsoft.IdentityModel.Tokens; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -30,26 +32,27 @@ public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec return; - if (block.Deposits is not null) + List depositList = []; + for (int i = 0; i < block.Transactions.Length; i++) { - List depositList = []; - for (int i = 0; i < block.Transactions.Length; i++) + foreach (var log in receipts[i].Logs) { - foreach (var log in receipts[i].Logs) + if (log.LoggersAddress == spec.Eip6110ContractAddress) { - if (log.LoggersAddress == spec.Eip6110ContractAddress) - { - var depositDecoder = new DepositDecoder(); - Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); - depositList.Add(deposit); - } + var depositDecoder = new DepositDecoder(); + Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); + depositList.Add(deposit); } } - - block.Header.DepositsRoot = depositList.Count == 0 - ? Keccak.EmptyTreeHash - : new DepositTrie(block.Deposits!).RootHash; } + ProcessDeposits(block, depositList, spec); + } + + public void ProcessDeposits(Block block, IEnumerable deposits, IReleaseSpec spec) + { + block.Header.DepositsRoot = deposits.IsNullOrEmpty() + ? Keccak.EmptyTreeHash + : new DepositTrie(deposits.ToArray()!).RootHash; } } diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs index d774a852658..5e1c61f75bf 100644 --- a/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs @@ -3,10 +3,13 @@ using Nethermind.Core; using Nethermind.Core.Specs; +using Nethermind.Serialization.Rlp; +using System.Collections.Generic; namespace Nethermind.Consensus.Deposits; public interface IDepositsProcessor { void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec); + void ProcessDeposits(Block block, IEnumerable deposits, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index a653619f397..bd50fc74e4a 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -99,6 +99,13 @@ public static Hash256 KeccakFromNumber(int i) public static Withdrawal WithdrawalE_5Eth = new() { Address = AddressE, Index = 5, ValidatorIndex = 2005, AmountInGwei = 5_000_000_000 }; public static Withdrawal WithdrawalF_6Eth = new() { Address = AddressF, Index = 6, ValidatorIndex = 2006, AmountInGwei = 6_000_000_000 }; + public static Deposit DepositA_1Eth = new() { Index = 1, PubKey = PublicKeyA.Bytes, Amount = 1_000_000_000, WithdrawalCredentials = AddressA.Bytes, Signature = KeccakA.Bytes.ToArray()}; + public static Deposit DepositB_2Eth = new() { Index = 2, PubKey = PublicKeyB.Bytes, Amount = 2_000_000_000, WithdrawalCredentials = AddressB.Bytes, Signature = KeccakB.Bytes.ToArray()}; + public static Deposit DepositC_3Eth = new() { Index = 3, PubKey = PublicKeyC.Bytes, Amount = 3_000_000_000, WithdrawalCredentials = AddressC.Bytes, Signature = KeccakC.Bytes.ToArray()}; + public static Deposit DepositD_4Eth = new() { Index = 4, PubKey = PublicKeyD.Bytes, Amount = 4_000_000_000, WithdrawalCredentials = AddressD.Bytes, Signature = KeccakD.Bytes.ToArray()}; + public static Deposit DepositE_5Eth = new() { Index = 5, PubKey = PublicKeyE.Bytes, Amount = 5_000_000_000, WithdrawalCredentials = AddressE.Bytes, Signature = KeccakE.Bytes.ToArray()}; + public static Deposit DepositF_6Eth = new() { Index = 6, PubKey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray()}; + public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); public static IPEndPoint IPEndPointC = IPEndPoint.Parse("10.0.0.3"); From f8e3302ea8231a568a11a4caf8f751df94bdf93f Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 15 Apr 2024 12:08:07 +0530 Subject: [PATCH 096/551] format files --- .../Validators/BlockValidator.cs | 6 +++--- .../Nethermind.Core.Test/Builders/TestItem.cs | 12 ++++++------ .../EngineModuleTests.V3.cs | 2 +- .../OptimismPostMergeBlockProducer.cs | 2 +- .../Nethermind.Serialization.Rlp/BlockDecoder.cs | 4 ++-- .../ChainSpecStyle/ChainSpecLoader.cs | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 974b449e960..678cc714dd7 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -331,10 +331,10 @@ private bool ValidateDeposits(Block block, IReleaseSpec spec, out string? error) public bool ValidateValidatorExits(Block block, out string error) => ValidateValidatorExits(block, _specProvider.GetSpec(block.Header), out error); - + private bool ValidateValidatorExits(Block block, IReleaseSpec spec, out string error) { - if(spec.IsEip7002Enabled && block.ValidatorExits is null) + if (spec.IsEip7002Enabled && block.ValidatorExits is null) { error = $"ValidatorExits cannot be null in block {block.Hash} when EIP-7002 activated."; @@ -352,7 +352,7 @@ private bool ValidateValidatorExits(Block block, IReleaseSpec spec, out string e return false; } - if(block.ValidatorExits is not null) + if (block.ValidatorExits is not null) { if (!ValidateValidatorExitsHashMatches(block, out Hash256 validatorExitsRoot)) { diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index bd50fc74e4a..45b92bb4590 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -99,12 +99,12 @@ public static Hash256 KeccakFromNumber(int i) public static Withdrawal WithdrawalE_5Eth = new() { Address = AddressE, Index = 5, ValidatorIndex = 2005, AmountInGwei = 5_000_000_000 }; public static Withdrawal WithdrawalF_6Eth = new() { Address = AddressF, Index = 6, ValidatorIndex = 2006, AmountInGwei = 6_000_000_000 }; - public static Deposit DepositA_1Eth = new() { Index = 1, PubKey = PublicKeyA.Bytes, Amount = 1_000_000_000, WithdrawalCredentials = AddressA.Bytes, Signature = KeccakA.Bytes.ToArray()}; - public static Deposit DepositB_2Eth = new() { Index = 2, PubKey = PublicKeyB.Bytes, Amount = 2_000_000_000, WithdrawalCredentials = AddressB.Bytes, Signature = KeccakB.Bytes.ToArray()}; - public static Deposit DepositC_3Eth = new() { Index = 3, PubKey = PublicKeyC.Bytes, Amount = 3_000_000_000, WithdrawalCredentials = AddressC.Bytes, Signature = KeccakC.Bytes.ToArray()}; - public static Deposit DepositD_4Eth = new() { Index = 4, PubKey = PublicKeyD.Bytes, Amount = 4_000_000_000, WithdrawalCredentials = AddressD.Bytes, Signature = KeccakD.Bytes.ToArray()}; - public static Deposit DepositE_5Eth = new() { Index = 5, PubKey = PublicKeyE.Bytes, Amount = 5_000_000_000, WithdrawalCredentials = AddressE.Bytes, Signature = KeccakE.Bytes.ToArray()}; - public static Deposit DepositF_6Eth = new() { Index = 6, PubKey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray()}; + public static Deposit DepositA_1Eth = new() { Index = 1, PubKey = PublicKeyA.Bytes, Amount = 1_000_000_000, WithdrawalCredentials = AddressA.Bytes, Signature = KeccakA.Bytes.ToArray() }; + public static Deposit DepositB_2Eth = new() { Index = 2, PubKey = PublicKeyB.Bytes, Amount = 2_000_000_000, WithdrawalCredentials = AddressB.Bytes, Signature = KeccakB.Bytes.ToArray() }; + public static Deposit DepositC_3Eth = new() { Index = 3, PubKey = PublicKeyC.Bytes, Amount = 3_000_000_000, WithdrawalCredentials = AddressC.Bytes, Signature = KeccakC.Bytes.ToArray() }; + public static Deposit DepositD_4Eth = new() { Index = 4, PubKey = PublicKeyD.Bytes, Amount = 4_000_000_000, WithdrawalCredentials = AddressD.Bytes, Signature = KeccakD.Bytes.ToArray() }; + public static Deposit DepositE_5Eth = new() { Index = 5, PubKey = PublicKeyE.Bytes, Amount = 5_000_000_000, WithdrawalCredentials = AddressE.Bytes, Signature = KeccakE.Bytes.ToArray() }; + public static Deposit DepositF_6Eth = new() { Index = 6, PubKey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray() }; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs index c1d1bdbdfe7..fb2d7fbf1d7 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs @@ -355,7 +355,7 @@ public async Task NewPayloadV3_should_verify_blob_versioned_hashes_again Substitute.For>(), Substitute.For>(), Substitute.For>(), - Substitute.For < IAsyncHandler>(), + Substitute.For>(), newPayloadHandlerMock, Substitute.For(), Substitute.For, IEnumerable>>(), diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs b/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs index 96d7f1373d4..6261348d40e 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs @@ -59,7 +59,7 @@ public override Block PrepareEmptyBlock(BlockHeader parent, PayloadAttributes? p IEnumerable txs = _payloadAttrsTxSource.GetTransactions(parent, attrs.GasLimit, attrs); - Block block = new(blockHeader, txs, Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits ,payloadAttributes?.ValidatorExits); + Block block = new(blockHeader, txs, Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits, payloadAttributes?.ValidatorExits); if (_producingBlockLock.Wait(BlockProductionTimeout)) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index c09d632a105..68d596749de 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -166,7 +166,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder return withdrawals; } - private (int Total, int Txs, int Uncles, int? Withdrawals,int? Deposits, int? ValidatorExits) GetContentLength(Block item, RlpBehaviors rlpBehaviors) + private (int Total, int Txs, int Uncles, int? Withdrawals, int? Deposits, int? ValidatorExits) GetContentLength(Block item, RlpBehaviors rlpBehaviors) { int contentLength = _headerDecoder.GetLength(item.Header, rlpBehaviors); @@ -410,7 +410,7 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl return; } - (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength, int? depositsLength , int? validatorExitsLength) = GetContentLength(item, rlpBehaviors); + (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength, int? depositsLength, int? validatorExitsLength) = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.Header); stream.StartSequence(txsLength); diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 2fa8e19a200..4f363443038 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -417,7 +417,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec if (withdrawalsEnabled) genesisHeader.WithdrawalsRoot = Keccak.EmptyTreeHash; - if(depositsEnabled) + if (depositsEnabled) genesisHeader.DepositsRoot = Keccak.EmptyTreeHash; bool isEip4844Enabled = chainSpecJson.Params.Eip4844TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4844TransitionTimestamp; @@ -434,7 +434,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec } bool isEip6110Enabled = chainSpecJson.Params.Eip6110TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip6110TransitionTimestamp; - + if (isEip6110Enabled) { genesisHeader.DepositsRoot = Keccak.EmptyTreeHash; From f4f522818d92f9fb8ec1a4f357bc4db41dd0f165 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 15 Apr 2024 12:19:42 +0530 Subject: [PATCH 097/551] add missing withChangedDeposits --- src/Nethermind/Nethermind.Core/BlockBody.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index a680a5d8b60..2e7e3eeed9e 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -24,8 +24,8 @@ public BlockBody() : this(null, null, null) { } public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals, Deposits, ValidatorExits); public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals, Deposits, ValidatorExits); - - public BlockBody WithChangedValidatorExits(ValidatorExit[]? validatorExits) => new(Transactions, Uncles, Withdrawals, Deposits, ValidatorExits); + public BlockBody WithChangedDeposits(Deposit[]? deposits) => new(Transactions, Uncles, Withdrawals, deposits, ValidatorExits); + public BlockBody WithChangedValidatorExits(ValidatorExit[]? validatorExits) => new(Transactions, Uncles, Withdrawals, Deposits, validatorExits); public static BlockBody WithOneTransactionOnly(Transaction tx) => new(new[] { tx }, null, null); From 7b3c0a02bdd61e3cc986c473ef857e52c69cb082 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 15 Apr 2024 14:54:46 +0530 Subject: [PATCH 098/551] fix headerDecoder and blockDecoder test --- .../Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs | 6 ++++++ .../Nethermind.Core.Test/Encoding/BlockDecoderTests.cs | 2 ++ .../Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs | 2 ++ 3 files changed, 10 insertions(+) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs index f8c4a85046d..ad23e80b465 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs @@ -196,6 +196,12 @@ public BlockHeaderBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRo return this; } + public BlockHeaderBuilder WithDepositsRoot(Hash256? depositRoot) + { + TestObjectInternal.DepositsRoot = depositRoot; + return this; + } + public BlockHeaderBuilder WithValidatorExitsRoot(Hash256? validatorExitsRoot) { TestObjectInternal.ValidatorExitsRoot = validatorExitsRoot; diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 7e7f55e620d..26ca1b400be 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -96,6 +96,8 @@ public BlockDecoderTests() .WithBlobGasUsed(ulong.MaxValue) .WithExcessBlobGas(ulong.MaxValue) .WithMixHash(Keccak.EmptyTreeHash) + // an empty Deposit array + .WithDeposits(0) .WithValidatorExits(new[] { new ValidatorExit(TestItem.AddressA, new byte[48]) }) .TestObject }; diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs index fd128f916d0..e899d12b875 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs @@ -166,6 +166,7 @@ public void Can_encode_decode_with_ValidatorExitRoot() .WithBlobGasUsed(0) .WithExcessBlobGas(0) .WithParentBeaconBlockRoot(TestItem.KeccakB) + .WithDepositsRoot(Keccak.Zero) .WithValidatorExitsRoot(TestItem.KeccakA).TestObject; Rlp rlp = Rlp.Encode(header); @@ -185,6 +186,7 @@ public void Can_encode_decode_with_ValidatorExitRoot_equals_to_null() .WithBlobGasUsed(0) .WithExcessBlobGas(0) .WithParentBeaconBlockRoot(TestItem.KeccakB) + .WithDepositsRoot(Keccak.Zero) .WithValidatorExitsRoot(null).TestObject; Rlp rlp = Rlp.Encode(header); From 74428b52777ae4916df2d96d7c8081a6c5e12f87 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 15 Apr 2024 15:27:33 +0530 Subject: [PATCH 099/551] change peak number of items --- .../Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs | 2 +- .../Nethermind.Serialization.Rlp/HeaderDecoder.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs index e899d12b875..c8ca7b7c5fb 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs @@ -168,7 +168,7 @@ public void Can_encode_decode_with_ValidatorExitRoot() .WithParentBeaconBlockRoot(TestItem.KeccakB) .WithDepositsRoot(Keccak.Zero) .WithValidatorExitsRoot(TestItem.KeccakA).TestObject; - + Rlp rlp = Rlp.Encode(header); BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index fc3f333be90..2cf9c91fc84 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -73,7 +73,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder 0 && decoderContext.PeekPrefixAndContentLength().ContentLength == Hash256.Size) { @@ -170,7 +170,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder 0 && rlpStream.PeekPrefixAndContentLength().ContentLength == Hash256.Size) { @@ -317,7 +317,7 @@ private static int GetContentLength(BlockHeader? item, RlpBehaviors rlpBehaviors + (item.ParentBeaconBlockRoot is null ? 0 : Rlp.LengthOfKeccakRlp) + (item.BlobGasUsed is null ? 0 : Rlp.LengthOf(item.BlobGasUsed.Value)) + (item.ExcessBlobGas is null ? 0 : Rlp.LengthOf(item.ExcessBlobGas.Value)) - + (item.DepositsRoot is null ? 0 : Rlp.LengthOfKeccakRlp) + + (item.DepositsRoot is null ? 0 : Rlp.LengthOf(item.DepositsRoot)) + (item.ValidatorExitsRoot is null ? 0 : Rlp.LengthOf(item.ValidatorExitsRoot)); if (notForSealing) From 9847edcfd8192ac2312f40e14938b7f0efea3520 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 15 Apr 2024 15:28:06 +0530 Subject: [PATCH 100/551] format files --- .../Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs index c8ca7b7c5fb..e899d12b875 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs @@ -168,7 +168,7 @@ public void Can_encode_decode_with_ValidatorExitRoot() .WithParentBeaconBlockRoot(TestItem.KeccakB) .WithDepositsRoot(Keccak.Zero) .WithValidatorExitsRoot(TestItem.KeccakA).TestObject; - + Rlp rlp = Rlp.Encode(header); BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); From 4cc7255855ced4ed2ee38c0b1428deeea82027e0 Mon Sep 17 00:00:00 2001 From: Ayman Bouchareb Date: Mon, 15 Apr 2024 09:48:07 -0700 Subject: [PATCH 101/551] Update BlockErrorMessages.cs Co-authored-by: ak88 --- .../Nethermind.Consensus/Messages/BlockErrorMessages.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index 3b0bbd4f4ab..e1eddd8fc9d 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -119,5 +119,5 @@ public static string InvalidTxInBlock(int i) => "NegativeGasUsed: Cannot be negative."; public static string MissingDeposits => "Deposits cannot be null in block when EIP-6110 activated."; public static string DepositsNotEnabled => "Deposits must be null in block when EIP-6110 not activated."; - public static string InvalidDepositsRoot(Hash256 expected, Hash256 actual) => $"Deposits root hash mismatch in block: expected {expected}, got {actual}"; + public static string InvalidDepositsRoot(Hash256 expected, Hash256 actual) => $"InvalidDepositsRoot: Deposits root hash mismatch in block: expected {expected}, got {actual}"; } From b020b87baa4a0d3f8394e7b8b04b1e2b7a787d7e Mon Sep 17 00:00:00 2001 From: Ayman Bouchareb Date: Mon, 15 Apr 2024 09:48:16 -0700 Subject: [PATCH 102/551] Update BlockErrorMessages.cs Co-authored-by: ak88 --- .../Nethermind.Consensus/Messages/BlockErrorMessages.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index e1eddd8fc9d..276d87fa811 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -118,6 +118,6 @@ public static string InvalidTxInBlock(int i) => public const string NegativeGasUsed = "NegativeGasUsed: Cannot be negative."; public static string MissingDeposits => "Deposits cannot be null in block when EIP-6110 activated."; - public static string DepositsNotEnabled => "Deposits must be null in block when EIP-6110 not activated."; + public static string DepositsNotEnabled => "DepositsNotEnabled: Deposits must be null in block when EIP-6110 not activated."; public static string InvalidDepositsRoot(Hash256 expected, Hash256 actual) => $"InvalidDepositsRoot: Deposits root hash mismatch in block: expected {expected}, got {actual}"; } From c7dcf00d561010f9d07733c36ed1cff1a8a040e7 Mon Sep 17 00:00:00 2001 From: Ayman Bouchareb Date: Mon, 15 Apr 2024 09:48:25 -0700 Subject: [PATCH 103/551] Update BlockErrorMessages.cs Co-authored-by: ak88 --- .../Nethermind.Consensus/Messages/BlockErrorMessages.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index 276d87fa811..e160243674c 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -117,7 +117,7 @@ public static string InvalidTxInBlock(int i) => public const string NegativeGasUsed = "NegativeGasUsed: Cannot be negative."; - public static string MissingDeposits => "Deposits cannot be null in block when EIP-6110 activated."; + public static string MissingDeposits => "MissingDeposits: Deposits cannot be null in block when EIP-6110 activated."; public static string DepositsNotEnabled => "DepositsNotEnabled: Deposits must be null in block when EIP-6110 not activated."; public static string InvalidDepositsRoot(Hash256 expected, Hash256 actual) => $"InvalidDepositsRoot: Deposits root hash mismatch in block: expected {expected}, got {actual}"; } From e30be1479e839d2a92a0a39bc205d6ff6878f7f7 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 16 Apr 2024 13:00:30 +0200 Subject: [PATCH 104/551] Cosmetic cleanup --- .../Contract/AuRaContractGasLimitOverrideTests.cs | 2 +- .../Transactions/TxCertifierFilterTests.cs | 2 +- .../Transactions/TxPermissionFilterTest.cs | 2 +- .../Deposits/NullDepositsProcessor.cs | 7 +------ .../InitializationSteps/InitializeBlockchainAuRa.cs | 2 +- .../InitializationSteps/StartBlockProducerAuRa.cs | 2 +- .../Nethermind.Consensus/Deposits/DepositsProcessor.cs | 4 ++-- .../Nethermind.Consensus/Deposits/IDepositsProcessor.cs | 1 - 8 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs index eb7383a4a83..9d3ac0be411 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs @@ -10,7 +10,7 @@ using Nethermind.Consensus; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Contracts; -using Nethermind.Consensus.AuRa.Depositss; +using Nethermind.Consensus.AuRa.Deposits; using Nethermind.Consensus.AuRa.Withdrawals; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs index 66132337e6e..a43d9047764 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs @@ -8,7 +8,7 @@ using Nethermind.AuRa.Test.Contract; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Contracts; -using Nethermind.Consensus.AuRa.Depositss; +using Nethermind.Consensus.AuRa.Deposits; using Nethermind.Consensus.AuRa.Transactions; using Nethermind.Consensus.AuRa.Withdrawals; using Nethermind.Consensus.Processing; diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs index 702c3500de1..1b71a39ba90 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs @@ -30,7 +30,7 @@ using Nethermind.TxPool; using NSubstitute; using NUnit.Framework; -using Nethermind.Consensus.AuRa.Depositss; +using Nethermind.Consensus.AuRa.Deposits; namespace Nethermind.AuRa.Test.Transactions; diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs index 31395692e33..e82a24d470e 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs @@ -6,17 +6,12 @@ using Nethermind.Core.Specs; using System.Collections.Generic; -namespace Nethermind.Consensus.AuRa.Depositss; +namespace Nethermind.Consensus.AuRa.Deposits; public class NullDepositsProcessor : IDepositsProcessor { public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { } - - public void ProcessDeposits(Block block, IEnumerable deposits, IReleaseSpec spec) - { - } - public static IDepositsProcessor Instance { get; } = new NullDepositsProcessor(); } diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs index 37c68b7f224..2a7d3b3b56c 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs @@ -13,7 +13,7 @@ using Nethermind.Consensus.AuRa.Config; using Nethermind.Consensus.AuRa.Contracts; using Nethermind.Consensus.AuRa.Contracts.DataStore; -using Nethermind.Consensus.AuRa.Depositss; +using Nethermind.Consensus.AuRa.Deposits; using Nethermind.Consensus.AuRa.Rewards; using Nethermind.Consensus.AuRa.Services; using Nethermind.Consensus.AuRa.Transactions; diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs index bb3af5cc27d..2341fbb0f0c 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs @@ -13,7 +13,7 @@ using Nethermind.Consensus.AuRa.Config; using Nethermind.Consensus.AuRa.Contracts; using Nethermind.Consensus.AuRa.Contracts.DataStore; -using Nethermind.Consensus.AuRa.Depositss; +using Nethermind.Consensus.AuRa.Deposits; using Nethermind.Consensus.AuRa.Transactions; using Nethermind.Consensus.AuRa.Validators; using Nethermind.Consensus.AuRa.Withdrawals; diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs index 9ed77b017b2..9c5f9b24f47 100644 --- a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs @@ -46,10 +46,10 @@ public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec } } - ProcessDeposits(block, depositList, spec); + CalculateDepositsRoot(block, depositList, spec); } - public void ProcessDeposits(Block block, IEnumerable deposits, IReleaseSpec spec) + private void CalculateDepositsRoot(Block block, IEnumerable deposits, IReleaseSpec spec) { block.Header.DepositsRoot = deposits.IsNullOrEmpty() ? Keccak.EmptyTreeHash diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs index 5e1c61f75bf..9a81bafc8f1 100644 --- a/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs @@ -11,5 +11,4 @@ namespace Nethermind.Consensus.Deposits; public interface IDepositsProcessor { void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec); - void ProcessDeposits(Block block, IEnumerable deposits, IReleaseSpec spec); } From 716107b2d65667a1a6a5e06f1a25f3867260a917 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 16 Apr 2024 13:19:58 +0200 Subject: [PATCH 105/551] cosmetic --- .../Nethermind.Consensus/Validators/BlockValidator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 678cc714dd7..47d7d5b9653 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -500,7 +500,7 @@ public static bool ValidateDepositsHashMatches(BlockHeader header, BlockBody bod { depositsRoot = null; if (body.Deposits == null) - return header.DepositsRoot == null; + return header.DepositsRoot is null; depositsRoot = new DepositTrie(body.Deposits).RootHash; @@ -516,7 +516,7 @@ public static bool ValidateValidatorExitsHashMatches(BlockHeader header, BlockBo { validatorExitsRoot = null; if (body.ValidatorExits == null) - return header.ValidatorExitsRoot == null; + return header.ValidatorExitsRoot is null; validatorExitsRoot = ValidatorExitsTrie.CalculateRoot(body.ValidatorExits); From 41791e199807c1bb5dc546b66ba6454ef446e795 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 16 Apr 2024 14:09:53 +0200 Subject: [PATCH 106/551] cosmetic --- src/Nethermind/Nethermind.Core/Block.cs | 7 ++++++- .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index 7937436fa71..8b3031b7bd5 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -35,7 +35,12 @@ public Block( public Block(BlockHeader header) : this( header, - new(null, null, header.WithdrawalsRoot is null ? null : Array.Empty(), header.DepositsRoot is null ? null : Array.Empty(), header.ValidatorExitsRoot is null ? null : Array.Empty()) + new( + null, + null, + header.WithdrawalsRoot is null ? null : Array.Empty(), + header.DepositsRoot is null ? null : Array.Empty(), + header.ValidatorExitsRoot is null ? null : Array.Empty()) ) { } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 4f363443038..b5c15f5e0f1 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -451,7 +451,13 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.AuRaSignature = auRaSignature; if (withdrawalsEnabled) - chainSpec.Genesis = new Block(genesisHeader, Array.Empty(), Array.Empty(), Array.Empty(), isEip6110Enabled ? Array.Empty() : null, isEip7002Enabled ? Array.Empty() : null); + chainSpec.Genesis = new Block( + genesisHeader, + Array.Empty(), + Array.Empty(), + Array.Empty(), + isEip6110Enabled ? Array.Empty() : null, + isEip7002Enabled ? Array.Empty() : null); else { chainSpec.Genesis = new Block(genesisHeader); From 6d1c23502141e6e923031893d973a15c39081b32 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 16 Apr 2024 14:47:06 +0200 Subject: [PATCH 107/551] cosmetic --- .../Modules/Eth/BlockForRpc.cs | 9 ++- .../BlockDecoder.cs | 56 ++++++++++--------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs index 9b1d28269b6..f8a416a9085 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs @@ -145,15 +145,14 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Hash256? ParentBeaconBlockRoot { get; set; } + public IEnumerable? Deposits { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IEnumerable? ValidatorExits { get; set; } + public Hash256? DepositsRoot { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public Hash256? ValidatorExitsRoot { get; set; } - public IEnumerable? Deposits { get; set; } + public IEnumerable? ValidatorExits { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public Hash256? DepositsRoot { get; set; } - + public Hash256? ValidatorExitsRoot { get; set; } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 68d596749de..25352f8e46b 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -67,9 +67,10 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder return new(header, transactions, uncleHeaders, withdrawals, deposits, validatorExits); } - private List? DecodeDeposits(RlpStream rlpStream, int blockCheck) + + private List? DecodeWithdrawals(RlpStream rlpStream, int blockCheck) { - List? deposits = null; + List? withdrawals = null; if (rlpStream.Position != blockCheck) { bool lengthWasRead = true; @@ -84,25 +85,25 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder if (lengthWasRead) { - int depositsLength = rlpStream.ReadSequenceLength(); - int depositsCheck = rlpStream.Position + depositsLength; - deposits = new(); + int withdrawalsLength = rlpStream.ReadSequenceLength(); + int withdrawalsCheck = rlpStream.Position + withdrawalsLength; + withdrawals = new(); - while (rlpStream.Position < depositsCheck) + while (rlpStream.Position < withdrawalsCheck) { - deposits.Add(Rlp.Decode(rlpStream)); + withdrawals.Add(Rlp.Decode(rlpStream)); } - rlpStream.Check(depositsCheck); + rlpStream.Check(withdrawalsCheck); } } - return deposits; + return withdrawals; } - private List? DecodeValidatorExits(RlpStream rlpStream, int blockCheck) + private List? DecodeDeposits(RlpStream rlpStream, int blockCheck) { - List? validatorExits = null; + List? deposits = null; if (rlpStream.Position != blockCheck) { bool lengthWasRead = true; @@ -117,25 +118,25 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder if (lengthWasRead) { - int validatorExistsLength = rlpStream.ReadSequenceLength(); - int validatorExistsCheck = rlpStream.Position + validatorExistsLength; - validatorExits = new(); + int depositsLength = rlpStream.ReadSequenceLength(); + int depositsCheck = rlpStream.Position + depositsLength; + deposits = new(); - while (rlpStream.Position < validatorExistsCheck) + while (rlpStream.Position < depositsCheck) { - validatorExits.Add(_validatorExitsDecoder.Decode(rlpStream)); + deposits.Add(Rlp.Decode(rlpStream)); } - rlpStream.Check(validatorExistsCheck); + rlpStream.Check(depositsCheck); } } - return validatorExits; + return deposits; } - private List? DecodeWithdrawals(RlpStream rlpStream, int blockCheck) + private List? DecodeValidatorExits(RlpStream rlpStream, int blockCheck) { - List? withdrawals = null; + List? validatorExits = null; if (rlpStream.Position != blockCheck) { bool lengthWasRead = true; @@ -150,22 +151,23 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder if (lengthWasRead) { - int withdrawalsLength = rlpStream.ReadSequenceLength(); - int withdrawalsCheck = rlpStream.Position + withdrawalsLength; - withdrawals = new(); + int validatorExistsLength = rlpStream.ReadSequenceLength(); + int validatorExistsCheck = rlpStream.Position + validatorExistsLength; + validatorExits = new(); - while (rlpStream.Position < withdrawalsCheck) + while (rlpStream.Position < validatorExistsCheck) { - withdrawals.Add(Rlp.Decode(rlpStream)); + validatorExits.Add(_validatorExitsDecoder.Decode(rlpStream)); } - rlpStream.Check(withdrawalsCheck); + rlpStream.Check(validatorExistsCheck); } } - return withdrawals; + return validatorExits; } + private (int Total, int Txs, int Uncles, int? Withdrawals, int? Deposits, int? ValidatorExits) GetContentLength(Block item, RlpBehaviors rlpBehaviors) { int contentLength = _headerDecoder.GetLength(item.Header, rlpBehaviors); From 931d1dd79e22fcb49dfff0972c1ea33cd5a09b07 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 17 Apr 2024 06:15:32 +0100 Subject: [PATCH 108/551] merge changes --- .../Nethermind.AuRa.Test/AuraBlockProcessorTests.cs | 2 +- .../Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs | 2 +- .../Deposits/NullDepositsProcessor.cs | 2 +- .../Withdrawals/NullWithdrawalProcessor.cs | 2 +- src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs | 2 +- .../Nethermind.Consensus/Deposits/DepositsProcessor.cs | 3 +-- .../Nethermind.Consensus/Deposits/IDepositsProcessor.cs | 2 +- .../Nethermind.Consensus/Processing/BlockProcessor.cs | 2 +- .../Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs | 2 +- .../Withdrawals/BlockProductionWithdrawalProcessor.cs | 2 +- .../Nethermind.Consensus/Withdrawals/IWithdrawalProcessor.cs | 2 +- .../Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs | 2 +- .../Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs | 2 +- .../Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs | 2 +- .../Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs | 4 ++-- .../InitializationSteps/InitializeBlockchainAuRaMerge.cs | 2 +- .../Withdrawals/AuraWithdrawalProcessor.cs | 2 +- .../EngineModuleTests.HelperFunctions.cs | 2 +- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs | 2 +- src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs | 2 +- .../Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs | 2 +- 21 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs index f260952652f..743a713e6d1 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs @@ -11,7 +11,7 @@ using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 7997dbef4f6..9affb9ec488 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -10,7 +10,7 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Crypto; diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs index 31395692e33..9bd3d5a5e88 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Specs; using System.Collections.Generic; diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Withdrawals/NullWithdrawalProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Withdrawals/NullWithdrawalProcessor.cs index 62684f460fc..24f84f52ba2 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Withdrawals/NullWithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Withdrawals/NullWithdrawalProcessor.cs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Specs; diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index 76698a8f5ea..2aaf31c244c 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -13,7 +13,7 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core.Attributes; using Nethermind.Db; using Nethermind.JsonRpc.Modules; diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs index 9ed77b017b2..0a02c8cc498 100644 --- a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs @@ -10,10 +10,9 @@ using Nethermind.Core.Specs; using Nethermind.Logging; using Nethermind.Serialization.Rlp; -using Nethermind.State; using Nethermind.State.Proofs; -namespace Nethermind.Consensus.Deposits; +namespace Nethermind.Consensus.Withdrawals; public class DepositsProcessor : IDepositsProcessor { diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs index 5e1c61f75bf..02caf8c4685 100644 --- a/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs @@ -6,7 +6,7 @@ using Nethermind.Serialization.Rlp; using System.Collections.Generic; -namespace Nethermind.Consensus.Deposits; +namespace Nethermind.Consensus.Withdrawals; public interface IDepositsProcessor { diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 1f2a33a9914..9a54d6414cd 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -11,7 +11,7 @@ using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index e5b685e236e..3a4f595ca23 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -9,7 +9,7 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core.Specs; using Nethermind.Logging; using Nethermind.State; diff --git a/src/Nethermind/Nethermind.Consensus/Withdrawals/BlockProductionWithdrawalProcessor.cs b/src/Nethermind/Nethermind.Consensus/Withdrawals/BlockProductionWithdrawalProcessor.cs index c630b6e0f61..c03f0702002 100644 --- a/src/Nethermind/Nethermind.Consensus/Withdrawals/BlockProductionWithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Withdrawals/BlockProductionWithdrawalProcessor.cs @@ -7,7 +7,7 @@ using Nethermind.Core.Specs; using Nethermind.State.Proofs; -namespace Nethermind.Consensus.Deposits; +namespace Nethermind.Consensus.Withdrawals; public class BlockProductionWithdrawalProcessor : IWithdrawalProcessor { diff --git a/src/Nethermind/Nethermind.Consensus/Withdrawals/IWithdrawalProcessor.cs b/src/Nethermind/Nethermind.Consensus/Withdrawals/IWithdrawalProcessor.cs index 0bdccd7292c..5909ba1f220 100644 --- a/src/Nethermind/Nethermind.Consensus/Withdrawals/IWithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Withdrawals/IWithdrawalProcessor.cs @@ -4,7 +4,7 @@ using Nethermind.Core; using Nethermind.Core.Specs; -namespace Nethermind.Consensus.Deposits; +namespace Nethermind.Consensus.Withdrawals; public interface IWithdrawalProcessor { diff --git a/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs b/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs index a62d9f0e418..c9fe1bddde3 100644 --- a/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs @@ -7,7 +7,7 @@ using Nethermind.Logging; using Nethermind.State; -namespace Nethermind.Consensus.Deposits; +namespace Nethermind.Consensus.Withdrawals; public class WithdrawalProcessor : IWithdrawalProcessor { diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 815097b65b0..8e0355b55bf 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -11,7 +11,7 @@ using Nethermind.Consensus.AuRa.InitializationSteps; using Nethermind.Consensus.AuRa.Validators; using Nethermind.Consensus.Comparers; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; using Nethermind.Consensus.Rewards; diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 780a8738108..1a51f6d7671 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -9,7 +9,7 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Evm.Tracing; diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index 07e93bd7fed..34adf889580 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -72,13 +72,13 @@ protected override BlockProcessor CreateBlockProcessor( receiptStorage, logManager, _blockTree, - new Consensus.Deposits.BlockProductionWithdrawalProcessor( + new Consensus.Withdrawals.BlockProductionWithdrawalProcessor( new AuraWithdrawalProcessor( withdrawalContractFactory.Create(readOnlyTxProcessingEnv.TransactionProcessor), logManager ) ), - new Consensus.Deposits.DepositsProcessor(logManager), + new Consensus.Withdrawals.DepositsProcessor(logManager), null); } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs index b755e0715dc..471acb37101 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs @@ -5,7 +5,7 @@ using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.InitializationSteps; using Nethermind.Consensus.AuRa.Validators; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Transactions; using Nethermind.Core; diff --git a/src/Nethermind/Nethermind.Merge.AuRa/Withdrawals/AuraWithdrawalProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/Withdrawals/AuraWithdrawalProcessor.cs index 36273703c35..85776645e9a 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/Withdrawals/AuraWithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/Withdrawals/AuraWithdrawalProcessor.cs @@ -4,7 +4,7 @@ using System; using System.Numerics; using Nethermind.Blockchain; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Collections; using Nethermind.Core.Specs; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index a8f02631ea2..42df50543de 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -22,7 +22,7 @@ using Nethermind.State; using Nethermind.Core.Specs; using Nethermind.Consensus.BeaconBlockRoot; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core.Test.Blockchain; namespace Nethermind.Merge.Plugin.Test diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 691bedbf2d0..07a61cb509e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -15,7 +15,7 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index 6a7efcb14ea..58561b72405 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -6,7 +6,7 @@ using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs index a45f6c212b3..dfc89a3785a 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs @@ -10,7 +10,7 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Deposits; +using Nethermind.Consensus.Withdrawals; using Nethermind.Core.Specs; using Nethermind.Logging; using Nethermind.Specs.ChainSpecStyle; From 066af5ae7de0e695537eb69307364e8ab8250d59 Mon Sep 17 00:00:00 2001 From: Demuirgos Date: Wed, 17 Apr 2024 09:27:44 +0100 Subject: [PATCH 109/551] rename EipPropertyName, fix BlockToBuild ctpr call --- .../Nethermind.Consensus.Clique/CliqueBlockProducer.cs | 3 ++- .../Nethermind.Consensus/Deposits/DepositsProcessor.cs | 2 +- .../Nethermind.Consensus/Processing/BlockExtensions.cs | 2 +- .../Nethermind.Consensus/Producers/BlockProducerBase.cs | 2 +- .../Nethermind.Consensus/Producers/PayloadAttributes.cs | 2 +- .../Nethermind.Consensus/Validators/BlockValidator.cs | 4 ++-- src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs | 1 + .../Nethermind.Merge.Plugin/Data/ExecutionPayload.cs | 2 +- .../Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs | 2 +- .../Handlers/EngineRpcCapabilitiesProvider.cs | 6 +++--- 10 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index a4ae46ef4e5..98b01a674ca 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -445,7 +445,8 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) header, selectedTxs, Array.Empty(), - spec.WithdrawalsEnabled ? Enumerable.Empty() : null + spec.WithdrawalsEnabled ? Enumerable.Empty() : null, + spec.DepositsEnabled ? Enumerable.Empty() : null ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs index bbc57b408e7..2d47a59ef40 100644 --- a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs @@ -27,7 +27,7 @@ public DepositsProcessor(ILogManager logManager) public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { - if (!spec.IsEip6110Enabled) + if (!spec.DepositsEnabled) return; diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs index e12cc2baa15..e595610ba2d 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs @@ -18,7 +18,7 @@ internal static class BlockExtensions { public static Block CreateCopy(this Block block, BlockHeader header) => block is BlockToProduce blockToProduce - ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals) + ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals, blockToProduce.Deposits) : new Block(header, block.Transactions, block.Uncles, block.Withdrawals, block.Deposits); public static IEnumerable GetTransactions(this Block block) => diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs index 2aa2abc4e57..7c83185aceb 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs @@ -298,7 +298,7 @@ protected virtual Block PrepareBlock(BlockHeader parent, PayloadAttributes? payl IEnumerable transactions = _txSource.GetTransactions(parent, header.GasLimit, payloadAttributes); - return new BlockToProduce(header, transactions, Array.Empty(), payloadAttributes?.Withdrawals); + return new BlockToProduce(header, transactions, Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits); } } } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs index 58734204cbf..70b708204c7 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs @@ -193,7 +193,7 @@ public static int GetVersion(this PayloadAttributes executionPayload) => public static int ExpectedEngineSpecVersion(this IReleaseSpec spec) => spec switch { - { IsEip6110Enabled: true } => EngineApiVersions.Prague, + { DepositsEnabled: true } => EngineApiVersions.Prague, { IsEip4844Enabled: true } => EngineApiVersions.Cancun, { WithdrawalsEnabled: true } => EngineApiVersions.Shanghai, _ => EngineApiVersions.Paris diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index fa5923d200a..4a3b38a4818 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -291,7 +291,7 @@ public bool ValidateDeposits(Block block, out string? error) => private bool ValidateDeposits(Block block, IReleaseSpec spec, out string? error) { - if (spec.IsEip6110Enabled && block.Deposits is null) + if (spec.DepositsEnabled && block.Deposits is null) { error = BlockErrorMessages.MissingDeposits; @@ -300,7 +300,7 @@ private bool ValidateDeposits(Block block, IReleaseSpec spec, out string? error) return false; } - if (!spec.IsEip6110Enabled && block.Deposits is not null) + if (!spec.DepositsEnabled && block.Deposits is not null) { error = BlockErrorMessages.DepositsNotEnabled; diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 7f626e212d8..5fd7c0dc8d7 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -278,6 +278,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// EIP-6110: Supply validator deposits on chain /// bool IsEip6110Enabled { get; } + bool DepositsEnabled => IsEip6110Enabled; Address Eip6110ContractAddress { get; } /// diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index 0c4ca463f72..28e3ae8c1ab 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -210,7 +210,7 @@ public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, o return ValidationResult.Fail; } - if (spec.IsEip6110Enabled) + if (spec.DepositsEnabled) { error = "ExecutionPayloadV4 expected"; return ValidationResult.Fail; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index 60a54b7c6cb..c34a5c0560c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -33,7 +33,7 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu } public override bool ValidateFork(ISpecProvider specProvider) => - specProvider.GetSpec(BlockNumber, Timestamp).IsEip6110Enabled; + specProvider.GetSpec(BlockNumber, Timestamp).DepositsEnabled; /// /// Gets or sets as defined in diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs index 6fb18fb9103..f595f31d169 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs @@ -48,9 +48,9 @@ public EngineRpcCapabilitiesProvider(ISpecProvider specProvider) #endregion #region Prague - _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.IsEip6110Enabled, spec.IsEip6110Enabled); - _capabilities[nameof(IEngineRpcModule.engine_forkchoiceUpdatedV4)] = (spec.IsEip6110Enabled, spec.IsEip6110Enabled); - _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.IsEip6110Enabled, spec.IsEip6110Enabled); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.DepositsEnabled, spec.DepositsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_forkchoiceUpdatedV4)] = (spec.DepositsEnabled, spec.DepositsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.DepositsEnabled, spec.DepositsEnabled); #endregion } From 729609ef29f2c87db13dc592a1b7677a8fcd1058 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 17 Apr 2024 14:27:03 +0530 Subject: [PATCH 110/551] address PR comments --- .../Nethermind.Consensus.Clique/CliqueBlockProducer.cs | 5 ++++- .../Nethermind.Consensus/Messages/BlockErrorMessages.cs | 9 ++++++--- .../Nethermind.Consensus/Processing/BlockExtensions.cs | 2 +- .../Nethermind.Consensus/Processing/BlockProcessor.cs | 3 +-- .../Nethermind.Consensus/Producers/BlockProducerBase.cs | 2 +- .../Nethermind.Consensus/Validators/BlockValidator.cs | 6 +++--- .../Nethermind.Core.Test/Builders/BlockBuilder.cs | 2 +- 7 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index a4ae46ef4e5..e9b8f416cdb 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -23,6 +23,7 @@ using Nethermind.Logging; using Nethermind.State; using Nethermind.State.Proofs; +using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Consensus.Clique; @@ -445,7 +446,9 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) header, selectedTxs, Array.Empty(), - spec.WithdrawalsEnabled ? Enumerable.Empty() : null + spec.WithdrawalsEnabled ? Enumerable.Empty() : null, + spec.IsEip6110Enabled ? Enumerable.Empty() : null, + spec.IsEip7002Enabled ? Enumerable.Empty() : null ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index e55bd3fab8c..b0a0c09f6b3 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -119,10 +119,13 @@ public static string InvalidTxInBlock(int i) => public const string NegativeGasUsed = "NegativeGasUsed: Cannot be negative."; - public static string InvalidValidatorExitsRoot(Core.Crypto.Hash256 expected, Core.Crypto.Hash256 actual) => - $"InvalidValidatorExitsRoot: expected {expected}, got {actual}"; - public static string MissingDeposits => "MissingDeposits: Deposits cannot be null in block when EIP-6110 activated."; public static string DepositsNotEnabled => "DepositsNotEnabled: Deposits must be null in block when EIP-6110 not activated."; public static string InvalidDepositsRoot(Hash256 expected, Hash256 actual) => $"InvalidDepositsRoot: Deposits root hash mismatch in block: expected {expected}, got {actual}"; + + public static string MissingValidatorExits => "Validator exits cannot be null in block when EIP-7002 activated."; + public static string ValidatorExitsNotEnabled => "Validator exits must be null in block when EIP-7002 not activated."; + public static string InvalidValidatorExitsRoot(Core.Crypto.Hash256 expected, Core.Crypto.Hash256 actual) => + $"InvalidValidatorExitsRoot: expected {expected}, got {actual}"; + } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs index e9c446fbe66..ff3e1a10766 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs @@ -18,7 +18,7 @@ internal static class BlockExtensions { public static Block CreateCopy(this Block block, BlockHeader header) => block is BlockToProduce blockToProduce - ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals) + ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals, block.Deposits, block.ValidatorExits) : new Block(header, block.Transactions, block.Uncles, block.Withdrawals, block.Deposits, block.ValidatorExits); public static IEnumerable GetTransactions(this Block block) => diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index ee01e4051ad..af0cb5bf05d 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -256,9 +256,8 @@ protected virtual TxReceipt[] ProcessBlock( ApplyMinerRewards(block, blockTracer, spec); _withdrawalProcessor.ProcessWithdrawals(block, spec); - ProcessValidatorExits(block, spec); - _depositsProcessor.ProcessDeposits(block, receipts, spec); + ProcessValidatorExits(block, spec); ReceiptsTracer.EndBlockTrace(); _stateProvider.Commit(spec); diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs index 2aa2abc4e57..883a3d8659e 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs @@ -298,7 +298,7 @@ protected virtual Block PrepareBlock(BlockHeader parent, PayloadAttributes? payl IEnumerable transactions = _txSource.GetTransactions(parent, header.GasLimit, payloadAttributes); - return new BlockToProduce(header, transactions, Array.Empty(), payloadAttributes?.Withdrawals); + return new BlockToProduce(header, transactions, Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits, payloadAttributes?.ValidatorExits); } } } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 47d7d5b9653..7203497a1c5 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -336,7 +336,7 @@ private bool ValidateValidatorExits(Block block, IReleaseSpec spec, out string e { if (spec.IsEip7002Enabled && block.ValidatorExits is null) { - error = $"ValidatorExits cannot be null in block {block.Hash} when EIP-7002 activated."; + error = BlockErrorMessages.MissingValidatorExits; if (_logger.IsWarn) _logger.Warn(error); @@ -345,7 +345,7 @@ private bool ValidateValidatorExits(Block block, IReleaseSpec spec, out string e if (!spec.IsEip7002Enabled && block.ValidatorExits is not null) { - error = $"ValidatorExits must be null in block {block.Hash} when EIP-7002 not activated."; + error = BlockErrorMessages.ValidatorExitsNotEnabled; if (_logger.IsWarn) _logger.Warn(error); @@ -356,7 +356,7 @@ private bool ValidateValidatorExits(Block block, IReleaseSpec spec, out string e { if (!ValidateValidatorExitsHashMatches(block, out Hash256 validatorExitsRoot)) { - error = $"ValidatorExits root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.ValidatorExitsRoot}, got {validatorExitsRoot}"; + error = BlockErrorMessages.InvalidValidatorExitsRoot(block.Header.ValidatorExitsRoot, validatorExitsRoot); if (_logger.IsWarn) _logger.Warn($"ValidatorExits root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.ValidatorExitsRoot}, got {validatorExitsRoot}"); return false; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index 8fcfff4a998..1597c376456 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -316,7 +316,7 @@ public BlockBuilder WithValidatorExits(ValidatorExit[]? validatorExits) TestObjectInternal = TestObjectInternal.WithReplacedBody( TestObjectInternal.Body.WithChangedValidatorExits(validatorExits)); - TestObjectInternal.Header.TxRoot = validatorExits is not null ? ValidatorExitsTrie.CalculateRoot(validatorExits) : null; + TestObjectInternal.Header.ValidatorExitsRoot = validatorExits is not null ? ValidatorExitsTrie.CalculateRoot(validatorExits) : null; return this; } } From 1cf183a044e59bca33ac08fb83bb7177b492e12e Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 17 Apr 2024 15:01:50 +0530 Subject: [PATCH 111/551] add nitpicks --- .../ChainSpecStyle/ChainSpecLoader.cs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index b5c15f5e0f1..20fe00144d1 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -414,11 +414,15 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.BaseFeePerGas = baseFee; bool withdrawalsEnabled = chainSpecJson.Params.Eip4895TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4895TransitionTimestamp; bool depositsEnabled = chainSpecJson.Params.Eip6110TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip6110TransitionTimestamp; + bool validatorExitsEnabled = chainSpecJson.Params.Eip7002TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip7002TransitionTimestamp; if (withdrawalsEnabled) genesisHeader.WithdrawalsRoot = Keccak.EmptyTreeHash; if (depositsEnabled) genesisHeader.DepositsRoot = Keccak.EmptyTreeHash; + + if (validatorExitsEnabled) + genesisHeader.ValidatorExitsRoot = Keccak.EmptyTreeHash; bool isEip4844Enabled = chainSpecJson.Params.Eip4844TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4844TransitionTimestamp; if (isEip4844Enabled) @@ -433,13 +437,6 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.ParentBeaconBlockRoot = Keccak.Zero; } - bool isEip6110Enabled = chainSpecJson.Params.Eip6110TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip6110TransitionTimestamp; - - if (isEip6110Enabled) - { - genesisHeader.DepositsRoot = Keccak.EmptyTreeHash; - } - bool isEip7002Enabled = chainSpecJson.Params.Eip7002TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip7002TransitionTimestamp; if (isEip7002Enabled) @@ -456,8 +453,8 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec Array.Empty(), Array.Empty(), Array.Empty(), - isEip6110Enabled ? Array.Empty() : null, - isEip7002Enabled ? Array.Empty() : null); + depositsEnabled ? Array.Empty() : null, + validatorExitsEnabled ? Array.Empty() : null); else { chainSpec.Genesis = new Block(genesisHeader); From c7febee6eb6a76a908fd98cb53879227b649654f Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 17 Apr 2024 15:57:40 +0200 Subject: [PATCH 112/551] print errors about deposits and exits in ValidateProcessedBlock --- .../Messages/BlockErrorMessages.cs | 4 ++-- .../Processing/BlockProcessor.cs | 2 +- .../Validators/BlockValidator.cs | 12 ++++++++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index e55bd3fab8c..b30cb6ec2db 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -119,10 +119,10 @@ public static string InvalidTxInBlock(int i) => public const string NegativeGasUsed = "NegativeGasUsed: Cannot be negative."; - public static string InvalidValidatorExitsRoot(Core.Crypto.Hash256 expected, Core.Crypto.Hash256 actual) => + public static string InvalidValidatorExitsRoot(Hash256? expected, Hash256? actual) => $"InvalidValidatorExitsRoot: expected {expected}, got {actual}"; public static string MissingDeposits => "MissingDeposits: Deposits cannot be null in block when EIP-6110 activated."; public static string DepositsNotEnabled => "DepositsNotEnabled: Deposits must be null in block when EIP-6110 not activated."; - public static string InvalidDepositsRoot(Hash256 expected, Hash256 actual) => $"InvalidDepositsRoot: Deposits root hash mismatch in block: expected {expected}, got {actual}"; + public static string InvalidDepositsRoot(Hash256? expected, Hash256? actual) => $"InvalidDepositsRoot: Deposits root hash mismatch in block: expected {expected}, got {actual}"; } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index ee01e4051ad..cebeaf037f7 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -290,7 +290,7 @@ private void ProcessValidatorExits(Block block, IReleaseSpec spec) // TODO: block processor pipeline private void StoreTxReceipts(Block block, TxReceipt[] txReceipts) { - // Setting canonical is done when the BlockAddedToMain event is firec + // Setting canonical is done when the BlockAddedToMain event is fired _receiptStorage.Insert(block, txReceipts, false); } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 47d7d5b9653..cf72dd56ef1 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -234,6 +234,18 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B error = error ?? BlockErrorMessages.InvalidParentBeaconBlockRoot; } + if (processedBlock.Header.DepositsRoot != suggestedBlock.Header.DepositsRoot) + { + if (_logger.IsWarn) _logger.Warn($"- deposits root : expected {suggestedBlock.Header.DepositsRoot}, got {processedBlock.Header.DepositsRoot}"); + error = error ?? BlockErrorMessages.InvalidDepositsRoot(suggestedBlock.Header.DepositsRoot, processedBlock.Header.DepositsRoot); + } + + if (processedBlock.Header.ValidatorExitsRoot != suggestedBlock.Header.ValidatorExitsRoot) + { + if (_logger.IsWarn) _logger.Warn($"- exits root : expected {suggestedBlock.Header.ValidatorExitsRoot}, got {processedBlock.Header.ValidatorExitsRoot}"); + error = error ?? BlockErrorMessages.InvalidValidatorExitsRoot(suggestedBlock.Header.ValidatorExitsRoot, processedBlock.Header.ValidatorExitsRoot); + } + for (int i = 0; i < processedBlock.Transactions.Length; i++) { if (receipts[i].Error is not null && receipts[i].GasUsed == 0 && receipts[i].Error == "invalid") From 653cb0311c9eaf527d164a5d9f743a3cd07f0572 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 17 Apr 2024 16:15:41 +0200 Subject: [PATCH 113/551] fix errors --- .../Nethermind.Consensus/Messages/BlockErrorMessages.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index 7f6b08230a3..9aba7284430 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -116,7 +116,8 @@ public static string InvalidTxInBlock(int i) => public const string NegativeGasUsed = "NegativeGasUsed: Cannot be negative."; - + public static string MissingValidatorExits => "MissingValidatorExits: Exits cannot be null in block when EIP-7002 activated."; + public static string ValidatorExitsNotEnabled => "ValidatorExitsNotEnabled: Exits must be null in block when EIP-7002 not activated."; public static string InvalidValidatorExitsRoot(Hash256? expected, Hash256? actual) => $"InvalidValidatorExitsRoot: expected {expected}, got {actual}"; From 6c34a7af27bde50e688352f2a55cd27d84385487 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 17 Apr 2024 16:19:22 +0200 Subject: [PATCH 114/551] fix whitespaces --- .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 20fe00144d1..326b34eeac6 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -420,7 +420,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec if (depositsEnabled) genesisHeader.DepositsRoot = Keccak.EmptyTreeHash; - + if (validatorExitsEnabled) genesisHeader.ValidatorExitsRoot = Keccak.EmptyTreeHash; From a0bc17e7a8d7f675890823f04fbafdff93ad6da3 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 17 Apr 2024 23:57:35 +0530 Subject: [PATCH 115/551] address PR comments --- .../Producers/BlockProducerBase.cs | 2 +- .../Producers/PayloadAttributes.cs | 35 ------------------- .../Nethermind.Core.Test/Builders/TestItem.cs | 9 +++++ .../BlockProduction/PostMergeBlockProducer.cs | 2 +- .../EngineRpcModule.Prague.cs | 2 +- .../Synchronization/ChainLevelHelper.cs | 2 +- .../Messages/BlockBodiesMessageSerializer.cs | 19 +++++++++- .../OptimismPostMergeBlockProducer.cs | 2 +- 8 files changed, 32 insertions(+), 41 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs index 883a3d8659e..2aa2abc4e57 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs @@ -298,7 +298,7 @@ protected virtual Block PrepareBlock(BlockHeader parent, PayloadAttributes? payl IEnumerable transactions = _txSource.GetTransactions(parent, header.GasLimit, payloadAttributes); - return new BlockToProduce(header, transactions, Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits, payloadAttributes?.ValidatorExits); + return new BlockToProduce(header, transactions, Array.Empty(), payloadAttributes?.Withdrawals); } } } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs index 1084bab93df..fdc86e40eea 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs @@ -26,10 +26,6 @@ public class PayloadAttributes public Withdrawal[]? Withdrawals { get; set; } - public Deposit[]? Deposits { get; set; } - - public ValidatorExit[]? ValidatorExits { get; set; } - public Hash256? ParentBeaconBlockRoot { get; set; } public virtual long? GetGasLimit() => null; @@ -48,16 +44,6 @@ public string ToString(string indentation) sb.Append($", {nameof(Withdrawals)} count: {Withdrawals.Length}"); } - if (Deposits is not null) - { - sb.Append($", {nameof(Deposits)} count: {Deposits.Length}"); - } - - if (ValidatorExits is not null) - { - sb.Append($", {nameof(ValidatorExits)} count: {ValidatorExits.Length}"); - } - if (ParentBeaconBlockRoot is not null) { sb.Append($", {nameof(ParentBeaconBlockRoot)} : {ParentBeaconBlockRoot}"); @@ -87,8 +73,6 @@ protected virtual int ComputePayloadIdMembersSize() => + Keccak.Size // prev randao + Address.Size // suggested fee recipient + (Withdrawals is null ? 0 : Keccak.Size) // withdrawals root hash - + (Deposits is null ? 0 : Keccak.Size) // deposits root hash - + (ValidatorExits is null ? 0 : Keccak.Size) // validator exits root hash + (ParentBeaconBlockRoot is null ? 0 : Keccak.Size); // parent beacon block root protected static string ComputePayloadId(Span inputSpan) @@ -128,24 +112,6 @@ protected virtual int WritePayloadIdMembers(BlockHeader parentHeader, Span position += Keccak.Size; } - if (Deposits is not null) - { - Hash256 depositsRootHash = Deposits.Length == 0 - ? PatriciaTree.EmptyTreeHash - : new DepositTrie(Deposits).RootHash; - depositsRootHash.Bytes.CopyTo(inputSpan.Slice(position, Keccak.Size)); - position += Keccak.Size; - } - - if (ValidatorExits is not null) - { - Hash256 validatorExitsRootHash = ValidatorExits.Length == 0 - ? PatriciaTree.EmptyTreeHash - : ValidatorExitsTrie.CalculateRoot(ValidatorExits); - validatorExitsRootHash.Bytes.CopyTo(inputSpan.Slice(position, Keccak.Size)); - position += Keccak.Size; - } - return position; } @@ -202,7 +168,6 @@ public static class PayloadAttributesExtensions public static int GetVersion(this PayloadAttributes executionPayload) => executionPayload switch { - { Deposits: not null, ValidatorExits: not null } => EngineApiVersions.Prague, { ParentBeaconBlockRoot: not null, Withdrawals: not null } => EngineApiVersions.Cancun, { Withdrawals: not null } => EngineApiVersions.Shanghai, _ => EngineApiVersions.Paris diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index 45b92bb4590..9edc842bcc3 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -5,6 +5,7 @@ using System.IO; using System.Net; using System.Text.Json; +using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core.Crypto; using Nethermind.Crypto; using Nethermind.Int256; @@ -106,6 +107,14 @@ public static Hash256 KeccakFromNumber(int i) public static Deposit DepositE_5Eth = new() { Index = 5, PubKey = PublicKeyE.Bytes, Amount = 5_000_000_000, WithdrawalCredentials = AddressE.Bytes, Signature = KeccakE.Bytes.ToArray() }; public static Deposit DepositF_6Eth = new() { Index = 6, PubKey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray() }; + + public static ValidatorExit ValidatorExitA = new() { SourceAddress = AddressA, ValidatorPubkey = PublicKeyA.Bytes }; + public static ValidatorExit ValidatorExitB = new() { SourceAddress = AddressB, ValidatorPubkey = PublicKeyB.Bytes }; + public static ValidatorExit ValidatorExitC = new() { SourceAddress = AddressC, ValidatorPubkey = PublicKeyC.Bytes }; + public static ValidatorExit ValidatorExitD = new() { SourceAddress = AddressD, ValidatorPubkey = PublicKeyD.Bytes }; + public static ValidatorExit ValidatorExitE = new() { SourceAddress = AddressE, ValidatorPubkey = PublicKeyE.Bytes }; + public static ValidatorExit ValidatorExitF = new() { SourceAddress = AddressF, ValidatorPubkey = PublicKeyF.Bytes }; + public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); public static IPEndPoint IPEndPointC = IPEndPoint.Parse("10.0.0.3"); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs index 12443edc42f..dc0d94753ae 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs @@ -54,7 +54,7 @@ public virtual Block PrepareEmptyBlock(BlockHeader parent, PayloadAttributes? pa blockHeader.ReceiptsRoot = Keccak.EmptyTreeHash; blockHeader.TxRoot = Keccak.EmptyTreeHash; blockHeader.Bloom = Bloom.Empty; - var block = new Block(blockHeader, Array.Empty(), Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits, payloadAttributes?.ValidatorExits); + var block = new Block(blockHeader, Array.Empty(), Array.Empty(), payloadAttributes?.Withdrawals); if (_producingBlockLock.Wait(BlockProductionTimeout)) { diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs index 63bf328117d..d7ad5b3eab3 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs @@ -16,7 +16,7 @@ public partial class EngineRpcModule : IEngineRpcModule private readonly IAsyncHandler _getPayloadHandlerV4; public Task> engine_forkchoiceUpdatedV4(ForkchoiceStateV1 forkchoiceState, PayloadAttributes? payloadAttributes = null) - => ForkchoiceUpdated(forkchoiceState, payloadAttributes, EngineApiVersions.Cancun); + => ForkchoiceUpdated(forkchoiceState, payloadAttributes, EngineApiVersions.Prague); public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) => NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Prague); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs index 3aed5334f49..dfd12cc96ac 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs @@ -159,7 +159,7 @@ public bool TrySetNextBlocks(int maxCount, BlockDownloadContext context) { Block? block = _blockTree.FindBlock(hashesToRequest[i], BlockTreeLookupOptions.None); if (block is null) return false; - BlockBody blockBody = new(block.Transactions, block.Uncles, block?.Withdrawals); + BlockBody blockBody = new(block.Transactions, block.Uncles, block?.Withdrawals, block?.Deposits, block?.ValidatorExits); context.SetBody(i + offset, blockBody); } diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index d4bba370b4f..95a40febff9 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -6,6 +6,7 @@ using Nethermind.Core; using Nethermind.Core.Buffers; using Nethermind.Serialization.Rlp; +using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Network.P2P.Subprotocols.Eth.V62.Messages { @@ -59,6 +60,10 @@ private class BlockBodyDecoder : IRlpValueDecoder private readonly HeaderDecoder _headerDecoder = new(); private readonly WithdrawalDecoder _withdrawalDecoderDecoder = new(); + private readonly DepositDecoder _depositDecoder = new(); + + private readonly ValidatorExitsDecoder _validatorExitDecoder = new(); + public int GetLength(BlockBody item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOfSequence(GetBodyLength(item)); @@ -104,12 +109,24 @@ private int GetWithdrawalsLength(Withdrawal[] withdrawals) Transaction[] transactions = ctx.DecodeArray(_txDecoder); BlockHeader[] uncles = ctx.DecodeArray(_headerDecoder); Withdrawal[]? withdrawals = null; + Deposit[]? deposits = null; + ValidatorExit[]? validatorExits = null; if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) { withdrawals = ctx.DecodeArray(_withdrawalDecoderDecoder); } - return new BlockBody(transactions, uncles, withdrawals); + if(ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) + { + deposits = ctx.DecodeArray(_depositDecoder); + } + + if(ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) + { + validatorExits = ctx.DecodeArray(_validatorExitDecoder); + } + + return new BlockBody(transactions, uncles, withdrawals, deposits, validatorExits); } public void Serialize(RlpStream stream, BlockBody body) diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs b/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs index 6261348d40e..4b100aa48e3 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs @@ -59,7 +59,7 @@ public override Block PrepareEmptyBlock(BlockHeader parent, PayloadAttributes? p IEnumerable txs = _payloadAttrsTxSource.GetTransactions(parent, attrs.GasLimit, attrs); - Block block = new(blockHeader, txs, Array.Empty(), payloadAttributes?.Withdrawals, payloadAttributes?.Deposits, payloadAttributes?.ValidatorExits); + Block block = new(blockHeader, txs, Array.Empty(), payloadAttributes?.Withdrawals); if (_producingBlockLock.Wait(BlockProductionTimeout)) { From 71611024634ba2a37c35dacfadf8bedbf1b8491f Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 9 Apr 2024 10:34:09 +0200 Subject: [PATCH 116/551] start --- .../Nethermind.Core/Specs/IReleaseSpec.cs | 8 ++++++++ src/Nethermind/Nethermind.Evm/Instruction.cs | 1 + .../Nethermind.Evm/VirtualMachine.cs | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index f7e8519de72..cbd0c464b2a 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -278,6 +278,12 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// bool IsEip6780Enabled { get; } + /// + /// https://eips.ethereum.org/EIPS/eip-3074 + /// AUTH and AUTHCALL for EOA + /// + bool IsEip3074Enabled { get; } + /// /// Should transactions be validated against chainId. /// @@ -361,5 +367,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool IsBeaconBlockRootAvailable => IsEip4788Enabled; public bool MCopyIncluded => IsEip5656Enabled; public bool BlobBaseFeeEnabled => IsEip4844Enabled; + + bool AuthCallsEnabled => IsEip3074Enabled; } } diff --git a/src/Nethermind/Nethermind.Evm/Instruction.cs b/src/Nethermind/Nethermind.Evm/Instruction.cs index ab43e5c3888..1f6b077135a 100644 --- a/src/Nethermind/Nethermind.Evm/Instruction.cs +++ b/src/Nethermind/Nethermind.Evm/Instruction.cs @@ -174,6 +174,7 @@ public enum Instruction : byte REVERT = 0xfd, INVALID = 0xfe, SELFDESTRUCT = 0xff, + AUTH = 0xC, } public static class InstructionExtensions diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 64a9c11ea86..d0d9edb6e92 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -38,6 +38,7 @@ namespace Nethermind.Evm; using System.Threading; using Int256; +using Nethermind.Crypto; public class VirtualMachine : IVirtualMachine { @@ -2095,6 +2096,24 @@ private CallResult ExecuteCode Date: Thu, 18 Apr 2024 15:15:12 +0200 Subject: [PATCH 117/551] AUTH opcode --- .../Nethermind.Core/Eip3074Constants.cs | 15 ++ .../Nethermind.Evm.Test/Eip3074Tests.cs | 216 ++++++++++++++++++ src/Nethermind/Nethermind.Evm/EvmException.cs | 3 +- src/Nethermind/Nethermind.Evm/EvmState.cs | 1 + .../Nethermind.Evm/ExecutionType.cs | 3 +- src/Nethermind/Nethermind.Evm/GasCostOf.cs | 1 + src/Nethermind/Nethermind.Evm/Instruction.cs | 3 +- .../Nethermind.Evm/VirtualMachine.cs | 93 +++++++- .../OverridableReleaseSpec.cs | 1 + .../ChainSpecStyle/ChainParameters.cs | 1 + .../ChainSpecBasedSpecProvider.cs | 1 + .../ChainSpecStyle/ChainSpecLoader.cs | 1 + .../Json/ChainSpecParamsJson.cs | 1 + .../Nethermind.Specs/ReleaseSpec.cs | 2 + .../SystemTransactionReleaseSpec.cs | 1 + 15 files changed, 328 insertions(+), 15 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core/Eip3074Constants.cs create mode 100644 src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs diff --git a/src/Nethermind/Nethermind.Core/Eip3074Constants.cs b/src/Nethermind/Nethermind.Core/Eip3074Constants.cs new file mode 100644 index 00000000000..1b97f3e7164 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Eip3074Constants.cs @@ -0,0 +1,15 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core; + +/// +/// Represents the EIP-3074 parameters. +/// +public class Eip3074Constants +{ + /// + /// Used to prevent signature collision with other signing formats + /// + public const byte AuthMagic = 0x04; +} diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs new file mode 100644 index 00000000000..6b447c0f56e --- /dev/null +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -0,0 +1,216 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Microsoft.AspNetCore.DataProtection.KeyManagement; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.Crypto; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Specs; +using Nethermind.Specs.Forks; +using Nethermind.Specs.Test; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Nethermind.Evm.Test +{ + public class Eip3074Tests : VirtualMachineTestsBase + { + protected override ForkActivation Activation => MainnetSpecProvider.PragueActivation; + protected override ulong Timestamp => MainnetSpecProvider.PragueBlockTimestamp; + + public static IEnumerable AuthCases() + { + yield return new object[] { TestItem.PrivateKeyB, TestItem.AddressB, 0x1 }; + yield return new object[] { TestItem.PrivateKeyC, TestItem.AddressC, 0x1 }; + yield return new object[] { TestItem.PrivateKeyC, TestItem.AddressD, 0x0 }; + yield return new object[] { TestItem.PrivateKeyD, TestItem.AddressC, 0x0 }; + } + + [TestCaseSource(nameof(AuthCases))] + public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(PrivateKey signer, Address authority, int expected) + { + List msg = + [ + Eip3074Constants.AuthMagic, + .. ((UInt256)SpecProvider.ChainId).ToBigEndian().PadLeft(32), + .. TestState.GetNonce(signer.Address).PaddedBytes(32), + .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), + ]; + + byte[] commit = new byte[32]; + commit[0] = 0xff; + msg.AddRange(commit); + + Hash256 msgDigest = Keccak.Compute(msg.ToArray()); + EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); + + Signature signature = ecdsa.Sign(signer, msgDigest); + //Recovery id/yParity needs to be at index 0 + var data = signature.BytesWithRecovery[64..] + .Concat(signature.BytesWithRecovery[..64]) + .Concat(commit).ToArray(); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(authority) + .Op(Instruction.AUTH) + + //Return the result of AUTH + .Op(Instruction.PUSH0) + .Op (Instruction.MSTORE8) + .PushSingle(1) + .Op(Instruction.PUSH0) + .Op (Instruction.RETURN) + .Done; + + var result = Execute(code); + + Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); + } + + [TestCase(true, 0)] + [TestCase(false, 1)] + public void ExecuteAuth_SignerNonceIsIncrementedAfterAUTH_ReturnsZero(bool incrementNonce, int expected) + { + var signer = TestItem.PrivateKeyB; + var authority = TestItem.AddressB; + + TestState.CreateAccount(TestItem.AddressB, 1.Ether()); + + if (incrementNonce) + TestState.IncrementNonce(TestItem.AddressB); + + List msg = + [ + Eip3074Constants.AuthMagic, + .. ((UInt256)SpecProvider.ChainId).ToBigEndian().PadLeft(32), + .. new byte[32], + .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), + ]; + + byte[] commit = new byte[32]; + commit[0] = 0xff; + msg.AddRange(commit); + + Hash256 msgDigest = Keccak.Compute(msg.ToArray()); + EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); + + Signature signature = ecdsa.Sign(signer, msgDigest); + //Recovery id/yParity needs to be at index 0 + var data = signature.BytesWithRecovery[64..] + .Concat(signature.BytesWithRecovery[..64]) + .Concat(commit).ToArray(); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(authority) + .Op(Instruction.AUTH) + + //Return the result of AUTH + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE8) + .PushSingle(1) + .Op(Instruction.PUSH0) + .Op(Instruction.RETURN) + .Done; + + var result = Execute(code); + + Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); + } + + [Test] + public void ExecuteAUTHCALL() + { + var signer = TestItem.PrivateKeyB; + var authority = TestItem.AddressB; + + + List msg = + [ + Eip3074Constants.AuthMagic, + .. ((UInt256)SpecProvider.ChainId).ToBigEndian().PadLeft(32), + .. TestState.GetNonce(signer.Address).PaddedBytes(32), + .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), + ]; + + byte[] commit = new byte[32]; + commit[0] = 0xff; + msg.AddRange(commit); + + Hash256 msgDigest = Keccak.Compute(msg.ToArray()); + EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); + + Signature signature = ecdsa.Sign(signer, msgDigest); + //Recovery id/yParity needs to be at index 0 + var data = signature.BytesWithRecovery[64..] + .Concat(signature.BytesWithRecovery[..64]) + .Concat(commit).ToArray(); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(authority) + .Op(Instruction.AUTH) + + //Just throw away the result + .POP() + //AUTHCALL params + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.AddressC) + .PushData(1000000) + .Done; + + var result = Execute(code); + + } + + + } +} diff --git a/src/Nethermind/Nethermind.Evm/EvmException.cs b/src/Nethermind/Nethermind.Evm/EvmException.cs index 7bc74c52c79..d7dad8b4efe 100644 --- a/src/Nethermind/Nethermind.Evm/EvmException.cs +++ b/src/Nethermind/Nethermind.Evm/EvmException.cs @@ -28,6 +28,7 @@ public enum EvmExceptionType NotEnoughBalance, Other, Revert, - InvalidCode + InvalidCode, + AuthorizedNotSet } } diff --git a/src/Nethermind/Nethermind.Evm/EvmState.cs b/src/Nethermind/Nethermind.Evm/EvmState.cs index cd2fa29cb3a..f52bb5b5da6 100644 --- a/src/Nethermind/Nethermind.Evm/EvmState.cs +++ b/src/Nethermind/Nethermind.Evm/EvmState.cs @@ -231,6 +231,7 @@ public Address From public long Refund { get; set; } public Address To => Env.CodeSource ?? Env.ExecutingAccount; + public Address? Authorized { get; set; } internal bool IsPrecompile => Env.CodeInfo.IsPrecompile; public readonly ExecutionEnvironment Env; diff --git a/src/Nethermind/Nethermind.Evm/ExecutionType.cs b/src/Nethermind/Nethermind.Evm/ExecutionType.cs index 95045606b06..3986dff3587 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionType.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionType.cs @@ -22,7 +22,8 @@ public enum ExecutionType CALLCODE, DELEGATECALL, CREATE, - CREATE2 + CREATE2, + AUTHCALL } // ReSharper restore IdentifierTypo InconsistentNaming } diff --git a/src/Nethermind/Nethermind.Evm/GasCostOf.cs b/src/Nethermind/Nethermind.Evm/GasCostOf.cs index 68dc8cae654..8e8587e8ec9 100644 --- a/src/Nethermind/Nethermind.Evm/GasCostOf.cs +++ b/src/Nethermind/Nethermind.Evm/GasCostOf.cs @@ -62,5 +62,6 @@ public static class GasCostOf public const long AccessStorageListEntry = 1900; // eip-2930 public const long TLoad = WarmStateRead; // eip-1153 public const long TStore = WarmStateRead; // eip-1153 + public const long Auth = 3100; // eip-3074 } } diff --git a/src/Nethermind/Nethermind.Evm/Instruction.cs b/src/Nethermind/Nethermind.Evm/Instruction.cs index 1f6b077135a..08aad72e235 100644 --- a/src/Nethermind/Nethermind.Evm/Instruction.cs +++ b/src/Nethermind/Nethermind.Evm/Instruction.cs @@ -174,7 +174,8 @@ public enum Instruction : byte REVERT = 0xfd, INVALID = 0xfe, SELFDESTRUCT = 0xff, - AUTH = 0xC, + AUTH = 0xf6, + AUTHCALL = 0xf7, } public static class InstructionExtensions diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index d0d9edb6e92..9c10672bd7f 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -35,6 +35,7 @@ namespace Nethermind.Evm; using System.Collections.Frozen; using System.Linq; +using System.Runtime.Intrinsics.X86; using System.Threading; using Int256; @@ -198,6 +199,8 @@ internal sealed class VirtualMachine : IVirtualMachine where TLogger : private ReadOnlyMemory _returnDataBuffer = Array.Empty(); private ITxTracer _txTracer = NullTxTracer.Instance; + private EthereumEcdsa _ecdsa; + public VirtualMachine( IBlockhashProvider? blockhashProvider, ISpecProvider? specProvider, @@ -207,6 +210,7 @@ public VirtualMachine( _blockhashProvider = blockhashProvider ?? throw new ArgumentNullException(nameof(blockhashProvider)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _chainId = ((UInt256)specProvider.ChainId).ToBigEndian(); + _ecdsa = new EthereumEcdsa(specProvider.ChainId, LimboLogs.Instance); } public TransactionSubstate Run(EvmState state, IWorldState worldState, ITxTracer txTracer) @@ -1855,6 +1859,7 @@ private CallResult ExecuteCode(vmState, ref stack, ref gasAvailable, spec, instruction, out returnData); if (exceptionType != EvmExceptionType.None) goto ReturnFailure; @@ -2098,19 +2103,68 @@ private CallResult ExecuteCode commit; + + //TODO bounds check - check GETH + var data = vmState.Memory.Load(in a, b); + + var yParity = data.Span[0]; + + Signature signature = new Signature(data[1..65].Span, yParity); + + if (data.Length > 65) + commit = data[65..].Span; + else + commit = new ReadOnlySpan(); + + byte[] chainId = _chainId.PadLeft(32); + byte[] authorityNonce = _state.GetNonce(authority).PaddedBytes(32); + //TODO is ExecutingAccount correct when DELEGATECALL and CALLCODE? + byte[] invokerAddress = vmState.Env.ExecutingAccount.Bytes.PadLeft(32); + + Span msg = stackalloc byte[1 + 32 + 32 + 32 + commit.Length]; + msg[0] = Eip3074Constants.AuthMagic; + for (int i = 0; i < 32; i++) + { + int shift = i + 1; + msg[shift] = chainId[i]; + msg[shift + 32] = authorityNonce[i]; + msg[shift + 64] = invokerAddress[i]; + if (i < commit.Length) + { + msg[shift + 96] = commit[i]; + } + } + + Hash256 digest = Keccak.Compute(msg); + //TODO handle exception + Address recovered = _ecdsa.RecoverPublicKey(signature, digest).Address; + + if (recovered == authority) + { + stack.PushUInt256(1); + vmState.Authorized = authority; + } + else + { + stack.PushUInt256(0); + vmState.Authorized = null; + } break; } @@ -2208,7 +2262,11 @@ private EvmExceptionType InstructionCall( Metrics.Calls++; if (instruction == Instruction.DELEGATECALL && !spec.DelegateCallEnabled || - instruction == Instruction.STATICCALL && !spec.StaticCallEnabled) return EvmExceptionType.BadInstruction; + instruction == Instruction.STATICCALL && !spec.StaticCallEnabled || + instruction == Instruction.AUTHCALL && !spec.AuthCallsEnabled) return EvmExceptionType.BadInstruction; + + if (instruction == Instruction.AUTHCALL && vmState.Authorized == null) + return EvmExceptionType.AuthorizedNotSet; if (!stack.PopUInt256(out UInt256 gasLimit)) return EvmExceptionType.StackUnderflow; Address codeSource = stack.PopAddress(); @@ -2238,7 +2296,14 @@ private EvmExceptionType InstructionCall( if (vmState.IsStatic && !transferValue.IsZero && instruction != Instruction.CALLCODE) return EvmExceptionType.StaticCallViolation; - Address caller = instruction == Instruction.DELEGATECALL ? env.Caller : env.ExecutingAccount; + Address caller; + if (instruction == Instruction.DELEGATECALL) + caller = env.Caller; + else if (instruction == Instruction.AUTHCALL) + caller = vmState.Authorized; + else + caller = env.ExecutingAccount; + Address target = instruction == Instruction.CALL || instruction == Instruction.STATICCALL ? codeSource : env.ExecutingAccount; @@ -2283,14 +2348,14 @@ private EvmExceptionType InstructionCall( long gasLimitUl = (long)gasLimit; if (!UpdateGas(gasLimitUl, ref gasAvailable)) return EvmExceptionType.OutOfGas; - if (!transferValue.IsZero) + if (!transferValue.IsZero && instruction != Instruction.AUTHCALL) { if (typeof(TTracingRefunds) == typeof(IsTracing)) _txTracer.ReportExtraGasPressure(GasCostOf.CallStipend); gasLimitUl += GasCostOf.CallStipend; } - + UInt256 balanceToDebit = instruction == Instruction.AUTHCALL ? _state.GetBalance(vmState.Authorized) : _state.GetBalance(env.ExecutingAccount); if (env.CallDepth >= MaxCallDepth || - !transferValue.IsZero && _state.GetBalance(env.ExecutingAccount) < transferValue) + !transferValue.IsZero && balanceToDebit < transferValue) { _returnDataBuffer = Array.Empty(); stack.PushZero(); @@ -2890,6 +2955,10 @@ private static ExecutionType GetCallExecutionType(Instruction instruction, bool { executionType = ExecutionType.CALLCODE; } + else if (instruction == Instruction.AUTHCALL) + { + executionType = ExecutionType.AUTHCALL; + } else { throw new NotSupportedException($"Execution type is undefined for {instruction.GetName(isPostMerge)}"); diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index b36a57071d0..ba737b5037e 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -156,6 +156,7 @@ public ulong Eip4844TransitionTimestamp public bool IsEip5656Enabled => _spec.IsEip5656Enabled; public bool IsEip6780Enabled => _spec.IsEip6780Enabled; public bool IsEip4788Enabled => _spec.IsEip4788Enabled; + public bool IsEip3074Enabled => _spec.IsEip3074Enabled; public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs index 817250bc01e..2a5c8408eac 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs @@ -116,6 +116,7 @@ public class ChainParameters public ulong? Eip5656TransitionTimestamp { get; set; } public ulong? Eip6780TransitionTimestamp { get; set; } public ulong? Eip4788TransitionTimestamp { get; set; } + public ulong? Eip3074TransitionTimestamp { get; set; } public Address Eip4788ContractAddress { get; set; } #region EIP-4844 parameters diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index 7aad4bac04f..8606a94202e 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -250,6 +250,7 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip5656Enabled = (chainSpec.Parameters.Eip5656TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip6780Enabled = (chainSpec.Parameters.Eip6780TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; + releaseSpec.IsEip3074Enabled = (chainSpec.Parameters.Eip3074TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; return releaseSpec; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index db4155117c8..d2f36931320 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -142,6 +142,7 @@ bool GetForInnerPathExistence(KeyValuePair o) => Eip5656TransitionTimestamp = chainSpecJson.Params.Eip5656TransitionTimestamp, Eip6780TransitionTimestamp = chainSpecJson.Params.Eip6780TransitionTimestamp, Eip4788TransitionTimestamp = chainSpecJson.Params.Eip4788TransitionTimestamp, + Eip3074TransitionTimestamp = chainSpecJson.Params.Eip3074TransitionTimestamp, Eip4788ContractAddress = chainSpecJson.Params.Eip4788ContractAddress ?? Eip4788Constants.BeaconRootsAddress, TransactionPermissionContract = chainSpecJson.Params.TransactionPermissionContract, TransactionPermissionContractTransition = chainSpecJson.Params.TransactionPermissionContractTransition, diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs index 5f22e8e6a85..03d94a8e46b 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs @@ -140,6 +140,7 @@ internal class ChainSpecParamsJson public ulong? Eip5656TransitionTimestamp { get; set; } public ulong? Eip6780TransitionTimestamp { get; set; } public ulong? Eip4788TransitionTimestamp { get; set; } + public ulong? Eip3074TransitionTimestamp { get; set; } public Address Eip4788ContractAddress { get; set; } public UInt256? Eip4844BlobGasPriceUpdateFraction { get; set; } public ulong? Eip4844MaxBlobGasPerBlock { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index 5de83c8356b..6aa949a9543 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -84,6 +84,7 @@ public ReleaseSpec Clone() public bool IsEip5656Enabled { get; set; } public bool IsEip6780Enabled { get; set; } public bool IsEip4788Enabled { get; set; } + public bool IsEip3074Enabled { get; set; } private Address _eip4788ContractAddress; public Address Eip4788ContractAddress @@ -91,5 +92,6 @@ public Address Eip4788ContractAddress get => IsEip4788Enabled ? _eip4788ContractAddress : null; set => _eip4788ContractAddress = value; } + } } diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index 8774d7a03ae..ffb052cc38e 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -129,6 +129,7 @@ public bool IsEip158IgnoredAccount(Address address) public bool IsEip5656Enabled => _spec.IsEip5656Enabled; public bool IsEip6780Enabled => _spec.IsEip6780Enabled; public bool IsEip4788Enabled => _spec.IsEip4788Enabled; + public bool IsEip3074Enabled => _spec.IsEip3074Enabled; public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; From 38fd51856e6a741c42dcbe2de5a5e85dd03f25b6 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 19 Apr 2024 16:48:32 +0200 Subject: [PATCH 118/551] Revert csproj changes --- .../ValidatorExit/ValidatorExitEipHandler.cs | 1 + src/Nethermind/Nethermind.Runner/Nethermind.Runner.csproj | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs index 1d68d06f10b..8f9eee21f76 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs @@ -104,3 +104,4 @@ private void ResetExitCount(IReleaseSpec spec, IWorldState state) state.Set(exitCountCell, UInt256.Zero.ToLittleEndian()); } } +z diff --git a/src/Nethermind/Nethermind.Runner/Nethermind.Runner.csproj b/src/Nethermind/Nethermind.Runner/Nethermind.Runner.csproj index 11aec26ebaf..fde42f38aaf 100644 --- a/src/Nethermind/Nethermind.Runner/Nethermind.Runner.csproj +++ b/src/Nethermind/Nethermind.Runner/Nethermind.Runner.csproj @@ -123,5 +123,6 @@ + From f6236dbd395df644eae26c89165949badad44718 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 19 Apr 2024 16:49:32 +0200 Subject: [PATCH 119/551] fix build --- .../ValidatorExit/ValidatorExitEipHandler.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs index 8f9eee21f76..1d68d06f10b 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs @@ -104,4 +104,3 @@ private void ResetExitCount(IReleaseSpec spec, IWorldState state) state.Set(exitCountCell, UInt256.Zero.ToLittleEndian()); } } -z From 9a41250756918eeec00bb5cd3b2311e6c6e27f10 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 19 Apr 2024 17:49:02 +0200 Subject: [PATCH 120/551] wip --- .../ValidatorExit/WithdrawRequestsContract.cs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs new file mode 100644 index 00000000000..fabefc8c623 --- /dev/null +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Reflection.Metadata; +using Nethermind.Blockchain.Contracts; +using Nethermind.Core.Specs; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.State; + +namespace Nethermind.Blockchain.ValidatorExit; + +public class WithdrawRequestsContract : Contract +{ + ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state) + { + CallOutputTracer tracer = new(); + + try + { + _transactionProcessor.Execute(transaction, new BlockExecutionContext(header), tracer); + result = tracer.ReturnValue; + return tracer.StatusCode == StatusCode.Success; + } + catch (Exception) + { + result = null; + return false; + } + } +} From b8f3c26bc9cf6282b0a6180471d09216b467957f Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sat, 20 Apr 2024 23:36:25 +0200 Subject: [PATCH 121/551] working on 7002 contract --- .../ValidatorExit/ValidatorExitEipHandler.cs | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs index 1d68d06f10b..9e223146b2b 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs @@ -12,30 +12,32 @@ namespace Nethermind.Blockchain.ValidatorExit; // https://eips.ethereum.org/EIPS/eip-7002#block-processing public class ValidatorExitEipHandler : IValidatorExitEipHandler { - private static readonly UInt256 ExcessExitsStorageSlot = 0; - private static readonly UInt256 ExitCountStorageSlot = 1; - private static readonly UInt256 ExitMessageQueueHeadStorageSlot = 2; - private static readonly UInt256 ExitMessageQueueTailStorageSlot = 3; - private static readonly UInt256 ExitMessageQueueStorageOffset = 4; - private static readonly UInt256 MaxExitsPerBlock = 16; - private static readonly UInt256 TargetExitsPerBlock = 2; + private static readonly UInt256 ExcessWithdrawalRequestsStorageSlot = 0; + private static readonly UInt256 WithdrawalRequestCountStorageSlot = 1; + private static readonly UInt256 WithdrawalRequestQueueHeadStorageSlot = 2; + private static readonly UInt256 WithdrawalRequestQueueTailStorageSlot = 3; + private static readonly UInt256 WithdrawalRequestQueueStorageOffset = 4; + private static readonly UInt256 MaxWithdrawalRequestsPerBlock = 16; + private static readonly UInt256 TargetWithdrawalRequestsPerBlock = 2; + // private static readonly UInt256 MinWithdrawalRequestFee = 1; + // private static readonly UInt256 WithdrawalRequestFeeUpdateFraction = 17; // Reads validator exit information from the precompile public ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state) { - StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, ExitMessageQueueHeadStorageSlot); - StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, ExitMessageQueueTailStorageSlot); + StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueHeadStorageSlot); + StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueTailStorageSlot); UInt256 queueHeadIndex = new(state.Get(queueHeadIndexCell)); UInt256 queueTailIndex = new(state.Get(queueTailIndexCell)); UInt256 numExitsInQueue = queueTailIndex - queueHeadIndex; - UInt256 numExitsToDeque = UInt256.Min(numExitsInQueue, MaxExitsPerBlock); + UInt256 numExitsToDeque = UInt256.Min(numExitsInQueue, MaxWithdrawalRequestsPerBlock); var validatorExits = new ValidatorExit[(int)numExitsToDeque]; for (UInt256 i = 0; i < numExitsToDeque; ++i) { - UInt256 queueStorageSlot = ExitMessageQueueStorageOffset + (queueHeadIndex + i) * 3; + UInt256 queueStorageSlot = WithdrawalRequestQueueStorageOffset + (queueHeadIndex + i) * 3; StorageCell sourceAddressCell = new(spec.Eip7002ContractAddress, queueStorageSlot); StorageCell validatorAddressFirstCell = new(spec.Eip7002ContractAddress, queueStorageSlot + 1); StorageCell validatorAddressSecondCell = new(spec.Eip7002ContractAddress, queueStorageSlot + 2); @@ -60,14 +62,14 @@ public void UpdateExitPrecompile(IReleaseSpec spec, IWorldState state) private void UpdateExitQueue(IReleaseSpec spec, IWorldState state) { - StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, ExitMessageQueueHeadStorageSlot); - StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, ExitMessageQueueTailStorageSlot); + StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueHeadStorageSlot); + StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueTailStorageSlot); UInt256 queueHeadIndex = new(state.Get(queueHeadIndexCell)); UInt256 queueTailIndex = new(state.Get(queueTailIndexCell)); UInt256 numExitsInQueue = queueTailIndex - queueHeadIndex; - UInt256 numExitsDequeued = UInt256.Min(numExitsInQueue, MaxExitsPerBlock); + UInt256 numExitsDequeued = UInt256.Min(numExitsInQueue, MaxWithdrawalRequestsPerBlock); UInt256 newQueueHeadIndex = queueHeadIndex + numExitsDequeued; if (newQueueHeadIndex == queueTailIndex) { @@ -82,16 +84,16 @@ private void UpdateExitQueue(IReleaseSpec spec, IWorldState state) private void UpdateExcessExits(IReleaseSpec spec, IWorldState state) { - StorageCell previousExcessExitsCell = new(spec.Eip7002ContractAddress, ExcessExitsStorageSlot); - StorageCell exitCountCell = new(spec.Eip7002ContractAddress, ExitCountStorageSlot); + StorageCell previousExcessExitsCell = new(spec.Eip7002ContractAddress, ExcessWithdrawalRequestsStorageSlot); + StorageCell exitCountCell = new(spec.Eip7002ContractAddress, WithdrawalRequestCountStorageSlot); UInt256 previousExcessExits = new(state.Get(previousExcessExitsCell)); UInt256 exitCount = new(state.Get(exitCountCell)); UInt256 newExcessExits = 0; - if (previousExcessExits + exitCount > TargetExitsPerBlock) + if (previousExcessExits + exitCount > TargetWithdrawalRequestsPerBlock) { - newExcessExits = previousExcessExits + exitCount - TargetExitsPerBlock; + newExcessExits = previousExcessExits + exitCount - TargetWithdrawalRequestsPerBlock; } @@ -100,7 +102,7 @@ private void UpdateExcessExits(IReleaseSpec spec, IWorldState state) private void ResetExitCount(IReleaseSpec spec, IWorldState state) { - StorageCell exitCountCell = new(spec.Eip7002ContractAddress, ExitCountStorageSlot); + StorageCell exitCountCell = new(spec.Eip7002ContractAddress, WithdrawalRequestCountStorageSlot); state.Set(exitCountCell, UInt256.Zero.ToLittleEndian()); } } From 4857702a38b56a0054e8eb2d2ef946b9bb2f0bdd Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sun, 21 Apr 2024 12:25:12 +0200 Subject: [PATCH 122/551] working on system call --- .../ValidatorExit/WithdrawRequestsContract.cs | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs index fabefc8c623..895415b4953 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs @@ -2,31 +2,57 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; using System.Reflection.Metadata; using Nethermind.Blockchain.Contracts; +using Nethermind.Core; using Nethermind.Core.Specs; +using Nethermind.Crypto; using Nethermind.Evm; using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; using Nethermind.State; namespace Nethermind.Blockchain.ValidatorExit; -public class WithdrawRequestsContract : Contract +public class WithdrawRequestsHandler { - ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state) + private readonly ITransactionProcessor _transactionProcessor; + private const long GasLimit = 30_000_000L; + + public WithdrawRequestsHandler( + ITransactionProcessor transactionProcessor) + { + _transactionProcessor = transactionProcessor; + } + ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state, BlockHeader header) { CallOutputTracer tracer = new(); try { + Transaction? transaction = new() + { + Value = UInt256.Zero, + Data = Array.Empty(), + To = spec.Eip7002ContractAddress, // ToDo set default address + SenderAddress = Address.SystemUser, + GasLimit = GasLimit, + GasPrice = UInt256.Zero, + }; + transaction.Hash = transaction.CalculateHash(); + _transactionProcessor.Execute(transaction, new BlockExecutionContext(header), tracer); - result = tracer.ReturnValue; - return tracer.StatusCode == StatusCode.Success; + var result = tracer.ReturnValue; + var withdrawalRequests = new List(); + + + return withdrawalRequests.ToArray(); } catch (Exception) { - result = null; - return false; + return null; } } } From 910174d91a1dcea72224e5e08fc1caa6dfa306be Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sun, 21 Apr 2024 16:50:25 +0200 Subject: [PATCH 123/551] add amount --- .../ValidatorExit/IValidatorExitEipHandler.cs | 4 +- .../ValidatorExit/ValidatorExitEipHandler.cs | 55 ++++++------------- .../Processing/BlockProcessor.cs | 2 +- .../Encoding/BlockDecoderTests.cs | 2 +- .../Encoding/ValidatorExitDecoderTests.cs | 4 +- .../Extensions/UInt64Extensions.cs | 26 +++++++++ .../Nethermind.Core/ValidatorExit.cs | 4 +- .../ValidatorExitsDecoder.cs | 10 +++- 8 files changed, 59 insertions(+), 48 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs index 83a6382c4c5..77aa775b25b 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs @@ -9,7 +9,5 @@ namespace Nethermind.Blockchain.ValidatorExit; public interface IValidatorExitEipHandler { - ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state); - - void UpdateExitPrecompile(IReleaseSpec spec, IWorldState state); + ValidatorExit[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state); } diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs index 9e223146b2b..d0a9c028094 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs @@ -3,6 +3,7 @@ using System.Linq; using Nethermind.Core; +using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Int256; using Nethermind.State; @@ -19,11 +20,20 @@ public class ValidatorExitEipHandler : IValidatorExitEipHandler private static readonly UInt256 WithdrawalRequestQueueStorageOffset = 4; private static readonly UInt256 MaxWithdrawalRequestsPerBlock = 16; private static readonly UInt256 TargetWithdrawalRequestsPerBlock = 2; - // private static readonly UInt256 MinWithdrawalRequestFee = 1; - // private static readonly UInt256 WithdrawalRequestFeeUpdateFraction = 17; + + + + // Will be moved to system transaction + public ValidatorExit[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state) + { + ValidatorExit[] exits = DequeueWithdrawalRequests(spec, state); + UpdateExcessExits(spec, state); + ResetExitCount(spec, state); + return exits; + } // Reads validator exit information from the precompile - public ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state) + public ValidatorExit[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldState state) { StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueHeadStorageSlot); StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueTailStorageSlot); @@ -31,11 +41,11 @@ public ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState st UInt256 queueHeadIndex = new(state.Get(queueHeadIndexCell)); UInt256 queueTailIndex = new(state.Get(queueTailIndexCell)); - UInt256 numExitsInQueue = queueTailIndex - queueHeadIndex; - UInt256 numExitsToDeque = UInt256.Min(numExitsInQueue, MaxWithdrawalRequestsPerBlock); + UInt256 numInQueue = queueTailIndex - queueHeadIndex; + UInt256 numDequeued = UInt256.Min(numInQueue, MaxWithdrawalRequestsPerBlock); - var validatorExits = new ValidatorExit[(int)numExitsToDeque]; - for (UInt256 i = 0; i < numExitsToDeque; ++i) + var validatorExits = new ValidatorExit[(int)numDequeued]; + for (UInt256 i = 0; i < numDequeued; ++i) { UInt256 queueStorageSlot = WithdrawalRequestQueueStorageOffset + (queueHeadIndex + i) * 3; StorageCell sourceAddressCell = new(spec.Eip7002ContractAddress, queueStorageSlot); @@ -46,42 +56,13 @@ public ValidatorExit[] CalculateValidatorExits(IReleaseSpec spec, IWorldState st state.Get(validatorAddressFirstCell)[..32].ToArray() .Concat(state.Get(validatorAddressSecondCell)[..16].ToArray()) .ToArray(); + ulong amount = state.Get(validatorAddressSecondCell)[16..24].ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(); validatorExits[(int)i] = new ValidatorExit { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey }; } return validatorExits; } - // Will be moved to system transaction - public void UpdateExitPrecompile(IReleaseSpec spec, IWorldState state) - { - UpdateExitQueue(spec, state); - UpdateExcessExits(spec, state); - ResetExitCount(spec, state); - } - - private void UpdateExitQueue(IReleaseSpec spec, IWorldState state) - { - StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueHeadStorageSlot); - StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueTailStorageSlot); - - UInt256 queueHeadIndex = new(state.Get(queueHeadIndexCell)); - UInt256 queueTailIndex = new(state.Get(queueTailIndexCell)); - - UInt256 numExitsInQueue = queueTailIndex - queueHeadIndex; - UInt256 numExitsDequeued = UInt256.Min(numExitsInQueue, MaxWithdrawalRequestsPerBlock); - UInt256 newQueueHeadIndex = queueHeadIndex + numExitsDequeued; - if (newQueueHeadIndex == queueTailIndex) - { - state.Set(queueHeadIndexCell, UInt256.Zero.ToLittleEndian()); - state.Set(queueTailIndexCell, UInt256.Zero.ToLittleEndian()); - } - else - { - state.Set(queueHeadIndexCell, newQueueHeadIndex.ToLittleEndian()); - } - } - private void UpdateExcessExits(IReleaseSpec spec, IWorldState state) { StorageCell previousExcessExitsCell = new(spec.Eip7002ContractAddress, ExcessWithdrawalRequestsStorageSlot); diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 1e79bc32784..b1aae067d6b 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -280,7 +280,7 @@ private void ProcessValidatorExits(Block block, IReleaseSpec spec) return; } - ValidatorExit[] validatorExits = _validatorExitEipHandler.CalculateValidatorExits(spec, _stateProvider); + ValidatorExit[] validatorExits = _validatorExitEipHandler.ReadWithdrawalRequests(spec, _stateProvider); Hash256 root = ValidatorExitsTrie.CalculateRoot(validatorExits); block.Body.ValidatorExits = validatorExits; block.Header.ValidatorExitsRoot = root; diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 26ca1b400be..1dc6337c7d9 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -98,7 +98,7 @@ public BlockDecoderTests() .WithMixHash(Keccak.EmptyTreeHash) // an empty Deposit array .WithDeposits(0) - .WithValidatorExits(new[] { new ValidatorExit(TestItem.AddressA, new byte[48]) }) + .WithValidatorExits(new[] { new ValidatorExit(TestItem.AddressA, new byte[48], 12) }) .TestObject }; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs index 741fbc8c112..b75eefe25fa 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs @@ -18,7 +18,7 @@ public void Roundtrip() { byte[] validatorPubkey = new byte[48]; validatorPubkey[11] = 11; - ValidatorExit exit = new(TestItem.AddressA, validatorPubkey); + ValidatorExit exit = new(TestItem.AddressA, validatorPubkey, 0); Rlp encoded = _decoder.Encode(exit); ValidatorExit decoded = _decoder.Decode(encoded.Bytes); @@ -31,7 +31,7 @@ public void Roundtrip() public void GetLength_should_be_72() { byte[] validatorPubkey = new byte[48]; - ValidatorExit exit = new(TestItem.AddressA, validatorPubkey); + ValidatorExit exit = new(TestItem.AddressA, validatorPubkey, 0); Assert.That(_decoder.GetLength(exit, RlpBehaviors.None), Is.EqualTo(72), "GetLength"); } } diff --git a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs new file mode 100644 index 00000000000..55ca7545a10 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core.Extensions; + +public static class UInt64Extensions +{ + // ToDo add tests + public static ulong ToULongFromBigEndianByteArrayWithoutLeadingZeros(this byte[]? bytes) + { + if (bytes is null) + { + return 0L; + } + + ulong value = 0; + int length = bytes.Length; + + for (int i = 0; i < length; i++) + { + value += (ulong)bytes[length - 1 - i] << 8 * i; + } + + return value; + } +} diff --git a/src/Nethermind/Nethermind.Core/ValidatorExit.cs b/src/Nethermind/Nethermind.Core/ValidatorExit.cs index 4b3cf3e75a2..7d064e9bbd9 100644 --- a/src/Nethermind/Nethermind.Core/ValidatorExit.cs +++ b/src/Nethermind/Nethermind.Core/ValidatorExit.cs @@ -7,12 +7,14 @@ namespace Nethermind.Blockchain.ValidatorExit; public struct ValidatorExit { - public ValidatorExit(Address sourceAddress, byte[] validatorPubkey) + public ValidatorExit(Address sourceAddress, byte[] validatorPubkey, ulong amount) { SourceAddress = sourceAddress; ValidatorPubkey = validatorPubkey; + Amount = amount; } public Address SourceAddress; public byte[] ValidatorPubkey; + public ulong Amount; } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs index 6fe53d45342..ade9834e3b5 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs @@ -10,7 +10,8 @@ namespace Nethermind.Serialization.Rlp; public class ValidatorExitsDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder { public int GetLength(ValidatorExit item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOfSequence(Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey)); + Rlp.LengthOfSequence(Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey)) + + Rlp.LengthOf(item.Amount); public ValidatorExit Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -18,7 +19,8 @@ public ValidatorExit Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = Rlp Address sourceAddress = rlpStream.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); byte[] validatorPubkey = rlpStream.DecodeByteArray(); - return new ValidatorExit(sourceAddress, validatorPubkey); + ulong amount = rlpStream.DecodeULong(); + return new ValidatorExit(sourceAddress, validatorPubkey, amount); } public ValidatorExit Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -27,7 +29,8 @@ public ValidatorExit Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehav Address sourceAddress = decoderContext.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); byte[] validatorPubkey = decoderContext.DecodeByteArray(); - return new ValidatorExit(sourceAddress, validatorPubkey); + ulong amount = decoderContext.DecodeULong(); + return new ValidatorExit(sourceAddress, validatorPubkey, amount); } public void Encode(RlpStream stream, ValidatorExit item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -36,6 +39,7 @@ public void Encode(RlpStream stream, ValidatorExit item, RlpBehaviors rlpBehavio stream.StartSequence(contentLength); stream.Encode(item.SourceAddress); stream.Encode(item.ValidatorPubkey); + stream.Encode(item.Amount); } public Rlp Encode(ValidatorExit item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) From 495fd4e602c1a65748e75634c929a78eb2ead410 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sun, 21 Apr 2024 17:00:11 +0200 Subject: [PATCH 124/551] Update exits precompile --- .../ValidatorExit/ValidatorExitEipHandler.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs index d0a9c028094..e9090de2ce7 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs @@ -56,8 +56,19 @@ public ValidatorExit[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldState state.Get(validatorAddressFirstCell)[..32].ToArray() .Concat(state.Get(validatorAddressSecondCell)[..16].ToArray()) .ToArray(); - ulong amount = state.Get(validatorAddressSecondCell)[16..24].ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(); - validatorExits[(int)i] = new ValidatorExit { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey }; + ulong amount = state.Get(validatorAddressSecondCell)[16..24].ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(); // ToDo write tests to extension method + validatorExits[(int)i] = new ValidatorExit { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey, Amount = amount }; + } + + UInt256 newQueueHeadIndex = queueHeadIndex + numDequeued; + if (newQueueHeadIndex == queueTailIndex) + { + state.Set(queueHeadIndexCell, UInt256.Zero.ToLittleEndian()); + state.Set(queueTailIndexCell, UInt256.Zero.ToLittleEndian()); // ToDo ToLittleEndian?? + } + else + { + state.Set(queueHeadIndexCell, newQueueHeadIndex.ToLittleEndian()); } return validatorExits; From eabddd4f76edaf98f3aa18323f6284b4166e5a37 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sun, 21 Apr 2024 17:06:40 +0200 Subject: [PATCH 125/551] Update ValidatorExitEipHandler --- .../ValidatorExit/ValidatorExitEipHandler.cs | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs index e9090de2ce7..cba4f5dc0ef 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs @@ -76,25 +76,24 @@ public ValidatorExit[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldState private void UpdateExcessExits(IReleaseSpec spec, IWorldState state) { - StorageCell previousExcessExitsCell = new(spec.Eip7002ContractAddress, ExcessWithdrawalRequestsStorageSlot); - StorageCell exitCountCell = new(spec.Eip7002ContractAddress, WithdrawalRequestCountStorageSlot); + StorageCell previousExcessCell = new(spec.Eip7002ContractAddress, ExcessWithdrawalRequestsStorageSlot); + StorageCell countCell = new(spec.Eip7002ContractAddress, WithdrawalRequestCountStorageSlot); - UInt256 previousExcessExits = new(state.Get(previousExcessExitsCell)); - UInt256 exitCount = new(state.Get(exitCountCell)); + UInt256 previousExcess = new(state.Get(previousExcessCell)); + UInt256 count = new(state.Get(countCell)); - UInt256 newExcessExits = 0; - if (previousExcessExits + exitCount > TargetWithdrawalRequestsPerBlock) + UInt256 newExcess = 0; + if (previousExcess + count > TargetWithdrawalRequestsPerBlock) { - newExcessExits = previousExcessExits + exitCount - TargetWithdrawalRequestsPerBlock; + newExcess = previousExcess + count - TargetWithdrawalRequestsPerBlock; } - - state.Set(previousExcessExitsCell, newExcessExits.ToLittleEndian()); + state.Set(previousExcessCell, newExcess.ToLittleEndian()); } private void ResetExitCount(IReleaseSpec spec, IWorldState state) { - StorageCell exitCountCell = new(spec.Eip7002ContractAddress, WithdrawalRequestCountStorageSlot); - state.Set(exitCountCell, UInt256.Zero.ToLittleEndian()); + StorageCell countCell = new(spec.Eip7002ContractAddress, WithdrawalRequestCountStorageSlot); + state.Set(countCell, UInt256.Zero.ToLittleEndian()); } } From 302dc4ba0a970456034029ead5aacb2cd9be7493 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sun, 21 Apr 2024 23:35:03 +0200 Subject: [PATCH 126/551] Starting refactoring to ConsensusRequests --- .../ConsensusRequestsProcessor.cs | 16 ++++++++++++++++ .../IWithdrawalRequestsProcessor.cs} | 6 +++--- .../WithdrawalRequestsProcessor.cs} | 7 +++---- .../CliqueBlockProducer.cs | 2 +- .../Processing/BlockProcessor.cs | 9 +++++---- .../Producers/BlockToProduce.cs | 2 +- .../Producers/PayloadAttributes.cs | 1 - .../Builders/BlockBuilder.cs | 2 +- .../Nethermind.Core.Test/Builders/TestItem.cs | 2 +- .../Encoding/BlockDecoderTests.cs | 2 +- .../Encoding/ValidatorExitDecoderTests.cs | 2 +- src/Nethermind/Nethermind.Core/Block.cs | 2 +- src/Nethermind/Nethermind.Core/BlockBody.cs | 2 +- .../{ => ConsensusRequests}/ValidatorExit.cs | 3 +-- .../Modules/Eth/BlockForRpc.cs | 2 +- .../Data/ExecutionPayload.cs | 3 +-- .../Data/ExecutionPayloadV4.cs | 2 +- .../V62/Messages/BlockBodiesMessageSerializer.cs | 2 +- .../Nethermind.Serialization.Rlp/BlockDecoder.cs | 2 +- .../Nethermind.Serialization.Rlp/RlpStream.cs | 2 +- .../ValidatorExitsDecoder.cs | 2 +- .../ChainSpecStyle/ChainSpecLoader.cs | 2 +- .../Proofs/ValidatorExitsTrie.cs | 2 +- 23 files changed, 45 insertions(+), 32 deletions(-) create mode 100644 src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs rename src/Nethermind/Nethermind.Blockchain/{ValidatorExit/IValidatorExitEipHandler.cs => ConsensusRequests/IWithdrawalRequestsProcessor.cs} (63%) rename src/Nethermind/Nethermind.Blockchain/{ValidatorExit/ValidatorExitEipHandler.cs => ConsensusRequests/WithdrawalRequestsProcessor.cs} (96%) rename src/Nethermind/Nethermind.Core/{ => ConsensusRequests}/ValidatorExit.cs (86%) diff --git a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs new file mode 100644 index 00000000000..575b919f729 --- /dev/null +++ b/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Blockchain.ConsensusRequests; + +public class ConsensusRequestsProcessor +{ + public ConsensusRequestsProcessor() + { + + } + public void ProcessRequests() + { + + } +} diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/IWithdrawalRequestsProcessor.cs similarity index 63% rename from src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs rename to src/Nethermind/Nethermind.Blockchain/ConsensusRequests/IWithdrawalRequestsProcessor.cs index 77aa775b25b..3d3b29e505f 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/IValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/IWithdrawalRequestsProcessor.cs @@ -1,13 +1,13 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Specs; using Nethermind.State; -namespace Nethermind.Blockchain.ValidatorExit; +namespace Nethermind.Blockchain.ConsensusRequests; -public interface IValidatorExitEipHandler +public interface IWithdrawalRequestsProcessor { ValidatorExit[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state); } diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs b/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/WithdrawalRequestsProcessor.cs similarity index 96% rename from src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs rename to src/Nethermind/Nethermind.Blockchain/ConsensusRequests/WithdrawalRequestsProcessor.cs index cba4f5dc0ef..16517c06dc6 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/ValidatorExitEipHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/WithdrawalRequestsProcessor.cs @@ -3,15 +3,16 @@ using System.Linq; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Int256; using Nethermind.State; -namespace Nethermind.Blockchain.ValidatorExit; +namespace Nethermind.Blockchain.ConsensusRequests; // https://eips.ethereum.org/EIPS/eip-7002#block-processing -public class ValidatorExitEipHandler : IValidatorExitEipHandler +public class WithdrawalRequestsProcessor : IWithdrawalRequestsProcessor { private static readonly UInt256 ExcessWithdrawalRequestsStorageSlot = 0; private static readonly UInt256 WithdrawalRequestCountStorageSlot = 1; @@ -21,8 +22,6 @@ public class ValidatorExitEipHandler : IValidatorExitEipHandler private static readonly UInt256 MaxWithdrawalRequestsPerBlock = 16; private static readonly UInt256 TargetWithdrawalRequestsPerBlock = 2; - - // Will be moved to system transaction public ValidatorExit[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state) { diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index f85c09f960d..91705cbc4a7 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -15,6 +15,7 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Transactions; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Crypto; @@ -23,7 +24,6 @@ using Nethermind.Logging; using Nethermind.State; using Nethermind.State.Proofs; -using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Consensus.Clique; diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index b1aae067d6b..2d1cf2ab9e3 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -7,13 +7,14 @@ using System.Runtime.InteropServices; using System.Threading; using Nethermind.Blockchain; +using Nethermind.Blockchain.ConsensusRequests; using Nethermind.Blockchain.Receipts; -using Nethermind.Blockchain.ValidatorExit; using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Crypto; @@ -41,7 +42,7 @@ public partial class BlockProcessor : IBlockProcessor private readonly IBlockValidator _blockValidator; private readonly IRewardCalculator _rewardCalculator; private readonly IBlockProcessor.IBlockTransactionsExecutor _blockTransactionsExecutor; - private readonly IValidatorExitEipHandler _validatorExitEipHandler; + private readonly IWithdrawalRequestsProcessor _withdrawalRequestsProcessor; private readonly IDepositsProcessor _depositsProcessor; private const int MaxUncommittedBlocks = 64; @@ -77,7 +78,7 @@ public BlockProcessor( _receiptsRootCalculator = receiptsRootCalculator ?? ReceiptsRootCalculator.Instance; _depositsProcessor = depositsProcessor ?? new DepositsProcessor(logManager); _beaconBlockRootHandler = new BeaconBlockRootHandler(); - _validatorExitEipHandler = new ValidatorExitEipHandler(); + _withdrawalRequestsProcessor = new WithdrawalRequestsProcessor(); ReceiptsTracer = new BlockReceiptsTracer(); } @@ -280,7 +281,7 @@ private void ProcessValidatorExits(Block block, IReleaseSpec spec) return; } - ValidatorExit[] validatorExits = _validatorExitEipHandler.ReadWithdrawalRequests(spec, _stateProvider); + ValidatorExit[] validatorExits = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, _stateProvider); Hash256 root = ValidatorExitsTrie.CalculateRoot(validatorExits); block.Body.ValidatorExits = validatorExits; block.Header.ValidatorExitsRoot = root; diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs index cfd19244553..1c170b2d4c8 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using Nethermind.Core; -using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.ConsensusRequests; //TODO: Redo clique block producer [assembly: InternalsVisibleTo("Nethermind.Consensus.Clique")] diff --git a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs index fdc86e40eea..f247e4adee8 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs @@ -12,7 +12,6 @@ using Nethermind.Core.Specs; using Nethermind.State.Proofs; using Nethermind.Trie; -using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Consensus.Producers; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index 1597c376456..1d88514faac 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -3,7 +3,7 @@ using System; using System.Linq; -using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Crypto; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index 9edc842bcc3..155e11a345c 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -5,7 +5,7 @@ using System.IO; using System.Net; using System.Text.Json; -using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Crypto; using Nethermind.Int256; diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 1dc6337c7d9..522d99bfea2 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -3,7 +3,7 @@ using System; using System.IO; -using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs index b75eefe25fa..78868eebf87 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Test.Builders; using Nethermind.Serialization.Rlp; using NUnit.Framework; diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index 8b3031b7bd5..f4608b9eef0 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -6,7 +6,7 @@ using System.Diagnostics; using System.Linq; using System.Text; -using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Int256; diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 2e7e3eeed9e..ce35df95868 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Core { diff --git a/src/Nethermind/Nethermind.Core/ValidatorExit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ValidatorExit.cs similarity index 86% rename from src/Nethermind/Nethermind.Core/ValidatorExit.cs rename to src/Nethermind/Nethermind.Core/ConsensusRequests/ValidatorExit.cs index 7d064e9bbd9..37aa4634e0d 100644 --- a/src/Nethermind/Nethermind.Core/ValidatorExit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ValidatorExit.cs @@ -1,9 +1,8 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Core; -namespace Nethermind.Blockchain.ValidatorExit; +namespace Nethermind.Core.ConsensusRequests; public struct ValidatorExit { diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs index f8a416a9085..c6db31f1c1e 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs @@ -13,7 +13,7 @@ using Nethermind.Serialization.Rlp; using System.Text.Json.Serialization; using System.Runtime.CompilerServices; -using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.JsonRpc.Modules.Eth; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index b9a018d9a45..d918d6e07cc 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -2,9 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Generic; using System.Linq; -using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -13,6 +11,7 @@ using Nethermind.Serialization.Rlp; using Nethermind.State.Proofs; using System.Text.Json.Serialization; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Merge.Plugin.Data; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index 72546cec749..672a70b9c09 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -3,10 +3,10 @@ using System.Text.Json.Serialization; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Specs; using Nethermind.Int256; using Nethermind.State.Proofs; -using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Merge.Plugin.Data; diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index 95a40febff9..4303a223fdb 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -5,8 +5,8 @@ using DotNetty.Buffers; using Nethermind.Core; using Nethermind.Core.Buffers; +using Nethermind.Core.ConsensusRequests; using Nethermind.Serialization.Rlp; -using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Network.P2P.Subprotocols.Eth.V62.Messages { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 25352f8e46b..9dce10a662b 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -4,8 +4,8 @@ using System; using System.Buffers; using System.Collections.Generic; -using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Serialization.Rlp { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs index 9379d728245..ef4a134332e 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs @@ -16,7 +16,7 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Int256; -using Nethermind.Blockchain.ValidatorExit; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Serialization.Rlp { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs index ade9834e3b5..ab63b1dec64 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs @@ -2,8 +2,8 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Serialization.Rlp; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 326b34eeac6..aa1c3153a55 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -11,11 +11,11 @@ using System.Text.Json; using Nethermind.Config; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Int256; using Nethermind.Serialization.Json; using Nethermind.Specs.ChainSpecStyle.Json; -using Nethermind.Blockchain.ValidatorExit; namespace Nethermind.Specs.ChainSpecStyle; diff --git a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs index 6431bf6a3ab..ad722b97cce 100644 --- a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs @@ -2,8 +2,8 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using Nethermind.Blockchain.ValidatorExit; using Nethermind.Core.Buffers; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Serialization.Rlp; using Nethermind.State.Trie; From b05d3147b7ba8558ff22b027db294f3e217689bc Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sun, 21 Apr 2024 23:53:13 +0200 Subject: [PATCH 127/551] refactoring --- .../ConsensusRequestsProcessor.cs | 25 ++++++++++++++++++- .../WithdrawalRequestsProcessor.cs | 2 +- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs index 575b919f729..419100aff9c 100644 --- a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs @@ -1,16 +1,39 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.State; +using Nethermind.State.Proofs; + namespace Nethermind.Blockchain.ConsensusRequests; public class ConsensusRequestsProcessor { + private readonly WithdrawalRequestsProcessor _withdrawalRequestsProcessor; + // private readonly IDepositsProcessor _depositsProcessor; + + public ConsensusRequestsProcessor() { + _withdrawalRequestsProcessor = new WithdrawalRequestsProcessor(); } - public void ProcessRequests() + public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) { + // Process deposits + // _depositsProcessor.ProcessDeposits(block, receipts, spec); + + // Process withdrawal requests + if (spec.IsEip7002Enabled) + { + ValidatorExit[]? withdrawalRequests = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state); + Hash256 root = ValidatorExitsTrie.CalculateRoot(withdrawalRequests); + block.Body.ValidatorExits = withdrawalRequests; + block.Header.ValidatorExitsRoot = root; + } } } diff --git a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/WithdrawalRequestsProcessor.cs index 16517c06dc6..4cabda92df2 100644 --- a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/WithdrawalRequestsProcessor.cs @@ -32,7 +32,7 @@ public ValidatorExit[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState sta } // Reads validator exit information from the precompile - public ValidatorExit[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldState state) + private ValidatorExit[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldState state) { StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueHeadStorageSlot); StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueTailStorageSlot); From aadedec89a9b11df0420c3a79bf72d3edf163fda Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 11:02:46 +0200 Subject: [PATCH 128/551] cleaning namespaces --- .../Nethermind.AuRa.Test/AuraBlockProcessorTests.cs | 1 + .../Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs | 1 + .../Deposits/NullDepositsProcessor.cs | 3 +-- src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs | 1 + .../Nethermind.Consensus/Processing/BlockProcessor.cs | 1 + .../{Deposits => Requests}/DepositsProcessor.cs | 2 +- .../{Deposits => Requests}/IDepositsProcessor.cs | 4 +--- .../Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs | 1 + .../Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs | 1 + .../Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs | 2 +- .../InitializationSteps/InitializeBlockchainAuRaMerge.cs | 1 + .../Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs | 1 + src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs | 1 + .../Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs | 1 + 14 files changed, 14 insertions(+), 7 deletions(-) rename src/Nethermind/Nethermind.Consensus/{Deposits => Requests}/DepositsProcessor.cs (97%) rename src/Nethermind/Nethermind.Consensus/{Deposits => Requests}/IDepositsProcessor.cs (70%) diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs index 46f5ce2a54f..1fc5337df9e 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs @@ -9,6 +9,7 @@ using Nethermind.Blockchain.Test.Validators; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Withdrawals; diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 9affb9ec488..568b6287f3b 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -7,6 +7,7 @@ using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.AuRa.Validators; using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs index 7f257338f7b..056ed8e7690 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs @@ -1,10 +1,9 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Specs; -using System.Collections.Generic; +using Nethermind.Consensus.Requests; namespace Nethermind.Consensus.AuRa.Deposits; diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index 2aaf31c244c..f44a3b02df2 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -9,6 +9,7 @@ using Nethermind.Blockchain.Receipts; using Nethermind.Config; using Nethermind.Consensus.Comparers; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; using Nethermind.Consensus.Rewards; diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 2d1cf2ab9e3..d58267d3769 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -10,6 +10,7 @@ using Nethermind.Blockchain.ConsensusRequests; using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.BeaconBlockRoot; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs similarity index 97% rename from src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs rename to src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 2d47a59ef40..04117c7c838 100644 --- a/src/Nethermind/Nethermind.Consensus/Deposits/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -12,7 +12,7 @@ using Nethermind.Serialization.Rlp; using Nethermind.State.Proofs; -namespace Nethermind.Consensus.Withdrawals; +namespace Nethermind.Consensus.Requests; public class DepositsProcessor : IDepositsProcessor { diff --git a/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs similarity index 70% rename from src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs rename to src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs index 612047ff62c..ba2f2c10208 100644 --- a/src/Nethermind/Nethermind.Consensus/Deposits/IDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs @@ -3,10 +3,8 @@ using Nethermind.Core; using Nethermind.Core.Specs; -using Nethermind.Serialization.Rlp; -using System.Collections.Generic; -namespace Nethermind.Consensus.Withdrawals; +namespace Nethermind.Consensus.Requests; public interface IDepositsProcessor { diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 8e0355b55bf..fded42f2c78 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -14,6 +14,7 @@ using Nethermind.Consensus.Withdrawals; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Core; using Nethermind.Core.Crypto; diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 1a51f6d7671..183218da1e8 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -5,6 +5,7 @@ using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Validators; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index 34adf889580..1a41d4674e6 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -78,7 +78,7 @@ protected override BlockProcessor CreateBlockProcessor( logManager ) ), - new Consensus.Withdrawals.DepositsProcessor(logManager), + new Consensus.Requests.DepositsProcessor(logManager), null); } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs index 471acb37101..ed32ed211e8 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs @@ -7,6 +7,7 @@ using Nethermind.Consensus.AuRa.Validators; using Nethermind.Consensus.Withdrawals; using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Transactions; using Nethermind.Core; using Nethermind.Evm.TransactionProcessing; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 3bf3dbdb2ed..12b7c623043 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -13,6 +13,7 @@ using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index 58561b72405..722337f7a40 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -4,6 +4,7 @@ using System; using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs index dfc89a3785a..e4ff68a1693 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs @@ -7,6 +7,7 @@ using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; From a9a57e1620f487ebfb4ea64992f21cb774228e27 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 11:05:02 +0200 Subject: [PATCH 129/551] cleaning namespaces x2 --- .../Nethermind.Consensus/Processing/BlockProcessor.cs | 1 - .../Requests}/ConsensusRequestsProcessor.cs | 2 +- .../Requests}/IWithdrawalRequestsProcessor.cs | 2 +- .../Requests}/WithdrawalRequestsProcessor.cs | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) rename src/Nethermind/{Nethermind.Blockchain/ConsensusRequests => Nethermind.Consensus/Requests}/ConsensusRequestsProcessor.cs (95%) rename src/Nethermind/{Nethermind.Blockchain/ConsensusRequests => Nethermind.Consensus/Requests}/IWithdrawalRequestsProcessor.cs (86%) rename src/Nethermind/{Nethermind.Blockchain/ConsensusRequests => Nethermind.Consensus/Requests}/WithdrawalRequestsProcessor.cs (98%) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index d58267d3769..90bdf0d38d8 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -7,7 +7,6 @@ using System.Runtime.InteropServices; using System.Threading; using Nethermind.Blockchain; -using Nethermind.Blockchain.ConsensusRequests; using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Consensus.Requests; diff --git a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs similarity index 95% rename from src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs rename to src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 419100aff9c..2a2c41447a5 100644 --- a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -8,7 +8,7 @@ using Nethermind.State; using Nethermind.State.Proofs; -namespace Nethermind.Blockchain.ConsensusRequests; +namespace Nethermind.Consensus.Requests; public class ConsensusRequestsProcessor { diff --git a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/IWithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs similarity index 86% rename from src/Nethermind/Nethermind.Blockchain/ConsensusRequests/IWithdrawalRequestsProcessor.cs rename to src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs index 3d3b29e505f..6dfc99a929c 100644 --- a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/IWithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs @@ -5,7 +5,7 @@ using Nethermind.Core.Specs; using Nethermind.State; -namespace Nethermind.Blockchain.ConsensusRequests; +namespace Nethermind.Consensus.Requests; public interface IWithdrawalRequestsProcessor { diff --git a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs similarity index 98% rename from src/Nethermind/Nethermind.Blockchain/ConsensusRequests/WithdrawalRequestsProcessor.cs rename to src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 4cabda92df2..3cc27efddaf 100644 --- a/src/Nethermind/Nethermind.Blockchain/ConsensusRequests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -9,7 +9,7 @@ using Nethermind.Int256; using Nethermind.State; -namespace Nethermind.Blockchain.ConsensusRequests; +namespace Nethermind.Consensus.Requests; // https://eips.ethereum.org/EIPS/eip-7002#block-processing public class WithdrawalRequestsProcessor : IWithdrawalRequestsProcessor From 85754a7d1ef9e4fcbfc1ada3b4dc0ea65e52d53d Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 11:09:08 +0200 Subject: [PATCH 130/551] requests processor --- .../Nethermind.AuRa.Test/AuraBlockProcessorTests.cs | 2 +- .../Nethermind.Consensus.Clique/CliquePlugin.cs | 2 +- .../Nethermind.Consensus/Processing/BlockProcessor.cs | 2 +- .../Requests/ConsensusRequestsProcessor.cs | 7 +++---- .../Requests/DepositsProcessor.cs | 11 ----------- .../AuRaMergeEngineModuleTests.cs | 2 +- .../AuRaMergeBlockProducerEnvFactory.cs | 2 +- .../InitializeBlockchainAuRaMerge.cs | 2 +- .../EngineModuleTests.Setup.cs | 2 +- .../OptimismBlockProducerEnvFactory.cs | 2 +- 10 files changed, 11 insertions(+), 23 deletions(-) diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs index 1fc5337df9e..13f0df26656 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs @@ -161,7 +161,7 @@ void Process(AuRaBlockProcessor auRaBlockProcessor, int blockNumber, Hash256 sta LimboLogs.Instance, Substitute.For(), new WithdrawalProcessor(stateProvider, LimboLogs.Instance), - new DepositsProcessor(LimboLogs.Instance), + new DepositsProcessor(), null, txFilter, contractRewriter: contractRewriter); diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index f44a3b02df2..66ba930ea56 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -110,7 +110,7 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd NullWitnessCollector.Instance, getFromApi.LogManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager)), - new DepositsProcessor(getFromApi.LogManager)); + new DepositsProcessor()); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( readOnlyBlockTree, diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 90bdf0d38d8..69dd676e96a 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -76,7 +76,7 @@ public BlockProcessor( _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); _receiptsRootCalculator = receiptsRootCalculator ?? ReceiptsRootCalculator.Instance; - _depositsProcessor = depositsProcessor ?? new DepositsProcessor(logManager); + _depositsProcessor = depositsProcessor ?? new DepositsProcessor(); _beaconBlockRootHandler = new BeaconBlockRootHandler(); _withdrawalRequestsProcessor = new WithdrawalRequestsProcessor(); diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 2a2c41447a5..b05cbbc6a41 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -13,18 +13,17 @@ namespace Nethermind.Consensus.Requests; public class ConsensusRequestsProcessor { private readonly WithdrawalRequestsProcessor _withdrawalRequestsProcessor; - // private readonly IDepositsProcessor _depositsProcessor; - + private readonly IDepositsProcessor _depositsProcessor; public ConsensusRequestsProcessor() { _withdrawalRequestsProcessor = new WithdrawalRequestsProcessor(); - + _depositsProcessor = new DepositsProcessor(); } public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) { // Process deposits - // _depositsProcessor.ProcessDeposits(block, receipts, spec); + _depositsProcessor.ProcessDeposits(block, receipts, spec); // Process withdrawal requests if (spec.IsEip7002Enabled) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 04117c7c838..7908a6c1408 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -1,14 +1,12 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; using System.Collections.Generic; using System.Linq; using Microsoft.IdentityModel.Tokens; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; -using Nethermind.Logging; using Nethermind.Serialization.Rlp; using Nethermind.State.Proofs; @@ -16,15 +14,6 @@ namespace Nethermind.Consensus.Requests; public class DepositsProcessor : IDepositsProcessor { - private readonly ILogger _logger; - - public DepositsProcessor(ILogManager logManager) - { - ArgumentNullException.ThrowIfNull(logManager); - - _logger = logManager.GetClassLogger(); - } - public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { if (!spec.DepositsEnabled) diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index fded42f2c78..a8a5a6a6b56 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -124,7 +124,7 @@ protected override IBlockProcessor CreateBlockProcessor() LogManager ); - DepositsProcessor depositsProcessor = new(LogManager); + DepositsProcessor depositsProcessor = new(); BlockValidator = CreateBlockValidator(); IBlockProcessor processor = new BlockProcessor( diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index 1a41d4674e6..6cd63e814f6 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -78,7 +78,7 @@ protected override BlockProcessor CreateBlockProcessor( logManager ) ), - new Consensus.Requests.DepositsProcessor(logManager), + new Consensus.Requests.DepositsProcessor(), null); } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs index ed32ed211e8..5a50d55cacf 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs @@ -46,7 +46,7 @@ protected override AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter) _api.BlockTree!, new AuraWithdrawalProcessor( withdrawalContractFactory.Create(transactionProcessor!), _api.LogManager), - new DepositsProcessor(_api.LogManager), + new DepositsProcessor(), CreateAuRaValidator(), txFilter, GetGasLimitCalculator(), diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 12b7c623043..73516628c2d 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -234,7 +234,7 @@ protected override IBlockProcessor CreateBlockProcessor() { BlockValidator = CreateBlockValidator(); WithdrawalProcessor = new WithdrawalProcessor(State, LogManager); - DepositsProcessor = new DepositsProcessor(LogManager); + DepositsProcessor = new DepositsProcessor(); IBlockProcessor processor = new BlockProcessor( SpecProvider, BlockValidator, diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs index e4ff68a1693..c98c38443aa 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs @@ -93,6 +93,6 @@ protected override BlockProcessor CreateBlockProcessor( _specHelper, new Create2DeployerContractRewriter(_specHelper, _specProvider, _blockTree), new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager)), - new DepositsProcessor(logManager)); + new DepositsProcessor()); } } From 8c87e728c24fababf3fdafb690a88c554cddef33 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 22 Apr 2024 11:10:09 +0200 Subject: [PATCH 131/551] more tests --- src/Nethermind/Chains/foundation.json | 2 + .../Nethermind.Evm.Test/Eip3074Tests.cs | 101 +++++++++--------- src/Nethermind/Nethermind.Evm/EvmState.cs | 1 + .../Nethermind.Specs/Forks/18_Prague.cs | 21 ++++ .../Nethermind.Specs/MainnetSpecProvider.cs | 6 +- 5 files changed, 79 insertions(+), 52 deletions(-) create mode 100644 src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs diff --git a/src/Nethermind/Chains/foundation.json b/src/Nethermind/Chains/foundation.json index 674e828bc20..ef6d2106c1b 100644 --- a/src/Nethermind/Chains/foundation.json +++ b/src/Nethermind/Chains/foundation.json @@ -190,6 +190,8 @@ "eip4844TransitionTimestamp": "0x65F1B057", "eip5656TransitionTimestamp": "0x65F1B057", "eip6780TransitionTimestamp": "0x65F1B057", + //TODO correct this! + "eip3074TransitionTimestamp": "0x65F1B057", "terminalTotalDifficulty": "C70D808A128D7380000" }, "genesis": { diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 6b447c0f56e..4942a8a4871 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -43,7 +43,7 @@ public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(Pr .. TestState.GetNonce(signer.Address).PaddedBytes(32), .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), ]; - + byte[] commit = new byte[32]; commit[0] = 0xff; msg.AddRange(commit); @@ -76,10 +76,10 @@ .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), //Return the result of AUTH .Op(Instruction.PUSH0) - .Op (Instruction.MSTORE8) + .Op(Instruction.MSTORE8) .PushSingle(1) .Op(Instruction.PUSH0) - .Op (Instruction.RETURN) + .Op(Instruction.RETURN) .Done; var result = Execute(code); @@ -89,37 +89,17 @@ .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), [TestCase(true, 0)] [TestCase(false, 1)] - public void ExecuteAuth_SignerNonceIsIncrementedAfterAUTH_ReturnsZero(bool incrementNonce, int expected) + public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsZero(bool incrementNonce, int expected) { var signer = TestItem.PrivateKeyB; var authority = TestItem.AddressB; - TestState.CreateAccount(TestItem.AddressB, 1.Ether()); + var data = CreateSignedCommitMessage(signer); + TestState.CreateAccount(TestItem.AddressB, 1.Ether()); if (incrementNonce) TestState.IncrementNonce(TestItem.AddressB); - List msg = - [ - Eip3074Constants.AuthMagic, - .. ((UInt256)SpecProvider.ChainId).ToBigEndian().PadLeft(32), - .. new byte[32], - .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), - ]; - - byte[] commit = new byte[32]; - commit[0] = 0xff; - msg.AddRange(commit); - - Hash256 msgDigest = Keccak.Compute(msg.ToArray()); - EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); - - Signature signature = ecdsa.Sign(signer, msgDigest); - //Recovery id/yParity needs to be at index 0 - var data = signature.BytesWithRecovery[64..] - .Concat(signature.BytesWithRecovery[..64]) - .Concat(commit).ToArray(); - byte[] code = Prepare.EvmCode .PushData(data[..32]) .Op(Instruction.PUSH0) @@ -151,32 +131,11 @@ .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), } [Test] - public void ExecuteAUTHCALL() + public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_SignerIsReturned() { var signer = TestItem.PrivateKeyB; var authority = TestItem.AddressB; - - - List msg = - [ - Eip3074Constants.AuthMagic, - .. ((UInt256)SpecProvider.ChainId).ToBigEndian().PadLeft(32), - .. TestState.GetNonce(signer.Address).PaddedBytes(32), - .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), - ]; - - byte[] commit = new byte[32]; - commit[0] = 0xff; - msg.AddRange(commit); - - Hash256 msgDigest = Keccak.Compute(msg.ToArray()); - EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); - - Signature signature = ecdsa.Sign(signer, msgDigest); - //Recovery id/yParity needs to be at index 0 - var data = signature.BytesWithRecovery[64..] - .Concat(signature.BytesWithRecovery[..64]) - .Concat(commit).ToArray(); + var data = CreateSignedCommitMessage(signer); byte[] code = Prepare.EvmCode .PushData(data[..32]) @@ -197,20 +156,62 @@ .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), //Just throw away the result .POP() + //AUTHCALL params - .PushData(0) + .PushData(20) .PushData(0) .PushData(0) .PushData(0) .PushData(0) .PushData(TestItem.AddressC) .PushData(1000000) + .Op(Instruction.AUTHCALL) + .PushSingle(20) + .PushSingle(0) + .Op(Instruction.RETURN) .Done; + //Simply returns the current caller + byte[] codeReturnCaller = Prepare.EvmCode + .CALLER() + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushSingle(20) + .PushSingle(12) + .Op(Instruction.RETURN) + .Done; + + TestState.CreateAccount(TestItem.AddressC, 0); + TestState.InsertCode(TestItem.AddressC, Keccak.Compute(codeReturnCaller), codeReturnCaller, Spec); + var result = Execute(code); + Assert.That(new Address(result.ReturnValue), Is.EqualTo(TestItem.AddressB)); } + private byte[] CreateSignedCommitMessage(PrivateKey signer) + { + List msg = + [ + Eip3074Constants.AuthMagic, + .. ((UInt256)SpecProvider.ChainId).ToBigEndian().PadLeft(32), + .. TestState.GetNonce(signer.Address).PaddedBytes(32), + .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), + ]; + + byte[] commit = new byte[32]; + commit[0] = 0xff; + msg.AddRange(commit); + Hash256 msgDigest = Keccak.Compute(msg.ToArray()); + EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); + + Signature signature = ecdsa.Sign(signer, msgDigest); + //Recovery id/yParity needs to be at index 0 + var data = signature.BytesWithRecovery[64..] + .Concat(signature.BytesWithRecovery[..64]) + .Concat(commit).ToArray(); + return data; + } } } diff --git a/src/Nethermind/Nethermind.Evm/EvmState.cs b/src/Nethermind/Nethermind.Evm/EvmState.cs index f52bb5b5da6..9c40779f36c 100644 --- a/src/Nethermind/Nethermind.Evm/EvmState.cs +++ b/src/Nethermind/Nethermind.Evm/EvmState.cs @@ -217,6 +217,7 @@ public Address From case ExecutionType.CREATE: case ExecutionType.CREATE2: case ExecutionType.TRANSACTION: + case ExecutionType.AUTHCALL: return Env.Caller; case ExecutionType.DELEGATECALL: return Env.ExecutingAccount; diff --git a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs new file mode 100644 index 00000000000..f567bb2ce60 --- /dev/null +++ b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Threading; +using Nethermind.Core; +using Nethermind.Core.Specs; + +namespace Nethermind.Specs.Forks; + +public class Prague : Cancun +{ + private static IReleaseSpec _instance; + + protected Prague() + { + Name = "Prague"; + IsEip3074Enabled = true; + } + + public new static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Prague()); +} diff --git a/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs b/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs index 4108dffe7b8..486f259cfcc 100644 --- a/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs @@ -26,7 +26,8 @@ public class MainnetSpecProvider : ISpecProvider public const ulong BeaconChainGenesisTimestamp = 0x5fc63057; public const ulong ShanghaiBlockTimestamp = 0x64373057; public const ulong CancunBlockTimestamp = 0x65F1B057; - public const ulong PragueBlockTimestamp = ulong.MaxValue - 2; + //TODO correct this timestamp! + public const ulong PragueBlockTimestamp = 0x674C6BE0; public const ulong OsakaBlockTimestamp = ulong.MaxValue - 1; public IReleaseSpec GetSpec(ForkActivation forkActivation) => @@ -47,7 +48,8 @@ public IReleaseSpec GetSpec(ForkActivation forkActivation) => { BlockNumber: < ParisBlockNumber } => GrayGlacier.Instance, { Timestamp: null } or { Timestamp: < ShanghaiBlockTimestamp } => Paris.Instance, { Timestamp: < CancunBlockTimestamp } => Shanghai.Instance, - _ => Cancun.Instance + { Timestamp: < PragueBlockTimestamp } => Cancun.Instance, + _ => Prague.Instance }; public void UpdateMergeTransitionInfo(long? blockNumber, UInt256? terminalTotalDifficulty = null) From 917778777520a96430081c2181205bd94b39e9e4 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 22 Apr 2024 14:40:29 +0530 Subject: [PATCH 132/551] add Withdrawal request class --- .../ConsensusRequests/WithdrawalRequest.cs | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs new file mode 100644 index 00000000000..125e6e909bc --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -0,0 +1,46 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + + +namespace Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Extensions; +using System.Text; + +public struct WithdrawalRequest +{ + public WithdrawalRequest( + ulong amount, + Address? sourceAddress, + byte[]? validatorPubkey, + byte[]? pubKey, + byte[]? withdrawalCredentials, + byte[]? signature, + ulong? index) + { + Amount = amount; + SourceAddress = sourceAddress; + ValidatorPubkey = validatorPubkey; + PubKey = pubKey; + WithdrawalCredentials = withdrawalCredentials; + Signature = signature; + Index = index; + } + public ulong Amount; + public Address? SourceAddress; + public byte[]? ValidatorPubkey; + public byte[]? PubKey { get; set; } + public byte[]? WithdrawalCredentials { get; set; } + public byte[]? Signature { get; set; } + public ulong? Index { get; set; } + public override string ToString() => ToString(string.Empty); + + public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(WithdrawalRequest)} {{") + .Append($"{nameof(Amount)}: {Amount}, ") + .Append($"{nameof(Index)}: {Index}, ") + .Append($"{nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, ") + .Append($"{nameof(Signature)}: {Signature?.ToHexString()}, ") + .Append($"{nameof(PubKey)}: {PubKey?.ToHexString()}}}") + .Append($"{nameof(SourceAddress)}: {SourceAddress}, ") + .Append($"{nameof(ValidatorPubkey)}: {ValidatorPubkey}, ") + .ToString(); +} From 248bc8beffd86c619fcc3099fd28f9bb5677a219 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 22 Apr 2024 14:44:24 +0530 Subject: [PATCH 133/551] changed class name --- .../WithdrawalRequest.cs => ConsensusRequest.cs} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename src/Nethermind/Nethermind.Core/{ConsensusRequests/WithdrawalRequest.cs => ConsensusRequest.cs} (90%) diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequest.cs similarity index 90% rename from src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs rename to src/Nethermind/Nethermind.Core/ConsensusRequest.cs index 125e6e909bc..14216dab212 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequest.cs @@ -2,13 +2,13 @@ // SPDX-License-Identifier: LGPL-3.0-only -namespace Nethermind.Core.ConsensusRequests; +namespace Nethermind.Core; using Nethermind.Core.Extensions; using System.Text; -public struct WithdrawalRequest +public struct ConsensusRequest { - public WithdrawalRequest( + public ConsensusRequest( ulong amount, Address? sourceAddress, byte[]? validatorPubkey, @@ -34,7 +34,7 @@ public WithdrawalRequest( public ulong? Index { get; set; } public override string ToString() => ToString(string.Empty); - public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(WithdrawalRequest)} {{") + public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(ConsensusRequest)} {{") .Append($"{nameof(Amount)}: {Amount}, ") .Append($"{nameof(Index)}: {Index}, ") .Append($"{nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, ") From c65e140831292ca2c966b1537e9176779c43be71 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 12:09:27 +0200 Subject: [PATCH 134/551] Class structure --- .../Deposits/NullDepositsProcessor.cs | 4 +- .../Requests/ConsensusRequestsProcessor.cs | 3 +- .../Requests/DepositsProcessor.cs | 14 +---- .../Requests/IDepositsProcessor.cs | 3 +- .../Nethermind.Core/ConsensusRequest.cs | 46 --------------- .../ConsensusRequests/ConsensusRequest.cs | 23 ++++++++ .../ConsensusRequests/Deposit.cs | 58 +++++++++++++++++++ src/Nethermind/Nethermind.Core/Deposit.cs | 28 --------- .../DepositDecoder.cs | 2 +- 9 files changed, 92 insertions(+), 89 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequest.cs create mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs create mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs delete mode 100644 src/Nethermind/Nethermind.Core/Deposit.cs diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs index 056ed8e7690..6b5457f001c 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Consensus.Requests; @@ -9,8 +10,9 @@ namespace Nethermind.Consensus.AuRa.Deposits; public class NullDepositsProcessor : IDepositsProcessor { - public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) + public List? ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { + return null; } public static IDepositsProcessor Instance { get; } = new NullDepositsProcessor(); } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index b05cbbc6a41..fcfa859e15e 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -23,7 +23,8 @@ public ConsensusRequestsProcessor() public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) { // Process deposits - _depositsProcessor.ProcessDeposits(block, receipts, spec); + var deposits = _depositsProcessor.ProcessDeposits(block, receipts, spec); + // Process withdrawal requests if (spec.IsEip7002Enabled) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 7908a6c1408..56e855b7f8e 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -14,11 +14,10 @@ namespace Nethermind.Consensus.Requests; public class DepositsProcessor : IDepositsProcessor { - public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) + public List? ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { if (!spec.DepositsEnabled) - return; - + return null; List depositList = []; for (int i = 0; i < block.Transactions.Length; i++) @@ -34,13 +33,6 @@ public void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec } } - CalculateDepositsRoot(block, depositList, spec); - } - - private void CalculateDepositsRoot(Block block, IEnumerable deposits, IReleaseSpec spec) - { - block.Header.DepositsRoot = deposits.IsNullOrEmpty() - ? Keccak.EmptyTreeHash - : new DepositTrie(deposits.ToArray()!).RootHash; + return depositList; } } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs index ba2f2c10208..ba6ab3c818f 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.Specs; @@ -8,5 +9,5 @@ namespace Nethermind.Consensus.Requests; public interface IDepositsProcessor { - void ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec); + List? ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequest.cs deleted file mode 100644 index 14216dab212..00000000000 --- a/src/Nethermind/Nethermind.Core/ConsensusRequest.cs +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - - -namespace Nethermind.Core; -using Nethermind.Core.Extensions; -using System.Text; - -public struct ConsensusRequest -{ - public ConsensusRequest( - ulong amount, - Address? sourceAddress, - byte[]? validatorPubkey, - byte[]? pubKey, - byte[]? withdrawalCredentials, - byte[]? signature, - ulong? index) - { - Amount = amount; - SourceAddress = sourceAddress; - ValidatorPubkey = validatorPubkey; - PubKey = pubKey; - WithdrawalCredentials = withdrawalCredentials; - Signature = signature; - Index = index; - } - public ulong Amount; - public Address? SourceAddress; - public byte[]? ValidatorPubkey; - public byte[]? PubKey { get; set; } - public byte[]? WithdrawalCredentials { get; set; } - public byte[]? Signature { get; set; } - public ulong? Index { get; set; } - public override string ToString() => ToString(string.Empty); - - public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(ConsensusRequest)} {{") - .Append($"{nameof(Amount)}: {Amount}, ") - .Append($"{nameof(Index)}: {Index}, ") - .Append($"{nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, ") - .Append($"{nameof(Signature)}: {Signature?.ToHexString()}, ") - .Append($"{nameof(PubKey)}: {PubKey?.ToHexString()}}}") - .Append($"{nameof(SourceAddress)}: {SourceAddress}, ") - .Append($"{nameof(ValidatorPubkey)}: {ValidatorPubkey}, ") - .ToString(); -} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs new file mode 100644 index 00000000000..769465e1e5d --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -0,0 +1,23 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + + +namespace Nethermind.Core.ConsensusRequests; + +public enum RequestsType +{ + Deposit = 0, + WithdrawalRequest = 1 +} + +public class ConsensusRequest +{ + public RequestsType Type { get; protected set; } + public ulong AmountField { get; protected set; } + public Address? SourceAddressField { get; protected set; } + public byte[]? ValidatorPubkeyField { get; protected set; } + public byte[]? PubKeyField { get; set; } + public byte[]? WithdrawalCredentialsField { get; protected set; } + public byte[]? SignatureField { get; protected set; } + public ulong? IndexField { get; protected set; } +} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs new file mode 100644 index 00000000000..41b36ecbd90 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -0,0 +1,58 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Extensions; +using System.Text; +using Nethermind.Core.ConsensusRequests; + +namespace Nethermind.Core; + +/// +/// Represents a Deposit that has been validated at the consensus layer. +/// +public class Deposit : ConsensusRequest +{ + public Deposit() + { + Type = RequestsType.Deposit; + } + public byte[]? PubKey + { + get { return PubKeyField; } + set { PubKeyField = value; } + } + + public byte[]? WithdrawalCredentials + { + get { return WithdrawalCredentialsField; } + set { WithdrawalCredentialsField = value; } + } + + public ulong Amount + { + get { return AmountField; } + set { AmountField = value; } + } + + public byte[]? Signature + { + get { return SignatureField; } + set { SignatureField = value; } + } + public ulong? Index + { + get { return IndexField; } + set { IndexField = value; } + } + public override string ToString() => ToString(string.Empty); + + public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(Deposit)} {{") + .Append($"{nameof(Index)}: {Index}, ") + .Append($"{nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, ") + .Append($"{nameof(Amount)}: {Amount}, ") + .Append($"{nameof(Signature)}: {Signature?.ToHexString()}, ") + .Append($"{nameof(PubKey)}: {PubKey?.ToHexString()}}}") + .ToString(); + + +} diff --git a/src/Nethermind/Nethermind.Core/Deposit.cs b/src/Nethermind/Nethermind.Core/Deposit.cs deleted file mode 100644 index ef083249715..00000000000 --- a/src/Nethermind/Nethermind.Core/Deposit.cs +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Extensions; -using System.Text; - -namespace Nethermind.Core; - -/// -/// Represents a Deposit that has been validated at the consensus layer. -/// -public class Deposit -{ - public byte[]? PubKey { get; set; } - public byte[]? WithdrawalCredentials { get; set; } - public ulong Amount { get; set; } - public byte[]? Signature { get; set; } - public ulong Index { get; set; } - public override string ToString() => ToString(string.Empty); - - public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(Deposit)} {{") - .Append($"{nameof(Index)}: {Index}, ") - .Append($"{nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, ") - .Append($"{nameof(Amount)}: {Amount}, ") - .Append($"{nameof(Signature)}: {Signature?.ToHexString()}, ") - .Append($"{nameof(PubKey)}: {PubKey?.ToHexString()}}}") - .ToString(); -} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs index c4ed3ae5a4c..e8c94623bed 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -64,7 +64,7 @@ public void Encode(RlpStream stream, Deposit? item, RlpBehaviors rlpBehaviors = stream.Encode(item.WithdrawalCredentials); stream.Encode(item.Amount); stream.Encode(item.Signature); - stream.Encode(item.Index); + // stream.Encode(item.Index); ToDo fix } public Rlp Encode(Deposit? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) From a845e2219429fda2878f5ca84031066999e50dac Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 12:16:01 +0200 Subject: [PATCH 135/551] namespace cleanup --- .../Deposits/NullDepositsProcessor.cs | 1 + .../Nethermind.Consensus/Requests/DepositsProcessor.cs | 5 +---- .../Nethermind.Consensus/Requests/IDepositsProcessor.cs | 1 + .../Nethermind.Core.Test/Builders/DepositBuilder.cs | 2 ++ .../Nethermind.Core.Test/Encoding/DepositDecoderTests.cs | 1 + src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs | 2 +- .../Nethermind.Serialization.Rlp/DepositDecoder.cs | 2 +- src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs | 1 + 8 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs index 6b5457f001c..e11d00d0c0a 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs @@ -5,6 +5,7 @@ using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Consensus.Requests; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Consensus.AuRa.Deposits; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 56e855b7f8e..167f74d1b49 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -2,13 +2,10 @@ // SPDX-License-Identifier: LGPL-3.0-only using System.Collections.Generic; -using System.Linq; -using Microsoft.IdentityModel.Tokens; using Nethermind.Core; -using Nethermind.Core.Crypto; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Specs; using Nethermind.Serialization.Rlp; -using Nethermind.State.Proofs; namespace Nethermind.Consensus.Requests; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs index ba6ab3c818f..f4826c4ef75 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Specs; namespace Nethermind.Consensus.Requests; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs index b7237b35a96..5b4c1fbe723 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using Nethermind.Core.ConsensusRequests; + namespace Nethermind.Core.Test.Builders; public class DepositBuilder : BuilderBase diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs index e5d19c3ec25..bfb7266cde5 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs @@ -3,6 +3,7 @@ using System; using FluentAssertions; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Extensions; using Nethermind.Evm.Tracing.GethStyle.Custom.JavaScript; using Nethermind.Serialization.Rlp; diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs index 41b36ecbd90..6d8f66d4c21 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -5,7 +5,7 @@ using System.Text; using Nethermind.Core.ConsensusRequests; -namespace Nethermind.Core; +namespace Nethermind.Core.ConsensusRequests; /// /// Represents a Deposit that has been validated at the consensus layer. diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs index e8c94623bed..41cb418d9d7 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Serialization.Rlp; diff --git a/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs b/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs index 175c37d0a03..185cdf694ee 100644 --- a/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Serialization.Rlp; using Nethermind.State.Trie; From 2b7b740db9bb044f31c4084e03a65852108b51d8 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 12:36:01 +0200 Subject: [PATCH 136/551] withdrawalrequests --- .../CliqueBlockProducer.cs | 2 +- .../Processing/BlockProcessor.cs | 2 +- .../Producers/BlockToProduce.cs | 2 +- .../Requests/ConsensusRequestsProcessor.cs | 2 +- .../Requests/IWithdrawalRequestsProcessor.cs | 2 +- .../Requests/WithdrawalRequestsProcessor.cs | 10 ++--- .../Builders/BlockBuilder.cs | 2 +- .../Nethermind.Core.Test/Builders/TestItem.cs | 12 ++--- .../Encoding/BlockDecoderTests.cs | 7 ++- .../Encoding/ValidatorExitDecoderTests.cs | 14 ++++-- src/Nethermind/Nethermind.Core/Block.cs | 6 +-- src/Nethermind/Nethermind.Core/BlockBody.cs | 6 +-- .../ConsensusRequests/ConsensusRequest.cs | 1 - .../ConsensusRequests/Deposit.cs | 1 - .../ConsensusRequests/ValidatorExit.cs | 19 -------- .../ConsensusRequests/WithdrawalRequest.cs | 44 +++++++++++++++++++ .../Modules/Eth/BlockForRpc.cs | 2 +- .../Data/ExecutionPayload.cs | 2 +- .../Data/ExecutionPayloadV4.cs | 2 +- .../Messages/BlockBodiesMessageSerializer.cs | 2 +- .../BlockDecoder.cs | 12 ++--- .../Nethermind.Serialization.Rlp/RlpStream.cs | 2 +- .../ValidatorExitsDecoder.cs | 26 +++++++---- .../ChainSpecStyle/ChainSpecLoader.cs | 2 +- .../Proofs/ValidatorExitsTrie.cs | 10 ++--- 25 files changed, 119 insertions(+), 73 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/ValidatorExit.cs create mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index 91705cbc4a7..3025ed492f2 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -448,7 +448,7 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) Array.Empty(), spec.WithdrawalsEnabled ? Enumerable.Empty() : null, spec.DepositsEnabled ? Enumerable.Empty() : null, - spec.ValidatorExitsEnabled ? Enumerable.Empty() : null + spec.ValidatorExitsEnabled ? Enumerable.Empty() : null ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 69dd676e96a..d420f30bdd0 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -281,7 +281,7 @@ private void ProcessValidatorExits(Block block, IReleaseSpec spec) return; } - ValidatorExit[] validatorExits = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, _stateProvider); + WithdrawalRequest[] validatorExits = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, _stateProvider); Hash256 root = ValidatorExitsTrie.CalculateRoot(validatorExits); block.Body.ValidatorExits = validatorExits; block.Header.ValidatorExitsRoot = root; diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs index 1c170b2d4c8..04cacdc0ea4 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs @@ -36,7 +36,7 @@ public BlockToProduce( IEnumerable uncles, IEnumerable? withdrawals = null, IEnumerable? deposits = null, - IEnumerable? validatorExits = null) + IEnumerable? validatorExits = null) : base(blockHeader, Array.Empty(), uncles, withdrawals, deposits, validatorExits) { Transactions = transactions; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index fcfa859e15e..9a6b8edee45 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -29,7 +29,7 @@ public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, T // Process withdrawal requests if (spec.IsEip7002Enabled) { - ValidatorExit[]? withdrawalRequests = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state); + WithdrawalRequest[]? withdrawalRequests = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state); Hash256 root = ValidatorExitsTrie.CalculateRoot(withdrawalRequests); block.Body.ValidatorExits = withdrawalRequests; block.Header.ValidatorExitsRoot = root; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs index 6dfc99a929c..d0783853a7c 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs @@ -9,5 +9,5 @@ namespace Nethermind.Consensus.Requests; public interface IWithdrawalRequestsProcessor { - ValidatorExit[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state); + WithdrawalRequest[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state); } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 3cc27efddaf..429a72b7f95 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -23,16 +23,16 @@ public class WithdrawalRequestsProcessor : IWithdrawalRequestsProcessor private static readonly UInt256 TargetWithdrawalRequestsPerBlock = 2; // Will be moved to system transaction - public ValidatorExit[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state) + public WithdrawalRequest[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state) { - ValidatorExit[] exits = DequeueWithdrawalRequests(spec, state); + WithdrawalRequest[] exits = DequeueWithdrawalRequests(spec, state); UpdateExcessExits(spec, state); ResetExitCount(spec, state); return exits; } // Reads validator exit information from the precompile - private ValidatorExit[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldState state) + private WithdrawalRequest[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldState state) { StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueHeadStorageSlot); StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueTailStorageSlot); @@ -43,7 +43,7 @@ private ValidatorExit[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldState UInt256 numInQueue = queueTailIndex - queueHeadIndex; UInt256 numDequeued = UInt256.Min(numInQueue, MaxWithdrawalRequestsPerBlock); - var validatorExits = new ValidatorExit[(int)numDequeued]; + var validatorExits = new WithdrawalRequest[(int)numDequeued]; for (UInt256 i = 0; i < numDequeued; ++i) { UInt256 queueStorageSlot = WithdrawalRequestQueueStorageOffset + (queueHeadIndex + i) * 3; @@ -56,7 +56,7 @@ private ValidatorExit[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldState .Concat(state.Get(validatorAddressSecondCell)[..16].ToArray()) .ToArray(); ulong amount = state.Get(validatorAddressSecondCell)[16..24].ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(); // ToDo write tests to extension method - validatorExits[(int)i] = new ValidatorExit { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey, Amount = amount }; + validatorExits[(int)i] = new WithdrawalRequest { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey, Amount = amount }; } UInt256 newQueueHeadIndex = queueHeadIndex + numDequeued; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index 1d88514faac..b289f73b40f 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -311,7 +311,7 @@ public BlockBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRoot) return this; } - public BlockBuilder WithValidatorExits(ValidatorExit[]? validatorExits) + public BlockBuilder WithValidatorExits(WithdrawalRequest[]? validatorExits) { TestObjectInternal = TestObjectInternal.WithReplacedBody( TestObjectInternal.Body.WithChangedValidatorExits(validatorExits)); diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index 155e11a345c..8476be03419 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -108,12 +108,12 @@ public static Hash256 KeccakFromNumber(int i) public static Deposit DepositF_6Eth = new() { Index = 6, PubKey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray() }; - public static ValidatorExit ValidatorExitA = new() { SourceAddress = AddressA, ValidatorPubkey = PublicKeyA.Bytes }; - public static ValidatorExit ValidatorExitB = new() { SourceAddress = AddressB, ValidatorPubkey = PublicKeyB.Bytes }; - public static ValidatorExit ValidatorExitC = new() { SourceAddress = AddressC, ValidatorPubkey = PublicKeyC.Bytes }; - public static ValidatorExit ValidatorExitD = new() { SourceAddress = AddressD, ValidatorPubkey = PublicKeyD.Bytes }; - public static ValidatorExit ValidatorExitE = new() { SourceAddress = AddressE, ValidatorPubkey = PublicKeyE.Bytes }; - public static ValidatorExit ValidatorExitF = new() { SourceAddress = AddressF, ValidatorPubkey = PublicKeyF.Bytes }; + public static WithdrawalRequest WithdrawalRequestA = new() { SourceAddress = AddressA, ValidatorPubkey = PublicKeyA.Bytes }; + public static WithdrawalRequest WithdrawalRequestB = new() { SourceAddress = AddressB, ValidatorPubkey = PublicKeyB.Bytes }; + public static WithdrawalRequest WithdrawalRequestC = new() { SourceAddress = AddressC, ValidatorPubkey = PublicKeyC.Bytes }; + public static WithdrawalRequest WithdrawalRequestD = new() { SourceAddress = AddressD, ValidatorPubkey = PublicKeyD.Bytes }; + public static WithdrawalRequest WithdrawalRequestE = new() { SourceAddress = AddressE, ValidatorPubkey = PublicKeyE.Bytes }; + public static WithdrawalRequest WithdrawalRequestF = new() { SourceAddress = AddressF, ValidatorPubkey = PublicKeyF.Bytes }; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 522d99bfea2..deb21b9af2e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -98,7 +98,12 @@ public BlockDecoderTests() .WithMixHash(Keccak.EmptyTreeHash) // an empty Deposit array .WithDeposits(0) - .WithValidatorExits(new[] { new ValidatorExit(TestItem.AddressA, new byte[48], 12) }) + .WithValidatorExits(new[] { new WithdrawalRequest() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = new byte[48], + Amount = 12 + } }) .TestObject }; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs index 78868eebf87..f163dbd803d 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs @@ -18,10 +18,14 @@ public void Roundtrip() { byte[] validatorPubkey = new byte[48]; validatorPubkey[11] = 11; - ValidatorExit exit = new(TestItem.AddressA, validatorPubkey, 0); + WithdrawalRequest exit = new() { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = validatorPubkey, + Amount = 0 + }; Rlp encoded = _decoder.Encode(exit); - ValidatorExit decoded = _decoder.Decode(encoded.Bytes); + WithdrawalRequest decoded = _decoder.Decode(encoded.Bytes); Assert.That(decoded.SourceAddress, Is.EqualTo(TestItem.AddressA), "sourceAddress"); Assert.That(decoded.ValidatorPubkey, Is.EqualTo(validatorPubkey), "validatorPubKey"); @@ -31,7 +35,11 @@ public void Roundtrip() public void GetLength_should_be_72() { byte[] validatorPubkey = new byte[48]; - ValidatorExit exit = new(TestItem.AddressA, validatorPubkey, 0); + WithdrawalRequest exit = new() { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = validatorPubkey, + Amount = 0 + }; Assert.That(_decoder.GetLength(exit, RlpBehaviors.None), Is.EqualTo(72), "GetLength"); } } diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index f4608b9eef0..f5175110ab3 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -27,7 +27,7 @@ public Block( IEnumerable uncles, IEnumerable? withdrawals = null, IEnumerable? deposits = null, - IEnumerable? validatorExits = null) + IEnumerable? validatorExits = null) { Header = header ?? throw new ArgumentNullException(nameof(header)); Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray(), deposits?.ToArray(), validatorExits?.ToArray()); @@ -40,7 +40,7 @@ public Block(BlockHeader header) : this( null, header.WithdrawalsRoot is null ? null : Array.Empty(), header.DepositsRoot is null ? null : Array.Empty(), - header.ValidatorExitsRoot is null ? null : Array.Empty()) + header.ValidatorExitsRoot is null ? null : Array.Empty()) ) { } @@ -67,7 +67,7 @@ public Transaction[] Transactions public Withdrawal[]? Withdrawals => Body.Withdrawals; public Deposit[]? Deposits => Body.Deposits; - public ValidatorExit[]? ValidatorExits => Body.ValidatorExits; // do not add setter here + public WithdrawalRequest[]? ValidatorExits => Body.ValidatorExits; // do not add setter here public Hash256? Hash => Header.Hash; // do not add setter here diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index ce35df95868..6cbb4ff934d 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -8,7 +8,7 @@ namespace Nethermind.Core { public class BlockBody { - public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null, Deposit[]? deposits = null, ValidatorExit[]? validatorExits = null) + public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null, Deposit[]? deposits = null, WithdrawalRequest[]? validatorExits = null) { Transactions = transactions ?? Array.Empty(); Uncles = uncles ?? Array.Empty(); @@ -25,7 +25,7 @@ public BlockBody() : this(null, null, null) { } public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals, Deposits, ValidatorExits); public BlockBody WithChangedDeposits(Deposit[]? deposits) => new(Transactions, Uncles, Withdrawals, deposits, ValidatorExits); - public BlockBody WithChangedValidatorExits(ValidatorExit[]? validatorExits) => new(Transactions, Uncles, Withdrawals, Deposits, validatorExits); + public BlockBody WithChangedValidatorExits(WithdrawalRequest[]? validatorExits) => new(Transactions, Uncles, Withdrawals, Deposits, validatorExits); public static BlockBody WithOneTransactionOnly(Transaction tx) => new(new[] { tx }, null, null); @@ -35,7 +35,7 @@ public BlockBody() : this(null, null, null) { } public Withdrawal[]? Withdrawals { get; } - public ValidatorExit[]? ValidatorExits { get; set; } + public WithdrawalRequest[]? ValidatorExits { get; set; } public Deposit[]? Deposits { get; } public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0 && (Deposits?.Length ?? 0) == 0 && (ValidatorExits?.Length ?? 0) == 0; diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index 769465e1e5d..ea1f054879d 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -15,7 +15,6 @@ public class ConsensusRequest public RequestsType Type { get; protected set; } public ulong AmountField { get; protected set; } public Address? SourceAddressField { get; protected set; } - public byte[]? ValidatorPubkeyField { get; protected set; } public byte[]? PubKeyField { get; set; } public byte[]? WithdrawalCredentialsField { get; protected set; } public byte[]? SignatureField { get; protected set; } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs index 6d8f66d4c21..c4309e6b2a0 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -3,7 +3,6 @@ using Nethermind.Core.Extensions; using System.Text; -using Nethermind.Core.ConsensusRequests; namespace Nethermind.Core.ConsensusRequests; diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ValidatorExit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ValidatorExit.cs deleted file mode 100644 index 37aa4634e0d..00000000000 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ValidatorExit.cs +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - - -namespace Nethermind.Core.ConsensusRequests; - -public struct ValidatorExit -{ - public ValidatorExit(Address sourceAddress, byte[] validatorPubkey, ulong amount) - { - SourceAddress = sourceAddress; - ValidatorPubkey = validatorPubkey; - Amount = amount; - } - - public Address SourceAddress; - public byte[] ValidatorPubkey; - public ulong Amount; -} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs new file mode 100644 index 00000000000..c8f877d8a97 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Extensions; +using System.Text; + +namespace Nethermind.Core.ConsensusRequests; + +/// +/// Represents a Deposit that has been validated at the consensus layer. +/// +public class WithdrawalRequest : ConsensusRequest +{ + public WithdrawalRequest() + { + Type = RequestsType.WithdrawalRequest; + } + public Address? SourceAddress + { + get { return SourceAddressField; } + set { SourceAddressField = value; } + } + + public byte[]? ValidatorPubkey + { + get { return PubKeyField; } + set { PubKeyField = value; } + } + + public ulong Amount + { + get { return AmountField; } + set { AmountField = value; } + } + public override string ToString() => ToString(string.Empty); + + public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(WithdrawalRequest)} {{") + .Append($"{nameof(SourceAddress)}: {SourceAddress}, ") + .Append($"{nameof(ValidatorPubkey)}: {ValidatorPubkey?.ToHexString()}, ") + .Append($"{nameof(Amount)}: {Amount}}}") + .ToString(); + + +} diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs index c6db31f1c1e..2e74388082a 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs @@ -151,7 +151,7 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s public Hash256? DepositsRoot { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IEnumerable? ValidatorExits { get; set; } + public IEnumerable? ValidatorExits { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Hash256? ValidatorExitsRoot { get; set; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index d918d6e07cc..e115a2986ea 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -103,7 +103,7 @@ public byte[][] Transactions /// Gets or sets a collection of as defined in /// EIP-7002. /// - public virtual ValidatorExit[]? ValidatorExits { get; set; } + public virtual WithdrawalRequest[]? ValidatorExits { get; set; } /// diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index 672a70b9c09..31b49976647 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -51,5 +51,5 @@ public override bool ValidateFork(ISpecProvider specProvider) => /// EIP-7002. /// [JsonRequired] - public override ValidatorExit[]? ValidatorExits { get; set; } + public override WithdrawalRequest[]? ValidatorExits { get; set; } } diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index 4303a223fdb..c91e68981c3 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -110,7 +110,7 @@ private int GetWithdrawalsLength(Withdrawal[] withdrawals) BlockHeader[] uncles = ctx.DecodeArray(_headerDecoder); Withdrawal[]? withdrawals = null; Deposit[]? deposits = null; - ValidatorExit[]? validatorExits = null; + WithdrawalRequest[]? validatorExits = null; if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) { withdrawals = ctx.DecodeArray(_withdrawalDecoderDecoder); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 9dce10a662b..5e8fb991669 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -57,7 +57,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder List? withdrawals = DecodeWithdrawals(rlpStream, blockCheck); List? deposits = DecodeDeposits(rlpStream, blockCheck); - List? validatorExits = DecodeValidatorExits(rlpStream, blockCheck); + List? validatorExits = DecodeValidatorExits(rlpStream, blockCheck); if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) { @@ -134,9 +134,9 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder return deposits; } - private List? DecodeValidatorExits(RlpStream rlpStream, int blockCheck) + private List? DecodeValidatorExits(RlpStream rlpStream, int blockCheck) { - List? validatorExits = null; + List? validatorExits = null; if (rlpStream.Position != blockCheck) { bool lengthWasRead = true; @@ -320,7 +320,7 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) List? withdrawals = DecodeWithdrawals(ref decoderContext, blockCheck); List? deposits = DecodeDeposits(ref decoderContext, blockCheck); - List? validatorExits = DecodeValidatorExits(ref decoderContext, blockCheck); + List? validatorExits = DecodeValidatorExits(ref decoderContext, blockCheck); if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) { @@ -371,9 +371,9 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) return deposits; } - private List? DecodeValidatorExits(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) + private List? DecodeValidatorExits(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) { - List? validatorExits = null; + List? validatorExits = null; if (decoderContext.Position != blockCheck) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs index ef4a134332e..16155391565 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs @@ -80,7 +80,7 @@ public void Encode(TxReceipt value) public void Encode(Withdrawal value) => _withdrawalDecoder.Encode(this, value); public void Encode(Deposit value) => _depositDecoder.Encode(this, value); - public void Encode(ValidatorExit value) => _validatorExitsDecoder.Encode(this, value); + public void Encode(WithdrawalRequest value) => _validatorExitsDecoder.Encode(this, value); public void Encode(LogEntry value) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs index ab63b1dec64..fe2de866fab 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs @@ -7,33 +7,43 @@ namespace Nethermind.Serialization.Rlp; -public class ValidatorExitsDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder +public class ValidatorExitsDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder { - public int GetLength(ValidatorExit item, RlpBehaviors rlpBehaviors) => + public int GetLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey)) + Rlp.LengthOf(item.Amount); - public ValidatorExit Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int _ = rlpStream.ReadSequenceLength(); Address sourceAddress = rlpStream.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); byte[] validatorPubkey = rlpStream.DecodeByteArray(); ulong amount = rlpStream.DecodeULong(); - return new ValidatorExit(sourceAddress, validatorPubkey, amount); + return new WithdrawalRequest() + { + SourceAddress = sourceAddress, + ValidatorPubkey = validatorPubkey, + Amount = amount + }; } - public ValidatorExit Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int _ = decoderContext.ReadSequenceLength(); Address sourceAddress = decoderContext.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); byte[] validatorPubkey = decoderContext.DecodeByteArray(); ulong amount = decoderContext.DecodeULong(); - return new ValidatorExit(sourceAddress, validatorPubkey, amount); + return new WithdrawalRequest() + { + SourceAddress = sourceAddress, + ValidatorPubkey = validatorPubkey, + Amount = amount + }; } - public void Encode(RlpStream stream, ValidatorExit item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public void Encode(RlpStream stream, WithdrawalRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int contentLength = GetLength(item, rlpBehaviors); stream.StartSequence(contentLength); @@ -42,7 +52,7 @@ public void Encode(RlpStream stream, ValidatorExit item, RlpBehaviors rlpBehavio stream.Encode(item.Amount); } - public Rlp Encode(ValidatorExit item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public Rlp Encode(WithdrawalRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int contentLength = GetLength(item, rlpBehaviors); RlpStream rlpStream = new(Rlp.LengthOfSequence(contentLength)); diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index aa1c3153a55..16aa9647f8d 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -454,7 +454,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec Array.Empty(), Array.Empty(), depositsEnabled ? Array.Empty() : null, - validatorExitsEnabled ? Array.Empty() : null); + validatorExitsEnabled ? Array.Empty() : null); else { chainSpec.Genesis = new Block(genesisHeader); diff --git a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs index ad722b97cce..5001286ffd1 100644 --- a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs @@ -11,27 +11,27 @@ namespace Nethermind.State.Proofs; -public class ValidatorExitsTrie : PatriciaTrie +public class ValidatorExitsTrie : PatriciaTrie { private static readonly ValidatorExitsDecoder _codec = new(); - public ValidatorExitsTrie(ValidatorExit[]? validatorExits, bool canBuildProof, ICappedArrayPool? bufferPool = null) + public ValidatorExitsTrie(WithdrawalRequest[]? validatorExits, bool canBuildProof, ICappedArrayPool? bufferPool = null) : base(validatorExits, canBuildProof, bufferPool) { ArgumentNullException.ThrowIfNull(validatorExits); } - protected override void Initialize(ValidatorExit[] validatorExits) + protected override void Initialize(WithdrawalRequest[] validatorExits) { var key = 0; - foreach (ValidatorExit exit in validatorExits) + foreach (WithdrawalRequest exit in validatorExits) { Set(Rlp.Encode(key++).Bytes, _codec.Encode(exit).Bytes); } } - public static Hash256 CalculateRoot(ValidatorExit[] validatorExits) + public static Hash256 CalculateRoot(WithdrawalRequest[] validatorExits) { using TrackingCappedArrayPool cappedArray = new(validatorExits.Length * 4); Hash256 rootHash = new ValidatorExitsTrie(validatorExits, canBuildProof: false, bufferPool: cappedArray).RootHash; From 0baf77558b170da00da2f46c8b2962785c0a505a Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 13:19:00 +0200 Subject: [PATCH 137/551] working on processor --- .../Requests/ConsensusRequestsProcessor.cs | 25 +++++++++++-------- .../Requests/IWithdrawalRequestsProcessor.cs | 2 +- .../Requests/WithdrawalRequestsProcessor.cs | 6 ++++- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 9a6b8edee45..76febbda068 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; +using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; @@ -22,18 +24,21 @@ public ConsensusRequestsProcessor() } public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) { - // Process deposits - var deposits = _depositsProcessor.ProcessDeposits(block, receipts, spec); + if (spec.IsEip6110Enabled == false && spec.IsEip7002Enabled == false) + return; + List consensusRequests = []; + // Process deposits + List? deposits = _depositsProcessor.ProcessDeposits(block, receipts, spec); + if (deposits is { Count: > 0 }) + consensusRequests.AddRange(deposits); - // Process withdrawal requests - if (spec.IsEip7002Enabled) - { - WithdrawalRequest[]? withdrawalRequests = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state); - Hash256 root = ValidatorExitsTrie.CalculateRoot(withdrawalRequests); - block.Body.ValidatorExits = withdrawalRequests; - block.Header.ValidatorExitsRoot = root; - } + WithdrawalRequest[]? withdrawalRequests = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state); + if (withdrawalRequests is { Length: > 0 }) + consensusRequests.AddRange(withdrawalRequests); + Hash256 root = ValidatorExitsTrie.CalculateRoot(withdrawalRequests); // ToDo Rohit - we have to change root calculations here + block.Body.ValidatorExits = withdrawalRequests; + block.Header.ValidatorExitsRoot = root; } } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs index d0783853a7c..553eeca4753 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs @@ -9,5 +9,5 @@ namespace Nethermind.Consensus.Requests; public interface IWithdrawalRequestsProcessor { - WithdrawalRequest[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state); + WithdrawalRequest[]? ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state); } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 429a72b7f95..bb3e27a2d6d 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -23,8 +23,12 @@ public class WithdrawalRequestsProcessor : IWithdrawalRequestsProcessor private static readonly UInt256 TargetWithdrawalRequestsPerBlock = 2; // Will be moved to system transaction - public WithdrawalRequest[] ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state) + public WithdrawalRequest[]? ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state) { + + if (spec.IsEip7002Enabled == false) + return null; + WithdrawalRequest[] exits = DequeueWithdrawalRequests(spec, state); UpdateExcessExits(spec, state); ResetExitCount(spec, state); From bf19a095a2c98346852f98326e2d86aadcce8a05 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 13:27:59 +0200 Subject: [PATCH 138/551] processor ready --- .../Requests/WithdrawalRequestsProcessor.cs | 6 +++++- src/Nethermind/Nethermind.Core/Eip7002Constants.cs | 10 ++++++++++ .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core/Eip7002Constants.cs diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index bb3e27a2d6d..d087162bf82 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Linq; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; @@ -25,10 +26,13 @@ public class WithdrawalRequestsProcessor : IWithdrawalRequestsProcessor // Will be moved to system transaction public WithdrawalRequest[]? ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state) { - if (spec.IsEip7002Enabled == false) return null; + Address eip7002Account = spec.Eip7002ContractAddress; + if (!state.AccountExists(eip7002Account)) + return Array.Empty(); + WithdrawalRequest[] exits = DequeueWithdrawalRequests(spec, state); UpdateExcessExits(spec, state); ResetExitCount(spec, state); diff --git a/src/Nethermind/Nethermind.Core/Eip7002Constants.cs b/src/Nethermind/Nethermind.Core/Eip7002Constants.cs new file mode 100644 index 00000000000..2e70a3e012f --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Eip7002Constants.cs @@ -0,0 +1,10 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core; + +public static class Eip7002Constants +{ + public static readonly Address WithdrawalRequestPredeployAddress = new("0x00A3ca265EBcb825B45F985A16CEFB49958cE017"); + +} diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 16aa9647f8d..3379963ecea 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -156,7 +156,7 @@ bool GetForInnerPathExistence(KeyValuePair o) => Eip6110TransitionTimestamp = chainSpecJson.Params.Eip6110TransitionTimestamp, Eip6110ContractAddress = chainSpecJson.Params.Eip6110ContractAddress, Eip7002TransitionTimestamp = chainSpecJson.Params.Eip7002TransitionTimestamp, - Eip7002ContractAddress = chainSpecJson.Params.Eip7002ContractAddress, + Eip7002ContractAddress = chainSpecJson.Params.Eip7002ContractAddress ?? Eip7002Constants.WithdrawalRequestPredeployAddress, Eip1559FeeCollector = chainSpecJson.Params.Eip1559FeeCollector, Eip1559FeeCollectorTransition = chainSpecJson.Params.Eip1559FeeCollectorTransition, Eip1559BaseFeeMinValueTransition = chainSpecJson.Params.Eip1559BaseFeeMinValueTransition, From 019261a99780e5a269408828a9672af0890f4381 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 13:34:06 +0200 Subject: [PATCH 139/551] add jsonIgnore --- .../ConsensusRequests/ConsensusRequest.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index ea1f054879d..5d77598dedf 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LGPL-3.0-only +using System.Text.Json.Serialization; + namespace Nethermind.Core.ConsensusRequests; public enum RequestsType @@ -12,11 +14,24 @@ public enum RequestsType public class ConsensusRequest { + [JsonIgnore] public RequestsType Type { get; protected set; } + + [JsonIgnore] public ulong AmountField { get; protected set; } + + [JsonIgnore] public Address? SourceAddressField { get; protected set; } + + [JsonIgnore] public byte[]? PubKeyField { get; set; } + + [JsonIgnore] public byte[]? WithdrawalCredentialsField { get; protected set; } + + [JsonIgnore] public byte[]? SignatureField { get; protected set; } + + [JsonIgnore] public ulong? IndexField { get; protected set; } } From 099ac06e18e894bf6efec5ec1e294aed8d254d27 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 14:31:00 +0200 Subject: [PATCH 140/551] add processor to main pipeline --- .../AuraBlockProcessorTests.cs | 1 - .../AuRaContractGasLimitOverrideTests.cs | 4 ---- .../Transactions/TxCertifierFilterTests.cs | 3 --- .../Transactions/TxPermissionFilterTest.cs | 2 -- .../AuRaBlockProcessor.cs | 7 ++----- .../Deposits/NullDepositsProcessor.cs | 19 ------------------- .../InitializeBlockchainAuRa.cs | 2 -- .../StartBlockProducerAuRa.cs | 2 -- .../CliquePlugin.cs | 3 +-- .../Processing/BlockProcessor.cs | 14 ++++++-------- .../Requests/ConsensusRequestsProcessor.cs | 2 +- .../Requests/IConsensusRequestsProcessor.cs | 13 +++++++++++++ .../AuRaMergeEngineModuleTests.cs | 3 +-- .../AuRaMergeBlockProcessor.cs | 1 - .../EngineModuleTests.Setup.cs | 3 +-- .../OptimismBlockProcessor.cs | 2 +- 16 files changed, 26 insertions(+), 55 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs index 13f0df26656..d6069007b64 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs @@ -161,7 +161,6 @@ void Process(AuRaBlockProcessor auRaBlockProcessor, int blockNumber, Hash256 sta LimboLogs.Instance, Substitute.For(), new WithdrawalProcessor(stateProvider, LimboLogs.Instance), - new DepositsProcessor(), null, txFilter, contractRewriter: contractRewriter); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs index 9d3ac0be411..938eebc954d 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; using FluentAssertions; @@ -10,14 +9,12 @@ using Nethermind.Consensus; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Contracts; -using Nethermind.Consensus.AuRa.Deposits; using Nethermind.Consensus.AuRa.Withdrawals; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Core; using Nethermind.Logging; -using Nethermind.Trie.Pruning; using NUnit.Framework; namespace Nethermind.AuRa.Test.Contract; @@ -101,7 +98,6 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, - NullDepositsProcessor.Instance, null, null, GasLimitCalculator as AuRaContractGasLimitOverride); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs index a43d9047764..2640b0275e1 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs @@ -8,7 +8,6 @@ using Nethermind.AuRa.Test.Contract; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Contracts; -using Nethermind.Consensus.AuRa.Deposits; using Nethermind.Consensus.AuRa.Transactions; using Nethermind.Consensus.AuRa.Withdrawals; using Nethermind.Consensus.Processing; @@ -19,7 +18,6 @@ using Nethermind.Core.Specs; using Nethermind.Core.Test.Builders; using Nethermind.Logging; -using Nethermind.Trie.Pruning; using Nethermind.TxPool; using NSubstitute; using NSubstitute.ExceptionExtensions; @@ -157,7 +155,6 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, - NullDepositsProcessor.Instance, null ); } diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs index 1b71a39ba90..2a43f1bd7ab 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs @@ -30,7 +30,6 @@ using Nethermind.TxPool; using NSubstitute; using NUnit.Framework; -using Nethermind.Consensus.AuRa.Deposits; namespace Nethermind.AuRa.Test.Transactions; @@ -298,7 +297,6 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, - NullDepositsProcessor.Instance, null, PermissionBasedTxFilter); } diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 568b6287f3b..63a1598b689 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -31,8 +31,7 @@ public class AuRaBlockProcessor : BlockProcessor private readonly ITxFilter _txFilter; private readonly ILogger _logger; - public AuRaBlockProcessor( - ISpecProvider specProvider, + public AuRaBlockProcessor(ISpecProvider specProvider, IBlockValidator blockValidator, IRewardCalculator rewardCalculator, IBlockProcessor.IBlockTransactionsExecutor blockTransactionsExecutor, @@ -41,7 +40,6 @@ public AuRaBlockProcessor( ILogManager logManager, IBlockTree blockTree, IWithdrawalProcessor withdrawalProcessor, - IDepositsProcessor depositsProcessor, IAuRaValidator? auRaValidator, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, @@ -55,8 +53,7 @@ public AuRaBlockProcessor( receiptStorage, NullWitnessCollector.Instance, logManager, - withdrawalProcessor, - depositsProcessor) + withdrawalProcessor) { _specProvider = specProvider; _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs deleted file mode 100644 index e11d00d0c0a..00000000000 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Deposits/NullDepositsProcessor.cs +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Collections.Generic; -using Nethermind.Core; -using Nethermind.Core.Specs; -using Nethermind.Consensus.Requests; -using Nethermind.Core.ConsensusRequests; - -namespace Nethermind.Consensus.AuRa.Deposits; - -public class NullDepositsProcessor : IDepositsProcessor -{ - public List? ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) - { - return null; - } - public static IDepositsProcessor Instance { get; } = new NullDepositsProcessor(); -} diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs index 2a7d3b3b56c..2a13fb695ca 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs @@ -13,7 +13,6 @@ using Nethermind.Consensus.AuRa.Config; using Nethermind.Consensus.AuRa.Contracts; using Nethermind.Consensus.AuRa.Contracts.DataStore; -using Nethermind.Consensus.AuRa.Deposits; using Nethermind.Consensus.AuRa.Rewards; using Nethermind.Consensus.AuRa.Services; using Nethermind.Consensus.AuRa.Transactions; @@ -110,7 +109,6 @@ protected virtual AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter) _api.LogManager, _api.BlockTree!, NullWithdrawalProcessor.Instance, - NullDepositsProcessor.Instance, CreateAuRaValidator(), txFilter, GetGasLimitCalculator(), diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs index 2341fbb0f0c..2a6cf3e083d 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs @@ -13,7 +13,6 @@ using Nethermind.Consensus.AuRa.Config; using Nethermind.Consensus.AuRa.Contracts; using Nethermind.Consensus.AuRa.Contracts.DataStore; -using Nethermind.Consensus.AuRa.Deposits; using Nethermind.Consensus.AuRa.Transactions; using Nethermind.Consensus.AuRa.Validators; using Nethermind.Consensus.AuRa.Withdrawals; @@ -158,7 +157,6 @@ private BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv changeableTx _api.LogManager, changeableTxProcessingEnv.BlockTree, NullWithdrawalProcessor.Instance, - NullDepositsProcessor.Instance, _validator, auRaTxFilter, CreateGasLimitCalculator(_api) as AuRaContractGasLimitOverride, diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index 66ba930ea56..e7270431fd4 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -109,8 +109,7 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd NullReceiptStorage.Instance, NullWitnessCollector.Instance, getFromApi.LogManager, - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager)), - new DepositsProcessor()); + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager))); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( readOnlyBlockTree, diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index d420f30bdd0..3192f7f8190 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -44,7 +44,7 @@ public partial class BlockProcessor : IBlockProcessor private readonly IBlockProcessor.IBlockTransactionsExecutor _blockTransactionsExecutor; private readonly IWithdrawalRequestsProcessor _withdrawalRequestsProcessor; - private readonly IDepositsProcessor _depositsProcessor; + private readonly IConsensusRequestsProcessor _consensusRequestsProcessor; private const int MaxUncommittedBlocks = 64; /// @@ -53,8 +53,7 @@ public partial class BlockProcessor : IBlockProcessor /// protected BlockReceiptsTracer ReceiptsTracer { get; set; } - public BlockProcessor( - ISpecProvider? specProvider, + public BlockProcessor(ISpecProvider? specProvider, IBlockValidator? blockValidator, IRewardCalculator? rewardCalculator, IBlockProcessor.IBlockTransactionsExecutor? blockTransactionsExecutor, @@ -63,8 +62,8 @@ public BlockProcessor( IWitnessCollector? witnessCollector, ILogManager? logManager, IWithdrawalProcessor? withdrawalProcessor = null, - IDepositsProcessor? depositsProcessor = null, - IReceiptsRootCalculator? receiptsRootCalculator = null) + IReceiptsRootCalculator? receiptsRootCalculator = null, + IConsensusRequestsProcessor? consensusRequestsProcessor = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); @@ -76,7 +75,7 @@ public BlockProcessor( _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); _receiptsRootCalculator = receiptsRootCalculator ?? ReceiptsRootCalculator.Instance; - _depositsProcessor = depositsProcessor ?? new DepositsProcessor(); + _consensusRequestsProcessor = consensusRequestsProcessor ?? new ConsensusRequestsProcessor(); _beaconBlockRootHandler = new BeaconBlockRootHandler(); _withdrawalRequestsProcessor = new WithdrawalRequestsProcessor(); @@ -256,9 +255,8 @@ protected virtual TxReceipt[] ProcessBlock( block.Header.ReceiptsRoot = _receiptsRootCalculator.GetReceiptsRoot(receipts, spec, block.ReceiptsRoot); ApplyMinerRewards(block, blockTracer, spec); _withdrawalProcessor.ProcessWithdrawals(block, spec); + _consensusRequestsProcessor.ProcessRequests(spec, _stateProvider, block, receipts); - _depositsProcessor.ProcessDeposits(block, receipts, spec); - ProcessValidatorExits(block, spec); ReceiptsTracer.EndBlockTrace(); _stateProvider.Commit(spec); diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 76febbda068..f75e4a09a31 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -12,7 +12,7 @@ namespace Nethermind.Consensus.Requests; -public class ConsensusRequestsProcessor +public class ConsensusRequestsProcessor : IConsensusRequestsProcessor { private readonly WithdrawalRequestsProcessor _withdrawalRequestsProcessor; private readonly IDepositsProcessor _depositsProcessor; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs new file mode 100644 index 00000000000..9e2f6cc0e04 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs @@ -0,0 +1,13 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.State; + +namespace Nethermind.Consensus.Requests; + +public interface IConsensusRequestsProcessor +{ + void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts); +} diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index a8a5a6a6b56..c25d3306762 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -136,8 +136,7 @@ protected override IBlockProcessor CreateBlockProcessor() ReceiptStorage, NullWitnessCollector.Instance, LogManager, - WithdrawalProcessor, - depositsProcessor); + WithdrawalProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 183218da1e8..f2765c16d4f 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -46,7 +46,6 @@ public AuRaMergeBlockProcessor( logManager, blockTree, withdrawalProcessor, - depositsProcessor, validator, txFilter, gasLimitOverride, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 73516628c2d..8babb52d958 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -244,8 +244,7 @@ protected override IBlockProcessor CreateBlockProcessor() ReceiptStorage, NullWitnessCollector.Instance, LogManager, - WithdrawalProcessor, - DepositsProcessor); + WithdrawalProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index 722337f7a40..16924a1f56a 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -35,7 +35,7 @@ public OptimismBlockProcessor( IWithdrawalProcessor? withdrawalProcessor = null, IDepositsProcessor? depositsProcessor = null) : base(specProvider, blockValidator, rewardCalculator, blockTransactionsExecutor, - stateProvider, receiptStorage, witnessCollector, logManager, withdrawalProcessor, depositsProcessor, OptimismReceiptsRootCalculator.Instance) + stateProvider, receiptStorage, witnessCollector, logManager, withdrawalProcessor, OptimismReceiptsRootCalculator.Instance) { ArgumentNullException.ThrowIfNull(stateProvider); _contractRewriter = contractRewriter; From 9df02ddf827a12c4e688c4e3e3112ef252701b75 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 22 Apr 2024 18:34:50 +0530 Subject: [PATCH 141/551] format files --- .../Processing/BlockProcessor.cs | 2 +- .../Requests/ConsensusRequestsProcessor.cs | 2 +- .../Requests/IConsensusRequestsProcessor.cs | 2 +- .../Requests/WithdrawalRequestsProcessor.cs | 2 +- .../Encoding/ValidatorExitDecoderTests.cs | 14 +++++++------ .../ConsensusRequests/Deposit.cs | 2 +- .../Nethermind.Core/Eip7002Constants.cs | 2 +- .../Extensions/UInt64Extensions.cs | 2 +- .../Messages/BlockBodiesMessageSerializer.cs | 4 ++-- .../DepositDecoder.cs | 2 +- .../ValidatorExitsDecoder.cs | 20 +++++++++---------- 11 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 3192f7f8190..4e51655a9e8 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -75,7 +75,7 @@ public BlockProcessor(ISpecProvider? specProvider, _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); _receiptsRootCalculator = receiptsRootCalculator ?? ReceiptsRootCalculator.Instance; - _consensusRequestsProcessor = consensusRequestsProcessor ?? new ConsensusRequestsProcessor(); + _consensusRequestsProcessor = consensusRequestsProcessor ?? new ConsensusRequestsProcessor(); _beaconBlockRootHandler = new BeaconBlockRootHandler(); _withdrawalRequestsProcessor = new WithdrawalRequestsProcessor(); diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index f75e4a09a31..112ee14462e 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only using System; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs index 9e2f6cc0e04..01ed8f37278 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index d087162bf82..f69d4c8d57f 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -63,7 +63,7 @@ private WithdrawalRequest[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldS state.Get(validatorAddressFirstCell)[..32].ToArray() .Concat(state.Get(validatorAddressSecondCell)[..16].ToArray()) .ToArray(); - ulong amount = state.Get(validatorAddressSecondCell)[16..24].ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(); // ToDo write tests to extension method + ulong amount = state.Get(validatorAddressSecondCell)[16..24].ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(); // ToDo write tests to extension method validatorExits[(int)i] = new WithdrawalRequest { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey, Amount = amount }; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs index f163dbd803d..24795abd2ab 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs @@ -18,11 +18,12 @@ public void Roundtrip() { byte[] validatorPubkey = new byte[48]; validatorPubkey[11] = 11; - WithdrawalRequest exit = new() { - SourceAddress = TestItem.AddressA, - ValidatorPubkey = validatorPubkey, - Amount = 0 - }; + WithdrawalRequest exit = new() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = validatorPubkey, + Amount = 0 + }; Rlp encoded = _decoder.Encode(exit); WithdrawalRequest decoded = _decoder.Decode(encoded.Bytes); @@ -35,7 +36,8 @@ public void Roundtrip() public void GetLength_should_be_72() { byte[] validatorPubkey = new byte[48]; - WithdrawalRequest exit = new() { + WithdrawalRequest exit = new() + { SourceAddress = TestItem.AddressA, ValidatorPubkey = validatorPubkey, Amount = 0 diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs index c4309e6b2a0..ccee300027f 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core.Extensions; diff --git a/src/Nethermind/Nethermind.Core/Eip7002Constants.cs b/src/Nethermind/Nethermind.Core/Eip7002Constants.cs index 2e70a3e012f..045feda6f8b 100644 --- a/src/Nethermind/Nethermind.Core/Eip7002Constants.cs +++ b/src/Nethermind/Nethermind.Core/Eip7002Constants.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only namespace Nethermind.Core; diff --git a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs index 55ca7545a10..bb8c07f261d 100644 --- a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs +++ b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only namespace Nethermind.Core.Extensions; diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index c91e68981c3..6ddb2792931 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -116,12 +116,12 @@ private int GetWithdrawalsLength(Withdrawal[] withdrawals) withdrawals = ctx.DecodeArray(_withdrawalDecoderDecoder); } - if(ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) + if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) { deposits = ctx.DecodeArray(_depositDecoder); } - if(ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) + if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) { validatorExits = ctx.DecodeArray(_validatorExitDecoder); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs index 41cb418d9d7..d353f7622ce 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -64,7 +64,7 @@ public void Encode(RlpStream stream, Deposit? item, RlpBehaviors rlpBehaviors = stream.Encode(item.WithdrawalCredentials); stream.Encode(item.Amount); stream.Encode(item.Signature); - // stream.Encode(item.Index); ToDo fix + // stream.Encode(item.Index); ToDo fix } public Rlp Encode(Deposit? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs index fe2de866fab..ee9ad44bc5f 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs @@ -21,11 +21,11 @@ public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = byte[] validatorPubkey = rlpStream.DecodeByteArray(); ulong amount = rlpStream.DecodeULong(); return new WithdrawalRequest() - { - SourceAddress = sourceAddress, - ValidatorPubkey = validatorPubkey, - Amount = amount - }; + { + SourceAddress = sourceAddress, + ValidatorPubkey = validatorPubkey, + Amount = amount + }; } public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -36,11 +36,11 @@ public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpB byte[] validatorPubkey = decoderContext.DecodeByteArray(); ulong amount = decoderContext.DecodeULong(); return new WithdrawalRequest() - { - SourceAddress = sourceAddress, - ValidatorPubkey = validatorPubkey, - Amount = amount - }; + { + SourceAddress = sourceAddress, + ValidatorPubkey = validatorPubkey, + Amount = amount + }; } public void Encode(RlpStream stream, WithdrawalRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) From 67256a736e0afc2080ff1ed5f389d9c24a70bb35 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 15:49:14 +0200 Subject: [PATCH 142/551] add ulong tests --- .../Processing/BlockProcessor.cs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 4e51655a9e8..2cf2b924816 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -272,19 +272,6 @@ protected virtual TxReceipt[] ProcessBlock( return receipts; } - private void ProcessValidatorExits(Block block, IReleaseSpec spec) - { - if (!spec.IsEip7002Enabled) - { - return; - } - - WithdrawalRequest[] validatorExits = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, _stateProvider); - Hash256 root = ValidatorExitsTrie.CalculateRoot(validatorExits); - block.Body.ValidatorExits = validatorExits; - block.Header.ValidatorExitsRoot = root; - } - // TODO: block processor pipeline private void StoreTxReceipts(Block block, TxReceipt[] txReceipts) { From e2b9a20b9a75b4ba361dcea8ef848566283b9d23 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 15:59:30 +0200 Subject: [PATCH 143/551] add tests --- .../Nethermind.Core.Test/UInt64Tests.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/Nethermind/Nethermind.Core.Test/UInt64Tests.cs diff --git a/src/Nethermind/Nethermind.Core.Test/UInt64Tests.cs b/src/Nethermind/Nethermind.Core.Test/UInt64Tests.cs new file mode 100644 index 00000000000..c75a2458302 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/UInt64Tests.cs @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using FluentAssertions; +using Nethermind.Core.Extensions; +using NUnit.Framework; + +namespace Nethermind.Core.Test +{ + [TestFixture] + public class UInt64Tests + { + [TestCase("7fffffffffffffff", (ulong)long.MaxValue)] + [TestCase("ffffffffffffffff", ulong.MaxValue)] + [TestCase("0000", (ulong)0)] + [TestCase("0001234", (ulong)0x1234)] + [TestCase("1234", (ulong)0x1234)] + [TestCase("1", (ulong)1)] + [TestCase("10", (ulong)16)] + public void ToLongFromBytes(string hexBytes, ulong expectedValue) + { + byte[] bytes = Bytes.FromHexString(hexBytes); + ulong number = bytes.ToULongFromBigEndianByteArrayWithoutLeadingZeros(); + number.Should().Be(expectedValue); + } + } +} From cc9b125710ec4563faa5b9daf0c8a933d6e485a7 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 16:01:16 +0200 Subject: [PATCH 144/551] fix endianness --- .../Requests/WithdrawalRequestsProcessor.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index f69d4c8d57f..58fea56d848 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -70,12 +70,12 @@ private WithdrawalRequest[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldS UInt256 newQueueHeadIndex = queueHeadIndex + numDequeued; if (newQueueHeadIndex == queueTailIndex) { - state.Set(queueHeadIndexCell, UInt256.Zero.ToLittleEndian()); - state.Set(queueTailIndexCell, UInt256.Zero.ToLittleEndian()); // ToDo ToLittleEndian?? + state.Set(queueHeadIndexCell, UInt256.Zero.ToBigEndian()); + state.Set(queueTailIndexCell, UInt256.Zero.ToBigEndian()); } else { - state.Set(queueHeadIndexCell, newQueueHeadIndex.ToLittleEndian()); + state.Set(queueHeadIndexCell, newQueueHeadIndex.ToBigEndian()); } return validatorExits; @@ -95,12 +95,12 @@ private void UpdateExcessExits(IReleaseSpec spec, IWorldState state) newExcess = previousExcess + count - TargetWithdrawalRequestsPerBlock; } - state.Set(previousExcessCell, newExcess.ToLittleEndian()); + state.Set(previousExcessCell, newExcess.ToBigEndian()); } private void ResetExitCount(IReleaseSpec spec, IWorldState state) { StorageCell countCell = new(spec.Eip7002ContractAddress, WithdrawalRequestCountStorageSlot); - state.Set(countCell, UInt256.Zero.ToLittleEndian()); + state.Set(countCell, UInt256.Zero.ToBigEndian()); } } From e31d7e1809c399d0ce65360860a8e68b4c97ba9b Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 22 Apr 2024 16:14:13 +0200 Subject: [PATCH 145/551] eip tests --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 94 ++++++++++++++++++- .../Nethermind.Evm/VirtualMachine.cs | 4 +- 2 files changed, 95 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 4942a8a4871..07561759709 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -171,7 +171,7 @@ public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_Sign .Op(Instruction.RETURN) .Done; - //Simply returns the current caller + //Simply returns the current msg.caller byte[] codeReturnCaller = Prepare.EvmCode .CALLER() .Op(Instruction.PUSH0) @@ -189,6 +189,98 @@ public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_Sign Assert.That(new Address(result.ReturnValue), Is.EqualTo(TestItem.AddressB)); } + [Test] + public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAfterAuthCallAndDelegateCall_ContractAddressIsReturned() + { + var signer = TestItem.PrivateKeyB; + var authority = TestItem.AddressB; + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(authority) + .Op(Instruction.AUTH) + + //Just throw away the result + .POP() + + //AUTHCALL params + .PushData(20) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.AddressC) + .PushData(1000000) + .Op(Instruction.AUTHCALL) + .PushSingle(20) + .PushSingle(0) + .Op(Instruction.RETURN) + .Done; + + byte[] firstrDeletegateCallCode = Prepare.EvmCode + .PushData(20) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.AddressD) + .PushData(1000000) + .Op(Instruction.CALL) + .PushSingle(20) + .PushSingle(0) + .Op(Instruction.RETURN) + .Done; + + byte[] secondDeletegateCallCode = Prepare.EvmCode + .PushData(20) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.AddressE) + .PushData(1000000) + .Op(Instruction.DELEGATECALL) + .PushSingle(20) + .PushSingle(0) + .Op(Instruction.RETURN) + .Done; + + //Simply returns the current msg.caller + byte[] codeReturnCaller = Prepare.EvmCode + .CALLER() + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Op(Instruction.STOP) + .Done; + + TestState.CreateAccount(TestItem.AddressC, 0); + TestState.InsertCode(TestItem.AddressC, Keccak.Compute(firstrDeletegateCallCode), firstrDeletegateCallCode, Spec); + + TestState.CreateAccount(TestItem.AddressD, 0); + TestState.InsertCode(TestItem.AddressD, Keccak.Compute(secondDeletegateCallCode), secondDeletegateCallCode, Spec); + + TestState.CreateAccount(TestItem.AddressE, 0); + TestState.InsertCode(TestItem.AddressE, Keccak.Compute(codeReturnCaller), codeReturnCaller, Spec); + + Execute(code); + + var result = TestState.Get(new StorageCell(TestItem.AddressD, 0)); + + Assert.That(new Address(result.ToArray()), Is.EqualTo(TestItem.AddressC)); + } + private byte[] CreateSignedCommitMessage(PrivateKey signer) { List msg = diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 9c10672bd7f..782e041346e 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2150,9 +2150,9 @@ private CallResult ExecuteCode Date: Mon, 22 Apr 2024 22:33:34 +0530 Subject: [PATCH 146/551] add decode for consensus requests --- .../Encoding/ConsensusRequestDecoderTests.cs | 128 ++++++++++++++++++ ...sts.cs => WithdrwalRequestDecoderTests.cs} | 2 +- .../Nethermind.Core/Buffers/CappedArray.cs | 2 +- .../ConsensusRequests/ConsensusRequest.cs | 4 +- .../ConsensusRequests/Deposit.cs | 2 +- .../ConsensusRequests/WithdrawalRequest.cs | 2 +- .../Messages/BlockBodiesMessageSerializer.cs | 2 +- .../BlockDecoder.cs | 10 +- .../ConsensusRequestDecoder.cs | 98 ++++++++++++++ .../DepositDecoder.cs | 10 +- .../Nethermind.Serialization.Rlp/RlpStream.cs | 4 +- ...Decoder.cs => WithdrawalRequestDecoder.cs} | 12 +- .../Proofs/ValidatorExitsTrie.cs | 2 +- 13 files changed, 252 insertions(+), 26 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs rename src/Nethermind/Nethermind.Core.Test/Encoding/{ValidatorExitDecoderTests.cs => WithdrwalRequestDecoderTests.cs} (95%) create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs rename src/Nethermind/Nethermind.Serialization.Rlp/{ValidatorExitsDecoder.cs => WithdrawalRequestDecoder.cs} (81%) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs new file mode 100644 index 00000000000..2706e363911 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs @@ -0,0 +1,128 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using FluentAssertions; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Extensions; +using Nethermind.Evm.Tracing.GethStyle.Custom.JavaScript; +using Nethermind.Serialization.Rlp; +using NUnit.Framework; +using Nethermind.Core.Test.Builders; + +namespace Nethermind.Core.Test.Encoding; + +public class ConsensusRequestDecoderTests +{ + [Test] + public void Should_decode_deposit() + { + ConsensusRequest deposit = new Deposit() + { + Index = long.MaxValue, + PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + + byte[] rlp = Rlp.Encode(deposit).Bytes; + ConsensusRequest decoded = Rlp.Decode(rlp); + + decoded.Should().BeEquivalentTo(deposit); + } + + [Test] + public void Should_decode_withdrawalRequest() + { + byte[] validatorPubkey = new byte[48]; + validatorPubkey[11] = 11; + ConsensusRequest withdrawalRequest = new WithdrawalRequest() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = validatorPubkey, + Amount = int.MaxValue + }; + + byte[] rlp = Rlp.Encode(withdrawalRequest).Bytes; + ConsensusRequest decoded = Rlp.Decode(rlp); + + decoded.Should().BeEquivalentTo(withdrawalRequest); + } + + [Test] + public void Should_decode_deposit_with_ValueDecoderContext() + { + ConsensusRequest deposit = new Deposit() + { + Index = long.MaxValue, + PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + RlpStream stream = new(1024); + ConsensusRequestDecoder codec = new(); + + codec.Encode(stream, deposit); + + Rlp.ValueDecoderContext decoderContext = new(stream.Data.AsSpan()); + Deposit? decoded = (Deposit?)codec.Decode(ref decoderContext); + + decoded.Should().BeEquivalentTo(deposit); + } + + [Test] + public void Should_decode_withdrawalRequest_with_ValueDecoderContext() + { + ConsensusRequest withdrawalRequest = new WithdrawalRequest() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + RlpStream stream = new(1024); + ConsensusRequestDecoder codec = new(); + + codec.Encode(stream, withdrawalRequest); + + Rlp.ValueDecoderContext decoderContext = new(stream.Data.AsSpan()); + WithdrawalRequest? decoded = (WithdrawalRequest?)codec.Decode(ref decoderContext); + + decoded.Should().BeEquivalentTo(withdrawalRequest); + } + + [Test] + public void Should_encode_deposit_same_for_Rlp_Encode_and_DepositDecoder_Encode() + { + ConsensusRequest deposit = new Deposit() + { + Index = long.MaxValue, + PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + byte[] rlp1 = new ConsensusRequestDecoder().Encode((Deposit)deposit).Bytes; + byte[] rlp2 = Rlp.Encode(deposit).Bytes; + + rlp1.Should().BeEquivalentTo(rlp2); + } + + [Test] + public void Should_encode_withdrawalRequest_same_for_Rlp_Encode_and_DepositDecoder_Encode() + { + byte[] validatorPubkey = new byte[48]; + validatorPubkey[11] = 11; + ConsensusRequest withdrawalRequest = new WithdrawalRequest() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + byte[] rlp1 = new ConsensusRequestDecoder().Encode((WithdrawalRequest)withdrawalRequest).Bytes; + byte[] rlp2 = Rlp.Encode(withdrawalRequest).Bytes; + + rlp1.Should().BeEquivalentTo(rlp2); + } +} diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs similarity index 95% rename from src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs rename to src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs index 24795abd2ab..982e6c8a54e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ValidatorExitDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs @@ -11,7 +11,7 @@ namespace Nethermind.Core.Test.Encoding; [TestFixture] public class ValidatorExitDecoderTests { - private static ValidatorExitsDecoder _decoder = new(); + private static WithdrawalRequestDecoder _decoder = new(); [Test] public void Roundtrip() diff --git a/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs b/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs index 0d909d05077..31314220a8c 100644 --- a/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs +++ b/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs @@ -98,7 +98,7 @@ public readonly Span AsSpan() public readonly Span AsSpan(int start, int length) { - return _array.AsSpan(start, length); + return _array.AsSpan(start, length); } public readonly T[]? ToArray() diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index 5d77598dedf..2a1d0c06b65 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -6,7 +6,7 @@ namespace Nethermind.Core.ConsensusRequests; -public enum RequestsType +public enum ConsensusRequestsType: byte { Deposit = 0, WithdrawalRequest = 1 @@ -15,7 +15,7 @@ public enum RequestsType public class ConsensusRequest { [JsonIgnore] - public RequestsType Type { get; protected set; } + public ConsensusRequestsType Type { get; protected set; } [JsonIgnore] public ulong AmountField { get; protected set; } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs index ccee300027f..827603c9bf7 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -13,7 +13,7 @@ public class Deposit : ConsensusRequest { public Deposit() { - Type = RequestsType.Deposit; + Type = ConsensusRequestsType.Deposit; } public byte[]? PubKey { diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs index c8f877d8a97..6025649370c 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -13,7 +13,7 @@ public class WithdrawalRequest : ConsensusRequest { public WithdrawalRequest() { - Type = RequestsType.WithdrawalRequest; + Type = ConsensusRequestsType.WithdrawalRequest; } public Address? SourceAddress { diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index 6ddb2792931..7ef301b3c0a 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -62,7 +62,7 @@ private class BlockBodyDecoder : IRlpValueDecoder private readonly DepositDecoder _depositDecoder = new(); - private readonly ValidatorExitsDecoder _validatorExitDecoder = new(); + private readonly WithdrawalRequestDecoder _validatorExitDecoder = new(); public int GetLength(BlockBody item, RlpBehaviors rlpBehaviors) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 5e8fb991669..cef3371a740 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -15,7 +15,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder private readonly TxDecoder _txDecoder = new(); private readonly WithdrawalDecoder _withdrawalDecoder = new(); private readonly DepositDecoder _depositDecoder = new(); - private readonly ValidatorExitsDecoder _validatorExitsDecoder = new(); + private readonly WithdrawalRequestDecoder _WithdrawalRequestDecoder = new(); public Block? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -157,7 +157,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder while (rlpStream.Position < validatorExistsCheck) { - validatorExits.Add(_validatorExitsDecoder.Decode(rlpStream)); + validatorExits.Add(_WithdrawalRequestDecoder.Decode(rlpStream)); } rlpStream.Check(validatorExistsCheck); @@ -217,7 +217,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder for (int i = 0, count = item.ValidatorExits.Length; i < count; i++) { - validatorExistsLength += _validatorExitsDecoder.GetLength(item.ValidatorExits[i], rlpBehaviors); + validatorExistsLength += _WithdrawalRequestDecoder.GetLength(item.ValidatorExits[i], rlpBehaviors); } return validatorExistsLength; @@ -383,7 +383,7 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) while (decoderContext.Position < validatorExitsCheck) { - validatorExits.Add(_validatorExitsDecoder.Decode(ref decoderContext)); + validatorExits.Add(_WithdrawalRequestDecoder.Decode(ref decoderContext)); } decoderContext.Check(validatorExitsCheck); @@ -453,7 +453,7 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl for (int i = 0; i < item.ValidatorExits!.Length; i++) { - _validatorExitsDecoder.Encode(stream, item.ValidatorExits[i]); + _WithdrawalRequestDecoder.Encode(stream, item.ValidatorExits[i]); } } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs new file mode 100644 index 00000000000..6f6d82625ec --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs @@ -0,0 +1,98 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core.ConsensusRequests; + +namespace Nethermind.Serialization.Rlp; + +public class ConsensusRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder +{ + private readonly WithdrawalRequestDecoder _withdrawalRequestDecoder = new(); + private readonly DepositDecoder _depositDecoder = new(); + public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) + { + int length = Rlp.LengthOf((byte)item.Type); + switch (item.Type) + { + case ConsensusRequestsType.WithdrawalRequest: + length += _withdrawalRequestDecoder.GetLength((WithdrawalRequest)item, rlpBehaviors); + break; + case ConsensusRequestsType.Deposit: + length += _depositDecoder.GetLength((Deposit)item, rlpBehaviors); + break; + } + return length; + } + + public ConsensusRequest? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (rlpStream.IsNextItemNull()) + { + rlpStream.ReadByte(); + return null; + } + + rlpStream.ReadSequenceLength(); + + ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)rlpStream.ReadByte(); + + Console.WriteLine("ConsensusRequestsType: " + consensusRequestsType); + + ConsensusRequest result = consensusRequestsType switch + { + ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(rlpStream, rlpBehaviors), + ConsensusRequestsType.Deposit => _depositDecoder.Decode(rlpStream, rlpBehaviors), + + _ => throw new RlpException($"Unsupported consensus request type {consensusRequestsType}") + }; + + return result; + } + + public ConsensusRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (decoderContext.IsNextItemNull()) + { + decoderContext.ReadByte(); + return null; + } + + decoderContext.ReadSequenceLength(); + + ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)decoderContext.ReadByte(); + + ConsensusRequest result = consensusRequestsType switch + { + ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(ref decoderContext, rlpBehaviors), + ConsensusRequestsType.Deposit => _depositDecoder.Decode(ref decoderContext, rlpBehaviors), + _ => throw new RlpException($"Unsupported consensus request type {consensusRequestsType}") + }; + + return result; + } + + public void Encode(RlpStream stream, ConsensusRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + stream.StartSequence(GetLength(item, rlpBehaviors)); + stream.WriteByte((byte)item.Type); + switch (item.Type) + { + case ConsensusRequestsType.WithdrawalRequest: + _withdrawalRequestDecoder.Encode(stream, (WithdrawalRequest)item, rlpBehaviors); + break; + case ConsensusRequestsType.Deposit: + _depositDecoder.Encode(stream, (Deposit)item, rlpBehaviors); + break; + } + } + + public Rlp Encode(ConsensusRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + RlpStream rlpStream = new RlpStream(GetLength(item, rlpBehaviors)); + // debug getLength + Console.WriteLine("GetLength: " + GetLength(item, rlpBehaviors)); + Encode(rlpStream, item, rlpBehaviors); + return new Rlp(rlpStream.Data.ToArray()); + } +} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs index d353f7622ce..0a0b8a66e4d 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -16,7 +16,7 @@ public class DepositDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpValueDecoder _data; @@ -80,7 +80,7 @@ public void Encode(TxReceipt value) public void Encode(Withdrawal value) => _withdrawalDecoder.Encode(this, value); public void Encode(Deposit value) => _depositDecoder.Encode(this, value); - public void Encode(WithdrawalRequest value) => _validatorExitsDecoder.Encode(this, value); + public void Encode(WithdrawalRequest value) => _WithdrawalRequestDecoder.Encode(this, value); public void Encode(LogEntry value) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs similarity index 81% rename from src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs rename to src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs index ee9ad44bc5f..923f760f02e 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ValidatorExitsDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs @@ -7,15 +7,15 @@ namespace Nethermind.Serialization.Rlp; -public class ValidatorExitsDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder +public class WithdrawalRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder { public int GetLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOfSequence(Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey)) + + Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey) + Rlp.LengthOf(item.Amount); public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - int _ = rlpStream.ReadSequenceLength(); + // int _ = rlpStream.ReadSequenceLength(); Address sourceAddress = rlpStream.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); byte[] validatorPubkey = rlpStream.DecodeByteArray(); @@ -30,7 +30,7 @@ public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - int _ = decoderContext.ReadSequenceLength(); + // int _ = decoderContext.ReadSequenceLength(); Address sourceAddress = decoderContext.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); byte[] validatorPubkey = decoderContext.DecodeByteArray(); @@ -45,8 +45,8 @@ public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpB public void Encode(RlpStream stream, WithdrawalRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - int contentLength = GetLength(item, rlpBehaviors); - stream.StartSequence(contentLength); + // int contentLength = GetLength(item, rlpBehaviors); + // stream.StartSequence(contentLength); stream.Encode(item.SourceAddress); stream.Encode(item.ValidatorPubkey); stream.Encode(item.Amount); diff --git a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs index 5001286ffd1..53113165a71 100644 --- a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs @@ -13,7 +13,7 @@ namespace Nethermind.State.Proofs; public class ValidatorExitsTrie : PatriciaTrie { - private static readonly ValidatorExitsDecoder _codec = new(); + private static readonly WithdrawalRequestDecoder _codec = new(); public ValidatorExitsTrie(WithdrawalRequest[]? validatorExits, bool canBuildProof, ICappedArrayPool? bufferPool = null) : base(validatorExits, canBuildProof, bufferPool) From f9cfdca6e30ea57f2dac408b1034941ba6725d48 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 22 Apr 2024 22:51:37 +0530 Subject: [PATCH 147/551] fixed failing --- .../Encoding/ConsensusRequestDecoderTests.cs | 8 +++----- .../WithdrawalRequestDecoder.cs | 7 +++---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs index 2706e363911..11722f94ab0 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs @@ -26,7 +26,7 @@ public void Should_decode_deposit() Amount = int.MaxValue }; - byte[] rlp = Rlp.Encode(deposit).Bytes; + byte[] rlp = Rlp.Encode(deposit).Bytes; ConsensusRequest decoded = Rlp.Decode(rlp); decoded.Should().BeEquivalentTo(deposit); @@ -101,7 +101,7 @@ public void Should_encode_deposit_same_for_Rlp_Encode_and_DepositDecoder_Encode( PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue + Amount = int.MaxValue }; byte[] rlp1 = new ConsensusRequestDecoder().Encode((Deposit)deposit).Bytes; byte[] rlp2 = Rlp.Encode(deposit).Bytes; @@ -109,11 +109,9 @@ public void Should_encode_deposit_same_for_Rlp_Encode_and_DepositDecoder_Encode( rlp1.Should().BeEquivalentTo(rlp2); } - [Test] + [Test] public void Should_encode_withdrawalRequest_same_for_Rlp_Encode_and_DepositDecoder_Encode() { - byte[] validatorPubkey = new byte[48]; - validatorPubkey[11] = 11; ConsensusRequest withdrawalRequest = new WithdrawalRequest() { SourceAddress = TestItem.AddressA, diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs index 923f760f02e..0fb59c9a5cf 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs @@ -10,8 +10,8 @@ namespace Nethermind.Serialization.Rlp; public class WithdrawalRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder { public int GetLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey) + - Rlp.LengthOf(item.Amount); + Rlp.LengthOfSequence(Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey) + + Rlp.LengthOf(item.Amount)); public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -54,8 +54,7 @@ public void Encode(RlpStream stream, WithdrawalRequest item, RlpBehaviors rlpBeh public Rlp Encode(WithdrawalRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - int contentLength = GetLength(item, rlpBehaviors); - RlpStream rlpStream = new(Rlp.LengthOfSequence(contentLength)); + RlpStream rlpStream = new(GetLength(item, rlpBehaviors)); Encode(rlpStream, item, rlpBehaviors); From b3e72365378b75fd3317c08f7e272c463abacce2 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 22 Apr 2024 23:24:25 +0530 Subject: [PATCH 148/551] fix contentLength: ConsensusRequest --- .../Encoding/ConsensusRequestDecoderTests.cs | 2 +- .../Encoding/WithdrwalRequestDecoderTests.cs | 4 ++-- .../Nethermind.Core/Buffers/CappedArray.cs | 2 +- .../ConsensusRequests/ConsensusRequest.cs | 2 +- .../ConsensusRequestDecoder.cs | 15 ++++++++++----- .../DepositDecoder.cs | 4 ++-- .../WithdrawalRequestDecoder.cs | 7 +++++-- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs index 11722f94ab0..f7bea2dbc0b 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs @@ -109,7 +109,7 @@ public void Should_encode_deposit_same_for_Rlp_Encode_and_DepositDecoder_Encode( rlp1.Should().BeEquivalentTo(rlp2); } - [Test] + [Test] public void Should_encode_withdrawalRequest_same_for_Rlp_Encode_and_DepositDecoder_Encode() { ConsensusRequest withdrawalRequest = new WithdrawalRequest() diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs index 982e6c8a54e..ff9d8eddca4 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs @@ -33,7 +33,7 @@ public void Roundtrip() } [Test] - public void GetLength_should_be_72() + public void GetLength_should_be_73() { byte[] validatorPubkey = new byte[48]; WithdrawalRequest exit = new() @@ -42,6 +42,6 @@ public void GetLength_should_be_72() ValidatorPubkey = validatorPubkey, Amount = 0 }; - Assert.That(_decoder.GetLength(exit, RlpBehaviors.None), Is.EqualTo(72), "GetLength"); + Assert.That(_decoder.GetLength(exit, RlpBehaviors.None), Is.EqualTo(73), "GetLength"); } } diff --git a/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs b/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs index 31314220a8c..0d909d05077 100644 --- a/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs +++ b/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs @@ -98,7 +98,7 @@ public readonly Span AsSpan() public readonly Span AsSpan(int start, int length) { - return _array.AsSpan(start, length); + return _array.AsSpan(start, length); } public readonly T[]? ToArray() diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index 2a1d0c06b65..c3efe71cca8 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -6,7 +6,7 @@ namespace Nethermind.Core.ConsensusRequests; -public enum ConsensusRequestsType: byte +public enum ConsensusRequestsType : byte { Deposit = 0, WithdrawalRequest = 1 diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs index 6f6d82625ec..265d9fce4c9 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs @@ -10,21 +10,26 @@ public class ConsensusRequestDecoder : IRlpStreamDecoder, IRlp { private readonly WithdrawalRequestDecoder _withdrawalRequestDecoder = new(); private readonly DepositDecoder _depositDecoder = new(); - public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) + public int GetContentLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) { int length = Rlp.LengthOf((byte)item.Type); switch (item.Type) { case ConsensusRequestsType.WithdrawalRequest: - length += _withdrawalRequestDecoder.GetLength((WithdrawalRequest)item, rlpBehaviors); + length += _withdrawalRequestDecoder.GetContentLength((WithdrawalRequest)item, rlpBehaviors); break; case ConsensusRequestsType.Deposit: - length += _depositDecoder.GetLength((Deposit)item, rlpBehaviors); + length += _depositDecoder.GetContentLength((Deposit)item, rlpBehaviors); break; } return length; } + public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) + { + return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); + } + public ConsensusRequest? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) @@ -43,8 +48,8 @@ public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) { ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(rlpStream, rlpBehaviors), ConsensusRequestsType.Deposit => _depositDecoder.Decode(rlpStream, rlpBehaviors), - - _ => throw new RlpException($"Unsupported consensus request type {consensusRequestsType}") + + _ => throw new RlpException($"Unsupported consensus request type {consensusRequestsType}") }; return result; diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs index 0a0b8a66e4d..a181e1e507a 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -76,12 +76,12 @@ public Rlp Encode(Deposit? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) return new(stream.Data.ToArray()); } - private static int GetContentLength(Deposit item) => + public int GetContentLength(Deposit item, RlpBehaviors rlpBehaviors) => Rlp.LengthOf(item.PubKey) + Rlp.LengthOf(item.WithdrawalCredentials) + Rlp.LengthOf(item.Amount) + Rlp.LengthOf(item.Signature) + Rlp.LengthOf(item.Index); - public int GetLength(Deposit item, RlpBehaviors _) => Rlp.LengthOfSequence(GetContentLength(item)); + public int GetLength(Deposit item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs index 0fb59c9a5cf..05f89887831 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs @@ -10,8 +10,11 @@ namespace Nethermind.Serialization.Rlp; public class WithdrawalRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder { public int GetLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOfSequence(Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey) + - Rlp.LengthOf(item.Amount)); + Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); + + public int GetContentLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => + Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey) + + Rlp.LengthOf(item.Amount); public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { From 8f25b4ddab3855555ddc92f9ad39a464ba241f65 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 22 Apr 2024 23:32:03 +0200 Subject: [PATCH 149/551] working on 7002 syscall --- .../ValidatorExit/WithdrawRequestsContract.cs | 15 +++++++++++++++ .../AuRaMergeBlockProcessor.cs | 6 ++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs index 469ffb9bab9..cd4440f90a7 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs @@ -46,13 +46,28 @@ WithdrawalRequest[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state _transactionProcessor.Execute(transaction, new BlockExecutionContext(header), tracer); var result = tracer.ReturnValue; + if (result == null || result.Length == 0) + return Array.Empty(); + var withdrawalRequests = new List(); + int sizeOfClass = 20 + 48 + 8; + int count = result.Length / sizeOfClass; + for (int i = 0; i < count; ++i) + { + WithdrawalRequest request = new(); + Span span = new Span(result, i * sizeOfClass, sizeOfClass); + request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); + request.ValidatorPubkey = span.Slice(20, 48).ToArray(); + request.Amount = BitConverter.ToUInt64(span.Slice(68, 8)); + withdrawalRequests.Add(request); + } return withdrawalRequests.ToArray(); } catch (Exception) { + // add logger return null; } } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 66e15363366..369be672b65 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -36,8 +36,7 @@ public AuRaMergeBlockProcessor( IAuRaValidator? validator, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, - ContractRewriter? contractRewriter = null - ) : base( + ContractRewriter? contractRewriter = null) : base( specProvider, blockValidator, rewardCalculator, @@ -51,8 +50,7 @@ public AuRaMergeBlockProcessor( validator, txFilter, gasLimitOverride, - contractRewriter - ) + contractRewriter) { } protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) => From 6c1b526e91543fdf182177f43853c008c502c2fd Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 23 Apr 2024 13:22:16 +0200 Subject: [PATCH 150/551] more tests --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 123 ++++++++++++------ .../Nethermind.Evm/VirtualMachine.cs | 6 +- 2 files changed, 89 insertions(+), 40 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 07561759709..9b2b1e84578 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -36,26 +36,7 @@ public static IEnumerable AuthCases() [TestCaseSource(nameof(AuthCases))] public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(PrivateKey signer, Address authority, int expected) { - List msg = - [ - Eip3074Constants.AuthMagic, - .. ((UInt256)SpecProvider.ChainId).ToBigEndian().PadLeft(32), - .. TestState.GetNonce(signer.Address).PaddedBytes(32), - .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), - ]; - - byte[] commit = new byte[32]; - commit[0] = 0xff; - msg.AddRange(commit); - - Hash256 msgDigest = Keccak.Compute(msg.ToArray()); - EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); - - Signature signature = ecdsa.Sign(signer, msgDigest); - //Recovery id/yParity needs to be at index 0 - var data = signature.BytesWithRecovery[64..] - .Concat(signature.BytesWithRecovery[..64]) - .Concat(commit).ToArray(); + var data = CreateSignedCommitMessage(signer); byte[] code = Prepare.EvmCode .PushData(data[..32]) @@ -67,6 +48,9 @@ .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), .PushData(data[64..96]) .PushSingle(64) .Op(Instruction.MSTORE) + .PushData(data[96..]) + .PushSingle(96) + .Op(Instruction.MSTORE) //AUTH params .PushSingle((UInt256)data.Length) @@ -225,12 +209,15 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft .PushData(TestItem.AddressC) .PushData(1000000) .Op(Instruction.AUTHCALL) - .PushSingle(20) - .PushSingle(0) - .Op(Instruction.RETURN) + //.PushSingle(20) + //.PushSingle(0) + //.Op(Instruction.RETURN) .Done; - byte[] firstrDeletegateCallCode = Prepare.EvmCode + byte[] firstCallCode = Prepare.EvmCode + .CALLER() + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) .PushData(20) .PushData(0) .PushData(0) @@ -239,26 +226,30 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft .PushData(TestItem.AddressD) .PushData(1000000) .Op(Instruction.CALL) - .PushSingle(20) - .PushSingle(0) - .Op(Instruction.RETURN) + //.PushSingle(20) + //.PushSingle(0) + //.Op(Instruction.RETURN) .Done; - byte[] secondDeletegateCallCode = Prepare.EvmCode + byte[] secondCallCode = Prepare.EvmCode + .CALLER() + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) .PushData(20) .PushData(0) .PushData(0) .PushData(0) + .PushData(0) .PushData(TestItem.AddressE) .PushData(1000000) - .Op(Instruction.DELEGATECALL) - .PushSingle(20) - .PushSingle(0) - .Op(Instruction.RETURN) + .Op(Instruction.CALL) + //.PushSingle(20) + //.PushSingle(0) + //.Op(Instruction.RETURN) .Done; - //Simply returns the current msg.caller - byte[] codeReturnCaller = Prepare.EvmCode + //Store caller in slot 0 + byte[] codeStoreCaller = Prepare.EvmCode .CALLER() .Op(Instruction.PUSH0) .Op(Instruction.SSTORE) @@ -266,19 +257,73 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft .Done; TestState.CreateAccount(TestItem.AddressC, 0); - TestState.InsertCode(TestItem.AddressC, Keccak.Compute(firstrDeletegateCallCode), firstrDeletegateCallCode, Spec); + TestState.InsertCode(TestItem.AddressC, Keccak.Compute(firstCallCode), firstCallCode, Spec); TestState.CreateAccount(TestItem.AddressD, 0); - TestState.InsertCode(TestItem.AddressD, Keccak.Compute(secondDeletegateCallCode), secondDeletegateCallCode, Spec); + TestState.InsertCode(TestItem.AddressD, Keccak.Compute(secondCallCode), secondCallCode, Spec); TestState.CreateAccount(TestItem.AddressE, 0); - TestState.InsertCode(TestItem.AddressE, Keccak.Compute(codeReturnCaller), codeReturnCaller, Spec); + TestState.InsertCode(TestItem.AddressE, Keccak.Compute(codeStoreCaller), codeStoreCaller, Spec); Execute(code); - var result = TestState.Get(new StorageCell(TestItem.AddressD, 0)); + var resultB = TestState.Get(new StorageCell(TestItem.AddressB, 0)); + + Assert.That(new Address(resultB.ToArray()), Is.EqualTo(TestItem.AddressB)); + + var resultD = TestState.Get(new StorageCell(TestItem.AddressD, 0)); + + Assert.That(new Address(resultD.ToArray()), Is.EqualTo(TestItem.AddressC)); + + var resultE = TestState.Get(new StorageCell(TestItem.AddressE, 0)); + + Assert.That(new Address(resultE.ToArray()), Is.EqualTo(TestItem.AddressD)); + } + + [TestCase(97, 3100)] + [TestCase(160, 3103)] + [TestCase(192, 3106)] + [TestCase(193, 3109)] + public void ExecuteAuth_AUTHDoesExpandMemory_AUTHCosts3100GasPlusMemoryExpansion(int authMemoryLength, int expectedGas) + { + var data = CreateSignedCommitMessage(TestItem.PrivateKeyB); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + .PushData(data[96..]) + .PushSingle(96) + .Op(Instruction.MSTORE) + + .PushSingle((UInt256)authMemoryLength) + .Op(Instruction.PUSH0) + .PushData(TestItem.AddressB) + .Done; + + var authCode = + code.Concat( + Prepare.EvmCode + .Op(Instruction.AUTH) + .Done + ).ToArray(); + + TestState.CreateAccount(TestItem.AddressC, 0); + TestState.InsertCode(TestItem.AddressC, Keccak.Compute(code), code, Spec); + + TestState.CreateAccount(TestItem.AddressD, 0); + TestState.InsertCode(TestItem.AddressD, Keccak.Compute(authCode), authCode, Spec); + + var resultNoAuth = Execute(code); + var resultWithAuth = Execute(authCode); - Assert.That(new Address(result.ToArray()), Is.EqualTo(TestItem.AddressC)); + Assert.That(resultWithAuth.GasSpent - resultNoAuth.GasSpent, Is.EqualTo(expectedGas)); } private byte[] CreateSignedCommitMessage(PrivateKey signer) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 782e041346e..5d772ec9ada 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2103,7 +2103,7 @@ private CallResult ExecuteCode commit; //TODO bounds check - check GETH @@ -2155,6 +2158,7 @@ private CallResult ExecuteCode Date: Tue, 23 Apr 2024 17:05:14 +0200 Subject: [PATCH 151/551] Requests root --- .../CliqueBlockProducer.cs | 3 +- .../Messages/BlockErrorMessages.cs | 12 +- .../Processing/BlockExtensions.cs | 4 +- .../Processing/BlockProcessor.cs | 5 +- .../Producers/BlockToProduce.cs | 8 +- .../Requests/ConsensusRequestsProcessor.cs | 14 +- .../Requests/IWithdrawalRequestsProcessor.cs | 3 +- .../Requests/WithdrawalRequestsProcessor.cs | 2 +- .../Validators/BlockValidator.cs | 114 +++--------- .../Builders/BlockBuilder.cs | 27 +-- .../Builders/BlockHeaderBuilder.cs | 10 +- .../Encoding/BlockDecoderTests.cs | 10 +- .../Encoding/HeaderDecoderTests.cs | 8 +- src/Nethermind/Nethermind.Core/Block.cs | 17 +- src/Nethermind/Nethermind.Core/BlockBody.cs | 20 +- src/Nethermind/Nethermind.Core/BlockHeader.cs | 19 +- .../Modules/Eth/BlockForRpc.cs | 16 +- .../EngineModuleTests.V4.cs | 158 ++++++++++++++++ .../Data/ExecutionPayload.cs | 2 +- .../Data/ExecutionPayloadV4.cs | 12 +- .../Synchronization/ChainLevelHelper.cs | 2 +- .../Messages/BlockBodiesMessageSerializer.cs | 17 +- .../BlockDecoder.cs | 172 +++++------------- .../HeaderDecoder.cs | 26 +-- .../Nethermind.Serialization.Rlp/RlpStream.cs | 6 +- .../ChainSpecStyle/ChainSpecLoader.cs | 18 +- .../Forks/{17_Prague.cs => 18_Prague.cs} | 1 + .../Nethermind.State/Proofs/DepositTrie.cs | 34 ---- .../Nethermind.State/Proofs/RequestsTrie.cs | 40 ++++ .../Proofs/ValidatorExitsTrie.cs | 40 ---- 30 files changed, 352 insertions(+), 468 deletions(-) create mode 100644 src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs rename src/Nethermind/Nethermind.Specs/Forks/{17_Prague.cs => 18_Prague.cs} (86%) delete mode 100644 src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs create mode 100644 src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs delete mode 100644 src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index 3025ed492f2..3fb03324e00 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -447,8 +447,7 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) selectedTxs, Array.Empty(), spec.WithdrawalsEnabled ? Enumerable.Empty() : null, - spec.DepositsEnabled ? Enumerable.Empty() : null, - spec.ValidatorExitsEnabled ? Enumerable.Empty() : null + spec.DepositsEnabled ? Enumerable.Empty() : null ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index 9aba7284430..cda3c0325d9 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -116,12 +116,8 @@ public static string InvalidTxInBlock(int i) => public const string NegativeGasUsed = "NegativeGasUsed: Cannot be negative."; - public static string MissingValidatorExits => "MissingValidatorExits: Exits cannot be null in block when EIP-7002 activated."; - public static string ValidatorExitsNotEnabled => "ValidatorExitsNotEnabled: Exits must be null in block when EIP-7002 not activated."; - public static string InvalidValidatorExitsRoot(Hash256? expected, Hash256? actual) => - $"InvalidValidatorExitsRoot: expected {expected}, got {actual}"; - - public static string MissingDeposits => "MissingDeposits: Deposits cannot be null in block when EIP-6110 activated."; - public static string DepositsNotEnabled => "DepositsNotEnabled: Deposits must be null in block when EIP-6110 not activated."; - public static string InvalidDepositsRoot(Hash256? expected, Hash256? actual) => $"InvalidDepositsRoot: Deposits root hash mismatch in block: expected {expected}, got {actual}"; + + public static string MissingRequests => "MissingRequests: Requests cannot be null in block when EIP-6110 or EIP-7002 activated."; + public static string RequestsNotEnabled => "RequestsNotEnabled: Requests must be null in block when EIP-6110 and EIP-7002 not activated."; + public static string InvalidRequestsRoot(Hash256? expected, Hash256? actual) => $"InvalidRequestsRoot: Requests root hash mismatch in block: expected {expected}, got {actual}"; } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs index 46f2773cc7a..6e0eab907da 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs @@ -18,8 +18,8 @@ internal static class BlockExtensions { public static Block CreateCopy(this Block block, BlockHeader header) => block is BlockToProduce blockToProduce - ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals, blockToProduce.Deposits, blockToProduce.ValidatorExits) - : new Block(header, block.Transactions, block.Uncles, block.Withdrawals, block.Deposits, block.ValidatorExits); + ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals, blockToProduce.Requests) + : new Block(header, block.Transactions, block.Uncles, block.Withdrawals, block.Requests); public static IEnumerable GetTransactions(this Block block) => block is BlockToProduce blockToProduce diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 2cf2b924816..c8934e292e8 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -308,10 +308,9 @@ private Block PrepareBlockForProcessing(Block suggestedBlock) ReceiptsRoot = bh.ReceiptsRoot, BaseFeePerGas = bh.BaseFeePerGas, WithdrawalsRoot = bh.WithdrawalsRoot, - DepositsRoot = bh.DepositsRoot, + RequestsRoot = bh.RequestsRoot, IsPostMerge = bh.IsPostMerge, - ParentBeaconBlockRoot = bh.ParentBeaconBlockRoot, - ValidatorExitsRoot = bh.ValidatorExitsRoot + ParentBeaconBlockRoot = bh.ParentBeaconBlockRoot }; if (!ShouldComputeStateRoot(bh)) diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs index 04cacdc0ea4..be52d7b7203 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs @@ -30,14 +30,12 @@ internal class BlockToProduce : Block } } - public BlockToProduce( - BlockHeader blockHeader, + public BlockToProduce(BlockHeader blockHeader, IEnumerable transactions, IEnumerable uncles, IEnumerable? withdrawals = null, - IEnumerable? deposits = null, - IEnumerable? validatorExits = null) - : base(blockHeader, Array.Empty(), uncles, withdrawals, deposits, validatorExits) + IEnumerable? requests = null) + : base(blockHeader, Array.Empty(), uncles, withdrawals, requests) { Transactions = transactions; } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 112ee14462e..794954c98c4 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -27,18 +27,18 @@ public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, T if (spec.IsEip6110Enabled == false && spec.IsEip7002Enabled == false) return; - List consensusRequests = []; + List requests = []; // Process deposits List? deposits = _depositsProcessor.ProcessDeposits(block, receipts, spec); if (deposits is { Count: > 0 }) - consensusRequests.AddRange(deposits); + requests.AddRange(deposits); - WithdrawalRequest[]? withdrawalRequests = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state); + WithdrawalRequest[]? withdrawalRequests = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state, block); if (withdrawalRequests is { Length: > 0 }) - consensusRequests.AddRange(withdrawalRequests); + requests.AddRange(withdrawalRequests); - Hash256 root = ValidatorExitsTrie.CalculateRoot(withdrawalRequests); // ToDo Rohit - we have to change root calculations here - block.Body.ValidatorExits = withdrawalRequests; - block.Header.ValidatorExitsRoot = root; + Hash256 root = new RequestsTrie(requests.ToArray()).RootHash; + // block.Body.Requests = requests; ToDo think about it + block.Header.RequestsRoot = root; } } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs index 553eeca4753..24751ef8698 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using Nethermind.Core; using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Specs; using Nethermind.State; @@ -9,5 +10,5 @@ namespace Nethermind.Consensus.Requests; public interface IWithdrawalRequestsProcessor { - WithdrawalRequest[]? ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state); + WithdrawalRequest[]? ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state, Block block); } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 58fea56d848..0297b703e7a 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -24,7 +24,7 @@ public class WithdrawalRequestsProcessor : IWithdrawalRequestsProcessor private static readonly UInt256 TargetWithdrawalRequestsPerBlock = 2; // Will be moved to system transaction - public WithdrawalRequest[]? ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state) + public WithdrawalRequest[]? ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state, Block block) { if (spec.IsEip7002Enabled == false) return null; diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 43a4c785011..dcf149b3229 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -148,10 +148,7 @@ public bool ValidateSuggestedBlock(Block block, out string? errorMessage) if (!ValidateWithdrawals(block, spec, out errorMessage)) return false; - if (!ValidateDeposits(block, spec, out errorMessage)) - return false; - - if (!ValidateValidatorExits(block, spec, out _)) + if (!ValidateRequests(block, spec, out errorMessage)) return false; return true; @@ -234,16 +231,10 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B error = error ?? BlockErrorMessages.InvalidParentBeaconBlockRoot; } - if (processedBlock.Header.DepositsRoot != suggestedBlock.Header.DepositsRoot) - { - if (_logger.IsWarn) _logger.Warn($"- deposits root : expected {suggestedBlock.Header.DepositsRoot}, got {processedBlock.Header.DepositsRoot}"); - error = error ?? BlockErrorMessages.InvalidDepositsRoot(suggestedBlock.Header.DepositsRoot, processedBlock.Header.DepositsRoot); - } - - if (processedBlock.Header.ValidatorExitsRoot != suggestedBlock.Header.ValidatorExitsRoot) + if (processedBlock.Header.RequestsRoot != suggestedBlock.Header.RequestsRoot) { - if (_logger.IsWarn) _logger.Warn($"- exits root : expected {suggestedBlock.Header.ValidatorExitsRoot}, got {processedBlock.Header.ValidatorExitsRoot}"); - error = error ?? BlockErrorMessages.InvalidValidatorExitsRoot(suggestedBlock.Header.ValidatorExitsRoot, processedBlock.Header.ValidatorExitsRoot); + if (_logger.IsWarn) _logger.Warn($"- requests root : expected {suggestedBlock.Header.RequestsRoot}, got {processedBlock.Header.RequestsRoot}"); + error = error ?? BlockErrorMessages.InvalidRequestsRoot(suggestedBlock.Header.RequestsRoot, processedBlock.Header.RequestsRoot); } for (int i = 0; i < processedBlock.Transactions.Length; i++) @@ -301,75 +292,35 @@ private bool ValidateWithdrawals(Block block, IReleaseSpec spec, out string? err return true; } - public bool ValidateDeposits(Block block, out string? error) => - ValidateDeposits(block, _specProvider.GetSpec(block.Header), out error); + public bool ValidateRequests(Block block, out string? error) => + ValidateRequests(block, _specProvider.GetSpec(block.Header), out error); - private bool ValidateDeposits(Block block, IReleaseSpec spec, out string? error) + private bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) { - if (spec.DepositsEnabled && block.Deposits is null) + if ((spec.DepositsEnabled || spec.IsEip7002Enabled) && block.Requests is null) { - error = BlockErrorMessages.MissingDeposits; + error = BlockErrorMessages.MissingRequests; if (_logger.IsWarn) _logger.Warn(error); return false; } - if (!spec.DepositsEnabled && block.Deposits is not null) + if (!spec.DepositsEnabled && !spec.IsEip7002Enabled && block.Requests is not null) { - error = BlockErrorMessages.DepositsNotEnabled; + error = BlockErrorMessages.RequestsNotEnabled; if (_logger.IsWarn) _logger.Warn(error); return false; } - if (block.Deposits is not null) + if (block.Requests is not null) { - if (!ValidateDepositsHashMatches(block, out Hash256 depositsRoot)) + if (!ValidateRequestsHashMatches(block, out Hash256 depositsRoot)) { - error = BlockErrorMessages.InvalidDepositsRoot(block.Header.DepositsRoot, depositsRoot); - if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.DepositsRoot}, got {depositsRoot}"); - - return false; - } - } - - error = null; - - return true; - } - - public bool ValidateValidatorExits(Block block, out string error) => - ValidateValidatorExits(block, _specProvider.GetSpec(block.Header), out error); - - - private bool ValidateValidatorExits(Block block, IReleaseSpec spec, out string error) - { - if (spec.IsEip7002Enabled && block.ValidatorExits is null) - { - error = BlockErrorMessages.MissingValidatorExits; - - if (_logger.IsWarn) _logger.Warn(error); - - return false; - } - - if (!spec.IsEip7002Enabled && block.ValidatorExits is not null) - { - error = BlockErrorMessages.ValidatorExitsNotEnabled; - - if (_logger.IsWarn) _logger.Warn(error); - - return false; - } - - if (block.ValidatorExits is not null) - { - if (!ValidateValidatorExitsHashMatches(block, out Hash256 validatorExitsRoot)) - { - error = BlockErrorMessages.InvalidValidatorExitsRoot(block.Header.ValidatorExitsRoot, validatorExitsRoot); - if (_logger.IsWarn) _logger.Warn($"ValidatorExits root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.ValidatorExitsRoot}, got {validatorExitsRoot}"); + error = BlockErrorMessages.InvalidRequestsRoot(block.Header.RequestsRoot, depositsRoot); + if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.RequestsRoot}, got {depositsRoot}"); return false; } @@ -463,7 +414,7 @@ public static bool ValidateBodyAgainstHeader(BlockHeader header, BlockBody toBeV ValidateTxRootMatchesTxs(header, toBeValidated, out _) && ValidateUnclesHashMatches(header, toBeValidated, out _) && ValidateWithdrawalsHashMatches(header, toBeValidated, out _) && - ValidateDepositsHashMatches(header, toBeValidated, out _); + ValidateRequestsHashMatches(header, toBeValidated, out _); public static bool ValidateTxRootMatchesTxs(Block block, out Hash256 txRoot) { @@ -503,38 +454,21 @@ public static bool ValidateWithdrawalsHashMatches(BlockHeader header, BlockBody return header.WithdrawalsRoot == withdrawalsRoot; } - public static bool ValidateDepositsHashMatches(Block block, out Hash256? withdrawalsRoot) - { - return ValidateDepositsHashMatches(block.Header, block.Body, out withdrawalsRoot); - } - - public static bool ValidateDepositsHashMatches(BlockHeader header, BlockBody body, out Hash256? depositsRoot) - { - depositsRoot = null; - if (body.Deposits == null) - return header.DepositsRoot is null; - - depositsRoot = new DepositTrie(body.Deposits).RootHash; - - return header.DepositsRoot == depositsRoot; - } - - private static bool ValidateValidatorExitsHashMatches(Block block, out Hash256? validatorExitsRoot) + public static bool ValidateRequestsHashMatches(Block block, out Hash256? withdrawalsRoot) { - return ValidateValidatorExitsHashMatches(block.Header, block.Body, out validatorExitsRoot); + return ValidateRequestsHashMatches(block.Header, block.Body, out withdrawalsRoot); } - public static bool ValidateValidatorExitsHashMatches(BlockHeader header, BlockBody body, out Hash256? validatorExitsRoot) + public static bool ValidateRequestsHashMatches(BlockHeader header, BlockBody body, out Hash256? requestsRoot) { - validatorExitsRoot = null; - if (body.ValidatorExits == null) - return header.ValidatorExitsRoot is null; + requestsRoot = null; + if (body.Requests == null) + return header.RequestsRoot is null; - validatorExitsRoot = ValidatorExitsTrie.CalculateRoot(body.ValidatorExits); + requestsRoot = new RequestsTrie(body.Requests).RootHash; - return header.ValidatorExitsRoot == validatorExitsRoot; + return header.RequestsRoot == requestsRoot; } - private static string Invalid(Block block) => $"Invalid block {block.ToString(Block.Format.FullHashAndNumber)}:"; } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index b289f73b40f..846e19ec80e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -217,7 +217,7 @@ public BlockBuilder WithWithdrawalsRoot(Hash256? withdrawalsRoot) public BlockBuilder WithDepositRoot(Hash256? depositsRoot) { - TestObjectInternal.Header.DepositsRoot = depositsRoot; + TestObjectInternal.Header.RequestsRoot = depositsRoot; return this; } @@ -283,24 +283,24 @@ public BlockBuilder WithWithdrawals(params Withdrawal[]? withdrawals) return this; } - public BlockBuilder WithDeposits(int count) + public BlockBuilder WithConsensusRequests(int count) { - var deposits = new Deposit[count]; + var consensusRequests = new ConsensusRequest[count]; for (var i = 0; i < count; i++) - deposits[i] = new(); + consensusRequests[i] = new(); - return WithDeposits(deposits); + return WithConsensusRequests(consensusRequests); } - public BlockBuilder WithDeposits(params Deposit[]? deposits) + public BlockBuilder WithConsensusRequests(params ConsensusRequest[]? requests) { TestObjectInternal = TestObjectInternal - .WithReplacedBody(TestObjectInternal.Body.WithChangedDeposits(deposits)); + .WithReplacedBody(TestObjectInternal.Body.WithChangedDeposits(requests)); - TestObjectInternal.Header.DepositsRoot = deposits is null + TestObjectInternal.Header.RequestsRoot = requests is null ? null - : new DepositTrie(deposits).RootHash; + : new RequestsTrie(requests).RootHash; return this; } @@ -310,14 +310,5 @@ public BlockBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRoot) TestObjectInternal.Header.ParentBeaconBlockRoot = parentBeaconBlockRoot; return this; } - - public BlockBuilder WithValidatorExits(WithdrawalRequest[]? validatorExits) - { - TestObjectInternal = TestObjectInternal.WithReplacedBody( - TestObjectInternal.Body.WithChangedValidatorExits(validatorExits)); - - TestObjectInternal.Header.ValidatorExitsRoot = validatorExits is not null ? ValidatorExitsTrie.CalculateRoot(validatorExits) : null; - return this; - } } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs index ad23e80b465..3728015647f 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs @@ -196,15 +196,9 @@ public BlockHeaderBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRo return this; } - public BlockHeaderBuilder WithDepositsRoot(Hash256? depositRoot) + public BlockHeaderBuilder WithDepositsRoot(Hash256? requestsRoot) { - TestObjectInternal.DepositsRoot = depositRoot; - return this; - } - - public BlockHeaderBuilder WithValidatorExitsRoot(Hash256? validatorExitsRoot) - { - TestObjectInternal.ValidatorExitsRoot = validatorExitsRoot; + TestObjectInternal.RequestsRoot = requestsRoot; return this; } } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index deb21b9af2e..697a221d7b6 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -96,14 +96,8 @@ public BlockDecoderTests() .WithBlobGasUsed(ulong.MaxValue) .WithExcessBlobGas(ulong.MaxValue) .WithMixHash(Keccak.EmptyTreeHash) - // an empty Deposit array - .WithDeposits(0) - .WithValidatorExits(new[] { new WithdrawalRequest() - { - SourceAddress = TestItem.AddressA, - ValidatorPubkey = new byte[48], - Amount = 12 - } }) + // an empty requests array + .WithConsensusRequests(0) .TestObject }; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs index e899d12b875..93e666ab3e5 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs @@ -166,14 +166,12 @@ public void Can_encode_decode_with_ValidatorExitRoot() .WithBlobGasUsed(0) .WithExcessBlobGas(0) .WithParentBeaconBlockRoot(TestItem.KeccakB) - .WithDepositsRoot(Keccak.Zero) - .WithValidatorExitsRoot(TestItem.KeccakA).TestObject; + .WithDepositsRoot(Keccak.Zero).TestObject; Rlp rlp = Rlp.Encode(header); BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); blockHeader.ParentBeaconBlockRoot.Should().Be(TestItem.KeccakB); - blockHeader.ValidatorExitsRoot.Should().Be(TestItem.KeccakA); } [Test] @@ -186,14 +184,12 @@ public void Can_encode_decode_with_ValidatorExitRoot_equals_to_null() .WithBlobGasUsed(0) .WithExcessBlobGas(0) .WithParentBeaconBlockRoot(TestItem.KeccakB) - .WithDepositsRoot(Keccak.Zero) - .WithValidatorExitsRoot(null).TestObject; + .WithDepositsRoot(Keccak.Zero).TestObject; Rlp rlp = Rlp.Encode(header); BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); blockHeader.ParentBeaconBlockRoot.Should().Be(TestItem.KeccakB); - blockHeader.ValidatorExitsRoot.Should().BeNull(); } public static IEnumerable CancunFieldsSource() diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index f5175110ab3..b2cbbf21247 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -21,16 +21,14 @@ public Block(BlockHeader header, BlockBody body) Body = body ?? throw new ArgumentNullException(nameof(body)); } - public Block( - BlockHeader header, + public Block(BlockHeader header, IEnumerable transactions, IEnumerable uncles, IEnumerable? withdrawals = null, - IEnumerable? deposits = null, - IEnumerable? validatorExits = null) + IEnumerable? requests = null) { Header = header ?? throw new ArgumentNullException(nameof(header)); - Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray(), deposits?.ToArray(), validatorExits?.ToArray()); + Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray(), requests?.ToArray()); } public Block(BlockHeader header) : this( @@ -39,8 +37,7 @@ public Block(BlockHeader header) : this( null, null, header.WithdrawalsRoot is null ? null : Array.Empty(), - header.DepositsRoot is null ? null : Array.Empty(), - header.ValidatorExitsRoot is null ? null : Array.Empty()) + header.RequestsRoot is null ? null : Array.Empty()) ) { } @@ -64,10 +61,8 @@ public Transaction[] Transactions public BlockHeader[] Uncles => Body.Uncles; // do not add setter here - public Withdrawal[]? Withdrawals => Body.Withdrawals; - public Deposit[]? Deposits => Body.Deposits; - - public WithdrawalRequest[]? ValidatorExits => Body.ValidatorExits; // do not add setter here + public Withdrawal[]? Withdrawals => Body.Withdrawals; // do not add setter here + public ConsensusRequest[]? Requests => Body.Requests; // do not add setter here public Hash256? Hash => Header.Hash; // do not add setter here diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 6cbb4ff934d..6a57e200e9e 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -8,24 +8,22 @@ namespace Nethermind.Core { public class BlockBody { - public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null, Deposit[]? deposits = null, WithdrawalRequest[]? validatorExits = null) + public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null, ConsensusRequest[]? requests = null) { Transactions = transactions ?? Array.Empty(); Uncles = uncles ?? Array.Empty(); Withdrawals = withdrawals; - Deposits = deposits; - ValidatorExits = validatorExits; + Requests = requests; } public BlockBody() : this(null, null, null) { } - public BlockBody WithChangedTransactions(Transaction[] transactions) => new(transactions, Uncles, Withdrawals, Deposits, ValidatorExits); + public BlockBody WithChangedTransactions(Transaction[] transactions) => new(transactions, Uncles, Withdrawals, Requests); - public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals, Deposits, ValidatorExits); + public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals, Requests); - public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals, Deposits, ValidatorExits); - public BlockBody WithChangedDeposits(Deposit[]? deposits) => new(Transactions, Uncles, Withdrawals, deposits, ValidatorExits); - public BlockBody WithChangedValidatorExits(WithdrawalRequest[]? validatorExits) => new(Transactions, Uncles, Withdrawals, Deposits, validatorExits); + public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals, Requests); + public BlockBody WithChangedDeposits(ConsensusRequest[]? consensusRequests) => new(Transactions, Uncles, Withdrawals, consensusRequests); public static BlockBody WithOneTransactionOnly(Transaction tx) => new(new[] { tx }, null, null); @@ -34,10 +32,8 @@ public BlockBody() : this(null, null, null) { } public BlockHeader[] Uncles { get; } public Withdrawal[]? Withdrawals { get; } + public ConsensusRequest[]? Requests { get; } - public WithdrawalRequest[]? ValidatorExits { get; set; } - public Deposit[]? Deposits { get; } - - public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0 && (Deposits?.Length ?? 0) == 0 && (ValidatorExits?.Length ?? 0) == 0; + public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0 && (Requests?.Length ?? 0) == 0; } } diff --git a/src/Nethermind/Nethermind.Core/BlockHeader.cs b/src/Nethermind/Nethermind.Core/BlockHeader.cs index 50133d6b020..1ddd19503b9 100644 --- a/src/Nethermind/Nethermind.Core/BlockHeader.cs +++ b/src/Nethermind/Nethermind.Core/BlockHeader.cs @@ -28,7 +28,7 @@ public BlockHeader( ulong? blobGasUsed = null, ulong? excessBlobGas = null, Hash256? parentBeaconBlockRoot = null, - Hash256? validatorExitsRoot = null) + Hash256? requestsRoot = null) { ParentHash = parentHash; UnclesHash = unclesHash; @@ -39,7 +39,7 @@ public BlockHeader( Timestamp = timestamp; ExtraData = extraData; ParentBeaconBlockRoot = parentBeaconBlockRoot; - ValidatorExitsRoot = validatorExitsRoot; + RequestsRoot = requestsRoot; BlobGasUsed = blobGasUsed; ExcessBlobGas = excessBlobGas; } @@ -71,16 +71,14 @@ public BlockHeader( public long? AuRaStep { get; set; } public UInt256 BaseFeePerGas { get; set; } public Hash256? WithdrawalsRoot { get; set; } - public Hash256? ValidatorExitsRoot { get; set; } public Hash256? ParentBeaconBlockRoot { get; set; } - public Hash256? DepositsRoot { get; set; } + public Hash256? RequestsRoot { get; set; } public ulong? BlobGasUsed { get; set; } public ulong? ExcessBlobGas { get; set; } public bool HasBody => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash) || (UnclesHash is not null && UnclesHash != Keccak.OfAnEmptySequenceRlp) || (WithdrawalsRoot is not null && WithdrawalsRoot != Keccak.EmptyTreeHash) - || (DepositsRoot is not null && DepositsRoot != Keccak.EmptyTreeHash) - || (ValidatorExitsRoot is not null && ValidatorExitsRoot != Keccak.EmptyTreeHash); + || (RequestsRoot is not null && RequestsRoot != Keccak.EmptyTreeHash); public bool HasTransactions => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash); @@ -121,14 +119,11 @@ public string ToString(string indent) } builder.AppendLine($"{indent}IsPostMerge: {IsPostMerge}"); builder.AppendLine($"{indent}TotalDifficulty: {TotalDifficulty}"); - if (DepositsRoot is not null) + if (RequestsRoot is not null) { - builder.AppendLine($"{indent}DepositsRoot: {DepositsRoot}"); - } - if (ValidatorExitsRoot is not null) - { - builder.AppendLine($"{indent}ValidatorExitsRoot: {ValidatorExitsRoot}"); + builder.AppendLine($"{indent}RequestsRoot: {RequestsRoot}"); } + return builder.ToString(); } diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs index 2e74388082a..6c29b8f76cb 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs @@ -84,10 +84,8 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s Uncles = block.Uncles.Select(o => o.Hash); Withdrawals = block.Withdrawals; WithdrawalsRoot = block.Header.WithdrawalsRoot; - ValidatorExits = block.ValidatorExits; - ValidatorExitsRoot = block.Header.ValidatorExitsRoot; - Deposits = block.Deposits; - DepositsRoot = block.Header.DepositsRoot; + Requests = block.Requests; + RequestsRoot = block.Header.RequestsRoot; } public Address Author { get; set; } @@ -145,14 +143,8 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Hash256? ParentBeaconBlockRoot { get; set; } - public IEnumerable? Deposits { get; set; } + public IEnumerable? Requests { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public Hash256? DepositsRoot { get; set; } - - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IEnumerable? ValidatorExits { get; set; } - - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public Hash256? ValidatorExitsRoot { get; set; } + public Hash256? RequestsRoot { get; set; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs new file mode 100644 index 00000000000..ec5feff48ac --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -0,0 +1,158 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Threading.Tasks; +using FluentAssertions; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Test.Builders; +using Nethermind.Int256; +using Nethermind.JsonRpc; +using Nethermind.JsonRpc.Test; +using Nethermind.Merge.Plugin.Data; +using Nethermind.Specs.Forks; +using NUnit.Framework; + +namespace Nethermind.Merge.Plugin.Test; + +public partial class EngineModuleTests +{ + [TestCase( + "0x1c53bdbf457025f80c6971a9cf50986974eed02f0a9acaeeb49cafef10efd133", + "0x6d8a107ccab7a785de89f58db49064ee091df5d2b6306fe55db666e75a0e9f68", + "0x03e662d795ee2234c492ca4a08de03b1d7e3e0297af81a76582e16de75cdfc51", + "0xabd41416f2618ad0")] + public virtual async Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, + string stateRoot, string payloadId) + { + using MergeTestBlockchain chain = + await CreateBlockchain(Prague.Instance, new MergeConfig { TerminalTotalDifficulty = "0" }); + IEngineRpcModule rpc = CreateEngineModule(chain); + Hash256 startingHead = chain.BlockTree.HeadHash; + Hash256 prevRandao = Keccak.Zero; + Address feeRecipient = TestItem.AddressC; + ulong timestamp = Timestamper.UnixTime.Seconds; + var fcuState = new + { + headBlockHash = startingHead.ToString(), + safeBlockHash = startingHead.ToString(), + finalizedBlockHash = Keccak.Zero.ToString() + }; + Withdrawal[] withdrawals = new[] + { + new Withdrawal { Index = 1, AmountInGwei = 3, Address = TestItem.AddressB, ValidatorIndex = 2 } + }; + var payloadAttrs = new + { + timestamp = timestamp.ToHexString(true), + prevRandao = prevRandao.ToString(), + suggestedFeeRecipient = feeRecipient.ToString(), + withdrawals + }; + string?[] @params = new string?[] + { + chain.JsonSerializer.Serialize(fcuState), chain.JsonSerializer.Serialize(payloadAttrs) + }; + string expectedPayloadId = payloadId; + + string response = await RpcTest.TestSerializedRequest(rpc, "engine_forkchoiceUpdatedV3", @params!); + JsonRpcSuccessResponse? successResponse = chain.JsonSerializer.Deserialize(response); + + successResponse.Should().NotBeNull(); + response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse + { + Id = successResponse.Id, + Result = new ForkchoiceUpdatedV1Result + { + PayloadId = expectedPayloadId, + PayloadStatus = new PayloadStatusV1 + { + LatestValidHash = new(latestValidHash), + Status = PayloadStatus.Valid, + ValidationError = null + } + } + })); + + Hash256 expectedBlockHash = new(blockHash); + Block block = new( + new( + startingHead, + Keccak.OfAnEmptySequenceRlp, + feeRecipient, + UInt256.Zero, + 1, + chain.BlockTree.Head!.GasLimit, + timestamp, + Bytes.FromHexString("0x4e65746865726d696e64") // Nethermind + ) + { + BaseFeePerGas = 0, + Bloom = Bloom.Empty, + GasUsed = 0, + Hash = expectedBlockHash, + MixHash = prevRandao, + ReceiptsRoot = chain.BlockTree.Head!.ReceiptsRoot!, + StateRoot = new(stateRoot), + }, + Array.Empty(), + Array.Empty(), + withdrawals); + GetPayloadV2Result expectedPayload = new(block, UInt256.Zero); + + response = await RpcTest.TestSerializedRequest(rpc, "engine_getPayloadV4", expectedPayloadId); + successResponse = chain.JsonSerializer.Deserialize(response); + + successResponse.Should().NotBeNull(); + response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse + { + Id = successResponse.Id, + Result = expectedPayload + })); + + response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV4", + chain.JsonSerializer.Serialize(new ExecutionPayload(block))); + successResponse = chain.JsonSerializer.Deserialize(response); + + successResponse.Should().NotBeNull(); + response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse + { + Id = successResponse.Id, + Result = new PayloadStatusV1 + { + LatestValidHash = expectedBlockHash, + Status = PayloadStatus.Valid, + ValidationError = null + } + })); + + fcuState = new + { + headBlockHash = expectedBlockHash.ToString(true), + safeBlockHash = expectedBlockHash.ToString(true), + finalizedBlockHash = startingHead.ToString(true) + }; + @params = new[] { chain.JsonSerializer.Serialize(fcuState), null }; + + response = await RpcTest.TestSerializedRequest(rpc, "engine_forkchoiceUpdatedV3", @params!); + successResponse = chain.JsonSerializer.Deserialize(response); + + successResponse.Should().NotBeNull(); + response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse + { + Id = successResponse.Id, + Result = new ForkchoiceUpdatedV1Result + { + PayloadId = null, + PayloadStatus = new PayloadStatusV1 + { + LatestValidHash = expectedBlockHash, + Status = PayloadStatus.Valid, + ValidationError = null + } + } + })); + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index e115a2986ea..2674cf81b80 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -163,7 +163,7 @@ public virtual bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nul WithdrawalsRoot = Withdrawals is null ? null : new WithdrawalTrie(Withdrawals).RootHash, }; - block = new(header, transactions, Array.Empty(), Withdrawals, Deposits, ValidatorExits); + block = new(header, transactions, Array.Empty(), Withdrawals, Deposits); return true; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index 31b49976647..ee0f5d0e3d9 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -19,8 +19,9 @@ public class ExecutionPayloadV4 : ExecutionPayloadV3 public ExecutionPayloadV4(Block block) : base(block) { - Deposits = block.Deposits; - ValidatorExits = block.ValidatorExits; + // ToDo + // Deposits = block.Requests; + // ValidatorExits = block.ValidatorExits; } public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = null) @@ -29,9 +30,8 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu { return false; } - - block!.Header.DepositsRoot = Deposits is null ? null : new DepositTrie(Deposits).RootHash; - block!.Header.ValidatorExitsRoot = ValidatorExits is null ? null : ValidatorExitsTrie.CalculateRoot(ValidatorExits); + // ToDo + // block!.Header.RequestsRoot = Deposits is null ? null : new RequestsTrie(Deposits).RootHash; return true; } @@ -40,7 +40,7 @@ public override bool ValidateFork(ISpecProvider specProvider) => && specProvider.GetSpec(BlockNumber, Timestamp).ValidatorExitsEnabled; /// - /// Gets or sets as defined in + /// Gets or sets as defined in /// EIP-6110. /// [JsonRequired] diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs index dfd12cc96ac..9a3f7c1ca30 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs @@ -159,7 +159,7 @@ public bool TrySetNextBlocks(int maxCount, BlockDownloadContext context) { Block? block = _blockTree.FindBlock(hashesToRequest[i], BlockTreeLookupOptions.None); if (block is null) return false; - BlockBody blockBody = new(block.Transactions, block.Uncles, block?.Withdrawals, block?.Deposits, block?.ValidatorExits); + BlockBody blockBody = new(block.Transactions, block.Uncles, block?.Withdrawals, block?.Requests); context.SetBody(i + offset, blockBody); } diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index 7ef301b3c0a..5d79feb6c39 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -59,10 +59,7 @@ private class BlockBodyDecoder : IRlpValueDecoder private readonly TxDecoder _txDecoder = new(); private readonly HeaderDecoder _headerDecoder = new(); private readonly WithdrawalDecoder _withdrawalDecoderDecoder = new(); - - private readonly DepositDecoder _depositDecoder = new(); - - private readonly WithdrawalRequestDecoder _validatorExitDecoder = new(); + private readonly ConsensusRequestDecoder _requestsDecoder = new(); public int GetLength(BlockBody item, RlpBehaviors rlpBehaviors) { @@ -109,8 +106,7 @@ private int GetWithdrawalsLength(Withdrawal[] withdrawals) Transaction[] transactions = ctx.DecodeArray(_txDecoder); BlockHeader[] uncles = ctx.DecodeArray(_headerDecoder); Withdrawal[]? withdrawals = null; - Deposit[]? deposits = null; - WithdrawalRequest[]? validatorExits = null; + ConsensusRequest[]? requests = null; if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) { withdrawals = ctx.DecodeArray(_withdrawalDecoderDecoder); @@ -118,15 +114,10 @@ private int GetWithdrawalsLength(Withdrawal[] withdrawals) if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) { - deposits = ctx.DecodeArray(_depositDecoder); - } - - if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) - { - validatorExits = ctx.DecodeArray(_validatorExitDecoder); + requests = ctx.DecodeArray(_requestsDecoder); } - return new BlockBody(transactions, uncles, withdrawals, deposits, validatorExits); + return new BlockBody(transactions, uncles, withdrawals, requests); } public void Serialize(RlpStream stream, BlockBody body) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index cef3371a740..c5dd79c2398 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -14,8 +14,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder private readonly HeaderDecoder _headerDecoder = new(); private readonly TxDecoder _txDecoder = new(); private readonly WithdrawalDecoder _withdrawalDecoder = new(); - private readonly DepositDecoder _depositDecoder = new(); - private readonly WithdrawalRequestDecoder _WithdrawalRequestDecoder = new(); + private readonly ConsensusRequestDecoder _consensusRequestsDecoder = new(); public Block? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -56,15 +55,14 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder rlpStream.Check(unclesCheck); List? withdrawals = DecodeWithdrawals(rlpStream, blockCheck); - List? deposits = DecodeDeposits(rlpStream, blockCheck); - List? validatorExits = DecodeValidatorExits(rlpStream, blockCheck); + List? requests = DecodeRequests(rlpStream, blockCheck); if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) { rlpStream.Check(blockCheck); } - return new(header, transactions, uncleHeaders, withdrawals, deposits, validatorExits); + return new(header, transactions, uncleHeaders, withdrawals, requests); } @@ -101,9 +99,9 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder return withdrawals; } - private List? DecodeDeposits(RlpStream rlpStream, int blockCheck) + private List? DecodeRequests(RlpStream rlpStream, int blockCheck) { - List? deposits = null; + List? requests = null; if (rlpStream.Position != blockCheck) { bool lengthWasRead = true; @@ -118,57 +116,24 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder if (lengthWasRead) { - int depositsLength = rlpStream.ReadSequenceLength(); - int depositsCheck = rlpStream.Position + depositsLength; - deposits = new(); + int requestsLength = rlpStream.ReadSequenceLength(); + int requestsCheck = rlpStream.Position + requestsLength; + requests = new(); - while (rlpStream.Position < depositsCheck) + while (rlpStream.Position < requestsCheck) { - deposits.Add(Rlp.Decode(rlpStream)); + requests.Add(Rlp.Decode(rlpStream)); } - rlpStream.Check(depositsCheck); + rlpStream.Check(requestsCheck); } } - return deposits; + return requests; } - private List? DecodeValidatorExits(RlpStream rlpStream, int blockCheck) - { - List? validatorExits = null; - if (rlpStream.Position != blockCheck) - { - bool lengthWasRead = true; - try - { - rlpStream.PeekNextRlpLength(); - } - catch - { - lengthWasRead = false; - } - if (lengthWasRead) - { - int validatorExistsLength = rlpStream.ReadSequenceLength(); - int validatorExistsCheck = rlpStream.Position + validatorExistsLength; - validatorExits = new(); - - while (rlpStream.Position < validatorExistsCheck) - { - validatorExits.Add(_WithdrawalRequestDecoder.Decode(rlpStream)); - } - - rlpStream.Check(validatorExistsCheck); - } - } - - return validatorExits; - } - - - private (int Total, int Txs, int Uncles, int? Withdrawals, int? Deposits, int? ValidatorExits) GetContentLength(Block item, RlpBehaviors rlpBehaviors) + private (int Total, int Txs, int Uncles, int? Withdrawals, int? Requests) GetContentLength(Block item, RlpBehaviors rlpBehaviors) { int contentLength = _headerDecoder.GetLength(item.Header, rlpBehaviors); @@ -187,40 +152,16 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder contentLength += Rlp.LengthOfSequence(withdrawalsLength.Value); } - int? depositsLength = null; - if (item.Deposits is not null) - { - depositsLength = GetDepositsLength(item, rlpBehaviors); - - if (depositsLength.HasValue) - contentLength += Rlp.LengthOfSequence(depositsLength.Value); - } - - int? validatorExitsLength = null; - if (item.ValidatorExits is not null) + int? consensusRequestsLength = null; + if (item.Requests is not null) { - validatorExitsLength = GetValidatorExitsLength(item, rlpBehaviors); - - if (validatorExitsLength is not null) - contentLength += Rlp.LengthOfSequence(validatorExitsLength.Value); - } - - return (contentLength, txLength, unclesLength, withdrawalsLength, depositsLength, validatorExitsLength); - } - - private int? GetValidatorExitsLength(Block item, RlpBehaviors rlpBehaviors) - { - if (item.ValidatorExits is null) - return null; - - int validatorExistsLength = 0; + consensusRequestsLength = GetConsensusRequestsLength(item, rlpBehaviors); - for (int i = 0, count = item.ValidatorExits.Length; i < count; i++) - { - validatorExistsLength += _WithdrawalRequestDecoder.GetLength(item.ValidatorExits[i], rlpBehaviors); + if (consensusRequestsLength.HasValue) + contentLength += Rlp.LengthOfSequence(consensusRequestsLength.Value); } - return validatorExistsLength; + return (contentLength, txLength, unclesLength, withdrawalsLength, consensusRequestsLength); } private int GetUnclesLength(Block item, RlpBehaviors rlpBehaviors) @@ -260,19 +201,19 @@ private int GetTxLength(Block item, RlpBehaviors rlpBehaviors) return withdrawalLength; } - private int? GetDepositsLength(Block item, RlpBehaviors rlpBehaviors) + private int? GetConsensusRequestsLength(Block item, RlpBehaviors rlpBehaviors) { - if (item.Deposits is null) + if (item.Requests is null) return null; - var depositsLength = 0; + var consensusRequestsLength = 0; - for (int i = 0, count = item.Deposits.Length; i < count; i++) + for (int i = 0, count = item.Requests.Length; i < count; i++) { - depositsLength += _depositDecoder.GetLength(item.Deposits[i], rlpBehaviors); + consensusRequestsLength += _consensusRequestsDecoder.GetLength(item.Requests[i], rlpBehaviors); } - return depositsLength; + return consensusRequestsLength; } public int GetLength(Block? item, RlpBehaviors rlpBehaviors) @@ -319,15 +260,14 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) decoderContext.Check(unclesCheck); List? withdrawals = DecodeWithdrawals(ref decoderContext, blockCheck); - List? deposits = DecodeDeposits(ref decoderContext, blockCheck); - List? validatorExits = DecodeValidatorExits(ref decoderContext, blockCheck); + List? requests = DecodeRequests(ref decoderContext, blockCheck); if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) { decoderContext.Check(blockCheck); } - return new(header, transactions, uncleHeaders, withdrawals, deposits, validatorExits); + return new(header, transactions, uncleHeaders, withdrawals, requests); } private List? DecodeWithdrawals(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) @@ -351,45 +291,25 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) return withdrawals; } - private List? DecodeDeposits(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) + private List? DecodeRequests(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) { - List? deposits = null; + List? requests = null; if (decoderContext.Position != blockCheck) { - int depositsLength = decoderContext.ReadSequenceLength(); - int depositsCheck = decoderContext.Position + depositsLength; - deposits = new(); + int requestsLength = decoderContext.ReadSequenceLength(); + int requestsCheck = decoderContext.Position + requestsLength; + requests = new(); - while (decoderContext.Position < depositsCheck) + while (decoderContext.Position < requestsCheck) { - deposits.Add(Rlp.Decode(ref decoderContext)); + requests.Add(Rlp.Decode(ref decoderContext)); } - decoderContext.Check(depositsCheck); + decoderContext.Check(requestsCheck); } - return deposits; - } - private List? DecodeValidatorExits(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) - { - List? validatorExits = null; - - if (decoderContext.Position != blockCheck) - { - int validatorExitLength = decoderContext.ReadSequenceLength(); - int validatorExitsCheck = decoderContext.Position + validatorExitLength; - validatorExits = new(); - - while (decoderContext.Position < validatorExitsCheck) - { - validatorExits.Add(_WithdrawalRequestDecoder.Decode(ref decoderContext)); - } - - decoderContext.Check(validatorExitsCheck); - } - - return validatorExits; + return requests; } public Rlp Encode(Block? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -412,7 +332,7 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl return; } - (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength, int? depositsLength, int? validatorExitsLength) = GetContentLength(item, rlpBehaviors); + (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength, int? requestsLength) = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.Header); stream.StartSequence(txsLength); @@ -437,23 +357,13 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl } } - if (depositsLength.HasValue) - { - stream.StartSequence(depositsLength.Value); - - for (int i = 0; i < item.Deposits.Length; i++) - { - stream.Encode(item.Deposits[i]); - } - } - - if (validatorExitsLength.HasValue) + if (requestsLength.HasValue) { - stream.StartSequence(validatorExitsLength.Value); + stream.StartSequence(requestsLength.Value); - for (int i = 0; i < item.ValidatorExits!.Length; i++) + for (int i = 0; i < item.Requests.Length; i++) { - _WithdrawalRequestDecoder.Encode(stream, item.ValidatorExits[i]); + stream.Encode(item.Requests[i]); } } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index 2cf9c91fc84..2f5b7b87778 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -92,12 +92,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder= 5 && decoderContext.Position != headerCheck) { - blockHeader.DepositsRoot = decoderContext.DecodeKeccak(); - } - - if (itemsRemaining == 6 && decoderContext.Position != headerCheck) - { - blockHeader.ValidatorExitsRoot = decoderContext.DecodeKeccak(); + blockHeader.RequestsRoot = decoderContext.DecodeKeccak(); } } @@ -189,12 +184,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder= 5 && rlpStream.Position != headerCheck) { - blockHeader.DepositsRoot = rlpStream.DecodeKeccak(); - } - - if (itemsRemaining == 6 && rlpStream.Position != headerCheck) - { - blockHeader.ValidatorExitsRoot = rlpStream.DecodeKeccak(); + blockHeader.RequestsRoot = rlpStream.DecodeKeccak(); } } @@ -266,14 +256,9 @@ public void Encode(RlpStream rlpStream, BlockHeader? header, RlpBehaviors rlpBeh rlpStream.Encode(header.ParentBeaconBlockRoot); } - if (header.DepositsRoot is not null) - { - rlpStream.Encode(header.DepositsRoot); - } - - if (header.ValidatorExitsRoot is not null) + if (header.RequestsRoot is not null) { - rlpStream.Encode(header.ValidatorExitsRoot); + rlpStream.Encode(header.RequestsRoot); } } @@ -317,8 +302,7 @@ private static int GetContentLength(BlockHeader? item, RlpBehaviors rlpBehaviors + (item.ParentBeaconBlockRoot is null ? 0 : Rlp.LengthOfKeccakRlp) + (item.BlobGasUsed is null ? 0 : Rlp.LengthOf(item.BlobGasUsed.Value)) + (item.ExcessBlobGas is null ? 0 : Rlp.LengthOf(item.ExcessBlobGas.Value)) - + (item.DepositsRoot is null ? 0 : Rlp.LengthOf(item.DepositsRoot)) - + (item.ValidatorExitsRoot is null ? 0 : Rlp.LengthOf(item.ValidatorExitsRoot)); + + (item.RequestsRoot is null ? 0 : Rlp.LengthOf(item.RequestsRoot)); if (notForSealing) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs index f4bc9bee14f..23bea01afa1 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs @@ -28,8 +28,7 @@ public class RlpStream private static readonly TxDecoder _txDecoder = new(); private static readonly ReceiptMessageDecoder _receiptDecoder = new(); private static readonly WithdrawalDecoder _withdrawalDecoder = new(); - private static readonly DepositDecoder _depositDecoder = new(); - private static readonly WithdrawalRequestDecoder _WithdrawalRequestDecoder = new(); + private static readonly ConsensusRequestDecoder _requestsDecoder = new(); private static readonly LogEntryDecoder _logEntryDecoder = LogEntryDecoder.Instance; private readonly CappedArray _data; @@ -79,8 +78,7 @@ public void Encode(TxReceipt value) } public void Encode(Withdrawal value) => _withdrawalDecoder.Encode(this, value); - public void Encode(Deposit value) => _depositDecoder.Encode(this, value); - public void Encode(WithdrawalRequest value) => _WithdrawalRequestDecoder.Encode(this, value); + public void Encode(ConsensusRequest value) => _requestsDecoder.Encode(this, value); public void Encode(LogEntry value) { diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 3379963ecea..68b22246880 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -414,15 +414,12 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.BaseFeePerGas = baseFee; bool withdrawalsEnabled = chainSpecJson.Params.Eip4895TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4895TransitionTimestamp; bool depositsEnabled = chainSpecJson.Params.Eip6110TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip6110TransitionTimestamp; - bool validatorExitsEnabled = chainSpecJson.Params.Eip7002TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip7002TransitionTimestamp; + bool withdrawalRequestsEnabled = chainSpecJson.Params.Eip7002TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip7002TransitionTimestamp; if (withdrawalsEnabled) genesisHeader.WithdrawalsRoot = Keccak.EmptyTreeHash; - if (depositsEnabled) - genesisHeader.DepositsRoot = Keccak.EmptyTreeHash; - - if (validatorExitsEnabled) - genesisHeader.ValidatorExitsRoot = Keccak.EmptyTreeHash; + if (depositsEnabled || withdrawalRequestsEnabled) + genesisHeader.RequestsRoot = Keccak.EmptyTreeHash; ; bool isEip4844Enabled = chainSpecJson.Params.Eip4844TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4844TransitionTimestamp; if (isEip4844Enabled) @@ -438,10 +435,10 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec } bool isEip7002Enabled = chainSpecJson.Params.Eip7002TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip7002TransitionTimestamp; - - if (isEip7002Enabled) + bool isEip6110Enabled = chainSpecJson.Params.Eip6110TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip6110TransitionTimestamp; + if (isEip6110Enabled || isEip7002Enabled) { - genesisHeader.ValidatorExitsRoot = Keccak.EmptyTreeHash; + genesisHeader.ReceiptsRoot = Keccak.EmptyTreeHash; } genesisHeader.AuRaStep = step; @@ -453,8 +450,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec Array.Empty(), Array.Empty(), Array.Empty(), - depositsEnabled ? Array.Empty() : null, - validatorExitsEnabled ? Array.Empty() : null); + depositsEnabled ? Array.Empty() : null); else { chainSpec.Genesis = new Block(genesisHeader); diff --git a/src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs similarity index 86% rename from src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs rename to src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs index 14cd4b49a6c..b4f77b0fd18 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/17_Prague.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs @@ -16,6 +16,7 @@ protected Prague() Name = "Prague"; IsEip6110Enabled = true; IsEip7002Enabled = true; + Eip7002ContractAddress = Eip7002Constants.WithdrawalRequestPredeployAddress; } public new static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Prague()); diff --git a/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs b/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs deleted file mode 100644 index 185cdf694ee..00000000000 --- a/src/Nethermind/Nethermind.State/Proofs/DepositTrie.cs +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Serialization.Rlp; -using Nethermind.State.Trie; - -namespace Nethermind.State.Proofs; - -/// -/// Represents a Patricia trie built of a collection of . -/// -public class DepositTrie : PatriciaTrie -{ - private static readonly DepositDecoder _codec = new(); - - /// - /// The Deposits to build the trie of. - public DepositTrie(Deposit[] Deposits, bool canBuildProof = false) - : base(Deposits, canBuildProof) => ArgumentNullException.ThrowIfNull(Deposits); - - protected override void Initialize(Deposit[] Deposits) - { - var key = 0; - - foreach (var Deposit in Deposits) - { - Set(Rlp.Encode(key++).Bytes, _codec.Encode(Deposit).Bytes); - } - } -} diff --git a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs new file mode 100644 index 00000000000..59e0b248219 --- /dev/null +++ b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs @@ -0,0 +1,40 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core.Buffers; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.Serialization.Rlp; +using Nethermind.State.Trie; +using Nethermind.Trie; + +namespace Nethermind.State.Proofs; + +public class RequestsTrie : PatriciaTrie +{ + private static readonly ConsensusRequestDecoder _codec = new(); + + public RequestsTrie(ConsensusRequest[]? requests, bool canBuildProof = false, ICappedArrayPool? bufferPool = null) + : base(requests, canBuildProof, bufferPool) + { + ArgumentNullException.ThrowIfNull(requests); + } + + protected override void Initialize(ConsensusRequest[] requests) + { + var key = 0; + + foreach (ConsensusRequest exit in requests) + { + Set(Rlp.Encode(key++).Bytes, _codec.Encode(exit).Bytes); + } + } + + public static Hash256 CalculateRoot(ConsensusRequest[] requests) + { + using TrackingCappedArrayPool cappedArray = new(requests.Length * 4); + Hash256 rootHash = new RequestsTrie(requests, canBuildProof: false, bufferPool: cappedArray).RootHash; + return rootHash; + } +} diff --git a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs deleted file mode 100644 index 53113165a71..00000000000 --- a/src/Nethermind/Nethermind.State/Proofs/ValidatorExitsTrie.cs +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core.Buffers; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Crypto; -using Nethermind.Serialization.Rlp; -using Nethermind.State.Trie; -using Nethermind.Trie; - -namespace Nethermind.State.Proofs; - -public class ValidatorExitsTrie : PatriciaTrie -{ - private static readonly WithdrawalRequestDecoder _codec = new(); - - public ValidatorExitsTrie(WithdrawalRequest[]? validatorExits, bool canBuildProof, ICappedArrayPool? bufferPool = null) - : base(validatorExits, canBuildProof, bufferPool) - { - ArgumentNullException.ThrowIfNull(validatorExits); - } - - protected override void Initialize(WithdrawalRequest[] validatorExits) - { - var key = 0; - - foreach (WithdrawalRequest exit in validatorExits) - { - Set(Rlp.Encode(key++).Bytes, _codec.Encode(exit).Bytes); - } - } - - public static Hash256 CalculateRoot(WithdrawalRequest[] validatorExits) - { - using TrackingCappedArrayPool cappedArray = new(validatorExits.Length * 4); - Hash256 rootHash = new ValidatorExitsTrie(validatorExits, canBuildProof: false, bufferPool: cappedArray).RootHash; - return rootHash; - } -} From a88a9a1827ddf95c57a94fb0825900c7fc61e29c Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 23 Apr 2024 17:45:16 +0200 Subject: [PATCH 152/551] test for account access gas --- src/Nethermind/Nethermind.Crypto/Ecdsa.cs | 12 +++ .../Nethermind.Evm.Test/Eip3074Tests.cs | 99 +++++++++++++++---- .../Nethermind.Evm/VirtualMachine.cs | 14 +-- 3 files changed, 97 insertions(+), 28 deletions(-) diff --git a/src/Nethermind/Nethermind.Crypto/Ecdsa.cs b/src/Nethermind/Nethermind.Crypto/Ecdsa.cs index 1cb2ef22a22..f3b0b4db2f9 100644 --- a/src/Nethermind/Nethermind.Crypto/Ecdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/Ecdsa.cs @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using Nethermind.Core; +using System.Security.Cryptography; using Nethermind.Core.Crypto; namespace Nethermind.Crypto @@ -48,6 +50,16 @@ public Signature Sign(PrivateKey privateKey, Hash256 message) return signature; } + public PublicKey? TryRecoverPublicKey(ReadOnlySpan r, ReadOnlySpan s, byte v, Hash256 message) + { + if (v != 27 && v != 28) + { + return null; + } + Signature signature = new(r, s, v); + return RecoverPublicKey(signature, message); + } + public PublicKey? RecoverPublicKey(Signature signature, Hash256 message) { Span publicKey = stackalloc byte[65]; diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 9b2b1e84578..e5b31f0b4c8 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -25,6 +25,8 @@ public class Eip3074Tests : VirtualMachineTestsBase protected override ForkActivation Activation => MainnetSpecProvider.PragueActivation; protected override ulong Timestamp => MainnetSpecProvider.PragueBlockTimestamp; + protected override TestAllTracerWithOutput CreateTracer() => new() { IsTracingAccess = false }; + public static IEnumerable AuthCases() { yield return new object[] { TestItem.PrivateKeyB, TestItem.AddressB, 0x1 }; @@ -114,6 +116,52 @@ public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsZero(bool in Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); } + [TestCase(97, 3100 + 2600)] + [TestCase(160, 3103 + 2600)] + [TestCase(192, 3106 + 2600)] + [TestCase(193, 3109 + 2600)] + public void ExecuteAuth_AUTHExpandsMemory_AUTHGasCosts3100PlusMemoryExpansionAndColdAccountAccess(int authMemoryLength, int expectedGas) + { + var data = CreateSignedCommitMessage(TestItem.PrivateKeyF); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + .PushData(data[96..]) + .PushSingle(96) + .Op(Instruction.MSTORE) + + .PushSingle((UInt256)authMemoryLength) + .Op(Instruction.PUSH0) + .PushData(TestItem.AddressF) + .Done; + + var authCode = + code.Concat( + Prepare.EvmCode + .Op(Instruction.AUTH) + .Done + ).ToArray(); + + TestState.CreateAccount(TestItem.AddressC, 0); + TestState.InsertCode(TestItem.AddressC, Keccak.Compute(code), code, Spec); + + TestState.CreateAccount(TestItem.AddressD, 0); + TestState.InsertCode(TestItem.AddressD, Keccak.Compute(authCode), authCode, Spec); + + var resultNoAuth = Execute(code); + var resultWithAuth = Execute(authCode); + + Assert.That(resultWithAuth.GasSpent - resultNoAuth.GasSpent, Is.EqualTo(expectedGas)); + } + [Test] public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_SignerIsReturned() { @@ -280,13 +328,12 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft Assert.That(new Address(resultE.ToArray()), Is.EqualTo(TestItem.AddressD)); } - [TestCase(97, 3100)] - [TestCase(160, 3103)] - [TestCase(192, 3106)] - [TestCase(193, 3109)] - public void ExecuteAuth_AUTHDoesExpandMemory_AUTHCosts3100GasPlusMemoryExpansion(int authMemoryLength, int expectedGas) + [TestCase(1)] + public void ExecuteAUTHCALL_(int expectedCost) { - var data = CreateSignedCommitMessage(TestItem.PrivateKeyB); + var signer = TestItem.PrivateKeyF; + var authority = TestItem.AddressF; + var data = CreateSignedCommitMessage(signer); byte[] code = Prepare.EvmCode .PushData(data[..32]) @@ -298,34 +345,44 @@ public void ExecuteAuth_AUTHDoesExpandMemory_AUTHCosts3100GasPlusMemoryExpansion .PushData(data[64..96]) .PushSingle(64) .Op(Instruction.MSTORE) - .PushData(data[96..]) - .PushSingle(96) - .Op(Instruction.MSTORE) - .PushSingle((UInt256)authMemoryLength) + //AUTH params + .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) - .PushData(TestItem.AddressB) + .PushData(authority) + .Op(Instruction.AUTH) + + //Just throw away the result + .POP() + + //AUTHCALL params + .PushData(20) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.AddressC) + .PushData(1000000) .Done; - var authCode = - code.Concat( - Prepare.EvmCode - .Op(Instruction.AUTH) - .Done - ).ToArray(); + var codeWithAuthCall = code.Concat( + Prepare.EvmCode + .Op(Instruction.AUTHCALL) + .Done).ToArray(); TestState.CreateAccount(TestItem.AddressC, 0); TestState.InsertCode(TestItem.AddressC, Keccak.Compute(code), code, Spec); TestState.CreateAccount(TestItem.AddressD, 0); - TestState.InsertCode(TestItem.AddressD, Keccak.Compute(authCode), authCode, Spec); + TestState.InsertCode(TestItem.AddressD, Keccak.Compute(codeWithAuthCall), codeWithAuthCall, Spec); - var resultNoAuth = Execute(code); - var resultWithAuth = Execute(authCode); + var result = Execute(code); + var resultWithAuthCall = Execute(codeWithAuthCall); - Assert.That(resultWithAuth.GasSpent - resultNoAuth.GasSpent, Is.EqualTo(expectedGas)); + Assert.That(resultWithAuthCall.GasSpent - result.GasSpent, Is.EqualTo(expectedCost)); } + private byte[] CreateSignedCommitMessage(PrivateKey signer) { List msg = diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 5d772ec9ada..083db7b4f7d 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2124,16 +2124,16 @@ private CallResult ExecuteCode commit; //TODO bounds check - check GETH - var data = vmState.Memory.Load(in a, b); + ReadOnlyMemory memData = vmState.Memory.Load(in a, b); - var yParity = data.Span[0]; + byte yParity = memData.Span[0]; - Signature signature = new Signature(data[1..65].Span, yParity); + Signature signature = new Signature(memData[1..65].Span, yParity); - if (data.Length > 65) - commit = data[65..].Span; + if (memData.Length > 65) + commit = memData[65..].Span; else - commit = new ReadOnlySpan(); + commit = new ReadOnlySpan(); byte[] chainId = _chainId.PadLeft(32); byte[] authorityNonce = _state.GetNonce(authority).PaddedBytes(32); @@ -2155,10 +2155,10 @@ private CallResult ExecuteCode Date: Tue, 23 Apr 2024 19:46:46 +0200 Subject: [PATCH 153/551] fixed engine test and genesis loading --- .../Requests/ConsensusRequestsProcessor.cs | 11 ++++++----- .../Nethermind.Core.Test/Blockchain/TestBlockchain.cs | 6 ++++++ src/Nethermind/Nethermind.Core/Block.cs | 3 +++ src/Nethermind/Nethermind.Core/BlockBody.cs | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 794954c98c4..357fdd5e8d6 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -27,18 +27,19 @@ public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, T if (spec.IsEip6110Enabled == false && spec.IsEip7002Enabled == false) return; - List requests = []; + List requestsList = []; // Process deposits List? deposits = _depositsProcessor.ProcessDeposits(block, receipts, spec); if (deposits is { Count: > 0 }) - requests.AddRange(deposits); + requestsList.AddRange(deposits); WithdrawalRequest[]? withdrawalRequests = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state, block); if (withdrawalRequests is { Length: > 0 }) - requests.AddRange(withdrawalRequests); + requestsList.AddRange(withdrawalRequests); - Hash256 root = new RequestsTrie(requests.ToArray()).RootHash; - // block.Body.Requests = requests; ToDo think about it + ConsensusRequest[]? requests = requestsList.ToArray(); + Hash256 root = new RequestsTrie(requests).RootHash; + block.Body.Requests = requests; // ToDo think about it block.Header.RequestsRoot = root; } } diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 9131ce20ba1..b9a040eeb33 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -330,6 +330,12 @@ protected virtual Block GetGenesisBlock() genesisBlockBuilder.WithParentBeaconBlockRoot(Keccak.Zero); } + if (SpecProvider.GenesisSpec.IsEip6110Enabled || SpecProvider.GenesisSpec.IsEip7002Enabled) + { + genesisBlockBuilder.WithConsensusRequests(0); + } + + genesisBlockBuilder.WithStateRoot(State.StateRoot); return genesisBlockBuilder.TestObject; } diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index b2cbbf21247..c77e9c27c5c 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -115,6 +115,9 @@ public Transaction[] Transactions public Hash256? WithdrawalsRoot => Header.WithdrawalsRoot; // do not add setter here public Hash256? ParentBeaconBlockRoot => Header.ParentBeaconBlockRoot; // do not add setter here + public Hash256? RequestsRoot => Header.RequestsRoot; // do not add setter here + + public override string ToString() => ToString(Format.Short); public string ToString(Format format) => format switch diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 6a57e200e9e..0d7666001fe 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -32,7 +32,7 @@ public BlockBody() : this(null, null, null) { } public BlockHeader[] Uncles { get; } public Withdrawal[]? Withdrawals { get; } - public ConsensusRequest[]? Requests { get; } + public ConsensusRequest[]? Requests { get; set; } public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0 && (Requests?.Length ?? 0) == 0; } From fac85b7b0c6ec2120bfe6fcf86733ef079368f42 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 23 Apr 2024 20:01:31 +0200 Subject: [PATCH 154/551] working on engine tests --- .../Nethermind.Consensus/Producers/PayloadAttributes.cs | 5 ++--- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 9 +++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs index f247e4adee8..d565349875e 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs @@ -155,7 +155,7 @@ public virtual PayloadAttributesValidationResult Validate( apiVersion: apiVersion, actualVersion: this.GetVersion(), timestampVersion: specProvider.GetSpec(ForkActivation.TimestampOnly(Timestamp)) - .ExpectedEngineSpecVersion(), + .ExpectedPayloadAttributesVersion(), "PayloadAttributesV", out error); } @@ -172,10 +172,9 @@ public static int GetVersion(this PayloadAttributes executionPayload) => _ => EngineApiVersions.Paris }; - public static int ExpectedEngineSpecVersion(this IReleaseSpec spec) => + public static int ExpectedPayloadAttributesVersion(this IReleaseSpec spec) => spec switch { - { DepositsEnabled: true, ValidatorExitsEnabled: true } => EngineApiVersions.Prague, { IsEip4844Enabled: true } => EngineApiVersions.Cancun, { WithdrawalsEnabled: true } => EngineApiVersions.Shanghai, _ => EngineApiVersions.Paris diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index ec5feff48ac..f366696f794 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -20,10 +20,10 @@ namespace Nethermind.Merge.Plugin.Test; public partial class EngineModuleTests { [TestCase( - "0x1c53bdbf457025f80c6971a9cf50986974eed02f0a9acaeeb49cafef10efd133", + "0x948f67f47376af5d09cc39ec25a84c84774f14b2e80289064c2de73db33cc573", "0x6d8a107ccab7a785de89f58db49064ee091df5d2b6306fe55db666e75a0e9f68", "0x03e662d795ee2234c492ca4a08de03b1d7e3e0297af81a76582e16de75cdfc51", - "0xabd41416f2618ad0")] + "0x96b752d22831ad92")] public virtual async Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) { @@ -49,7 +49,8 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid timestamp = timestamp.ToHexString(true), prevRandao = prevRandao.ToString(), suggestedFeeRecipient = feeRecipient.ToString(), - withdrawals + withdrawals, + parentBeaconBLockRoot = Keccak.Zero }; string?[] @params = new string?[] { @@ -100,7 +101,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid Array.Empty(), Array.Empty(), withdrawals); - GetPayloadV2Result expectedPayload = new(block, UInt256.Zero); + GetPayloadV4Result expectedPayload = new(block, UInt256.Zero, new BlobsBundleV1(block)); response = await RpcTest.TestSerializedRequest(rpc, "engine_getPayloadV4", expectedPayloadId); successResponse = chain.JsonSerializer.Deserialize(response); From f20dd9604970c752ec62a1cb4d201a8610ed6c8b Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 23 Apr 2024 22:22:25 +0200 Subject: [PATCH 155/551] Test authorized is unset if invalid sig --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 57 +++++++++++++++++-- .../Nethermind.Evm/VirtualMachine.cs | 3 + 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index e5b31f0b4c8..0892f3c6aee 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -116,11 +116,58 @@ public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsZero(bool in Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); } - [TestCase(97, 3100 + 2600)] - [TestCase(160, 3103 + 2600)] - [TestCase(192, 3106 + 2600)] - [TestCase(193, 3109 + 2600)] - public void ExecuteAuth_AUTHExpandsMemory_AUTHGasCosts3100PlusMemoryExpansionAndColdAccountAccess(int authMemoryLength, int expectedGas) + [Test] + public void ExecuteAuth_InvalidAuthorityAfterValid_CorrectErrorIsReturned() + { + var signer = TestItem.PrivateKeyB; + var authority = TestItem.AddressB; + + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(authority) + .Op(Instruction.AUTH) + + //Wrong authority + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(TestItem.AddressF) + .Op(Instruction.AUTH) + + .PushData(20) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.AddressC) + .PushData(1000000) + .Op(Instruction.AUTHCALL) + .Done; + + var result = Execute(code); + + Assert.That(result.StatusCode, Is.EqualTo(0)); + Assert.That(result.Error, Is.EqualTo(EvmExceptionType.AuthorizedNotSet.ToString())); + } + + [TestCase(97, GasCostOf.Auth + GasCostOf.ColdAccountAccess)] + [TestCase(160, GasCostOf.Auth + GasCostOf.Memory + GasCostOf.ColdAccountAccess)] + [TestCase(192, GasCostOf.Auth + GasCostOf.Memory * 2 + GasCostOf.ColdAccountAccess)] + [TestCase(193, GasCostOf.Auth + GasCostOf.Memory * 3 + GasCostOf.ColdAccountAccess)] + public void ExecuteAuth_AUTHExpandsMemory_AUTHGasCosts3100PlusMemoryExpansionAndColdAccountAccess(int authMemoryLength, long expectedGas) { var data = CreateSignedCommitMessage(TestItem.PrivateKeyF); diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 083db7b4f7d..b6fea78c286 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -142,6 +142,8 @@ internal readonly ref struct CallResult public static CallResult StackOverflowException => new(EvmExceptionType.StackOverflow); // TODO: use these to avoid CALL POP attacks public static CallResult StackUnderflowException => new(EvmExceptionType.StackUnderflow); // TODO: use these to avoid CALL POP attacks public static CallResult InvalidCodeException => new(EvmExceptionType.InvalidCode); + public static CallResult AuthorizedNotSet => new(EvmExceptionType.AuthorizedNotSet); + public static CallResult Empty => new(Array.Empty(), null); public CallResult(EvmState stateToExecute) @@ -2863,6 +2865,7 @@ private CallResult GetFailureReturn(long gasAvailable, Evm EvmExceptionType.StackUnderflow => CallResult.StackUnderflowException, EvmExceptionType.InvalidJumpDestination => CallResult.InvalidJumpDestination, EvmExceptionType.AccessViolation => CallResult.AccessViolationException, + EvmExceptionType.AuthorizedNotSet => CallResult.AuthorizedNotSet, _ => throw new ArgumentOutOfRangeException(nameof(exceptionType), exceptionType, "") }; } From 9813ba5358071ce3d155759b5a28e9c564a8818d Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 23 Apr 2024 23:58:40 +0200 Subject: [PATCH 156/551] proper behavior for extra bytes --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 46 +++++++++++++++++-- .../Nethermind.Evm/VirtualMachine.cs | 42 +++++++++++------ 2 files changed, 71 insertions(+), 17 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 0892f3c6aee..1d6749ab140 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -163,11 +163,53 @@ public void ExecuteAuth_InvalidAuthorityAfterValid_CorrectErrorIsReturned() Assert.That(result.Error, Is.EqualTo(EvmExceptionType.AuthorizedNotSet.ToString())); } + [TestCase(66, 1)] + [TestCase(65, 1)] + [TestCase(256, 1)] + [TestCase(64, 0)] + [TestCase(0, 0)] + public void ExecuteAuth_ParamLengthIsLessOrGreaterThanValidSignature_ReturnsExpected(int paramLength, int expected) + { + var signer = TestItem.PrivateKeyB; + var authority = TestItem.AddressB; + + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)paramLength) + .Op(Instruction.PUSH0) + .PushData(authority) + .Op(Instruction.AUTH) + + //Return the result of AUTH + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE8) + .PushSingle(1) + .Op(Instruction.PUSH0) + .Op(Instruction.RETURN) + .Done; + + var result = Execute(code); + + Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); + } + [TestCase(97, GasCostOf.Auth + GasCostOf.ColdAccountAccess)] [TestCase(160, GasCostOf.Auth + GasCostOf.Memory + GasCostOf.ColdAccountAccess)] [TestCase(192, GasCostOf.Auth + GasCostOf.Memory * 2 + GasCostOf.ColdAccountAccess)] [TestCase(193, GasCostOf.Auth + GasCostOf.Memory * 3 + GasCostOf.ColdAccountAccess)] - public void ExecuteAuth_AUTHExpandsMemory_AUTHGasCosts3100PlusMemoryExpansionAndColdAccountAccess(int authMemoryLength, long expectedGas) + public void ExecuteAuth_AUTHExpandsMemory_GasCostIsAUTHPlusMemoryExpansionAndColdAccountAccess(int authMemoryLength, long expectedGas) { var data = CreateSignedCommitMessage(TestItem.PrivateKeyF); @@ -429,7 +471,6 @@ public void ExecuteAUTHCALL_(int expectedCost) Assert.That(resultWithAuthCall.GasSpent - result.GasSpent, Is.EqualTo(expectedCost)); } - private byte[] CreateSignedCommitMessage(PrivateKey signer) { List msg = @@ -441,7 +482,6 @@ .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), ]; byte[] commit = new byte[32]; - commit[0] = 0xff; msg.AddRange(commit); Hash256 msgDigest = Keccak.Compute(msg.ToArray()); diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index b6fea78c286..8fab2285e21 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -40,6 +40,7 @@ namespace Nethermind.Evm; using Int256; using Nethermind.Crypto; +using Newtonsoft.Json.Linq; public class VirtualMachine : IVirtualMachine { @@ -2123,26 +2124,39 @@ private CallResult ExecuteCode commit; + ReadOnlySpan memData = vmState.Memory.Load(in a, b).Span; - //TODO bounds check - check GETH - ReadOnlyMemory memData = vmState.Memory.Load(in a, b); - - byte yParity = memData.Span[0]; - - Signature signature = new Signature(memData[1..65].Span, yParity); + byte yParity = 0; + Span sigData = stackalloc byte[64]; + Span commit = stackalloc byte[32]; + //Skip init flag is active so we have to iterate all data + for (int i = 0; i < 97; i++) + { + byte data = 0; + if (i < b) + data = memData[i]; + switch (i) + { + case 0: + yParity = data; + break; + case >= 1 and <= 64: + sigData[i - 1] = data; + break; + default: + commit[i - 65] = data; + break; + } + } - if (memData.Length > 65) - commit = memData[65..].Span; - else - commit = new ReadOnlySpan(); + Signature signature = new Signature(sigData, yParity); byte[] chainId = _chainId.PadLeft(32); byte[] authorityNonce = _state.GetNonce(authority).PaddedBytes(32); //TODO is ExecutingAccount correct when DELEGATECALL and CALLCODE? byte[] invokerAddress = vmState.Env.ExecutingAccount.Bytes.PadLeft(32); - Span msg = stackalloc byte[1 + 32 + 32 + 32 + commit.Length]; + Span msg = stackalloc byte[1 + 32 + 32 + 32 + 32]; msg[0] = Eip3074Constants.AuthMagic; for (int i = 0; i < 32; i++) { @@ -2159,9 +2173,9 @@ private CallResult ExecuteCode Date: Wed, 24 Apr 2024 00:26:27 +0200 Subject: [PATCH 157/551] 6700 extra gas if authcall has value --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 8fab2285e21..397b97a0764 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2341,7 +2341,10 @@ private EvmExceptionType InstructionCall( if (!transferValue.IsZero) { - gasExtra += GasCostOf.CallValue; + if (instruction == Instruction.AUTHCALL) + gasExtra += GasCostOf.CallValue - GasCostOf.CallStipend; + else + gasExtra += GasCostOf.CallValue; } if (!spec.ClearEmptyAccountWhenTouched && !_state.AccountExists(target)) From d67038c888a3273e9978b7f2236f5d3f6a5c54bb Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 24 Apr 2024 12:28:34 +0200 Subject: [PATCH 158/551] separate method for AUTH --- .../Nethermind.Evm/VirtualMachine.cs | 166 +++++++++--------- 1 file changed, 87 insertions(+), 79 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 397b97a0764..71f69577796 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2106,85 +2106,8 @@ private CallResult ExecuteCode memData = vmState.Memory.Load(in a, b).Span; - - byte yParity = 0; - Span sigData = stackalloc byte[64]; - Span commit = stackalloc byte[32]; - //Skip init flag is active so we have to iterate all data - for (int i = 0; i < 97; i++) - { - byte data = 0; - if (i < b) - data = memData[i]; - switch (i) - { - case 0: - yParity = data; - break; - case >= 1 and <= 64: - sigData[i - 1] = data; - break; - default: - commit[i - 65] = data; - break; - } - } - - Signature signature = new Signature(sigData, yParity); - - byte[] chainId = _chainId.PadLeft(32); - byte[] authorityNonce = _state.GetNonce(authority).PaddedBytes(32); - //TODO is ExecutingAccount correct when DELEGATECALL and CALLCODE? - byte[] invokerAddress = vmState.Env.ExecutingAccount.Bytes.PadLeft(32); - - Span msg = stackalloc byte[1 + 32 + 32 + 32 + 32]; - msg[0] = Eip3074Constants.AuthMagic; - for (int i = 0; i < 32; i++) - { - int shift = i + 1; - msg[shift] = chainId[i]; - msg[shift + 32] = authorityNonce[i]; - msg[shift + 64] = invokerAddress[i]; - if (i < commit.Length) - { - msg[shift + 96] = commit[i]; - } - } - - Hash256 digest = Keccak.Compute(msg); - - //TODO handle exception will crash the process - PublicKey publicKey = _ecdsa.RecoverPublicKey(signature, digest); - - if (publicKey != null && publicKey.Address == authority) - { - stack.PushUInt256(1); - vmState.Authorized = authority; - } - else - { - stack.PushUInt256(0); - vmState.Authorized = null; - } + exceptionType = InstructionAuth(vmState, ref stack, ref gasAvailable, spec); + if (exceptionType != EvmExceptionType.None) goto ReturnFailure; break; } @@ -2261,6 +2184,91 @@ private CallResult ExecuteCode(gasAvailable, exceptionType); } + [SkipLocalsInit] + private EvmExceptionType InstructionAuth(EvmState vmState, ref EvmStack stack, ref long gasAvailable, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing + { + if (!spec.AuthCallsEnabled) return EvmExceptionType.BadInstruction; + Address authority = stack.PopAddress(); + + if (authority is null) return EvmExceptionType.StackUnderflow; + + UInt256 offset; + UInt256 length; + if (!stack.PopUInt256(out offset)) return EvmExceptionType.StackUnderflow; + if (!stack.PopUInt256(out length)) return EvmExceptionType.StackUnderflow; + + gasAvailable -= GasCostOf.Auth; + + if (!UpdateMemoryCost(vmState, ref gasAvailable, offset, length)) + return EvmExceptionType.OutOfGas; + + if (!ChargeAccountAccessGas(ref gasAvailable, vmState, authority, spec)) + return EvmExceptionType.OutOfGas; + + ReadOnlySpan memData = vmState.Memory.Load(in offset, length).Span; + + byte yParity = 0; + Span sigData = stackalloc byte[64]; + Span commit = stackalloc byte[32]; + //SkipLocalsInit flag is active so we have to iterate all data + for (int i = 0; i < 97; i++) + { + byte data = 0; + if (i < length) + data = memData[i]; + switch (i) + { + case 0: + yParity = data; + break; + case >= 1 and <= 64: + sigData[i - 1] = data; + break; + default: + commit[i - 65] = data; + break; + } + } + + Signature signature = new Signature(sigData, yParity); + + byte[] chainId = _chainId.PadLeft(32); + byte[] authorityNonce = _state.GetNonce(authority).PaddedBytes(32); + //TODO is ExecutingAccount correct when DELEGATECALL and CALLCODE? + byte[] invokerAddress = vmState.Env.ExecutingAccount.Bytes.PadLeft(32); + + Span msg = stackalloc byte[1 + 32 + 32 + 32 + 32]; + msg[0] = Eip3074Constants.AuthMagic; + for (int i = 0; i < 32; i++) + { + int shift = i + 1; + msg[shift] = chainId[i]; + msg[shift + 32] = authorityNonce[i]; + msg[shift + 64] = invokerAddress[i]; + if (i < commit.Length) + { + msg[shift + 96] = commit[i]; + } + } + + Hash256 digest = Keccak.Compute(msg); + + //TODO handle exception will crash the process + PublicKey publicKey = _ecdsa.RecoverPublicKey(signature, digest); + + if (publicKey != null && publicKey.Address == authority) + { + stack.PushUInt256(1); + vmState.Authorized = authority; + } + else + { + stack.PushUInt256(0); + vmState.Authorized = null; + } + return EvmExceptionType.None; + } + [SkipLocalsInit] [MethodImpl(MethodImplOptions.NoInlining)] private void InstructionExtCodeSize(Address address, ref EvmStack stack, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing From 1381e5425d5a10b6dab4afbe37852ac123dc91b6 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Wed, 24 Apr 2024 13:08:45 +0200 Subject: [PATCH 159/551] simplify GetCallExecutionType --- .../Nethermind.Evm/VirtualMachine.cs | 40 +++++-------------- 1 file changed, 10 insertions(+), 30 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 71f69577796..5090926a96a 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2968,34 +2968,14 @@ private void EndInstructionTraceError(long gasAvailable, EvmExceptionType evmExc _txTracer.ReportOperationError(evmExceptionType); } - private static ExecutionType GetCallExecutionType(Instruction instruction, bool isPostMerge = false) - { - ExecutionType executionType; - if (instruction == Instruction.CALL) - { - executionType = ExecutionType.CALL; - } - else if (instruction == Instruction.DELEGATECALL) - { - executionType = ExecutionType.DELEGATECALL; - } - else if (instruction == Instruction.STATICCALL) - { - executionType = ExecutionType.STATICCALL; - } - else if (instruction == Instruction.CALLCODE) - { - executionType = ExecutionType.CALLCODE; - } - else if (instruction == Instruction.AUTHCALL) - { - executionType = ExecutionType.AUTHCALL; - } - else - { - throw new NotSupportedException($"Execution type is undefined for {instruction.GetName(isPostMerge)}"); - } - - return executionType; - } + private static ExecutionType GetCallExecutionType(Instruction instruction, bool isPostMerge = false) => + instruction switch + { + Instruction.CALL => ExecutionType.CALL, + Instruction.DELEGATECALL => ExecutionType.DELEGATECALL, + Instruction.STATICCALL => ExecutionType.STATICCALL, + Instruction.CALLCODE => ExecutionType.CALLCODE, + Instruction.AUTHCALL => ExecutionType.AUTHCALL, + _ => throw new NotSupportedException($"Execution type is undefined for {instruction.GetName(isPostMerge)}") + }; } From e41e2b243769df968eb83e65a2b120891d995ab1 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Wed, 24 Apr 2024 13:10:04 +0200 Subject: [PATCH 160/551] Remove phantom fork timestamps --- src/Nethermind/Chains/foundation.json | 2 -- src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Nethermind/Chains/foundation.json b/src/Nethermind/Chains/foundation.json index ef6d2106c1b..674e828bc20 100644 --- a/src/Nethermind/Chains/foundation.json +++ b/src/Nethermind/Chains/foundation.json @@ -190,8 +190,6 @@ "eip4844TransitionTimestamp": "0x65F1B057", "eip5656TransitionTimestamp": "0x65F1B057", "eip6780TransitionTimestamp": "0x65F1B057", - //TODO correct this! - "eip3074TransitionTimestamp": "0x65F1B057", "terminalTotalDifficulty": "C70D808A128D7380000" }, "genesis": { diff --git a/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs b/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs index 486f259cfcc..a686ef0c269 100644 --- a/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs @@ -27,7 +27,7 @@ public class MainnetSpecProvider : ISpecProvider public const ulong ShanghaiBlockTimestamp = 0x64373057; public const ulong CancunBlockTimestamp = 0x65F1B057; //TODO correct this timestamp! - public const ulong PragueBlockTimestamp = 0x674C6BE0; + public const ulong PragueBlockTimestamp = ulong.MaxValue - 2; public const ulong OsakaBlockTimestamp = ulong.MaxValue - 1; public IReleaseSpec GetSpec(ForkActivation forkActivation) => From 65f3d5229ebe7b1c771daa2b8a329ed03cf88e48 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Wed, 24 Apr 2024 13:11:51 +0200 Subject: [PATCH 161/551] refactors --- .../Nethermind.Evm/VirtualMachine.cs | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 5090926a96a..ac83b929a92 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2256,7 +2256,7 @@ private EvmExceptionType InstructionAuth(EvmState vmState, //TODO handle exception will crash the process PublicKey publicKey = _ecdsa.RecoverPublicKey(signature, digest); - if (publicKey != null && publicKey.Address == authority) + if (publicKey is not null && publicKey.Address == authority) { stack.PushUInt256(1); vmState.Authorized = authority; @@ -2293,7 +2293,7 @@ private EvmExceptionType InstructionCall( instruction == Instruction.STATICCALL && !spec.StaticCallEnabled || instruction == Instruction.AUTHCALL && !spec.AuthCallsEnabled) return EvmExceptionType.BadInstruction; - if (instruction == Instruction.AUTHCALL && vmState.Authorized == null) + if (instruction == Instruction.AUTHCALL && vmState.Authorized is null) return EvmExceptionType.AuthorizedNotSet; if (!stack.PopUInt256(out UInt256 gasLimit)) return EvmExceptionType.StackUnderflow; @@ -2324,15 +2324,14 @@ private EvmExceptionType InstructionCall( if (vmState.IsStatic && !transferValue.IsZero && instruction != Instruction.CALLCODE) return EvmExceptionType.StaticCallViolation; - Address caller; - if (instruction == Instruction.DELEGATECALL) - caller = env.Caller; - else if (instruction == Instruction.AUTHCALL) - caller = vmState.Authorized; - else - caller = env.ExecutingAccount; + Address caller = instruction switch + { + Instruction.DELEGATECALL => env.Caller, + Instruction.AUTHCALL => vmState.Authorized, + _ => env.ExecutingAccount + }; - Address target = instruction == Instruction.CALL || instruction == Instruction.STATICCALL + Address target = instruction is Instruction.CALL or Instruction.STATICCALL ? codeSource : env.ExecutingAccount; @@ -2349,10 +2348,7 @@ private EvmExceptionType InstructionCall( if (!transferValue.IsZero) { - if (instruction == Instruction.AUTHCALL) - gasExtra += GasCostOf.CallValue - GasCostOf.CallStipend; - else - gasExtra += GasCostOf.CallValue; + gasExtra += instruction == Instruction.AUTHCALL ? GasCostOf.CallValue - GasCostOf.CallStipend : GasCostOf.CallValue; } if (!spec.ClearEmptyAccountWhenTouched && !_state.AccountExists(target)) From 8820487dcae412f0659bea985375b2a7fa3dad51 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Wed, 24 Apr 2024 13:15:32 +0200 Subject: [PATCH 162/551] accountToDebit --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index ac83b929a92..1b2fbe6bfb9 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2380,9 +2380,9 @@ private EvmExceptionType InstructionCall( if (typeof(TTracingRefunds) == typeof(IsTracing)) _txTracer.ReportExtraGasPressure(GasCostOf.CallStipend); gasLimitUl += GasCostOf.CallStipend; } - UInt256 balanceToDebit = instruction == Instruction.AUTHCALL ? _state.GetBalance(vmState.Authorized) : _state.GetBalance(env.ExecutingAccount); - if (env.CallDepth >= MaxCallDepth || - !transferValue.IsZero && balanceToDebit < transferValue) + + Address accountToDebit = instruction == Instruction.AUTHCALL ? vmState.Authorized! : env.ExecutingAccount; + if (env.CallDepth >= MaxCallDepth || !transferValue.IsZero && _state.GetBalance(accountToDebit) < transferValue) { _returnDataBuffer = Array.Empty(); stack.PushZero(); From eb0cfc49d73d2f0805757575117bb7976131f519 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Wed, 24 Apr 2024 13:16:54 +0200 Subject: [PATCH 163/551] whitespace --- src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 1d6749ab140..9dfaec6b006 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -457,7 +457,7 @@ public void ExecuteAUTHCALL_(int expectedCost) var codeWithAuthCall = code.Concat( Prepare.EvmCode .Op(Instruction.AUTHCALL) - .Done).ToArray(); + .Done).ToArray(); TestState.CreateAccount(TestItem.AddressC, 0); TestState.InsertCode(TestItem.AddressC, Keccak.Compute(code), code, Spec); From 9321d2628628c60e2550b7fe3a886da8e2be68e7 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Wed, 24 Apr 2024 13:22:05 +0200 Subject: [PATCH 164/551] refactorings --- src/Nethermind/Nethermind.Evm/EvmStack.cs | 9 ++------- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 6 ++---- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/EvmStack.cs b/src/Nethermind/Nethermind.Evm/EvmStack.cs index 70faa665fac..37c7f65478d 100644 --- a/src/Nethermind/Nethermind.Evm/EvmStack.cs +++ b/src/Nethermind/Nethermind.Evm/EvmStack.cs @@ -294,14 +294,9 @@ public readonly Span PeekWord256() return _bytes.Slice(head * WordSize, WordSize); } - public Address PopAddress() + public Address? PopAddress() { - if (Head-- == 0) - { - return null; - } - - return new Address(_bytes.Slice(Head * WordSize + WordSize - AddressSize, AddressSize).ToArray()); + return Head-- == 0 ? null : new Address(_bytes.Slice(Head * WordSize + WordSize - AddressSize, AddressSize).ToArray()); } public ref byte PopBytesByRef() diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 1b2fbe6bfb9..7eff9994145 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2192,10 +2192,8 @@ private EvmExceptionType InstructionAuth(EvmState vmState, if (authority is null) return EvmExceptionType.StackUnderflow; - UInt256 offset; - UInt256 length; - if (!stack.PopUInt256(out offset)) return EvmExceptionType.StackUnderflow; - if (!stack.PopUInt256(out length)) return EvmExceptionType.StackUnderflow; + if (!stack.PopUInt256(out UInt256 offset)) return EvmExceptionType.StackUnderflow; + if (!stack.PopUInt256(out UInt256 length)) return EvmExceptionType.StackUnderflow; gasAvailable -= GasCostOf.Auth; From 03617db9e0049ff6c5e2fe50b012919686165847 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 24 Apr 2024 13:54:55 +0200 Subject: [PATCH 165/551] fixed engine test for v4 --- .../EngineModuleTests.V4.cs | 9 ++- .../Data/ExecutionPayload.cs | 8 +-- .../Data/ExecutionPayloadV4.cs | 58 +++++++++++++++++-- 3 files changed, 62 insertions(+), 13 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index f366696f794..249068ef036 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -21,8 +21,8 @@ public partial class EngineModuleTests { [TestCase( "0x948f67f47376af5d09cc39ec25a84c84774f14b2e80289064c2de73db33cc573", - "0x6d8a107ccab7a785de89f58db49064ee091df5d2b6306fe55db666e75a0e9f68", - "0x03e662d795ee2234c492ca4a08de03b1d7e3e0297af81a76582e16de75cdfc51", + "0x9293c385458977100c54efd4f61180ccff47ad2f081db181a9f1ebeaff3e0999", + "0x30f4339ed858007f3f9e87b0342598bae47836fd89f1b84f42a16b90e583c47c", "0x96b752d22831ad92")] public virtual async Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) @@ -90,11 +90,14 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid Bytes.FromHexString("0x4e65746865726d696e64") // Nethermind ) { + BlobGasUsed = 0, + ExcessBlobGas = 0, BaseFeePerGas = 0, Bloom = Bloom.Empty, GasUsed = 0, Hash = expectedBlockHash, MixHash = prevRandao, + ParentBeaconBlockRoot = Keccak.Zero, ReceiptsRoot = chain.BlockTree.Head!.ReceiptsRoot!, StateRoot = new(stateRoot), }, @@ -114,7 +117,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid })); response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV4", - chain.JsonSerializer.Serialize(new ExecutionPayload(block))); + chain.JsonSerializer.Serialize(new ExecutionPayloadV4(block)), "[]" , Keccak.Zero.ToString(true)); successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index 2674cf81b80..42a38db7a5f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -100,10 +100,10 @@ public byte[][] Transactions /// - /// Gets or sets a collection of as defined in + /// Gets or sets a collection of as defined in /// EIP-7002. /// - public virtual WithdrawalRequest[]? ValidatorExits { get; set; } + public virtual WithdrawalRequest[]? WithdrawalRequests { get; set; } /// @@ -163,7 +163,7 @@ public virtual bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nul WithdrawalsRoot = Withdrawals is null ? null : new WithdrawalTrie(Withdrawals).RootHash, }; - block = new(header, transactions, Array.Empty(), Withdrawals, Deposits); + block = new(header, transactions, Array.Empty(), Withdrawals); return true; } @@ -239,7 +239,7 @@ private int GetExecutionPayloadVersion() { return this switch { - { Deposits: not null, ValidatorExits: not null } => 4, + { Deposits: not null, WithdrawalRequests: not null } => 4, { BlobGasUsed: not null } or { ExcessBlobGas: not null } or { ParentBeaconBlockRoot: not null } => 3, { Withdrawals: not null } => 2, _ => 1 diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index ee0f5d0e3d9..0d5904dac47 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -1,9 +1,14 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices.JavaScript; using System.Text.Json.Serialization; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Int256; using Nethermind.State.Proofs; @@ -19,9 +24,25 @@ public class ExecutionPayloadV4 : ExecutionPayloadV3 public ExecutionPayloadV4(Block block) : base(block) { - // ToDo - // Deposits = block.Requests; - // ValidatorExits = block.ValidatorExits; + List? deposits = null; + List? withdrawalRequests = null; + var requestsCount = (block.Requests?.Length ?? 0); + if (requestsCount > 0) + { + deposits = new List(); + withdrawalRequests = new List(); + for (int i = 0; i < requestsCount; ++i) + { + var request = block.Requests![i]; + if (request.Type == ConsensusRequestsType.Deposit) + deposits.Add((Deposit)request); + else + withdrawalRequests.Add((WithdrawalRequest)request); + } + } + + Deposits = deposits?.ToArray() ?? []; + WithdrawalRequests = withdrawalRequests?.ToArray() ?? []; } public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = null) @@ -30,8 +51,33 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu { return false; } - // ToDo - // block!.Header.RequestsRoot = Deposits is null ? null : new RequestsTrie(Deposits).RootHash; + + var depositsLength = Deposits?.Length ?? 0; + var withdrawalRequestsLength = WithdrawalRequests?.Length ?? 0; + var requestsCount = depositsLength + withdrawalRequestsLength; + if (requestsCount > 0) + { + var requests = new ConsensusRequest[requestsCount]; + int i = 0; + for (; i < depositsLength; ++i) + { + requests[i] = Deposits![i]; + } + + for (;i < requestsCount; ++i) + { + requests[i] = WithdrawalRequests![i - depositsLength - 1]; + } + + block!.Body.Requests = requests; + block!.Header.RequestsRoot = new RequestsTrie(requests).RootHash; + } + else + { + block!.Body.Requests = Array.Empty(); + block!.Header.RequestsRoot = Keccak.EmptyTreeHash; + } + return true; } @@ -51,5 +97,5 @@ public override bool ValidateFork(ISpecProvider specProvider) => /// EIP-7002. /// [JsonRequired] - public override WithdrawalRequest[]? ValidatorExits { get; set; } + public override WithdrawalRequest[]? WithdrawalRequests { get; set; } } From 23b9f0dfa661166a6d84f318caa3d3abe55ad3d2 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 24 Apr 2024 14:51:21 +0200 Subject: [PATCH 166/551] fix whitespaces --- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 4 ++-- .../Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 249068ef036..5c1c4351f39 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only using System; @@ -117,7 +117,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid })); response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV4", - chain.JsonSerializer.Serialize(new ExecutionPayloadV4(block)), "[]" , Keccak.Zero.ToString(true)); + chain.JsonSerializer.Serialize(new ExecutionPayloadV4(block)), "[]", Keccak.Zero.ToString(true)); successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index 0d5904dac47..e22c540f57d 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -64,7 +64,7 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu requests[i] = Deposits![i]; } - for (;i < requestsCount; ++i) + for (; i < requestsCount; ++i) { requests[i] = WithdrawalRequests![i - depositsLength - 1]; } From c1eacc3fb6bc58c6a833e275a484e361b5b538b2 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 24 Apr 2024 14:55:07 +0200 Subject: [PATCH 167/551] remnants of validator exits --- .../Requests/WithdrawalRequestsProcessor.cs | 6 +++--- .../Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs | 2 +- .../Encoding/WithdrwalRequestDecoderTests.cs | 2 +- src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs | 2 +- .../Nethermind.Merge.Plugin/Data/ExecutionPayload.cs | 2 +- .../Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs | 4 ++-- .../Handlers/EngineRpcCapabilitiesProvider.cs | 6 +++--- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 0297b703e7a..df4be095d58 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -51,7 +51,7 @@ private WithdrawalRequest[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldS UInt256 numInQueue = queueTailIndex - queueHeadIndex; UInt256 numDequeued = UInt256.Min(numInQueue, MaxWithdrawalRequestsPerBlock); - var validatorExits = new WithdrawalRequest[(int)numDequeued]; + var withdrawalRequests = new WithdrawalRequest[(int)numDequeued]; for (UInt256 i = 0; i < numDequeued; ++i) { UInt256 queueStorageSlot = WithdrawalRequestQueueStorageOffset + (queueHeadIndex + i) * 3; @@ -64,7 +64,7 @@ private WithdrawalRequest[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldS .Concat(state.Get(validatorAddressSecondCell)[..16].ToArray()) .ToArray(); ulong amount = state.Get(validatorAddressSecondCell)[16..24].ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(); // ToDo write tests to extension method - validatorExits[(int)i] = new WithdrawalRequest { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey, Amount = amount }; + withdrawalRequests[(int)i] = new WithdrawalRequest { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey, Amount = amount }; } UInt256 newQueueHeadIndex = queueHeadIndex + numDequeued; @@ -78,7 +78,7 @@ private WithdrawalRequest[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldS state.Set(queueHeadIndexCell, newQueueHeadIndex.ToBigEndian()); } - return validatorExits; + return withdrawalRequests; } private void UpdateExcessExits(IReleaseSpec spec, IWorldState state) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs index 93e666ab3e5..35257199340 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs @@ -157,7 +157,7 @@ public void Can_encode_decode_with_cancun_fields(ulong? blobGasUsed, ulong? exce } [Test] - public void Can_encode_decode_with_ValidatorExitRoot() + public void Can_encode_decode_with_WithdrawalRequestRoot() { BlockHeader header = Build.A.BlockHeader .WithTimestamp(ulong.MaxValue) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs index ff9d8eddca4..fdbe02149a6 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs @@ -9,7 +9,7 @@ namespace Nethermind.Core.Test.Encoding; [TestFixture] -public class ValidatorExitDecoderTests +public class WithdrawalRequestsDecoderTests { private static WithdrawalRequestDecoder _decoder = new(); diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 6f67c67e3ba..9fa757d69b1 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -285,7 +285,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// Execution layer triggerable exits /// bool IsEip7002Enabled { get; } - bool ValidatorExitsEnabled => IsEip7002Enabled; + bool WithdrawalRequestsEnabled => IsEip7002Enabled; Address Eip7002ContractAddress { get; } /// diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index 42a38db7a5f..aa5305eb6ef 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -217,7 +217,7 @@ public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, o return ValidationResult.Fail; } - if (spec.DepositsEnabled || spec.ValidatorExitsEnabled) + if (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled) { error = "ExecutionPayloadV4 expected"; return ValidationResult.Fail; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index e22c540f57d..a6345c8751a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -83,7 +83,7 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu public override bool ValidateFork(ISpecProvider specProvider) => specProvider.GetSpec(BlockNumber, Timestamp).DepositsEnabled - && specProvider.GetSpec(BlockNumber, Timestamp).ValidatorExitsEnabled; + && specProvider.GetSpec(BlockNumber, Timestamp).WithdrawalRequestsEnabled; /// /// Gets or sets as defined in @@ -93,7 +93,7 @@ public override bool ValidateFork(ISpecProvider specProvider) => public override Deposit[]? Deposits { get; set; } /// - /// Gets or sets as defined in + /// Gets or sets as defined in /// EIP-7002. /// [JsonRequired] diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs index d48332d78c8..de8a61310e7 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs @@ -48,9 +48,9 @@ public EngineRpcCapabilitiesProvider(ISpecProvider specProvider) #endregion #region Prague - _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.DepositsEnabled || spec.ValidatorExitsEnabled, spec.DepositsEnabled || spec.ValidatorExitsEnabled); - _capabilities[nameof(IEngineRpcModule.engine_forkchoiceUpdatedV4)] = (spec.DepositsEnabled || spec.ValidatorExitsEnabled, spec.DepositsEnabled || spec.ValidatorExitsEnabled); - _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.DepositsEnabled || spec.ValidatorExitsEnabled, spec.DepositsEnabled || spec.ValidatorExitsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled, spec.DepositsEnabled || spec.WithdrawalRequestsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_forkchoiceUpdatedV4)] = (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled, spec.DepositsEnabled || spec.WithdrawalRequestsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled, spec.DepositsEnabled || spec.WithdrawalRequestsEnabled); #endregion } From 9cacc5a63841f89ff07dfce5451ed0dfff239730 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 24 Apr 2024 16:06:44 +0200 Subject: [PATCH 168/551] deposit contract address --- .../Requests/ConsensusRequestsProcessor.cs | 1 - .../Requests/DepositsProcessor.cs | 17 ++++++++++------- .../Nethermind.Core/Specs/IReleaseSpec.cs | 2 +- .../OverridableReleaseSpec.cs | 2 +- .../ChainSpecStyle/ChainParameters.cs | 2 +- .../ChainSpecBasedSpecProvider.cs | 2 +- .../ChainSpecStyle/ChainSpecLoader.cs | 2 +- .../ChainSpecStyle/Json/ChainSpecParamsJson.cs | 2 +- src/Nethermind/Nethermind.Specs/ReleaseSpec.cs | 8 ++++---- .../SystemTransactionReleaseSpec.cs | 2 +- 10 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 357fdd5e8d6..6c7055cad6d 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 167f74d1b49..e81f50651ad 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -17,17 +17,20 @@ public class DepositsProcessor : IDepositsProcessor return null; List depositList = []; + for (int i = 0; i < block.Transactions.Length; i++) { - foreach (var log in receipts[i].Logs) - { - if (log.LoggersAddress == spec.Eip6110ContractAddress) + LogEntry[]? logEntries = receipts[i].Logs; + if (logEntries != null) + foreach (LogEntry? log in logEntries) { - var depositDecoder = new DepositDecoder(); - Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); - depositList.Add(deposit); + if (log!=null && log.LoggersAddress == spec.DepositContractAddress) + { + var depositDecoder = new DepositDecoder(); + Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); + depositList.Add(deposit); + } } - } } return depositList; diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 9fa757d69b1..cef10f1222b 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -279,7 +279,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// bool IsEip6110Enabled { get; } bool DepositsEnabled => IsEip6110Enabled; - Address Eip6110ContractAddress { get; } + Address DepositContractAddress { get; } /// /// Execution layer triggerable exits diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index 326d85309f1..164df133088 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -165,6 +165,6 @@ public ulong Eip4844TransitionTimestamp public bool IsEip6110Enabled => _spec.IsEip6110Enabled; - public Address Eip6110ContractAddress => _spec.Eip6110ContractAddress; + public Address DepositContractAddress => _spec.DepositContractAddress; } } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs index d8ed18a7e5d..be9bffbbcbc 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs @@ -118,7 +118,7 @@ public class ChainParameters public ulong? Eip4788TransitionTimestamp { get; set; } public Address Eip4788ContractAddress { get; set; } public ulong? Eip6110TransitionTimestamp { get; set; } - public Address Eip6110ContractAddress { get; set; } + public Address DepositContractAddress { get; set; } public ulong? Eip7002TransitionTimestamp { get; set; } public Address Eip7002ContractAddress { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index bf877a50cd8..12bc5fa55a7 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -253,7 +253,7 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; releaseSpec.IsEip6110Enabled = (chainSpec.Parameters.Eip6110TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; - releaseSpec.Eip6110ContractAddress = chainSpec.Parameters.Eip6110ContractAddress; + releaseSpec.DepositContractAddress = chainSpec.Parameters.DepositContractAddress; releaseSpec.IsEip7002Enabled = (chainSpec.Parameters.Eip7002TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip7002ContractAddress = chainSpec.Parameters.Eip7002ContractAddress; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 68b22246880..42e854ebfe5 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -154,7 +154,7 @@ bool GetForInnerPathExistence(KeyValuePair o) => Eip1559Constants.DefaultBaseFeeMaxChangeDenominator, Eip6110TransitionTimestamp = chainSpecJson.Params.Eip6110TransitionTimestamp, - Eip6110ContractAddress = chainSpecJson.Params.Eip6110ContractAddress, + DepositContractAddress = chainSpecJson.Params.DepositContractAddress, Eip7002TransitionTimestamp = chainSpecJson.Params.Eip7002TransitionTimestamp, Eip7002ContractAddress = chainSpecJson.Params.Eip7002ContractAddress ?? Eip7002Constants.WithdrawalRequestPredeployAddress, Eip1559FeeCollector = chainSpecJson.Params.Eip1559FeeCollector, diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs index 2c37e3b7bc5..cb6f4dcdf2d 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs @@ -146,7 +146,7 @@ internal class ChainSpecParamsJson public UInt256? Eip4844MinBlobGasPrice { get; set; } public ulong? Eip4844TargetBlobGasPerBlock { get; set; } public ulong? Eip6110TransitionTimestamp { get; set; } - public Address Eip6110ContractAddress { get; set; } + public Address DepositContractAddress { get; set; } public ulong? Eip7002TransitionTimestamp { get; set; } public Address Eip7002ContractAddress { get; set; } } diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index d66eb292461..47be4e68974 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -96,11 +96,11 @@ public Address Eip4788ContractAddress public bool IsEip6110Enabled { get; set; } - private Address _eip6110ContractAddress; - public Address Eip6110ContractAddress + private Address _depositContractAddress; + public Address DepositContractAddress { - get => IsEip6110Enabled ? _eip6110ContractAddress : null; - set => _eip6110ContractAddress = value; + get => IsEip6110Enabled ? _depositContractAddress : null; + set => _depositContractAddress = value; } } } diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index fde20028c2d..de1fdb4e074 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -138,6 +138,6 @@ public bool IsEip158IgnoredAccount(Address address) public bool IsEip6110Enabled => _spec.IsEip6110Enabled; - public Address Eip6110ContractAddress => _spec.Eip6110ContractAddress; + public Address DepositContractAddress => _spec.DepositContractAddress; } } From 12f7ae122f1f587eec52ae62083b54bcb29bad3a Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 24 Apr 2024 20:47:40 +0530 Subject: [PATCH 169/551] format files --- .../Nethermind.Consensus/Requests/DepositsProcessor.cs | 2 +- .../Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index e81f50651ad..442a1ea1e9b 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -24,7 +24,7 @@ public class DepositsProcessor : IDepositsProcessor if (logEntries != null) foreach (LogEntry? log in logEntries) { - if (log!=null && log.LoggersAddress == spec.DepositContractAddress) + if (log != null && log.LoggersAddress == spec.DepositContractAddress) { var depositDecoder = new DepositDecoder(); Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs index 265d9fce4c9..8eab23b2cd8 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs @@ -41,9 +41,6 @@ public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) rlpStream.ReadSequenceLength(); ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)rlpStream.ReadByte(); - - Console.WriteLine("ConsensusRequestsType: " + consensusRequestsType); - ConsensusRequest result = consensusRequestsType switch { ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(rlpStream, rlpBehaviors), @@ -95,8 +92,6 @@ public void Encode(RlpStream stream, ConsensusRequest item, RlpBehaviors rlpBeha public Rlp Encode(ConsensusRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { RlpStream rlpStream = new RlpStream(GetLength(item, rlpBehaviors)); - // debug getLength - Console.WriteLine("GetLength: " + GetLength(item, rlpBehaviors)); Encode(rlpStream, item, rlpBehaviors); return new Rlp(rlpStream.Data.ToArray()); } From e85c29434f1589cfc4b0cd68e7a0240054e54aa8 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 24 Apr 2024 17:31:12 +0200 Subject: [PATCH 170/551] cosmetic --- .../ValidatorExit/WithdrawRequestsContract.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs index cd4440f90a7..f56eac7f3de 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs @@ -49,9 +49,9 @@ WithdrawalRequest[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state if (result == null || result.Length == 0) return Array.Empty(); - var withdrawalRequests = new List(); int sizeOfClass = 20 + 48 + 8; int count = result.Length / sizeOfClass; + var withdrawalRequests = new List(count); for (int i = 0; i < count; ++i) { WithdrawalRequest request = new(); From 89f766aa68b6cf2f3d417777ef281b39da3ded58 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 25 Apr 2024 05:08:03 +0200 Subject: [PATCH 171/551] small refactor --- src/Nethermind/Nethermind.Crypto/Ecdsa.cs | 12 -- .../Nethermind.Evm.Test/Eip3074Tests.cs | 99 +++++++++++++-- .../Nethermind.Evm/VirtualMachine.cs | 113 ++++++++---------- 3 files changed, 141 insertions(+), 83 deletions(-) diff --git a/src/Nethermind/Nethermind.Crypto/Ecdsa.cs b/src/Nethermind/Nethermind.Crypto/Ecdsa.cs index f3b0b4db2f9..1cb2ef22a22 100644 --- a/src/Nethermind/Nethermind.Crypto/Ecdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/Ecdsa.cs @@ -2,8 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using Nethermind.Core; -using System.Security.Cryptography; using Nethermind.Core.Crypto; namespace Nethermind.Crypto @@ -50,16 +48,6 @@ public Signature Sign(PrivateKey privateKey, Hash256 message) return signature; } - public PublicKey? TryRecoverPublicKey(ReadOnlySpan r, ReadOnlySpan s, byte v, Hash256 message) - { - if (v != 27 && v != 28) - { - return null; - } - Signature signature = new(r, s, v); - return RecoverPublicKey(signature, message); - } - public PublicKey? RecoverPublicKey(Signature signature, Hash256 message) { Span publicKey = stackalloc byte[65]; diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 1d6749ab140..403f667d209 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Microsoft.AspNetCore.DataProtection.KeyManagement; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -11,10 +10,7 @@ using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Specs; -using Nethermind.Specs.Forks; -using Nethermind.Specs.Test; using NUnit.Framework; -using System; using System.Collections.Generic; using System.Linq; @@ -27,7 +23,7 @@ public class Eip3074Tests : VirtualMachineTestsBase protected override TestAllTracerWithOutput CreateTracer() => new() { IsTracingAccess = false }; - public static IEnumerable AuthCases() + public static IEnumerable AuthorityCases() { yield return new object[] { TestItem.PrivateKeyB, TestItem.AddressB, 0x1 }; yield return new object[] { TestItem.PrivateKeyC, TestItem.AddressC, 0x1 }; @@ -35,7 +31,7 @@ public static IEnumerable AuthCases() yield return new object[] { TestItem.PrivateKeyD, TestItem.AddressC, 0x0 }; } - [TestCaseSource(nameof(AuthCases))] + [TestCaseSource(nameof(AuthorityCases))] public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(PrivateKey signer, Address authority, int expected) { var data = CreateSignedCommitMessage(signer); @@ -73,9 +69,56 @@ public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(Pr Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); } + + public static IEnumerable CommitDataCases() + { + yield return new object[] { TestItem.PrivateKeyB, TestItem.AddressB, 0x1 }; + yield return new object[] { TestItem.PrivateKeyC, TestItem.AddressC, 0x1 }; + yield return new object[] { TestItem.PrivateKeyC, TestItem.AddressD, 0x0 }; + yield return new object[] { TestItem.PrivateKeyD, TestItem.AddressC, 0x0 }; + } + + [TestCaseSource(nameof(CommitDataCases))] + public void ExecuteAuth_(PrivateKey signer, Address authority, int expected) + { + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + .PushData(data[96..]) + .PushSingle(96) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(authority) + .Op(Instruction.AUTH) + + //Return the result of AUTH + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE8) + .PushSingle(1) + .Op(Instruction.PUSH0) + .Op(Instruction.RETURN) + .Done; + + var result = Execute(code); + + Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); + } + [TestCase(true, 0)] [TestCase(false, 1)] - public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsZero(bool incrementNonce, int expected) + public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsExpected(bool incrementNonce, int expected) { var signer = TestItem.PrivateKeyB; var authority = TestItem.AddressB; @@ -117,7 +160,7 @@ public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsZero(bool in } [Test] - public void ExecuteAuth_InvalidAuthorityAfterValid_CorrectErrorIsReturned() + public void ExecuteAuth_InvalidAuthorityAfterValidHasBeenSet_CorrectErrorIsReturned() { var signer = TestItem.PrivateKeyB; var authority = TestItem.AddressB; @@ -205,6 +248,46 @@ public void ExecuteAuth_ParamLengthIsLessOrGreaterThanValidSignature_ReturnsExpe Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); } + + [TestCase(0)] + [TestCase(1)] + [TestCase(2)] + [TestCase(255)] + public void ExecuteAuth_SignatureIsInvalid_(byte recId) + { + var data = new byte[97]; + data[0] = recId; + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(TestItem.AddressA) + .Op(Instruction.AUTH) + + //Return the result of AUTH + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE8) + .PushSingle(1) + .Op(Instruction.PUSH0) + .Op(Instruction.RETURN) + .Done; + + var result = Execute(code); + + Assert.That(result.ReturnValue[0], Is.EqualTo(0)); + } + [TestCase(97, GasCostOf.Auth + GasCostOf.ColdAccountAccess)] [TestCase(160, GasCostOf.Auth + GasCostOf.Memory + GasCostOf.ColdAccountAccess)] [TestCase(192, GasCostOf.Auth + GasCostOf.Memory * 2 + GasCostOf.ColdAccountAccess)] diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 71f69577796..c4c6076b668 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -19,7 +19,6 @@ using Nethermind.State; using System.Diagnostics.CodeAnalysis; using System.Diagnostics; -using System.Runtime.InteropServices; using System.Runtime.Intrinsics; using static Nethermind.Evm.VirtualMachine; using static System.Runtime.CompilerServices.Unsafe; @@ -35,12 +34,10 @@ namespace Nethermind.Evm; using System.Collections.Frozen; using System.Linq; -using System.Runtime.Intrinsics.X86; using System.Threading; using Int256; using Nethermind.Crypto; -using Newtonsoft.Json.Linq; public class VirtualMachine : IVirtualMachine { @@ -2229,34 +2226,16 @@ private EvmExceptionType InstructionAuth(EvmState vmState, break; } } + Signature signature = new(sigData, yParity); - Signature signature = new Signature(sigData, yParity); - - byte[] chainId = _chainId.PadLeft(32); - byte[] authorityNonce = _state.GetNonce(authority).PaddedBytes(32); - //TODO is ExecutingAccount correct when DELEGATECALL and CALLCODE? - byte[] invokerAddress = vmState.Env.ExecutingAccount.Bytes.PadLeft(32); - - Span msg = stackalloc byte[1 + 32 + 32 + 32 + 32]; - msg[0] = Eip3074Constants.AuthMagic; - for (int i = 0; i < 32; i++) + Address recovered = null; + if (signature.V == 27 || signature.V == 28) { - int shift = i + 1; - msg[shift] = chainId[i]; - msg[shift + 32] = authorityNonce[i]; - msg[shift + 64] = invokerAddress[i]; - if (i < commit.Length) - { - msg[shift + 96] = commit[i]; - } + //TODO is ExecutingAccount correct when DELEGATECALL and CALLCODE? + recovered = TryRecoverSigner(signature, vmState.Env.ExecutingAccount, authority, commit); } - Hash256 digest = Keccak.Compute(msg); - - //TODO handle exception will crash the process - PublicKey publicKey = _ecdsa.RecoverPublicKey(signature, digest); - - if (publicKey != null && publicKey.Address == authority) + if (recovered == authority) { stack.PushUInt256(1); vmState.Authorized = authority; @@ -2269,6 +2248,35 @@ private EvmExceptionType InstructionAuth(EvmState vmState, return EvmExceptionType.None; } + private Address? TryRecoverSigner( + Signature signature, + Address invoker, + Address authority, + ReadOnlySpan commit) + { + byte[] chainId = _chainId.PadLeft(32); + UInt256 nonce = _state.GetNonce(authority); + byte[] invokerAddress = invoker.Bytes; + Span msg = stackalloc byte[1 + 32 * 4]; + msg[0] = Eip3074Constants.AuthMagic; + for (int i = 0; i < 32; i++) + { + int offset = i + 1; + msg[offset] = chainId[i]; + msg[32 + 32 - i] = (byte)(nonce[i / 8] >> (8 * (i % 8))); + + if (i < 12) + msg[offset + 64] = 0; + else if(i - 12 < invokerAddress.Length) + msg[offset + 64] = invokerAddress[i - 12]; + + if (i < commit.Length) + msg[offset + 96] = commit[i]; + } + + return _ecdsa.RecoverAddress(signature, Keccak.Compute(msg)); + } + [SkipLocalsInit] [MethodImpl(MethodImplOptions.NoInlining)] private void InstructionExtCodeSize(Address address, ref EvmStack stack, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing @@ -2324,13 +2332,12 @@ private EvmExceptionType InstructionCall( if (vmState.IsStatic && !transferValue.IsZero && instruction != Instruction.CALLCODE) return EvmExceptionType.StaticCallViolation; - Address caller; - if (instruction == Instruction.DELEGATECALL) - caller = env.Caller; - else if (instruction == Instruction.AUTHCALL) - caller = vmState.Authorized; - else - caller = env.ExecutingAccount; + Address caller = instruction switch + { + Instruction.DELEGATECALL => env.Caller, + Instruction.AUTHCALL => vmState.Authorized, + _ => env.ExecutingAccount + }; Address target = instruction == Instruction.CALL || instruction == Instruction.STATICCALL ? codeSource @@ -2968,34 +2975,14 @@ private void EndInstructionTraceError(long gasAvailable, EvmExceptionType evmExc _txTracer.ReportOperationError(evmExceptionType); } - private static ExecutionType GetCallExecutionType(Instruction instruction, bool isPostMerge = false) - { - ExecutionType executionType; - if (instruction == Instruction.CALL) - { - executionType = ExecutionType.CALL; - } - else if (instruction == Instruction.DELEGATECALL) - { - executionType = ExecutionType.DELEGATECALL; - } - else if (instruction == Instruction.STATICCALL) - { - executionType = ExecutionType.STATICCALL; - } - else if (instruction == Instruction.CALLCODE) - { - executionType = ExecutionType.CALLCODE; - } - else if (instruction == Instruction.AUTHCALL) - { - executionType = ExecutionType.AUTHCALL; - } - else + private static ExecutionType GetCallExecutionType(Instruction instruction, bool isPostMerge = false) => + instruction switch { - throw new NotSupportedException($"Execution type is undefined for {instruction.GetName(isPostMerge)}"); - } - - return executionType; - } + Instruction.CALL => ExecutionType.CALL, + Instruction.DELEGATECALL => ExecutionType.DELEGATECALL, + Instruction.STATICCALL => ExecutionType.STATICCALL, + Instruction.CALLCODE => ExecutionType.CALLCODE, + Instruction.AUTHCALL => ExecutionType.AUTHCALL, + _ => throw new NotSupportedException($"Execution type is undefined for {instruction.GetName(isPostMerge)}") + }; } From 509e47b2f90380d76198f73aa80835bffbb01e32 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 25 Apr 2024 09:59:01 +0200 Subject: [PATCH 172/551] more tests --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 163 +++++++++++++++--- 1 file changed, 141 insertions(+), 22 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index ac6703b83b4..1dd03f35373 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -69,19 +69,84 @@ public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(Pr Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); } + public static IEnumerable BadMessageDataCases() + { + yield return new object[] + { + TestContext.CurrentContext.Random.NextByte(5, byte.MaxValue), + ((UInt256)1).ToBigEndian().PadLeft(32), + new UInt256(0).PaddedBytes(32), + SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) + }; + yield return new object[] + { + Eip3074Constants.AuthMagic, + new UInt256(12999999).PaddedBytes(32), + new UInt256(0).PaddedBytes(32), + SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) + }; + yield return new object[] + { + Eip3074Constants.AuthMagic, + new UInt256(1).PaddedBytes(32), + new UInt256(99999999999).PaddedBytes(32), + SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) + }; + yield return new object[] + { + Eip3074Constants.AuthMagic, + new UInt256(1).PaddedBytes(32), + new UInt256(0).PaddedBytes(32), + TestItem.AddressF.Bytes.PadLeft(32) + }; + } - public static IEnumerable CommitDataCases() + [TestCaseSource(nameof(BadMessageDataCases))] + public void ExecuteAuth_OneOfMessageArgsIsWrong_ReturnsZero(byte magicNumber, byte[] chainId, byte[] nonce, byte[] address) { - yield return new object[] { TestItem.PrivateKeyB, TestItem.AddressB, 0x1 }; - yield return new object[] { TestItem.PrivateKeyC, TestItem.AddressC, 0x1 }; - yield return new object[] { TestItem.PrivateKeyC, TestItem.AddressD, 0x0 }; - yield return new object[] { TestItem.PrivateKeyD, TestItem.AddressC, 0x0 }; + PrivateKey signer = TestItem.PrivateKeyB; + var data = CreateSignedCommitMessage(signer, magicNumber, chainId, nonce, address, new byte[32]); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + .PushData(data[96..]) + .PushSingle(96) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(signer.Address) + .Op(Instruction.AUTH) + + //Return the result of AUTH + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE8) + .PushSingle(1) + .Op(Instruction.PUSH0) + .Op(Instruction.RETURN) + .Done; + + var result = Execute(code); + + Assert.That(result.ReturnValue[0], Is.EqualTo(0)); } - [TestCaseSource(nameof(CommitDataCases))] - public void ExecuteAuth_(PrivateKey signer, Address authority, int expected) + [Test] + public void ExecuteAuth_CommitDataIsWrong_ReturnsZero() { + PrivateKey signer = TestItem.PrivateKeyB; var data = CreateSignedCommitMessage(signer); + //Start index of commit + data[65] = 0x1; byte[] code = Prepare.EvmCode .PushData(data[..32]) @@ -100,7 +165,7 @@ public void ExecuteAuth_(PrivateKey signer, Address authority, int expected) //AUTH params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) - .PushData(authority) + .PushData(signer.Address) .Op(Instruction.AUTH) //Return the result of AUTH @@ -113,7 +178,7 @@ public void ExecuteAuth_(PrivateKey signer, Address authority, int expected) var result = Execute(code); - Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); + Assert.That(result.ReturnValue[0], Is.EqualTo(0)); } [TestCase(true, 0)] @@ -249,14 +314,11 @@ public void ExecuteAuth_ParamLengthIsLessOrGreaterThanValidSignature_ReturnsExpe } - [TestCase(0)] - [TestCase(1)] - [TestCase(2)] - [TestCase(255)] - public void ExecuteAuth_SignatureIsInvalid_(byte recId) + [Test] + public void ExecuteAuth_SignatureIsInvalid_ReturnsZero() { var data = new byte[97]; - data[0] = recId; + TestContext.CurrentContext.Random.NextBytes(data); byte[] code = Prepare.EvmCode .PushData(data[..32]) @@ -554,19 +616,76 @@ public void ExecuteAUTHCALL_(int expectedCost) Assert.That(resultWithAuthCall.GasSpent - result.GasSpent, Is.EqualTo(expectedCost)); } + + [Test] + public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() + { + var signer = TestItem.PrivateKeyF; + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(signer.Address) + .Op(Instruction.AUTH) + + //Just throw away the result + .POP() + + //AUTHCALL params + .PushData(20) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(1.GWei()) + .PushData(TestItem.AddressC) + .PushData(1000000) + .Op(Instruction.AUTHCALL) + .Done; + + TestState.CreateAccount(signer.Address, 1.Ether()); + + Execute(code); + + var addressBalance = TestState.GetBalance(signer.Address); + + Assert.That(addressBalance, Is.EqualTo(1.Ether() - 1.GWei())); + } + private byte[] CreateSignedCommitMessage(PrivateKey signer) + { + return CreateSignedCommitMessage( + signer, + Eip3074Constants.AuthMagic, + ((UInt256)SpecProvider.ChainId).ToBigEndian().PadLeft(32), + TestState.GetNonce(signer.Address).PaddedBytes(32), + SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), + new byte[32] + ); + } + + private byte[] CreateSignedCommitMessage(PrivateKey signer, byte magicNumber, byte[] chainId, byte[] nonce, byte[] address, byte[] commit) { List msg = [ - Eip3074Constants.AuthMagic, - .. ((UInt256)SpecProvider.ChainId).ToBigEndian().PadLeft(32), - .. TestState.GetNonce(signer.Address).PaddedBytes(32), - .. SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), + magicNumber, + .. chainId, + .. nonce, + .. address, + .. commit ]; - byte[] commit = new byte[32]; - msg.AddRange(commit); - Hash256 msgDigest = Keccak.Compute(msg.ToArray()); EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); From 3cdc1fb6527f90a2ce8193f078d7cea319a73034 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 25 Apr 2024 12:21:08 +0200 Subject: [PATCH 173/551] more engine tests --- .../Processing/BlockProcessor.cs | 2 - .../EngineModuleTests.V4.cs | 69 +++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index c8934e292e8..3f8124b0cfb 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -42,7 +42,6 @@ public partial class BlockProcessor : IBlockProcessor private readonly IBlockValidator _blockValidator; private readonly IRewardCalculator _rewardCalculator; private readonly IBlockProcessor.IBlockTransactionsExecutor _blockTransactionsExecutor; - private readonly IWithdrawalRequestsProcessor _withdrawalRequestsProcessor; private readonly IConsensusRequestsProcessor _consensusRequestsProcessor; private const int MaxUncommittedBlocks = 64; @@ -77,7 +76,6 @@ public BlockProcessor(ISpecProvider? specProvider, _receiptsRootCalculator = receiptsRootCalculator ?? ReceiptsRootCalculator.Instance; _consensusRequestsProcessor = consensusRequestsProcessor ?? new ConsensusRequestsProcessor(); _beaconBlockRootHandler = new BeaconBlockRootHandler(); - _withdrawalRequestsProcessor = new WithdrawalRequestsProcessor(); ReceiptsTracer = new BlockReceiptsTracer(); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 5c1c4351f39..fcb3ca28562 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -2,8 +2,11 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using FluentAssertions; +using Nethermind.Consensus.Producers; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -159,4 +162,70 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid } })); } + + [TestCase(30)] + public async Task can_progress_chain_one_by_one_v4(int count) + { + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance); + IEngineRpcModule rpc = CreateEngineModule(chain); + Hash256 lastHash = (await ProduceBranchV4(rpc, chain, count, CreateParentBlockRequestOnHead(chain.BlockTree), true)) + .LastOrDefault()?.BlockHash ?? Keccak.Zero; + chain.BlockTree.HeadHash.Should().Be(lastHash); + Block? last = RunForAllBlocksInBranch(chain.BlockTree, chain.BlockTree.HeadHash, b => b.IsGenesis, true); + last.Should().NotBeNull(); + last!.IsGenesis.Should().BeTrue(); + } + + private async Task> ProduceBranchV4(IEngineRpcModule rpc, + MergeTestBlockchain chain, + int count, ExecutionPayload startingParentBlock, bool setHead, Hash256? random = null) + { + List blocks = new(); + ExecutionPayload parentBlock = startingParentBlock; + parentBlock.TryGetBlock(out Block? block); + UInt256? startingTotalDifficulty = block!.IsGenesis + ? block.Difficulty : chain.BlockFinder.FindHeader(block!.Header!.ParentHash!)!.TotalDifficulty; + BlockHeader parentHeader = block!.Header; + parentHeader.TotalDifficulty = startingTotalDifficulty + + parentHeader.Difficulty; + for (int i = 0; i < count; i++) + { + ExecutionPayloadV4? getPayloadResult = await BuildAndGetPayloadOnBranchV4(rpc, chain, parentHeader, + parentBlock.Timestamp + 12, + random ?? TestItem.KeccakA, Address.Zero); + PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero)).Data; + payloadStatusResponse.Status.Should().Be(PayloadStatus.Valid); + if (setHead) + { + Hash256 newHead = getPayloadResult!.BlockHash; + ForkchoiceStateV1 forkchoiceStateV1 = new(newHead, newHead, newHead); + ResultWrapper setHeadResponse = await rpc.engine_forkchoiceUpdatedV3(forkchoiceStateV1); + setHeadResponse.Data.PayloadStatus.Status.Should().Be(PayloadStatus.Valid); + setHeadResponse.Data.PayloadId.Should().Be(null); + } + + blocks.Add((getPayloadResult)); + parentBlock = getPayloadResult; + parentBlock.TryGetBlock(out block!); + block.Header.TotalDifficulty = parentHeader.TotalDifficulty + block.Header.Difficulty; + parentHeader = block.Header; + } + + return blocks; + } + + private async Task BuildAndGetPayloadOnBranchV4( + IEngineRpcModule rpc, MergeTestBlockchain chain, BlockHeader parentHeader, + ulong timestamp, Hash256 random, Address feeRecipient) + { + PayloadAttributes payloadAttributes = + new() { Timestamp = timestamp, PrevRandao = random, SuggestedFeeRecipient = feeRecipient, ParentBeaconBlockRoot = Keccak.Zero, Withdrawals = []}; + + // we're using payloadService directly, because we can't use fcU for branch + string payloadId = chain.PayloadPreparationService!.StartPreparingPayload(parentHeader, payloadAttributes)!; + + ResultWrapper getPayloadResult = + await rpc.engine_getPayloadV4(Bytes.FromHexString(payloadId)); + return getPayloadResult.Data!.ExecutionPayload!; + } } From ef78003e402271ace630e70facd4f04157485753 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 25 Apr 2024 17:27:50 +0530 Subject: [PATCH 174/551] add support for skipTypedWrapping --- .../ConsensusRequestDecoder.cs | 37 +++++++++++++------ .../DepositDecoder.cs | 8 ++-- .../WithdrawalRequestDecoder.cs | 6 +-- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs index 8eab23b2cd8..270573f2375 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs @@ -12,22 +12,30 @@ public class ConsensusRequestDecoder : IRlpStreamDecoder, IRlp private readonly DepositDecoder _depositDecoder = new(); public int GetContentLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) { - int length = Rlp.LengthOf((byte)item.Type); - switch (item.Type) + int length = item.Type switch { - case ConsensusRequestsType.WithdrawalRequest: - length += _withdrawalRequestDecoder.GetContentLength((WithdrawalRequest)item, rlpBehaviors); - break; - case ConsensusRequestsType.Deposit: - length += _depositDecoder.GetContentLength((Deposit)item, rlpBehaviors); - break; - } + ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.GetContentLength((WithdrawalRequest)item, rlpBehaviors), + ConsensusRequestsType.Deposit => _depositDecoder.GetContentLength((Deposit)item, rlpBehaviors), + _ => throw new RlpException($"Unsupported consensus request type {item.Type}") + }; return length; } public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) { - return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); + int length = item.Type switch + { + ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.GetLength((WithdrawalRequest)item, rlpBehaviors), + ConsensusRequestsType.Deposit => _depositDecoder.GetLength((Deposit)item, rlpBehaviors), + _ => throw new RlpException($"Unsupported consensus request type {item.Type}") + }; + + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) + { + return Rlp.LengthOf((byte)item.Type) + length; + } + + return Rlp.LengthOfSequence(Rlp.LengthOf((byte)item.Type) + length); } public ConsensusRequest? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -76,7 +84,14 @@ public ConsensusRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBe public void Encode(RlpStream stream, ConsensusRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - stream.StartSequence(GetLength(item, rlpBehaviors)); + int contentLength = GetContentLength(item, rlpBehaviors); + int sequenceLength = Rlp.LengthOfSequence(contentLength); + + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.None) + { + stream.StartByteArray(sequenceLength + 1, false); + } + stream.WriteByte((byte)item.Type); switch (item.Type) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs index a181e1e507a..cc8ee86113e 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -16,7 +16,7 @@ public class DepositDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpValueDecoder Date: Thu, 25 Apr 2024 17:31:14 +0530 Subject: [PATCH 175/551] format files --- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 2 +- .../Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index fcb3ca28562..98f3275e2a9 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -219,7 +219,7 @@ private async Task BuildAndGetPayloadOnBranchV4( ulong timestamp, Hash256 random, Address feeRecipient) { PayloadAttributes payloadAttributes = - new() { Timestamp = timestamp, PrevRandao = random, SuggestedFeeRecipient = feeRecipient, ParentBeaconBlockRoot = Keccak.Zero, Withdrawals = []}; + new() { Timestamp = timestamp, PrevRandao = random, SuggestedFeeRecipient = feeRecipient, ParentBeaconBlockRoot = Keccak.Zero, Withdrawals = [] }; // we're using payloadService directly, because we can't use fcU for branch string payloadId = chain.PayloadPreparationService!.StartPreparingPayload(parentHeader, payloadAttributes)!; diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs index 270573f2375..652ae9905a9 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs @@ -29,7 +29,7 @@ public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) ConsensusRequestsType.Deposit => _depositDecoder.GetLength((Deposit)item, rlpBehaviors), _ => throw new RlpException($"Unsupported consensus request type {item.Type}") }; - + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) { return Rlp.LengthOf((byte)item.Type) + length; From 9196724b1f3a051af91deaa905e71546a5c89044 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 25 Apr 2024 17:42:04 +0530 Subject: [PATCH 176/551] update decode functions --- .../ConsensusRequestDecoder.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs index 652ae9905a9..eb500abe53f 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs @@ -46,9 +46,14 @@ public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) return null; } - rlpStream.ReadSequenceLength(); + ConsensusRequestsType consensusRequestsType = ConsensusRequestsType.Deposit; + + if((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) + { + rlpStream.ReadPrefixAndContentLength(); + consensusRequestsType = (ConsensusRequestsType)rlpStream.ReadByte(); + } - ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)rlpStream.ReadByte(); ConsensusRequest result = consensusRequestsType switch { ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(rlpStream, rlpBehaviors), @@ -68,9 +73,13 @@ public ConsensusRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBe return null; } - decoderContext.ReadSequenceLength(); + ConsensusRequestsType consensusRequestsType = ConsensusRequestsType.Deposit; - ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)decoderContext.ReadByte(); + if((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) + { + decoderContext.ReadPrefixAndContentLength(); + consensusRequestsType = (ConsensusRequestsType)decoderContext.ReadByte(); + } ConsensusRequest result = consensusRequestsType switch { From 9c52c7c97cf9f6e0d3e73dfc92898b6f35526526 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 25 Apr 2024 17:42:36 +0530 Subject: [PATCH 177/551] format files --- .../Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs index eb500abe53f..46c57c02e63 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs @@ -48,7 +48,7 @@ public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) ConsensusRequestsType consensusRequestsType = ConsensusRequestsType.Deposit; - if((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) { rlpStream.ReadPrefixAndContentLength(); consensusRequestsType = (ConsensusRequestsType)rlpStream.ReadByte(); @@ -75,7 +75,7 @@ public ConsensusRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBe ConsensusRequestsType consensusRequestsType = ConsensusRequestsType.Deposit; - if((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) { decoderContext.ReadPrefixAndContentLength(); consensusRequestsType = (ConsensusRequestsType)decoderContext.ReadByte(); From bca1d1636623d6eac07c175b521dc29b08641cfc Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 25 Apr 2024 18:02:51 +0530 Subject: [PATCH 178/551] fix errors --- .../ConsensusRequestDecoder.cs | 14 ++++++-------- .../WithdrawalRequestDecoder.cs | 4 ++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs index 46c57c02e63..be65abbeb8d 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs @@ -46,14 +46,13 @@ public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) return null; } - ConsensusRequestsType consensusRequestsType = ConsensusRequestsType.Deposit; - - if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.None) { rlpStream.ReadPrefixAndContentLength(); - consensusRequestsType = (ConsensusRequestsType)rlpStream.ReadByte(); } + ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)rlpStream.ReadByte(); + ConsensusRequest result = consensusRequestsType switch { ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(rlpStream, rlpBehaviors), @@ -73,14 +72,13 @@ public ConsensusRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBe return null; } - ConsensusRequestsType consensusRequestsType = ConsensusRequestsType.Deposit; - - if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.None) { decoderContext.ReadPrefixAndContentLength(); - consensusRequestsType = (ConsensusRequestsType)decoderContext.ReadByte(); } + ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)decoderContext.ReadByte(); + ConsensusRequest result = consensusRequestsType switch { ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(ref decoderContext, rlpBehaviors), diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs index bf37705a1b7..900d1507250 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs @@ -18,7 +18,7 @@ public int GetContentLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) = public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - // int _ = rlpStream.ReadSequenceLength(); + int _ = rlpStream.ReadSequenceLength(); Address sourceAddress = rlpStream.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); byte[] validatorPubkey = rlpStream.DecodeByteArray(); @@ -48,7 +48,7 @@ public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpB public void Encode(RlpStream stream, WithdrawalRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - int contentLength = GetLength(item, rlpBehaviors); + int contentLength = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.SourceAddress); stream.Encode(item.ValidatorPubkey); From 463477bd33a6640a747cb178cf038907821011ea Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 29 Apr 2024 00:40:27 +0200 Subject: [PATCH 179/551] check authorized for code --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 107 +++++++++++++++++- .../Nethermind.Evm/VirtualMachine.cs | 14 ++- 2 files changed, 117 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 1dd03f35373..0bc05ccd88c 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -615,8 +615,7 @@ public void ExecuteAUTHCALL_(int expectedCost) Assert.That(resultWithAuthCall.GasSpent - result.GasSpent, Is.EqualTo(expectedCost)); } - - + [Test] public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() { @@ -663,6 +662,110 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() Assert.That(addressBalance, Is.EqualTo(1.Ether() - 1.GWei())); } + + [Test] + public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebit() + { + var signer = TestItem.PrivateKeyF; + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(signer.Address) + .Op(Instruction.AUTH) + + //Just throw away the result + .POP() + + //AUTHCALL params + .PushData(20) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(2.Ether()) + .PushData(TestItem.AddressC) + .PushData(1000000) + .Op(Instruction.AUTHCALL) + .Done; + + TestState.CreateAccount(signer.Address, 1.Ether()); + + Execute(code); + + var addressBalance = TestState.GetBalance(signer.Address); + + Assert.That(addressBalance, Is.EqualTo(1.Ether())); + } + + + [Test] + public void ExecuteAUTHCALL_SignerHasCodeDeployed_() + { + var signer = TestItem.PrivateKeyF; + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(signer.Address) + .Op(Instruction.AUTH) + + //Just throw away the result + .POP() + + //AUTHCALL params + .PushData(20) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(2.Ether()) + .PushData(TestItem.AddressC) + .PushData(1000000) + .Op(Instruction.AUTHCALL) + .Done; + + var signerCode = Prepare.EvmCode + .CALLDATASIZE() + .Op(Instruction.PUSH0) + .Op(Instruction.PUSH0) + .CALLDATACOPY() + .CALLDATASIZE() + .Op(Instruction.PUSH0) + .Op(Instruction.RETURN) + .Done; + + TestState.CreateAccount(signer.Address, 0); + TestState.InsertCode(signer.Address, Keccak.Compute(signerCode), signerCode, Spec); + + var result = Execute(code); + + Assert.That(result.Error, Is.EqualTo(EvmExceptionType.BadInstruction.ToString())); + } + + private byte[] CreateSignedCommitMessage(PrivateKey signer) { return CreateSignedCommitMessage( diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 75739ef66a3..6313ce64866 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2299,8 +2299,18 @@ private EvmExceptionType InstructionCall( instruction == Instruction.STATICCALL && !spec.StaticCallEnabled || instruction == Instruction.AUTHCALL && !spec.AuthCallsEnabled) return EvmExceptionType.BadInstruction; - if (instruction == Instruction.AUTHCALL && vmState.Authorized is null) - return EvmExceptionType.AuthorizedNotSet; + if (instruction == Instruction.AUTHCALL) + { + if (vmState.Authorized is null) + { + return EvmExceptionType.AuthorizedNotSet; + } + else if (_state.IsContract(vmState.Authorized)) + { + //TODO maybe a specific exception is better? + return EvmExceptionType.BadInstruction; + } + } if (!stack.PopUInt256(out UInt256 gasLimit)) return EvmExceptionType.StackUnderflow; Address codeSource = stack.PopAddress(); From fbe3566aa751f6afe73f8d6b4ccabe80765d9eb2 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 12:20:20 +0200 Subject: [PATCH 180/551] fixed engine test --- .../Blockchain/TestBlockchain.cs | 8 ++- .../AuRaMergeEngineModuleTests.cs | 9 +-- .../ConsensusRequestsProcessorMock.cs | 35 +++++++++++ .../EngineModuleTests.Setup.cs | 39 ++++++++----- .../EngineModuleTests.V4.cs | 17 ++++++ .../MergeTestBlockProducerEnvFactory.cs | 58 +++++++++++++++++++ .../Data/ExecutionPayloadV4.cs | 2 +- 7 files changed, 149 insertions(+), 19 deletions(-) create mode 100644 src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/MergeTestBlockProducerEnvFactory.cs diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index b9a040eeb33..a77e51cf7f7 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -14,6 +14,7 @@ using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; @@ -111,6 +112,8 @@ protected TestBlockchain() public ProducedBlockSuggester Suggester { get; protected set; } = null!; + public IConsensusRequestsProcessor? ConsensusRequestsProcessor { get; protected set; } = null!; + public static TransactionBuilder BuildSimpleTransaction => Builders.Build.A.Transaction.SignedAndResolved(TestItem.PrivateKeyA).To(AccountB); protected virtual async Task Build(ISpecProvider? specProvider = null, UInt256? initialValues = null, bool addBlockOnStart = true) @@ -356,7 +359,10 @@ protected virtual IBlockProcessor CreateBlockProcessor() => State, ReceiptStorage, NullWitnessCollector.Instance, - LogManager); + LogManager, + null, + null, + ConsensusRequestsProcessor); public async Task WaitForNewHead() { diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index c25d3306762..269070449ce 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -43,8 +43,9 @@ public class AuRaMergeEngineModuleTests : EngineModuleTests protected override MergeTestBlockchain CreateBaseBlockchain( IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadService = null, - ILogManager? logManager = null) - => new MergeAuRaTestBlockchain(mergeConfig, mockedPayloadService); + ILogManager? logManager = null, + IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) + => new MergeAuRaTestBlockchain(mergeConfig, mockedPayloadService, logManager, mockedConsensusRequestsProcessor); protected override Hash256 ExpectedBlockHash => new("0x990d377b67dbffee4a60db6f189ae479ffb406e8abea16af55e0469b8524cf46"); @@ -92,8 +93,8 @@ class MergeAuRaTestBlockchain : MergeTestBlockchain { private AuRaNethermindApi? _api; - public MergeAuRaTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null) - : base(mergeConfig, mockedPayloadPreparationService) + public MergeAuRaTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null, IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) + : base(mergeConfig, mockedPayloadPreparationService, logManager, mockedConsensusRequestsProcessor) { SealEngineType = Core.SealEngineType.AuRa; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs new file mode 100644 index 00000000000..eb3daf73de2 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using MathNet.Numerics.Distributions; +using Nethermind.Consensus.Requests; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.State; +using Nethermind.State.Proofs; + +namespace Nethermind.Merge.Plugin.Test; + +public class ConsensusRequestsProcessorMock : IConsensusRequestsProcessor +{ + public ConsensusRequest[] Requests = + [ + TestItem.DepositA_1Eth, + TestItem.DepositB_2Eth, + TestItem.WithdrawalRequestA, + TestItem.WithdrawalRequestB + ]; + + public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) + { + if (block.IsGenesis) + return; + + block.Body.Requests = Requests; + Hash256 root = new RequestsTrie(Requests).RootHash; + block.Header.RequestsRoot = root; + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 8babb52d958..48744c25b75 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -33,6 +33,7 @@ using Nethermind.Merge.Plugin.GC; using Nethermind.Merge.Plugin.Handlers; using Nethermind.Merge.Plugin.Synchronization; +using Nethermind.Merge.Plugin.Test.Synchronization; using Nethermind.Specs; using Nethermind.Specs.ChainSpecStyle; using Nethermind.Specs.Forks; @@ -52,14 +53,21 @@ public Task Setup() return KzgPolynomialCommitments.InitializeAsync(); } - protected virtual MergeTestBlockchain CreateBaseBlockchain(IMergeConfig? mergeConfig = null, - IPayloadPreparationService? mockedPayloadService = null, ILogManager? logManager = null) => - new(mergeConfig, mockedPayloadService, logManager); - - - protected async Task CreateBlockchain(IReleaseSpec? releaseSpec = null, IMergeConfig? mergeConfig = null, - IPayloadPreparationService? mockedPayloadService = null) - => await CreateBaseBlockchain(mergeConfig, mockedPayloadService) + protected virtual MergeTestBlockchain CreateBaseBlockchain( + IMergeConfig? mergeConfig = null, + IPayloadPreparationService? mockedPayloadService = null, + ILogManager? logManager = null, + IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) => + new(mergeConfig, mockedPayloadService, logManager, mockedConsensusRequestsProcessor); + + + protected async Task CreateBlockchain( + IReleaseSpec? releaseSpec = null, + IMergeConfig? mergeConfig = null, + IPayloadPreparationService? mockedPayloadService = null, + ILogManager? logManager = null, + IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) + => await CreateBaseBlockchain(mergeConfig, mockedPayloadService, logManager, mockedConsensusRequestsProcessor) .Build(new TestSingleReleaseSpecProvider(releaseSpec ?? London.Instance)); protected async Task CreateBlockchain(ISpecProvider specProvider, @@ -169,13 +177,14 @@ public MergeTestBlockchain ThrottleBlockProcessor(int delayMs) return this; } - public MergeTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null) + public MergeTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null, IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) { GenesisBlockBuilder = Core.Test.Builders.Build.A.Block.Genesis.Genesis.WithTimestamp(1UL); MergeConfig = mergeConfig ?? new MergeConfig() { TerminalTotalDifficulty = "0" }; PayloadPreparationService = mockedPayloadPreparationService; SyncPeerPool = Substitute.For(); LogManager = logManager ?? LogManager; + ConsensusRequestsProcessor = mockedConsensusRequestsProcessor; } protected override Task AddBlocksOnStart() => Task.CompletedTask; @@ -202,7 +211,7 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT LogManager, targetAdjustedGasLimitCalculator); - BlockProducerEnvFactory blockProducerEnvFactory = new( + MergeTestBlockProducerEnvFactory blockProducerEnvFactory = new( WorldStateManager!, BlockTree, SpecProvider, @@ -213,8 +222,8 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT TxPool, transactionComparerProvider, blocksConfig, - LogManager); - + LogManager, + ConsensusRequestsProcessor); BlockProducerEnv blockProducerEnv = blockProducerEnvFactory.Create(); PostMergeBlockProducer? postMergeBlockProducer = blockProducerFactory.Create( @@ -227,6 +236,8 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT LogManager, TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot), 50000); // by default we want to avoid cleanup payload effects in testing + + ConsensusRequestsProcessor ??= new ConsensusRequestsProcessor(); return new MergeBlockProducer(preMergeBlockProducer, postMergeBlockProducer, PoSSwitcher); } @@ -244,7 +255,9 @@ protected override IBlockProcessor CreateBlockProcessor() ReceiptStorage, NullWitnessCollector.Instance, LogManager, - WithdrawalProcessor); + WithdrawalProcessor, + null, + ConsensusRequestsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index fcb3ca28562..c25c20e050c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -176,6 +176,23 @@ public async Task can_progress_chain_one_by_one_v4(int count) last!.IsGenesis.Should().BeTrue(); } + [TestCase(30)] + public async Task can_progress_chain_one_by_one_v4_with_requests(int count) + { + ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + IEngineRpcModule rpc = CreateEngineModule(chain); + Hash256 lastHash = (await ProduceBranchV4(rpc, chain, count, CreateParentBlockRequestOnHead(chain.BlockTree), true)) + .LastOrDefault()?.BlockHash ?? Keccak.Zero; + chain.BlockTree.HeadHash.Should().Be(lastHash); + Block? last = RunForAllBlocksInBranch(chain.BlockTree, chain.BlockTree.HeadHash, b => b.IsGenesis, true); + last.Should().NotBeNull(); + last!.IsGenesis.Should().BeTrue(); + + Block? head = chain.BlockTree.Head; + head!.Requests!.Length.Should().Be(consensusRequestsProcessorMock.Requests.Length); + } + private async Task> ProduceBranchV4(IEngineRpcModule rpc, MergeTestBlockchain chain, int count, ExecutionPayload startingParentBlock, bool setHead, Hash256? random = null) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/MergeTestBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/MergeTestBlockProducerEnvFactory.cs new file mode 100644 index 00000000000..4823e6d6bf4 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/MergeTestBlockProducerEnvFactory.cs @@ -0,0 +1,58 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Blockchain; +using Nethermind.Blockchain.Receipts; +using Nethermind.Config; +using Nethermind.Consensus; +using Nethermind.Consensus.Comparers; +using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Producers; +using Nethermind.Consensus.Requests; +using Nethermind.Consensus.Rewards; +using Nethermind.Consensus.Transactions; +using Nethermind.Consensus.Validators; +using Nethermind.Consensus.Withdrawals; +using Nethermind.Core.Specs; +using Nethermind.Logging; +using Nethermind.State; +using Nethermind.TxPool; + +namespace Nethermind.Merge.Plugin.Test.Synchronization; + +public class MergeTestBlockProducerEnvFactory( + IWorldStateManager worldStateManager, + IBlockTree blockTree, + ISpecProvider specProvider, + IBlockValidator blockValidator, + IRewardCalculatorSource rewardCalculatorSource, + IReceiptStorage receiptStorage, + IBlockPreprocessorStep blockPreprocessorStep, + ITxPool txPool, + ITransactionComparerProvider transactionComparerProvider, + IBlocksConfig blocksConfig, + ILogManager logManager, + IConsensusRequestsProcessor? consensusRequestsProcessor = null) + : BlockProducerEnvFactory(worldStateManager, blockTree, specProvider, blockValidator, rewardCalculatorSource, + receiptStorage, blockPreprocessorStep, txPool, transactionComparerProvider, blocksConfig, logManager) +{ + protected override BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv, ISpecProvider specProvider, + IBlockValidator blockValidator, IRewardCalculatorSource rewardCalculatorSource, IReceiptStorage receiptStorage, + ILogManager logManager, IBlocksConfig blocksConfig) + { + return new(specProvider, + blockValidator, + rewardCalculatorSource.Get(readOnlyTxProcessingEnv.TransactionProcessor), + TransactionsExecutorFactory.Create(readOnlyTxProcessingEnv), + readOnlyTxProcessingEnv.StateProvider, + receiptStorage, + NullWitnessCollector.Instance, + logManager, + new BlockProductionWithdrawalProcessor( + new WithdrawalProcessor( + readOnlyTxProcessingEnv.StateProvider, + logManager)), + null, + consensusRequestsProcessor); + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index a6345c8751a..dd8f86b4255 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -66,7 +66,7 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu for (; i < requestsCount; ++i) { - requests[i] = WithdrawalRequests![i - depositsLength - 1]; + requests[i] = WithdrawalRequests![i - depositsLength]; } block!.Body.Requests = requests; From 75fe6c484294cb7490de5562d1ef3e01dd6b9e8a Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 12:36:30 +0200 Subject: [PATCH 181/551] fix chainspec tests --- src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs | 4 ++++ src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs index 4180bb4cd52..db5e4b697d0 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs @@ -26,6 +26,10 @@ protected Olympic() Eip1559TransitionBlock = long.MaxValue; ValidateChainId = true; ValidateReceipts = true; + + // The below addresses are added for all forks, but the given EIPs can be enabled at a specific timestamp or block. + Eip7002ContractAddress = Eip7002Constants.WithdrawalRequestPredeployAddress; + } public static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Olympic()); diff --git a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs index b4f77b0fd18..14cd4b49a6c 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs @@ -16,7 +16,6 @@ protected Prague() Name = "Prague"; IsEip6110Enabled = true; IsEip7002Enabled = true; - Eip7002ContractAddress = Eip7002Constants.WithdrawalRequestPredeployAddress; } public new static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Prague()); From 5d54446a96008c5a24a86bb3a6ad2488a9208af3 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 13:15:34 +0200 Subject: [PATCH 182/551] fix AuRa tests --- .../AuRaBlockProcessor.cs | 7 ++- .../Producers/BlockProducerEnvFactory.cs | 10 +++- .../AuRaMergeEngineModuleTests.cs | 16 ++++- .../AuRaMergeBlockProcessor.cs | 11 ++-- .../AuRaMergeBlockProducerEnvFactory.cs | 20 +++++-- .../InitializeBlockchainAuRaMerge.cs | 1 - .../EngineModuleTests.Setup.cs | 2 +- .../MergeTestBlockProducerEnvFactory.cs | 58 ------------------- 8 files changed, 47 insertions(+), 78 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/MergeTestBlockProducerEnvFactory.cs diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 63a1598b689..0c4c287566a 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -43,7 +43,8 @@ public AuRaBlockProcessor(ISpecProvider specProvider, IAuRaValidator? auRaValidator, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, - ContractRewriter? contractRewriter = null) + ContractRewriter? contractRewriter = null, + IConsensusRequestsProcessor? consensusRequestsProcessor = null) : base( specProvider, blockValidator, @@ -53,7 +54,9 @@ public AuRaBlockProcessor(ISpecProvider specProvider, receiptStorage, NullWitnessCollector.Instance, logManager, - withdrawalProcessor) + withdrawalProcessor, + null, + consensusRequestsProcessor) { _specProvider = specProvider; _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index 3a4f595ca23..9328e4991a8 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -6,6 +6,7 @@ using Nethermind.Config; using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; @@ -30,6 +31,7 @@ public class BlockProducerEnvFactory : IBlockProducerEnvFactory protected readonly ITransactionComparerProvider _transactionComparerProvider; protected readonly IBlocksConfig _blocksConfig; protected readonly ILogManager _logManager; + private readonly IConsensusRequestsProcessor? _consensusRequestsProcessor; public IBlockTransactionsExecutorFactory TransactionsExecutorFactory { get; set; } @@ -44,7 +46,8 @@ public BlockProducerEnvFactory( ITxPool txPool, ITransactionComparerProvider transactionComparerProvider, IBlocksConfig blocksConfig, - ILogManager logManager) + ILogManager logManager, + IConsensusRequestsProcessor? consensusRequestsProcessor = null) { _worldStateManager = worldStateManager; _blockTree = blockTree; @@ -57,6 +60,7 @@ public BlockProducerEnvFactory( _transactionComparerProvider = transactionComparerProvider; _blocksConfig = blocksConfig; _logManager = logManager; + _consensusRequestsProcessor = consensusRequestsProcessor; TransactionsExecutorFactory = new BlockProducerTransactionsExecutorFactory(specProvider, logManager); } @@ -143,7 +147,9 @@ protected virtual BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv re receiptStorage, NullWitnessCollector.Instance, logManager, - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager))); + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager)), + null, + _consensusRequestsProcessor); } } diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 269070449ce..3958c55ac67 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -58,6 +58,14 @@ int ErrorCode ) input) => base.forkchoiceUpdatedV2_should_validate_withdrawals(input); + [TestCase( + "0xe97d919a17fa5011ff3a08ffb07657ed9e1aaf5ff649888e5d7f605006caf598", + "0xb3bafa4c9efb2f6f95345381f591d2b6f611b0911ca568fb499594cbec66e5d4", + "0xffadd136040966576fb63852506bba89c765cabe2884fa27797fd67aea5769dc", + "0x3c6a8926870bdeff")] + public override Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) + => base.Should_process_block_as_expected_V4(latestValidHash, blockHash, stateRoot, payloadId); + [TestCase( "0xe168b70ac8a6f7d90734010030801fbb2dcce03a657155c4024b36ba8d1e3926", "0x3e604e45a9a74b66a7e03f828cc2597f0cb5f5e7dc50c9211be3a62fbcd6396d", @@ -96,6 +104,7 @@ class MergeAuRaTestBlockchain : MergeTestBlockchain public MergeAuRaTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null, IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) : base(mergeConfig, mockedPayloadPreparationService, logManager, mockedConsensusRequestsProcessor) { + ConsensusRequestsProcessor = mockedConsensusRequestsProcessor; SealEngineType = Core.SealEngineType.AuRa; } @@ -137,7 +146,9 @@ protected override IBlockProcessor CreateBlockProcessor() ReceiptStorage, NullWitnessCollector.Instance, LogManager, - WithdrawalProcessor); + WithdrawalProcessor, + null, + ConsensusRequestsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } @@ -171,7 +182,8 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT TxPool, transactionComparerProvider, blocksConfig, - LogManager); + LogManager, + ConsensusRequestsProcessor); BlockProducerEnv blockProducerEnv = blockProducerEnvFactory.Create(); diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index f2765c16d4f..41a33e94b39 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -21,8 +21,7 @@ namespace Nethermind.Merge.AuRa; public class AuRaMergeBlockProcessor : AuRaBlockProcessor { - public AuRaMergeBlockProcessor( - ISpecProvider specProvider, + public AuRaMergeBlockProcessor(ISpecProvider specProvider, IBlockValidator blockValidator, IRewardCalculator rewardCalculator, IBlockProcessor.IBlockTransactionsExecutor blockTransactionsExecutor, @@ -31,12 +30,11 @@ public AuRaMergeBlockProcessor( ILogManager logManager, IBlockTree blockTree, IWithdrawalProcessor withdrawalProcessor, - IDepositsProcessor depositsProcessor, IAuRaValidator? validator, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, - ContractRewriter? contractRewriter = null - ) : base( + ContractRewriter? contractRewriter = null, + IConsensusRequestsProcessor? consensusRequestsProcessor = null) : base( specProvider, blockValidator, rewardCalculator, @@ -49,7 +47,8 @@ public AuRaMergeBlockProcessor( validator, txFilter, gasLimitOverride, - contractRewriter + contractRewriter, + consensusRequestsProcessor ) { } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index 6cd63e814f6..dd3f0e260e6 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -9,6 +9,7 @@ using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Core; @@ -23,6 +24,7 @@ namespace Nethermind.Merge.AuRa; public class AuRaMergeBlockProducerEnvFactory : BlockProducerEnvFactory { private readonly AuRaNethermindApi _auraApi; + private readonly IConsensusRequestsProcessor? _consensusRequestsProcessor; public AuRaMergeBlockProducerEnvFactory( AuRaNethermindApi auraApi, @@ -36,7 +38,8 @@ public AuRaMergeBlockProducerEnvFactory( ITxPool txPool, ITransactionComparerProvider transactionComparerProvider, IBlocksConfig blocksConfig, - ILogManager logManager) : base( + ILogManager logManager, + IConsensusRequestsProcessor? consensusRequestsProcessor = null) : base( worldStateManager, blockTree, specProvider, @@ -47,9 +50,11 @@ public AuRaMergeBlockProducerEnvFactory( txPool, transactionComparerProvider, blocksConfig, - logManager) + logManager, + consensusRequestsProcessor) { _auraApi = auraApi; + _consensusRequestsProcessor = consensusRequestsProcessor; } protected override BlockProcessor CreateBlockProcessor( @@ -76,10 +81,13 @@ protected override BlockProcessor CreateBlockProcessor( new AuraWithdrawalProcessor( withdrawalContractFactory.Create(readOnlyTxProcessingEnv.TransactionProcessor), logManager - ) - ), - new Consensus.Requests.DepositsProcessor(), - null); + ) + ), + null, + null, + null, + null, + _consensusRequestsProcessor); } protected override TxPoolTxSource CreateTxPoolTxSource( diff --git a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs index 5a50d55cacf..0c12b1c951e 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs @@ -46,7 +46,6 @@ protected override AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter) _api.BlockTree!, new AuraWithdrawalProcessor( withdrawalContractFactory.Create(transactionProcessor!), _api.LogManager), - new DepositsProcessor(), CreateAuRaValidator(), txFilter, GetGasLimitCalculator(), diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 48744c25b75..b476f8cb136 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -211,7 +211,7 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT LogManager, targetAdjustedGasLimitCalculator); - MergeTestBlockProducerEnvFactory blockProducerEnvFactory = new( + BlockProducerEnvFactory blockProducerEnvFactory = new( WorldStateManager!, BlockTree, SpecProvider, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/MergeTestBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/MergeTestBlockProducerEnvFactory.cs deleted file mode 100644 index 4823e6d6bf4..00000000000 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/Synchronization/MergeTestBlockProducerEnvFactory.cs +++ /dev/null @@ -1,58 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Blockchain; -using Nethermind.Blockchain.Receipts; -using Nethermind.Config; -using Nethermind.Consensus; -using Nethermind.Consensus.Comparers; -using Nethermind.Consensus.Processing; -using Nethermind.Consensus.Producers; -using Nethermind.Consensus.Requests; -using Nethermind.Consensus.Rewards; -using Nethermind.Consensus.Transactions; -using Nethermind.Consensus.Validators; -using Nethermind.Consensus.Withdrawals; -using Nethermind.Core.Specs; -using Nethermind.Logging; -using Nethermind.State; -using Nethermind.TxPool; - -namespace Nethermind.Merge.Plugin.Test.Synchronization; - -public class MergeTestBlockProducerEnvFactory( - IWorldStateManager worldStateManager, - IBlockTree blockTree, - ISpecProvider specProvider, - IBlockValidator blockValidator, - IRewardCalculatorSource rewardCalculatorSource, - IReceiptStorage receiptStorage, - IBlockPreprocessorStep blockPreprocessorStep, - ITxPool txPool, - ITransactionComparerProvider transactionComparerProvider, - IBlocksConfig blocksConfig, - ILogManager logManager, - IConsensusRequestsProcessor? consensusRequestsProcessor = null) - : BlockProducerEnvFactory(worldStateManager, blockTree, specProvider, blockValidator, rewardCalculatorSource, - receiptStorage, blockPreprocessorStep, txPool, transactionComparerProvider, blocksConfig, logManager) -{ - protected override BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv, ISpecProvider specProvider, - IBlockValidator blockValidator, IRewardCalculatorSource rewardCalculatorSource, IReceiptStorage receiptStorage, - ILogManager logManager, IBlocksConfig blocksConfig) - { - return new(specProvider, - blockValidator, - rewardCalculatorSource.Get(readOnlyTxProcessingEnv.TransactionProcessor), - TransactionsExecutorFactory.Create(readOnlyTxProcessingEnv), - readOnlyTxProcessingEnv.StateProvider, - receiptStorage, - NullWitnessCollector.Instance, - logManager, - new BlockProductionWithdrawalProcessor( - new WithdrawalProcessor( - readOnlyTxProcessingEnv.StateProvider, - logManager)), - null, - consensusRequestsProcessor); - } -} From ced451924cac90088b75836fcec1f715982b103d Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 13:17:02 +0200 Subject: [PATCH 183/551] fix whitespaces --- .../ConsensusRequestsProcessorMock.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs index eb3daf73de2..14195d675ea 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only using MathNet.Numerics.Distributions; From 271b35b344b7f587703d0dd5f93b4d4e0ff34ab9 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 14:09:58 +0200 Subject: [PATCH 184/551] cosmetic --- .../Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 3958c55ac67..99846fa90fe 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -11,7 +11,6 @@ using Nethermind.Consensus.AuRa.InitializationSteps; using Nethermind.Consensus.AuRa.Validators; using Nethermind.Consensus.Comparers; -using Nethermind.Consensus.Withdrawals; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; using Nethermind.Consensus.Requests; From e45f684bd91016cebf8e2064f93ade14ce4ccc68 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 15:46:40 +0200 Subject: [PATCH 185/551] cosmetic cleanups --- src/Nethermind/Chains/foundation.json | 3 ++- .../Nethermind.AuRa.Test/AuraBlockProcessorTests.cs | 1 - .../Nethermind.Consensus.Clique/CliqueBlockProducer.cs | 2 +- src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs | 2 -- .../Requests/ConsensusRequestsProcessor.cs | 2 +- .../Nethermind.Core/Extensions/UInt64Extensions.cs | 1 - .../AuRaMergeEngineModuleTests.cs | 2 -- .../EngineModuleTests.Setup.cs | 3 --- .../InvalidChainTracker/InvalidBlockInterceptorTest.cs | 4 ---- .../Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs | 3 --- .../Handlers/EngineRpcCapabilitiesProvider.cs | 1 - .../Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs | 7 ------- .../Nethermind.Optimism/OptimismBlockProcessor.cs | 3 +-- .../Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs | 3 +-- .../Nethermind.Serialization.Rlp/BlockDecoder.cs | 4 ++++ 15 files changed, 10 insertions(+), 31 deletions(-) diff --git a/src/Nethermind/Chains/foundation.json b/src/Nethermind/Chains/foundation.json index 674e828bc20..032224ddb92 100644 --- a/src/Nethermind/Chains/foundation.json +++ b/src/Nethermind/Chains/foundation.json @@ -190,7 +190,8 @@ "eip4844TransitionTimestamp": "0x65F1B057", "eip5656TransitionTimestamp": "0x65F1B057", "eip6780TransitionTimestamp": "0x65F1B057", - "terminalTotalDifficulty": "C70D808A128D7380000" + "terminalTotalDifficulty": "C70D808A128D7380000", + "depositContractAddress": "0x00000000219ab540356cbb839cbe05303d7705fa" }, "genesis": { "seal": { diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs index d6069007b64..cfbfb9cb9d7 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs @@ -9,7 +9,6 @@ using Nethermind.Blockchain.Test.Validators; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.Processing; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Withdrawals; diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index 3fb03324e00..9e1751933db 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -447,7 +447,7 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) selectedTxs, Array.Empty(), spec.WithdrawalsEnabled ? Enumerable.Empty() : null, - spec.DepositsEnabled ? Enumerable.Empty() : null + spec.DepositsEnabled || spec.IsEip7002Enabled ? Enumerable.Empty() : null ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index e7270431fd4..1575b051886 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -9,14 +9,12 @@ using Nethermind.Blockchain.Receipts; using Nethermind.Config; using Nethermind.Consensus.Comparers; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Withdrawals; using Nethermind.Core.Attributes; -using Nethermind.Db; using Nethermind.JsonRpc.Modules; using Nethermind.State; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 6c7055cad6d..5ffaeb4e6b2 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -38,7 +38,7 @@ public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, T ConsensusRequest[]? requests = requestsList.ToArray(); Hash256 root = new RequestsTrie(requests).RootHash; - block.Body.Requests = requests; // ToDo think about it + block.Body.Requests = requests; block.Header.RequestsRoot = root; } } diff --git a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs index bb8c07f261d..cc6a65e5991 100644 --- a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs +++ b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs @@ -5,7 +5,6 @@ namespace Nethermind.Core.Extensions; public static class UInt64Extensions { - // ToDo add tests public static ulong ToULongFromBigEndianByteArrayWithoutLeadingZeros(this byte[]? bytes) { if (bytes is null) diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 99846fa90fe..09441f89fd9 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -133,8 +133,6 @@ protected override IBlockProcessor CreateBlockProcessor() LogManager ); - DepositsProcessor depositsProcessor = new(); - BlockValidator = CreateBlockValidator(); IBlockProcessor processor = new BlockProcessor( SpecProvider, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index b476f8cb136..719b164ddfc 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -161,8 +161,6 @@ public class MergeTestBlockchain : TestBlockchain public IWithdrawalProcessor? WithdrawalProcessor { get; set; } - public IDepositsProcessor? DepositsProcessor { get; set; } - public ISyncPeerPool SyncPeerPool { get; set; } protected int _blockProcessingThrottle = 0; @@ -245,7 +243,6 @@ protected override IBlockProcessor CreateBlockProcessor() { BlockValidator = CreateBlockValidator(); WithdrawalProcessor = new WithdrawalProcessor(State, LogManager); - DepositsProcessor = new DepositsProcessor(); IBlockProcessor processor = new BlockProcessor( SpecProvider, BlockValidator, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs index 5239f21ada5..7483159ddbd 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/InvalidChainTracker/InvalidBlockInterceptorTest.cs @@ -3,18 +3,14 @@ using System; using System.Linq; -using k8s; using Nethermind.Consensus.Validators; using Nethermind.Core; using Nethermind.Core.Crypto; -using Nethermind.Core.Extensions; -using Nethermind.Core.Specs; using Nethermind.Core.Test.Builders; using Nethermind.Crypto; using Nethermind.Logging; using Nethermind.Merge.Plugin.InvalidChainTracker; using Nethermind.Specs; -using Nethermind.Specs.Forks; using NSubstitute; using NUnit.Framework; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs index d7ad5b3eab3..6f650bc644f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs @@ -15,9 +15,6 @@ public partial class EngineRpcModule : IEngineRpcModule { private readonly IAsyncHandler _getPayloadHandlerV4; - public Task> engine_forkchoiceUpdatedV4(ForkchoiceStateV1 forkchoiceState, PayloadAttributes? payloadAttributes = null) - => ForkchoiceUpdated(forkchoiceState, payloadAttributes, EngineApiVersions.Prague); - public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) => NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Prague); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs index de8a61310e7..6c0af2004c8 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs @@ -49,7 +49,6 @@ public EngineRpcCapabilitiesProvider(ISpecProvider specProvider) #region Prague _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled, spec.DepositsEnabled || spec.WithdrawalRequestsEnabled); - _capabilities[nameof(IEngineRpcModule.engine_forkchoiceUpdatedV4)] = (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled, spec.DepositsEnabled || spec.WithdrawalRequestsEnabled); _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled, spec.DepositsEnabled || spec.WithdrawalRequestsEnabled); #endregion } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs index a19c5f95295..fc0e6578291 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs @@ -12,13 +12,6 @@ namespace Nethermind.Merge.Plugin; public partial interface IEngineRpcModule : IRpcModule { - - [JsonRpcMethod( - Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", - IsSharable = true, - IsImplemented = true)] - Task> engine_forkchoiceUpdatedV4(ForkchoiceStateV1 forkchoiceState, PayloadAttributes? payloadAttributes = null); - [JsonRpcMethod( Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", IsSharable = true, diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index 16924a1f56a..bc395df09d0 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -32,8 +32,7 @@ public OptimismBlockProcessor( ILogManager? logManager, IOPConfigHelper opConfigHelper, Create2DeployerContractRewriter contractRewriter, - IWithdrawalProcessor? withdrawalProcessor = null, - IDepositsProcessor? depositsProcessor = null) + IWithdrawalProcessor? withdrawalProcessor = null) : base(specProvider, blockValidator, rewardCalculator, blockTransactionsExecutor, stateProvider, receiptStorage, witnessCollector, logManager, withdrawalProcessor, OptimismReceiptsRootCalculator.Instance) { diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs index c98c38443aa..1b042da05ed 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs @@ -92,7 +92,6 @@ protected override BlockProcessor CreateBlockProcessor( logManager, _specHelper, new Create2DeployerContractRewriter(_specHelper, _specProvider, _blockTree), - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager)), - new DepositsProcessor()); + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager))); } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index c5dd79c2398..167d7ca4b2f 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -394,6 +394,10 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl { decoderContext.SkipItem(); // Skip withdrawals } + if (decoderContext.Position != blockCheck) + { + decoderContext.SkipItem(); // Skip requests + } if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) { decoderContext.Check(blockCheck); From da837a00e7f19df4fe8b3d4727298d06458c6ba6 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 15:48:50 +0200 Subject: [PATCH 186/551] limit maxSearch --- src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index 2f5b7b87778..7b97ddf52b6 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -73,7 +73,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder 0 && decoderContext.PeekPrefixAndContentLength().ContentLength == Hash256.Size) { From 2932882500532ac2cd5b2cc4e0b67f93f620bdd7 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 15:50:36 +0200 Subject: [PATCH 187/551] cosmetic cleanups --- src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index 7b97ddf52b6..64353dfa7c5 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -165,7 +165,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder 0 && rlpStream.PeekPrefixAndContentLength().ContentLength == Hash256.Size) { From 2b8734c2fdbfbc085bbdc4707d293e82486575bc Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 16:37:34 +0200 Subject: [PATCH 188/551] fix whitespaces --- .../Nethermind.Consensus.Clique/CliqueBlockProducer.cs | 2 +- src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs | 2 -- .../Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index 9e1751933db..bb1ee98924e 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -447,7 +447,7 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) selectedTxs, Array.Empty(), spec.WithdrawalsEnabled ? Enumerable.Empty() : null, - spec.DepositsEnabled || spec.IsEip7002Enabled ? Enumerable.Empty() : null + spec.DepositsEnabled || spec.IsEip7002Enabled ? Enumerable.Empty() : null ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index bc395df09d0..cba1831951a 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -4,12 +4,10 @@ using System; using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.Processing; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; using Nethermind.Core; -using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Evm.Tracing; using Nethermind.Logging; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs index 1b042da05ed..42df6a18aa3 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs @@ -7,7 +7,6 @@ using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; From 187f71327390b80628d6d42e78e6afde21a8d43c Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 17:24:37 +0200 Subject: [PATCH 189/551] cleanup chainspecLoader --- .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 42e854ebfe5..09ab3c3a807 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -418,7 +418,8 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec if (withdrawalsEnabled) genesisHeader.WithdrawalsRoot = Keccak.EmptyTreeHash; - if (depositsEnabled || withdrawalRequestsEnabled) + var requestsEnabled = depositsEnabled || withdrawalRequestsEnabled; + if (requestsEnabled) genesisHeader.RequestsRoot = Keccak.EmptyTreeHash; ; bool isEip4844Enabled = chainSpecJson.Params.Eip4844TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4844TransitionTimestamp; @@ -434,9 +435,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.ParentBeaconBlockRoot = Keccak.Zero; } - bool isEip7002Enabled = chainSpecJson.Params.Eip7002TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip7002TransitionTimestamp; - bool isEip6110Enabled = chainSpecJson.Params.Eip6110TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip6110TransitionTimestamp; - if (isEip6110Enabled || isEip7002Enabled) + if (requestsEnabled) { genesisHeader.ReceiptsRoot = Keccak.EmptyTreeHash; } @@ -450,7 +449,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec Array.Empty(), Array.Empty(), Array.Empty(), - depositsEnabled ? Array.Empty() : null); + requestsEnabled ? Array.Empty() : null); else { chainSpec.Genesis = new Block(genesisHeader); From 955fbca2163acc12ef9c71701e2b5f3a91af2547 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 29 Apr 2024 23:19:23 +0530 Subject: [PATCH 190/551] address PR comments --- .../Builders/BlockBuilder.cs | 2 +- .../Encoding/BlockDecoderTests.cs | 32 ++++++++- .../Encoding/ConsensusRequestDecoderTests.cs | 35 +++++++-- .../Encoding/DepositDecoderTests.cs | 71 ------------------- .../Encoding/WithdrwalRequestDecoderTests.cs | 47 ------------ src/Nethermind/Nethermind.Core/BlockBody.cs | 2 +- .../Nethermind.State/Proofs/RequestsTrie.cs | 2 +- 7 files changed, 64 insertions(+), 127 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs delete mode 100644 src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index 846e19ec80e..d41dde97017 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -296,7 +296,7 @@ public BlockBuilder WithConsensusRequests(int count) public BlockBuilder WithConsensusRequests(params ConsensusRequest[]? requests) { TestObjectInternal = TestObjectInternal - .WithReplacedBody(TestObjectInternal.Body.WithChangedDeposits(requests)); + .WithReplacedBody(TestObjectInternal.Body.WithChangedConsensusRequests(requests)); TestObjectInternal.Header.RequestsRoot = requests is null ? null diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 697a221d7b6..924481d1f8e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -8,6 +8,7 @@ using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; using Nethermind.Crypto; +using Nethermind.Evm.Tracing.GethStyle.Custom.JavaScript; using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Serialization.Rlp; @@ -42,6 +43,34 @@ public BlockDecoderTests() .TestObject; } + var requests = new ConsensusRequest[8]; + + for (var i = 0; i < requests.Length; i++) + { + if (i%2 == 0) + { + requests[i] = new Deposit() + { + Index = long.MaxValue, + PubKey = Keccak.EmptyTreeHash.ToBytes(), + Signature = Keccak.EmptyTreeHash.ToBytes(), + WithdrawalCredentials = Keccak.EmptyTreeHash.ToBytes(), + Amount = int.MaxValue + }; + } + else + { + byte[] validatorPubkey = new byte[48]; + validatorPubkey[11] = 11; + requests[i] = new WithdrawalRequest() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = validatorPubkey, + Amount = int.MaxValue + }; + } + } + _scenarios = new[] { Build.A.Block.WithNumber(1).TestObject, @@ -96,8 +125,7 @@ public BlockDecoderTests() .WithBlobGasUsed(ulong.MaxValue) .WithExcessBlobGas(ulong.MaxValue) .WithMixHash(Keccak.EmptyTreeHash) - // an empty requests array - .WithConsensusRequests(0) + .WithConsensusRequests(requests) .TestObject }; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs index f7bea2dbc0b..2d8969315d4 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs @@ -15,7 +15,7 @@ namespace Nethermind.Core.Test.Encoding; public class ConsensusRequestDecoderTests { [Test] - public void Should_decode_deposit() + public void Roundtrip_deposit() { ConsensusRequest deposit = new Deposit() { @@ -33,7 +33,7 @@ public void Should_decode_deposit() } [Test] - public void Should_decode_withdrawalRequest() + public void Roundtrip_withdrawalRequest() { byte[] validatorPubkey = new byte[48]; validatorPubkey[11] = 11; @@ -103,7 +103,7 @@ public void Should_encode_deposit_same_for_Rlp_Encode_and_DepositDecoder_Encode( WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue }; - byte[] rlp1 = new ConsensusRequestDecoder().Encode((Deposit)deposit).Bytes; + byte[] rlp1 = new ConsensusRequestDecoder().Encode(deposit).Bytes; byte[] rlp2 = Rlp.Encode(deposit).Bytes; rlp1.Should().BeEquivalentTo(rlp2); @@ -118,9 +118,36 @@ public void Should_encode_withdrawalRequest_same_for_Rlp_Encode_and_DepositDecod ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue }; - byte[] rlp1 = new ConsensusRequestDecoder().Encode((WithdrawalRequest)withdrawalRequest).Bytes; + byte[] rlp1 = new ConsensusRequestDecoder().Encode(withdrawalRequest).Bytes; byte[] rlp2 = Rlp.Encode(withdrawalRequest).Bytes; rlp1.Should().BeEquivalentTo(rlp2); } + + [Test] + public void Should_encode_ConsensusRequests_Array() + { + ConsensusRequest[] requests = new ConsensusRequest[] + { + new Deposit() + { + Index = long.MaxValue, + PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }, + new WithdrawalRequest() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + } + }; + + byte[] rlp = Rlp.Encode(requests).Bytes; + RlpStream rlpStream = new(rlp); + ConsensusRequest[] decoded = Rlp.DecodeArray(rlpStream); + decoded.Should().BeEquivalentTo(requests); + } } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs deleted file mode 100644 index bfb7266cde5..00000000000 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/DepositDecoderTests.cs +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using FluentAssertions; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Extensions; -using Nethermind.Evm.Tracing.GethStyle.Custom.JavaScript; -using Nethermind.Serialization.Rlp; -using NUnit.Framework; - -namespace Nethermind.Core.Test.Encoding; - -public class DepositDecoderTests -{ - [Test] - public void Should_decode() - { - Deposit Deposit = new() - { - Index = long.MaxValue, - PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue - }; - byte[] rlp = Rlp.Encode(Deposit).Bytes; - Deposit decoded = Rlp.Decode(rlp); - - decoded.Should().BeEquivalentTo(Deposit); - } - - [Test] - public void Should_decode_with_ValueDecoderContext() - { - Deposit Deposit = new() - { - Index = long.MaxValue, - PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue - }; - RlpStream stream = new(1024); - DepositDecoder codec = new(); - - codec.Encode(stream, Deposit); - - Rlp.ValueDecoderContext decoderContext = new(stream.Data.AsSpan()); - Deposit? decoded = codec.Decode(ref decoderContext); - - decoded.Should().BeEquivalentTo(Deposit); - } - - [Test] - public void Should_encode_same_for_Rlp_Encode_and_DepositDecoder_Encode() - { - Deposit Deposit = new() - { - Index = long.MaxValue, - PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue - }; - byte[] rlp1 = new DepositDecoder().Encode(Deposit).Bytes; - byte[] rlp2 = Rlp.Encode(Deposit).Bytes; - - rlp1.Should().BeEquivalentTo(rlp2); - } -} diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs deleted file mode 100644 index fdbe02149a6..00000000000 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/WithdrwalRequestDecoderTests.cs +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Test.Builders; -using Nethermind.Serialization.Rlp; -using NUnit.Framework; - -namespace Nethermind.Core.Test.Encoding; - -[TestFixture] -public class WithdrawalRequestsDecoderTests -{ - private static WithdrawalRequestDecoder _decoder = new(); - - [Test] - public void Roundtrip() - { - byte[] validatorPubkey = new byte[48]; - validatorPubkey[11] = 11; - WithdrawalRequest exit = new() - { - SourceAddress = TestItem.AddressA, - ValidatorPubkey = validatorPubkey, - Amount = 0 - }; - - Rlp encoded = _decoder.Encode(exit); - WithdrawalRequest decoded = _decoder.Decode(encoded.Bytes); - - Assert.That(decoded.SourceAddress, Is.EqualTo(TestItem.AddressA), "sourceAddress"); - Assert.That(decoded.ValidatorPubkey, Is.EqualTo(validatorPubkey), "validatorPubKey"); - } - - [Test] - public void GetLength_should_be_73() - { - byte[] validatorPubkey = new byte[48]; - WithdrawalRequest exit = new() - { - SourceAddress = TestItem.AddressA, - ValidatorPubkey = validatorPubkey, - Amount = 0 - }; - Assert.That(_decoder.GetLength(exit, RlpBehaviors.None), Is.EqualTo(73), "GetLength"); - } -} diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 0d7666001fe..26b918ef28f 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -23,7 +23,7 @@ public BlockBody() : this(null, null, null) { } public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals, Requests); public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals, Requests); - public BlockBody WithChangedDeposits(ConsensusRequest[]? consensusRequests) => new(Transactions, Uncles, Withdrawals, consensusRequests); + public BlockBody WithChangedConsensusRequests(ConsensusRequest[]? consensusRequests) => new(Transactions, Uncles, Withdrawals, consensusRequests); public static BlockBody WithOneTransactionOnly(Transaction tx) => new(new[] { tx }, null, null); diff --git a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs index 59e0b248219..fa4ef7dc7ba 100644 --- a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs @@ -27,7 +27,7 @@ protected override void Initialize(ConsensusRequest[] requests) foreach (ConsensusRequest exit in requests) { - Set(Rlp.Encode(key++).Bytes, _codec.Encode(exit).Bytes); + Set(Rlp.Encode(key++).Bytes, _codec.Encode(exit, RlpBehaviors.SkipTypedWrapping).Bytes); } } From f65c81f22754982f74c7e8d14f5b6d46b285d526 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 29 Apr 2024 23:21:08 +0530 Subject: [PATCH 191/551] nitpick --- .../Nethermind.Core.Test/Encoding/BlockDecoderTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 924481d1f8e..7f3e62f2ef3 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -47,7 +47,7 @@ public BlockDecoderTests() for (var i = 0; i < requests.Length; i++) { - if (i%2 == 0) + if (i % 2 == 0) { requests[i] = new Deposit() { From 8fd67b7fba39d74bf21c79b610051475293e7c20 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 29 Apr 2024 23:28:40 +0530 Subject: [PATCH 192/551] add decoder argumnet --- .../Encoding/ConsensusRequestDecoderTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs index 2d8969315d4..cd8cc3e5a43 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs @@ -147,7 +147,7 @@ public void Should_encode_ConsensusRequests_Array() byte[] rlp = Rlp.Encode(requests).Bytes; RlpStream rlpStream = new(rlp); - ConsensusRequest[] decoded = Rlp.DecodeArray(rlpStream); + ConsensusRequest[] decoded = Rlp.DecodeArray(rlpStream, new ConsensusRequestDecoder()); decoded.Should().BeEquivalentTo(requests); } } From 3c0a383046f0de182d1017aa403055a1848704c3 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 29 Apr 2024 21:57:58 +0200 Subject: [PATCH 193/551] make mainnet as a default deposit contract address --- src/Nethermind/Chains/foundation.json | 3 +-- src/Nethermind/Nethermind.Core/Eip6110Constants.cs | 10 ++++++++++ src/Nethermind/Nethermind.Core/Eip7002Constants.cs | 1 - .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 2 +- src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core/Eip6110Constants.cs diff --git a/src/Nethermind/Chains/foundation.json b/src/Nethermind/Chains/foundation.json index 032224ddb92..674e828bc20 100644 --- a/src/Nethermind/Chains/foundation.json +++ b/src/Nethermind/Chains/foundation.json @@ -190,8 +190,7 @@ "eip4844TransitionTimestamp": "0x65F1B057", "eip5656TransitionTimestamp": "0x65F1B057", "eip6780TransitionTimestamp": "0x65F1B057", - "terminalTotalDifficulty": "C70D808A128D7380000", - "depositContractAddress": "0x00000000219ab540356cbb839cbe05303d7705fa" + "terminalTotalDifficulty": "C70D808A128D7380000" }, "genesis": { "seal": { diff --git a/src/Nethermind/Nethermind.Core/Eip6110Constants.cs b/src/Nethermind/Nethermind.Core/Eip6110Constants.cs new file mode 100644 index 00000000000..d621af50d2f --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Eip6110Constants.cs @@ -0,0 +1,10 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core; + +public static class Eip6110Constants +{ + public static readonly Address MainnetDepositContractAddress = new("0x00000000219ab540356cbb839cbe05303d7705fa"); + +} diff --git a/src/Nethermind/Nethermind.Core/Eip7002Constants.cs b/src/Nethermind/Nethermind.Core/Eip7002Constants.cs index 045feda6f8b..b7f1ec1e36f 100644 --- a/src/Nethermind/Nethermind.Core/Eip7002Constants.cs +++ b/src/Nethermind/Nethermind.Core/Eip7002Constants.cs @@ -6,5 +6,4 @@ namespace Nethermind.Core; public static class Eip7002Constants { public static readonly Address WithdrawalRequestPredeployAddress = new("0x00A3ca265EBcb825B45F985A16CEFB49958cE017"); - } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 09ab3c3a807..e7d19cf847a 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -154,7 +154,7 @@ bool GetForInnerPathExistence(KeyValuePair o) => Eip1559Constants.DefaultBaseFeeMaxChangeDenominator, Eip6110TransitionTimestamp = chainSpecJson.Params.Eip6110TransitionTimestamp, - DepositContractAddress = chainSpecJson.Params.DepositContractAddress, + DepositContractAddress = chainSpecJson.Params.DepositContractAddress ?? Eip6110Constants.MainnetDepositContractAddress, Eip7002TransitionTimestamp = chainSpecJson.Params.Eip7002TransitionTimestamp, Eip7002ContractAddress = chainSpecJson.Params.Eip7002ContractAddress ?? Eip7002Constants.WithdrawalRequestPredeployAddress, Eip1559FeeCollector = chainSpecJson.Params.Eip1559FeeCollector, diff --git a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs index db5e4b697d0..2fa86e297de 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs @@ -29,7 +29,7 @@ protected Olympic() // The below addresses are added for all forks, but the given EIPs can be enabled at a specific timestamp or block. Eip7002ContractAddress = Eip7002Constants.WithdrawalRequestPredeployAddress; - + DepositContractAddress = Eip6110Constants.MainnetDepositContractAddress; } public static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Olympic()); From cce4c0f8dcca9787ab9b8ecf366f0f7e12c9a6a2 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 30 Apr 2024 12:44:11 +0530 Subject: [PATCH 194/551] add req array --- .../Builders/Build.Deposit.cs | 9 +++++ .../Builders/Build.WithdrawalRequest.cs | 9 +++++ .../Builders/WithdrawalRequestBuilder.cs | 33 +++++++++++++++++++ .../Encoding/BlockDecoderTests.cs | 26 +++++++-------- 4 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs new file mode 100644 index 00000000000..f8eda2c30dd --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core.Test.Builders; + +public partial class Build +{ + public DepositBuilder Deposit => new(); +} diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs new file mode 100644 index 00000000000..a6ac89905d4 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core.Test.Builders; + +public partial class Build +{ + public WithdrawalRequestBuilder WithdrawalRequest => new(); +} diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs new file mode 100644 index 00000000000..3382371eda6 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core.Test.Builders; +using Nethermind.Core.ConsensusRequests; + +public class WithdrawalRequestBuilder : BuilderBase +{ + public WithdrawalRequestBuilder() => TestObject = new(); + + + public WithdrawalRequestBuilder WithAmount(ulong amount) + { + TestObject.Amount = amount; + + return this; + } + + public WithdrawalRequestBuilder WithSourceAddress(Address sourceAddress) + { + TestObject.SourceAddress = sourceAddress; + + return this; + } + + public WithdrawalRequestBuilder WithValidatorPubkey(byte[] validatorPubkey) + { + TestObject.ValidatorPubkey = validatorPubkey; + + return this; + } + +} diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 7f3e62f2ef3..42a8d64cb1b 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -49,25 +49,23 @@ public BlockDecoderTests() { if (i % 2 == 0) { - requests[i] = new Deposit() - { - Index = long.MaxValue, - PubKey = Keccak.EmptyTreeHash.ToBytes(), - Signature = Keccak.EmptyTreeHash.ToBytes(), - WithdrawalCredentials = Keccak.EmptyTreeHash.ToBytes(), - Amount = int.MaxValue - }; + requests[i] = Build.A.Deposit + .WithIndex(long.MaxValue) + .WithPublicKey(new byte[] { (byte)i }) + .WithSignature(new byte[] { (byte)i }) + .WithWithdrawalCredentials(new byte[] { (byte)i }) + .WithAmount(int.MaxValue) + .TestObject; } else { byte[] validatorPubkey = new byte[48]; validatorPubkey[11] = 11; - requests[i] = new WithdrawalRequest() - { - SourceAddress = TestItem.AddressA, - ValidatorPubkey = validatorPubkey, - Amount = int.MaxValue - }; + requests[i] = Build.A.WithdrawalRequest + .WithSourceAddress(TestItem.AddressA) + .WithValidatorPubkey(validatorPubkey) + .WithAmount(int.MaxValue) + .TestObject; } } From aa7733d3ef98efeca4125d722e83e75ffbba8b95 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 30 Apr 2024 12:45:41 +0530 Subject: [PATCH 195/551] format files --- src/Nethermind/Nethermind.Core/Eip6110Constants.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Core/Eip6110Constants.cs b/src/Nethermind/Nethermind.Core/Eip6110Constants.cs index d621af50d2f..6fd77bc88b0 100644 --- a/src/Nethermind/Nethermind.Core/Eip6110Constants.cs +++ b/src/Nethermind/Nethermind.Core/Eip6110Constants.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only namespace Nethermind.Core; From 304f49752ecec56a05ea905a50caf55c5e0c34b1 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 30 Apr 2024 12:51:06 +0530 Subject: [PATCH 196/551] remove req arr --- .../Nethermind.Core.Test/Encoding/BlockDecoderTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 42a8d64cb1b..8488d52f9b8 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -123,7 +123,7 @@ public BlockDecoderTests() .WithBlobGasUsed(ulong.MaxValue) .WithExcessBlobGas(ulong.MaxValue) .WithMixHash(Keccak.EmptyTreeHash) - .WithConsensusRequests(requests) + .WithConsensusRequests(0) .TestObject }; } From 3e619d5afc6c3ee0973f56689d63c739867bb29c Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 30 Apr 2024 12:56:02 +0530 Subject: [PATCH 197/551] add req array --- .../Nethermind.Core.Test/Encoding/BlockDecoderTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 8488d52f9b8..42a8d64cb1b 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -123,7 +123,7 @@ public BlockDecoderTests() .WithBlobGasUsed(ulong.MaxValue) .WithExcessBlobGas(ulong.MaxValue) .WithMixHash(Keccak.EmptyTreeHash) - .WithConsensusRequests(0) + .WithConsensusRequests(requests) .TestObject }; } From 0c18a469bca54b2c9f7017046499a428223dd893 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 30 Apr 2024 11:23:19 +0200 Subject: [PATCH 198/551] validateHashes --- .../Nethermind.Consensus/Validators/BlockValidator.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 979baf57329..7b8ac3a49be 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -153,11 +153,11 @@ public bool ValidateSuggestedBlock(Block block, out string? errorMessage, bool v { return false; } + + if (!ValidateRequests(block, spec, out errorMessage)) + return false; } - if (!ValidateRequests(block, spec, out errorMessage)) - return false; - return true; } From 08bcb9e4beaa41053b365f2a3a094f89a44f55a7 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 30 Apr 2024 11:28:26 +0200 Subject: [PATCH 199/551] whitespaces? --- .../Nethermind.Consensus/Validators/BlockValidator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 7b8ac3a49be..2f4bacdb98a 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -153,7 +153,7 @@ public bool ValidateSuggestedBlock(Block block, out string? errorMessage, bool v { return false; } - + if (!ValidateRequests(block, spec, out errorMessage)) return false; } From 3b9465e53e397b17cdcd4103d061fb4e08560304 Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 30 Apr 2024 15:00:22 +0200 Subject: [PATCH 200/551] AUTHCALL gas cost tests --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 48 +++++++++++++++---- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 0bc05ccd88c..95ce3bf00e2 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -562,8 +562,33 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft Assert.That(new Address(resultE.ToArray()), Is.EqualTo(TestItem.AddressD)); } - [TestCase(1)] - public void ExecuteAUTHCALL_(int expectedCost) + public static IEnumerable AUTHCALLCases() + { + yield return new object[] + { + //Cold access address + TestItem.AddressE, + 0, + 2600 + }; + yield return new object[] + { + //Warm access address + TestItem.AddressF, + 0, + 100 + }; + yield return new object[] + { + //Warm access address + TestItem.AddressF, + 1, + 6700 + 100 + }; + } + + [TestCaseSource(nameof(AUTHCALLCases))] + public void ExecuteAUTHCALL_(Address target, int valueToSend, int expectedCost) { var signer = TestItem.PrivateKeyF; var authority = TestItem.AddressF; @@ -594,9 +619,9 @@ public void ExecuteAUTHCALL_(int expectedCost) .PushData(0) .PushData(0) .PushData(0) + .PushData(valueToSend) + .PushData(target) .PushData(0) - .PushData(TestItem.AddressC) - .PushData(1000000) .Done; var codeWithAuthCall = code.Concat( @@ -664,11 +689,12 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() [Test] - public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebit() + public void ExecuteAUTHCALL_SendingMoreThanSignerBalance_SignerBalanceIsDebited() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); + Address receivingAddress = TestItem.AddressC; byte[] code = Prepare.EvmCode .PushData(data[..32]) .Op(Instruction.PUSH0) @@ -694,8 +720,8 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebit() .PushData(0) .PushData(0) .PushData(0) - .PushData(2.Ether()) - .PushData(TestItem.AddressC) + .PushData(1.Ether() + 1) + .PushData(receivingAddress) .PushData(1000000) .Op(Instruction.AUTHCALL) .Done; @@ -704,14 +730,16 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebit() Execute(code); - var addressBalance = TestState.GetBalance(signer.Address); + var signerBalance = TestState.GetBalance(signer.Address); + var receiverBalance = TestState.GetBalance(receivingAddress); - Assert.That(addressBalance, Is.EqualTo(1.Ether())); + Assert.That(signerBalance, Is.EqualTo(1.Ether())); + Assert.That(receiverBalance, Is.EqualTo((UInt256)0)); } [Test] - public void ExecuteAUTHCALL_SignerHasCodeDeployed_() + public void ExecuteAUTHCALL_SignerHasCodeDeployed_CorrectErrorIsReturned() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); From 06b3f0ac6c4d2a3b5fc04de5a359b1b57ff69fba Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 1 May 2024 12:26:42 +0200 Subject: [PATCH 201/551] OOG when gaslimit is higher than available --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 131 ++++++++++++++++-- .../VirtualMachineTestsBase.cs | 8 ++ src/Nethermind/Nethermind.Evm/GasCostOf.cs | 1 + .../Nethermind.Evm/VirtualMachine.cs | 15 +- 4 files changed, 138 insertions(+), 17 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 95ce3bf00e2..929289e5326 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -562,33 +562,33 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft Assert.That(new Address(resultE.ToArray()), Is.EqualTo(TestItem.AddressD)); } - public static IEnumerable AUTHCALLCases() + public static IEnumerable AUTHCALLGasCases() { yield return new object[] { //Cold access address - TestItem.AddressE, + TestItem.GetRandomAddress(), 0, - 2600 + 2600, }; yield return new object[] { //Warm access address TestItem.AddressF, 0, - 100 + 100, }; yield return new object[] { //Warm access address TestItem.AddressF, 1, - 6700 + 100 + 6700 + 100, }; } - [TestCaseSource(nameof(AUTHCALLCases))] - public void ExecuteAUTHCALL_(Address target, int valueToSend, int expectedCost) + [TestCaseSource(nameof(AUTHCALLGasCases))] + public void ExecuteAUTHCALL_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorrectAmountOfGas(Address target, int valueToSend, int expectedCost) { var signer = TestItem.PrivateKeyF; var authority = TestItem.AddressF; @@ -621,7 +621,7 @@ public void ExecuteAUTHCALL_(Address target, int valueToSend, int expectedCost) .PushData(0) .PushData(valueToSend) .PushData(target) - .PushData(0) + .PushData(10000000) .Done; var codeWithAuthCall = code.Concat( @@ -640,7 +640,113 @@ public void ExecuteAUTHCALL_(Address target, int valueToSend, int expectedCost) Assert.That(resultWithAuthCall.GasSpent - result.GasSpent, Is.EqualTo(expectedCost)); } - + + [TestCase(1000000, 30000, 30000 - GasCostOf.Gas)] + //If gas limit is 0, all gas should be forwarded remaining after the AUTHCALL ops and 63/64 rule + [TestCase(1000000, 0, 970631 - 970631 / 64 - GasCostOf.Gas)] + [TestCase(1000000, 970631 - 970631 / 64, 970631 - 970631 / 64 - GasCostOf.Gas)] + public void ExecuteAUTHCALL_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsForwarded(long gasLimit, long gasToSend, long expectedGasInSubcall) + { + var signer = TestItem.PrivateKeyF; + var authority = TestItem.AddressF; + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(authority) + .Op(Instruction.AUTH) + + //Just throw away the result + .POP() + + //AUTHCALL params + .PushData(32) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.AddressC) + .PushData(gasToSend) + .Op(Instruction.AUTHCALL) + .PushSingle(32) + .PushSingle(0) + .Op(Instruction.RETURN) + .Done; + + var codeStoreGas = Prepare.EvmCode + .GAS() + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushSingle(32) + .Op(Instruction.PUSH0) + .Op(Instruction.RETURN) + .Done; + + TestState.CreateAccount(TestItem.AddressC, 0); + TestState.InsertCode(TestItem.AddressC, Keccak.Compute(codeStoreGas), codeStoreGas, Spec); + + var result = ExecuteAndTrace(gasLimit, code); + + Assert.That(new UInt256(result.ReturnValue, true), Is.EqualTo((UInt256)expectedGasInSubcall)); + } + + [TestCase(1000000000)] + //Set gas limit to exactly remaining gas after AUTHCALL + 1 + [TestCase(970631 - 970631 / 64 + 1)] + public void ExecuteAUTHCALL_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(long gasLimit) + { + var signer = TestItem.PrivateKeyF; + var authority = TestItem.AddressF; + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //AUTH params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(authority) + .Op(Instruction.AUTH) + + //Just throw away the result + .POP() + + //AUTHCALL params + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.GetRandomAddress()) + .PushData(gasLimit) + .Op(Instruction.AUTHCALL) + .Done; + + var result = Execute(code); + + Assert.That(result.Error, Is.EqualTo(EvmExceptionType.OutOfGas.ToString())); + } + [Test] public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() { @@ -668,7 +774,7 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() .POP() //AUTHCALL params - .PushData(20) + .PushData(0) .PushData(0) .PushData(0) .PushData(0) @@ -687,9 +793,8 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() Assert.That(addressBalance, Is.EqualTo(1.Ether() - 1.GWei())); } - [Test] - public void ExecuteAUTHCALL_SendingMoreThanSignerBalance_SignerBalanceIsDebited() + public void ExecuteAUTHCALL_SendingMoreThanSignerBalance_SignerBalanceIsSame() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); @@ -737,7 +842,6 @@ public void ExecuteAUTHCALL_SendingMoreThanSignerBalance_SignerBalanceIsDebited( Assert.That(receiverBalance, Is.EqualTo((UInt256)0)); } - [Test] public void ExecuteAUTHCALL_SignerHasCodeDeployed_CorrectErrorIsReturned() { @@ -793,7 +897,6 @@ public void ExecuteAUTHCALL_SignerHasCodeDeployed_CorrectErrorIsReturned() Assert.That(result.Error, Is.EqualTo(EvmExceptionType.BadInstruction.ToString())); } - private byte[] CreateSignedCommitMessage(PrivateKey signer) { return CreateSignedCommitMessage( diff --git a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs index da4554f0314..c0b38c7c896 100644 --- a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs +++ b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs @@ -90,6 +90,14 @@ protected GethLikeTxTrace ExecuteAndTrace(long blockNumber, long gasLimit, param return tracer.BuildResult(); } + protected GethLikeTxTrace ExecuteAndTrace(long gasLimit, params byte[] code) + { + GethLikeTxMemoryTracer tracer = new(GethTraceOptions.Default); + (Block block, Transaction transaction) = PrepareTx(Activation, gasLimit, code); + _processor.Execute(transaction, block.Header, tracer); + return tracer.BuildResult(); + } + protected GethLikeTxTrace ExecuteAndTraceToFile(Action dumpCallback, byte[] code, GethTraceOptions options) { GethLikeTxFileTracer tracer = new(dumpCallback, options); diff --git a/src/Nethermind/Nethermind.Evm/GasCostOf.cs b/src/Nethermind/Nethermind.Evm/GasCostOf.cs index 8e8587e8ec9..d8e5c83bef0 100644 --- a/src/Nethermind/Nethermind.Evm/GasCostOf.cs +++ b/src/Nethermind/Nethermind.Evm/GasCostOf.cs @@ -63,5 +63,6 @@ public static class GasCostOf public const long TLoad = WarmStateRead; // eip-1153 public const long TStore = WarmStateRead; // eip-1153 public const long Auth = 3100; // eip-3074 + public const long Gas = Base; } } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 6313ce64866..e191789af42 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -1697,7 +1697,7 @@ private CallResult ExecuteCode( !UpdateMemoryCost(vmState, ref gasAvailable, in outputOffset, outputLength) || !UpdateGas(gasExtra, ref gasAvailable)) return EvmExceptionType.OutOfGas; - if (spec.Use63Over64Rule) + else if (spec.Use63Over64Rule) { - gasLimit = UInt256.Min((UInt256)(gasAvailable - gasAvailable / 64), gasLimit); + var sixtyFourthDeducted = (UInt256)(gasAvailable - gasAvailable / 64); + if (instruction == Instruction.AUTHCALL && sixtyFourthDeducted < gasLimit) + { + //AUTHCALL forwards all, if gas param is zero + if (gasLimit == 0) + gasLimit = sixtyFourthDeducted; + else + return EvmExceptionType.OutOfGas; + } + gasLimit = UInt256.Min(sixtyFourthDeducted, gasLimit); } if (gasLimit >= long.MaxValue) return EvmExceptionType.OutOfGas; From 5fc13d77257d78e7866e06ffb33c6955dbda7da5 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 1 May 2024 12:28:37 +0200 Subject: [PATCH 202/551] small fix --- src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs | 3 +-- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 929289e5326..26d6a490825 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -708,7 +708,6 @@ public void ExecuteAUTHCALL_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsFor public void ExecuteAUTHCALL_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(long gasLimit) { var signer = TestItem.PrivateKeyF; - var authority = TestItem.AddressF; var data = CreateSignedCommitMessage(signer); byte[] code = Prepare.EvmCode @@ -725,7 +724,7 @@ public void ExecuteAUTHCALL_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(lon //AUTH params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) - .PushData(authority) + .PushData(signer.Address) .Op(Instruction.AUTH) //Just throw away the result diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index e191789af42..660e919681e 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2381,7 +2381,7 @@ private EvmExceptionType InstructionCall( !UpdateMemoryCost(vmState, ref gasAvailable, in outputOffset, outputLength) || !UpdateGas(gasExtra, ref gasAvailable)) return EvmExceptionType.OutOfGas; - else if (spec.Use63Over64Rule) + if (spec.Use63Over64Rule) { var sixtyFourthDeducted = (UInt256)(gasAvailable - gasAvailable / 64); if (instruction == Instruction.AUTHCALL && sixtyFourthDeducted < gasLimit) From 1767023c48eaea05673f6883b482cee3aad6ac29 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 1 May 2024 12:36:16 +0200 Subject: [PATCH 203/551] fix --- src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs | 2 +- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 26d6a490825..16405c7d765 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -779,7 +779,7 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() .PushData(0) .PushData(1.GWei()) .PushData(TestItem.AddressC) - .PushData(1000000) + .PushData(0) .Op(Instruction.AUTHCALL) .Done; diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 660e919681e..12c7a8d10ec 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2384,12 +2384,12 @@ private EvmExceptionType InstructionCall( if (spec.Use63Over64Rule) { var sixtyFourthDeducted = (UInt256)(gasAvailable - gasAvailable / 64); - if (instruction == Instruction.AUTHCALL && sixtyFourthDeducted < gasLimit) + if (instruction == Instruction.AUTHCALL) { //AUTHCALL forwards all, if gas param is zero if (gasLimit == 0) gasLimit = sixtyFourthDeducted; - else + else if(sixtyFourthDeducted < gasLimit) return EvmExceptionType.OutOfGas; } gasLimit = UInt256.Min(sixtyFourthDeducted, gasLimit); From fd9b8e75c0a816f2796a9f593872a8a6cc84631f Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 1 May 2024 12:52:22 +0200 Subject: [PATCH 204/551] test fxes --- src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 16405c7d765..e9beedebd93 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -399,8 +399,7 @@ public void ExecuteAuth_AUTHExpandsMemory_GasCostIsAUTHPlusMemoryExpansionAndCol [Test] public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_SignerIsReturned() { - var signer = TestItem.PrivateKeyB; - var authority = TestItem.AddressB; + var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); byte[] code = Prepare.EvmCode @@ -417,7 +416,7 @@ public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_Sign //AUTH params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) - .PushData(authority) + .PushData(signer.Address) .Op(Instruction.AUTH) //Just throw away the result @@ -430,7 +429,7 @@ public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_Sign .PushData(0) .PushData(0) .PushData(TestItem.AddressC) - .PushData(1000000) + .PushData(0) .Op(Instruction.AUTHCALL) .PushSingle(20) .PushSingle(0) @@ -452,7 +451,7 @@ public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_Sign var result = Execute(code); - Assert.That(new Address(result.ReturnValue), Is.EqualTo(TestItem.AddressB)); + Assert.That(new Address(result.ReturnValue), Is.EqualTo(signer.Address)); } [Test] @@ -615,13 +614,13 @@ public void ExecuteAUTHCALL_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorr .POP() //AUTHCALL params - .PushData(20) + .PushData(0) .PushData(0) .PushData(0) .PushData(0) .PushData(valueToSend) .PushData(target) - .PushData(10000000) + .PushData(0) .Done; var codeWithAuthCall = code.Concat( From b167087d6e20f69d57b40a0691d3682133b6fe4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Moraczy=C5=84ski?= Date: Wed, 1 May 2024 13:13:36 +0200 Subject: [PATCH 205/551] Update src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs Co-authored-by: Ayman Bouchareb --- .../Nethermind.Consensus/Validators/BlockValidator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 2f4bacdb98a..e75af677db4 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -304,7 +304,7 @@ public bool ValidateRequests(Block block, out string? error) => private bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) { - if ((spec.DepositsEnabled || spec.IsEip7002Enabled) && block.Requests is null) + if ((spec.DepositsEnabled || spec.WithdrawalRequestsEnabled) && block.Requests is null) { error = BlockErrorMessages.MissingRequests; From 921f069244e8e707ce5009d1ce013756560a9c83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Moraczy=C5=84ski?= Date: Wed, 1 May 2024 13:13:42 +0200 Subject: [PATCH 206/551] Update src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs Co-authored-by: Ayman Bouchareb --- .../Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 5ffaeb4e6b2..931ccf031c5 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -23,7 +23,7 @@ public ConsensusRequestsProcessor() } public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) { - if (spec.IsEip6110Enabled == false && spec.IsEip7002Enabled == false) + if (!spec.DepositsEnabled && !spec.WithdrawalRequestsEnabled) return; List requestsList = []; From dab892c22cff74938cd4214c851bdfb2c3de279d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Moraczy=C5=84ski?= Date: Wed, 1 May 2024 13:13:48 +0200 Subject: [PATCH 207/551] Update src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs Co-authored-by: Ayman Bouchareb --- .../Nethermind.Consensus.Clique/CliqueBlockProducer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index bb1ee98924e..df609bc507e 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -447,7 +447,7 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) selectedTxs, Array.Empty(), spec.WithdrawalsEnabled ? Enumerable.Empty() : null, - spec.DepositsEnabled || spec.IsEip7002Enabled ? Enumerable.Empty() : null + spec.DepositsEnabled || spec.WithdrawalRequestsEnabled ? Enumerable.Empty() : null ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; From 999c5edd6edab543980350ef2f4d89926d39cfa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Moraczy=C5=84ski?= Date: Wed, 1 May 2024 13:13:55 +0200 Subject: [PATCH 208/551] Update src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs Co-authored-by: Ayman Bouchareb --- .../Nethermind.Consensus/Validators/BlockValidator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index e75af677db4..538da307a0f 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -313,7 +313,7 @@ private bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) return false; } - if (!spec.DepositsEnabled && !spec.IsEip7002Enabled && block.Requests is not null) + if (!spec.DepositsEnabled && !spec.WithdrawalRequestsEnabled && block.Requests is not null) { error = BlockErrorMessages.RequestsNotEnabled; From 81cfb80a6a9b12032c9b6f7d5e05ed69cf6d8a3c Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 1 May 2024 13:48:25 +0200 Subject: [PATCH 209/551] Review fixes --- src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs | 3 +++ src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs | 1 + .../Nethermind.Consensus.Clique/CliqueBlockProducer.cs | 2 +- .../Nethermind.Consensus/Validators/BlockValidator.cs | 4 ++-- .../Nethermind.Core.Test/Builders/BlockBuilder.cs | 7 ------- .../Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs | 2 +- .../Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs | 4 ++-- src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs | 2 ++ .../Nethermind.Merge.Plugin/Data/ExecutionPayload.cs | 2 +- .../Handlers/EngineRpcCapabilitiesProvider.cs | 4 ++-- 10 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs index da1d5474b5d..5dbbf03656e 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs @@ -8,6 +8,7 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Int256; +using NUnit.Framework; namespace Ethereum.Test.Base { @@ -36,6 +37,8 @@ public class GeneralStateTest : IEthereumTest public UInt256? ParentBlobGasUsed { get; set; } public UInt256? ParentExcessBlobGas { get; set; } + public Hash256? RequestsRoot { get; set; } + public override string ToString() { return $"{Path.GetFileName(Category)}.{Name}_{ForkName}"; diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index 9a88c5273bd..43bd643273d 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -97,6 +97,7 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) header.WithdrawalsRoot = test.CurrentWithdrawalsRoot; header.ParentBeaconBlockRoot = test.CurrentBeaconRoot; header.ExcessBlobGas = 0; + header.RequestsRoot = test.RequestsRoot; Stopwatch stopwatch = Stopwatch.StartNew(); TxValidator? txValidator = new((MainnetSpecProvider.Instance.ChainId)); diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index df609bc507e..53d798834a8 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -447,7 +447,7 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) selectedTxs, Array.Empty(), spec.WithdrawalsEnabled ? Enumerable.Empty() : null, - spec.DepositsEnabled || spec.WithdrawalRequestsEnabled ? Enumerable.Empty() : null + spec.ConsensusRequestsEnabled ? Enumerable.Empty() : null ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 538da307a0f..bb2ce244b2d 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -304,7 +304,7 @@ public bool ValidateRequests(Block block, out string? error) => private bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) { - if ((spec.DepositsEnabled || spec.WithdrawalRequestsEnabled) && block.Requests is null) + if (spec.ConsensusRequestsEnabled && block.Requests is null) { error = BlockErrorMessages.MissingRequests; @@ -313,7 +313,7 @@ private bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) return false; } - if (!spec.DepositsEnabled && !spec.WithdrawalRequestsEnabled && block.Requests is not null) + if (!spec.ConsensusRequestsEnabled && block.Requests is not null) { error = BlockErrorMessages.RequestsNotEnabled; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index d41dde97017..c8596e8021e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -215,13 +215,6 @@ public BlockBuilder WithWithdrawalsRoot(Hash256? withdrawalsRoot) return this; } - public BlockBuilder WithDepositRoot(Hash256? depositsRoot) - { - TestObjectInternal.Header.RequestsRoot = depositsRoot; - - return this; - } - public BlockBuilder WithBloom(Bloom bloom) { TestObjectInternal.Header.Bloom = bloom; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs index 3728015647f..81d12c7a463 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs @@ -196,7 +196,7 @@ public BlockHeaderBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRo return this; } - public BlockHeaderBuilder WithDepositsRoot(Hash256? requestsRoot) + public BlockHeaderBuilder WithRequestsRoot(Hash256? requestsRoot) { TestObjectInternal.RequestsRoot = requestsRoot; return this; diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs index 35257199340..587f3476ccb 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs @@ -166,7 +166,7 @@ public void Can_encode_decode_with_WithdrawalRequestRoot() .WithBlobGasUsed(0) .WithExcessBlobGas(0) .WithParentBeaconBlockRoot(TestItem.KeccakB) - .WithDepositsRoot(Keccak.Zero).TestObject; + .WithRequestsRoot(Keccak.Zero).TestObject; Rlp rlp = Rlp.Encode(header); BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); @@ -184,7 +184,7 @@ public void Can_encode_decode_with_ValidatorExitRoot_equals_to_null() .WithBlobGasUsed(0) .WithExcessBlobGas(0) .WithParentBeaconBlockRoot(TestItem.KeccakB) - .WithDepositsRoot(Keccak.Zero).TestObject; + .WithRequestsRoot(Keccak.Zero).TestObject; Rlp rlp = Rlp.Encode(header); BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index cef10f1222b..64cb983cbf1 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -376,5 +376,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool IsBeaconBlockRootAvailable => IsEip4788Enabled; public bool MCopyIncluded => IsEip5656Enabled; public bool BlobBaseFeeEnabled => IsEip4844Enabled; + + public bool ConsensusRequestsEnabled => WithdrawalRequestsEnabled || DepositsEnabled; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index aa5305eb6ef..c44fc8d7b58 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -217,7 +217,7 @@ public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, o return ValidationResult.Fail; } - if (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled) + if (spec.ConsensusRequestsEnabled) { error = "ExecutionPayloadV4 expected"; return ValidationResult.Fail; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs index 6c0af2004c8..9ee6de6c260 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs @@ -48,8 +48,8 @@ public EngineRpcCapabilitiesProvider(ISpecProvider specProvider) #endregion #region Prague - _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled, spec.DepositsEnabled || spec.WithdrawalRequestsEnabled); - _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled, spec.DepositsEnabled || spec.WithdrawalRequestsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.ConsensusRequestsEnabled, spec.ConsensusRequestsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.ConsensusRequestsEnabled, spec.ConsensusRequestsEnabled); #endregion } From 04083ffb25228008288faf5e5af0f9cc1cecd2d1 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 1 May 2024 14:12:05 +0200 Subject: [PATCH 210/551] fix incorrect target --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 32 +++++++------------ .../Nethermind.Evm/VirtualMachine.cs | 4 +-- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index e9beedebd93..670ca5ebee9 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -457,8 +457,7 @@ public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_Sign [Test] public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAfterAuthCallAndDelegateCall_ContractAddressIsReturned() { - var signer = TestItem.PrivateKeyB; - var authority = TestItem.AddressB; + var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); byte[] code = Prepare.EvmCode @@ -475,31 +474,28 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft //AUTH params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) - .PushData(authority) + .PushData(signer.Address) .Op(Instruction.AUTH) //Just throw away the result .POP() //AUTHCALL params - .PushData(20) + .PushData(0) .PushData(0) .PushData(0) .PushData(0) .PushData(0) .PushData(TestItem.AddressC) - .PushData(1000000) + .PushData(0) .Op(Instruction.AUTHCALL) - //.PushSingle(20) - //.PushSingle(0) - //.Op(Instruction.RETURN) .Done; byte[] firstCallCode = Prepare.EvmCode .CALLER() .Op(Instruction.PUSH0) .Op(Instruction.SSTORE) - .PushData(20) + .PushData(0) .PushData(0) .PushData(0) .PushData(0) @@ -507,16 +503,13 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft .PushData(TestItem.AddressD) .PushData(1000000) .Op(Instruction.CALL) - //.PushSingle(20) - //.PushSingle(0) - //.Op(Instruction.RETURN) .Done; byte[] secondCallCode = Prepare.EvmCode .CALLER() .Op(Instruction.PUSH0) .Op(Instruction.SSTORE) - .PushData(20) + .PushData(0) .PushData(0) .PushData(0) .PushData(0) @@ -524,9 +517,6 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft .PushData(TestItem.AddressE) .PushData(1000000) .Op(Instruction.CALL) - //.PushSingle(20) - //.PushSingle(0) - //.Op(Instruction.RETURN) .Done; //Store caller in slot 0 @@ -750,7 +740,7 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); - + Address receiver = TestItem.AddressC; byte[] code = Prepare.EvmCode .PushData(data[..32]) .Op(Instruction.PUSH0) @@ -777,7 +767,7 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() .PushData(0) .PushData(0) .PushData(1.GWei()) - .PushData(TestItem.AddressC) + .PushData(receiver) .PushData(0) .Op(Instruction.AUTHCALL) .Done; @@ -786,9 +776,11 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() Execute(code); - var addressBalance = TestState.GetBalance(signer.Address); + var signerBalance = TestState.GetBalance(signer.Address); + var receiverBalance = TestState.GetBalance(receiver); - Assert.That(addressBalance, Is.EqualTo(1.Ether() - 1.GWei())); + Assert.That(signerBalance, Is.EqualTo(1.Ether() - 1.GWei())); + Assert.That(receiverBalance, Is.EqualTo(1.GWei())); } [Test] diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 12c7a8d10ec..86aec2112f7 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2347,7 +2347,7 @@ private EvmExceptionType InstructionCall( _ => env.ExecutingAccount }; - Address target = instruction is Instruction.CALL or Instruction.STATICCALL + Address target = instruction is Instruction.CALL or Instruction.STATICCALL or Instruction.AUTHCALL ? codeSource : env.ExecutingAccount; @@ -2383,7 +2383,7 @@ private EvmExceptionType InstructionCall( if (spec.Use63Over64Rule) { - var sixtyFourthDeducted = (UInt256)(gasAvailable - gasAvailable / 64); + UInt256 sixtyFourthDeducted = (UInt256)(gasAvailable - gasAvailable / 64); if (instruction == Instruction.AUTHCALL) { //AUTHCALL forwards all, if gas param is zero From 707364f46049cd070fdc753e616473ec36078ff4 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 1 May 2024 16:12:02 +0200 Subject: [PATCH 211/551] small naming refactor and test fix --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 129 +++++++++--------- src/Nethermind/Nethermind.Evm/GasCostOf.cs | 1 + .../Nethermind.Evm/VirtualMachine.cs | 2 +- 3 files changed, 68 insertions(+), 64 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 670ca5ebee9..5f2b79b5a79 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -23,7 +23,7 @@ public class Eip3074Tests : VirtualMachineTestsBase protected override TestAllTracerWithOutput CreateTracer() => new() { IsTracingAccess = false }; - public static IEnumerable AuthorityCases() + public static IEnumerable AuthorityCombinationCases() { yield return new object[] { TestItem.PrivateKeyB, TestItem.AddressB, 0x1 }; yield return new object[] { TestItem.PrivateKeyC, TestItem.AddressC, 0x1 }; @@ -31,7 +31,7 @@ public static IEnumerable AuthorityCases() yield return new object[] { TestItem.PrivateKeyD, TestItem.AddressC, 0x0 }; } - [TestCaseSource(nameof(AuthorityCases))] + [TestCaseSource(nameof(AuthorityCombinationCases))] public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(PrivateKey signer, Address authority, int expected) { var data = CreateSignedCommitMessage(signer); @@ -50,13 +50,13 @@ public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(Pr .PushSingle(96) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(authority) .Op(Instruction.AUTH) - //Return the result of AUTH + //Return the result of Auth .Op(Instruction.PUSH0) .Op(Instruction.MSTORE8) .PushSingle(1) @@ -121,13 +121,13 @@ public void ExecuteAuth_OneOfMessageArgsIsWrong_ReturnsZero(byte magicNumber, by .PushSingle(96) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(signer.Address) .Op(Instruction.AUTH) - //Return the result of AUTH + //Return the result of Auth .Op(Instruction.PUSH0) .Op(Instruction.MSTORE8) .PushSingle(1) @@ -162,13 +162,13 @@ public void ExecuteAuth_CommitDataIsWrong_ReturnsZero() .PushSingle(96) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(signer.Address) .Op(Instruction.AUTH) - //Return the result of AUTH + //Return the result of Auth .Op(Instruction.PUSH0) .Op(Instruction.MSTORE8) .PushSingle(1) @@ -205,13 +205,13 @@ public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsExpected(boo .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(authority) .Op(Instruction.AUTH) - //Return the result of AUTH + //Return the result of Auth .Op(Instruction.PUSH0) .Op(Instruction.MSTORE8) .PushSingle(1) @@ -243,7 +243,7 @@ public void ExecuteAuth_InvalidAuthorityAfterValidHasBeenSet_CorrectErrorIsRetur .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(authority) @@ -294,13 +294,13 @@ public void ExecuteAuth_ParamLengthIsLessOrGreaterThanValidSignature_ReturnsExpe .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)paramLength) .Op(Instruction.PUSH0) .PushData(authority) .Op(Instruction.AUTH) - //Return the result of AUTH + //Return the result of Auth .Op(Instruction.PUSH0) .Op(Instruction.MSTORE8) .PushSingle(1) @@ -331,13 +331,13 @@ public void ExecuteAuth_SignatureIsInvalid_ReturnsZero() .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(TestItem.AddressA) .Op(Instruction.AUTH) - //Return the result of AUTH + //Return the result of Auth .Op(Instruction.PUSH0) .Op(Instruction.MSTORE8) .PushSingle(1) @@ -354,7 +354,7 @@ public void ExecuteAuth_SignatureIsInvalid_ReturnsZero() [TestCase(160, GasCostOf.Auth + GasCostOf.Memory + GasCostOf.ColdAccountAccess)] [TestCase(192, GasCostOf.Auth + GasCostOf.Memory * 2 + GasCostOf.ColdAccountAccess)] [TestCase(193, GasCostOf.Auth + GasCostOf.Memory * 3 + GasCostOf.ColdAccountAccess)] - public void ExecuteAuth_AUTHExpandsMemory_GasCostIsAUTHPlusMemoryExpansionAndColdAccountAccess(int authMemoryLength, long expectedGas) + public void ExecuteAuth_AuthExpandsMemory_GasCostIsAuthPlusMemoryExpansionAndColdAccountAccess(int authMemoryLength, long expectedGas) { var data = CreateSignedCommitMessage(TestItem.PrivateKeyF); @@ -397,7 +397,7 @@ public void ExecuteAuth_AUTHExpandsMemory_GasCostIsAUTHPlusMemoryExpansionAndCol } [Test] - public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_SignerIsReturned() + public void ExecuteAuthCall_TransactionReturnsTheCurrentCallerAfterAuthCall_SignerIsReturned() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); @@ -413,7 +413,7 @@ public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_Sign .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(signer.Address) @@ -422,7 +422,7 @@ public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_Sign //Just throw away the result .POP() - //AUTHCALL params + //AuthCall params .PushData(20) .PushData(0) .PushData(0) @@ -455,7 +455,7 @@ public void ExecuteAUTHCALL_TransactionReturnsTheCurrentCallerAfterAuthCall_Sign } [Test] - public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAfterAuthCallAndDelegateCall_ContractAddressIsReturned() + public void ExecuteAuthCallAndDELEGATECALL_TransactionReturnsTheCurrentCallerAfterAuthCallAndDelegateCall_ContractAddressIsReturned() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); @@ -471,7 +471,7 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(signer.Address) @@ -480,7 +480,7 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft //Just throw away the result .POP() - //AUTHCALL params + //AuthCall params .PushData(0) .PushData(0) .PushData(0) @@ -551,33 +551,33 @@ public void ExecuteAUTHCALLAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft Assert.That(new Address(resultE.ToArray()), Is.EqualTo(TestItem.AddressD)); } - public static IEnumerable AUTHCALLGasCases() + public static IEnumerable AuthCallGasCases() { - yield return new object[] - { - //Cold access address - TestItem.GetRandomAddress(), - 0, - 2600, - }; - yield return new object[] - { - //Warm access address - TestItem.AddressF, - 0, - 100, - }; + //yield return new object[] + //{ + // //Cold access address + // TestItem.GetRandomAddress(), + // 0, + // GasCostOf.ColdAccountAccess, + //}; + //yield return new object[] + //{ + // //Warm access address + // TestItem.AddressF, + // 0, + // GasCostOf.WarmStateRead, + //}; yield return new object[] { //Warm access address TestItem.AddressF, 1, - 6700 + 100, + GasCostOf.AuthCallValue + GasCostOf.WarmStateRead, }; } - [TestCaseSource(nameof(AUTHCALLGasCases))] - public void ExecuteAUTHCALL_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorrectAmountOfGas(Address target, int valueToSend, int expectedCost) + [TestCaseSource(nameof(AuthCallGasCases))] + public void ExecuteAuthCall_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorrectAmountOfGas(Address target, long valueToSend, long expectedCost) { var signer = TestItem.PrivateKeyF; var authority = TestItem.AddressF; @@ -594,7 +594,7 @@ public void ExecuteAUTHCALL_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorr .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(authority) @@ -603,7 +603,7 @@ public void ExecuteAUTHCALL_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorr //Just throw away the result .POP() - //AUTHCALL params + //AuthCall params .PushData(0) .PushData(0) .PushData(0) @@ -618,6 +618,8 @@ public void ExecuteAUTHCALL_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorr .Op(Instruction.AUTHCALL) .Done).ToArray(); + TestState.CreateAccount(signer.Address, 1.Ether()); + TestState.CreateAccount(TestItem.AddressC, 0); TestState.InsertCode(TestItem.AddressC, Keccak.Compute(code), code, Spec); @@ -631,10 +633,10 @@ public void ExecuteAUTHCALL_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorr } [TestCase(1000000, 30000, 30000 - GasCostOf.Gas)] - //If gas limit is 0, all gas should be forwarded remaining after the AUTHCALL ops and 63/64 rule + //If gas limit is 0, all gas should be forwarded remaining after the AuthCall ops and 63/64 rule [TestCase(1000000, 0, 970631 - 970631 / 64 - GasCostOf.Gas)] [TestCase(1000000, 970631 - 970631 / 64, 970631 - 970631 / 64 - GasCostOf.Gas)] - public void ExecuteAUTHCALL_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsForwarded(long gasLimit, long gasToSend, long expectedGasInSubcall) + public void ExecuteAuthCall_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsForwarded(long gasLimit, long gasToSend, long expectedGasInSubcall) { var signer = TestItem.PrivateKeyF; var authority = TestItem.AddressF; @@ -651,7 +653,7 @@ public void ExecuteAUTHCALL_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsFor .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(authority) @@ -660,7 +662,7 @@ public void ExecuteAUTHCALL_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsFor //Just throw away the result .POP() - //AUTHCALL params + //AuthCall params .PushData(32) .PushData(0) .PushData(0) @@ -692,9 +694,9 @@ public void ExecuteAUTHCALL_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsFor } [TestCase(1000000000)] - //Set gas limit to exactly remaining gas after AUTHCALL + 1 + //Set gas limit to exactly remaining gas after AuthCall + 1 [TestCase(970631 - 970631 / 64 + 1)] - public void ExecuteAUTHCALL_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(long gasLimit) + public void ExecuteAuthCall_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(long gasLimit) { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); @@ -710,7 +712,7 @@ public void ExecuteAUTHCALL_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(lon .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(signer.Address) @@ -719,7 +721,7 @@ public void ExecuteAUTHCALL_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(lon //Just throw away the result .POP() - //AUTHCALL params + //AuthCall params .PushData(0) .PushData(0) .PushData(0) @@ -736,11 +738,12 @@ public void ExecuteAUTHCALL_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(lon } [Test] - public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() + public void ExecuteAuthCall_1GweiIsSent_SignerIsDebitedAndReceiverCredited() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); - Address receiver = TestItem.AddressC; + Address receiver = TestItem.GetRandomAddress(); + UInt256 valueToSend = 1.GWei(); byte[] code = Prepare.EvmCode .PushData(data[..32]) .Op(Instruction.PUSH0) @@ -752,7 +755,7 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(signer.Address) @@ -761,12 +764,12 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() //Just throw away the result .POP() - //AUTHCALL params + //AuthCall params .PushData(0) .PushData(0) .PushData(0) .PushData(0) - .PushData(1.GWei()) + .PushData(valueToSend) .PushData(receiver) .PushData(0) .Op(Instruction.AUTHCALL) @@ -779,12 +782,12 @@ public void ExecuteAUTHCALL_1GweiIsSent_SignerBalanceIsDebited() var signerBalance = TestState.GetBalance(signer.Address); var receiverBalance = TestState.GetBalance(receiver); - Assert.That(signerBalance, Is.EqualTo(1.Ether() - 1.GWei())); - Assert.That(receiverBalance, Is.EqualTo(1.GWei())); + Assert.That(signerBalance, Is.EqualTo(1.Ether() - valueToSend)); + Assert.That(receiverBalance, Is.EqualTo(valueToSend)); } [Test] - public void ExecuteAUTHCALL_SendingMoreThanSignerBalance_SignerBalanceIsSame() + public void ExecuteAuthCall_SendingMoreThanSignerBalance_SignerBalanceIsSame() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); @@ -801,7 +804,7 @@ public void ExecuteAUTHCALL_SendingMoreThanSignerBalance_SignerBalanceIsSame() .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(signer.Address) @@ -810,7 +813,7 @@ public void ExecuteAUTHCALL_SendingMoreThanSignerBalance_SignerBalanceIsSame() //Just throw away the result .POP() - //AUTHCALL params + //AuthCall params .PushData(20) .PushData(0) .PushData(0) @@ -833,7 +836,7 @@ public void ExecuteAUTHCALL_SendingMoreThanSignerBalance_SignerBalanceIsSame() } [Test] - public void ExecuteAUTHCALL_SignerHasCodeDeployed_CorrectErrorIsReturned() + public void ExecuteAuthCall_SignerHasCodeDeployed_CorrectErrorIsReturned() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); @@ -849,7 +852,7 @@ public void ExecuteAUTHCALL_SignerHasCodeDeployed_CorrectErrorIsReturned() .PushSingle(64) .Op(Instruction.MSTORE) - //AUTH params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(signer.Address) @@ -858,7 +861,7 @@ public void ExecuteAUTHCALL_SignerHasCodeDeployed_CorrectErrorIsReturned() //Just throw away the result .POP() - //AUTHCALL params + //AuthCall params .PushData(20) .PushData(0) .PushData(0) diff --git a/src/Nethermind/Nethermind.Evm/GasCostOf.cs b/src/Nethermind/Nethermind.Evm/GasCostOf.cs index d8e5c83bef0..55f1f7ce571 100644 --- a/src/Nethermind/Nethermind.Evm/GasCostOf.cs +++ b/src/Nethermind/Nethermind.Evm/GasCostOf.cs @@ -63,6 +63,7 @@ public static class GasCostOf public const long TLoad = WarmStateRead; // eip-1153 public const long TStore = WarmStateRead; // eip-1153 public const long Auth = 3100; // eip-3074 + public const long AuthCallValue = CallValue - CallStipend; // eip-3074 public const long Gas = Base; } } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 86aec2112f7..830f2ac3714 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2364,7 +2364,7 @@ private EvmExceptionType InstructionCall( if (!transferValue.IsZero) { - gasExtra += instruction == Instruction.AUTHCALL ? GasCostOf.CallValue - GasCostOf.CallStipend : GasCostOf.CallValue; + gasExtra += instruction == Instruction.AUTHCALL ? GasCostOf.AuthCallValue : GasCostOf.CallValue; } if (!spec.ClearEmptyAccountWhenTouched && !_state.AccountExists(target)) From 1e4cc94a919a6c0b4ce506dcd29f204927535932 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 1 May 2024 18:18:29 +0200 Subject: [PATCH 212/551] EXTCODESIZE check in AUTH instead --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 92 ++++++++----------- .../Nethermind.Evm/VirtualMachine.cs | 16 ++-- 2 files changed, 42 insertions(+), 66 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 5f2b79b5a79..9f873a6239b 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -25,10 +25,10 @@ public class Eip3074Tests : VirtualMachineTestsBase public static IEnumerable AuthorityCombinationCases() { - yield return new object[] { TestItem.PrivateKeyB, TestItem.AddressB, 0x1 }; - yield return new object[] { TestItem.PrivateKeyC, TestItem.AddressC, 0x1 }; - yield return new object[] { TestItem.PrivateKeyC, TestItem.AddressD, 0x0 }; - yield return new object[] { TestItem.PrivateKeyD, TestItem.AddressC, 0x0 }; + yield return new object[] { TestItem.PrivateKeyF, TestItem.AddressF, 0x1 }; + yield return new object[] { TestItem.PrivateKeyE, TestItem.AddressE, 0x1 }; + yield return new object[] { TestItem.PrivateKeyF, TestItem.AddressE, 0x0 }; + yield return new object[] { TestItem.PrivateKeyE, TestItem.AddressF, 0x0 }; } [TestCaseSource(nameof(AuthorityCombinationCases))] @@ -104,7 +104,7 @@ public static IEnumerable BadMessageDataCases() [TestCaseSource(nameof(BadMessageDataCases))] public void ExecuteAuth_OneOfMessageArgsIsWrong_ReturnsZero(byte magicNumber, byte[] chainId, byte[] nonce, byte[] address) { - PrivateKey signer = TestItem.PrivateKeyB; + PrivateKey signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer, magicNumber, chainId, nonce, address, new byte[32]); byte[] code = Prepare.EvmCode @@ -143,7 +143,7 @@ public void ExecuteAuth_OneOfMessageArgsIsWrong_ReturnsZero(byte magicNumber, by [Test] public void ExecuteAuth_CommitDataIsWrong_ReturnsZero() { - PrivateKey signer = TestItem.PrivateKeyB; + PrivateKey signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); //Start index of commit data[65] = 0x1; @@ -185,14 +185,12 @@ public void ExecuteAuth_CommitDataIsWrong_ReturnsZero() [TestCase(false, 1)] public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsExpected(bool incrementNonce, int expected) { - var signer = TestItem.PrivateKeyB; - var authority = TestItem.AddressB; - + var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); - TestState.CreateAccount(TestItem.AddressB, 1.Ether()); + TestState.CreateAccount(signer.Address, 1.Ether()); if (incrementNonce) - TestState.IncrementNonce(TestItem.AddressB); + TestState.IncrementNonce(signer.Address); byte[] code = Prepare.EvmCode .PushData(data[..32]) @@ -208,7 +206,7 @@ public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsExpected(boo //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) - .PushData(authority) + .PushData(signer.Address) .Op(Instruction.AUTH) //Return the result of Auth @@ -227,9 +225,7 @@ public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsExpected(boo [Test] public void ExecuteAuth_InvalidAuthorityAfterValidHasBeenSet_CorrectErrorIsReturned() { - var signer = TestItem.PrivateKeyB; - var authority = TestItem.AddressB; - + var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); byte[] code = Prepare.EvmCode @@ -246,13 +242,13 @@ public void ExecuteAuth_InvalidAuthorityAfterValidHasBeenSet_CorrectErrorIsRetur //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) - .PushData(authority) + .PushData(signer.Address) .Op(Instruction.AUTH) //Wrong authority .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) - .PushData(TestItem.AddressF) + .PushData(TestItem.GetRandomAddress()) .Op(Instruction.AUTH) .PushData(20) @@ -278,9 +274,7 @@ public void ExecuteAuth_InvalidAuthorityAfterValidHasBeenSet_CorrectErrorIsRetur [TestCase(0, 0)] public void ExecuteAuth_ParamLengthIsLessOrGreaterThanValidSignature_ReturnsExpected(int paramLength, int expected) { - var signer = TestItem.PrivateKeyB; - var authority = TestItem.AddressB; - + var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); byte[] code = Prepare.EvmCode @@ -297,7 +291,7 @@ public void ExecuteAuth_ParamLengthIsLessOrGreaterThanValidSignature_ReturnsExpe //Auth params .PushSingle((UInt256)paramLength) .Op(Instruction.PUSH0) - .PushData(authority) + .PushData(signer.Address) .Op(Instruction.AUTH) //Return the result of Auth @@ -553,20 +547,20 @@ public void ExecuteAuthCallAndDELEGATECALL_TransactionReturnsTheCurrentCallerAft public static IEnumerable AuthCallGasCases() { - //yield return new object[] - //{ - // //Cold access address - // TestItem.GetRandomAddress(), - // 0, - // GasCostOf.ColdAccountAccess, - //}; - //yield return new object[] - //{ - // //Warm access address - // TestItem.AddressF, - // 0, - // GasCostOf.WarmStateRead, - //}; + yield return new object[] + { + //Cold access address + TestItem.GetRandomAddress(), + 0, + GasCostOf.ColdAccountAccess, + }; + yield return new object[] + { + //Warm access address + TestItem.AddressF, + 0, + GasCostOf.WarmStateRead, + }; yield return new object[] { //Warm access address @@ -580,7 +574,6 @@ public static IEnumerable AuthCallGasCases() public void ExecuteAuthCall_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorrectAmountOfGas(Address target, long valueToSend, long expectedCost) { var signer = TestItem.PrivateKeyF; - var authority = TestItem.AddressF; var data = CreateSignedCommitMessage(signer); byte[] code = Prepare.EvmCode @@ -597,7 +590,7 @@ public void ExecuteAuthCall_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorr //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) - .PushData(authority) + .PushData(signer.Address) .Op(Instruction.AUTH) //Just throw away the result @@ -639,7 +632,6 @@ public void ExecuteAuthCall_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorr public void ExecuteAuthCall_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsForwarded(long gasLimit, long gasToSend, long expectedGasInSubcall) { var signer = TestItem.PrivateKeyF; - var authority = TestItem.AddressF; var data = CreateSignedCommitMessage(signer); byte[] code = Prepare.EvmCode @@ -656,7 +648,7 @@ public void ExecuteAuthCall_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsFor //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) - .PushData(authority) + .PushData(signer.Address) .Op(Instruction.AUTH) //Just throw away the result @@ -693,10 +685,11 @@ public void ExecuteAuthCall_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsFor Assert.That(new UInt256(result.ReturnValue, true), Is.EqualTo((UInt256)expectedGasInSubcall)); } - [TestCase(1000000000)] + [TestCase(1000000000, EvmExceptionType.OutOfGas)] //Set gas limit to exactly remaining gas after AuthCall + 1 - [TestCase(970631 - 970631 / 64 + 1)] - public void ExecuteAuthCall_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(long gasLimit) + [TestCase(70631 - 70631 / 64 + 1, EvmExceptionType.OutOfGas)] + [TestCase(70631 - 70631 / 64, null)] + public void ExecuteAuthCall_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(long gasLimit, EvmExceptionType? expectedErrorType) { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); @@ -734,7 +727,7 @@ public void ExecuteAuthCall_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(lon var result = Execute(code); - Assert.That(result.Error, Is.EqualTo(EvmExceptionType.OutOfGas.ToString())); + Assert.That(result.Error, Is.EqualTo(expectedErrorType?.ToString())); } [Test] @@ -857,19 +850,6 @@ public void ExecuteAuthCall_SignerHasCodeDeployed_CorrectErrorIsReturned() .Op(Instruction.PUSH0) .PushData(signer.Address) .Op(Instruction.AUTH) - - //Just throw away the result - .POP() - - //AuthCall params - .PushData(20) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(2.Ether()) - .PushData(TestItem.AddressC) - .PushData(1000000) - .Op(Instruction.AUTHCALL) .Done; var signerCode = Prepare.EvmCode diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 830f2ac3714..055f38c50a3 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2192,6 +2192,10 @@ private EvmExceptionType InstructionAuth(EvmState vmState, if (!stack.PopUInt256(out UInt256 offset)) return EvmExceptionType.StackUnderflow; if (!stack.PopUInt256(out UInt256 length)) return EvmExceptionType.StackUnderflow; + if (_state.IsContract(authority)) + //TODO maybe a specific exception is better? + return EvmExceptionType.BadInstruction; + gasAvailable -= GasCostOf.Auth; if (!UpdateMemoryCost(vmState, ref gasAvailable, offset, length)) @@ -2299,17 +2303,9 @@ private EvmExceptionType InstructionCall( instruction == Instruction.STATICCALL && !spec.StaticCallEnabled || instruction == Instruction.AUTHCALL && !spec.AuthCallsEnabled) return EvmExceptionType.BadInstruction; - if (instruction == Instruction.AUTHCALL) + if (instruction == Instruction.AUTHCALL && vmState.Authorized is null) { - if (vmState.Authorized is null) - { - return EvmExceptionType.AuthorizedNotSet; - } - else if (_state.IsContract(vmState.Authorized)) - { - //TODO maybe a specific exception is better? - return EvmExceptionType.BadInstruction; - } + return EvmExceptionType.AuthorizedNotSet; } if (!stack.PopUInt256(out UInt256 gasLimit)) return EvmExceptionType.StackUnderflow; From 84d1f13e8212dbd8b197ba7bc6b7c2ed44264008 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 1 May 2024 19:47:37 +0200 Subject: [PATCH 213/551] AUTH code check set failure --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 69 ++++++++++++++++--- .../Nethermind.Evm/VirtualMachine.cs | 7 +- 2 files changed, 65 insertions(+), 11 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 9f873a6239b..ab66bce179f 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -829,7 +829,7 @@ public void ExecuteAuthCall_SendingMoreThanSignerBalance_SignerBalanceIsSame() } [Test] - public void ExecuteAuthCall_SignerHasCodeDeployed_CorrectErrorIsReturned() + public void ExecuteAuthCall_SignerHasCodeDeployed_AuthorizedHasNotBeenSet() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); @@ -850,16 +850,20 @@ public void ExecuteAuthCall_SignerHasCodeDeployed_CorrectErrorIsReturned() .Op(Instruction.PUSH0) .PushData(signer.Address) .Op(Instruction.AUTH) + + //AuthCall params + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.GetRandomAddress()) + .PushData(0) + .Op(Instruction.AUTHCALL) .Done; var signerCode = Prepare.EvmCode - .CALLDATASIZE() - .Op(Instruction.PUSH0) - .Op(Instruction.PUSH0) - .CALLDATACOPY() - .CALLDATASIZE() - .Op(Instruction.PUSH0) - .Op(Instruction.RETURN) + .Op(Instruction.STOP) .Done; TestState.CreateAccount(signer.Address, 0); @@ -867,7 +871,54 @@ public void ExecuteAuthCall_SignerHasCodeDeployed_CorrectErrorIsReturned() var result = Execute(code); - Assert.That(result.Error, Is.EqualTo(EvmExceptionType.BadInstruction.ToString())); + Assert.That(result.Error, Is.EqualTo(EvmExceptionType.AuthorizedNotSet.ToString())); + } + + [Test] + public void ExecuteAuthCall_AuthCallIsCalledTwice_AuthorizedIsStillSet() + { + var signer = TestItem.PrivateKeyF; + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //Auth params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(signer.Address) + .Op(Instruction.AUTH) + + //AuthCall params + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.GetRandomAddress()) + .PushData(0) + .Op(Instruction.AUTHCALL) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.GetRandomAddress()) + .PushData(0) + .Op(Instruction.AUTHCALL) + .Done; + + var result = Execute(code); + + Assert.That(result.Error, Is.EqualTo(null)); } private byte[] CreateSignedCommitMessage(PrivateKey signer) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 055f38c50a3..86aac620dc4 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2193,8 +2193,11 @@ private EvmExceptionType InstructionAuth(EvmState vmState, if (!stack.PopUInt256(out UInt256 length)) return EvmExceptionType.StackUnderflow; if (_state.IsContract(authority)) - //TODO maybe a specific exception is better? - return EvmExceptionType.BadInstruction; + { + vmState.Authorized = null; + stack.PushUInt256(0); + return EvmExceptionType.None; + } gasAvailable -= GasCostOf.Auth; From 2a17a6947fed49ed09ca9f19af055742f3d594d7 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 2 May 2024 07:55:25 +0200 Subject: [PATCH 214/551] better parameter order --- .../Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs | 1 - .../Nethermind.Consensus/Processing/BlockProcessor.cs | 4 ++-- .../Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs | 1 - .../Nethermind.Core.Test/Blockchain/TestBlockchain.cs | 1 - .../Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs | 1 - .../Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs | 1 - src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs | 3 ++- 7 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 0c4c287566a..2bc80c38ef6 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -55,7 +55,6 @@ public AuRaBlockProcessor(ISpecProvider specProvider, NullWitnessCollector.Instance, logManager, withdrawalProcessor, - null, consensusRequestsProcessor) { _specProvider = specProvider; diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 3f8124b0cfb..56b6f3ab7f6 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -61,8 +61,8 @@ public BlockProcessor(ISpecProvider? specProvider, IWitnessCollector? witnessCollector, ILogManager? logManager, IWithdrawalProcessor? withdrawalProcessor = null, - IReceiptsRootCalculator? receiptsRootCalculator = null, - IConsensusRequestsProcessor? consensusRequestsProcessor = null) + IConsensusRequestsProcessor? consensusRequestsProcessor = null, + IReceiptsRootCalculator? receiptsRootCalculator = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index 9328e4991a8..10e9841f978 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -148,7 +148,6 @@ protected virtual BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv re NullWitnessCollector.Instance, logManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager)), - null, _consensusRequestsProcessor); } diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index a77e51cf7f7..9f5bd8d9260 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -361,7 +361,6 @@ protected virtual IBlockProcessor CreateBlockProcessor() => NullWitnessCollector.Instance, LogManager, null, - null, ConsensusRequestsProcessor); public async Task WaitForNewHead() diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 09441f89fd9..4cc5320852f 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -144,7 +144,6 @@ protected override IBlockProcessor CreateBlockProcessor() NullWitnessCollector.Instance, LogManager, WithdrawalProcessor, - null, ConsensusRequestsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 719b164ddfc..9ae135cb222 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -253,7 +253,6 @@ protected override IBlockProcessor CreateBlockProcessor() NullWitnessCollector.Instance, LogManager, WithdrawalProcessor, - null, ConsensusRequestsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index cba1831951a..b1163393e3f 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -32,7 +32,8 @@ public OptimismBlockProcessor( Create2DeployerContractRewriter contractRewriter, IWithdrawalProcessor? withdrawalProcessor = null) : base(specProvider, blockValidator, rewardCalculator, blockTransactionsExecutor, - stateProvider, receiptStorage, witnessCollector, logManager, withdrawalProcessor, OptimismReceiptsRootCalculator.Instance) + stateProvider, receiptStorage, witnessCollector, logManager, withdrawalProcessor, + receiptsRootCalculator: OptimismReceiptsRootCalculator.Instance) { ArgumentNullException.ThrowIfNull(stateProvider); _contractRewriter = contractRewriter; From 37b489b4cd3073aeecfb137e6f0e01943d36aced Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 2 May 2024 08:47:04 +0200 Subject: [PATCH 215/551] fix grammatic --- .../Nethermind.Consensus/Messages/BlockErrorMessages.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index cda3c0325d9..6e7e74d9399 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -117,7 +117,7 @@ public static string InvalidTxInBlock(int i) => public const string NegativeGasUsed = "NegativeGasUsed: Cannot be negative."; - public static string MissingRequests => "MissingRequests: Requests cannot be null in block when EIP-6110 or EIP-7002 activated."; - public static string RequestsNotEnabled => "RequestsNotEnabled: Requests must be null in block when EIP-6110 and EIP-7002 not activated."; + public static string MissingRequests => "MissingRequests: Requests cannot be null in block when EIP-6110 or EIP-7002 are activated."; + public static string RequestsNotEnabled => "RequestsNotEnabled: Requests must be null in block when EIP-6110 and EIP-7002 are not activated."; public static string InvalidRequestsRoot(Hash256? expected, Hash256? actual) => $"InvalidRequestsRoot: Requests root hash mismatch in block: expected {expected}, got {actual}"; } From 278f873901005de3f9fbd38c99009c0fc8971ef1 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 2 May 2024 08:50:08 +0200 Subject: [PATCH 216/551] Optimize creating `ConsensusRequest` --- .../Requests/ConsensusRequestsProcessor.cs | 25 +++++-------- .../Requests/DepositsProcessor.cs | 34 +++++++++--------- .../Requests/IDepositsProcessor.cs | 2 +- .../Requests/IWithdrawalRequestsProcessor.cs | 3 +- .../Requests/WithdrawalRequestsProcessor.cs | 35 ++++++++----------- .../Extensions/UInt64Extensions.cs | 9 +++-- .../DepositDecoder.cs | 2 ++ .../Nethermind.State/Proofs/WithdrawalTrie.cs | 2 +- 8 files changed, 54 insertions(+), 58 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 931ccf031c5..ebc258446d9 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -2,7 +2,9 @@ // SPDX-License-Identifier: LGPL-3.0-only using System.Collections.Generic; +using System.Linq; using Nethermind.Core; +using Nethermind.Core.Collections; using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -13,30 +15,21 @@ namespace Nethermind.Consensus.Requests; public class ConsensusRequestsProcessor : IConsensusRequestsProcessor { - private readonly WithdrawalRequestsProcessor _withdrawalRequestsProcessor; - private readonly IDepositsProcessor _depositsProcessor; + private readonly WithdrawalRequestsProcessor _withdrawalRequestsProcessor = new(); + private readonly IDepositsProcessor _depositsProcessor = new DepositsProcessor(); - public ConsensusRequestsProcessor() - { - _withdrawalRequestsProcessor = new WithdrawalRequestsProcessor(); - _depositsProcessor = new DepositsProcessor(); - } public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) { if (!spec.DepositsEnabled && !spec.WithdrawalRequestsEnabled) return; - List requestsList = []; - // Process deposits - List? deposits = _depositsProcessor.ProcessDeposits(block, receipts, spec); - if (deposits is { Count: > 0 }) - requestsList.AddRange(deposits); + using ArrayPoolList requestsList = new(receipts.Length * 2); - WithdrawalRequest[]? withdrawalRequests = _withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state, block); - if (withdrawalRequests is { Length: > 0 }) - requestsList.AddRange(withdrawalRequests); + // Process deposits + requestsList.AddRange(_depositsProcessor.ProcessDeposits(block, receipts, spec)); + requestsList.AddRange(_withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state, block)); - ConsensusRequest[]? requests = requestsList.ToArray(); + ConsensusRequest[] requests = requestsList.ToArray(); Hash256 root = new RequestsTrie(requests).RootHash; block.Body.Requests = requests; block.Header.RequestsRoot = root; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 442a1ea1e9b..75edf824c22 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -11,28 +11,30 @@ namespace Nethermind.Consensus.Requests; public class DepositsProcessor : IDepositsProcessor { - public List? ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) + public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { - if (!spec.DepositsEnabled) - return null; - - List depositList = []; - - for (int i = 0; i < block.Transactions.Length; i++) + if (spec.DepositsEnabled) { - LogEntry[]? logEntries = receipts[i].Logs; - if (logEntries != null) - foreach (LogEntry? log in logEntries) + DepositDecoder depositDecoder = DepositDecoder.Instance; + for (int i = 0; i < receipts.Length; i++) + { + LogEntry[]? logEntries = receipts[i].Logs; + if (logEntries is not null) { - if (log != null && log.LoggersAddress == spec.DepositContractAddress) + for (int index = 0; index < logEntries.Length; index++) { - var depositDecoder = new DepositDecoder(); - Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); - depositList.Add(deposit); + LogEntry log = logEntries[index]; + if (log.LoggersAddress == spec.DepositContractAddress) + { + Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); + if (deposit is not null) + { + yield return deposit; + } + } } } + } } - - return depositList; } } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs index f4826c4ef75..f73cdaa4556 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs @@ -10,5 +10,5 @@ namespace Nethermind.Consensus.Requests; public interface IDepositsProcessor { - List? ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec); + IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs index 24751ef8698..af378131da4 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Specs; @@ -10,5 +11,5 @@ namespace Nethermind.Consensus.Requests; public interface IWithdrawalRequestsProcessor { - WithdrawalRequest[]? ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state, Block block); + IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state, Block block); } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index df4be095d58..3d4b85b88c0 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -2,9 +2,11 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; using System.Linq; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Int256; @@ -24,24 +26,16 @@ public class WithdrawalRequestsProcessor : IWithdrawalRequestsProcessor private static readonly UInt256 TargetWithdrawalRequestsPerBlock = 2; // Will be moved to system transaction - public WithdrawalRequest[]? ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state, Block block) + public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state, Block block) { - if (spec.IsEip7002Enabled == false) - return null; + if (!spec.IsEip7002Enabled) + yield break; Address eip7002Account = spec.Eip7002ContractAddress; if (!state.AccountExists(eip7002Account)) - return Array.Empty(); + yield break; - WithdrawalRequest[] exits = DequeueWithdrawalRequests(spec, state); - UpdateExcessExits(spec, state); - ResetExitCount(spec, state); - return exits; - } - - // Reads validator exit information from the precompile - private WithdrawalRequest[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldState state) - { + // Reads validator exit information from the precompile StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueHeadStorageSlot); StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueTailStorageSlot); @@ -51,7 +45,6 @@ private WithdrawalRequest[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldS UInt256 numInQueue = queueTailIndex - queueHeadIndex; UInt256 numDequeued = UInt256.Min(numInQueue, MaxWithdrawalRequestsPerBlock); - var withdrawalRequests = new WithdrawalRequest[(int)numDequeued]; for (UInt256 i = 0; i < numDequeued; ++i) { UInt256 queueStorageSlot = WithdrawalRequestQueueStorageOffset + (queueHeadIndex + i) * 3; @@ -59,12 +52,11 @@ private WithdrawalRequest[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldS StorageCell validatorAddressFirstCell = new(spec.Eip7002ContractAddress, queueStorageSlot + 1); StorageCell validatorAddressSecondCell = new(spec.Eip7002ContractAddress, queueStorageSlot + 2); Address sourceAddress = new(state.Get(sourceAddressCell)[..20].ToArray()); - byte[] validatorPubkey = - state.Get(validatorAddressFirstCell)[..32].ToArray() - .Concat(state.Get(validatorAddressSecondCell)[..16].ToArray()) - .ToArray(); - ulong amount = state.Get(validatorAddressSecondCell)[16..24].ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(); // ToDo write tests to extension method - withdrawalRequests[(int)i] = new WithdrawalRequest { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey, Amount = amount }; + byte[] validatorPubKey = new byte[48]; + state.Get(validatorAddressFirstCell)[..32].CopyTo(validatorPubKey[..32]); + state.Get(validatorAddressSecondCell)[..16].CopyTo(validatorPubKey[32..]); + ulong amount = state.Get(validatorAddressSecondCell)[16..24].ToULongFromBigEndianByteArrayWithoutLeadingZeros(); // ToDo write tests to extension method + yield return new WithdrawalRequest { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubKey, Amount = amount }; } UInt256 newQueueHeadIndex = queueHeadIndex + numDequeued; @@ -78,7 +70,8 @@ private WithdrawalRequest[] DequeueWithdrawalRequests(IReleaseSpec spec, IWorldS state.Set(queueHeadIndexCell, newQueueHeadIndex.ToBigEndian()); } - return withdrawalRequests; + UpdateExcessExits(spec, state); + ResetExitCount(spec, state); } private void UpdateExcessExits(IReleaseSpec spec, IWorldState state) diff --git a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs index cc6a65e5991..9c1c0bf0f13 100644 --- a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs +++ b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs @@ -1,13 +1,18 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; + namespace Nethermind.Core.Extensions; public static class UInt64Extensions { - public static ulong ToULongFromBigEndianByteArrayWithoutLeadingZeros(this byte[]? bytes) + public static ulong ToULongFromBigEndianByteArrayWithoutLeadingZeros(this byte[]? bytes) => + ToULongFromBigEndianByteArrayWithoutLeadingZeros(bytes.AsSpan()); + + public static ulong ToULongFromBigEndianByteArrayWithoutLeadingZeros(this ReadOnlySpan bytes) { - if (bytes is null) + if (bytes.IsEmpty) { return 0L; } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs index cc8ee86113e..b9cfdb4cdb8 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -7,6 +7,8 @@ namespace Nethermind.Serialization.Rlp; public class DepositDecoder : IRlpStreamDecoder, IRlpValueDecoder { + public static DepositDecoder Instance { get; } = new(); + public Deposit? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) diff --git a/src/Nethermind/Nethermind.State/Proofs/WithdrawalTrie.cs b/src/Nethermind/Nethermind.State/Proofs/WithdrawalTrie.cs index 144eaa018ee..c9bf10a1142 100644 --- a/src/Nethermind/Nethermind.State/Proofs/WithdrawalTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/WithdrawalTrie.cs @@ -17,7 +17,7 @@ public class WithdrawalTrie : PatriciaTrie /// /// The withdrawals to build the trie of. - public WithdrawalTrie(Withdrawal[] withdrawals, bool canBuildProof = false) + public WithdrawalTrie(Withdrawal[]? withdrawals, bool canBuildProof = false) : base(withdrawals, canBuildProof) => ArgumentNullException.ThrowIfNull(withdrawals); protected override void Initialize(Withdrawal[] withdrawals) From 1fb51663d615f1efe263708a1f9e0b6990dad345 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 2 May 2024 08:50:52 +0200 Subject: [PATCH 217/551] refactor BlockValidator a bit --- .../Validators/BlockValidator.cs | 144 ++++++++---------- 1 file changed, 61 insertions(+), 83 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index bb2ce244b2d..d9bf10b4527 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -21,27 +21,19 @@ namespace Nethermind.Consensus.Validators; -public class BlockValidator : IBlockValidator +public class BlockValidator( + ITxValidator? txValidator, + IHeaderValidator? headerValidator, + IUnclesValidator? unclesValidator, + ISpecProvider? specProvider, + ILogManager? logManager) + : IBlockValidator { - private readonly IHeaderValidator _headerValidator; - private readonly ITxValidator _txValidator; - private readonly IUnclesValidator _unclesValidator; - private readonly ISpecProvider _specProvider; - private readonly ILogger _logger; - - public BlockValidator( - ITxValidator? txValidator, - IHeaderValidator? headerValidator, - IUnclesValidator? unclesValidator, - ISpecProvider? specProvider, - ILogManager? logManager) - { - _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - _txValidator = txValidator ?? throw new ArgumentNullException(nameof(txValidator)); - _unclesValidator = unclesValidator ?? throw new ArgumentNullException(nameof(unclesValidator)); - _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); - _headerValidator = headerValidator ?? throw new ArgumentNullException(nameof(headerValidator)); - } + private readonly IHeaderValidator _headerValidator = headerValidator ?? throw new ArgumentNullException(nameof(headerValidator)); + private readonly ITxValidator _txValidator = txValidator ?? throw new ArgumentNullException(nameof(txValidator)); + private readonly IUnclesValidator _unclesValidator = unclesValidator ?? throw new ArgumentNullException(nameof(unclesValidator)); + private readonly ISpecProvider _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); + private readonly ILogger _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle) { @@ -185,71 +177,69 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B /// true if the is valid; otherwise, false. public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, out string? error) { - IReleaseSpec spec = _specProvider.GetSpec(processedBlock.Header); - bool isValid = processedBlock.Header.Hash == suggestedBlock.Header.Hash; - - if (isValid) + if (processedBlock.Header.Hash == suggestedBlock.Header.Hash) { error = null; return true; } + if (_logger.IsWarn) _logger.Warn($"Processed block {processedBlock.ToString(Block.Format.Short)} is invalid:"); if (_logger.IsWarn) _logger.Warn($"- hash: expected {suggestedBlock.Hash}, got {processedBlock.Hash}"); error = null; if (processedBlock.Header.GasUsed != suggestedBlock.Header.GasUsed) { if (_logger.IsWarn) _logger.Warn($"- gas used: expected {suggestedBlock.Header.GasUsed}, got {processedBlock.Header.GasUsed} (diff: {processedBlock.Header.GasUsed - suggestedBlock.Header.GasUsed})"); - error = error ?? BlockErrorMessages.HeaderGasUsedMismatch; + error ??= BlockErrorMessages.HeaderGasUsedMismatch; } if (processedBlock.Header.Bloom != suggestedBlock.Header.Bloom) { if (_logger.IsWarn) _logger.Warn($"- bloom: expected {suggestedBlock.Header.Bloom}, got {processedBlock.Header.Bloom}"); - error = error ?? BlockErrorMessages.InvalidLogsBloom; + error ??= BlockErrorMessages.InvalidLogsBloom; } if (processedBlock.Header.ReceiptsRoot != suggestedBlock.Header.ReceiptsRoot) { if (_logger.IsWarn) _logger.Warn($"- receipts root: expected {suggestedBlock.Header.ReceiptsRoot}, got {processedBlock.Header.ReceiptsRoot}"); - error = error ?? BlockErrorMessages.InvalidReceiptsRoot; + error ??= BlockErrorMessages.InvalidReceiptsRoot; } if (processedBlock.Header.StateRoot != suggestedBlock.Header.StateRoot) { if (_logger.IsWarn) _logger.Warn($"- state root: expected {suggestedBlock.Header.StateRoot}, got {processedBlock.Header.StateRoot}"); - error = error ?? BlockErrorMessages.InvalidStateRoot; + error ??= BlockErrorMessages.InvalidStateRoot; } if (processedBlock.Header.BlobGasUsed != suggestedBlock.Header.BlobGasUsed) { if (_logger.IsWarn) _logger.Warn($"- blob gas used: expected {suggestedBlock.Header.BlobGasUsed}, got {processedBlock.Header.BlobGasUsed}"); - error = error ?? BlockErrorMessages.HeaderBlobGasMismatch; + error ??= BlockErrorMessages.HeaderBlobGasMismatch; } if (processedBlock.Header.ExcessBlobGas != suggestedBlock.Header.ExcessBlobGas) { if (_logger.IsWarn) _logger.Warn($"- excess blob gas: expected {suggestedBlock.Header.ExcessBlobGas}, got {processedBlock.Header.ExcessBlobGas}"); - error = error ?? BlockErrorMessages.IncorrectExcessBlobGas; + error ??= BlockErrorMessages.IncorrectExcessBlobGas; } if (processedBlock.Header.ParentBeaconBlockRoot != suggestedBlock.Header.ParentBeaconBlockRoot) { if (_logger.IsWarn) _logger.Warn($"- parent beacon block root : expected {suggestedBlock.Header.ParentBeaconBlockRoot}, got {processedBlock.Header.ParentBeaconBlockRoot}"); - error = error ?? BlockErrorMessages.InvalidParentBeaconBlockRoot; + error ??= BlockErrorMessages.InvalidParentBeaconBlockRoot; } if (processedBlock.Header.RequestsRoot != suggestedBlock.Header.RequestsRoot) { if (_logger.IsWarn) _logger.Warn($"- requests root : expected {suggestedBlock.Header.RequestsRoot}, got {processedBlock.Header.RequestsRoot}"); - error = error ?? BlockErrorMessages.InvalidRequestsRoot(suggestedBlock.Header.RequestsRoot, processedBlock.Header.RequestsRoot); + error ??= BlockErrorMessages.InvalidRequestsRoot(suggestedBlock.Header.RequestsRoot, processedBlock.Header.RequestsRoot); } for (int i = 0; i < processedBlock.Transactions.Length; i++) { if (receipts[i].Error is not null && receipts[i].GasUsed == 0 && receipts[i].Error == "invalid") { - if (_logger.IsWarn) _logger.Error($"- invalid transaction {i}"); - error = error ?? BlockErrorMessages.InvalidTxInBlock(i); + if (_logger.IsWarn) _logger.Warn($"- invalid transaction {i}"); + error ??= BlockErrorMessages.InvalidTxInBlock(i); } } @@ -257,7 +247,8 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B { if (_logger.IsWarn) _logger.Warn($"- block extra data : {suggestedBlock.ExtraData.ToHexString()}, UTF8: {Encoding.UTF8.GetString(suggestedBlock.ExtraData)}"); } - return isValid; + + return false; } public bool ValidateWithdrawals(Block block, out string? error) => @@ -322,23 +313,19 @@ private bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) return false; } - if (block.Requests is not null) + if (!ValidateRequestsHashMatches(block, out Hash256 depositsRoot)) { - if (!ValidateRequestsHashMatches(block, out Hash256 depositsRoot)) - { - error = BlockErrorMessages.InvalidRequestsRoot(block.Header.RequestsRoot, depositsRoot); - if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.RequestsRoot}, got {depositsRoot}"); + error = BlockErrorMessages.InvalidRequestsRoot(block.Header.RequestsRoot, depositsRoot); + if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.RequestsRoot}, got {depositsRoot}"); - return false; - } + return false; } error = null; - return true; } - private bool ValidateTransactions(Block block, IReleaseSpec spec, out string errorMessage) + private bool ValidateTransactions(Block block, IReleaseSpec spec, out string? errorMessage) { Transaction[] transactions = block.Transactions; @@ -418,64 +405,55 @@ private bool ValidateEip4844Fields(Block block, IReleaseSpec spec, out string? e } public static bool ValidateBodyAgainstHeader(BlockHeader header, BlockBody toBeValidated) => - ValidateTxRootMatchesTxs(header, toBeValidated, out _) && - ValidateUnclesHashMatches(header, toBeValidated, out _) && - ValidateWithdrawalsHashMatches(header, toBeValidated, out _) && - ValidateRequestsHashMatches(header, toBeValidated, out _); + ValidateTxRootMatchesTxs(header, toBeValidated, out _) + && ValidateUnclesHashMatches(header, toBeValidated, out _) + && ValidateWithdrawalsHashMatches(header, toBeValidated, out _) + && ValidateRequestsHashMatches(header, toBeValidated, out _); - public static bool ValidateTxRootMatchesTxs(Block block, out Hash256 txRoot) - { - return ValidateTxRootMatchesTxs(block.Header, block.Body, out txRoot); - } - public static bool ValidateTxRootMatchesTxs(BlockHeader header, BlockBody body, out Hash256 txRoot) - { - txRoot = TxTrie.CalculateRoot(body.Transactions); - return txRoot == header.TxRoot; - } + public static bool ValidateTxRootMatchesTxs(Block block, out Hash256 txRoot) => + ValidateTxRootMatchesTxs(block.Header, block.Body, out txRoot); - public static bool ValidateUnclesHashMatches(Block block, out Hash256 unclesHash) - { - return ValidateUnclesHashMatches(block.Header, block.Body, out unclesHash); - } + public static bool ValidateTxRootMatchesTxs(BlockHeader header, BlockBody body, out Hash256 txRoot) => + (txRoot = TxTrie.CalculateRoot(body.Transactions)) == header.TxRoot; - public static bool ValidateUnclesHashMatches(BlockHeader header, BlockBody body, out Hash256 unclesHash) - { - unclesHash = UnclesHash.Calculate(body.Uncles); + public static bool ValidateUnclesHashMatches(Block block, out Hash256 unclesHash) => + ValidateUnclesHashMatches(block.Header, block.Body, out unclesHash); - return header.UnclesHash == unclesHash; - } + public static bool ValidateUnclesHashMatches(BlockHeader header, BlockBody body, out Hash256 unclesHash) => + (unclesHash = UnclesHash.Calculate(body.Uncles)) == header.UnclesHash; - public static bool ValidateWithdrawalsHashMatches(Block block, out Hash256? withdrawalsRoot) - { - return ValidateWithdrawalsHashMatches(block.Header, block.Body, out withdrawalsRoot); - } + public static bool ValidateWithdrawalsHashMatches(Block block, out Hash256? withdrawalsRoot) => + ValidateWithdrawalsHashMatches(block.Header, block.Body, out withdrawalsRoot); public static bool ValidateWithdrawalsHashMatches(BlockHeader header, BlockBody body, out Hash256? withdrawalsRoot) { - withdrawalsRoot = null; - if (body.Withdrawals is null) - return header.WithdrawalsRoot is null; + // if one is null and other isn't + if (body.Withdrawals is null ^ header.WithdrawalsRoot is null) + { + withdrawalsRoot = null; + return false; + } withdrawalsRoot = new WithdrawalTrie(body.Withdrawals).RootHash; - return header.WithdrawalsRoot == withdrawalsRoot; } - public static bool ValidateRequestsHashMatches(Block block, out Hash256? withdrawalsRoot) - { - return ValidateRequestsHashMatches(block.Header, block.Body, out withdrawalsRoot); - } + public static bool ValidateRequestsHashMatches(Block block, out Hash256? withdrawalsRoot) => + ValidateRequestsHashMatches(block.Header, block.Body, out withdrawalsRoot); public static bool ValidateRequestsHashMatches(BlockHeader header, BlockBody body, out Hash256? requestsRoot) { - requestsRoot = null; - if (body.Requests == null) - return header.RequestsRoot is null; + // if one is null and other isn't + if (body.Requests is null ^ header.RequestsRoot is null) + { + requestsRoot = null; + return false; + } requestsRoot = new RequestsTrie(body.Requests).RootHash; - - return header.RequestsRoot == requestsRoot; + return requestsRoot == header.RequestsRoot; } + private static string Invalid(Block block) => $"Invalid block {block.ToString(Block.Format.FullHashAndNumber)}:"; } From 1a5cce2c9d490d143a449650afd19acd94ceda27 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 2 May 2024 09:09:51 +0200 Subject: [PATCH 218/551] refactor tests --- .../Nethermind.Core.Test/Blockchain/TestBlockchain.cs | 3 +-- .../EngineModuleTests.PayloadProduction.cs | 4 ++-- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs | 2 +- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 9f5bd8d9260..08e5688338e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -360,8 +360,7 @@ protected virtual IBlockProcessor CreateBlockProcessor() => ReceiptStorage, NullWitnessCollector.Instance, LogManager, - null, - ConsensusRequestsProcessor); + consensusRequestsProcessor: ConsensusRequestsProcessor); public async Task WaitForNewHead() { diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs index 1f57bc6c0cd..54ea2d2c815 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs @@ -366,8 +366,8 @@ public async Task TestTwoTransaction_SameContract_WithBlockImprovement() using SemaphoreSlim blockImprovementLock = new(0); - MergeTestBlockchain blockchain = CreateBaseBlockchain(null, null, LimboLogs.Instance); - blockchain.InitialStateMutator = (state) => + MergeTestBlockchain blockchain = CreateBaseBlockchain(logManager: LimboLogs.Instance); + blockchain.InitialStateMutator = state => { state.CreateAccount(new Address("0xBC2Fd1637C49839aDB7Bb57F9851EAE3194A90f7"), (UInt256)1200482917041833040, 1); }; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 9ae135cb222..9512f6ad68c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -72,7 +72,7 @@ protected async Task CreateBlockchain( protected async Task CreateBlockchain(ISpecProvider specProvider, ILogManager? logManager = null) - => await CreateBaseBlockchain(null, null, logManager).Build(specProvider); + => await CreateBaseBlockchain(logManager: logManager).Build(specProvider); private IEngineRpcModule CreateEngineModule(MergeTestBlockchain chain, ISyncConfig? syncConfig = null, TimeSpan? newPayloadTimeout = null, int newPayloadCacheSize = 50) { diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs index 98393a9125e..3e2b297da5f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs @@ -444,7 +444,7 @@ public async Task executePayloadV1_rejects_block_with_invalid_receiptsRoot() [Test] public async Task executePayloadV1_result_is_fail_when_blockchainprocessor_report_exception() { - using MergeTestBlockchain chain = await CreateBaseBlockchain(null, null) + using MergeTestBlockchain chain = await CreateBaseBlockchain() .Build(new TestSingleReleaseSpecProvider(London.Instance)); IEngineRpcModule rpc = CreateEngineModule(chain); From 5a9de6ccb353e1eb8e103c6d2834444c08d6c316 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 2 May 2024 09:23:23 +0200 Subject: [PATCH 219/551] aura refactor --- .../Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs | 2 +- .../AuRaMergeBlockProducerEnvFactory.cs | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 41a33e94b39..89d195fe0a4 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -30,7 +30,7 @@ public AuRaMergeBlockProcessor(ISpecProvider specProvider, ILogManager logManager, IBlockTree blockTree, IWithdrawalProcessor withdrawalProcessor, - IAuRaValidator? validator, + IAuRaValidator? validator = null, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, ContractRewriter? contractRewriter = null, diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index dd3f0e260e6..9186041a680 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -83,11 +83,7 @@ protected override BlockProcessor CreateBlockProcessor( logManager ) ), - null, - null, - null, - null, - _consensusRequestsProcessor); + consensusRequestsProcessor: _consensusRequestsProcessor); } protected override TxPoolTxSource CreateTxPoolTxSource( From 05db6247dc0cf7b35966756303ee755a4a92921a Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 2 May 2024 10:53:50 +0200 Subject: [PATCH 220/551] revert incorrect changes --- .../Validators/WithdrawalValidatorTests.cs | 7 +++---- .../Validators/BlockValidator.cs | 16 ++++++---------- .../Nethermind.State/Proofs/PatriciaTrieT.cs | 3 ++- .../Nethermind.State/Proofs/RequestsTrie.cs | 1 - 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/WithdrawalValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/WithdrawalValidatorTests.cs index e26ab68e503..8d065f2666e 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/WithdrawalValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/WithdrawalValidatorTests.cs @@ -39,8 +39,7 @@ public void Withdrawals_with_incorrect_withdrawals_root_are_invalid() { ISpecProvider specProvider = new CustomSpecProvider(((ForkActivation)0, Shanghai.Instance)); BlockValidator blockValidator = new(Always.Valid, Always.Valid, Always.Valid, specProvider, LimboLogs.Instance); - Withdrawal[] withdrawals = { TestItem.WithdrawalA_1Eth, TestItem.WithdrawalB_2Eth }; - Hash256 withdrawalRoot = new WithdrawalTrie(withdrawals).RootHash; + Withdrawal[] withdrawals = [TestItem.WithdrawalA_1Eth, TestItem.WithdrawalB_2Eth]; bool isValid = blockValidator.ValidateSuggestedBlock(Build.A.Block.WithWithdrawals(withdrawals).WithWithdrawalsRoot(TestItem.KeccakD).TestObject); Assert.False(isValid); } @@ -50,7 +49,7 @@ public void Empty_withdrawals_are_valid_post_shanghai() { ISpecProvider specProvider = new CustomSpecProvider(((ForkActivation)0, Shanghai.Instance)); BlockValidator blockValidator = new(Always.Valid, Always.Valid, Always.Valid, specProvider, LimboLogs.Instance); - Withdrawal[] withdrawals = { }; + Withdrawal[] withdrawals = []; Hash256 withdrawalRoot = new WithdrawalTrie(withdrawals).RootHash; bool isValid = blockValidator.ValidateSuggestedBlock(Build.A.Block.WithWithdrawals(withdrawals).WithWithdrawalsRoot(withdrawalRoot).TestObject); Assert.True(isValid); @@ -61,7 +60,7 @@ public void Correct_withdrawals_block_post_shanghai() { ISpecProvider specProvider = new CustomSpecProvider(((ForkActivation)0, Shanghai.Instance)); BlockValidator blockValidator = new(Always.Valid, Always.Valid, Always.Valid, specProvider, LimboLogs.Instance); - Withdrawal[] withdrawals = { TestItem.WithdrawalA_1Eth, TestItem.WithdrawalB_2Eth }; + Withdrawal[] withdrawals = [TestItem.WithdrawalA_1Eth, TestItem.WithdrawalB_2Eth]; Hash256 withdrawalRoot = new WithdrawalTrie(withdrawals).RootHash; bool isValid = blockValidator.ValidateSuggestedBlock(Build.A.Block.WithWithdrawals(withdrawals).WithWithdrawalsRoot(withdrawalRoot).TestObject); Assert.True(isValid); diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index d9bf10b4527..325837f5364 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -427,15 +427,13 @@ public static bool ValidateWithdrawalsHashMatches(Block block, out Hash256? with public static bool ValidateWithdrawalsHashMatches(BlockHeader header, BlockBody body, out Hash256? withdrawalsRoot) { - // if one is null and other isn't - if (body.Withdrawals is null ^ header.WithdrawalsRoot is null) + if (body.Withdrawals is null) { withdrawalsRoot = null; - return false; + return header.WithdrawalsRoot is null; } - withdrawalsRoot = new WithdrawalTrie(body.Withdrawals).RootHash; - return header.WithdrawalsRoot == withdrawalsRoot; + return (withdrawalsRoot = new WithdrawalTrie(body.Withdrawals).RootHash) == header.WithdrawalsRoot; } public static bool ValidateRequestsHashMatches(Block block, out Hash256? withdrawalsRoot) => @@ -443,15 +441,13 @@ public static bool ValidateRequestsHashMatches(Block block, out Hash256? withdra public static bool ValidateRequestsHashMatches(BlockHeader header, BlockBody body, out Hash256? requestsRoot) { - // if one is null and other isn't - if (body.Requests is null ^ header.RequestsRoot is null) + if (body.Requests == null) { requestsRoot = null; - return false; + return header.RequestsRoot is null; } - requestsRoot = new RequestsTrie(body.Requests).RootHash; - return requestsRoot == header.RequestsRoot; + return (requestsRoot = new RequestsTrie(body.Requests).RootHash) == header.RequestsRoot; } private static string Invalid(Block block) => diff --git a/src/Nethermind/Nethermind.State/Proofs/PatriciaTrieT.cs b/src/Nethermind/Nethermind.State/Proofs/PatriciaTrieT.cs index 4b28e2617d5..66be88ea5e6 100644 --- a/src/Nethermind/Nethermind.State/Proofs/PatriciaTrieT.cs +++ b/src/Nethermind/Nethermind.State/Proofs/PatriciaTrieT.cs @@ -22,13 +22,14 @@ public abstract class PatriciaTrie : PatriciaTree /// true to maintain an in-memory database for proof computation; /// otherwise, false. /// - public PatriciaTrie(T[]? list, bool canBuildProof, ICappedArrayPool? bufferPool = null) + protected PatriciaTrie(T[]? list, bool canBuildProof, ICappedArrayPool? bufferPool = null) : base(canBuildProof ? new MemDb() : NullDb.Instance, EmptyTreeHash, false, false, NullLogManager.Instance, bufferPool: bufferPool) { CanBuildProof = canBuildProof; if (list?.Length > 0) { + // ReSharper disable once VirtualMemberCallInConstructor Initialize(list); UpdateRootHash(); } diff --git a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs index fa4ef7dc7ba..63b04be3326 100644 --- a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs @@ -18,7 +18,6 @@ public class RequestsTrie : PatriciaTrie public RequestsTrie(ConsensusRequest[]? requests, bool canBuildProof = false, ICappedArrayPool? bufferPool = null) : base(requests, canBuildProof, bufferPool) { - ArgumentNullException.ThrowIfNull(requests); } protected override void Initialize(ConsensusRequest[] requests) From 92f4a2172e04becd95f9958f5485cb3efc24d1e9 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 2 May 2024 13:56:50 +0200 Subject: [PATCH 221/551] test no authorized in subcall --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index ab66bce179f..4dab19a95d2 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -921,6 +921,56 @@ public void ExecuteAuthCall_AuthCallIsCalledTwice_AuthorizedIsStillSet() Assert.That(result.Error, Is.EqualTo(null)); } + [Test] + public void ExecuteAuthCall_AuthorizedIsSetAndAuthCallIsCalledInSubcall_AuthorizedIsNotSetInSubcall() + { + var signer = TestItem.PrivateKeyF; + var data = CreateSignedCommitMessage(signer); + + byte[] code = Prepare.EvmCode + .PushData(data[..32]) + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE) + .PushData(data[32..64]) + .PushSingle(32) + .Op(Instruction.MSTORE) + .PushData(data[64..96]) + .PushSingle(64) + .Op(Instruction.MSTORE) + + //Auth params + .PushSingle((UInt256)data.Length) + .Op(Instruction.PUSH0) + .PushData(signer.Address) + .Op(Instruction.AUTH) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.AddressC) + .PushData(10000) + .Op(Instruction.CALL) + .Done; + + var authCall = Prepare.EvmCode + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(0) + .PushData(TestItem.GetRandomAddress()) + .PushData(0) + .Op(Instruction.AUTHCALL) + .Done; + + TestState.CreateAccount(TestItem.AddressC, 0); + TestState.InsertCode(TestItem.AddressC, Keccak.Compute(authCall), authCall, Spec); + + var result = ExecuteAndTrace(code); + Assert.That(result.Entries.Last(e=> e.Opcode.Equals(Instruction.AUTHCALL.ToString())).Error, Is.Not.Null); + } + private byte[] CreateSignedCommitMessage(PrivateKey signer) { return CreateSignedCommitMessage( From 79c9b9930383e1db8b2e97bc408192d55706f352 Mon Sep 17 00:00:00 2001 From: Lukasz Rozmej Date: Fri, 3 May 2024 01:08:02 +0200 Subject: [PATCH 222/551] Refactor Engine API with even more strict ExecutionPayload versioning (#6968) --- .../ConsensusRequests/ConsensusRequest.cs | 23 ++++++ .../EngineModuleTests.PayloadProduction.cs | 6 +- .../EngineModuleTests.Synchronization.cs | 36 ++++----- .../EngineModuleTests.V1.cs | 26 +++---- .../EngineModuleTests.V2.cs | 4 +- .../EngineModuleTests.V4.cs | 2 +- .../Boost/BoostBlockImprovementContext.cs | 2 +- .../Data/ExecutionPayload.cs | 76 ++++++++++--------- .../Data/ExecutionPayloadV3.cs | 29 +++---- .../Data/ExecutionPayloadV4.cs | 57 ++++++++------ .../Data/GetPayloadV2Result.cs | 15 ++-- .../Data/GetPayloadV3Result.cs | 16 ++-- .../Data/GetPayloadV4Result.cs | 10 +-- .../Data/IExecutionPayloadParams.cs | 30 +++----- .../Handlers/GetPayloadV1Handler.cs | 10 +-- 15 files changed, 180 insertions(+), 162 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index c3efe71cca8..0fb8952b9cc 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -35,3 +35,26 @@ public class ConsensusRequest [JsonIgnore] public ulong? IndexField { get; protected set; } } + +public static class ConsensusRequestExtensions +{ + public static (int depositCount, int withdrawalRequestCount) GetTypeCounts(this ConsensusRequest[]? requests) + { + int depositCount = 0; + int withdrawalRequestCount = 0; + int length = requests?.Length ?? 0; + for (int i = 0; i < length; i++) + { + if (requests![i].Type == ConsensusRequestsType.Deposit) + { + depositCount++; + } + else + { + withdrawalRequestCount++; + } + } + + return (depositCount, withdrawalRequestCount); + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs index 54ea2d2c815..f18432e166b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs @@ -510,7 +510,7 @@ public async Task Cannot_build_invalid_block_with_the_branch() // we build one more block on the same level Block block31B = chain.PostMergeBlockProducer!.PrepareEmptyBlock(block30.Header, payloadAttributes); - await rpc.engine_newPayloadV1(new ExecutionPayload(block31B)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(block31B)); // ...and we change the main chain, so main chain now is 30->31B, block improvement for block 32A is still in progress string? payloadId = rpc.engine_forkchoiceUpdatedV1( @@ -630,7 +630,7 @@ await rpc.engine_forkchoiceUpdatedV1( PostMergeBlockProducer blockProducer = chain.PostMergeBlockProducer!; Block emptyBlock = blockProducer.PrepareEmptyBlock(chain.BlockTree.Head!.Header, new PayloadAttributes { Timestamp = (ulong)DateTime.UtcNow.AddDays(5).Ticks, PrevRandao = TestItem.KeccakA, SuggestedFeeRecipient = Address.Zero }); - Task> result1 = await rpc.engine_newPayloadV1(new ExecutionPayload(emptyBlock)); + Task> result1 = await rpc.engine_newPayloadV1(ExecutionPayload.Create(emptyBlock)); result1.Result.Data.Status.Should().Be(PayloadStatus.Valid); } @@ -653,7 +653,7 @@ await rpc.engine_forkchoiceUpdatedV2( Withdrawals = [TestItem.WithdrawalA_1Eth] }; Block emptyBlock = blockProducer.PrepareEmptyBlock(chain.BlockTree.Head!.Header, payloadAttributes); - Task> result1 = await rpc.engine_newPayloadV2(new ExecutionPayload(emptyBlock)); + Task> result1 = await rpc.engine_newPayloadV2(ExecutionPayload.Create(emptyBlock)); result1.Result.Data.Status.Should().Be(PayloadStatus.Valid); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Synchronization.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Synchronization.cs index 4b5e9ad8f13..c3c2f884436 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Synchronization.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Synchronization.cs @@ -55,7 +55,7 @@ public async Task forkChoiceUpdatedV1_unknown_block_initiates_syncing() .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - await rpc.engine_newPayloadV1(new ExecutionPayload(block)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(block)); // sync has not started yet chain.BeaconSync!.IsBeaconSyncHeadersFinished().Should().BeTrue(); chain.BeaconSync.IsBeaconSyncFinished(block.Header).Should().BeTrue(); @@ -225,7 +225,7 @@ public async Task forkChoiceUpdatedV1_unknown_block_parent_while_syncing_initiat .WithPostMergeFlag(true) .TestObject; - await rpc.engine_newPayloadV1(new ExecutionPayload(block)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(block)); // sync has not started yet chain.BeaconSync!.IsBeaconSyncHeadersFinished().Should().BeTrue(); chain.BeaconSync.IsBeaconSyncFinished(block.Header).Should().BeTrue(); @@ -259,7 +259,7 @@ public async Task forkChoiceUpdatedV1_unknown_block_parent_while_syncing_initiat pointers.LowestInsertedHeader = block.Header; AssertBlockTreePointers(chain.BlockTree, pointers); - await rpc.engine_newPayloadV1(new ExecutionPayload(nextUnconnectedBlock)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(nextUnconnectedBlock)); forkchoiceStateV1 = new(nextUnconnectedBlock.Hash!, startingHead, startingHead); forkchoiceUpdatedResult = await rpc.engine_forkchoiceUpdatedV1(forkchoiceStateV1); forkchoiceUpdatedResult.Data.PayloadStatus.Status.Should() @@ -298,7 +298,7 @@ public async Task should_return_invalid_lvh_null_on_invalid_blocks_during_the_sy .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - ExecutionPayload startingNewPayload = new(block); + ExecutionPayload startingNewPayload = ExecutionPayload.Create(block); await rpc.engine_newPayloadV1(startingNewPayload); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); @@ -320,7 +320,7 @@ public async Task should_return_invalid_lvh_null_on_invalid_blocks_during_the_sy r.TryGetBlock(out Block? newBlock); newBlock!.Header.GasLimit = long.MaxValue; // incorrect gas limit newBlock.Header.Hash = newBlock.CalculateHash(); - ResultWrapper payloadStatus = await rpc.engine_newPayloadV1(new ExecutionPayload(newBlock)); + ResultWrapper payloadStatus = await rpc.engine_newPayloadV1(ExecutionPayload.Create(newBlock)); payloadStatus.Data.Status.Should().Be(nameof(PayloadStatusV1.Invalid).ToUpper()); payloadStatus.Data.LatestValidHash.Should().BeNull(); } @@ -333,7 +333,7 @@ public async Task newPayloadV1_can_insert_blocks_from_cache_when_syncing() IEngineRpcModule rpc = CreateEngineModule(chain); Hash256 startingHead = chain.BlockTree.HeadHash; - ExecutionPayload parentBlockRequest = new(Build.A.Block.WithNumber(2).TestObject); + ExecutionPayload parentBlockRequest = ExecutionPayload.Create(Build.A.Block.WithNumber(2).TestObject); ExecutionPayload[] requests = CreateBlockRequestBranch(chain, parentBlockRequest, Address.Zero, 7); ResultWrapper payloadStatus; foreach (ExecutionPayload r in requests) @@ -391,7 +391,7 @@ public async Task first_new_payload_set_beacon_main_chain() .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - ExecutionPayload startingNewPayload = new(block); + ExecutionPayload startingNewPayload = ExecutionPayload.Create(block); await rpc.engine_newPayloadV1(startingNewPayload); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); ResultWrapper forkchoiceUpdatedResult = @@ -432,7 +432,7 @@ public async Task repeated_new_payloads_do_not_change_metadata() .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - ExecutionPayload startingNewPayload = new(block); + ExecutionPayload startingNewPayload = ExecutionPayload.Create(block); await rpc.engine_newPayloadV1(startingNewPayload); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); ResultWrapper forkchoiceUpdatedResult = @@ -490,7 +490,7 @@ public async Task Can_set_beacon_pivot_in_new_payload_if_null() newBlock2.CalculateHash(); chain.BeaconPivot!.BeaconPivotExists().Should().BeFalse(); - ResultWrapper result = await rpc.engine_newPayloadV1(new ExecutionPayload(newBlock2)); + ResultWrapper result = await rpc.engine_newPayloadV1(ExecutionPayload.Create(newBlock2)); result.Data.Status.Should().Be(PayloadStatus.Syncing); chain.BeaconPivot.BeaconPivotExists().Should().BeTrue(); } @@ -524,7 +524,7 @@ public async Task BeaconMainChain_is_correctly_set_when_block_was_not_processed( .WithStateRoot(new Hash256("0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f")).TestObject; newBlock2.CalculateHash(); - await rpc.engine_newPayloadV1(new ExecutionPayload(newBlock2)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(newBlock2)); await rpc.engine_forkchoiceUpdatedV1(new ForkchoiceStateV1(newBlock2.Hash!, newBlock2.Hash!, newBlock2.Hash!), null); chain.BlockTree.FindLevel(10)!.BlockInfos[0].Metadata.Should().Be(BlockMetadata.None); @@ -562,7 +562,7 @@ public async Task Repeated_block_do_not_change_metadata() newBlock2.CalculateHash(); await chain.BlockTree.SuggestBlockAsync(newBlock2!, BlockTreeSuggestOptions.FillBeaconBlock); - await rpc.engine_newPayloadV1(new ExecutionPayload(newBlock2)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(newBlock2)); Block? block = chain.BlockTree.FindBlock(newBlock2.GetOrCalculateHash(), BlockTreeLookupOptions.None); block?.TotalDifficulty.Should().NotBe((UInt256)0); BlockInfo? blockInfo = chain.BlockTree.FindLevel(newBlock2.Number!)?.BlockInfos[0]; @@ -590,7 +590,7 @@ public async Task second_new_payload_should_not_set_beacon_main_chain() .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - ExecutionPayload startingNewPayload = new(block); + ExecutionPayload startingNewPayload = ExecutionPayload.Create(block); await rpc.engine_newPayloadV1(startingNewPayload); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); ResultWrapper forkchoiceUpdatedResult = @@ -650,7 +650,7 @@ public async Task should_reorg_during_the_sync(int initialChainPayloadsCount, in .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - ExecutionPayload startingNewPayload = new(block); + ExecutionPayload startingNewPayload = ExecutionPayload.Create(block); await rpc.engine_newPayloadV1(startingNewPayload); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); await rpc.engine_forkchoiceUpdatedV1(forkchoiceStateV1); @@ -691,7 +691,7 @@ public async Task Blocks_from_cache_inserted_when_fast_headers_sync_finish_befor using MergeTestBlockchain chain = await CreateBlockchain(); Hash256 startingHead = chain.BlockTree.HeadHash; IEngineRpcModule rpc = CreateEngineModule(chain); - ExecutionPayload[] requests = CreateBlockRequestBranch(chain, new ExecutionPayload(chain.BlockTree.Head!), Address.Zero, 7); + ExecutionPayload[] requests = CreateBlockRequestBranch(chain, ExecutionPayload.Create(chain.BlockTree.Head!), Address.Zero, 7); ResultWrapper payloadStatus; for (int i = 4; i < requests.Length - 1; i++) @@ -739,7 +739,7 @@ public async Task Maintain_correct_pointers_for_beacon_sync_in_archive_sync() Hash256 startingHead = chain.BlockTree.HeadHash; // create 7 block gap int gap = 7; - ExecutionPayload headBlockRequest = new(chain.BlockTree.Head!); + ExecutionPayload headBlockRequest = ExecutionPayload.Create(chain.BlockTree.Head!); Block[] missingBlocks = new Block[gap]; for (int i = 0; i < gap; i++) { @@ -851,7 +851,7 @@ public async Task Blocks_before_pivots_should_not_be_added_if_node_has_never_bee IEngineRpcModule rpc = CreateEngineModule(chain, syncConfig); Block blockBeforePivot = syncedBlockTree.FindBlock(2, BlockTreeLookupOptions.None)!; - ExecutionPayload prePivotRequest = new(blockBeforePivot); + ExecutionPayload prePivotRequest = ExecutionPayload.Create(blockBeforePivot); ResultWrapper payloadStatus = await rpc.engine_newPayloadV1(prePivotRequest); payloadStatus.Data.Status.Should().Be(nameof(PayloadStatusV1.Syncing).ToUpper()); chain.BlockTree.FindBlock(prePivotRequest.BlockHash).Should().BeNull(); @@ -876,7 +876,7 @@ public async Task Blocks_before_pivots_should_not_be_added_if_node_has_been_sync IEngineRpcModule rpc = CreateEngineModule(chain, syncConfig); Block blockBeforePivot = syncedBlockTree.FindBlock(2, BlockTreeLookupOptions.None)!; - ExecutionPayload prePivotRequest = new(blockBeforePivot); + ExecutionPayload prePivotRequest = ExecutionPayload.Create(blockBeforePivot); ResultWrapper payloadStatus = await rpc.engine_newPayloadV1(prePivotRequest); payloadStatus.Data.Status.Should().Be(nameof(PayloadStatus.Valid).ToUpper()); chain.BlockTree.FindBlock(prePivotRequest.BlockHash).Should().NotBeNull(); @@ -898,7 +898,7 @@ public async Task Maintain_correct_pointers_for_beacon_sync_in_fast_sync() // create block gap from fast sync pivot int gap = 7; ExecutionPayload[] requests = - CreateBlockRequestBranch(chain, new ExecutionPayload(syncedBlockTree.Head!), Address.Zero, gap); + CreateBlockRequestBranch(chain, ExecutionPayload.Create(syncedBlockTree.Head!), Address.Zero, gap); // setting up beacon pivot ExecutionPayload pivotRequest = CreateBlockRequest(chain, requests[^1], Address.Zero); ResultWrapper payloadStatus = await rpc.engine_newPayloadV1(pivotRequest); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs index 3e2b297da5f..847c6b5a0b9 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs @@ -480,7 +480,7 @@ public virtual async Task executePayloadV1_accepts_already_known_block(bool thro await chain.BlockTree.SuggestBlockAsync(block!); await bestBlockProcessed.WaitAsync(); - ExecutionPayload blockRequest = new(block); + ExecutionPayload blockRequest = ExecutionPayload.Create(block); ResultWrapper executePayloadResult = await rpc.engine_newPayloadV1(blockRequest); executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); } @@ -640,13 +640,13 @@ public async Task forkChoiceUpdatedV1_no_common_branch_fails() Block parent = Build.A.Block.WithNumber(2).WithParentHash(TestItem.KeccakA).WithNonce(0).WithDifficulty(0).TestObject; Block block = Build.A.Block.WithNumber(3).WithParent(parent).WithNonce(0).WithDifficulty(0).TestObject; - await rpc.engine_newPayloadV1(new ExecutionPayload(parent)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(parent)); ForkchoiceStateV1 forkchoiceStateV1 = new(parent.Hash!, startingHead, startingHead); ResultWrapper forkchoiceUpdatedResult = await rpc.engine_forkchoiceUpdatedV1(forkchoiceStateV1); forkchoiceUpdatedResult.Data.PayloadStatus.Status.Should().Be("SYNCING"); - await rpc.engine_newPayloadV1(new ExecutionPayload(block)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(block)); ForkchoiceStateV1 forkchoiceStateV11 = new(parent.Hash!, startingHead, startingHead); ResultWrapper forkchoiceUpdatedResult_1 = await rpc.engine_forkchoiceUpdatedV1(forkchoiceStateV11); @@ -667,7 +667,7 @@ public async Task forkChoiceUpdatedV1_block_still_processing() chain.ThrottleBlockProcessor(200); ResultWrapper newPayloadV1 = - await rpc.engine_newPayloadV1(new ExecutionPayload(block)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(block)); newPayloadV1.Data.Status.Should().Be("SYNCING"); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); @@ -695,7 +695,7 @@ public async Task AlreadyKnown_not_cached_block_should_return_valid() .WithBeneficiary(Build.An.Address.TestObject) .TestObject; - (await rpc.engine_newPayloadV1(new ExecutionPayload(b4))).Data.Status.Should().Be(PayloadStatus.Valid); + (await rpc.engine_newPayloadV1(ExecutionPayload.Create(b4))).Data.Status.Should().Be(PayloadStatus.Valid); Block? b5 = Build.A.Block .WithNumber(b4.Number + 1) @@ -705,8 +705,8 @@ public async Task AlreadyKnown_not_cached_block_should_return_valid() .WithStateRoot(b4.StateRoot!) .TestObject; - (await rpc.engine_newPayloadV1(new ExecutionPayload(b5))).Data.Status.Should().Be(PayloadStatus.Valid); - (await rpc.engine_newPayloadV1(new ExecutionPayload(b5))).Data.Status.Should().Be(PayloadStatus.Valid); + (await rpc.engine_newPayloadV1(ExecutionPayload.Create(b5))).Data.Status.Should().Be(PayloadStatus.Valid); + (await rpc.engine_newPayloadV1(ExecutionPayload.Create(b5))).Data.Status.Should().Be(PayloadStatus.Valid); } [Test, NonParallelizable] @@ -740,8 +740,8 @@ public async Task Invalid_block_on_processing_wont_be_accepted_if_sent_twice_in_ .TestObject; chain.ThrottleBlockProcessor(1000); // throttle the block processor enough so that the block processing queue is never empty - (await rpc.engine_newPayloadV1(new ExecutionPayload(block))).Data.Status.Should().Be(PayloadStatus.Syncing); - (await rpc.engine_newPayloadV1(new ExecutionPayload(block))).Data.Status.Should().BeOneOf(PayloadStatus.Syncing); + (await rpc.engine_newPayloadV1(ExecutionPayload.Create(block))).Data.Status.Should().Be(PayloadStatus.Syncing); + (await rpc.engine_newPayloadV1(ExecutionPayload.Create(block))).Data.Status.Should().BeOneOf(PayloadStatus.Syncing); } [Test] @@ -848,10 +848,10 @@ public async Task executePayloadV1_on_top_of_terminal_block() .WithStateRoot(new Hash256("0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f")) .WithDifficulty(0).WithNonce(0).TestObject; firstPoSBlock.CalculateHash(); - ExecutionPayload executionPayload = new(firstPoSBlock); + ExecutionPayload executionPayload = ExecutionPayload.Create(firstPoSBlock); ResultWrapper resultWrapper = await rpc.engine_newPayloadV1(executionPayload); resultWrapper.Data.Status.Should().Be(PayloadStatus.Valid); - new ExecutionPayload(chain.BlockTree.BestSuggestedBody!).Should().BeEquivalentTo(executionPayload); + ExecutionPayload.Create(chain.BlockTree.BestSuggestedBody!).Should().BeEquivalentTo(executionPayload); } [Test] @@ -893,7 +893,7 @@ public async Task executePayloadV1_on_top_of_not_processed_invalid_terminal_bloc .WithStateRoot(new Hash256("0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f")) .WithDifficulty(0).WithNonce(0).TestObject; firstPoSBlock.CalculateHash(); - ExecutionPayload executionPayload = new(firstPoSBlock); + ExecutionPayload executionPayload = ExecutionPayload.Create(firstPoSBlock); ResultWrapper resultWrapper = await rpc.engine_newPayloadV1(executionPayload); resultWrapper.Data.Status.Should().Be(PayloadStatus.Invalid); resultWrapper.Data.LatestValidHash.Should().Be(Keccak.Zero); @@ -907,7 +907,7 @@ public async Task executePayloadV1_accepts_first_block() ExecutionPayload executionPayload = CreateBlockRequest(chain, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD); ResultWrapper resultWrapper = await rpc.engine_newPayloadV1(executionPayload); resultWrapper.Data.Status.Should().Be(PayloadStatus.Valid); - new ExecutionPayload(chain.BlockTree.BestSuggestedBody!).Should().BeEquivalentTo(executionPayload); + ExecutionPayload.Create(chain.BlockTree.BestSuggestedBody!).Should().BeEquivalentTo(executionPayload); } [Test] diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs index ae109d674d8..7eda65bf5cb 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs @@ -124,7 +124,7 @@ public virtual async Task Should_process_block_as_expected_V2(string latestValid })); response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV2", - chain.JsonSerializer.Serialize(new ExecutionPayload(block))); + chain.JsonSerializer.Serialize(ExecutionPayload.Create(block))); successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); @@ -477,7 +477,7 @@ await rpc.engine_forkchoiceUpdatedV2(new ForkchoiceStateV1(executionPayload1.Blo .WithWithdrawals(withdrawals.ToArray()) .TestObject; - ResultWrapper fcuResult = await rpc.engine_newPayloadV2(new ExecutionPayload(newBlock)); + ResultWrapper fcuResult = await rpc.engine_newPayloadV2(ExecutionPayload.Create(newBlock)); fcuResult.Data.Status.Should().Be(PayloadStatus.Valid); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index a8e2127cf0b..29801d52e1b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -120,7 +120,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid })); response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV4", - chain.JsonSerializer.Serialize(new ExecutionPayloadV4(block)), "[]", Keccak.Zero.ToString(true)); + chain.JsonSerializer.Serialize(ExecutionPayloadV4.Create(block)), "[]", Keccak.Zero.ToString(true)); successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs index 3d2f18e42bc..97059251647 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs @@ -54,7 +54,7 @@ public BoostBlockImprovementContext(Block currentBestBlock, CurrentBestBlock = block; BlockFees = _feesTracer.Fees; _stateReader.TryGetAccount(parentHeader.StateRoot!, payloadAttributes.SuggestedFeeRecipient, out account); - await _boostRelay.SendPayload(new BoostExecutionPayloadV1 { Block = new ExecutionPayload(block), Profit = account.Balance - balanceBefore }, cancellationToken); + await _boostRelay.SendPayload(new BoostExecutionPayloadV1 { Block = ExecutionPayload.Create(block), Profit = account.Balance - balanceBefore }, cancellationToken); } return CurrentBestBlock; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index c44fc8d7b58..6a2e0087daf 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Diagnostics.CodeAnalysis; using System.Linq; using Nethermind.Core; using Nethermind.Core.Crypto; @@ -15,33 +16,16 @@ namespace Nethermind.Merge.Plugin.Data; +public interface IExecutionPayloadFactory where TExecutionPayload : ExecutionPayload +{ + static abstract TExecutionPayload Create(Block block); +} + /// /// Represents an object mapping the ExecutionPayload structure of the beacon chain spec. /// -public class ExecutionPayload : IForkValidator, IExecutionPayloadParams +public class ExecutionPayload : IForkValidator, IExecutionPayloadParams, IExecutionPayloadFactory { - public ExecutionPayload() { } // Needed for tests - - public ExecutionPayload(Block block) - { - BlockHash = block.Hash!; - ParentHash = block.ParentHash!; - FeeRecipient = block.Beneficiary!; - StateRoot = block.StateRoot!; - BlockNumber = block.Number; - GasLimit = block.GasLimit; - GasUsed = block.GasUsed; - ReceiptsRoot = block.ReceiptsRoot!; - LogsBloom = block.Bloom!; - PrevRandao = block.MixHash ?? Keccak.Zero; - ExtraData = block.ExtraData!; - Timestamp = block.Timestamp; - BaseFeePerGas = block.BaseFeePerGas; - Withdrawals = block.Withdrawals; - - SetTransactions(block.Transactions); - } - public UInt256 BaseFeePerGas { get; set; } public Hash256 BlockHash { get; set; } = Keccak.Zero; @@ -125,7 +109,32 @@ public byte[][] Transactions /// EIP-4788. /// [JsonIgnore] - public virtual Hash256? ParentBeaconBlockRoot { get; set; } + public Hash256? ParentBeaconBlockRoot { get; set; } + + public static ExecutionPayload Create(Block block) => Create(block); + + protected static TExecutionPayload Create(Block block) where TExecutionPayload : ExecutionPayload, new() + { + TExecutionPayload executionPayload = new() + { + BlockHash = block.Hash!, + ParentHash = block.ParentHash!, + FeeRecipient = block.Beneficiary!, + StateRoot = block.StateRoot!, + BlockNumber = block.Number, + GasLimit = block.GasLimit, + GasUsed = block.GasUsed, + ReceiptsRoot = block.ReceiptsRoot!, + LogsBloom = block.Bloom!, + PrevRandao = block.MixHash ?? Keccak.Zero, + ExtraData = block.ExtraData!, + Timestamp = block.Timestamp, + BaseFeePerGas = block.BaseFeePerGas, + Withdrawals = block.Withdrawals, + }; + executionPayload.SetTransactions(block.Transactions); + return executionPayload; + } /// /// Creates the execution block from payload. @@ -133,7 +142,7 @@ public byte[][] Transactions /// When this method returns, contains the execution block. /// A total difficulty of the block. /// true if block created successfully; otherwise, false. - public virtual bool TryGetBlock(out Block? block, UInt256? totalDifficulty = null) + public virtual bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? totalDifficulty = null) { try { @@ -209,7 +218,7 @@ public void SetTransactions(params Transaction[] transactions) ExecutionPayload IExecutionPayloadParams.ExecutionPayload => this; - public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error) + public ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error) { if (spec.IsEip4844Enabled) { @@ -235,16 +244,13 @@ public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, o return error is null ? ValidationResult.Success : ValidationResult.Fail; } - private int GetExecutionPayloadVersion() + private int GetExecutionPayloadVersion() => this switch { - return this switch - { - { Deposits: not null, WithdrawalRequests: not null } => 4, - { BlobGasUsed: not null } or { ExcessBlobGas: not null } or { ParentBeaconBlockRoot: not null } => 3, - { Withdrawals: not null } => 2, - _ => 1 - }; - } + { Deposits: not null, WithdrawalRequests: not null } => 4, + { BlobGasUsed: not null } or { ExcessBlobGas: not null } or { ParentBeaconBlockRoot: not null } => 3, + { Withdrawals: not null } => 2, + _ => 1 + }; public virtual bool ValidateFork(ISpecProvider specProvider) => !specProvider.GetSpec(BlockNumber, Timestamp).IsEip4844Enabled; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs index ab1dd0b57dd..f05e355b183 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Diagnostics.CodeAnalysis; using System.Text.Json.Serialization; using Nethermind.Core; using Nethermind.Core.Crypto; @@ -12,27 +13,29 @@ namespace Nethermind.Merge.Plugin.Data; /// /// Represents an object mapping the ExecutionPayloadV3 structure of the beacon chain spec. /// -public class ExecutionPayloadV3 : ExecutionPayload +public class ExecutionPayloadV3 : ExecutionPayload, IExecutionPayloadFactory { - public ExecutionPayloadV3() { } // Needed for tests - - public ExecutionPayloadV3(Block block) : base(block) + protected new static TExecutionPayload Create(Block block) where TExecutionPayload : ExecutionPayloadV3, new() { - ParentBeaconBlockRoot = block.ParentBeaconBlockRoot; - BlobGasUsed = block.BlobGasUsed; - ExcessBlobGas = block.ExcessBlobGas; + TExecutionPayload executionPayload = ExecutionPayload.Create(block); + executionPayload.ParentBeaconBlockRoot = block.ParentBeaconBlockRoot; + executionPayload.BlobGasUsed = block.BlobGasUsed; + executionPayload.ExcessBlobGas = block.ExcessBlobGas; + return executionPayload; } - public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = null) + public new static ExecutionPayloadV3 Create(Block block) => Create(block); + + public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? totalDifficulty = null) { if (!base.TryGetBlock(out block, totalDifficulty)) { return false; } - block!.Header.ParentBeaconBlockRoot = ParentBeaconBlockRoot; - block!.Header.BlobGasUsed = BlobGasUsed; - block!.Header.ExcessBlobGas = ExcessBlobGas; + block.Header.ParentBeaconBlockRoot = ParentBeaconBlockRoot; + block.Header.BlobGasUsed = BlobGasUsed; + block.Header.ExcessBlobGas = ExcessBlobGas; return true; } @@ -44,12 +47,12 @@ public override bool ValidateFork(ISpecProvider specProvider) => /// EIP-4844. /// [JsonRequired] - public override ulong? BlobGasUsed { get; set; } + public sealed override ulong? BlobGasUsed { get; set; } /// /// Gets or sets as defined in /// EIP-4844. /// [JsonRequired] - public override ulong? ExcessBlobGas { get; set; } + public sealed override ulong? ExcessBlobGas { get; set; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index dd8f86b4255..5fb34f7737c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.InteropServices.JavaScript; using System.Text.Json.Serialization; @@ -18,34 +19,44 @@ namespace Nethermind.Merge.Plugin.Data; /// /// Represents an object mapping the ExecutionPayloadV4 structure of the beacon chain spec. /// -public class ExecutionPayloadV4 : ExecutionPayloadV3 +public class ExecutionPayloadV4 : ExecutionPayloadV3, IExecutionPayloadFactory { - public ExecutionPayloadV4() { } // Needed for tests - - public ExecutionPayloadV4(Block block) : base(block) + protected new static TExecutionPayload Create(Block block) where TExecutionPayload : ExecutionPayloadV4, new() { - List? deposits = null; - List? withdrawalRequests = null; - var requestsCount = (block.Requests?.Length ?? 0); - if (requestsCount > 0) + TExecutionPayload executionPayload = ExecutionPayloadV3.Create(block); + ConsensusRequest[]? blockRequests = block.Requests; + if (blockRequests is null) + { + executionPayload.Deposits = Array.Empty(); + executionPayload.WithdrawalRequests = Array.Empty(); + } + else { - deposits = new List(); - withdrawalRequests = new List(); - for (int i = 0; i < requestsCount; ++i) + (int depositCount, int withdrawalRequestCount) = blockRequests.GetTypeCounts(); + executionPayload.Deposits = new Deposit[depositCount]; + executionPayload.WithdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; + int depositIndex = 0; + int withdrawalRequestIndex = 0; + for (int i = 0; i < blockRequests.Length; ++i) { - var request = block.Requests![i]; + ConsensusRequest request = blockRequests[i]; if (request.Type == ConsensusRequestsType.Deposit) - deposits.Add((Deposit)request); + { + executionPayload.Deposits[depositIndex++] = (Deposit)request; + } else - withdrawalRequests.Add((WithdrawalRequest)request); + { + executionPayload.WithdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)request; + } } } - Deposits = deposits?.ToArray() ?? []; - WithdrawalRequests = withdrawalRequests?.ToArray() ?? []; + return executionPayload; } - public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = null) + public new static ExecutionPayloadV4 Create(Block block) => Create(block); + + public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? totalDifficulty = null) { if (!base.TryGetBlock(out block, totalDifficulty)) { @@ -69,13 +80,13 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu requests[i] = WithdrawalRequests![i - depositsLength]; } - block!.Body.Requests = requests; - block!.Header.RequestsRoot = new RequestsTrie(requests).RootHash; + block.Body.Requests = requests; + block.Header.RequestsRoot = new RequestsTrie(requests).RootHash; } else { - block!.Body.Requests = Array.Empty(); - block!.Header.RequestsRoot = Keccak.EmptyTreeHash; + block.Body.Requests = Array.Empty(); + block.Header.RequestsRoot = Keccak.EmptyTreeHash; } return true; @@ -90,12 +101,12 @@ public override bool ValidateFork(ISpecProvider specProvider) => /// EIP-6110. /// [JsonRequired] - public override Deposit[]? Deposits { get; set; } + public sealed override Deposit[]? Deposits { get; set; } /// /// Gets or sets as defined in /// EIP-7002. /// [JsonRequired] - public override WithdrawalRequest[]? WithdrawalRequests { get; set; } + public sealed override WithdrawalRequest[]? WithdrawalRequests { get; set; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV2Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV2Result.cs index 78fffe38a86..70bc1ac1762 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV2Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV2Result.cs @@ -8,19 +8,16 @@ namespace Nethermind.Merge.Plugin.Data; -public class GetPayloadV2Result : IForkValidator +public class GetPayloadV2Result(Block block, UInt256 blockFees) + : IForkValidator where TVersionedExecutionPayload : ExecutionPayload, IExecutionPayloadParams, IExecutionPayloadFactory { - public GetPayloadV2Result(Block block, UInt256 blockFees) - { - BlockValue = blockFees; - ExecutionPayload = new(block); - } + public UInt256 BlockValue { get; } = blockFees; - public UInt256 BlockValue { get; } - - public virtual ExecutionPayload ExecutionPayload { get; } + public virtual TVersionedExecutionPayload ExecutionPayload { get; } = TVersionedExecutionPayload.Create(block); public bool ValidateFork(ISpecProvider specProvider) => ExecutionPayload.ValidateFork(specProvider); public override string ToString() => $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}}}"; } + +public class GetPayloadV2Result(Block block, UInt256 blockFees) : GetPayloadV2Result(block, blockFees); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV3Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV3Result.cs index 492d81ad71e..d2603f396c8 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV3Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV3Result.cs @@ -6,20 +6,16 @@ namespace Nethermind.Merge.Plugin.Data; -public class GetPayloadV3Result : GetPayloadV2Result +public class GetPayloadV3Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) + : GetPayloadV2Result(block, blockFees) + where TVersionedExecutionPayload : ExecutionPayloadV3, IExecutionPayloadParams, IExecutionPayloadFactory { - public GetPayloadV3Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : base(block, blockFees) - { - ExecutionPayload = new(block); - BlobsBundle = blobsBundle; - } - - public BlobsBundleV1 BlobsBundle { get; } - - public override ExecutionPayloadV3 ExecutionPayload { get; } + public BlobsBundleV1 BlobsBundle { get; } = blobsBundle; public bool ShouldOverrideBuilder { get; } public override string ToString() => $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}}}"; } + +public class GetPayloadV3Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : GetPayloadV3Result(block, blockFees, blobsBundle); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs index 2349362d7df..4f13cf363bf 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs @@ -6,12 +6,4 @@ namespace Nethermind.Merge.Plugin.Data; -public class GetPayloadV4Result : GetPayloadV3Result -{ - public GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : base(block, blockFees, blobsBundle) - { - ExecutionPayload = new(block); - } - - public override ExecutionPayloadV4 ExecutionPayload { get; } -} +public class GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : GetPayloadV3Result(block, blockFees, blobsBundle); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs index 2ea492b1dcf..46abda52dde 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs @@ -19,28 +19,22 @@ public interface IExecutionPayloadParams public enum ValidationResult : byte { Success, Fail, Invalid }; -public class ExecutionPayloadParams : IExecutionPayloadParams - where TVersionedExecutionPayload : ExecutionPayload +public class ExecutionPayloadParams( + TVersionedExecutionPayload executionPayload, + byte[]?[] blobVersionedHashes, + Hash256? parentBeaconBlockRoot) + : IExecutionPayloadParams where TVersionedExecutionPayload : ExecutionPayload { - private readonly TVersionedExecutionPayload _executionPayload; - private readonly byte[]?[] _blobVersionedHashes; - private readonly Hash256? _parentBeaconBlockRoot; + public TVersionedExecutionPayload ExecutionPayload => executionPayload; - public ExecutionPayloadParams(TVersionedExecutionPayload executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) - { - _executionPayload = executionPayload; - _blobVersionedHashes = blobVersionedHashes; - _parentBeaconBlockRoot = parentBeaconBlockRoot; - } - - public ExecutionPayload ExecutionPayload => _executionPayload; + ExecutionPayload IExecutionPayloadParams.ExecutionPayload => ExecutionPayload; public ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error) { - Transaction[]? transactions = null; + Transaction[]? transactions; try { - transactions = _executionPayload.GetTransactions(); + transactions = executionPayload.GetTransactions(); } catch (RlpException rlpException) { @@ -53,19 +47,19 @@ public ValidationResult ValidateParams(IReleaseSpec spec, int version, out strin .Where(t => t.BlobVersionedHashes is not null) .SelectMany(t => t.BlobVersionedHashes!); - if (!FlattenHashesFromTransactions(transactions).SequenceEqual(_blobVersionedHashes, Bytes.NullableEqualityComparer)) + if (!FlattenHashesFromTransactions(transactions).SequenceEqual(blobVersionedHashes, Bytes.NullableEqualityComparer)) { error = "Blob versioned hashes do not match"; return ValidationResult.Invalid; } - if (_parentBeaconBlockRoot is null) + if (parentBeaconBlockRoot is null) { error = "Parent beacon block root must be set"; return ValidationResult.Fail; } - _executionPayload.ParentBeaconBlockRoot = new Hash256(_parentBeaconBlockRoot); + executionPayload.ParentBeaconBlockRoot = new Hash256(parentBeaconBlockRoot); error = null; return ValidationResult.Success; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV1Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV1Handler.cs index 20a27945f9b..2cd2defba3e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV1Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV1Handler.cs @@ -23,13 +23,9 @@ namespace Nethermind.Merge.Plugin.Handlers; /// a payload has been cancelled due to the timeout then execution client must respond with error message. /// Execution client may stop the building process with the corresponding payload_id value after serving this call. /// -public class GetPayloadV1Handler : GetPayloadHandlerBase +public class GetPayloadV1Handler(IPayloadPreparationService payloadPreparationService, ISpecProvider specProvider, ILogManager logManager) + : GetPayloadHandlerBase(1, payloadPreparationService, specProvider, logManager) { - public GetPayloadV1Handler(IPayloadPreparationService payloadPreparationService, ISpecProvider specProvider, ILogManager logManager) : base( - 1, payloadPreparationService, specProvider, logManager) - { - } - protected override ExecutionPayload GetPayloadResultFromBlock(IBlockProductionContext context) => - new(context.CurrentBestBlock!); + ExecutionPayload.Create(context.CurrentBestBlock!); } From fbd20a1ee1e0aaf3f3a5cc9c58f31e09840cb2a1 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Fri, 3 May 2024 12:39:29 +0530 Subject: [PATCH 223/551] add request serializer --- deposit.json | 59498 ++++++++++++++++ .../Ethereum.Blockchain.Test/EIP6110Tests.cs | 26 + .../Ethereum.Test.Base/JsonToEthereumTest.cs | 3 + .../Messages/BlockBodiesMessageSerializer.cs | 20 + 4 files changed, 59547 insertions(+) create mode 100644 deposit.json create mode 100644 src/Nethermind/Ethereum.Blockchain.Test/EIP6110Tests.cs diff --git a/deposit.json b/deposit.json new file mode 100644 index 00000000000..bd967ceda9b --- /dev/null +++ b/deposit.json @@ -0,0 +1,59498 @@ +{ + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x01bc16d674ec800000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xabbcd4ef3775772a2e", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x33d1b02e518079b1f462efa8ffabbb13fb3a142aea75d42c7978d0a6f5622726", + "transactionsTrie": "0xe358c23815a60947e22eb923a8f47bd278987db94733b3ed2f19c6962d6e62cb", + "receiptTrie": "0xe9f13c7db67acb65121481f4f9eff264b27373d92b1001d85f22320b5f1368fa", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01431e", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", + "hash": "0xb694225955d5bb7c03af09a1a9f27904d6e2130fe8db0f0927f0947b4235994d" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", + "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf9052af9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa033d1b02e518079b1f462efa8ffabbb13fb3a142aea75d42c7978d0a6f5622726a0e358c23815a60947e22eb923a8f47bd278987db94733b3ed2f19c6962d6e62cba0e9f13c7db67acb65121481f4f9eff264b27373d92b1001d85f22320b5f1368fab9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008301431e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f90202f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0xb694225955d5bb7c03af09a1a9f27904d6e2130fe8db0f0927f0947b4235994d", + "sealEngine": "NoProof", + "_info": { + "hash": "0x892c966c756e4119ef3ee2dd4d5ca39cdc542101bba91c707e272b987a96e359", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_huge_amount]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6890e07ca610e7682d606531ef36ee7231dae289710e4fdb85782ec7a1dd96fa", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x3d52fc6ce4e834b9ae72464c1477d8f2e23d43f5dacfd3ef6477dff6ea9f4601" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6342fd16d0c6171f640000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x6342fd08f00f6378000000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0xc1733701655adf967efe9100e8cfa043802fdf6322431cb5a173bf9f311f407d", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0de0b6b3a75b2a82", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06890e07ca610e7682d606531ef36ee7231dae289710e4fdb85782ec7a1dd96faa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x3d52fc6ce4e834b9ae72464c1477d8f2e23d43f5dacfd3ef6477dff6ea9f4601", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa96c6d9b1baba233e8a67f9b2630ab159c6ce84f290a9c123908de69f5066478", + "transactionsTrie": "0x6b58604864da65ad9111e4dfeb8fa663921fc126f71e74942eb2398366d39922", + "receiptTrie": "0x6460e6adca5c9e2dec7c74de0de0e5d75b6e870d51fc39e289ad1ed39228ec75", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014312", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x8e1ba7a0215358a51dd5acc48ee6feed9cf38f525ec99583738db0046988e3e2", + "hash": "0x4c3177429fe6aaa951ab2d23ceb7d72231d337afba6f6303805e739f382175ac" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x6342fd08f00f6378000000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000000110c1733701655adf967efe9100e8cfa043802fdf6322431cb5a173bf9f311f407d0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x02398da2aaf2046852e261d8a0be0d0986d14d3eafe70322a3c27579adbf593d", + "s": "0x18770cc6d9b095bce62195bd201f4b79db8297301bb90970a71192d1367b8e35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x01aa535d3d0c0000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf9052ff9025ea03d52fc6ce4e834b9ae72464c1477d8f2e23d43f5dacfd3ef6477dff6ea9f4601a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a96c6d9b1baba233e8a67f9b2630ab159c6ce84f290a9c123908de69f5066478a06b58604864da65ad9111e4dfeb8fa663921fc126f71e74942eb2398366d39922a06460e6adca5c9e2dec7c74de0de0e5d75b6e870d51fc39e289ad1ed39228ec75b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830143120c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a08e1ba7a0215358a51dd5acc48ee6feed9cf38f525ec99583738db0046988e3e2f90204f902018007830f42409400000000219ab540356cbb839cbe05303d7705fa8b6342fd08f00f6378000000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000000110c1733701655adf967efe9100e8cfa043802fdf6322431cb5a173bf9f311f407d000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a002398da2aaf2046852e261d8a0be0d0986d14d3eafe70322a3c27579adbf593da018770cc6d9b095bce62195bd201f4b79db8297301bb90970a71192d1367b8e35c0c0f8c3b8c100f8beb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000028801aa535d3d0c0000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0x4c3177429fe6aaa951ab2d23ceb7d72231d337afba6f6303805e739f382175ac", + "sealEngine": "NoProof", + "_info": { + "hash": "0x4fbaa02481e66915a609d4b4f018e40bd03de45d9f1b547e258501856d8a7f9e", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x03782dace9d9000000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", + "0x20": "0x02", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0xaa00be18c288efd690", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5a3dded7e41139197ff26480034c53134f17b420027374d0a5ba68c46deef5bc", + "transactionsTrie": "0x2b790bf82ef7259a0e4513d1b89a77d81e99672ba68758ef2ba3fde32851d023", + "receiptTrie": "0x9c8d7a917ecb3ff2566f264abbf39131e51b08b07eb2b69cb46989d79d985593", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x024f10", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0xfba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29", + "hash": "0xb164f1922a21bcba751e0e045289fb784fc8df9f650324e9df157c76c0434116" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", + "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8ab", + "s": "0x4300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01" + } + ], + "rlp": "0xf907edf9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05a3dded7e41139197ff26480034c53134f17b420027374d0a5ba68c46deef5bca02b790bf82ef7259a0e4513d1b89a77d81e99672ba68758ef2ba3fde32851d023a09c8d7a917ecb3ff2566f264abbf39131e51b08b07eb2b69cb46989d79d985593b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083024f100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0fba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29f90404f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901ff0107830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8aba04300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855c0c0f90180b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301", + "blocknumber": "1" + } + ], + "lastblockhash": "0xb164f1922a21bcba751e0e045289fb784fc8df9f650324e9df157c76c0434116", + "sealEngine": "NoProof", + "_info": { + "hash": "0xb2119e4716821d4d5294158edd2f4f30935602768641a815653dfcee69e7e833", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_high_count]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x6c6b935b8bbd400000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x46b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9", + "0x01": "0xb32a298167876b57c5ebd4b953a6699512c5f768ddccb4c746ff31cf904aee44", + "0x02": "0x90141a44dac70eb24eca43db4089fb9461fd1304bc8d92d8abc98cf3388fe6a0", + "0x03": "0x0a03cdabe62f3f8573116942c1415708fa4eabe6978c322ccecf18f4396e67b7", + "0x04": "0x81a9f81177da067c7053450afa31a3dddc5ed33f78541ab7d0b2e62e99984bbc", + "0x05": "0x6985de225036bc96f8cb90412b330ac7beb84eb42a58976f468dc6a5fbffa9b3", + "0x06": "0x27df9f1cce102019216473e26d94b2f6b72648227af9e6a3aef0500d25d3afa9", + "0x07": "0xd5fce5d388fae4438ed672887b604e7ba0cf39e6a7bda203a7afe7ebc34287f7", + "0x08": "0xabb70c203712ea9b8e073831d1ac1c0eafd529674d1ba9148b3be4d2ef1fc55f", + "0x09": "0x57b9f7ff1d1efb2dd4f6e8aaa09efc7f4b3a89c42a07c9af156e89fbe77674c5", + "0x0a": "0xc7a7bc49082458da7e084740ff6d3f821d7953a1102811542ee7f9e215e3f117", + "0x20": "0x07d0", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x07d0", + "balance": "0x410d586a207c0680d7", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x45b91a6de5e21daa74baa5ba69ae904a3decbf15e7211eaf845701e55efe5221", + "transactionsTrie": "0x9832988f2e56130730b13372b8bb2b429f5faa477ab0f69dd95ac4be4601ed81", + "receiptTrie": "0x0a22918f5496d638dcf1c65c0205974e2288ba3ade03ff6b9b77b00906650f27", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x05d15b4f", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0xee1fdd8114b7c672f67093d83f01b7b042bbe744da6bf2ecc97d6e824101ada9", + "hash": "0x988b9317a6aafeb5b8a25953d92b2fe13ab5ecb6d92dafbde00b6748302e8420" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x30bfaadde922e07317ec3fa2976b8b705a5442fb9ee84eb6e0fd91a450be17b4", + "s": "0x41257abd690f8ecb1197e00c3159cb16f5bd1318d60460260064eabcbfdf3006", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1f953db14db7ac12dcfe4a3bf5673b2fefdd5f05536ec9714d5b2396afd7c01f", + "s": "0x7bbed78cf0d3b6bf45962e3d33b7c58e0ad263b3c7168a618305cd690880a842", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xae7f6d2ff9f1396ca646269e917a7232e92287f74fca578160a9810d9ebcee84", + "s": "0x123e5b6ab498ff9bdda0abf2f11ac58c6bd69d36b7855db172faced230e38a14", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x48cace09a9d8b80ee1fce66547e192b15ee2b12fd6839d6d88a733f61e6dd325", + "s": "0x115fb47c4f8cab29186935eb325f8ad938b2ddbbe826ec01b650a809983534c7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x861c18c825531c9f4b77829cdfd30f65446b047f990da11249d3b1a67b4f9325", + "s": "0x1bcc1ff2e73e35f44e9e9f1be76661fe73680632e503808f9a4be090e4e155e7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x50fbe885b2b502173c23180d9baff06c199199e84cb8fe901064ceeae581a8ba", + "s": "0x249232d8309166719f796b490724758bc443aa20c2c267ad0850b77b1346af03", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4fabbbbfedf60c926b84add1d41b172cb38cad9697e045638fd692b3288f0079", + "s": "0x405e713144b205d30ebae217330e39a08671f1f3039a19346eb3ee0758253de8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdae805ecef72558ed56432a303fae74f2a2cfd42cc700c3e030e77bab430370e", + "s": "0x3855e4cdf81322864a298381e5f557f87e452e314638287e84d6c7dd87f26069", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x08", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd15d3dbdcad0fa346c1c0acf70c373b4b19a959092a0f9ffeeb91395c8c0ac43", + "s": "0x39b7820c18370e747dabe12a1f4aa3fa33f6ab461a97ffd44601ee4becefd18a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x09", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6eff2f34b6821b345eaf7172308f07411d3ea86953270cc8d7d26dca4d0d180d", + "s": "0x18e91821c35f923cddb3b4b9f9e0b31ff0557a33a2802f99abed62b2d71a6b50", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9eb91429146f87e966dfe5f0e680d614b90d445a7024f0d3147df824222e7cfd", + "s": "0x381fd142e704c51ea4cf15c884884d3d3fb54468322712a935cbca147fdbb781", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x81f2280555928874904cfc3f5fab5c174f8ee1b13ee9570753f9720df1c79b56", + "s": "0x21357a1fdf2ad683fbcb4b629839e238cef8149dfc67263a736e2b77e93819d3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xba6a97889900794b405e9841710694a81cd2038fbf5e14b4a63f752ec0482049", + "s": "0x1a2f7a08e9c8a066c968a60ce39fe0d0184dafe35f2d9a8a9acc237282d2f329", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf44c4480b6910737b9422d6ad6ac5f92410433b9d1e24876588717e65b89b438", + "s": "0x4855832825a190f7edbfd82694a0ae4a10cc79c3508775fdea3a645dc7e36b82", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x910a78eb187da9330075c1cd560eb805e116ea34fc5ae5dc02fe3429fbab938a", + "s": "0x40d85a615e70169a6f79c444e9a7d4f1f2568c7ba2563e8972647776ce0176e4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdc44ba25575ed7eecdaf772d37e071386f737a35a78ae0cc9c66ba852ae9cf6f", + "s": "0x5110901d4e54deaa7f8322cfbeadb63eb3b984bd837fe500fb06671a2ad57133", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x10", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8c4f8e06874b43512d0b150eaf9279e2f434684404df2317221006b9e7ed46d9", + "s": "0x6005605cb5393654fc39e47ef7d93fd4f10a6de6b5bbcf2c80310f8377ccfc7b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x11", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xef27130e159c446f39f09268f342b91e36c30659b5cb526050b9440979bc4949", + "s": "0x39b752a48abe9c89bdacda591b52b46306be7325bf10e7c9b46236fc7bc5ff73", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x12", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1281f265da4c0c96221584fc99ef4eadcb04c26e4b3c17494a843e5796265c53", + "s": "0x08ede8ba6f0ee70db3efbd6af7967e15f5b0a1a35f62e44da2dad602effa6746", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x13", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1ff11ffab646cb92362b1630911b7692503786a331102ec1f1f7f71b708713f7", + "s": "0x43257da3dd01fea90ff91a15b0e2b2bdbbef5469aa0b50d982e216a0e43e1ed2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x14", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x208d7d2c54a3416c00eea31f3f94cac01c3337688c6317fa697607406f08f5ee", + "s": "0x0df2927462f5eeda4be51e5b727339874ee7671a5f4dbb111b68ee42ee5fa5be", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x15", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1475d86c913756348ef44bf0b9f1f4a2979dd13247eee5a70975392d0d4ec994", + "s": "0x431928daaf03cb384a3a059d338d1e290e96380a69363287fa5230acc1b6f3fb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x16", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc8de8d69b8026d35d3b4d73ec13300e5951f462d1a68f4be0c1c5b177346ad08", + "s": "0x3d1353c74101b31f680a29f3d9d0e5614675fc535e8abf8439da9422301172bc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x17", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf9dda6a3fbf0ae965bc16564995cb506229655307ba01748313ad99da8eb6002", + "s": "0x76e5da59ce108b2e249323ce8d8467219b2145dd192939fd45c4187e73fbc55c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x18", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1b5572ceb4c3a9631638a85dd3b9716753a96efe8287d5496615e35b5fbf77d6", + "s": "0x233aea4c3a49b3b4d5f862905001abb97adfbaf4fc2828df167e96b4ce0c1c0a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x19", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x34716c28bfacd6d4246ff8873bbc19b7e6f467ce75c593fef158521e47ae7f67", + "s": "0x78d92dab02ebd52feee2cec39e60522889c3d4efcac20fa0c0ef41c9f420ad7d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x1a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeec4ea41e915d78772db83b8d6be6e1c3cb62381e87729ba030ed6b61f6e0b49", + "s": "0x5f6a6b1b542989bbfd58ac4c7aef8ac5bff3a78edfad59fe4daf74de98acc457", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x1b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2e9d1b4102901ac027bbe9991e22dd430243f3d2e715aa75f8f3f28865d6d285", + "s": "0x541f451a95cb8acd20ca9f7fc5b76270477a2c129d2e8277d3bed1e93181c687", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x1c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9276aaccbc85591a59320f24730201eebc133a8a6a7d9ca40c5d69eb129e212b", + "s": "0x4192679f083bf490597ea927f4408704e93efa4581ac8965ca796a1e78156ff7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x1d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd330644ac6751c59021bc5e8023558db4d7b42efd4bc33ecba07f5933b548b5e", + "s": "0x528cb047ea106522d6e46f131f77b51239327d8815c37d192144a6c2c533b343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x1e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8e17577df3e0fb222d82f5ff46e30e499b9cebb355a23e418fbdc7dedec9ba3a", + "s": "0x5c5ccf205bf74abdf30c7ac3bd41448165e38ea7fd44e09e459db38c27222b62", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x1f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9a65058f9873d0bdffa68727f95690244c566c1cc1b5936c1780f4883be3c1dc", + "s": "0x41bb9e33b19d87be35ca11d355bc2c8fb08306ec087acef79df19456b5e27972", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x20", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x65cda48a49ad598966f48b94440a341626903fb83cfdcc1e4a40f9e564daf40a", + "s": "0x1798ed01c0e15cd61808446583c8a61e4c0103022bd0082911c9d805a7b8be8d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x21", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x82b649b6276650f574310f46c2abbcc9535db3f5f252f783421ab34273d79707", + "s": "0x4d15552256b1a138ae4ab56f3968f1422ed0eee91cb35b0bf637cd769821ebb1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x22", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7c2566347ae0fa8ef37794665991d515b56dce1a324869932af91fbb1d7cae74", + "s": "0x3e896ccb66800f64a2c89715ac70e19b63ef491f372eb5cd4604dcb32bf7621d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x23", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3be58a124394e07120494ad8dbb8c8268c1bd06cd2a4222e2e7ea8c932e8e2b7", + "s": "0x153ad28a7fa3f83e162debfbadda76744f2ffefe854201469da6a8744814af88", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x24", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x273fc782c3e041edfeadf2a2cad4935bbebcd2d99e6675ac658c4caa6bba80fd", + "s": "0x3aeebc4f7da199d77df180f010464ab1a499efbea12c895e76a84c8eb56586b4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x25", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbb26993c942d7285cff908d73fb767cb89684ec544a173f099e459074cac6d87", + "s": "0x1fd7691b352eaf1d01ffc759e84d710c2c693a3089a1bb5e7e157ab1b879037e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x26", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x397b06d648e9ea1edafd4dba235d75c55ddc66c1cce4c7624a5985cf2cbeae63", + "s": "0x7bb7ff29908b0dc7852c765bb3df7350ad4cb4deccd4c03086e924518784f789", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x27", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdbe2a516534c4f4342998ac0ea8f3bfefddfb7585e1f02ae0a385dc2f0691a13", + "s": "0x0fa8c4ea1a81485fcca654b57937e3393b62da22057d8b0c95cd70ec0d5e37df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x28", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc6e29c3f5551aff27dc7b17a408c7bf563e4a79166aa2637f1cab3bd80240976", + "s": "0x6a8c76de1f8a6a7950fb332e9b472f792ac022cc8c44daa3cf46a1a445b9adf1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x29", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xee4521ea00ba95490e1486ee10866a449e5c0e73f373c193ca614c9ee758a9b7", + "s": "0x01bd7e6f7b2dc1a48acf06a003fd09e7f2c24f132d9e0c97bb34cd62e08217ed", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x2a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0130cd73bf9df83763c71c78dc273dd42c3c284abd7b254e5d26807545c9f702", + "s": "0x02aff1271c2f4141e299df7a88703f57a2f9a0f4d275e1dcc8c8c9dc40ca6fa7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x2b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1520e5a11b009ddda73027ae4fe4a0f125f9b04185233753a4d4b7fd7107d573", + "s": "0x70c463552952026483b5ea493be4cc21608535ed1d952d000e0f2e10c395fda7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x2c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x98a7428c6f1a1f6bc2f346285fa81e019c081525c0f21879f3d131e1e52daa99", + "s": "0x745649c6ee07012431ee2b12d10140a94eb58fd95d6e27fb50ce64911af21f4a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x2d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbe1e6dbe5d9ffd9bdee102647cfd94692ab2dad9943c7972643f3cf8b08ba09d", + "s": "0x63f6484303a5da3cdcc69690cfbd3eaaed60c5b32b05af922bfc086a2294be0d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x2e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcb5c40d75a1a1dea6134a54f49cdfdae20b861b4992b984a3d4bb1f5beeee18b", + "s": "0x1917ad58b085c1f33d704df9014619220632e8c2bc14c6dbaeb1be69c0b17532", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x2f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x950134a11deeb34dabfdbe3ea21be3b4b2024ec04af8305ce02265a09c0a88d3", + "s": "0x6d1fa6c9634c896a6f400a50b91de6778440d75327338decf6173b1dfec3cc96", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x30", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x552d5c1f64ae8c02d56fe21f79e3ae02613ca7620a815fae01bf2a5dc454c419", + "s": "0x79b88c7ea5f1cd8bb8ff343dc2e507cfdaaf3a16f55740ee9477f3465c103821", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x31", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x872ffeee2b99c1caa2a6a25e8ccd8110261d503cb0284bea25322b52d701c3c1", + "s": "0x2682a003f086a581783af1ff1dcbbe92723bd20195732d1dd1101ac7b3e13d25", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x32", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb4e7d5aa82087cc385cd5415703d2b0a3609fe01930520c2ee6fcc2cc66b3200", + "s": "0x216c836d593e93fc574ff016271076c5c1177bd738830b17b0e17d5536adc1d2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x33", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf8ce12c6738b4d9093615e85a50dbd13dc4c49643a1a4f74b153328d4f6a7d80", + "s": "0x47cb587232bd8b0f03e111d7905a8c8e1b49290de95fc55929ae54deb394fd3a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x34", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0e6d4ba0d16a94cd5ba8e9163179803884d45f0d3b70beb76b0847f0db770bc2", + "s": "0x0ca97524a7d002e8e6833c0594079ae6f43d9d35adf6307234c50da2d1e2249f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x35", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6c466ee1def939321f6a6f618ddf3c85946aaa8a6d1d1429623a43254871595f", + "s": "0x480bdb8c4167b8f68f5e71f5c9c3d7a44c243066386b1aa82b2bfbfbcab4ccd1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x36", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x309f9165ace59e83cb8592a44ecd1866fb611a9f85ca3af683d6cff66de60a37", + "s": "0x46b8447395b35775c4c0dff87c38b79d85bceb04f962528e0f8268258e7b42b6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x37", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xff7d01ab7aa1a7a8638118019a10e39df1fd0c0699d5ab54cb0c081cc4b4635e", + "s": "0x4269b7d775daff6c191e560dc95f32ee91de047c8130878645f2608201dc7590", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x38", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4548d41641babf95019296ad1c546aa65ee89da85c2c7a95ab49b8a48ebb9efd", + "s": "0x0bbf7e8abd6320f53df01a54bc54cefbfdc6a068ce00366897fea9b5873968c1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x39", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfe68f675aac42272ad8f90b51a2877e6019a693f3310ec4891a52d942e4a42d5", + "s": "0x776b995e5fc15094ae13946a475a0646f7e4d0248699578f66a995d4b8799fca", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x3a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xee3d298c4b47bc795eb2eaca2334a352057bb0904a08b12502ef982290cb3293", + "s": "0x4614e54a816d23fdfacf16cea9adff8eb07da95224080f17743ec0bc30051452", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x3b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3c241f16dbe10f1207fa4f696680becdb5790dfabc19d49dc0091cf2eb66d033", + "s": "0x2d7633c6c6b7c4b19b96b8344706e29e507c84eafc7623611637124abfd8222d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x3c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x135300604bf871c099b002d1fc242e954b5cbc0c8febe0435dd9359eb3888159", + "s": "0x2e25ac6d3c588724d3639f2632ccb1cb554bb3a1751b6d25f8d507e310c7ffc5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x3d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2ae4c7a84b8220a30ade7d5bb02416fb02b6315e8beb95b5e9e2180baadca2a0", + "s": "0x51cd7493db288496edf44c0903b7748632fd10e900086fe91dd636f0eb9d7ef4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x3e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa9581826e1638e7060aac31848d72e8a94d549fa8dd52618b8b92846c67a5871", + "s": "0x5a1dfb368ba242afdb36c55853ebb3795f59a4e1b6532d2dc4c296ec5fe597fe", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x3f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x50fd795d555d31153965fa1a540fe38e523711d8ee14071f5739421f0706dbbd", + "s": "0x042d43642633825ed96a56c1896b520deb13990c2b52c68a9ca6fd14fc82bda8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x40", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbada34b96134980003b543ca853483918038a416ac6766757edffa1991cbe87e", + "s": "0x744fd1ce5f38af3138112cd92a7b2983d2ede6ad5dd91b81e5f679ab3ab469a6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x41", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xce5ba871c7364d8edb3f1af972b4a1a21851049251e466838a19a2d01e9310a8", + "s": "0x4ff5187ddec6ca9f64ab64b8df8fbc0c90cf8081d30a0ca771eb1b4d00866454", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x42", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x050fbb03140e0d8794907e619626b58ae8830b966517638b299b82df85303c8c", + "s": "0x5e946f6e617da2286b37c6cae6ad22b2cba0a48ca2ead0c6aa32cb2f611f9cf8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x43", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2154375e0a448769b45846ee65e725a3a702425ae430f76e9b2e401dcd07d61e", + "s": "0x0e80ff7821d8776d9c3a03d2e14a4f4c659210ae0f0e9a7dd3f8c2b7cb24e878", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x44", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x546e6e53fae2fe954254ef5a4ac21127f564532cdcccef55206a40822f071e99", + "s": "0x0b3fc0788e90b7e2c7ccf0e040dd2e9374dc70ed035fe1bf045a785f76e130ef", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x45", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2630a8a2b68ee0ab71de697a18d9f26245a32c523b1a416dd583ba044143391d", + "s": "0x7d757f9c0b9de9246a17a2c4bc5dfa61f9d69a24275e62b312a3557a4d217c8e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x46", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5d15f59071c7d289185e3b38d9e68d29c86eb95df0fdfe8276ab10af213c6ed8", + "s": "0x6c89aa67f4531dc8cc378fc582f58d4758602e55f0f159b682049806ef7fee63", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x47", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x86478ef013bc35b4fb23550c8969ef05271afd4ea2283d61ec1d63c17809e592", + "s": "0x587f9cca2f431d60dc22065c3d2d19c8c77ef0806f7c32b747a9ea8556845f1c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x48", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdd1d2223030a4636ec3b18d85915f09b2042c4cca3a110dc83812d33a807f001", + "s": "0x50adb91f0bcbd64dc62a1344026abae36e99985e3f0e5d381976ce7543e6d8c5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x49", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x272422a872a113c4903847687b96a46fc7e903a59fdb7d52855231033d1e95da", + "s": "0x63adb464d1f9cc270a91d726e5abb5c32a3d4c064aa9d14d46d20cf569ee6803", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x4a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc37d9ec1fc7e0f50fadd2541381c84b680739184373154f3233eb8e60d432541", + "s": "0x45de21c3c3d505d1f1e10a24d69a7cd927c0a158e9a810d490c0a469e2adb8f1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x4b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf6f56f5dd31e385bb84042a9fdc16790e08412a591d71ccda4a4cf5af966484f", + "s": "0x37ad8a17459b384fae29edf7d8bd9400246db9b31c3c52d871cba85fa12ec63a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x4c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe9925c901c51e760054f85a63f14bf55e2bb9770d4f2ee97f67a1339dba796e6", + "s": "0x2959bd4a6b4c278076bcd90485d894d1508f727b8edd96aa6e5a91db5027f4e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x4d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x619a1e0986aed678dd714362378d57e4d0d4560eec83c77401b122e6f06c32ae", + "s": "0x0b681c7d375aa8ad94d444443a5241236d8ee7178aa9d9e3b390152446272733", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x4e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa9e2c27290c3eec8596b72e1abf0f2cbeaadf993b62519e8f2e8f5f7380b2869", + "s": "0x4c6594ceb3766c1e9885229bcd6b39cb48163a12131f0d7ae41b5b366a841a55", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x4f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xea64bc00ca0607d43673a547839df2f5f14071b68ccf4a1ffa97339b396f712d", + "s": "0x1618e30ec6b6d47631f2db134655511394a76cd80a36fbfd70b9ab4f341cc885", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x50", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0ce5055f7222659247c31a8b7b42ae082d160d92a2f2ca9d5c0d7cdaf3eada69", + "s": "0x0aee0fe3e92f75f2bcc8b1c1b9d5b1a08d54522ea2d11bc3aa416f06d727034e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x51", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe31a51c402796c6300692b7ff0c6423aec1122b985131df0193c7199341d8247", + "s": "0x4bc9d1095cdbca7c78ae4d9bf9a91e36245faac41d63e1ca87e3dff12cbb7652", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x52", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xce05d106e03df07e754f6395d9535ec3caddd40811a659020cc43205042fa632", + "s": "0x34701a79953ee0f5120499f874094c872a66ae8fce1f4cff2fb09ecffe9bb1aa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x53", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x83d1165fcfc805cc3740f719fba2e88c814641bc62e7f99f9c5c398d9e446f07", + "s": "0x15ccbde8864333e89b9909850754fac204d917d9ec4e9d2b8ac2ae824a7779ad", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x54", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x15829b6424b08dbd2fe09562d56c9492b1134426bbab7a2219e5405e9211f603", + "s": "0x71a1573fb9da1f182e5b47bb9c5d22f3615ad2ad10d96003f484f4721a7a5b31", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x55", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x163a52be64b02c1d10db54b312862a0ea0f53770deb41c39ba4d827620fa5e34", + "s": "0x04d0ef4d5c3b0c2ab0489577bf573e95212c2e4cc113ca3aff7d4be87ad02227", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x56", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdceaa112aafcbb854396b567ad21ddb8b9033db655d8491d47c89d5794281063", + "s": "0x65ed7b789c1091ec1c9d16ee403b00d5c1a157af3c9f42b9d0606f55d77ffb5e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x57", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x16a13948231a380a405f3fd8153b5f880ebed457c669e49f3a5f48398f013d41", + "s": "0x37276ffa0df8652ebe13d632916896ca6bdc73c745da9a49eb629949c70ab85e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x58", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf03b89f8d2340ea29af76e061f256fe1bc54ce24c000ee41921b7c010bfc177b", + "s": "0x339437a5e44ab885d3aeeb9746ddf0a43f683c56dc817c42180426e2cf2bf89c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x59", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x48f799349aefcb86cf805b25f35a749ccf58242a4e2b9420f0fbd27e6844ed02", + "s": "0x192673adb2d14c689497222a48bab997997e9ca14e2b00043feff29452887fa4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x5a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf5571c0f55a00bd418be5d44bb1cdb07441b12b0825b08e2f0bea7cefeadac67", + "s": "0x3d27ba8f520482c213a7391cb00ed1b5e1a21f2e43b160e0da7f98f575abec06", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x5b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x71f3161cf021abe2ec2d82f69f669eed1f66e7fc4c21b7255cd33707fd0ce520", + "s": "0x7d9982cf3e01d5077c40ca0d0cea59810f456defb412b02d35ce955fe66c4009", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x5c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2d24494c5e29711a1bc80f5c41e758778c05f3fae901d3c2537a095e32783a12", + "s": "0x4a911abc5c6c4aef34c35257240172108a17cca7db691c2b765d4b5b34358c2e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x5d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa4754f155f3cb5c09814a80a1a0cfa36c495c6d79a6dbbe0eb1701b8c37f1561", + "s": "0x4a93aa032d0e0dc7156e8af29d82ef4db53861bd606dd2e8bf12533640cb6543", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x5e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa6925a12c2a9dd24c89c077656b3ff67934b96af1203417167fb19640566e152", + "s": "0x1d841f3f83a7a52152bdc2aed332fa4edd29571bcdea933128bc8a7280086521", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x5f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x713f5e5986bb6655c4548b0d9007a0f97f9c11e670501e28455ce47641e83905", + "s": "0x7592d786224e2f9760a4aaf3cb65e2a638c54d3e03c40b884ab5d8fd575b867b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x60", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7ca95946554942d4c991cef63ac30d58f794682b4a96ee0655d7460d3ac06adb", + "s": "0x25aedebb0dddf781829a85ba6fd42c063fa2a7aea3487b21a05f51135ed9c692", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x61", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9143b5f4c15752cecf3746afd5f2064566f3c4fa373913f34629f4809f237238", + "s": "0x411e0eb56604ff9b361855942492e3227539c0347dfac1428936fdbcca132b97", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x62", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb108494b53797d6afd359e154983fd20143b7051212dcfeb8564f5ebfce778dc", + "s": "0x1e4cbd01a9bc75af072f46584fe695541d6b0cddbb97d900561a0f327215eecd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x63", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf7b7b6cb68738dc40921983d2b6b454a8fd7217890fee3f1ea68866847cd5740", + "s": "0x257b8b0ec1cb162457f30c919c063ba1797dfe29afa240e730342169bd4cec63", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x64", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x666e5aaf0986ee1fda1b72ee4fe9a82311b0c809c266d5ab11d11022b9874b55", + "s": "0x7e8438f1f45635f76db910dcd1099ddb91ef7bd72fa277164228f82f92bcae3d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x65", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x82cbb2ef9c903d610d2534e40fb0cc2745062572a45608dc60f1ae28938d9240", + "s": "0x3c6ad55e6b7857884a615cad98edf3c4868612f3a15692d28b9e35fb31ea22d0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x66", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x66db8cddf7f78dc98a85da50e1d5263a7518b573b1b95853548ebd3d12b8820d", + "s": "0x1139cac9c7b1082a6ed979271f2cd3b8cd23c4e342943f53b67a0d5d69da1dab", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x67", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6ba13c11c6bd52a7f3cd6bfe57795db692ed4b8d60702800efec7c5d0f932e92", + "s": "0x3cbf54ff26b456220537b11b78d60bf1b5c34a4bbc1aab9d88478cdea607324f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x68", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7f4b6a4a73eae8a3cf63aa9e863adde2c890c64c8eee7fe286a7df6cd9ae199d", + "s": "0x0a3c305b9cae13983ec21784d3b52b2025c6456c753da9035d563604c8211da3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x69", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x78827fb1b93f095c13f442f340105e53fdc9f30df13fd69da74588b0e17571b9", + "s": "0x600162a652b3fab6525f1428f2f727eba40ceda6ac0ac85fb0f8023bfd5998b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x6a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1cadb5d6845b63ee01b0a7848b54ca720b7b0b46decc67458240d8eeca827b58", + "s": "0x185809f31d9b4b33d2023c1ddfdf787f97bd156ddfacafabd550c182fb5626b6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x6b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5b7959086548f45a80e4337ccb93ea38c6224c2d3f6fda9437c9f87ea56aa071", + "s": "0x0ebbb0f375fb043b2e7e729a81817aac272ea3342170b7284a9ffe04307f221b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x6c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x887ef8bd2a940f65b066bf672daa5c9da9ae3bef7ba3798e0b61e01c173b83f0", + "s": "0x537010836fd6e0a9e8d5bb34820f3b56430f448adcdc25e195a63757f6b2fc6c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x6d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5e356f0a2e98772d12ec22a5240ec47122dd882c7ef2a2f1843e77a1fef24f24", + "s": "0x0ce9eadb09c5243628677ee6295778471b4ebec078fb6cacf6465caef1e7dcd6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x6e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6345be4691e50c7617559372ab0ff567e706998edffa9e5ea0255189898806c3", + "s": "0x68f081f904212544c73cbb5b362115e231f09dafc014e3f29c800e43f0777af6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x6f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb251e3bbb5f090f41f9fc072906d1de70739fc007fc5a7618c77dda038c84c08", + "s": "0x4efe5a210efbaeb82f2646a9f82258484a25b5cc74adf6dbf1d44610411c0f6e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x70", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x266a2bbdabfc48777555b7b3e07a70126717aa5bbd58d7d3d6a5ba2bff795d90", + "s": "0x208c4aeb4b8f18a1ffa148d07b646e9c0e8edbda9f606956da769e9e537f03dd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x71", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0a600d1b5369d6e9079b2720be2550df7177dcd4363a323303e1d120e324099f", + "s": "0x0cf342e8e0633eb46452127f0b508fdf71a3fbddd7aede072fb076434c989a18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x72", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd6fd1c1f164d37376bf8bbbc9766f14a2f40269be5dfdc936da4b95be6622417", + "s": "0x3c8f643c0be4f482e98bae8281544e6fd3bd07c8edc0ffbec2c73fd5f48a428d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x73", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd0388287b5335fd022bbbcd39bbb06baa93c1879456e96993142b3d862e30ae1", + "s": "0x715a5f93a08ccf6470a3f6d670b2041c6d6a23236e6f722123b09e5e6e712e84", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x74", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc15eef91a8b38b0202a32e1d10e35441db1a3c00e6c2e6123a4d400843379abe", + "s": "0x5e8a8b1b038bb6922c8b4e838a8b53b5fc9fc8842eaebc7bb592f409e5e79d47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x75", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc79106aa4021e2568f7462a8b943a10cf025a14d64e6f2e5a5d473e7800d5d0a", + "s": "0x01f9da633896cfe6260cffbe40f4406d0257630f60c9afc4bf872021a5ee2707", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x76", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5e015727be7663a16ded69f23d3097885b8a933707ff768e9745053b45f83e05", + "s": "0x310ee338e6420a76aeb280ab1a5c56f3e7810220c84e0214dde83bc68a0acdd6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x77", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe5c4b751a1759d9b70cf043349de77c214a7d469dbf6eefed83b6e94916b7704", + "s": "0x688c20aa890065a7f795080e297c50d5acb7804cf513042e89af1a930821666d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x78", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6cf7abec00cc88de6e8b1e99eeabe20f76a1d6b1415a43ff3bf0314f74bba081", + "s": "0x5726d3bdf5d92e61a3aa8a730fd35ed75b4e0727ec1520ecafb764f0eff2531f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x79", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf767bc4ac0d203a9390498d5348a5d24abdf1378f585ab461b1bc7b7c4980cf7", + "s": "0x21208f773d5f8e349fa05a11823e4e51a7536500d41020312e26b4adfd894dfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x7a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7b3aeb50d2ec3ac9b9371e84fad6d6e9687cbfeb3f1a3a4824e0bb7f84883569", + "s": "0x2151414c999118c6cd1161d77e08c7f0de30efd58e28a1f925d9f435f5de0b8e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x7b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x61b8638a043589365deb454683448cd64e6d6910cf5b7d74e1780a003ca902ef", + "s": "0x3c2418ab68f700584316886ae4e226dd1146f80658013c9eddfab57c9633c3f1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x7c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd037a9c9cf5ad87a446f418ed91f9240d56b104ea52859a452a1897e68609eac", + "s": "0x2c65fbc5f36f8d7c1a95799c1a64c25f87d4c8b124d92d989aa78c76ced5fa2f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x7d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9b39b10e7890b8855e3902c61f9481cb9dfcc9897028f4d84657e92b2e843fcb", + "s": "0x2f082451860cba8529312749c3cb770044196e2ad83e005316c259458f3d33a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x7e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0e0c790f90d72b4403680ee1e7e54f0ce55fafe32f614db1da7a749729b48add", + "s": "0x33d3bafa1b0bfc432c3f3079dc6662b35ca29e6298605fea554f45bc78779533", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x7f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6f21803102b7d1f4355a36ab99c47053b2019e5af727dfce16758df8f7080a23", + "s": "0x55b3e15ec9161b8e04e06c4271012a4664e260bca639cf8bd6f475935828b255", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x80", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc23af0538111f2c20c8f058eeea58e6f4d180ca2e335bcb992cfa7b0060b2801", + "s": "0x065d4c8e1d95da282a6ef79895e509945928c577386af60c7e8404f7e68997e1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x81", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9dcf2c2f0833efe33028859c06bca3b9711fcb2577c32890b08c16595819c5d5", + "s": "0x24e0616d04004371344b36a41d275ebf1ee997d54a7c5d98a0b11a6c60ad0dd2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x82", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5af33653a918764bf5b65d8a30d3effe63e00ee3ab6a594f288a50eb92524ae4", + "s": "0x2b5449b3f5bcf5bd2d6f0849cc17495d64c748b95a1a164cc7373912fe252bd9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x83", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb7d53bbb3ddea5b5ec51d0e71787bc733ee7d472de457a298c9b01de5cb55d34", + "s": "0x5f871365aafaaf861154a8b7f6b6e6a4ab0f512d2cd55616a876f0b1b7cb3206", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x84", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xed1390ce53c6362ed508ae53be09d784dca4418b772e93281da7d2cf21dd8855", + "s": "0x22e327c73ffbc80f97bc6d67f2ab183b1aa15d371baea213c4eb8a6b36b21c19", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x85", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4803b814b4b3b87ff97a7409165b1847947830442ca4638a68956e86663dff26", + "s": "0x1ad6f4ab016a8dff98bd5a658f12fc14cd2ce8d420dc3ba92cc5388449224777", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x86", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdcd576746d3fd3535568c9f00674cc733bfe214b63c88655989ff01baee09058", + "s": "0x6cbe7ccc0e1366b81d48cac7c2010170a89f8c9f67ad91a632a46e7b0adef921", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x87", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x579cb2976797939e0299e84a7be80fb1646b641a0a7517ede71875b8853b3ffd", + "s": "0x4d9ebc1d4fbef669950faafd4f6bd6557d55ff8b5b01097230ee88dc42abbb8c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x88", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb68b2fe588fc6514c97399bf95d34998ddef42c511dec10b2a13f800871795d8", + "s": "0x70f74a4277c791168983709dbc0851c679eb504c534b9cf9d26c01f51378021e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x89", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x67e79cbc078202f1a0d611e1084bff3cf45136c02430dc58a460c283d05556", + "s": "0x7460183162b1cfc0b3afc69986c63c9951f3562c5e23582a5d8dbd176237be24", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x8a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd1781915c05dc2a9d58ea3ee9703235d5282d2d2fb783c57a5f2538e4117b1cd", + "s": "0x3d91d1a24a482dfa5e3d4def5a286cb74baddc17132d2b2fd1a9db4bae28a27d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x8b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x056843123ac4bd31362b9dc620b8a29643b1174eb5202fa1b1ec5ff3951fca13", + "s": "0x08d35201606ff48e78823d8468c0ecc38ebedaa4dd1cb1af23b0be04a05a8ed5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x8c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3c24f9276aa06d8e15f04d8268197c808baa2d72e14bab73d8bc0f6c40403256", + "s": "0x2e639814b0d2dabae3661b15057f32e81d2e8992f75621f9ee132b16cc304c13", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x8d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6aabbe9c006cc9a516e709f0481f23b4e0dcc4a9a01927eb7f13dbba070e758f", + "s": "0x497f38e035e7047956dcd017bbb993d116ff0adb441abdf221f1abcb86d95fe2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x8e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2f2fc81c0c6ee5f9a5de97459d92b8b37bcea5117f2e639de075eaffccef204d", + "s": "0x202aa50e030622202e83d13cea4f16885a38ceec60f2b7fdb0425114a99eb163", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x8f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2990b4577ce0ed732dec87637400cdeac01fbd4368f74f54c17927eecd429e7a", + "s": "0x39ae23baecf98703a8203debdf658c7ec31c2e16844a506031b98daf2700f30f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x90", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xae7196fd8261d9cf5e7ec6c716e24c0daa3acc0556fb3a6c79d6b1b6c21dfe37", + "s": "0x11e1548f3484e2525ea37e0a6cc5db4fcc3cc3fd2de1f55b6404bccb5c215999", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x91", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xaa2ceb6d0b530dd182e3581d8f26f9a0b21e9f1931d9a4cc16fa813f5abd99c8", + "s": "0x375a769efde2ae9bf86608fe8c84976ce148d89aa0631d4da0827c3a8c1ede75", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x92", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3c328d4c78907793ab45e7e197bf324cf852a1b697f2708c52832c7050f5e345", + "s": "0x7afe518b46684e62329e70e1c777dded91f13e2e673dbc3e98693b986d2bf42a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x93", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x30fce07d857a21dc702416f025d7600d32da6070d1701c894a8fc4834d4075e7", + "s": "0x144775bad50d460fd5b2c28291e1d012c11b33b1e3f2fe9a1bb2d33f2ad9e5f9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x94", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x091ca73174e46b96c3ecf05656ebd980ccc86e3d10c1def697b582c939b886a5", + "s": "0x31b789184ef8530ac0e00ae174872e3578d53f392492fd7c6209bbe13911d8da", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x95", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x44c2f6ac8e685e4b30452da15c3f67150b95ceebfb3456039387fc2e9ed63a29", + "s": "0x0660d7a1449ba7fe15b70fddee5e70fd6de2b0ced278b3d683d8903e3e3b462a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x96", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x363804a2e6360ced3b5cda784d62323949e53476b9c92f603fb66858d76883e0", + "s": "0x2ab9dd354af169bf92b529dd125aae36b9ea78907b1403200311b571148038ab", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x97", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa86908d18a513cd0d817ee02d9bf29896d794ec42e33aa94bbbfa409eec68ae3", + "s": "0x0ed16d62ad6e30d369be844cc0b3a597d2619676316732e4a6b5ae46959c4467", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x98", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa01d04dc582736eb1237745bf6f99ce50f9882b04c35ea9ead79b475b8bbd4b7", + "s": "0x4f1a6b7da65958b9c762a6882f48939ae85522c673ee4ebad77a3dbdae2fac69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x99", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x629bafb76b54e614028d6cf9ce3a27365750fc3cf9446071fd2687d0ab209817", + "s": "0x0a5cdc8285070d9fac617fd074c7a0de9ef07358989f42f20d9b52c29e4664d7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x9a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb19c1ec71f6ac77691b7a0583627d4e22647a9c4e65a0338133441d68c99305f", + "s": "0x3b68ee1e20dd37f50ed9bf84e7ac4faab08259679a49dcb55d721aa39d0cfee4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x9b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3ea25b8f969faaf752723afd48b7898f91d089cd1a8ccb9545dbcb80cc4896bd", + "s": "0x6967248057d75d9986a237ee114837c4c5f009bb9e3b202a5d0b79d71eb4de11", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x9c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9eefd6a7c4ee355a067a0e1b52d697284c2a6f5016d13ce9d319ae6a934a1e77", + "s": "0x279bde03d38b1af816c3bd7d71b2cc7bc55de3c3edad89e78b587716af69789a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x9d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe8b880fe4632b45aff98e3f48a4362e5ed2aad49444ef647c2587bcfee263575", + "s": "0x1bd6d1bb2b067358aad339b091278d3aff80eccc2482a467804a690313ce3bf6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x9e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1995b12240fcfd8dd9540badc309afe1f269b5f2fdcc0024c9621aa089d8d21c", + "s": "0x69f32c4143a79df510537f628cc1db538408ff1c617ee4330507f0c4bf648ce0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x9f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfa98d7dcffd59e7795ab3699d54c9e7b058982494c6079614a56deb45ce54354", + "s": "0x4901dc4a6f63870ae9c281120900a4c1a4d0d880bd9f9bb21888c14951904a6d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xa0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3138399804ee31267dcbcca1003082d4309bd76f84d805ba4265ccfee3742d74", + "s": "0x28f6fe999243717f313c5ce2e81a185dd721356c368d7a8d09f65787b7471765", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xa1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc85f49643c4a15a52c13b7404ff764244b843b6b72a068a3d7ee8a697a0ca840", + "s": "0x50c10b2ff7315d05d8023a87fab2bcbda8866734c9075bbbc35bcc09d1fa4335", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xa2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb8c5e906c437307ed3125c12cb9dd2a3a9ce90786de762280eab3dbaceee32a3", + "s": "0x3ff54a9d73cc913e9c18b00c2e3822c72d7487cb6db0f7a4b81808ef66446820", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xa3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0caa5b9445cfffce62b0f51fd3ac43a926d409b28490e6393ade554ef9b451f2", + "s": "0x46dc0ea812b60691e3d0f751c5058f879f1559957e7f4b90cef3f583afe7b416", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xa4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1ae6e9c67233d6bfeee87564c7f0a4314885d87965940ec87c3d73b0d0baa136", + "s": "0x5f2bdba2111e70746440b34aadb31851f5cad47d0ba0126d7a43089d8c394cb1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xa5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc6b4ed5b12e7e00866b67fd068b44392ab620915a4709bd7b3c2b1304cebdabf", + "s": "0x5c4fe543aa8a3f49bd877a2f9895fec207b9a56438e98e62938d07366d66e294", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xa6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x090de1d6414ec3495df30395513c82c35f9ca5b4497d567443e2cbc386735cae", + "s": "0x4d166abadbf7cfeeaf1d0842b81d74e558ec94a210befafe617b2664dd02940c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xa7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8719dc204de497dcd7b0c68a1ffd9d8b3f9bde65fd9c3ccc1071dcfe67742630", + "s": "0x60cef812a61dfda7c0257fe985b57c1888eeecf5277ea5b182feb515b8191bbd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xa8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1f00f03b44bf5b01e79364abc5fde215278f48ffa2a111d3486932a060715d74", + "s": "0x26815332734bb5ec7c7f50a5ea936a7c848ce9780447e2d20693b1c4f10a2d2c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xa9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7c7c157f1d6aef37faac98094999f4f006d49ff0513dc4546909ff2c72558186", + "s": "0x3b5f1e293a6d72bd3498217ed08ecde2207ab25bcdec978a6bd2e724d13b67ee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xaa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x68d22775b78d38579e78f2ab5a98e63eaaeb40a17d4a7cb509c463fb28c790b3", + "s": "0x69299799f72fbe791453a6c43b9d48156cbb370b5774c5a37aa4caf91da0beb6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xab", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf9c0ccb2b108b70a2af68057e8b288ce607c6f2b4c9108b2f13c2ddc34ffaffd", + "s": "0x5becb88b601988539df9871b2c3d7b7207a8e6d42e00d91be30f403112288511", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xac", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x57e049ec8e2378ce8c29d2eccb007830447945e4fbed92b7645203729d21432e", + "s": "0x5e47d3d2a6f57eee6a48e366b4ccc49de74073ca6afcd102e5d0b59467ddd644", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xad", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x34b755cdc9a3fcb5d6bcc511ed0dca8925b50670ec8c09f3e01af86aab120e7f", + "s": "0x6f61ad45b19c11af1482f3ae4dfc634037c0725e6209e40038619cc6e36823d9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xae", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9942e24535d0f61657064aa627b5fddc685adf2f2c8f2cb5a8954c0e5d6fcb31", + "s": "0x55d6e41f70bdb833840be484d1efd2b282267fdeece5ab87f10fae586163f094", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xaf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9afb0a177150dc8fc0d35b652a6d52c540caab3321fae47dbf9bf43a575ed645", + "s": "0x6a6c0a4845d384294a16adf7c8207c314f0f50a89531e4c19325bd816789ab26", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xb0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x834b1d740bc389ab6bfb7e96bbfceac3746b964d0e807318e63f1e1a0a7ef9b8", + "s": "0x0dcaf3114ddef34639cda679e10700de0413c2f8814cec2dc827f1debd1b0ce3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xb1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe9a3de12edf04da8ba2c18a94eef01319b2e0c6a8f56817642cac38727f75cc9", + "s": "0x4a45ad6ed5d2e808aa1b40497379690f301fba61b63af9b373288d95f44dd514", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xb2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcd86739c675ce6cb9c53e6508b8baa18e01326fd8caea81a6915c1bdb50e41d7", + "s": "0x25caa449b949dd9a7243fbfd78b2ea7275d97412096ec20959494d075606bd36", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xb3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x312f947c920614ba0f12433bd192e3af13bcbfca665e16f5f20889e239c8a393", + "s": "0x5e029290afee75cf81b5eb99f12c9f314b28d340ae9111ef1adf2d48c66a115f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xb4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x043959335ace01192a4285a555bf6336b07dc54dd7a3dce42539fdf5fd69baa4", + "s": "0x3317c5f3047d035a03573947c2bea5143d87a5a9ddbd7d6f8583c00aeb78083f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xb5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x44f492a184b1c17960a85d65a7eea733e266f647c511f2fb0fd38330e2a8d519", + "s": "0x4ac62ff3279678947719ca30eab1106b259d101299933eda4cf68655b39e3201", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xb6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x08bc8e695b66f60842eadb8bb5e4b21fa7787bc418957693772c70c4b618c2c1", + "s": "0x6d13a9a655acf95bed8a79dcadb35ab704b96dfe3fe28df18c8f2ae2d96d50d9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xb7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xed5c602466d5f8ad584b64f67f2a6d662b86bece09d63d3d3e9be60285af697c", + "s": "0x660d6f0afbe7f9cce5cf58588b3a6c57e9196d96b1ade00b39f5d8b44a1db24d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xb8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9bdb37662d95250a9968ef2fff75f74a9419806881abd9423954f11c2ea2734f", + "s": "0x110dd03d6faaa2ae820443595aa9c2945fa74e341002adff464293ad92ea8596", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xb9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x44b7de1a9ba0d839160b42c7be0601d674b1dc22621c06ba45776aa010a614c9", + "s": "0x4a6822bcb25214b75b4fad3873d281c03643fe1527de4a80abb6899053ebabaa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xba", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa465852de02fa7a4a7c6da9bf2604ca642d4ee50cd0f3a4c1c1bfddd8a59dc08", + "s": "0x7cb7a660abdfd44b53e0c562efa2ae3726aafebd5149e0924711bd415f915d94", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xbb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x27b05a5b5873c8148ca9669e1b21d0af919ac302ccdcac47922e5158457d9f53", + "s": "0x360d14f0259144d38a31297fcc145a71b6f03fdcea785935ce168074d9f16174", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xbc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x06d80f58df5232cc0856c111f61f582f86d8c9fab60f8d4015e586af8bc0efa0", + "s": "0x69583604e788eaba8e8f52f94366e55f29d423988904572f581f595f7ba4e0fc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xbd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x93d65fc49e7d19445af6da304b0f2994708992ad91c61511874456c4e9298132", + "s": "0x591e054012bcab96bf72e9fdbd4b0e52b4976f12bac723fd63d0106b4714ffcc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xbe", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x60a1a63de170f104e51fcc8a168151309a8ad27211537d59aeae83f4a85fc9ff", + "s": "0x2802cc924eef0730f9572fedc53f3e531ad2cf5941a6c20ca349c13f42263bce", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xbf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x44ee795fd5bfe2676ba4d40f925af72c36e46734f1314a0d5d0a2fea71b745e5", + "s": "0x1a02ab666ffe3b22fbab308eb4a82bd416e7530c113865d4ad23e9fcd6cbe502", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xc0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc6b0933bb71d5d2ea1611d7f3b8580c8dfa0e4f411128aa5c0e23985ec2cb67e", + "s": "0x16e9f443c9ce0825f337850a220d47b97b2e95534fca2e300ce10f7ec3784fca", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xc1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x807ea9cc6c7aa21c8ac6ba8f83603025c0e3a24162022e250756378cbee41a09", + "s": "0x5ab1e13fa5002e343587701cfbdec876760980fb038b25a80842a9f729aea95d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xc2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xaadd090ee81d93e910ae2b6107f40b597ae2bd828dd17b651d2e90287035a74e", + "s": "0x15fc42bbe099290281369b8f4f8c9a23520948e6fe7118412b604aa0eea253d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xc3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7f9e7b77f04886bf2bda53f2235e17de04e2ba88bb33de68677c3be5cee63fa4", + "s": "0x180b961d255ce79f6bbc41b3d7f1b1cf028f6e51aa62f1f7c49c304093530b3c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xc4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8c8774b5c6691c7bc7a069754b31721ed815f08fd2686dc6c778b026203341ce", + "s": "0x5a96c6abfd67e6165b1702e18dfd5dbf54279e6a14f9a24ef69570ca3fb0b5f5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xc5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd9c72f1e47ebbbfd4bf670f2cfd4174a6faa7a98886bf2d397a094757eaeb341", + "s": "0x13f6cf01f8bc8165fb29032b68684f99779b1be3d3bfdfac71ea0e47f57a2148", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xc6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x426569f6e25f13b1da4ed9aefa2a2922d41bfd96b2a25a04dd020ece12c4d3d2", + "s": "0x701f1ba3c0b06404a3694f733b59f6db41b38559a44c257c6256b30ba21e4206", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xc7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfeb7ac09f057ec985e0fd4666fd4d47f79d25333ff67c375ae346ae4c86a0f16", + "s": "0x71f94854f083d368a48c0b528d9eb6531523e887230124ecc7890500d56a5c7a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xc8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb61257aabb3969a83936899ebd268e238b5978305027ea69dcf160ec8f74f743", + "s": "0x5d60de636ba9df2edef3aa0e478971a025293552bb7560fd330b8514ee6aad86", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xc9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe4bb49895017f42ab75361004d43ddf54b3ab021c588e0491c220e613d25b98c", + "s": "0x3510d3630aa350498ab2020c0f92fe11683954000bdef90aabbe0e8d899f4eab", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xca", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5f61ebff664e545ecfb9ac6d58fb757cea4a2249bb4ba847f6d4ff0e725b4baf", + "s": "0x1ef671e1c71111dd5bcfddefaab9c3779cb02861bc17f9678da73c9f92671520", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xcb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb7f5a5b333421ea4f5470e85405668100fae760dc28bfe354b51f929ee54ff6b", + "s": "0x034651c73cbd36b625ec3d91e494d41e730d01c4a998da41559bd9d3d73f6556", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xcc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xefaf12f33767f255793479cb3cf96d2eeba021c6b7429604832845a5d7aeca01", + "s": "0x5d893125527316dd4a8f70abc5ee479c6ec7480518b78d67271acf15849cdcaa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xcd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1ae2abf2e74385879fed91706c7f10da41c6704c578ad63b1ee7b11f32c02f11", + "s": "0x488214aeac4e8a49a1b1936f646d10d67a4bd43e4e4739c0a9429a1ba5a8d062", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xce", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x90e318a85fbd76aded4da5dd42743ff722914aa168784ca30c3512d737381512", + "s": "0x12bf51cb43a06233f2f356694ec637e6aa8887dad693e236e99c868d1d9dbb14", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xcf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x33e6361a5e7bcb6129d8ea2d56cadcddc05b1bbe833de7e087bc60ea24ab8c53", + "s": "0x680fdd41f87e899debf0243bb5c75c9a966bc8781d3f2579fdba5e84ab371ccd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xd0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcbbfafcc56318be63683ffc5a47a5bafdb8af5ea500c4da61ad3ddb55ccbe79b", + "s": "0x5b08eec769030de5e50e99ec35a67637a2760376b7fbbab7b6e5b48ea25085d2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xd1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe48323c25573f2badd635cc469f1603c1ee788c7f9019f70e17e5b63929da762", + "s": "0x3621cbd083966c0abd3e684feb56a081e6899841f2b5b10c771660ed6c4d9c1f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xd2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf00ae7cb02949b58db145c92c166325c62d9103f6ace3091f02a82993284c595", + "s": "0x1941b742d124e2f8fd811fd96e8fd9b3356bb15e4163a6bb1749ac1b08aef0a2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xd3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x173979f7bbe8d6eccf2951a9ff22a96216815cb509cb38249c7b1b7ab1c48f2b", + "s": "0x28f11027005fc49dd547a035c65049c482deadd6cf122dd54c733cdc4d87a1aa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xd4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8e62a12605bfdc5a111b6605003553c10eabf00743427fb9d9a8694e0a9224d1", + "s": "0x1f52397a5a0cc9991cec77ccb858a63444580e101fdeb89f295c82caad899121", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xd5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3bda62589cf3a7af7664ac0e55f820af7b8bc7c474d225d09d9cb5f8636df94b", + "s": "0x2aa2fc175fcbdf53d405cc66927438016a1f27b0cacde56421b8260488728372", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xd6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0cdbbf0d687b68b4cb24c4835d3959770ae30829c4ae3b0c6cd871a4becc2a9d", + "s": "0x59eb4d7b8b5369f5776fab4b216e7c28bba41558dc835aab5403d25117295f73", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xd7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8d0d9af6f81b78f26eecee62698ceb3972ffc264b9e664cdad6fa4002c97d496", + "s": "0x178e1df9ee081155c6299327a0e4635619910754cbc961d4953b8b8f6e68a5f2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xd8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x27704c4100acea131aac3e1a2c6a71c073c459b6c42a2e4530fd5ef332c05e55", + "s": "0x43bd28687ac1637072bc0e2f88fcfb89db15ba9251ee2859dfbbad7f444bc308", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xd9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xae678e31408962956fbae28021d1a0ecf1ad5eee9caec171f91570fe9e8a25fb", + "s": "0x29a074f9aa790b0e18c02f5bec726bdaf8800be465da692f092625ed6ca4cc3f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xda", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x411f66e84e4187f5c4f9e00ba95e8f85894878ace6ff1553ac2804aaaf1bf860", + "s": "0x16f9096c9a24076dbf480388500e240be9a3b0a10eec6edab9638e044704bf14", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xdb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa84bfd0986450e2a1e3563da74a63372a564054b308247d7ddbdfd913eb069f2", + "s": "0x6dbb389b36997ae2bd63f21120ffc51fbc730b24921865c05dce8bd0439e7d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xdc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x67deb187e2eb7ae59d369a6819d8a1ebc8a20449c3402bc8374b74b048ad33c8", + "s": "0x51db239737832764a7e7c1574580af215e8066397cc2232673a2e580634c3033", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xdd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x83567ecf6965182249b6ad444319bab38adf6b5a566821d0eb5db3e51922fa05", + "s": "0x24974184362365fd218ad4d7a88b4c17cf3ae792b374b2306309a7d1fa24e367", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xde", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfa0dd7c213671eac235bafcea7e9299401b2f32ac4f6b39078867a317ef2546a", + "s": "0x4e5e68d856907da297ac8c672b68d911cf40748c256d75a210c86000c2e76d37", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xdf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x69d77d76d8ef4c9750dc47adddb64b14351fae3759a14b6772f33181ca7dfff2", + "s": "0x2bd4c9ebca27bd2c84cc51893fe99193f2dd3f92b746f0d16a6fbd15ee00db4c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xe0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x33f1dfe2d3d01acc30ac971f9805f8aa3c60f144485b3c41377cb16e89935796", + "s": "0x2da208e198554ce128e9ca8082545af330b66ea37d7efd0b3b51c93671fc694b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xe1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9be2ed33d07892e813902240c9935213ea01b3dfacd80ae5929abf504d6e2480", + "s": "0x5b9b17fb42714ad957986909a59b18cb48154734bd35a7cf768c4a142a1e4bba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xe2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x47a30dd5dc513a7d601eceda9d1dcfd5edd12946d82ee59648c1a30181af33b8", + "s": "0x68f6185a35334dae3a29b62c8d1ad3ae7d63d7c85e66d2dbdc0591e641cf413b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xe3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xca41c60d684045b8daaed5f35dc852d07c91f63632a95ed2b93f911d23b1fd46", + "s": "0x53cc0d433b7ce84550d29d640543ca6dcbb5c7ec95b66ab30d92e2107a4e969d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xe4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x77dce9afdee2a8e6a83b0625a4c33c85051a08da3f52fd2bc788085c0846b9f8", + "s": "0x1ec939e5fe7edcd031a1c1f9ed5aad26668c2092b276e863dbb1b241de926368", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xe5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x44feca4acb4895d5bc3fc91eeacba2291725d64cfbdef7311af0e11fb83b9322", + "s": "0x1e50e842f5dfeca7efc102c8de99e533ca53de7769db638c9e8afdeb63321f9e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xe6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x817f05b085fe94f1b34d13fa30a6c2e31a52783fc37f7ac39a78d2486019dc62", + "s": "0x27b25f5167e8a122e4cd9215b6ac81c5bf5c3c84c7672aefdafa85e682a4ab7e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xe7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x546e1b85104f87f13f5c1cb13cd608becf4196572ca9e5c1c398e829aa4838f9", + "s": "0x6235516eeb507dfad0ec77805a12ffc2978866e97d7d64b92a92db76dd2b9688", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xe8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdcbbfed177fea524d7fe2ec9137465686a602a17c7c2142e25677508a5c6afe2", + "s": "0x7c16578d1546d7f00384eea0c6b53bea871e3909e6bcbb48bea04a997ec4704a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xe9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x33ba3adc2ad4314f71de7cc8d84e6592e032d7efcb6d6ef04fbb3c42ee3c6278", + "s": "0x243f8f351396b96a28381f4f3ee4dcc550ea2aae23469a73984ddd2a32f60d6b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xea", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc1fe8224fe1c8a71b2ff0aebd414889e7a1406f0d9b5663692264f83b6bdf0f9", + "s": "0x3188e35120f0f0170f2405c113ef7375c8a9feb0e7e853cabf6758a0ecdac27a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xeb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1c0f795d459554ee8ea3c16dba5db585d5eabf8e7e8acac27ded7833cf4e5c8e", + "s": "0x6ca7bb8dff880f8bdd9ac22b24797b06f705e912b4a33b8fa6042cd52f07804d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xec", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x94db23414cbfffb1b22ecd110d37c6ab3615021d033067025b5a76cbc965c817", + "s": "0x2d2d56d15c637b395ced1cf8f40b0a1cfd1fe40ada92decd9fce75447f62082a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xed", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xaabaa3becff4d5fa8096c35fb841d2569baa75de331e2c7a4a071430474b2687", + "s": "0x75150c1bbc9537e098218389f844222afe52d65e4fb868eca19b57d635dba37f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xee", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9845b01aad1216922358cc7df77e65a99b89f99fc4b8f8762f6afc903fd23e0a", + "s": "0x0eccc2c14a0e42e89a98cd3f225536e5cd1ae0ebe33f3c51e4dcb02a8c846487", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xef", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd45f5d77ff64bcdfd8f5db0d662abd72a930f88d65eee67da9752e327667ee80", + "s": "0x5f4a01707971e91da35d4562d76fee8d64e2baf7cae89a8e8ceeb2305576c1ad", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xf0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x75be17f05ce390e2c77680b65cad3ef9c21d78b1d3f476e6e2b8db68ded2e5cc", + "s": "0x43c2c1d7e8b51a54aed3cff542a85b10cc5ec157bdf301d3fe6c8f5bafa10a9a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xf1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc8a46dff7b8dbaaadf4ee843f58961f5c38ba29a39ac6844d97470d81e1bec37", + "s": "0x5dd49fb66753ce80f53c1b7b1afd8d98e39988a137678bb257c2c450be63e181", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xf2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbc6658bc6f0249ddc29e16061d84f6daa03c7a2b8a849882c58008cbc3c548cc", + "s": "0x618d9b729c13cd8e48b2ef5419be5a88ec2e3baf3a0dff897034a50aeff96623", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xf3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9e20cb0bbe2303d7d1692b731bddee334f8cdcd71b3fe67dab31bc2f8f25ddcc", + "s": "0x1cb83e770771594fef0e855d75c892bf7c8c27c538d6773112652ac50c5cbf70", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xf4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x08aa073ffaf02a9b9b425e5d98a2cd8952b4773bb25ee4fe9070977854febbc4", + "s": "0x477523b8f3747df296b463fbab6a5c920393d5f7e7ebe76a220b9d1775e48a04", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xf5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc65f2281c7f9bda71350edd6484178f436ea993dd93a145014068ef1fe8fca46", + "s": "0x14d7cb51c9cddeade2e67d71083bf5ac11884c7ef3e8cccbcf5ad4c9bab1d2d4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xf6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0c40f28e2ea4b66b7d14d7e0a56024120c53c1787be0fc820c310c2497aa7ed7", + "s": "0x1593116b12848de117faf65bbad6f95693acada142cdb3fd37da8a2099bc4063", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xf7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd1f32f74b33ecebcd36d950ee515342d064308748e8c6e10d5cb859cf9cf89e2", + "s": "0x115ea4ac1f9e6a5efabc1e2b77eecc2c38754cdf3ffa68e3e6c6806f3e2e87a9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xf8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdf3c515a2d8db3e223206b1748a5df67db1728c5e5407bfa6decaf56f0ea461a", + "s": "0x2709643d166306c8577e80958b14980a3db7386cb81e2ee5d0bb51e46e2b9127", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xf9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb4590d495482b5ffa35996ee041ba06949b140cd76039ab2efa32d78db4d0b14", + "s": "0x6237f4d115861f991e175a85cd4aaad4d57619ccb8495d6ef67fdaa999e9f636", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xfa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5787c7d1a2fc021850cfc428230797e0fca4f30579146ef6fb78dbf07955e27a", + "s": "0x2603abb7e1659b40bb8ae045be6448d66e3592d28c8b9da92ea17776d3545129", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xfb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x45c6bb5e0a5c1b8386df6b0ce60473f6a1e428df176dc7bbe0cdcec847325b48", + "s": "0x39d2c96e7331382aec1e7ca17a5ed2e9bbf1fef5d1bfc7829e495e9f8ec5778f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xfc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe066a73a61e7e728872227639a64bb367254c6fb3f8bdf62b5a25667e1d1fa02", + "s": "0x2c6a2e02de449a3ce39a3e43a694b71dcacc2455bd2bd0752385704811650ce4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xfd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8fdb702be8e8b12539ce9e06a92bd9fd225b37ef2c464a884840e0defdb38aca", + "s": "0x515afed1094093a7b8cd7b6a8d9cb87e4a2366ac8200735bc7fcd86421601233", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xfe", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xeda1bf368991ccdea7bc126a11b1145af752469ee1efbc98b7a38a25500c400f", + "s": "0x0936b57d5abd82a4fe2ed6c71dabe4280dc15e7ef3ca2beeaeadbc5d3bd7f798", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0xff", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x57184227d4d62113c168fdb2e31be53d8dde682bca4d02bfaee085487e3cdcd2", + "s": "0x115d2bb91ac9991ea4549012a941057de43f053fd1b4ae04fd03e65aa1b1a9c6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0100", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x67c026fbd3e0e690b2367e547994f4e8b8a865e6aba216a67ccaa80290cace92", + "s": "0x088a3e47143aa0ca8bcfd805464f64ddb30f38d62e5d9997f6bfef20155eee58", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0101", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcb5bca3ec8a19dc452ef1b4a971b5a57b51bfc78ca80581a353a4547567d1000", + "s": "0x2a9efc2a2e7f722a40139e4500479d6de50a9ab823a0f1d3c1824ddac632315b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0102", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1bf17085dac3227681594a95233cba0840e34606d570429bf506d9c4869537c0", + "s": "0x73bbe95d1f048f7c791c5a0ab7962933f6d75f8125fa0606e0202c52dd82a833", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0103", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa7bacaeb123b5756e1e60570bfc6d0b55a846632750a6ae3179d35c00744cd77", + "s": "0x768323fbc648a5230430fa8391e985adec9955ee46f5ccb34b98a88ade46d56a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0104", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfee8132511097616d214a23a008c1a4272f7b2cd6765b0dfa69e5ae97dd64b95", + "s": "0x6d718f433a80ca3249f76e31d3bce93c7a29584c0664f3468ecd40f2f32c08e4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0105", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5164d2eee3404cf84b890dbb17603332f161ebdb96fbf024938b1cb8b9fb72f3", + "s": "0x71bfa35bd0802e01391411798da6b3fb7275c4799257033514572f1fcf5c9f1c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0106", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3e645d8e68916029982ee3159cdf389e6676f68ad2c4a3ae4318908b77b4ed91", + "s": "0x7ab91128c0b4044d5ccef4683581e8162843b1eb9ba68ceda335534af5c16c99", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0107", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x97fcd4a22abf0560aa6f313cced49e859a05cf0d15140ee331e5314277070fbd", + "s": "0x72420180b0821d57750236ca3d1ad78b32ef94b5e767f096572fe8d1a979162d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0108", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x64597563517bd05c15a684aa016c1fd5c92626b6cce4d6b00f9a4033b6029be6", + "s": "0x04fb256cce0c9fe1623dbddcde84c413fc0733760fb9778cac64262ea658740d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0109", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb2cac9efb488c77600fd7f7f2ae058014801972170775f7add5afa215d86d126", + "s": "0x67781c71870699ae0317e7c755214a84f04bf6490a3daa067cba325592e93210", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x010a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0bf4a168cc3374de7b577a60b3558ab5e787f1d249672fa8675d7a100cf4d840", + "s": "0x4da4ab787cb1aa2478455e3926a9c0d81adb70913e3910f141dc557a130a73d5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x010b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x03991116c5cc7c76c9f4a1b9b71cf16af67e74cb4a896085a23bb1381e4af88c", + "s": "0x673eb6ebaa9328058a425afce260d5a89eb4e9012eeab1f8048551c130e7c0bd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x010c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4ca81e7b817f6ef8378ca1cc10bdcf56513e3a2b7f666f507ecd285f135be368", + "s": "0x1a3797e28b7300782da6a6e0c435047ecd2528c58ef4cddab595f06ec71074e2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x010d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x82b7a58f424f679a8594dac3347d0a86c4d0c4c30a805cfe1abae90888f9e0b5", + "s": "0x25478085e350627df88fe73723cedd5ee99e8711c3da513777bf1578556817b3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x010e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd6829668c63f165d6f37818e242940e028b3b2ad1ed8c8cff7ce010d9795599f", + "s": "0x28e25dd44489fb77ee6edc6e9820f6bfeb48cfb216f850225caa410e46edad82", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x010f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x805a31feb9ced4784da02b6088568be222a4217f036da76e935b3e726ea9b8f4", + "s": "0x5f2de180ad531159584a576d547ac2c32d0fc7df35b26430641f78b0cfe707f3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0110", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc3f4c397b2761461f3fdb28f7b7110b9397c260ef0dd9eaf42fe5b38727aadcc", + "s": "0x4238cb809269f6dce499f136b69e5db2e542f33a49c5c5d8f32bae12f3434440", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0111", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7e0b318b8947b3eb33594fdc953449fdead85a705d3e9b430b59c2a206358ba1", + "s": "0x288490d99b12a36908756d177a2f6d5adb612af3aa3c0e5ca3017a67d134e9ee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0112", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe51a798d58145e00e732a4d493e7851d668b45a67fb6e2e5e7c8053ae8758305", + "s": "0x280e146bb1b636fbd1131865af815d8d99eefc8ba90a4e440c5c73fbaaa476fc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0113", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc66059c9835598551b3d8cd60f7b55a55ccab280010af637b39ea4ae535dd301", + "s": "0x0e7562f9a2f3eee70a0b55276a0c8c04faf959941073deaf1ca80e0a80e8615e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0114", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0d8d98bcbdd39e3299256c84d3b4915d1e41774536603301ba0ba913ed62fd73", + "s": "0x46dcfbd76294c3a65ba484fe4b866ee3e855bbf805da8a0cd86b8decec04bf16", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0115", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x45177bb85fe5dcc46e088e44a6fc3c9755096257d7ab4c64fbca5c5a818e1387", + "s": "0x28b2d52a5d92a418cc35dafe2e0d0f98e063b270e6a12dcb75034768e57a8e48", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0116", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x319770588c1982f1dcf64ed2a13268504ad41601da6d63cf6bc6b5efc188f625", + "s": "0x09fd49a1d0ccee1be9ccf43f625f612e88ae6f2217b2d76b50ac55fcc8c5030b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0117", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x44a7c934520ee6b9c3ff6b0b7fdd31ee61b088137fff90320af4f400ca21749d", + "s": "0x466da0ece39f6fbc335e8bd64d62aa1ae0e78c1f72dc2864a26cd77316c82c97", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0118", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6c65fd8511538f0caf51993234815d62faf21f695a2881705f233f9dc52aa481", + "s": "0x60b4a403c64b5d6d7c3b00163bdbbc72bb7a0c9a2e4e80198b86fa54a96c22a7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0119", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8ed32800f903b3378539d5fd9554866dd2486e2f711fbd2cac64125850186fd2", + "s": "0x0e652857f4ce69a24ebd537d25c41495a288c728218f6b1e5a51689b1ebec1a5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x011a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x97a0236cf4734221e9ce24031d5a2837b7f3849ab92e7f0a46ab158f940c8c6c", + "s": "0x2e95f529e090eb1306f8cdc738cbc95ff4bcf9635dbc27cb4d0f2f95407bfd5f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x011b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7aa224a6b3a2c8df8d212562c6b26eb081e6604e3f6eb164306af38a69579de0", + "s": "0x5133defb87d1633ff4813452c3bbcd6fa7e2a481be1f057a4586a1ec707576e1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x011c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd85a652c3193e37efe893c63eb8498a905ea7174734443c6596c7e61258b9e4e", + "s": "0x4157b4d13f5adc75fafe62b27cf02cf720b30b27c0de9e34dea0d8c144c21024", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x011d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x806a4ebf08e6b138044f0cadefa06b451b7da7716c22f1992c0087f8ee24bdb6", + "s": "0x411cc5ca160d2c10d751c3225eca398c9ded6afba8bbfca4a1613fd42d294937", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x011e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9a92f3c3a1bc878d9a38d21ebc1b86b55d4dfa06c34b951e07b106f0ed37d789", + "s": "0x31516ddb7362c7daf85d71849f23589ff81818a700f5af94b0ba1882340c6f44", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x011f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x176929242b9b873a5f75064c14267b0873cb838254c6c374a7b9feaec38421d1", + "s": "0x43c093add86e7984e7f56ad07f507d81ea71f3a9d02bf3a438b406f9e56d5444", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0120", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x84615e20c753ec008314bf94af0eb09165944c50efc8a961d620cbeddbd16c4f", + "s": "0x43249217e26bb41f74d9b83d212ca3a9460a335dc572e7bedab8338e228b630c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0121", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd4ce5b6319d6595968524dca6eed69985eb1df8f877d672a0f7371d67c9f846f", + "s": "0x2d7a5c5db3fcd51d6153504af4d0baac3609112cefdb02fadc69e0a5ab5cad11", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0122", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbb3ee55a8254f77a95399dbb92833d2b9ae285bac1134dea65e27955cd042c60", + "s": "0x0b34ef451e502a619f902be50259b7b65caa9b84a688bf9c80fe40c70c3707b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0123", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x65e8ff087230a2494771a736b090d3cde65ba876a84351bbb72125fb5274bf0c", + "s": "0x6b29d750ef7307769527e4dcec5c079f672a1fa1042ad71f359b80abf89c9235", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0124", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x798194f44825902beef18aba0142d69db9d52e585f7d12124cd161d801a03cd5", + "s": "0x74041a6f31420f8b1c2c0721fcc74e2b8923014a44eba0a7ffffc23838af22c6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0125", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0d90ad0afd4163f5190dcec00bfb3224f6d20ad5085f225906cf04319dc05c39", + "s": "0x211fa48e5ef188f15a71ea5e2b926db9627e93154af5c72f47be2e80024eccce", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0126", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3b844d9526e97be780306874c8138a3cf8811b3a3eefa97f5b45ed1578dd0f00", + "s": "0x1a61b3920a44afdf88f996a2f03a633ce792ef14848d2351b068ee29e8a06d8a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0127", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbfc4a77b7b4b89bd775fddbcd9a262034d541a3a91b722b20af2a1955a506221", + "s": "0x33bff1a51ed6b3f36c0222160695fef83220ab49789fbe54db53ebf80cff93c4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0128", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb2eb401b2e7a756ab9ace428346e3b2c3a6c34f6b89ee68600a171a1c2998804", + "s": "0x7f2b68d01611f1863aac323b5594d8ceb11f5f6471ddeaaff488da60beea8620", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0129", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x18adce731efaaaee4ce0a274d857510b53d34ca21bbca238328131f694910115", + "s": "0x379c40e5dc8011deb1007f26593a9e0f637946c262ad660a473ab0088e71afb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x012a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x743c60f65197f182718c15d20dfe9f750e5168d05cae76e9d66520fa0ca8510f", + "s": "0x52be4af852ec5694a68799aa3e6871a6644cee02b8a17789098e658adf2936f4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x012b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2e5b09be3cb383f5e6dc083a41ba18fdecaf877fe57da56abed55816bdd1429a", + "s": "0x216188955f59e5e1923fc7547b8c44cffe725a112cd1471f7f11246f82badbb3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x012c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x61c6754255131027bc90fef6cc63a332d43225fe0ba4eed89a0463c860f8c2d2", + "s": "0x3c02cf812052e5c55d9b1b0ea78037bcc96d21e767cf8c3fe7ec83dcd287c4fa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x012d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd92e741b16aec6e3876427078360200134fe2b1488415c5bf74b9e58fa43c5b1", + "s": "0x6dd2d08560ce5ba32d5509c899ed53a125c638de3a67c91dca3d3ba8d6d20726", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x012e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4a63d348a4cee7edcfe7f90f613e12eec254b7921ebe7c5585457ab2c04b645a", + "s": "0x6d7ae67e22db02f9e8a671994cb11a1555131079bd902d69c4e8951ac789cc2f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x012f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x24a3416d3a9cf2b8eff283bf1ad741fffbd0f47c8ea5040d793b4ef7723a03e6", + "s": "0x55572962c9eafed269fe9ffbe7f43efdd4dc5e2b7ab71fa55027e6f2a51440c7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0130", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1e724b4b2f062f6030aa624706efb412547a48f8ae1c5f8533a820bd179850e2", + "s": "0x790fd22de982c04b7ea7b4cc102a29190c26fe5630489068d0437becd7d35c2b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0131", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x404a91fc6749b2ddb6b02879f041986ce0a04700ab151310704c8ac768595853", + "s": "0x3db68ab058d75b32bc69aec84923a681e6813d3b624141cb2d0e9e7b5988a561", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0132", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x210052f0e29e62ade71bd41944d7ed5db6bbc4884b3a3b8d7b11e4b5b2015462", + "s": "0x53bf812633d5230b228bc1b5f4cba27554d0f5d537d34c73d5585ec2b886ca05", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0133", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6c0ed46102fd3b40aa475ef45af4e1d53f2c4e08fac2a0b97d50d34456b3adbc", + "s": "0x41d31d142d6b2c3ecce16a10d7a659f2dc5824514b94113a01b5ff2fbf31e05e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0134", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x80987011bd04c7f94a21d6cbb965aa3df4ced5cf89aa5639625cfb385b3fae14", + "s": "0x5f9e0a54c85700e134f2b190801b8d8e817dc5aafb6ce12ad10b14f768c12097", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0135", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x08ba8b960fad5dae297a34edd2620987ccf74a6566f3b4d6bbf9dd255d35ece1", + "s": "0x1f89e259027a1577bd373407697d6526ab6fbbd8e514d63b484e29fe1a9715db", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0136", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb6ca8cd4a562b48d12022f3c7f3d82d818846de414bccccc65f468e11cfc729d", + "s": "0x7d9693fcdf1d5507f208c3c12a317171e58566f9273d11fdfa5459435488c602", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0137", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9677b77a8ba15f56638b075fc883930c53bfff5e295424b65a051f0179ce4782", + "s": "0x0c5a1a009a4f927138ac6757872ba850f134cbe8cc9921d5d4e37251884cb1dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0138", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x579b30905718c2882736772a9807da4cf5d7083681a2ba9569011f2c6248ee81", + "s": "0x62b10255640b5a72310ec26a80c86d05c7de06f63f69200700c099da7889e9ab", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0139", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x663cb3d459be66b7e94f9228cdc8a90fd577ee62429da54244a510d860a9e5b6", + "s": "0x2cad6b0847eb5206f1360615a3bde14fd2695fa616d6a26a8c88d21f2f7ddedd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x013a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5184ab850fe3413a45a6b2d5c734261bf5b51b6572051c5615e60caa25df9625", + "s": "0x15838d21fa4b2ee49f81e2eb4330325e374eacae503a9887d638278d90d9b92a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x013b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x722b4b5fd421bf5add2820cf3aeb1ebc4c44378658647ffaa56fff78cc666085", + "s": "0x229861665a043dc7e3acda736fef57372101fb4ee2f8fbb0db211d5bd74b6496", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x013c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd93462a33b920a52346a292825b68f6ee3c9a9a8f76e7507873761c6ee9e9398", + "s": "0x52b08e5c484c11567abbeedee2082483eedb5c3f89a900a5ff408252676e92d0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x013d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb1e492b10550c5634fc4d3293dbced33a778379c3524ceacf8fd6f2d873d0bba", + "s": "0x6c14bc8b0bd033bfac7b348e79dc3627fad52d562c049446d623081d1fa413f8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x013e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6736916805ce2daa098c8476c820cda0b194c054a00f8ef43e0349cd022af124", + "s": "0x27b58a084f0e3dd9f0b2f82d0c8449a5772f26cec4848d14813d27d7748fa2ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x013f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3365405c19710fc70050c862ef9c192553734294c08b9141765b78c3f24a3bdf", + "s": "0x5b2c7791bf192744f46cad44cbb1012cfa3de85a3d73e4abe18ec3d6104d74a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0140", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1964692083e3a418cf70322c39f2b36d2ef534859581d34538e0426fc5116c7d", + "s": "0x0f43d3d2d69a2e9330508d89f39e830ae9c54637aafa7e461ce777da745fe1ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0141", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7f0f31b1b7e576ebcb03e611fdbe87819bd54ff71da21ba18f390727390a4f1d", + "s": "0x083627b44237c6a46fe1179ea570203721de9a42dc2d76a90b2427bfe8c1bc45", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0142", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x038546b4756909df0bb93c5f24145c52839123a117d5d3859729775042b1c37e", + "s": "0x19a70636f3b9c95fcd0633f2e8edf9849ef4b5cfc2327e5b7172c577fecdd5f1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0143", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xef974df5d42f514ae5603d1c9e96de467cc0108cc7ce339e016cb099758eb581", + "s": "0x502d77d1185b56957f0dbfdb7d43573ba89ca8ffbf388f6ffd2c5aa20e08e9bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0144", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb973136c192d55967e4f58e7c196fd4e2a584a8edecfe6eed37147115bb40656", + "s": "0x615b7eae8273886ed33195c132b594494b1a88a4aa92354305321b8464b56f6e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0145", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc53959a8361f368fbc9c8bbdb6f2876c180092ad4d19b2b74f834bdbb711c2d4", + "s": "0x7072c34db8885149e7d8e11e2b2ac8c78a672e9c66553c91e58b31744254861f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0146", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x28843eaaf8ff461139d298af83e2f163f508ce7da95fc566ddfff53bcb76564d", + "s": "0x6a726d2529678adfbaffe24191f15f40fc0ecb0100332cb9067d7d0c1e089a0b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0147", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x941018b5c302955e5bc539497e08d0c9d9aa53fffa9177263cb7e11048d256b3", + "s": "0x744a6e3c9b116f6d6b20c678e2f65118627f7698081371072437e7fa9a340f96", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0148", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2f5bce14891fbedbc34d1132affa4f717c88c90d0d8013f414bc07d70b307846", + "s": "0x3a70f36f407ba2686d9bb033088d7c64e6605fa17bc527f3ecbec9fb8688b39c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0149", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbe96b478474a8e00ca54284c077838e3ce558108fba5d8dcbb9fdf483c216670", + "s": "0x17040675cee703d9fa64248e5b4378c45366339b2abbc99170fac58e2bc0235c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x014a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcdaea9e14b6695b9d1fff44faf01da692cf097637df322c0e54d2a27325c0e9e", + "s": "0x0c19a9d79ce92bd17da7015247cd3f5f9cc9c578f03a66ba9e745460e78c01c3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x014b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4d71b9e8e09ce9132f58dc4e115c26fbe9e2917ab3e3b736a9cd896a968b2145", + "s": "0x66b5ccaa70e9643c6a0b596a7fd094420d1bb164ad32194dc6e44333060f78e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x014c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7a50d44ebc68bf463f85bcc08dd1e96c33dc1e090743771c9bf93ccbecc8d4bf", + "s": "0x484e745f715f4ba51d649c852fca92149037678427ea87f73506cdb5d9c63fee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x014d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x67fbba13a37fc21981bc51690bd287fcd1853769ca0b04fd4f3b8a6f19808c87", + "s": "0x79e094d556bf175153eb16fcbf9cc96ec3901491f16ab1fb5df0f207a88b0fc2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x014e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7fcccae44be940daa99653e0be7b256c74f5628f0dc7fb9dd299dc3edcf86b8b", + "s": "0x3e61c39041fa8d3d7370da62512d3913bb1ca5a67a61624857b17e94a1bf21f2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x014f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5c675e6c8103991cf086d60e3bea925fffc68a3f84f8b7c40a797ed3ae96b991", + "s": "0x7d2aa04543f111cb88b80f2825424ec891a23ba1ee22b555e7e3e8b426008751", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0150", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfb17a76a8362d083cb5538b5cda5b2552afe6c83b041a5f5ce69886d91ba920d", + "s": "0x60dd9870efeeb76416545e87dce7f35ae8bc5ff060f671d75b60ed19c0b993ab", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0151", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xaebe3c67ee8da8d113b4ab67c7fd572b32ece055c70039df9bbf9f761e65df06", + "s": "0x7aa97bba9dd0a2a742cf82a302be8a269edcabd08cbdb3b1b29557ee1dc0eb1c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0152", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc698eab6f7ccacc3877d8a73abf56f5f4d2a13b95295fdf1be7d2faa5fc7cc92", + "s": "0x7a49853d8810327a166e7a38b18b39930097e1bacd94fe400c296573b159fa35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0153", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xed3d5463f4f361daeccbe18c63c45cd6bd89b02462df9bf38d94d99d05652cea", + "s": "0x2e71320eb49fd180eb43833a5a13019945f4a1ff87ed7163c1e2eaa82117b31c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0154", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcd9dea02738b8d40f309070875498780b7f7770d50b3bed9d43e64c7f69c065c", + "s": "0x3d7b563c8e59c50844ed839e231e164b0aeee545f1929f11cfa674dfa7198e23", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0155", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfb7ff87688ff19784bbc7d2139b1f51130d05d3b3c503b01f917e4de45f763dd", + "s": "0x32d0d7c436b6ff2ecac91983bfcee3421a3dbf0405a9ff11ad2692ae1e5894f3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0156", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1fac7f38f22fd39f8148c1ee3b8ad37e7cac8ba4e3a839a5d7d166c96a9fe6bd", + "s": "0x46a900300007fb9759b01c5103bc731e9b1d47cd6d29bd4085d22690ad3f8b8f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0157", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9547537284386ea20ab137d52330be7136953b56ea650c3f2983fe0d2987bb58", + "s": "0x1b5cd06ad8605515f42d7af572500bffa7b4fa7d513fcd7461c38b9655dcb1c4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0158", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcfba2cf294fefa61a2ae5aeaa8c0410a9de1842539a5efdfb7d2b12b2fc45891", + "s": "0x30ff2d77179162cd10f583bf79cc79a2a4d767538e82f990d7a597665b4c486e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0159", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa0a2b9e8bfd79bfc5165a4777250fc305bf3ba8a9041cce6940348b9d53f4af6", + "s": "0x47e148ba7e7ab247c86a5ef1bf6e4252f6ebf9b8904fc1031320f1f97441288a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x015a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6be60e5081e635abe27b699dd113fe85ce221c6ba86eb3ab7c3dab357897cfcc", + "s": "0x0dcdf3bb8020371a16ea00d39860a400a1188340c22260dd990bb57a04f8f3ee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x015b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9c2152ec973575bd850e2ffceaf8569f066c0ad910829796747ea3c5e69badbf", + "s": "0x30ce4d1d12ff57b7abfbecbef78204203b1fcabcedecab32e8ab074da6ee4516", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x015c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2cccc906d7aef4f6040d0437cae8de7a24d4ce3720d313a30f2193e334f91a00", + "s": "0x77e626006cf1ff9bb20d4d0eb8942432ffa1ad111c91deb87ced1845efaba851", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x015d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe9ab8ade860a5b110c97b22bff384b24c4078cbb512ec533d975eec10b057e49", + "s": "0x199f6b9041958202bbb0557962cfe2b12b317112bc21c58f6a487d3428f65c19", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x015e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8115fdd06340262b942d372ba8de61839c9b691b92ea058c1358aad240b9c4cb", + "s": "0x466fb313e668e9a75a4300694c236cf3b24f4d4c28a6c75366ce7d19bbbd7446", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x015f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6ca0106e4c5805c0a2f755745714350c665ba40d3002a47494c1a5c363f8f64c", + "s": "0x7805fe347c294821362c16e3d1d4dc71736fe542a8c651d996267b2a843734b4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0160", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe1cd7b3bd0bf6f1fb323c81c2c6406baece022ac1e815a41ca9038ebbe56c531", + "s": "0x6c86e999de5aaf549d515351955f8c0a3116c2a87eca52e9aede98ccdf39477f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0161", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1eb709d4cacd7f27b5869e503679f94a0ee04dd9a932cae5bf821332eef4c740", + "s": "0x692f51062d4651ac495f203c668f6573bc525b853fa2ffbe0982c6f0a336915a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0162", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x227f106348f83959dab2be4a53d97e19193b50ceaa61023cd37bc66050e898b1", + "s": "0x41c2ae87967b7f034e0bf5e5d84ef27776cb0d0d587a6fe59380a90b634203b6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0163", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb8c9f23d91fef4ed913f90da7f7ec56e008cb1197c746da10aa63335f7cedd7e", + "s": "0x796a47e30fea0e02d1203e1c7d28daa93906f47fbfcb01b1d2f77a91af50f7ba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0164", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa81fe4d49555e2f417015b6793a6db4b86ffeb580f25b2b29fcdad7413d38db7", + "s": "0x068eeb51fc3b15253313e0be21ed440365178ea838df616546b29882dd9715a7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0165", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd2ef532e9f290c16eb08f897ae9b9a14ab66584b625d8781387274838a2b14c5", + "s": "0x513f1d3fc007e31e7d0b70be7e468136da23ea3d0e02fe1d64f26cb297e4131a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0166", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x664ba96bdd42d38e0ada0e639d9747d33668fa038ba1903591b7aec46527dca3", + "s": "0x2d2b1df796a6704cc898ffa4d4235e241afa5d9095883a1856fc14044def7c67", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0167", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1dd55232e0cdfa97d71d879e1164b891582c34f73e57ac81b93d3ec75ffb6e66", + "s": "0x6eb4a70efc1b441c09e821254e66480340894d3eaf0c0dea417ad73e3d079567", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0168", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x62d8132052f2143209147471aed3ef1dd1c3d0d5647b7bf03c8709f738b16e80", + "s": "0x6e30e197c5d2a3f105f2718b1032fb49c028ee96d3efc949941e5819a39eebdb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0169", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe61025f5dc5051a9b64003e44e2ffa1a25086abae74193430720a2b1ce8184d2", + "s": "0x76ab34c9757923f1b98f4b45a0be0bf7766e204c08fcc0d8a5e2ca7d4a570131", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x016a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2695c8827322cccacc630ba73ad261db5fb9bd471904fb1760d243c4677ee7f8", + "s": "0x4fd5b007722321c832fc4974d942c63441242fa4a6260fa544fade8dd57ed992", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x016b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe0f86f2a4192f77d4e080fb48bd8fba69f65057414513b175db29afe39080c8c", + "s": "0x36af1084a72a5dc522d65f2130930671b7d8c7181ac6b3f6290e63be43a2956c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x016c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf26b8e17d8d58c2895e2618b4c0bd241e9bfa7a2be82d690b51a5243f164d41d", + "s": "0x7ca94ff1ec67f476442c7dc2a7b44610eeea724e85fb5e2752d933f5f9ec06a9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x016d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdbe64371c0b9099400d887aaaf0f8bc3314198df73016bf9f0044f1e25aa049e", + "s": "0x135d9a2eed7466a849d9f4204e07488a37646cd146335bb5965f363803017d5a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x016e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xac24345299315a91149b3d52c0cd3c0b963de5e01d6598c8a75f8a1deefaba44", + "s": "0x76cc25537aa68c7a04b3d6f0a4f9c39086634666544f89443134792079ac7e03", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x016f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfb5497a9f608154aaab5999066558bbc99ae72f54b775155fe8d2b64f52f753d", + "s": "0x46ac745bb69cdea882b3c1787a48a799624550bf2fb24f89bfa5daced689814f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0170", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe9bc79e121d4c270b22a4480f6b32a0bbd970c246881f60a17b6b984b164e51d", + "s": "0x640a55d0b1de60db78f1a600c768a83f21c3934714d5ace9a17c46eb7656788f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0171", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x44b96fd3d9d6fd723b8d419b86f74259c465cd08d82649c98a7bf9c315b07c80", + "s": "0x47637e739b6bffeaa4f8845df5ba39849514621d3ed4bb89ad9f8b61a9a7d973", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0172", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4b29ba5d5c39466fa774b76dffb822a9542718e57a2b68ee21243f0c958a0dc1", + "s": "0x495766fe8982b855f99a0a99793f995c741f226e1ce3934589d330eaea97944b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0173", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x23d1b3e13bcbe81aacdd7580772ec2e1b97b63dfb83c234d2164e44f479437a0", + "s": "0x5d15ada878686e7041a5faaa350a7c97be9f65885b735f241e8b4d5fd3a868df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0174", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf081b613e4c4baca569b72902515354e7dbc46c2ec3d18d26fa039f8eb301b48", + "s": "0x214da576c2ab0072c800f507cb4a3adff83c2dc39064e58faec2639c9796079e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0175", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2baf609f9273b4b712a23864f9e9d8e9494d99f64efd64b2e54abd40bae7ddb7", + "s": "0x4230ce99c05cb1148eb7ef4c326068311c51ce80e4e4f58f4890dc46ef9b45bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0176", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7aea3574c4a9fa09381dcea3e6585a725858275396b321885c579e96e9f91af1", + "s": "0x6e45fd6517efb0919b08c1c820af4b40e115dd1d9d8f3e740c1fce383d473606", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0177", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2acaf22450af15ecd1cc69945a93605ddabd7e935767e2f5b7a15e045f5635", + "s": "0x755be7b3a8da9b692bdda6cb2e891306f849f34bd706e79cf2a536bf7c005e98", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0178", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2e3b19c669902968f732febbf1c4366b52acb6778023eda6380c982b854a8735", + "s": "0x27d2552c85fa57fea74811573fe6d2e5020fe5a2d0955f67cba84e2677709d49", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0179", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x078f770012afdcc7c0dab1615a96d64fa74341976cc485a8c5bbac653df01807", + "s": "0x787393653f1f6aba56ce2cd9c96d8f16f13ef4c212e0bba17c74b8572a89105f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x017a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb7634839f4a3d7a17a5297df3184b5cf9c0ef3d77fca480ea38e42783c0a1a36", + "s": "0x6a89a31553d961a4e5c92d283afeb048ebdd3376ebbcdf316c7b6f8277994c9f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x017b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0e60cbd5e8d759856d7dec0bcba479144237a223cf3db3c8d80da27d53b37bf4", + "s": "0x0f6cb9a97983824635ef7aa02b4c3d686df12b1e2dc585a3f21d64c17f9de02a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x017c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0470f467d0d2027054702a9851c6e119cd6f714dcab82f654ebfb285419f3d83", + "s": "0x166c19233334e596cddd3b6baf00dd45837c6896d1b529580ae1c327d3d70b8c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x017d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6ef2a52a964e160e0d8777bf772c3c7863287a25bfecfa1bba4901bd2039eee0", + "s": "0x489e6693ccf1dd6aea520494ed29077ba454d8826a07b6b8e7103b42d30c994b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x017e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x90ae58fbcc8f7305acc925fb413c7b9c9f9495106b5cebbb9d05370e280556a6", + "s": "0x7dd655f52a0823c5c835c3e7f32cec32bd0ccb94b27fec433cc6ed465299cd6e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x017f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2bcbdc6bb393ec2d7b816c904cfc2a7119748414e688b0c01a3680a5f9284e1f", + "s": "0x2c621158a5b1a62a6fecf6cead4100ff65cd04cd2388ee1ac1682da1bb104737", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0180", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4c8d5b2e64f6900e114b5062d4c1481d583a3a5078a7fa800d29c25f11a1fcb4", + "s": "0x4e5f71c0b25c39a1d5e6a6f42f4fe9e13fdca87a0308589a6a6d6a246e6ff26d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0181", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x52da37a96872569daee542d729d4fb72664d1ba21c56c7e761590500f2da1058", + "s": "0x7131c78999b43a8708d6337c7bcd3bb52f0e9ac40a3d8da1393d18a686c6bb83", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0182", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6aaafb11761bf74a538e2414e013b492e6068e71fb6f5013e0f8420fba0943ba", + "s": "0x2ac1a25d14b0608534f3290d4e912724bb4dde3ef9987eaa689b65200a4c1728", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0183", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xff0bc25d7aa59a201f2b6e1db5f6c5e7060bbd39a88cc0eba6b528dca0b50178", + "s": "0x7bc1db008b69283b0b8b517415f5470d114da1db65f00e8c63929c193381703b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0184", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd2635b21e2e1693c549a0d74c979cda0cdddd6642a765aa8c6c29ef734493170", + "s": "0x0ec89ae1e2f32cb3c9e2d377bc870b1fe3139135350e25c74ae2268ef16c342b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0185", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0a3dc75eaf041c2ea40588b1cd2822a133f97d276888e3905f903e6de920355f", + "s": "0x374460d50877c1ca5abe2abc72ca8882e9d5f273dd2b0091db3ad8813f4971eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0186", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1a3c8d1dfccf60a638506bf636f7dc63c81586088ea0f82ce202b0e4aa505b46", + "s": "0x1550acdc061f1f0d9efd5fec91cbe567a23aed67d9aead98713f3307aa2e9b13", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0187", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7d5e3257affb334a0f29edc4be16c581ffa4c6eccaf2fcd91a98d4fd2b3b97f2", + "s": "0x3f640a1f62e646824f5a928ad6a3b1bd45d8044aa045375aa15f05bf4cd21811", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0188", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x210a33af9f9505450a5ee0fbc4e298f766868d12d62beb108648b6f5cab76045", + "s": "0x1950d4937959407e94084a73431af393537a5aab005ea531e406850ed2b05591", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0189", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x402d5aeddb5b892b67bd1b3698babc8ce3b670211d137aefbbd56a29218ef6b1", + "s": "0x5f9287c0ef0b2249b8acdedf5c513bae917af1bedb16360909dccb31c63d1c17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x018a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3083549a416f4af0237ab241bca18a62368b4e7ba12bf78968b022549e25b328", + "s": "0x75fe76d299c67d84bcfaae568999c338a7423b2a7c339b8c18042f6c04428c11", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x018b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x922c4f2c61ed4dfbded6cf3b7332bc48487f94b01be80a6493c476a1990ddca4", + "s": "0x432c513c7d75e8a1a0e729ee99d6dfb1ff2b6719e16ec4a364546456e1876129", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x018c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7b3507f082a37c6314c70aa7e32d3f96f4536ac728265075650954859e61c30e", + "s": "0x47ff0e956ebe36008ffcd1cb78e647cc1a7567354f408e2c8d792c95c8babdba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x018d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6e0024cc3aece13e45d7b16ef6dac66770fcd3aea41e3949cfb7beeac4c3600d", + "s": "0x164e25d7afcdfc2be6d8f7ee9ed4762f0e3f0dfbf310aa8c8a4370338619560c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x018e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe6f976c3e4659f6ba76f6468e21f12779e6bb3e45cd3c7322a8ead23ffd672ed", + "s": "0x4a3c5ec6fdbdcd7d5aafa965184d67eb88200a60f2d174e98c66c7512cd34baa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x018f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2b84f7aaba039031c580af65f251188fc86b92721449ec22797a12a8773704b5", + "s": "0x36fbb18c75aba9b014f7ae82743c19eae64c8573a041f68a8d04f6f5d012dbeb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0190", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7b6634cdfc7f90c7bf96abe281cf18bdd92fc18abb358b77f331a4b59cd36364", + "s": "0x6b3e302369932add1bb278e47ba91b5c84b0185e78693cd8e2ff426722ed4a44", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0191", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5d00b750e5f57636854bacd99ed2dc248150f692a6e6482b673a1baa636caf72", + "s": "0x604aa8cbdea9c4f107c9e6953e67aca9c682bd988fc0170467db80bd6bfe610b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0192", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfb553d316eced3e2ad5f2024c5962ef94dce62fa57513471bb9ba5cb6b905b83", + "s": "0x4139ab8014597d9003059252ddc82f83bd766b4e977866ed05f538472b60ca8a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0193", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x34187edfd78b4609480d84874b6bb8b63747ef159217fbd7d78c89fb5cb31d16", + "s": "0x49e70fa6cd395e20ec4db2957fb487d3b7faf40bb84235219e894de602484778", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0194", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe12a6a335cb7f15613767a9bbf82f6c0a8962ac114631cb363ddc138828258b6", + "s": "0x51c37cab995dca6fdadbb5a7ae5016ffb52eaefbf51008d043c8dfa6a9dd9b83", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0195", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x84d093735515350bdca3ed2a2b84c6eeca9f7d1d68248ec2be60f24cb8e7a105", + "s": "0x34c83e7eb9419bd6a1739f9a8e00b0b9ccc7cb65c347915390c315827fa61b63", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0196", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe43ad6e94ca60a9eabb3a6472fc14c08f38bd720d811d13bb6bf7ee4c7ca3f6a", + "s": "0x4d235a473c019a21f8d9464b2d5040461e51259bad5fe5a28faff3e411744112", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0197", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdbd1f1eaa92a6f162928d701da5b36d7d0e0548c2f636538d7149f6cfe8226b4", + "s": "0x4ae2c0cbea1eda9b3a3a107fdce500692e0dc062ac84e8382e64d72c7ac9f8c7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0198", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4bf2dc20a258d2a85a42ad4432d44695c97d69880d967b947801398d22252cc7", + "s": "0x63ed2aadcc8c0de939ba35ca0e428f5deb1edbc8417b31ac872fc21c6feb69bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0199", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xab31a5141a31d6347dfba8f5e3e5c74b166f795703b11202f68a730745d3d800", + "s": "0x42b98950dcb1576f106ad2665b5b530fe9765d05baa216a73385c676b944a39d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x019a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x51a508186f1d6ff9ed31457fe1500d2ae4dfed401f86e8866b168d8cd89a3b32", + "s": "0x1e0f2217191899a9cbf0a142209fa4e3de2ed87955b09d94a3fa009848c1d886", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x019b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd49ff29cc8d9e602fcc419c707d5d678e72797942b45c47b7a5b51ccb2a72e1a", + "s": "0x73690ee90ee46f65590e06b7676cc86a14c11a237a27fcf5bc2eb3c1a38f53a2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x019c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1bade0d043fd0c7b761a1d644679716d90883d7dc046c277bebec52e0ffb37bd", + "s": "0x18e1d8b79d80aff9ae6face3c4d96c46821de6cdc090e6e430d701019b2f51c8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x019d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe6a4c51449393b3e043ca6276a15021d58d25d52ddacd3a473d561f6e1776b30", + "s": "0x785fbcf71aa14dc980c44c2b5a643ac8dfcc28e399680b7b517d7ce17b528ab3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x019e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8c8fc66a443dcc6c9af145b29cff1a04aa37c5b56d6eacc67d00471776434a21", + "s": "0x31b0c8bfb93961d15385df58af67c2928d3e91e83079dc6dca9ef8c436afdec6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x019f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x733dccdacf26362321278866149d48a1ecdb331b81717063022ed70abcd73059", + "s": "0x2b0e1d4c89e656ad3e74de60a5521aa4340c4f31dcc888fd20209e1d26c03cff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01a0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3db81b07f1668f953510255f4e51ba666666e371eb5171932b49d3f482dbd8ae", + "s": "0x3cfaea803167fb8a952715da4e9d71982706d41fa2b3ef6eb4cb9af62ec926d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01a1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1eafde7221c64499d4c1dd60222ddc6e0b809a8d4a8e3704d8504546b9b7335d", + "s": "0x6211a8fad1ab1b0521e74e0713edb42927d5a5fa7f20295c8934cb986977391c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01a2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2850983f99ed11e1bd4df47cefcb57a31c83a53c5daff78949bf738326c2528c", + "s": "0x3bcc64526cbc456332fe5621bfc08b34ce65b88e531c6581c882966630a65a13", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01a3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x73e8d2f734dfd6ac7496039a98f07c1f8fe63290bf27e546be8e82b3ec975858", + "s": "0x0de771231eea87e8768c9d7dedef710cb31b38bd40ce18449d202124d98ffa98", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01a4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0741697f3062f035d5be9ae72c6a66ddad843e466c29f15295f3ac269c17d8eb", + "s": "0x90b34e65e1ea429b174c2a94f908dc79120749917a67dbe29849e534bcd40d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01a5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x534008ef8f910f0a6c1575d98ef3627913b05db329c0af3bce0f134c89f35722", + "s": "0x76adbb6ad475f5c3954289f0109d4a595cefe564b06ad707005b40c590b52f48", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01a6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x59d24233a6c6801c1b62cb038fa28321aa8bf3408b79ab0990be637089d63881", + "s": "0x072089d1e3c7ee0e0556052eb3f2e913c579e0241d5aa1086037569e276e3f06", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01a7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x30a58375d24e6708b31138a71a5017f3e3d872725b9a79863b48c72f822534d0", + "s": "0x3e66a030b48fb7c5e6e73c29d04b3bbb3d4adedf8561e6faf3c559e21ef91c8e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01a8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd2c75a35660cf40b303cb7bd9f5bb3a19e3addc3717b8dba45739a3710c7770d", + "s": "0x1a2611db4a68174168a321cd33124123e035b28166e8f04805e9d07b4d117c21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01a9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x61bc175be6159bcfed6afe5ceb306c254d9ad816ca0b81cc052c29a321661d8a", + "s": "0x0257175a60b96947322b88db9db884c4e1eea64a27ddb40bce4fb5dd981864", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01aa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb65accb83ea5721c954b68678378d520d572da529d895e95ef4923a5215e51bd", + "s": "0x4e879174f9879ef67a9d757a44b33a1b399315ac0c4761a6f2433c90958218f1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ab", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x432f2f41d513a78f942cb81c54064a0596d6eece90ba1fac6b228c8fa4c51637", + "s": "0x74e74baff0a5840c78ee848632e37a438f4b6f8a7c1e2c42dabea7d8ad2c6f62", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ac", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb869e8b4d8b70b479437fce9ab72205ed0685a3c8faa81f88aa86092837e71f5", + "s": "0x7a018d3c2a35a367ec96b0ac5abb58301c9fd8ae53babe1ad1bc3a4178c9a0fa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ad", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x65beb7e567a0af87f706181207ca4b942c5ddc2f1ecfd6cdc86c3c395e5e7ccf", + "s": "0x32403fd2982c43444e2a8c4b81c0849dfad044dce831327e50336f563a62db09", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ae", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xffa086a2a72b0781ffee37b5b61084070c0bf9f08da770eaf8773fa874edf121", + "s": "0x724629e50a7c67a771a72d4e3a866298af194a8fd8af3ea814a73eb85ebf2d7a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01af", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc8ddf9b5431f7ceb410773d51e1315b8b587bf6eb9f561413da48dc94b30dec0", + "s": "0x1fe1cbefd8d62bb6d9c90a44f24e5864070f47e8d62bbb9cf3fbfb0b753a0396", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01b0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xff2c33e8aefc276fb12d8b2e333184ea10cb4ecfe0425f9a0f27286d205d4df7", + "s": "0x6e9cb5a34ba3941faef8fb28bd355ac7531c5631f2d355c086f78b897373e878", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01b1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5f446fc98c2d866eca082ac7562fe2aa299284b7240aa1d26be5fbc9eb46aec7", + "s": "0x777d7913c07d38b889640796fabd2c6fe5232c7230688d7b3e2f369774363f7f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01b2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc4c1b18dcc18626ef003e8f8a09e89c9c3a865938513a9b052772b5012e8aecd", + "s": "0x363830efe697a959816670720d086f7b877656fc5d51ce315c69d5c304272e71", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01b3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xff947ca6a3d946013869cd8817d7f7a93d7950257576b01d58ca12458ba94103", + "s": "0x5ef5307ff511812b48cc6347f67ba7288c64a63be5ae60872ba3ab5137896dd1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01b4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xae6f3f3ab5c67904e86348c6dcf6d54b8d74198334cc60b0e93932b0f60fc541", + "s": "0x09c51a848387fee3fabf85928d5ea1c1672027f0fddba01ec507ee3b681d5f04", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01b5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf5c523bb44c7c9b2a16018e4068339262af4ab62cf40d808722f581c6d137d47", + "s": "0x470c7942ae1c24514d915eb470a778e6988964c14ce2a76209e32aa6e3694466", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01b6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x08fcfcdc8989a1c1d15067a6441899021b9ff37a9f4035e96f43e4208418ccb4", + "s": "0x1f45043873b387f7b3677b0f41cdc9039cb8bdc69611f67a46d426f4c8c03eba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01b7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x07b7a67038246f6a24c1f1e9661c535f0a556be17af39c3b0feadbefbdd944ca", + "s": "0x279ef06dc0c92dc404d2d4448f5e8bb9e1d083db203a3b2e647ab29f32d57707", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01b8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1f64ca2e312ed6d9aea702a093ec8307ee41604cd0efd865da988b832bb7fedc", + "s": "0x586a0aeb730d38c8d2dce7d576ca376c4695c9a65c237f436a29a4fed4a9d705", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01b9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd5be24030f0c8ed5ca4bba22b6c73ef19cf1b3cee4d93619f132f062da57ebcf", + "s": "0x12b45ffc3f4a73e45f9bdeafc8b404524fa3289e7f9edd3486a73e971f90e3dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ba", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4ce37999fb9da7de9968a34221458513d3ea8f558daecd68dac2eb2be90506bd", + "s": "0x22fd0c2acacd345090864f50ae81d2bfe99bb003def1478a4e2c4d058961d033", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01bb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf47dfe440a0d9933c2d9efb2d9baec974e4188a149de44ea8b996bc601c1845c", + "s": "0x5a2f733e82f988610acd1fbf28cc9b29842c1d363f8958193febe34ecd1a561b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01bc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xabcf172e2a4f34de759705d11b039c83eb506e6e3fe4e20b34eb76c26352ea58", + "s": "0x02d39ed7bf92ddff7bd5f916c5ff490e10ce7722e18a6f7e4b10ad619cf2ea51", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01bd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb7409570e30aa7158869a08e1baf9ed3ef93b376e38f3ffd5052bb842c54edd5", + "s": "0x776da8d05e33596e5e160bb75d312d5d4f412a6be485ce327400e58b778cb7b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01be", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5160f4fc77fbdddd740c3a338fee9b99a3ebe70382015402b1101b1abf00c973", + "s": "0x37479852f6d973749bd6134cdb93ba0b2863be784331c2f5821511159d63bd6d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01bf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x26b28761c51b2a37847b0a48d76a5dc184f4056cfb33d02cec724a343c9c6c91", + "s": "0x06031753adf0748c9e9b008ce3fc4cf397bbb321f8150035d0c22fc24c8a181c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01c0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x12eff96f6d27bc3b157775a4c2a5d5155309b608738a4a584f67bd97a8440788", + "s": "0x6d8e5a1e1b1eac9955445bd31c7d1c611d27be840391309bb516ad41a99761c3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01c1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0d4245f14cf14c1bc74f0d52fccbcd3fa082c69a73dce33057413530250c9325", + "s": "0x0fa36fdbcd6e768bc62d06923c664322481b3adcc88bf3a93d8fcfb0d73cbeec", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01c2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x22da7926fbf9f3e1f5be79790517379bfd2605269ea8c980ef9d707a5b730252", + "s": "0x36f029520ff03da4578355975b7d13c924d79379ccda5fd644b95036acadb6cb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01c3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd1b113b81a443daa1198ff00089f790cdffc62dcf13e15a75e74bc67bc3e3cbd", + "s": "0x5fdbe09347b26af3efbcdbc0b813d1925fba04efbe08d68f3d5a88a827eb3072", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01c4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7c669aef279b4087f9ea942235c419bad40a831a985f443104996fbaf80db890", + "s": "0x7a8169b5a5e69be7c0c46bc71b41e0cfaa7e305cf8b3f19f945385bfc0cd8818", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01c5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x07fd7c904da9a3061363eca5e2bf3272d3780349d66069dcc9c80460c4b3ce94", + "s": "0x5734aada5260f8463fc792315268eddd818d38ae29b297265515d1eca73b72a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01c6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8ff26ec254c9ccab24605bc55cf9fb297ce8959affd6096060a8645881e9b078", + "s": "0x53c3b0cc1af24bf36d786057863fc9e2a11e088411f867bcdcdd141e64d958a3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01c7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfea2a5c5e100ee0ee6c6363d6e5c4abb57892a29ccb715a4dd89e51f73c93d35", + "s": "0x5cf893964abcad356f7833a078bc6e3503f892d592c01681d316ae6cf0e8363d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01c8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeac212f8fcf1011bb0b6ad6e52d63d967a84eb12d8f2b3062b7bc2fa8abdb9b4", + "s": "0x5e81ce74390bb574dd31407e611d74ad93f039731dc704903584e0e5c123bf63", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01c9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8e327ae515e3ed258782f279fbe198272b9e00493b60e885c4584b50881f89cd", + "s": "0x2f2409e38d93f95b7af4a0cd777732b3d17232769b218fc21199b57edc8d759b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ca", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9d079029492ccb4cd5526438200c05c339cb48073ff70d9169a1642a5ba0b9b2", + "s": "0x76732b16f4260157ba78f2c8ba8d0095163ceed575313364053ebe6e69be3962", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01cb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe6f6fc772e7738833828c8d6cdc2b18191f315a3642c7ac68f0eb9ef1d0d84d5", + "s": "0x06c4c1158622f7d9b75f1bafb786631c79c3ae60494a0459d508b200b6e9c169", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01cc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4e95defbfbfea6457bfb3da316147d07fb95484a43c7ac7161b8d2aff0bcb3dc", + "s": "0x0321c30c0660b9f404b2cfdfa40e638e15c50b12a330bb4e19e7d6054afa211b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01cd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x089c9ee88edcd973836f50e7c857ce3cb830a8dd50a1dcf59ba6f97349611dd7", + "s": "0x7b9a2d7f9509679ebbd3e90d8498b7659c490c8ab757484ad089e3d0e1d8f4c0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ce", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4a6fab5073772d872ce9c6cfbfd13e27d4114888a525c5352298add3e1f544ec", + "s": "0x2abab7ba90b26d0a7db3cc3dc499abccb575e60105724bf6b09b6ef47b951395", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01cf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4f878850164f78caff9a449d91bb3767e45812930852c820a0489962a8baed7d", + "s": "0x5b083d332215603de89125ef5fe76cd22910fabafde5db1dc5a65233bdd157a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01d0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9a16ee482501c470c250a14a1624e02c54777758b063b3c203d8da6eb23ecaa3", + "s": "0x79ec17ccc988eacbeb5d5337821f4d4b997ec755f0bc7a55fb685cf5bb6cc458", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01d1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x73e1dfdf3fd076a3f5c8a4e65fbd2fa59b97e503c4f0ebca2d4101d2bf84490f", + "s": "0x25c598d5eb8af6c06829003c22229dbcaaf9b13d90ac4928c040707ebb895852", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01d2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x931abe2ecff45d782fad4193681ec759ea11594a76aaa81360ddd58e64f13032", + "s": "0x5715275cf6ed81d1ac6e105e4c84fc7f0c0e29959f531b6ff22bd4a11c156cf5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01d3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf65f700895b2f92f4b8d19129aa098b00c99164b1daa4ac66749e4cddde0a40a", + "s": "0x593d0275a11e8f709b1b70d5f9dfe3bc5107868ba105052ea7c544eacf645bd3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01d4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xea62afc19e8656bfa322c7731d8c0d5b1aa1a7cb86979bc22eccd4726f882c60", + "s": "0x4e124ba7e3e72f10d18fae5adef04eca5ecdaed8369a79d34786b39660e046ac", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01d5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf17a885382aab95865db4c4e0c0df60aaec6a98ce4ea3dcf180105f8c3e21f0c", + "s": "0x5f60331dfbdfbdb2303a33964a58b059fcadab09808ba3f1e0bc0878176fa616", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01d6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8f9e7e0863895b94df5a8710595c8469d001f118b5b1e5b1c3facf2bc9b49dac", + "s": "0x1ba9edf52f6d97fc7564e2685a15377f1169d17f5b772046cd30ac12de405cfe", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01d7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa4a47631da7c70a872f0c71536fc4acf8401af877fea4a9d865699e6f4af4423", + "s": "0x61b17d30f4ad4211fcec428b3cc4c9bcdea168bee0e3f8d964b67a89f081ae37", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01d8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x408417736d29618c65dc5c9c999a6d1ff3071947ee9ebc43d0f3b721d55b2f56", + "s": "0x06e20e9392bd70d8051da8c0b5cc897a4126d9a6b3a49542890fbd78e2880ed0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01d9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x80156783afd34c36166f1fc7b6dfd530bca86f7756c0e3e25cc9cde247cd1fad", + "s": "0x4736fabf4ac2c71b3e6915b904ba383d936700b3d5709da91a9235f80feed4ba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01da", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1a7b98f591b21134477bbc29a808c6786f25e191f3b655c571e456f1b795fcdc", + "s": "0x2efb194d65e24f1e5124c42c5d6f0575073f53324707b012c7986fb1cc8c861d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01db", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9bc633cdb8986412b168b7722df87e83eee0186aeccdbccf4d9c72139e37b343", + "s": "0x73b426dc34dc8cbd85dc4f242d2adf0a4112a50389a6395ff481f16789315c09", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01dc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1bac0546b410159a0a8cb7b3c8e3cd8e27d0af285ac379c0ab67200574cc12bb", + "s": "0x283993633af3aa401d5557aa71ff9f5c750bee2df4ae41a4c7c51f3a015c1745", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01dd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x387240ce850b7908792af98d27d101f7e6dc76bc896bc21a6c47807f1ccb7576", + "s": "0x527f245d0af2e85b9e55bebba81e885c95e1f4352570a71a9e5b33f52013bdef", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01de", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2cb7a14aebb81bae713a8d255ec64e228e19783e976e7052198fb6e338bb430a", + "s": "0x2b367e5bf49514ba4e28f2220762edbae2ae4708d0a0e3eaacb0954ae098d166", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01df", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd5ed3057e1feb3746f3d7cd1f701f3a17794552733c01297b3bf38a55c17d48c", + "s": "0x1ecae3fa77a8c7f201445aec5613de847cb1de26789f4881ec88cde4e3f5a5bc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01e0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x07741af779f452129e6ba89723b59dbfbc6e2f914c88b17816e5333be218dbfa", + "s": "0x6bf7f39ddf05f1040ffeb6e51c548b73a858c8e3036433aa4e718f8e7f925724", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01e1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6782550d5b3b50b2581bfe88aee4a87cc0c79c8be09a0d8e9f9b82096286e433", + "s": "0x38458e3558d2dbf579082fee4a752dc7303f5e62b51f886ca7be3fbc746e0bda", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01e2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa7a05a30ba10171210f783ac640e7494daaf09188c0a902540206d689b7195c6", + "s": "0x5889b36980e0c29c57e1df2bec5ea0db1ad756fc291769a4afc9b9945f571f71", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01e3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9f1456fb2459fb978a672b8ada02acc64f9c3110a1397667a8783c8ce0ef87c4", + "s": "0x1852f192c9c804fedbb24b2348dcc12d0397a4adce5087c5c57c156ab620db85", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01e4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe315165cde1198716ab4a0633a1d1d7b1c90d4be2b20442c5a7c2ccfbb473bf6", + "s": "0x76e60658c7edde0e3112742aeca589622f5814cbc3975e51a7559fe1c0e7a5de", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01e5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x656c9e1c8622a2779ff5138b3b9f43d16fc63b503da6b5f75ee327c7655abb28", + "s": "0x312cf985ed295f0bbe6f6bea42a81fd55cb9391fc7a94b041a67f99ae8acdee5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01e6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7752988a62b3b79b24011f252fbadf5c0b176f13aa8bde50ee71ee8354b4794a", + "s": "0x32d5004e00c6a2278e55df7d805d541f1de78ab5ca354ae9488de990128cf77e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01e7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xab0a4266fd18d9af1f3608afae1629fb23146aaf5a5c6b89e06d3a6769702698", + "s": "0x668ad580e9148ba80ffa13d8a1ffac90c23600483361bf215b54c9164f4e28c9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01e8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb2ce8101292f68d0f1bd582f78a8cd8e0d2639c0ae4c7326b90cf8058951a5c2", + "s": "0x2b3179c5fd0141991ee63dfcea2ec57103537d68f0f2b744cbb2840a0194cfc6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01e9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x40ef88ea5230c2defb5617ba034bbc09c65604ce2df28e2dc2851858e4344db2", + "s": "0x46dee52994e7ffc22ad1be938b531e3be1e8f36d4a88c62b3b14abff6bb8d567", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ea", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x878572ff0ab073a59956e9bcd8bb3c4673d532595be4151f7e97978c157c1918", + "s": "0x567603e36639733921b0b5d742a2ada3aafc8b5d6263ddf50f22d6bc2f36c83d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01eb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9b627f0e1f8b0cd1fdbf4058a2bdad78e0c8f88beb8bfb84c3f593c33ccb80a2", + "s": "0x56773c64577a4724fb5c6d1c3a1ce9941365aef6f297a851ccc4e2b3921c3124", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ec", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x80307beb0a52c1f26c6af25c0c40998c959c3fa3a017cbd2d60682410000d3b4", + "s": "0x4cd142ad3fd4de5adf4d6748fe34366a4ec53ebd043b257c7303b8adadfc9824", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ed", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7f61c9a1db3527a152c5e05c219a185d3dbcf823b707871969f4098ee20ccf2c", + "s": "0x42048d7fa46c9e75bf017994e1ab0eff26e546770c7b8fc0dbff784c948b6093", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ee", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3c80256c71dac9bedf87b7e21fd655a6505221b5774e24b2ea9bb05b6f4aef46", + "s": "0x07c0ca4a87c364a0da0401bf0343870358713fb10dcb91a67ba0fa176944d685", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ef", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9476c40d1acc0a6fd2cd29f31583ecfdbdba9cc38ab575cfb8fdcc031e15de88", + "s": "0x1445d81f005aa1a8625ca56d11cde819ec50e1ffdd8125d1df1f0bf888db7735", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01f0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9f05e0d962a501cf88b4be361c03cdfa11908a9cdf023919769bc54f0c2bd5ad", + "s": "0x621c4d632d79b5ca8cc2cf66ed108c2b721eda00ef4312edec4d21714d89b4de", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01f1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x403779ddbe4c20a875389643c53c9ae765fa278d755d18d1b23fad43c1c95c3b", + "s": "0x0656fdf66401b4e489febf7ef6c0bf1f437f04ebe48eb5e92171deebe0329c9f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01f2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x651cc8ef3e8cd38ef35221372e132c01f489033112f42ba7b87ed94329996cb3", + "s": "0x6889900d7891ca9d11582cc9bf5d035f5560fdb4e2d7b86ef0b644835683016c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01f3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc409f64350ea425ece225ddf5f1f971faa767e2abe5c4206f691a538ed1fcbe3", + "s": "0x5e23e3a6f0bf07ec7391fa5f6160a25a22569178014a73dc8979f09a412d2e5c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01f4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x843736747cfa175817b752908488cb94ae55caf95808b0ad8df17fa72ee47ccc", + "s": "0x1e09b2783cfd1561d693320c5357c3f6028efc4556838ebd2d61c63ba39d733f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01f5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x63de63ed85eff68f61007b77e201f193193626d05333a90fa8bd1d1e82af69fd", + "s": "0x1e7753ee7dd6e358b7b1e86e324c2d049127c6430b687ddc5f440158e99f7ccf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01f6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x960e87c545a07ddc9f7d42f546b79a530d2aef05cf77c40f16a9c46e965e3457", + "s": "0x7daa59c34832beb5fd3be19fbf7abc1dbc0e91228bf6e01cab8bf905e5d63109", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01f7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x67a5bd42ce71e6dec5203dc8b2fb61dbbdc4592ea5d1563505ae8be3c2727eaf", + "s": "0x5ada67c90e19152de520e1d8a17777bedb1f5554776dcdea7bbc05b11c690986", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01f8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x68a52cd2f858432c718ff6dd81abcff42c350964f7d9ce286eb0dd9c3d4f414c", + "s": "0x27b116fd4951689fdb8e8c3edbb60c8ae47f091f3694f672defb4de746eb8f26", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01f9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9c3501acda3aee84707a53d909e9d23c87796cd5fa746cd1d74fdd9bbb7b3261", + "s": "0x30c608a5cd91e832e62bdc08d991dbdb7a7a496400137cff5963f42eae0d5c6f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01fa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x29570c47df2f6a97da24b03f2baaf4e4397717e74a7efe3c0a9282b54f6637e2", + "s": "0x67f3cc63d3d3c2af28b27c80ddf3b3b83488ca758907b55be11f97ffde792e88", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01fb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x745f86346c73470c73a6b8b97f605b5f1c98484f737f67ef7153e9cde1d23476", + "s": "0x0d7a8334456c68b83d436fd1b7aa479fac08a8767275be059908682ca0575393", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01fc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9714ad60a27091cd58e12379c326e95de593ef60a7952c7937902270c66a15b3", + "s": "0x03e004ea5585909cbb9f1e5271d07cd596fd8f8936557010e2a3f60930a801b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01fd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7dbef83eaf6a6441c000305e6c121ade88d429c3689d4064e3623cd412bca185", + "s": "0x75adc0c42fa2f04e8de3c76d4d4fbb1ea916a3630308911aeaa6983f077d9141", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01fe", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x53d4fa8b6f4867dd979fe0601061bebe105838d568a77948e37291d843643a58", + "s": "0x2797c769137ac67abb1d0c2212c5d9614a5b02e462139d771a825181777e6419", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01ff", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x01a16a08c7034ae3906eb19c641ebfed7c505837e312fc2449eeb08c13670d03", + "s": "0x6fcc5e2db346c27802f245bd5d64f02be3d5fb61fece0a218702abb20d2184cf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0200", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4c712968fd0d73beabc3540556a5a817f8caf61201b6a0a8fadb4bd745144437", + "s": "0x21201c71ad1fe4162de4d84502aa58473aac7f4ff7073b2e69ccb71489bed057", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0201", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xad4ccca0d7ad0c8799de7fe093479290dc7004577d23d7da290a2af0df8da339", + "s": "0x5f39dabf48f416a3b1981b9398838a26a4d2d1e9adfc9152bb856c311e7d0748", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0202", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3c4dd198567bac32556c530260060dc29a2a5e72fe3396bc00016460d30e71ed", + "s": "0x220ad27075e5438cf1f697d1231de8e780680b0210696abe9fc1212eaaa701b4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0203", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0b809e8717f94e9a25d271f88fe2872fc23deee420b0055e10f7fce21b2894c8", + "s": "0x0c1b8e17e0ae36ff64b65793ddbcbf3a858adc34dfa45aa60f2e9655109d2501", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0204", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x579768bd9c1be2a5028699f089193fa90bba0b1c63ee1430dd57a5f5ae2e5574", + "s": "0x685f3e8e9201a927bec769cc430804ca180468321f4fcc73cb35e16ae0d5233d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0205", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfd2adcfefe6c71e8d279e7743219f889a2355a0f49a31e5636988740fccf7cbb", + "s": "0x1951dc67a2133cb5e6b60d96577f2ea1af8037c64bc4bb254e6a43d6e3cce0dd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0206", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x52ce49321eb6432a713ac2521f6092dc6ea42a651ae1efabb8f7eaa7e9db174f", + "s": "0x481200197d4cc485384af6dd703764ae21af0ae11e23b04c9e870f0ffb2f811d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0207", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2dcd3bc05efe6f5dc7e9aa1c45a0890b612b9ffa914d2ac8664313022f3a331e", + "s": "0x4fe9f1833100f88cfd791a89d402ffb355aeb1b9e255629e693d8bbae8ba4136", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0208", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x20dcd7c43eb82193ecc63c8f74e522502440a13624050931b1e1c36389b0ccc5", + "s": "0x7c697abf6560cf35eb139292fccaeb8cca0ae8f33a840ef7b11510a340fcbaa0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0209", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdb1f69d43cda1649371436012dad6e111808a0ddf0d610ea652ab824ef0f019b", + "s": "0x7f047f09e3635644d86797ffa31fe5c8a8dbd952da8c0c30b1fb8decb69857d0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x020a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x22e80c634ee709edac7bcbf4063883771fb7e8627b6fe0e6601f318489f5037e", + "s": "0x032c31c542edf9247170a2ccba0d46383c83135705eceff6575c1095661104ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x020b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x95e33cb23d0499aa32c32e18b42763ddd54eae9acea78100c5c187558387e47b", + "s": "0x418acb63b1b7710dbf561af5214a3368b4b00bd3c6fdf0532385bf138941524f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x020c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbbd79605b3fbc951874de7b948ef47e7b1cdfaf0bf412de760c29b028ad38f7e", + "s": "0x2ea4e0e1105b208e07e1b9e610a244b9dbaae689e1017eba438811c8c317a9b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x020d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf05539ea7bdaa8ae393ad051f6bd53896f2126559079c1747ad67cea7f8a575a", + "s": "0x6e6209d40ccfbcff9405c9a41b0d6e8707249d7680ec0895dc5beb3cd6defa06", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x020e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa0e815d53811a82d2d4ca9bd5a77919bb1c7732fd2e94ffe35e9ba8497c7b35a", + "s": "0x20b949b37705ee223f112f3e9d8df8ae83cd327102ab8c8d5584728795f55a10", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x020f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa8ea06905372418bb739ecc7f8aad4ec497f5e6bf6f8652871a5cb0d0d7bad6f", + "s": "0x0ade044d241250f4a68a02e5b840eb639def87ecaa21eedb7a06a52eeae30870", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0210", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x35016f882b0006aacdcb6ca89bd3ecd53c44404128b598e13ed4478da5b06b12", + "s": "0x78084b4db9f3eaa09ee934fdb7bc857798b8b85a7f22c81ce940f2472d85f97f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0211", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd2b3c66221fb37d05f1acdaec1edb4ea2d842da7d6c976ee7bcce43d2b142a9d", + "s": "0x1b6207cada71964661c67d385d3c5ee923aa94f02f74f847545df68dd1fff91a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0212", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x921c6e58324f9a254ebada1cbc0b78f2298aeef5b64ee6c5d335fa351415b19c", + "s": "0x65b17129527f997d445187e300e12dc9f863c6846ee70f1a6695c56d2abb5fe7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0213", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xefe4f57cb483face4a7c47e673c0d4b4e1f3b9178fb196075f64db339c4f04f6", + "s": "0x7be279f3a39be0f1341d5358ae23712030a86c991196c0365e21637e8bae9e7f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0214", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x30aff1fffc65282d38e9735f3741a952337ac932f59623339e59d48c228b674a", + "s": "0x10e8c6c902ea85273cf1f75843171cba5ad24082e60169f851a00b3bda439a1e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0215", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8859733ad102dabe865d44df2505bf1f19d456882d2a27d61d9764fbfdab7e3a", + "s": "0x5772fda185d59ff4c5b57f2a9a1506b21a442ced21cdae6b9d91cc691afd71cf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0216", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x26dbec41d6851dff16c47b2b25e7b68febc6a6532faabd2c5f43e20a73d94bbe", + "s": "0x7b15afe16750cc5323a24dd8cb0ca9f8ea3f9f2092c2322102542d1bdaae5a15", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0217", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x129129f541b783872a67159ae90e1e7bd74dde573b054477fa8365cdb6e18e9a", + "s": "0x6247d9d254ef17a1d6c4cde4e025cc2aaaaeb76b2c4cb89505e2a195868a53af", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0218", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x530ed192fdaed4a6be000a57cb427c3fb84f361cc171a041369ce3ddbcbc8ef3", + "s": "0x56cdba5901fd012b35b5fe6b2e2ceeaae927834ec639d9f5910af835cb80b309", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0219", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x95c5055c45b3beaed815f520d71e64157822f98f050b0644a105d940f0206f02", + "s": "0x22cb53e2e4b711fee54e0985f41dafe04ca7a6a415979c57c8cd3e402b32ef7c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x021a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3db59da6a30bade5634d418936cb2f64458fca5a8df019aca8ac7b085b03539f", + "s": "0x19044e7ad17355aa8c20bc53e0c6d87fb8ce14eafcf2aacf2794856925862815", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x021b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8ac54273a15c9d6892ed661e0896c105f55f84475dde74cf6abc36db3b2b08f2", + "s": "0x5d94f4fda7866b9f0b63356e7816dcb15b79d09d8e96e7f311ce788eb3f1217e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x021c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd776562e5afecabefb4ff3b346ebbaf1f6b7cafa4503cc71fea42e4047fad71d", + "s": "0x46a0c5d57ca7e8356c8520d670d967b55533ab4442c5146e198f8b3f7a586b28", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x021d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xad76ffc4c0d126da6c733f1c56d7a0666a6b95bf0c6c7348bc6f1a2caa46302f", + "s": "0x3b1541b5d09cd8164eb4fea196285c9d247416e2a60bd7bbebc73decc8da0933", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x021e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc843acc66ec76594ed4c3b7f3d8f43f24f760522566d962f8a9d96a7a7e2f4c7", + "s": "0x1a9459b683983097f834909c8213bbf47bdc0975dd0e7c962d36aefdf4147e0a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x021f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9c90a5f5cf61bae6a80a041a317eff85ea0ce8ffdae47dd28078face09e558cf", + "s": "0x263f96a4eae67f901582cdb5e74015300c23b6fe8e036234dc5b0c129cc46715", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0220", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa7db5a0084fc56ad22c4cc34e7e474737d37603c678dafd8bbd6e797175bef2f", + "s": "0x5536b92089b4c1601c4d8d9e986b61e9b002f79c6a5bcf74d7be4f040f500b01", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0221", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x482f5f942bb24e1a90471bee7dd550b1b5b3e7ef3aac3de6603bf082db5c34ed", + "s": "0x342026170229ef588ce4de9050d06d57206e21b50722462f419b570718a3df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0222", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x25261e1e0172c086cb1eee49ee97ce9fb5af64a5038e98dd07099d3f59e93209", + "s": "0x3215aae832ebce135c3c724c091efc60186f7ac106c1ab41dfe9473eefec1ad5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0223", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe14a7bd174ecf8e536e5f85cec1cc778765752dd6e7a34f387045a5c8008bd4b", + "s": "0x055b48c4f83e4370b0f5825f42607fc700238bce66eb9d06255aec7b6e9b65ac", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0224", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x14949db823ab22b1cc000df12c035b0ee7336260266dfc04a13b3e2a482d5e76", + "s": "0x670b4cc2ed08aff61d9229093a481dd1eb9bd0f74e18d3d5823b135c4318b607", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0225", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2ca2549cd98f75860b9fe15529b9216a72166a7f6c9d1e4ca3ae29d4fa75f746", + "s": "0x245e197ab1e76bb0d4365d5bfc738c46561332a440229cd35b672acbcb3e9008", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0226", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdee0a17890490282a8aa5f7507cbdbe4d702a0a4786fae871158235e2a5c26be", + "s": "0x7ab6e7a5aba582c84ecb51bfe31e5ae2e5aa24f55cdd7898d6330e144b686260", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0227", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x25798513fea402e3a4d01261e708b75920c483edbaf108849f30b0d4c3eb08ba", + "s": "0x1d2fb00fe3cff1d5c5eefe1129541faa1070d086f6b049047c74657500ffe495", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0228", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x399e7eb2679c471b3b6af0896d9e919383186a7a3108d9ac6715f1a1aaedca72", + "s": "0x0a5525a58347e7b0093519a7661ca94f3a3f785a5775d18f6955fb7c2facc736", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0229", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7fb1fec09e9e171bd7dc879b8b46ab529994fe175e6a135baeb8ca5d01101394", + "s": "0x59ecd18a7c246f3897c1837f16a7aba97f8664e93eee1ef5cc907fbbf3005bc7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x022a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x79dedbc77bdebc2ee87126be716f3478dc187ac5fc7bbea7db6702bea916d0f4", + "s": "0x70f4db16f64ee951f459268979738a5ad79a714aadf88f2470d6e3591d9c6577", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x022b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9d6385d54e452aff056f0aaa3b801788d15ee27c61ee2e06686dfaac16c59dfa", + "s": "0x34eca52dbae8216088bc07fae6d64ecda8ee96c8510247e76b57313a1dd0835d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x022c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb8b12045184d551409cbf6d5f3f22a50c5245b885ab7dce8b31c0f0b62b9c65b", + "s": "0x78af3a73b143a2a600a48db7918874a79093ba435c43b570864140dffd2d98c9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x022d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa408fb31756fbc7a48c193d8dabd094d3b55759ad8431d7383221d2cf4f987ca", + "s": "0x6697f96b43f4faa97e1c02dc23ec4400446de184e41064a7e2c9d678496ab10c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x022e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x50d878035bac49eba996d80148bff8eb48f52f2f656ce13628d0d615de017283", + "s": "0x588106522bbfb90cb9783058d1dcc16e6d673c2587ea439bfce9d1e45dadb70d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x022f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc3b9d2625d2463a42a4ebb64190482a690f33f6343f44065a70703e6637d7544", + "s": "0x4c56f90c975c35872d3f350624d4a9a9284fea15c50c52450777111b6f86f5fe", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0230", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x14f24982635959e43a06a1ac4d226826a60f84e460eebd150384e2817a088db2", + "s": "0x62d85b8987da52a8f1b94da2f8c505be75ef52ec88b6d1b0801edf94786027ec", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0231", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb3ef9a0b7a18323e08e2f94f444a8503c03cf9708e0ce89a69efc5b874291a2f", + "s": "0x41a6bb9974fea5b124b4217f2bfc32e9e5b2d08f4b15e60b85d00d1d1074e2b6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0232", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9b4df6da0b87d099b47313e2aaf6f7027afded84b42abd76afe00b68bd3f37df", + "s": "0x34d977f61242aadc2048f157d4584a82b7b0761bfbdd905bbd96edb30a2e1d42", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0233", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x701d02b18ca81f8ded3cbaa44ca33831906ac7559ab44bf7dd8412f8661f1339", + "s": "0x2dfdb138f7a7715ce09f3154990534dd9ce17ae7d15138336e4d64448ffc34c2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0234", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x53f988af6de7a9afbd6970ada80eaf280c1c351ebcb7e2b6f7674101c536b568", + "s": "0x67616a9b81f9358d2eecd82a766c98a264631ef8045dc997e17b140d0053c11d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0235", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc4e6c52578d4957a3fa191ba32050c730a08d84df4329df04dcc4eb0cba4ede6", + "s": "0x51e0e1c006a7c50b56b519b7c219da07381ed5eb33713a27b5329edf8e0aa966", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0236", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x198fd2a29f70f3bde9d83c7b36ec8298af550a1d7ddb339c72b4923288181284", + "s": "0x23d72eb69251e12de471fac1ee66a6621a566df936d303fafea46198407adb2d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0237", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x51623093d591cce725792f08e976f7a5eabfd13a40f6df628b3424d374f8c3be", + "s": "0x59b24236a7abeafa931800788bdaefef39eabe9b0c59f5712e6c70a32acd629f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0238", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x081d07c216daa06c6a6e9c4ed12d7e03c49251f5e6fff9432a7648cab131f1", + "s": "0x6f011e8f13b99e298c7eb2fd1df1b4812ecf2658013f51f8f9699dafe9720bdf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0239", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcea589ed1c5f7547a4537d6ce363aaede1ee16412bd2f87b45a6bb3dce242716", + "s": "0x506b7a55c9eb8a811c43e5c2fd427da50f87b4c90bc26266336daace506a7a6b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x023a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfe75b06e480aff615d7738258b72f98fc7e28f8e2f13c4c8a8900869ab5242ed", + "s": "0x3ee55239cf68ea3a9b62daac50307fc3f45e3a233dbd8ae0da30e4edb85b7c01", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x023b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6a46cd0bf6bdd224ca2b4fceb1af612c137672df8f197ea380b3492635b2a41c", + "s": "0x707aef193dafe55bdb6f54fc5d5e9b5f70b7db0b729304e2f93ae2e2880ea86a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x023c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xafd6e8cf6784b31ce0d1b8e61f4adcc83c308eee2f34a738db0cc5cc2362ed4d", + "s": "0x4507e6b3300cfb4a84149512f6a4bfe9142169506521e6fbdc2095a35f1bca5f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x023d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcded5f16dde9f18d4cf07a189f7c95fcb7e44a6656f8516b17c98c1e9dfad597", + "s": "0x7afb377b629de89d56d5d2b550e95f37efe267be000226ad100ab6bb728ce703", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x023e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x05ab7b6c5d7ced4b0ab32039b2ac44d031e02afbc5c9df8bf138ec5729f11128", + "s": "0x032a53b49d5a52c59f82137e7a0a210dc59846f168671a9e5ce6f267ab8a48b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x023f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x40999d56399835b4875a5201581a3958f6d341adcd147c000332766b90bcad00", + "s": "0x6364742dcf9d3caa5624a2f2b49cd6e90d3c2ef099442e06d1f1b8bc09ef8e2e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0240", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa3ee2b94f16c4d2d0a84322b6121b0a77ea03fbd98f111d2076015a0754aa1e0", + "s": "0x1f7dd5a5f11b78a6679e5d5949648b5c68c3daf5f6b18230cea4f231997a58de", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0241", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x34f4cf5c22c94f87424c0545b90c373ea2fad8dd08e8217ef4908b2fdfca079d", + "s": "0x2a20213a770748a6a6ca1cabda7d77fd018ffce408ffc160ac0150b7de700150", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0242", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdc890fc31231f0ec57aee6472061d78248b9d84dba545a442a445c1626ce5dc4", + "s": "0x40d582ca077a412138612a7c717500652332b27387f5e352eb2f9c69b971a4aa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0243", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7ef248b4a2a6166456312a3e4294dcffc90a5fda830ae1026a1fc528395a746b", + "s": "0x1d9b645445b86d447e8956e0fa33cc232f872c2290e62c7af29cfc684e08f2f4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0244", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcfc8bf2658e996045ae3ba4b9787ec1246cd1189953432d368b220dd75a2d0c1", + "s": "0x19976f8d7ba43956f933fb4c19a4dbe61a5a7716feb909a6979c7a4c4b9276de", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0245", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb857332c472610bdce6f4b75f77ee9083534e9b49f339dcc11c55c5b6ae70e30", + "s": "0x75dc421c3a8315f280c68380abed0966fd34c641526b49f34ec82764936c6e03", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0246", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x637c2a0ae06934a733fccf6a22c64606d90dd5fd56003c0a32b362ccb1d863dc", + "s": "0x7788389227308264dd7c8081150de551c1ca4318248e6b49c958a05045ae7a0f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0247", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x02e2d2533c109d2986431d544006b2f9cb49d732eb6241d2f4c5915852a100a9", + "s": "0x092d31ba26113245c355e038c2afdd11597b8b981f2c87d994cf41be53d65dff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0248", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2b5ea26df2332f750bc86458e6c69a8f4937b0459fb226343d0ea54af23fb3ce", + "s": "0x271b9ff945e187dc08ba3298fe53a91f4ee79f7778dc50689e721ad9251fe5a5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0249", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6d4b720c9139aba5fadf415157ba0b8f8707b1339301eae4d56906f3892f3294", + "s": "0x3b7e5b451e0ebac619ac5558445996a8e31ef8702b1ada88a6c75d7dce48d882", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x024a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x036326aff562171685d59fee804104cf491d510b792c5a25743953e82b491e72", + "s": "0x7fe5ed89813db17702e7e44611ae2e1cf30ee5e512a166205bdc07df95238d5c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x024b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7ec6fb2fbe35aff9574050693e9a0569dfe40c3b884896c107f1e65fc50ba1dd", + "s": "0x149691d73831084a5de790282197f1f90702383156f829367cd01b33a1fb5418", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x024c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0514eb0d58fb1496931e1a3068c34d52a34f15764165c6e66c1930c1e3c79a68", + "s": "0x05b3359a430f639b94b11f370e42f1dbc9a93e21e738a935c4ad3e8aff720e45", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x024d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa8077cd66c95413a27da58611086a9193f44c1aedaa513d2a4859895b40dfadc", + "s": "0x72e24743ee1d10ac472faf274d688f41e2e5795caf39f788b051a81863de5926", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x024e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6d7099e8ed16dd59c528de5af37e9c4b9bb11d1ad76929d27d97aa09ea4c6be3", + "s": "0x4b5402cc1e35592cd976df1a4e1799ce18bad45104acf6938d54fed68e5a4b53", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x024f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4b2de8017b111adbef2850fd2eb60e84362cf44ed8b00ba9a2edb65172d19e73", + "s": "0x60f500b15e6dc5103ce64fc719f1990b875171c0f4a708c5ab724ffda4284453", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0250", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x32aff2da0dfef1fac485f40f18e72ece820c39b3a15a83bf5f37d6799b33fa35", + "s": "0x0ae9831702063ce30dd90abd1bc85d19828e0a5476f9adfd6947d2b1c6f8a8ea", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0251", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb0dd08012b480e8953be77aae6db9ba2645ba7473f46b092545abc9843f11aa0", + "s": "0x3bd88d9d66abd35eb945f5652ae50f2ea9d1be637a73929b1d5eb157fb29d53b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0252", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x266dcd211a3e7af9d29659ddb88ba739d9a92ff1fd692d653fafa3b87cbc3d1d", + "s": "0x36f08ddf662d3949c7aa63b21ec41f08f31540fb67941c8cc4dcc83ed3820128", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0253", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd48d7f610b540c25bda8753a1b2259c7abf2011ae7d67b36b66b9b2ce25a66e3", + "s": "0x688ba5228e1d1758883d7bc89af99bb726cb4e34e375909e4e3a339b9bf87d66", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0254", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x40bb44db15b53cd849a80be0da896cb12ddda457e7fb7de22be59d7de968efa6", + "s": "0x2913c32692a92ebde775252eb5c678bfc5a105248100a46726a7229d90702a08", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0255", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf4a200e60e19261c28412e5b815ec8b2e0614e4efe49892b16ab38700573b050", + "s": "0x4d0640556dbe2850bb9d1474d23f748973b678bbfb9774282ccee11c09a21252", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0256", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x46042bf9f8e623a917d8c6cf6970f43074b17eac0f34b835c16714b3d061e275", + "s": "0x73b05adc5c4e1bce54dd6ce3261eac7f7641dd94dbc689e1dbd8838dd173ab5d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0257", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x13bdbc641d4271411d3e319394fa5293c0cb3a1a8248b149523cb388eb8ff31f", + "s": "0x6ce925b3a7de132a4f639e4bfdd817a66462693b4fd540cd0f63b34d98e5971d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0258", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x48286fde3d43c13a40af84bdaff9773587922f8a75cbeeb9ed2b888a4c5525ad", + "s": "0x185553553d1a9ca12b309ecac410af788ec5aaed220be8aee04fbae4b79416d1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0259", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb4e6a59c829fb68cf7128fa0488ee2251f5ed9fef2fdde856082010558261305", + "s": "0x590e87fce5723f5303690abed0b47f0ef55ed757e669156257336964558d4b06", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x025a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeb541b8eacef68be7ae979e7ea99223725d58965339ff60cfb6c2ad6cb5fed4c", + "s": "0x7dd473bd0690fa425d8f8bed60d58f8db605c286eb8068748198ae56df3e8ad5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x025b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcbfa885c1ba3b04f06e9e3df56f528a8518e9e4424536e88f085eae4a8a46046", + "s": "0x25893f9c690590fa0df9cf6c161ddcb4dfc24daac0d3f7196b7ab05931505e62", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x025c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x43e22cca7759f399a18bcda9ba6e28b085aac422591530bcea3f13d48ccdc6b6", + "s": "0x4cf31d47839b65c8372a3405e41fe7cb3de8226e205ad06d23719a0cf5181219", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x025d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x075d01eec8bd179bba521986ad674f1b410f2eaf0ad59e4b68cd0880c9b17803", + "s": "0x46c7116fceecc4b1783d5b3901d05fab00ea0014ba49cc85b96ad2b3b3af0dff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x025e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdc6a264f11fe085bd07a543d5ceaeafdd17652bdbab9530b5aa0981befc464a0", + "s": "0x7293728f88a881b4e2a6ff0b94f7747e277d864410b05972ab97dc7b53d8e95a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x025f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xeee2bf43e998e5bd21b0131b44c2bf6fd54648969ea6979ccf1e9580ed3994da", + "s": "0x7053de4906a5dd910273c3321e84d77a04facde63fd7c16d5634542423718278", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0260", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x847b6f5a92f3464691dfe17983a1e5165e210c72767aa8021b5c9e0ffc3a8b07", + "s": "0x163e9f376d906b9db49e2f3f43d5975b7e0f1c9e2ce6d30a16c57512368546a4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0261", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcba0cd5b68414c29c71d785567e6ec7f4d2b006c691f2c7279f7c263c7f2db29", + "s": "0x60fd91883a3903d5dbd4e9b9b113c3fbd89d99b9a59a8ab49f1d9e8709dde2a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0262", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa19c0739d2e9ba0226c7674c3baf3e1164acac497fbb27491ac2c4be8fe9daa4", + "s": "0x7d755182f1b179625aefa9df43566df168ecbb1b7cbc0ebd3a145878276946ba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0263", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5ba26afbb599b4781d6cce34c1de60afcf8e4c8ce542355469a3ab50b83ed3ac", + "s": "0x2bc5bbe5f4913aaf83085005567afea14a7e79d887ab5577205dc6ff2747e1d5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0264", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5494ff8e5aefc8adc798c012b4948fcb6c24aee382cca9ef32d311201597a6ff", + "s": "0x0b97ad7399ae46db835c122df6e6f660b333cb16318931018f48179f7265a69e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0265", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6a184e038374d0da312e0bb4fe03ad6b688970e551783388f8ac61bf6c81778b", + "s": "0x144a78902e0eac4e7eba11a1a8c8abfd92358741389ec0f9f83600d439eae653", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0266", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb7e11cfcb24b2a1285b061b6f8ff90fb75a04a10d74f2915f58922f01baa0cc2", + "s": "0x5642903bfa15ce6c7955c28cfbca823dd30415661647d6f34e87b63192acbebe", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0267", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x35b30b04a6432c57ac64aeaabc117bdf34c166a3aed2b6d69621728af611e711", + "s": "0x0fb070edc532c6616eb31bd943af6bd74124d48c1690800f1173ebd676f656d3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0268", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa0a0f16741dd2fa8aae7708ee9b7ee9b53c6efd11c6498c232bad0210c887f1f", + "s": "0x3e33c81d8873c3b36c4b66e987699bbbf07f25668e0a04967c6d64867b71d80b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0269", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x40533f3185e6a2f5482fa1bb08e8087ef6e07dc5d5804e5bee4dd25c998a332e", + "s": "0x0c3e8378d174f4bfbf5196222d71b8cb4277e91c365a98d60f9cdb4c11fa5dff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x026a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xabcfe2b1afd585c429ab2287023ac5ee643f21d267a54cbebdd71164d8aa34d6", + "s": "0x1b6bffd5fd5c17e0eb9e6160ca4dd2b8e9e082d1e6ad47d5381c24a072548ed8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x026b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf17add457d9d79ea9a294da4ccd6aefbdc9cd69d578473925dd652702f6c7650", + "s": "0x779dbe12d256836215c46db3fce8eea62917f296e4fa31711c4ad1a9a7bf64bb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x026c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x12d8e99628d370bfdc2d6aac0c55c5fbb50876976610f62ecc63c3abe3ddc2ec", + "s": "0x405753bddb4bf7fc61bd7d58499a7b78c1dc52dc20699043bb5a44e7931b13a3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x026d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc78a37deb538ea264539d3128b7889224eb442f023196ee408a4710b9eb37426", + "s": "0x4617a2f65e1711c88d3fc05dac225928b53772d72cc449fbce076d566e77448c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x026e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb9147aceb6b008e59957426b2754f9221a7a8d5065157ea445773f31026af877", + "s": "0x48cc2c8e824a906e75bc2e35d612c06c1e1375cf96627aeb8b7611bf61c1ebbd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x026f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x457fa371cbc81bc41a42f33f39e0fc1b3f5fe2ab4811e8b77c103e21c52e42e7", + "s": "0x1bb3a86519749b0e67b4b97454e9ce835f5e1330a29fb6bcf06937a1233141c0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0270", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x836515c53f7ade4e81c9c7e8f003c64b32d2ce65d231368494d10ba5d718c203", + "s": "0x5bb6381a92a071962d1803827a00496336e1504206d83093f09f17be688d9d84", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0271", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x60f4ace7d970e732790cbb07c04431d913dd28d76caac40be7527676f8bada4c", + "s": "0x74a693e4fd1a2c1694b26908eb0256ff913315f0c9d435eb6269a693e8169d1e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0272", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa2f1ccd6cb4912e2b20a04ae123b2fc897c931abe63ee522b5e065a59cc1f9c9", + "s": "0x508ecf015dd66ca6f6dee817a80fb937271a2b84f6b9e6b2c074185a26ef1c6b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0273", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xac1f7e1b7afce10d7b7451baf40b34d44089a260747489c0ebfcfd5d41941d0c", + "s": "0x3bb4adc0c8c687da1273af53207b2185a6cbe178a0f4811eac850fbfd591081b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0274", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd484c33c4425fe087fdb5671706528bf008fc72536c34cd1da13cec61edc3c3f", + "s": "0x09de8b72f0a5da06d8f89e5cf26480cdb8bd56535fa09ebfd13e1acfc7302ec1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0275", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcd521606fc7388f2905a02d9d8f4881ede29658ca3d3b87d2ea75a2dbbe02028", + "s": "0x032525c1d6c9e0b7ca038dd816a9d503db9c54b573ae81499d9cf2b17f9875c2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0276", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdfffc0de08224fb1de7366a377b6bf6ff770eda5193904a15757f9e5d3a78ecf", + "s": "0x097eeb9888977f65a4a2e673e123844c6486072090ca16f33e370941885801d7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0277", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdf3fbc45457ff895cd0ab847f154c9459cf8bfbe48f3efa3fb18f4c8583ea217", + "s": "0x1fbbe3a5b138b4654d6a77da453fb8f851e5feb3da9463e4edfbe9fca5403584", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0278", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x30c90a2ea55b466cf3f4c91efa461d445190a2b55881572572773914a594555f", + "s": "0x06f7f279fc54414d95e0479bc1cff769b67c2fb4c810d65a42b2fb427031ed94", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0279", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa87d13a391893dac13cdba7fcb545e1dd899ddf3d9faad2abb53257ed589a1c4", + "s": "0x062a16ec0de8f40e72fc96859b3cb74543b27ef03804d4d80a4c57afe0228c40", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x027a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x37915dc0583aa9d5b9f580bc75eaf877e632c8a908c31530d46679a8633354f3", + "s": "0x0f61fc9cb41cfbbab5402d2faaac180b57fc1fcd7a3ece902d4041b5bf5c18c3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x027b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x38d8b2c171d8723862a05de486569e24d6365a4c1cfe7ad2dd9e7b9fdc447d56", + "s": "0x57efa2dceb2256ea22f963361a7fc43a381d0552e41ab51ff7e3a405341275f9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x027c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe2b445b107c686d09cdbcd01bb16b8d9b1913a6c7ee33a086b8c0f9fe73b4bbf", + "s": "0x77d337a88eee95386f2b1f8b087a8f320ceb2fc6a6789ad30cb183833e9a7d5a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x027d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc3942f4ef4e801f4f95c3b816986836d71e98e71e281b66eeb483404ecc56e6d", + "s": "0x3b05bf49f633b2ca3f856877e33e31cdcc27d095b65b22ca4663579e9247ea06", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x027e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7c2d611a0abfb9518bb198d9db7ef9be2d7d9cf98be52ca1347802c0d2e996ae", + "s": "0x37826c7c37d4f5087263bcc6a945c6b118b1926703c4899c8e528e164f8e7cff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x027f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x742683f5317524169368be5e995f35311448627ae80398e174c60c117230ae3c", + "s": "0x6ecb6943549659baf22d08dfa5ee07bc8ef2719522c57ef78fc1ced22f05d2cb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0280", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9c0a4c01a8219409eb9e494f9aa5481f13326880a88b97ef8983c3bc239865e5", + "s": "0x039e59b7f7b23eb59191d008140fb07a7ae487b45f7754592afb08b7f836da95", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0281", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa46a15fd6aaf09081c1b0a42c6dee9f9734d54e87054adb1e7daf68903e2d2b7", + "s": "0x3318671bbb82fc0f674e831222e8af52687cbb7d0820860d6e3b6e2b82d0c6c4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0282", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x751ae0d91d299e6690a33eb07391c65371267af93c5c42729c0e0f4b490773ba", + "s": "0x2945e471a7723539ab8aa02f9964c7062deb75626aed56fd8d1d859bf0c5e0bd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0283", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x799f2b5b532d3ed7e4e80afbd7ba922cc547cb49007cf9d5a607d91636e8963b", + "s": "0x4f389c07b1815ac2e9375820ce30e778dab4cec4cca5a21d4ee1ecd77d9b34a5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0284", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcab698ba7a009245ffc6b500fde17b9695a2759b2e935f68cc8481d5cd2801c3", + "s": "0x37da1c448e0829dfc8339a5dff27b53be32054249e9e143db23dc4b2994f0d56", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0285", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf2c684f632df07d60d563651713b50fe1284b2cadb5955999f27a904e1e44c76", + "s": "0x3b9d303ab4142376dc8761c5a4b9b7f67c1986ee4337f10386a5167c06ee011e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0286", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf5fe7461870ee3c2133d10763a23d1cc55744d9e52ecf6962134beed7328719e", + "s": "0x361a52a788b5ad473be6516bb67ab0df86c8556e4d007802c279557b347bdf90", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0287", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7915719c73872884374922c286efd6109f4210f9b860c91c440f9e0354c9acce", + "s": "0x7d5d33726b52b237d83d19f8447cbd298fe7472c795f0309417bd893c4596e51", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0288", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfb9e1bd91188eb52f898bc80759b1ad67b9165839e387d50da8754a9970883b3", + "s": "0x542cfda7575ed79d0bb5c04b32218a334aeb32584096292c4242c5cd7485ddae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0289", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x088264b302493e5ad50f0a8407a5842a23647b7c0239bf5b8ec4b1666475e02d", + "s": "0x1029064d2c67437caa6dce3540863ed9e3c0beb75f6099b00e9031a99a624d53", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x028a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6de7761fb19c7df8975f3befc3677b93fff2d16669aa0e92d023c7aa2d908ca1", + "s": "0x116f5ad2c4218731b5f60db1f1e457ff781765dadab1e620064444fff5963dd1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x028b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x29584ec499c83f7c380f4d42ab3c854fd882cb3e3dae5fee2eea005fea348f8d", + "s": "0x1e88e6e6c6b3335ead7a579f7c6074a490a304b6cde43bffc908c6ab43534d6b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x028c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8420061a8480b74895dd0649ff15214c6aafd6cf3f07a950ea0e05bd6085ce01", + "s": "0x0aa8f33fe8bb64908f927e92acc8d386f4332aba9c57606895d4977c219e60b8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x028d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf537d169d62619a37ab04525b5f5e96c063aa71b3b24934ba29ffad41e23012c", + "s": "0x1cee0da99e0a6dc39a862d7e331446367de8c36e4c43098d66b230b818f0f8dd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x028e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x453d3fff3972d366b6cd94bd14fdca3e233f8a8156d26474dcd9b22e256b1dd5", + "s": "0x3fc2cce14d97331773f963e81b0f74a19ff7dbec055373e93e0c528c8eda1f98", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x028f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4ddf6d1d76f2ac1841f944ef0a88f259067b6c67348c1b7743b419037f2bb836", + "s": "0x558c30f5a959d17afc7187b43c61b45f2e826b5f72b36e06bc3db91da817a2e2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0290", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x218495bec550a2b0ce615651039e7eab4200ae63b2dbd02f308e688ead163488", + "s": "0x67470292730a807cb2b3b7b82b5288e135f2fdc6539e7738478aa8ff73cca0d6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0291", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbe93b7eda235e85166745f0d0c536b0176413832284ae33481baf713be8e6ea6", + "s": "0x6d93bf20408395f8b2ffe06b13062780e1c4a31deed9cd4c915b4c3011f1f0cb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0292", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf7c8b865d5ac8cd738c5b530453a2aa3167c9f99f430eef8fc261a91b5dd0460", + "s": "0x529e6458d9cd71849b7afc0e1c197365727d1f7dbaec47ec3a2dae61edfbe024", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0293", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9a990c5edf8fac8f4b70a836f453b80d9bf0a4d9796c3d51860180923e050261", + "s": "0x3ae0a0df319a5863dc86ac1d32e2d3b20ca2d2c35ca5750cd220213192ef82ea", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0294", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcff5d5c6d740ed1162870a81672af8afd70815bf58ad5a4d79aa6b9a709436d1", + "s": "0x53e2231f5f86252a6b0e8a86246ae5775150c656919b12000eefa43cc6c8e101", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0295", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6925eacd050543612e037a4869643d6264824e40c4b8d2b6fc55d9941996ccab", + "s": "0x52cf9c3675991cfdf4f1fcfba17ddcf4c123a2af92507d7f78bf4b1234c77948", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0296", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa09b09ff8509083483b8fce71a2a1593462140f8812bb7a0949f3563a850b249", + "s": "0x288341aecb90d8699a5deb1753d304fa829b40455d9aa461a2204011a54d7805", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0297", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd04fb9af6eaa7c3d9cd96e4032298d4721cecba9e1c9aa1beec5cae9a839256c", + "s": "0x4ce9ab38debc5476e9682f17f1d5c28c022b6c3b69866dae461479fb51e12d4d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0298", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8e5571ed4341e7c43bc2dd61bf72b4e4906126d40b913074bea9f70442c4d73d", + "s": "0x5e40210db2d8e319e43f3d5b86467e7b3c2282bedc7a5b3d2040c8687c043998", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0299", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8f7ae6739ce9d7df2c873203a8eb2f4806ce31802ba214c6a846c1f2a4f3d000", + "s": "0x5ecff5832e6da2f31576f1812dcfd311bc4ad536cf736f90c519be6373ba7641", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x029a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0bdcba32761b0d3df8b69327dfadc8df0740bd85664732b1128cc8dd4ed6e609", + "s": "0x7c7005ec6c84af35dcddd417d38c468a8fc6634224dbc2b0dbb450a561537e65", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x029b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x18abf6de8f7e64e73841e87612ac4851a20eb5be30f8f420a0a8935eade82a4c", + "s": "0x544e60b1089526b95e43f645aaefa3358331c220fbfa741f62468032ce8e9a3b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x029c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb470233fb1b05fd736d12675bd826fd689e55eaee1893095b34d75e53e969d77", + "s": "0x2cd24e1d5106b9a07466f378611b86af751ce04515e2bb90a3752296460af70a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x029d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd2def137b20679ed06970c0d26df97556912aae847608eb852e7423bb83a6f54", + "s": "0x599196c792120e227bba614b10557cb7a5e32535c18156e40a5a38ee54f57c1d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x029e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x583768dce3933d0d1ddf8492f8ed7ec95b2f7d4970d58f9c934402d382b50db8", + "s": "0x74a265b45d5f8d33b2709cebb82bfacea37a04746e60fb3751cd29e7057d2ada", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x029f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x49641c3c4e430485ffc658f766acddd7646d8d3fb88d2e24dfa182217b77d53d", + "s": "0x45a0882e66bd69ede398566a8e379b372d9e2afeafcc9bc935c5365df6b5d650", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02a0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf9e19a6a6f5a8c48180fd2d781888ecba0c3bb2f49d2fc24c6bfdf917264fcb6", + "s": "0x3881d1ca7250a48c0662d8dde8ec61beb2121b519a43cfad9683b5375a9d9d55", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02a1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x57da74c2fe6b1a9406b278ef16d3fd2048cafc7e3922ade27f31db58a9d1301f", + "s": "0x1d7d64f0aaa3c300e7cdf018098427866edbdd374820e4c0b1ca91efaf8aa4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02a2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa1218f5dd9a298e07b371988801a96c42b5d30b7a1cb040c6124113f75ed7acf", + "s": "0x49488125da78d69f38283295e7c23eda5c8f9bd68736ac9b1cbe5bf54a47071b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02a3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x70f676ecc4e80eb7201615183aad4a891f417bf727d09042f6b33e47fc56560a", + "s": "0x2434f6fa6c57bfcf2709893a1cb7632c7c653f6aed3da68053b195a58c676260", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02a4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4c0d30edf61aa1d8cf22aacd7d187ee436bfd21f86b2a4db0b039fa2d83b1923", + "s": "0x134c29f21a3e7b04631591f3da7d7331ae4213891232e5b060e64623dac65a06", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02a5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf7d53859afa64b85772a0158bc4db08d417881f4320d14ba7136b85e77ed75d7", + "s": "0x069a954c0dd53d86be579f7a3f28ad6ef6f1cb42297db50cb95085878bb01dfe", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02a6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf93af5b1e4eeee4d648573550eb135cfafc7fc099c9cc1f9e5d6c090ca0b0d35", + "s": "0x73bd70b8bf2a951f0c4c1a4018e955231950de89a6289f5b160add334cc95cd1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02a7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x989e480d04c0791c82dde5b5ce17a5df965a10b289a1133edb02730012390e6b", + "s": "0x466dbe50d54d1c7baef6a1fa276b96f2740a045ce2d9b08c2ed35024e1b8e55b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02a8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2a3fe0b4dce5b1a8f86e01742151ab5787e717be7c0bb5ccdbd79f3dcb59ced8", + "s": "0x2bc8f36242797a1e29152087a13f306870f60cd24fdb8a57ce93529e9721ad8e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02a9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe4c297e4ba3fbc04c86c137ead1814d11f37e72cd08e124526c9b46ecc5d4c3e", + "s": "0x193f6e05663643aecf7a79b4501dc672ee5ac0087d223565bb028985e152b5ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02aa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6c5eeac1984eaa94dc49c22051d9e5c494063feb10f00dee4447f5fa932199d0", + "s": "0x555bda3cfb7316b57e0846951ce083402cd25703132914da5c4b4f6e62b6f570", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ab", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0236828cfdc0eb4da0e3deb46c213cf4d4522acd217f5e7095f00839aec3fa0f", + "s": "0x1f83a8ab17b62fc08f1bfefb30fc28bea9611f2eb4ecd9bb76f56329a5052684", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ac", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x46994e76b10603a4afae08b633fffb9617800fb4166b43580507b87c32468581", + "s": "0x752f335330cf9405ef5ba4db1fc44563c5ad8508c5ec4929d7e313093036e593", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ad", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x729ea9681de70ac8b94d168acdefe8847e6cf8c883ec9a39858937b630894449", + "s": "0x7eae229a21cc470a57765965262a0a0c19605f221aab4c1c85ead66e823c5234", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ae", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x72470007204531e7ff24b97d1cf94bea41b21af1eeb3855d61bc8e71a9955de4", + "s": "0x60650f5a7796c68abea471bbf85163b4f792a89543fd8273ba92b7cd070eaff6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02af", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x646b2cdeaf857ae9ccc7a922521ff5b4f4eed403d62f29a23de1c2bef486e511", + "s": "0x11bce5c3815cd506b10bfd4b17f11c92204763dfab554ecc0b19b396c0a47f69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02b0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9a009e8f3dbdf759867164a83e3f2071e9e7fb023675af2777f9f4a2b6b536dd", + "s": "0x7263b0ea53dad073f3204f8e8ebc4895f52c26dd8790c5036d6ff39eea1320c0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02b1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa24e18c2cc4f3b57df8d5e1655bb1cd7d53dec4fd15ac558f14b23f548aa66f0", + "s": "0x5203ae0f68dec98ce5b12814b2c7d7d96dfad5e02ebe8ef30c25cc9da33cc63d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02b2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x642ec2a76972272ae21a4a83fc81b9153f9e08da825221a7ca034cc69f196990", + "s": "0x55630142fd3f242e281e937ce12d797922a91bed23c876990238668d8db14715", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02b3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x733eef98b99bdf184f4124030a2d1b48b296bfb493d204853fba90bdd44d51c6", + "s": "0x057abbb49449be076c076c5b05324e0dfa45953818525c0969888e379c5ef2de", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02b4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x15eed1f055753b548eab60efc569ba3db5d63254f2cd23a37c25596d96a62f48", + "s": "0x546c8ce6d0051c94a52c3e115b9dfc6890eaa205d042c8b4a738c1159fd85f8b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02b5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xca58e97d6c42233451d58dc6d32c45ede6fdff333a33e0dd3e64795d5d614d9d", + "s": "0x6a077ea9b4f957c65da140d30c177234ee8c7a5b88288ca7395ad8d4b7a6afbb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02b6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0550201cdddc79912f5be32ca9e477a0a213d08732e13f6bcec6f6edd9e4519b", + "s": "0x4264833beb92b994361d6d5f758ee869513cb0b10f44ff2f908c0debb7892de8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02b7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe79b61d9ce001cfd1c46ea3f009b43f43950e81fc639f2a73cb8e36946f43150", + "s": "0x4d7098b903f081d130073eeb4498fe95f9382f8cd652f1422278682946d68642", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02b8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5ec22c52419e01fe8c7ef8ac6f3f461a2cf5dff4bda9c07e5a8128c8f9f49f02", + "s": "0x6ec907ce14620886d49df8490779ba7b753204c68f1d334bdf39a618ccea045d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02b9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8b0a2d6bb604bb19a98dbb4ca016d2bad1f861b7ab9343bfef7da1108847c8d7", + "s": "0x11f4bbf6ef971883691ffa39bdccc97557fd10352e7a54fe932e18b7e630969a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ba", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc2416ff970aada1ed3e85f1dbfa5804006ba3834857b47e99306c4863195c544", + "s": "0x5b494456007f73940be947d85b98eedfbb64c670a1742e3bb73f40d93dccb251", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02bb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd47ebd1fbb71c224a2cdaa269b4df4a219ace58742c2660739e1b7d6fa06488a", + "s": "0x335834d7868efe5d911e651a35ff3f926eb3861ab6b8c94f07c1f47e6d41d815", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02bc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9cec329097de55d639a171c034058d73c4522a2deae04d43cf815040614030ec", + "s": "0x699c54193ed142f072604237a2aa78fc7c91ce88de63f963e37660bde42ff30b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02bd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x72e0b412e2466734213fcfd28d6add92e962632ff9c8fba07c66065d74804910", + "s": "0x6d1e8ae8dd40e148ad4f2b152221aa1c7d4b25ef2a4e79e58aec49151f9c1fed", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02be", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7932162c0e9627e7f9fd24b25ba18810749bc4e704b18a0ec556d4a900fb122d", + "s": "0x228774ef654c281eb07288a503601ecfd5a552126709b0363b61831320763e57", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02bf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x608fe845144b8d2dbfc48c36681a5480d3676aac8e9afdccbc86de191ddc52ee", + "s": "0x6eed04fe73317107f74718f088bf81164aa85721c380eb86eef865e240505260", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02c0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdea15456db71d8ed630d047028ed438b83bf2ff84c4aabfbd65867c1547cd1d1", + "s": "0x63bebe4a3ecd6f244b3a082c17a6212cb2146b6cd1a74f19d73b28d43b1fabf2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02c1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x57d5cb40262e75a3611ed471d62013ee308a18dac2ae6cb753ad4ca140be7449", + "s": "0x34d015491e4cdca74e5f78a9c7d500f9b9938292933d8d2bcc4cb23d70369cca", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02c2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x517df2ee20ec386a67a5d5f593199db219fecd19d38d697835cb0ebffdd8e57d", + "s": "0x7bbf4f14d8b6a3e5aa44afc1ce01408b2e577507494cba40c45790ae9fd53f24", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02c3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb864001b2565f232a85f6a73af08e2eeb28bc8f0715acce2f459141c974768ed", + "s": "0x3b0d8d1b9f97d78cf19632c69ceeefc794937d0d9fbb553e5333f271657708f9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02c4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5f2fcf354c7dea49f2f5df2be271f361b31750c0cf243d387511580d0f61ad7d", + "s": "0x08556976fe5edaf31f488a3a65db75bfa0edef616b8259e9aa3b479761a0d2bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02c5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb55ac55e7aa7f5d40a456d42293405023375d9030d63b601f819d2d24e941064", + "s": "0x50708806d4d971ab8dad647fc821bdd9366c88f079639fd07302323956431472", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02c6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x31711a7f479ae5b5f83b8aedfab649360c51a08884b43e1d514e988dae1bff94", + "s": "0x3dce9dbbabd0492614e6a8cbe65536eb30cc08fe63239d8e18fccc41570c2d75", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02c7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6a5d775e776c02851abed5ca582e42446697a7a4fefbc6666fefef055419f8f4", + "s": "0x5f34ed9d0dee0538bc81c20e07143e1e6ac142f195f961f4df51868230ed7b13", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02c8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9705fc20ca255f9b037ca495c4729e98bab994871844a28b9a2d0066cd7b7995", + "s": "0x5aed8e62435a8b03a0e95188f98ab84b56bccf6c8a9664cd260a3c520859ac33", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02c9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3a9dd306cf8d00c0c047ad039e92c791425b5ef9f5b38f7cb2649eb2142431e9", + "s": "0x6486e9970d10cb9bb5ef5584570df9217ab8619bd162d177e366c702fa8bb2b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ca", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa3d4c9bdbd6deb5589a38a839536c30624c2fdae224acd5697a48de76131c8a8", + "s": "0x7ea5e54c382413322ff8160596b1048e3e55143a6ee90540526965760e506564", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02cb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1b3861bc0d0a8ad4e3ddefa0c5a71d8e27d8acf2402060d36c54890d69faffd5", + "s": "0x6f6c0779431d575e16755113c5923942e010eb67a3598b44e888eb03d74d92a0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02cc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfa2f22c66f136b174d1d1251c0d79f85b862651cdf99cf9e975f11faf25946fb", + "s": "0x614038381daaf89ef53740b731a3435a3e3ed202d1c43082c90bc02ed49086ed", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02cd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x56991ff282741591cf4a491cb2e11185ae27911aeed45b00906085d3fe59b97b", + "s": "0x49f3c7f039aac5b105a143985055002df66977d95fccaa0696b3ab00cf5c8b04", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ce", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb54475d98c5ddade5f49fd2cc82ec8643838456463d25437433b9dc51a464152", + "s": "0x5cf7a5b64a597459a543f337c2fd93bf699d993085404a22d9619fe8bb2de400", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02cf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8107287a10744686aa374a120749d098dfcd1c3cba97bca20a2e6225364c14e9", + "s": "0x29eac5e64e7083fc1b106a6873cb4e4d3d3d6a5183f6491614fc839ee2f721a9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02d0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb2520c1d84ed055e621a2255c1012abb6da4c609d8ced742ac0b7c9902c86ae7", + "s": "0x30d29e717788d0549366fe6853ab56d427273a24a546fe12cc2173508e8b096d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02d1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd9359f63f7c4d9770bc9ecfc709c45b1406996a1fafbe04a30d2ea09d8685943", + "s": "0x6fd81ce89dc28d9b17ab8b564d4310fb380a758a423cc93cae0226cec8ee4a38", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02d2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcf5657c6d0af7c6673ce7127cf7e2ae47e82e8ebfc30eff0b63ef0e832aa1e23", + "s": "0x4f17c293a4f7bda9c86fd8959487bb0ce5abb930c8f5518c057ef538f54d7ac1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02d3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x47c121ada1836b60aa96b3ddbeeb708869f685103f2bf1ac8645420384c12159", + "s": "0x2c70e9d75be5679ec56f01d3602d5c82ed0d31b302d1f3c86ecafc2777c47576", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02d4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1c9282981101892d7c8209ec753b65423ad1c102446ebef460eb58a8a9f3d5c4", + "s": "0x69d8dd49097ba781cf2d2c4f533ad6ec32594a44a0d8ebb614561c01771183f1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02d5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbd5436cbd0e1ea508132dbe017f098cca9703856e67abd5fff6f30468bfcb415", + "s": "0x772c41508857c28dc607c8ab9e76165c20d2e79dc2aebb2de6975adc08aeeacc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02d6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x170dd67bbf9a837c80a1a1883d14e965f0a60de349fae697e06a2fd0511efa7a", + "s": "0x5dbc2a93d55d80b29644fe28eb75498c6a29b255bd99653c9c9af0848cc612a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02d7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x58610947565a135d3a1bc4cacc5982e750092f61662d41e149200329f47494da", + "s": "0x0ab2fce95a911ec47b2c1124e30a7e6c10ea7e193161b8bbc40ace9558f444e1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02d8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe4448ae163fe1b54ed7fe4934c949dbff2ed2a933b5956398f02a6a6df0006fa", + "s": "0x6168047cf75b9dab21c4b51d6aae1eaf56394bc5ffdcd3759da9953d6f211c07", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02d9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2043187d388677679d03d51e87202a7a32feb0f4150346aca63fe89e1862400b", + "s": "0x5abddc12ff086490dc68adc83903d90af3561e42219b0f40f4a2f390afe40648", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02da", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x66e3b2fe5f22ad2a966a2dd5e282c7fe73887d7d0b1944e0319ce4a35dbdd748", + "s": "0x71216497f9b64a64361b35aa0e7afdab4f7b10417c6e154f7cbfd0d56564de89", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02db", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf8c8bb54c4c3c560a5841bea3e48439a6f81f271a05cb74d3dcfcbe74a5dec3d", + "s": "0x2d6f47702da496832f1afc71b927ae8395a4f1a4974d8072c51be5ce806e672e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02dc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9f466e4271c5ec0ca09087c8d75f74048bdc8db721882084007f097ca6e19604", + "s": "0x462822480e8c07c4c2b1e9dc84296f451c6e88d4e199baba0e45dac20b93b2b5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02dd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x58cfede45a0f7bb8b300adfa5b2572eca6e42d16a96456bec252f5c4aa2a8a33", + "s": "0x18705e965bf65c53def9a32690756508ebf63c3b33a62ca4727ad50f982ae60e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02de", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x72a4eea6b141fed167ce321536d1b02b38aaefbf94e54cf0a847815141fa51b7", + "s": "0x1db75b60eab78bd185dcfcaad4e50e6fa12931b33d7fb2599f4d3dbd09b06365", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02df", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3f7091223bc6df7593aadfc42dbe925f8713e3ecee141d7579bef9e574f31291", + "s": "0x788d8db7a6bc76fdbb7d1af1e09865744690bc61d4d44d2591de5efd39665e72", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02e0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x24c4434f806f3f01522d6b50b30ff9192d55ccd1dab5745fe6e04cff90d34941", + "s": "0x4b5459c37f757e2dcd0b5dc3bbd24bb79ed0aabe2e0195289a540acf7ad99b51", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02e1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa72381ac9f7d3909342cab17ab65cc588b626c1a6227c49e03d5e827a336d3d9", + "s": "0x3e7f8293cab24e72531a0f34d24eb459ba673835e031eaa5869cab1592451aa4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02e2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xaa32aa404134a8efaff1806149321273a32e515aeed98f05d65c0ac2b4b7beb5", + "s": "0x03d3f0949801d3d5bac24d2175d4c23f4ef19d5000bfb7b754f8b21ae92a86c8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02e3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x73b6e01d7380318ab923bc955b2cda0665707d7def3d0302a51d835216ae15a7", + "s": "0x3b9e16d541c5e786458c92f023f7df911c593ab27308f6026985d213ae3dbbd7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02e4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa91cbc23b1e72fbaa5467519e471353c8570f184a2f36880ba5c62ccbf226fa0", + "s": "0x064fe7928f96e39f7cd2ea30f33204a34b99ff18dea18ba96e5317e27357faa2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02e5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x54cb6fa5602e38526e26f985b55c687996eb392e132d97001ca9622266442a45", + "s": "0x703f451f059a5b1d18980207c45b410616c1ab351448fbd8c74ce2e6b43a1875", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02e6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x28a1a52168a36ae525998bccd81ad7314302cacaaafa8fcb8f89cb7d065003b0", + "s": "0x0c87971d2417910b2ee5c9b42240e597d018e8dad30a57e71a93d40ed6014e0f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02e7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x407cec6a625f8639f8d0e4e21d8d35b99961e7a9c6ef62f19c78eba62de4cbc3", + "s": "0x40a0b8a6aead5e9b27bc917938ec7b03b266853188caecc0e52422012c880205", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02e8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc1306b63ed50376b52e1f324e1bd50fb053ad98f01deaddcabaaf91d0322ae37", + "s": "0x411070dd5c25a1ff57dffd4f48df49bb309631f9e79fb3d298da8360449b8d7b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02e9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x604fc6dabc1829749cbcadca906e3442537072c2a783059238602ee74af055fc", + "s": "0x01f0bf64252fdf10e1be9059f289690f4c78b93b3359ca0d739feb6a60baabf2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ea", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x94fa6a7611cdef494d66c14cc5052791dfa98b589a095ad6226590a7b48f1c78", + "s": "0x165651e6a7240441714f752b68f2bd6921037fb11ced50acaa20b1e75edd3c3e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02eb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x90bb5fc999a58277ecb197afc850c1c1336d2df35d2f3acdc5f57e6f33270bfc", + "s": "0x139d86a2371c4a13982885269a9388475aa37ca3e6ede52df7ca1fd88d04b1b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ec", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1f8c7b698dc8ff8b1a52cd6463d1053049470ad8337fdb18f904da6ffe7e89b9", + "s": "0x2fe80474c9275336a796a3e8fe74d3c1ab44ed9f9473f5eb9f62a6b80775b6c2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ed", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeac981c2a45a83348ce0afb9009913d4ba25526f61729df967cf32b8e0b5869f", + "s": "0x43eafef87c8214918cd1caea2e7cbd06bb71ea0917bd7680c91e4428f208b3eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ee", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd471233eede9562ee441736ea0f10cb706ab13395c2bc7f6880a95f35534b6e6", + "s": "0x02d03f5908a9962046fbf1e0a19f2170d26dc42634ef4d58bde2efd5bf92a54b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ef", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x286fe27019927f61bd6370155a479b2db7c711039cb664d9ded116bc61b8a156", + "s": "0x0883b43c8e511e5988a1af8d216c470214a0d327fc94eea473ee5a0289a2bd67", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02f0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6e2b17a952ad55793e24f1863006a99ac136f62ecc01679234130a1eacb5279f", + "s": "0x6f4c7f8bb8276a45945dc3a0d5e2c4fab0ebd49f661371482df2de6d13b31e06", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02f1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x97f52c3911205acac8350a3b706bfe51b4f623bc3800f39d2eeaef856d515ea1", + "s": "0x2fe802d7edef14b8c0238d377ef284c14e2db146c039db456306fb5b6c2a5e43", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02f2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x857f128b9f3c621b9d3dcdf5e7813c73d5be5fea310b8619b51dd7d035a79be7", + "s": "0x726413bd22c029cd20f228e5ebc4cdeffe7f2fe217457c2dd3d5267294ff92be", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02f3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x349a2a758cd65e0d62cdf992be14f5f9b65344a49170c8253d426039b86dbc7c", + "s": "0x51c944a6f8b774638121e88d4197164c8088608dcda013c505c08dbbc61a6963", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02f4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6f74a51def9d7c9c2226621c738f6ebb5be4a6aa78e1a5ab8059c190c791c9fc", + "s": "0x4b68f6538cd4064c97bc95307b95899b4e06e371601a24ce04e57d06b1e2d335", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02f5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa6125344e9d932a08ca8a68354e60b0c0dc5363a60f97646676bc9f392bcf1b4", + "s": "0x07e5b7f0843f48e1d197d1832d98474bacc5c4a312bd4617f4d5eda1b6375b56", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02f6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x94c333b6b01f7c9ec7ec6c102a798f06da731aad6bf058f66eea31887275ee3b", + "s": "0x3a066c6f9ceb7de4c2ab386bc9eefe1504ec137f8a8603a10cee4886d3eb637d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02f7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb7e2d99c2a0c4a797ec33f5dfd0dfde281357b29c9b3f54774b53f840e692f2f", + "s": "0x5046cb61cd67036646edcd69323bfa9d5c92f0269722166a9a833da9ed0e712b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02f8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xae26de7a08cf0381a6bc028b0c8ad2023856b752b7f42589a0c2f53998bdd053", + "s": "0x39facd5f949e0ed6621e02654dfcabf307a6877be7be03496a51b9b14a06c8df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02f9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2ebfda7d1ce035ae11f5cd07fa49fe2338aad18f895a1c7d278fb6f6a6f955de", + "s": "0x544ad3be1b8f0ad76ba407e9df3fb6c6afdeec2b16b2d0b270f6ca50e413b556", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02fa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x28df357a30cba17e53744482af6759ecf0b3dbcdf92b2abbcfeb5a1de0aadc2b", + "s": "0x0264a9b8c65cdfcce964758d81d6c649e45e180f56c2bb489ef50cdb46d69ef3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02fb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x658b442e120b82e2fc44d3d976124cf212097dff555f8a973d2888d52bb95af0", + "s": "0x73a77ad0cc6004f61c2f249032b404dd030524b95b4cb5d1dc33319ca8e73c2f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02fc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb678b9bb8652460cd8c119e9fe35f26ba8616138aa9fa43c48c4f92806283314", + "s": "0x0d4ff0e6bf029c24433c9355598452e37e82c5dc6ab47cf32f7ec94a8703c879", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02fd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe0da762cc555b2b5d541d37fcec932853c7d12f2cab6261a2b4a36ec4a1bfe94", + "s": "0x5629e4e7177dcef01902db2ff44673b7057cef5868497e2e278c607e4b243443", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02fe", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf9e758c2cccb355841679d81b79ca7e081e0ccdb0d7a3e0a7bc7291a7dc2578f", + "s": "0x11a0c03373ae9a36cfe3157589942dce2f1ae3077ff108888733d0108080f6c6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02ff", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x151f3b459d710ad5e3faf76d6659c55da50502ed398a29aea2e467c596d6fd3c", + "s": "0x236c317cffd2abb956c88d894aed4f2bbedca924fcffb69ea56d654b95cc6799", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0300", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x687fbecf498d14621849ad7fc244da4fdd4f6418978bccc19eefdd73be3678f6", + "s": "0x5639c8a41d7218db8de6dcd76e125564f181e8ce6377b4e89604e3db5c07aa17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0301", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6f615d8d5b99c330f22ce54550b2f8e556a3fb535b62ae11eeae8eb5d419d421", + "s": "0x1a771bc53e0e08b8ee839b8a25b20e9ab26dd22a5529d1d419bd7faf6554b1ac", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0302", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd79e774c6c6fab43a4fdd27b3096d6230d6f2311b47b886351fbcd69e5c179b5", + "s": "0x667d21a34f8102f368e042fadaa68d3a17ca8baa208bbeb24f9fe7b494d927aa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0303", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x170285312e6d6f694a7414d0055b6368cb4f4721d9dccefe415a036794313e72", + "s": "0x61748fa60ca57ad1d0d956b92194a65c18fc511a304b956f9dea5c49d7b2eac0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0304", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa8cb1f1602f321493e0f1d90ab3a939e32a5cc765739609746c64ea660864394", + "s": "0x5be1490901216e5f858cbc64beae2994161a251d04698b308dd20c81c82eddb5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0305", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9050f7801510f638ece4c37934069b93c50b234912bc2c0335b2b90895d86a7c", + "s": "0x624407755c61268c24695b0bea99b597c2b55d6c7079d6b9d04ad2208fe3451b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0306", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc4fc56c03a0f7e76657d2c18122adeaa6b8f8aa5db5997555207f25f22856c49", + "s": "0x235cec6b5bef61c3bd22c59ff9bf2dd7b2acdf556e9e2f06d603d78a97164073", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0307", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7ff106054cecd39a27c3e21b7e4e604db70b38ae9e9f63495891cb236a20a2bc", + "s": "0x09771734e3f96c78f5c61bd8940724698132061fc9760027355322212d033f4c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0308", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbf8dc2864b010a3f1ab0bff50b187cf1b037373bbb9f1ccc8da35c52f194440a", + "s": "0x0d38b632b5af43ef66a55be7e5a6ef94c0e9320918aafe5afd26281e31bbe558", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0309", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xda0cfed77fe19b281e0a511acca9438a9808171a03f7c64c682120b7e5353b76", + "s": "0x4e8410e1ce057d06c8541057f3f247cfb3406dddbaad3184e2cd96204cf94eff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x030a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0bdf9bc0fd26943d0c30bddb74a93068aa22064e1fb8dc1fe2e016ccd11c827e", + "s": "0x41cbcec15545f5a396db18370b5e34f637a630a26f4a0f5d2fd9998c77662291", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x030b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5be3c5856f1d3f15b2e08da42642d5c5caf944acc4cdfcb7781564c7877ca1a5", + "s": "0x545ef0d3e9b6e6ee377166bc97e0988caa951562d02adcc3a14fd78cca081e62", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x030c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5ea1db7afb770629e59aa5b22f365086afc35531a64a003c4bf769fd8dd9ae17", + "s": "0x50019352552a29fe3d42631248ced33b35d8035d6150b89db6933f4e0733c6a9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x030d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xce24be2a63ad09d35ebbf7a58587ef0fdb987db806b84064bbc81d1a18353fc9", + "s": "0x07a1d1b27f7fc9f08cb6332e3c5c9e1349a925248a8980b40f5853377d18ab2f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x030e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x13cfb39c990a21d68a582382f52786754e79e3b936ec2bb9a26d6b59e5ac0763", + "s": "0x1fc3ffffb73d2df8012390b9d44599e74edb877895449b57e3aab1f037182f86", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x030f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x646afdd432f2652b6c57f4307a7b96707c2ed9820991e992e2554fb6169576f3", + "s": "0x0addc33ff5cc20b37b901f5995bd1b964ca1a6ef497701488a2491a66c425385", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0310", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x986d5152e49b0198678d17b8a474de252f1ffa7438e02b144df869fe7154f656", + "s": "0x0d1f121a1a9eab04b95a4558a92a317de4c31616e69fd48b771e504c7fffa240", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0311", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5bce2461e6fb8b3b22bb2a0117947a5cee6bcf33dbd681fd23895facce40d2f1", + "s": "0x6606b1b2f87532cfd20d0f0d1419f9e69db53790156b804c1aacf1d3b262be42", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0312", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa3a40325e0e7b97242a5eab0b7605e48dd78cc7f7878fcc109b8433ab8c08bac", + "s": "0x603e32c62c8a1ea1b348cb973165aee32728037d53952a659526fe2b3f1ea4c0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0313", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7d1ac7b0fe569b9a99be539531ea606e2c3de394967701dfc5541cc0c734e91b", + "s": "0x44f52c3bde8ca7580c4418f42e52312d0e24d46d1dc697a9c57ce653e2432c61", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0314", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcf2605608bf91b7023cd5d7eeeaded83b8e635be0b46c8f7b28802d998588ed8", + "s": "0x23e73ecb962e773b615141aeb20a75ee08f42cc699ded2b599d22e339de1655b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0315", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcaf4d1613de80d78a596bdce7d7eec15535cf7772da56f11827677d2fa3c4cc6", + "s": "0x6635d51d57cc79f5b934a65d779673c6e11881d28ca15708fb24160e05b43562", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0316", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x221c4a6b3a6462a21c486c8d83f7d637e2dc66da50a60bdac4a20dbea7459cb7", + "s": "0x5a79a075bb676de2ba6bb47a6c7bee83c5ec17bb14c56e9bd073beb9a4b1cc11", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0317", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf67058684f0c0432fd351c5ef039218fcd581a3c86ffe473837260d72141b43a", + "s": "0x103cc1959f307b392f6e2b9d97eb0d7d7b05b3015033b84c177c0f75022379ee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0318", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x64e70c60991aa014a3708259fe9951088094da5e24cf9bf3c7fd80fdadaebc22", + "s": "0x7bb9363ac3981bc2c83d78746684ec6d3ea6027916ced83f71c85284810f4d0d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0319", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb39f50ffd99fb0303e4a3980156772cb8a7ea303c4d3a23ab7725aae78fdaabb", + "s": "0x7cea7d95a054c8f0950221e675e107f35b0a964a8a64f48a195c67ce33ae763d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x031a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc8ecfc46ad46ebf2dbe3a97943a7114ecf33e79f3508689d0d60afcf3fa7b119", + "s": "0x347ac6fdf7704417c0389b61769060fea1fb17e44ce780f5b38bdb9daf21fcf2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x031b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6da1a3820619fe9249972e04802e0bd229c1b2569e9e1d33e5865558889225c2", + "s": "0x2a580afc610e701a4a4fee01f189b5fc3f010a375ce1c62725a722d43f87d564", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x031c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xab96ab4ebeb224bb73897c7a864080d7c566103565985e50756ab3d87ee8a5cd", + "s": "0x175647d55c335386c79823deb19058b07dfae96654d1010abb680edace55ea38", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x031d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x88c44e2ae8429f023c81ddc669e6ab3b845869e54190be883c46b830e911f691", + "s": "0x37a786dd5edf3e59c987366c362ec716c7da99311f27da13b42472c2bc785a1b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x031e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5b5088c2f7ce960f94efb613c8a936d1833ba64b4a6f22300fe9889d456329bc", + "s": "0x6709e0cd4e3707ddd36ede58caae9c89b4127b854a6d28096b679f328f856ede", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x031f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0caf7c04de2a7da17a4497f896749d89e7ec88d77c4a9432f3c561a551a6cd8c", + "s": "0x0646adee790fe92a067054201c5786a71aab3e0c4102c253893d7929e40504a5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0320", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x953acdb065d80d08eb7997e3af1199439f10f67f9305eba468d58d41c1e668aa", + "s": "0x5a3d9599fde000f1420f3c9669046a25a637898351b10f1afa7bbe28feb62a75", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0321", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x94e1186ce6fb51e233d26c0a67585e4800461d6e942dd5c072eb66ce79372bc3", + "s": "0x1c149f04a3431d9c8428913c2e35714a9526037873ee9293ec3293b9e682df6f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0322", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6953e5066ff54dc085e332b406a67d0b6443b39609c945b48e63c34cd07213ac", + "s": "0x2859ff2425178a5c33b95b6eb4564c2cd16cc7fdda7da2d81456b5c9ffcf78d6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0323", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3f6f52e08ad9ba1493fd7a9e75f86bfae1cfa8d0f4f862495ed5a6bf80b74908", + "s": "0x6ce5be7c9a46a6993f521a35784dafecaad49004cb7c3285c2085d873766ed50", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0324", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd195c5a95af11790e20fc6ea4b0be28c4088ca02fd016971e1980f2186ae7b6e", + "s": "0x2455d48442ff7f3e70d91277c152f37bc786ddbb423702215a945c66f7af039b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0325", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0646dfa262f8419a75db767526d28c97de4b04140e59939eed98efde7a41e258", + "s": "0x5a0e87e4d93369fe24a138df4986f27917793ffd6659188bf16f7f5f7b7a51f5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0326", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6b5b18123a1f997fe4a87be63de67aa4ae9f01fbbe7887443b057846d07546a8", + "s": "0x58b1ad60a1460985480ed6534107a93e21c87176946e9d19bafea5f827e31fa3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0327", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xaa055e14c3fad2e1f7f53e937a24f1233c0045696b0e23aea3c96f77038d04b1", + "s": "0x48e85bfba54f9ded8089f61e76651de8db38c7287c50896c861f900e5fd20cfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0328", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xab389cf696315b6b38968ba323717dcc875e571dfba9cf1b67045270fa947139", + "s": "0x49f4f7e140f61bd1bc21c806b0ead3cee04e3d4b8a26ff2bc525e9af9d247ecc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0329", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x225b893623f41daf7782732a776587f05eaacdc02fd60c03e2ef10f010cd040a", + "s": "0x1c0054f13c28093b04482ef2519bb9de33a328d56c9c6b09f2b206482e0e2cf0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x032a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x83d9676f472e460d0c600d803a1019835f77995cb3951e64ca5881390c84d2be", + "s": "0x6e49ba04d20b236609612f40f07d4e77590dbe45929d492175a68570c88bd5a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x032b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbe7be391daa08af854357f9d55556751d283b3d6504433d235fda0eb2f78990b", + "s": "0x115a5395a8d452e73ed8ab98368501c1387c9a1feb41b156d79f5a3cd7c2de71", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x032c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x81906151b5a52dd966862409cc4775b35f810012224c31034cf183a0c3f0263a", + "s": "0x7c9e7b0039f422c93897d778883f70dd8b59b408313f686646b92cf329f420f4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x032d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5f9a2c6114f6f6b8ac06f1e83852cb7c0ea7da5236945ea32bf535eaeeffac6c", + "s": "0x5d6a48c022dfc44952a6f402d1e0e33f82014e2e9c61b4a12e035b8a03f7a5e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x032e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xddbc945c51c827159bffc27a6c07878af77f1fb930560ea920ec62f9fb06838d", + "s": "0x54c4efa59f7daa134d3375d64fddadc8f408124bf6ef581549b255eea2b8252f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x032f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x01ce8a921b74266164bb0040c7e32312d32aa812405209cdd4c5f5ea309a779a", + "s": "0x705ef966f43624226b946c5cf40ab5ae389337e91a85da08196c258af4706fd4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0330", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xda0de250fbb855ac86873abeb232b2ff78a457b4e6eb6c0f8c0a3dbfdfd5ed90", + "s": "0x35951cf80ea4e5e13ce949d69ad069c87021debc40d8c174cc9dccfbd53bcb09", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0331", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9046aa1c05e893730c2a7edcfdc0794c20a639866082a6fd828d485d1917e118", + "s": "0x207d7a5ecf28b8fc986cfcd2fb4e361af8ad8a0e4d6d1772d38aef43b05d3a7f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0332", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xae44dc30a1551a3f885015c7430bdb29deccf75a1cf3c366f1c19488bfab8429", + "s": "0x71c3652be3731337e92f3cd36da2f80aae2b8c5e40a03388f003cec10274e726", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0333", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb5c7e92430590811bc7eed28b60ba964716389c0b7dc624ec9a9d6f56f4a97ec", + "s": "0x22060f20b53ae1b249a6c9e2608372bf83fb650e97c4de5a127cf15633197cbd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0334", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc6413688bb2c30b19a73968eeddb7ebfda1af1b5a8692ce92f65ac5cdae038d5", + "s": "0x7ce12488af24b78cce18c184cac6b0ff39f41ef03451b55538dff997385b32b0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0335", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x21a1f28cd6a4ca52a81a6149568adc3610421620d343d446b50066819389faf7", + "s": "0x1e456b1baffd6888aed631f7c90bc935ec3aaff96a4841c2c97d2115be426482", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0336", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xeeea9391c77f9c40d84015546ea52ba7bb35dfb1789b6232956846c231663d02", + "s": "0x54d90ecdfbf156483db9142430b821ad0d812fd83a1cdb7d8f07104811193a52", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0337", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x22a2caf27ac12f632f4eae0c6aec4f6a98e06e16486d64ed4b6e413befb81769", + "s": "0x0ffc1a410654b401acb20c2e6e2deb7d2c7ddd6ea02519cc9dc1b5a8c33ac08b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0338", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x327cda15eec96dd76dd8eb76a790b8630e0e389e89d0e2ba247699ab9f143fd4", + "s": "0x38884c127f00cb476d19e5c76f31cf12207b8574b88bdbdbdb5f9167e73cacf2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0339", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x44822a8842ae8c394583e08e333b87c2048630a9bf13bc2162599d1041faf931", + "s": "0x1a1719d69ea8f1d99c830f3d530d215d46593693723b297b4bb7ea22e17c180b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x033a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x25a2d321a6f11783e5e902575de72124ad6a48415a92868603476f8372bf678c", + "s": "0x76f1cd872d86bfd5eb3ba9dedb80cc5ba2a6aa2001f8fd311d1feb1dc5a8fed8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x033b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x07118208601c2a5b88b99edcfe180e1e311bb20970a071e3a94e2fa11be303ec", + "s": "0x5e1584e4ef1e2ae581f4d015468ef7f5f649be1ff524f7f09765963b5db096f5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x033c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7ecf36c6c9b1bcef5d9c4bb6abf1dd427d5560c774d3c0350f8dfed12621fed9", + "s": "0x332912af23f9025faeb2e02c46db3b55cec0e190c71cc1fbb51d88140d969173", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x033d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x74f35fcdf73fadeeb4613b22c9c6f05e6f8cddd62ae690a8582140c5f718ced0", + "s": "0x0b1817d882712c8f625d15b3fd7e0224cd7cb5401456e4229fdcc2b2f136ff75", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x033e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x22c29735a641ead3690c77058613c6575682ab8de89fd30ff457fee535dbee47", + "s": "0x06b2aafc90ea661c78d8a0bd0273c745e70c705be0be42d2b1fa6806a0a42086", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x033f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5919a7bcb1fe862858d5937c2d6dbd8d9b94f515d231a910ea8830d00596974a", + "s": "0x7dc09a502b57be5135083b17d1004519437eaa3cd49a503a15ea081cab887bce", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0340", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x366076a956fdc88c21fc6bc0de8b47bb6422069483d8f7b831d4ba08bf383ef4", + "s": "0x1712b46c9e0ce900887d09317db4b7e2e4f922986970cb95156c6e53f440234a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0341", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe3464629bcfeb565aa6de37c5dac5a91aef7a4bb473c8d2bda710397bdda2167", + "s": "0x4b17bcafec032fdfb9434afc58eb15a8a38ae6a5637bb3f109d20231718312d9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0342", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5c6f446397ae23a1c3b71da01fa28ebdab5a752a92b56fe6677a617651c0beac", + "s": "0x53e28ef44a28f19796fe3c7a78a51a3714fa5942d940643f7f7d4dd14caa4915", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0343", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x886fb52bd6e4dbde75a79938f0ffee27a4865dc7576d658b1f0bdcf466d22017", + "s": "0x3df4c9b2e8733b4b1e219a250bc398a4969256897267511c67275d16e3b7aab0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0344", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa3b2a69055439d5abb56f585300d2a3b10bfa8f4df6d3928858dbfcd8f867531", + "s": "0x70bf70e6447a9c794c94e0c996c7afd1fd819c4458680b02a697b8d65d934e7a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0345", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf7f16312fef46e2a54022bae54a249cea9bf68444905d6f5c169713f17c85ac9", + "s": "0x0ebef2917a24414a80bc18a3e674f0e297b66f64f93edb5c0c62e57610c9a8b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0346", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x80936a2c04af5825ecbf6e756d61fe278807b9f609bee3118c79413105394fd9", + "s": "0x7dd7ca111b6fadf67eff49ae2e1facd17f0b31144623b6ca595d3a51d1fd4a35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0347", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfd06963bb51405ba0376ba38ef5c02abb8b3f516e69fe24c7376b40115f24b3a", + "s": "0x620d0bfc9295ac93438a98a4d58468e9f12371df20d8434ab8a98de5c7aa7b52", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0348", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe218b6f335c02daafab4b9facaf135364221a9250d2260d8cea5330b2de33016", + "s": "0x2b1fbd57f9985c942ebaf61374f74e64151d7683e36ff891aa700abc888232ec", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0349", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x41d29ab33cd41dcb2ef56486caaa488c90306fbb33c081a28a2a5e5cc17f0fff", + "s": "0x690483722d7033d3fdb5ef9bd2afca9ae1152ee6e3aa8b3465588756d2f6671f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x034a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x85edbb4c7a651729a7be1084f4b018d8ac774e668fde2c30ba60bb9dfac61311", + "s": "0x3719d78e4f5f05ba7874315319b5d38beaefd62738653e4ff7de91ec3f361326", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x034b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x54f08c0c5a8da56961bd0977443b6176ab6677a9ad576dd6260de2206580a77f", + "s": "0x029a0bb85ece446ef69e8b8f5e1ea907d82241dce0617ddef8a00dcaa73de07c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x034c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcf1fd5447c525edfd9631a756fb52977bfca00516ef23d6ed5bbf6b55695dbd7", + "s": "0x0cd3ad8cf4f8660559b74a587ea80022f7ba026d74b2e18029a2c8fca94ad362", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x034d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x97287e90cc5e0b598d4603772977f38c6fccbec9355585e5e0af36ef016ad2fa", + "s": "0x3151e3c7829c920edaf9a8a0b6011d512cb1248658300cc61b405b46524d0e91", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x034e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xaf2355b0560294035fa12887696b8f08292a73ee5a7b573b177beaa1c595fcb0", + "s": "0x1097feaea572de92e98fa2fb7790df325171f47fc426548556819f8bf4624604", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x034f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x51fe6a2c45c2a732b8a4706ec5d07c95ce0a21f598d4720ee3edbac38be1250c", + "s": "0x2f345d13526edbe0a514250c4d35afa85c1c22605ece54f9520d93f8b9f5f360", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0350", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4ef4fddd824c0dde6a0aac2896f30c08f3ca04018ecbad1fa1cde2032833aa8b", + "s": "0x5f66a874f1059f240568244dc19d6313905c8d670ab030e6521bf45111808a81", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0351", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x109f5e8dd896ac82385952c39daa814c8105b30e3541f3095dac5c6e2cf00fea", + "s": "0x153a04f1ccee6a97cce6204f1a543e4d4478451128627c22dadef90d813c8458", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0352", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xffb23145f46b61d31df07533aedaacee4e9ae9443442233ebca2002074ba2574", + "s": "0x39916927421ff2cd80d96b058d53046ca5474be298a96d41445bc4bcaeee5b4d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0353", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xac6311f1b8c8b8e0f806e8ffefb7412b4924045278b868db1e1a4c7b798b0064", + "s": "0x05ee741bdb89cd466343389b2bb922c82b2bc1a3064e4244612ed3ddeb22cd21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0354", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4c0648aae33ded1544036c43c53095861011391511c0fab4f5080168f5c7a3fd", + "s": "0x6b99491231f7c849d257d05fe11eb998260a57e404b1bb54b176cbafcb566143", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0355", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6db0786690ad6b7d6f7c05abfc27aeab5bc23112c3159d16cbd5725122418a8c", + "s": "0x380135b7a4d3c35623de49c207100f0d1f6420362f968b19665434c39e54d5e4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0356", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4cb42cc76e02cfa3f0ba756da8fe2580d023c739c2c25fa5e32a7f25f2236805", + "s": "0x173768f36b733216d8d02db998da31f4b97d813591760e216726201a9546647c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0357", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb32adbaa62574e685e426aea971722ffb5b823796c9b002050d3d3479be55311", + "s": "0x750bd75d1f3556f9d7adafb4c0310ccac30dcdc25e9a0d87d7da380c79aa1157", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0358", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7ecbfb7d7b2ab641a7e6a942c6e4efa06a852f0f63cd26bcc80394f3ce63ac84", + "s": "0x280308476854e4632ec2a7e20556b8a3a707b9a4d02ef9b65bfd232ac9ca2e46", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0359", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xef23ab06841c958ad9fa4d02d35b4d4d629ad009f630074fb0f8847394735afd", + "s": "0x124a1f17f73b0b5df6e2473f2ba79c73f02fd9f9147587690b19a864b3c9312f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x035a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xff628ab656da32769cb0328bfaafaea552555dad9871ca7d52fec7a43dafb5fe", + "s": "0x28a24b4967792dbcf7103c515320ffd0465cf4f774311a958a28d2aa2a7a65ee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x035b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2a0dc9b51314cfe50f8722342f4d9f855dba49003aca9456ce0dea031185d735", + "s": "0x7ddcd1df659a8694301e82d8f6165966e482f3f68fccd1a111b6709e1673e3b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x035c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xecb5792d31e3c1ff367d72a84d23161ac26afbf56793789f8489dec7cd949a89", + "s": "0x5fd4e075c9128c8ad8883e7628e8cb96d130fbec769a310f3f9889c147a6128b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x035d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdfc4fa0ffe4f1649d840cfd85b6e094e1025fb66a0a71056fc909b45fa6bea2e", + "s": "0x385f17cb6705f04e4246459981d0569a0f8edd49ea278ba74824be2b22e60dc5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x035e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0d61a03c5a4b0814b2df3772a08889bf22ae03e958824a64368e3a48e3b04b94", + "s": "0x386a5550763c9be5e1d0d15abca1078c82d2e0e664f29a0594228b4226b22233", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x035f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd43821f7821b76d9fdc08ba87d7db41a449400264bc8665de96a82d23fafedc3", + "s": "0x3595050952d21a83e739f2b37732f99015215b087ed6929c6d67a675320b2e80", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0360", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcf19dc7a3b2d7536739e0886e66625adebcaa5dbf13895b67af63a5e4aeadf74", + "s": "0x125bb35ef4c0335fa1b336ff13389103cd60d7a175775132d37fba56177c3100", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0361", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeeaddf7b115e49b6002eb63cad5a4cdc16c32456e2d9fe3560dfb9bca86ae349", + "s": "0x2e1b0aae5891748a6da11ea475ad180f04272d87cc1516db4d04112a29d38b95", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0362", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x488bd50f932d0b92e8da1e4caae361c1eb6448a6c8000feea474dfaec7b43131", + "s": "0x5c4c6b3f5cbacbbf148acb8e6807b1e72813073703c551629b9bf0cf5a2e7f2d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0363", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4d016dd2b7f3cd0f83f131652028deec089cb12805f214c6ec8007fdf4f7193b", + "s": "0x6690e188bbb291fbd2536fb7e3fe2a0237170d5310e429e373324d2041e78bda", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0364", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x97aabda9cb66064d8e442ac3b867c989cccb0c5a4422726f4b7635d34d34ee0c", + "s": "0x3feeaa5a755feff699f468d494ddef55a0fd3973b259a08c733f8275328a64e1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0365", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa8140848d2b9e343767de528e94009d1f10ae079212bf71836c22814bcbcbb65", + "s": "0x751d57af1f2e5249d17b875d724dd8d42fc94d0d2eac52bdf301c46a6a88e53b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0366", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6183ed319daa9f3d5b1fd664a7f218aa2bfa223f1d20bb6c3c705ebe74d533f2", + "s": "0x467e5516c8b616341653e2d12fbcda2c75894795198624329c20f47cff0eca0f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0367", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6818f615118f821b8ec5b380001b3981bc2c8c2ac5b1575b7ee35abaf7d7fca0", + "s": "0x6aaabdb271e54f7c8b586eb9204ccf9640748b11dc8cbfb6f85318b81e8a0eba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0368", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8fdaa361ae584a917ca782c2d44eca94d71e8ea9164e651bb0e6fdb2246adc88", + "s": "0x1ac78bffd554c1562f7b508c33c72e6c699661a8fe93eefa5b2195ee30868d1d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0369", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0bcdabd4316c63a29ba84ef956567b5fe9978d41a89bf4a088248ed0302103e2", + "s": "0x569efb3d35c5dd95be0d91e3066a6cb0f2be165bc3348dc328bca7574d966abd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x036a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc92a472a1e306f7b3653a87b599d7f90cb14476d1b5d0aaae9575597351b61a3", + "s": "0x60c752ca01d84932d2aed8fa45f429c357e5911045b72b16663e7b1ed0b8bd70", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x036b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x753b665e96ad8b2132570edf5dfae47c056b165ab15198474e90a8db42c5e684", + "s": "0x6dc6ebccc93ae5dd400387bcb7a78a606997ede966d641e9468f96fe4065a349", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x036c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0937309216e3c20e0ac93f49bc5aaf7661704b864b9d003434acbc7af7503e3f", + "s": "0x4e91f49dcceb36305b76353256dc06c29c916603f4f1cb1ad9ad036263d689aa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x036d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x40e0848a8990f57f478b975a06ad4f613e2dc42bed1e5a504d0282078ba2e41a", + "s": "0x3fe8526742aa7ff8a8419dd9e20ab96e7d496df0143742a5f3ac5572532b67c9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x036e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x40e85bc86e883ae62d842a89cfbed1bfa863152b0c5404327d3e53a530bfa9ac", + "s": "0x16512fb4898deb5855fd1ee81990327bea9a273da49ee8cc9d8681c7e5c5cf0f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x036f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc01df4e0a21ab3909ca7cf3c3ebbe6b8a13e898b4996330922837d364e668702", + "s": "0x596432454ddde3615ff61bcc64fe5e4c74889514322ccaf871c6257830fdcd24", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0370", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x447882f66709c68d8c675a1bcea5922637d51e2c5424f9d04d44775dd32279cd", + "s": "0x7af9fb7a210915535fec327bd6aeeb25e44794ed82c919ede28464007d9632bb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0371", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7f0ed2d1ba427cb66ca01c1ac76248fb0d019b52120e85070dc48101f1a64745", + "s": "0x1fccdac31c026121223f78dd7e564e1a8e6ba57a1e5e7187ff90055e932cdf16", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0372", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe75017a918824065045f66a82b9f8d6b6579185e84f3296d28532751bfdbbf0d", + "s": "0x52c525a2d17dc35b93a9d6a62e8af2c89202f34a0f7b42bda18a5c4b3f657eaa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0373", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfbb2fd387ac74bf45b96fa9e5cc53b25e3cfc5a6760750d5cd7b41a6d2da4d79", + "s": "0x0639483d352e50eb75603191b6bc28bdd5486fbf0fed0a0d8c7257d4d2600900", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0374", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3ddbec3c28c2c7a4a7049bd9335f35fce2921021e42cd567a461d94643e522e0", + "s": "0x43359d72797797679922f92ff35d4088d195cdcf885236269f1e94838b0b0417", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0375", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd12c9c86895098629d64cc0ff6225fae9fb8f53083192e5b537975a2d9607ea1", + "s": "0x259761cd4885f1ea93bb869f4b0dcb262d6a1fb6e4e90e3922377076d5f9c67f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0376", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x727c3e5442add4bd8c14018602097a32f2499cd60efc1d19d826bc101358f084", + "s": "0x06a9b9081b9aeccc0a1d1c7af39399e64a4e6d7faee4c164e5fbeab1b7ca3cb6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0377", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x677d7008bdd040ff17d58712bd36556cf57b64a4773fe85860ba031920601710", + "s": "0x227768fffdbdce219c6cfa7e5339e66d14e829e0e73c1066c95860f18bc1f0be", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0378", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbaecd3755331d404ea91fe4f53bcf5a71b0a643d1495892b6cd4ba342c7d2c66", + "s": "0x1b1d9342e5dd5f6899367a40483906e7f549b5ddfc530f0837ed023f37b7802a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0379", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1f62fc5b931245a66d38251b5c606a139f4f5a8de55a251a62f5265c608470fc", + "s": "0x6acb80bbbf7a56227ee75a6ca8c71a02d489844d403bc5b39e11b94e02af0cd6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x037a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x44fb14ded24ba0ea7a3260b5efd6e512652fb4593b3b498715fda35f17b64de5", + "s": "0x5ceaefcddd7392c8787d097f4b702f5a3c0333bab5546f292d16ba1c4fd5e1ce", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x037b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x33398397f52588ba94d983d640de1173d098953b4345ea70ab8c63783de9fbb1", + "s": "0x281b0920886290f461a70c53deb02a0f63e52efe127420c107974ecb6cc64893", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x037c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4053702947b9c616d1eeb1e97b616fb30fcb5285e7138274b5c1d81f75d473da", + "s": "0x64fe182a0f977b186ac1b372fe056bc6c20882d5bf6ba238aa765003874b25c4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x037d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa87ce28bbac23b438c18d7bb9eebf84e40c62e5eaf10e09b3fa31748bda4500a", + "s": "0x28907630f9f05089c422c88472b47429efe7edfbb57ae13229351cfed6309746", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x037e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x87af83209a7a73d072dd894feef833fb1895c5618fc6a4d6a864dd54a79fafce", + "s": "0x2b69a185890d56ea9861e8d8f754092c3292bba8401db0caaed6fa91b19b8063", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x037f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9945b5ac46e4c185ed3a4bd38a1918ddb7492cc3db8b24c9d1b759c07f5f4a15", + "s": "0x395a8c566c3798ed24cec91aace350b7e96fead8528b5de7ebe5d36600e50259", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0380", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x93ba10ef53dbc916bc48d93a44ef7e391b6c910d82144efad6c69cdd49a02d9d", + "s": "0x7337b3faa1aa0b30e64d8e04c75e16e7bd849cd6c331e10c90b079107fff0162", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0381", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4e06b57bebe2050d5eda073a3f9710c23d33ebd98afe47665dce1960031d912f", + "s": "0x0848cc7d899f75a96609c27cd65ccbe653311d950da82581ebb74049da33116e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0382", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x50f5f2d6c66b2c7252414d098b473f7022a58071a8ce6dcf4a4da2c27787b9eb", + "s": "0x667140f69f400530749de2b3bd1cbde9297e52ba45e4f2dd719038ab5b8d1fde", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0383", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcd13903742291f4b85d32b5ed32aee0b467f6d026a38669bb1ed340cebcf1c0d", + "s": "0x3337bfd04439c87a299c9775c2d270bae283aa22b8c51b71a56b1eb8393655fc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0384", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x249c872d28c26dde372e0d9bc85307b65514d4a610d686f3c629f2a582b9e495", + "s": "0x4c4e21c323ab29eee88b11f79fe97f78f8412fc9cf42860cb8093f0a18027f33", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0385", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x739f446343788763ea8bf9522d982607032b50cf190a528d8cd483cece9fe619", + "s": "0x0ed29ac76855e43fbb2ceb6e15b0aff1dd4daf514a127cfa9757bdafe5f3caa0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0386", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2b68c6b19a60e4335b3671c7a85eb97b2a9616c0daafecf92e8f3049dc6df5ab", + "s": "0x248edf0761c0e69b03417fcf048df8ea0f1edda7a3e5ab88b74df9911fd749f5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0387", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7403e9aa4326a1bf768dca72d313920d03c70f26ca6ce137e1acb93fd3327c4e", + "s": "0x6c498f3ec189931b7f1a17fa009fbc141264be6fa8ff686674b3eaf43fc85991", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0388", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd6e63e388f4c75a0c48a5d4f5ead5587314b967d5b452fb93793a5b92ae8a5da", + "s": "0x0724beb8d03f5b8271ebfcce2f43050bee63b07f24cbf71b07283aacd9aba5e3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0389", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8a7f62ec7bb06023bd23fe2206d11aeb7c71e44987caa4845e3215ce1e570aec", + "s": "0x19c8f8a6721818897594277b1d859811d5cb154ade291a4aaf7514029c2b31d5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x038a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x70442c2faa06a7a3084cc1799cc1bc9d7f2a77755c5bffa415319f08547e06d8", + "s": "0x7a8f2b21e0276f996c38e2356e9073d23ce6dc114937eafc278a905b1f4b6463", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x038b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x36f53e9b9fae4f046af832b06b753ba9baf408742977e140b2b73669c237138d", + "s": "0x16075d7b91562ce0747aea3e6c45b139e0ff2d6dd0ea37acd519a812134d84bd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x038c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfb3c44a7f1a2d016a20e6de043f7893c91bf90fb6304375483485300f14d0ed7", + "s": "0x05f5795dac1f7a941349eceb15a0a9bc6dc04535e4dc75b80aef681b6c5ec7eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x038d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb9e9f65347747cd837fa0384710063ea29fe124c2f5e276bbaee5e659f73f7e8", + "s": "0x0f0a48725e6ec7f55b0c50b28787a05cc7741763c49da67b1a3b19192ac46bd1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x038e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa36c783e5a739b05df99ecdd9883ebebaae2b9f9479365d0abac6d0b3b3906e6", + "s": "0x225a0237801308f4ab43cbd3a7030931da10b1b7670c8e7eca132ff753b9107a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x038f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1df868668a96d83b96fa416d0558e7d3d80cac67a722b4cf53d32fc67eb66231", + "s": "0x32b494d1cb3e9cdc619bf8cba3f66fa609f138dc158cb46406318913f1e0b3da", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0390", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfd6f5ab64238a5ed1ec33be7e0b5c027830ba3475f52ea8c8fbc87943e930329", + "s": "0x49258636ffc06a4bb0f2963a98ab4ec2972b9c613d69f43780147a74795270d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0391", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x74fcd1fb12cab9791a1ee6075f983cc79085d792b40df274a14e3d94bb6b4a8b", + "s": "0x212e567d321a882bffaf583d6dca62b63e4928a637fc360521a78c3fbbf2aa17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0392", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd59b2b1c99bd2c67b49c17b908c7e6e2fb6fb11af129c49e8749999faf932638", + "s": "0x79c8b018d30288e4700c9f4894353d19742c488db32d1bb15d387c695446f5a2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0393", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5759c888ae35ce5573fabfbf8b30f549259aee62916c88c13b060a8691420d97", + "s": "0x516dfc5a9b81d6ed479d0dbf4bd6675443782507da405d576d28fa03c19c2ec3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0394", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x75d3948ed0821d74144bcb85e5f13772837dda08d4ca81afd1fce0efd0724f6d", + "s": "0x01c91961159b1ed197ae7d5abde3a1539f2432b7daa69d189b1324eb018f89e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0395", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1b9c4ea8226668b75932ce82f128639de6fa751769afe4a3eae01f429c54bab7", + "s": "0x583827a5c6e40187f53d8e7114635390024148306cb37b1281a03a1dc70b26ce", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0396", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1076eae29ba00b477a97d501a53fb6a068ea52673d78019f7d2968436dedda57", + "s": "0x6ec109221d1ed503c30aa2b99f11110fcabe6b89559f7e9cf341f47a10c623d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0397", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x98325fb7419a550d879b1a0e2b442443470eeb1099d579b70b1bad2896b774e0", + "s": "0x08a965910ba076ecb55e8b25dd0202504d9beea6eadb0f0e2af491e499fa8946", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0398", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xaaefcc2de5952d4456e847ebb9a14b7afb3085cf04b6e3f5f1ef918e95d2f8e6", + "s": "0x115b1d43afa194c32c3f60612e8d1580e2e9eebd26d6366052a975874635a7c6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0399", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe1801d92679e9da35e671bc98e04addaabc38f194001b25cab6d3d5afd55881a", + "s": "0x619b5da2830c00c72df7c1695fa2b4ce790b1bc5e7bc40afafcea23a62970060", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x039a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x68eb53ea1dbd916a796d552914e3cb7f8a3e93584c0a25baa2a521681ce7806a", + "s": "0x3b94a70d0e6396b6a047266ca203c26e72e869c068424398f1a195b5b3b25be7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x039b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1e08d0de89813477c4d3dee412e5e392ffd6436a7c85b221f095e43fad5936d3", + "s": "0x1b22b33987c1340e5bff7b0c383ac06dbf833c9c0d801aae8ebe09d4839a9acf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x039c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x227cbfed9206a7e19a675e7968ab2731103b30a8ee02f8b71f821e40caf3cc08", + "s": "0x355e85330da01223cb65521fd6edf5c9eac05f244722242c4871ea58be8425a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x039d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6c5920a04004ef5ed045de184e859ba593d6ff255ca62c747caaca69445e0e", + "s": "0x6a6fa4e46d6b7d2840ee202885721fcb26071f8bfbcd19f81ead792d7e72943f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x039e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd588cb780f47a3bd4babb093ce099034f9d9b8eed4738fbdd14650b036e3659b", + "s": "0x080223f0bab5fdca3e7c0357b3e4c86d030ff911ed32cc6e14d092ac1fdee663", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x039f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb3382d477ad00be8e2f251eccfb12d3a6a23a7d0d100f308507c80e23d1adc50", + "s": "0x2cb0b430ae33e724c25bdad9f387a0e7c3eea912f93ec33384cb2f728dd3d6ef", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03a0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9d9cb4e4f2741f1b7c7d917813031ab0f49a3b546778884847ab54279b6378e8", + "s": "0x7e5b26f6fd497d154031095395157d5cd1b44b51a326d429297b2431d9ddfa73", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03a1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe02fe63585c5df106673d3529d0f1a541491bc54c3f7deaaf1d6731f385755c0", + "s": "0x1c37653bce0b1ea0a35819d4d8a518cf7eaf7b5eebd4d7770b88c1555501cdb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03a2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcc528dd5a0725c9c93bdff07dd4a7911c107f6c7bf4a65704072b7361a9331f3", + "s": "0x1e798f43469df8da8b36687ca2866f8bf492283b8772184f19da42aec7ae3693", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03a3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6985eefe1076936c78c3b388f2657444f510f4a1665bd64d1bcd0c94f440592a", + "s": "0x1ee6830914fef83ca991845a0910078da5bca5911cfe3f951145e16ede487d1c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03a4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbd1c02fb1fb09c052a762576443d7ada196539cfdd770f5795464b259869d1cf", + "s": "0x78d7111927e9adb81706ee0acc2d85ed332ae3e57cbb5afc89f80edead21f53d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03a5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x72d613af58b5a5ce38836f416bccf7d5765d6d90af6d868e319439e336387556", + "s": "0x46f1dde03adb6d400183fb8212ab530a18e2a0a1c89b2dc3ea51aed4d28c1744", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03a6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x701d78f1b7023c8f3400d6d7aa65240d0fff7fe68a7dd1f4944f1e45ba896959", + "s": "0x10efa10c1b7f598ccf11c21b72a266b8f295b64d12ce56474925c89096e6305e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03a7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x41a6c9b9e841c37afcf7c318d9b941bc563d48ed11f39eb9da48f5b4e7d9ff36", + "s": "0x7239d79b639f044501b214c9dfb15e2f0631ccf82987e53c7484037502d93b71", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03a8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9c393d00457684d6e886b81d7633e414443b2a6bac3160b74bc2f923f7440a94", + "s": "0x0ffbd50345093a17ceab1c2ba700a957b0bdc05434499e3353ce3d9659ce3287", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03a9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1715168cea8ca29d7100d4c65e6780a5470fea6f56eef194fd7f4e3fdfc4d537", + "s": "0x47d6872913806ddb8ef627ab3770197479488117cc0b467218328ee9cc768173", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03aa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeb719b998d977e83ac8491871dd4b61d7860d7245523bfffa0b7e8d7d0938377", + "s": "0x555b5fbb0ffd1b56f2b66ec86ad926b9ca7c2c634ace78f3eddb89aaef7bd75d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ab", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x06a19685c9e9cca1f13d2461c956fcd903df0a765662ba21984139bb4c9fc7f5", + "s": "0x3f4675d26d1cd0025ef09b290f328b20f775e6290275ed59ecafe9ee98eee091", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ac", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe3f68607598d9efecadff0064c4f5cdabdec66a03f719488cb25986e96c65d8a", + "s": "0x289b30be02b16b32db2bfec07c810ffa8a82f37940a5de1e991c8464798acde2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ad", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x104ec351cfbabb42fc190b7339cd56197c191a051300c308e00b5e2e98d3991a", + "s": "0x559742638777927284817c7c7c89fca5952a2da753f7c70c288a4bf588cca3ac", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ae", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x239789ff943b0ab18952484d66d1850c0d5e5f72d0e205eac72981d6d5bb9ba8", + "s": "0x574b61c803ef00eb8b5ecb46f65bba646853fd8221e2b43906f9e3eb02bfdda8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03af", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x27986cc2465c907cdbe47ad04b4b3c1c8579388fc51e06291e2df32ba8c47589", + "s": "0x535a1ee0445c03399073a396bd27ea78c7f305e0f4c1d4575c14be171930324a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03b0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x98df876881eeb804886d2688df1133b36acfb19c2de1dbf86414d90ab656535a", + "s": "0x6b6c57385e25a7287b4fce8fab6822f7a9d43f27317fca7430f5eb97b6b74ed8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03b1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x668f20d5e49731cddc798d8cbb3c66942898b72bee20378f5781287e2d917e05", + "s": "0x44b9505d8bcadb774f057f35db800641530a53bae47f2fade142523a889b46da", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03b2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x026fb0df57b50ca14842f1b819115d0ffc4e0b0cb5ef4b9a533e3d32a70a92ba", + "s": "0x2b476cdc4b9ac2e10d2fcd5dfee04cb5fe53a10bccba856b5f464ea0e86ebd4f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03b3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xeadbd7df406ac5cb47270379408fcfdef1b63a5b0afba1e20dda3ac49907b417", + "s": "0x1e1bd46959ac309e55e451de428919dbcc82a6b5743d78e25d189a5b201c20c5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03b4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa2e9002980b5ec8676f724ba8b038ebd17d00ca147be73d48b0a5f463b5a41f8", + "s": "0x19e29f276746a52eaad0bbf1616d671d3bce8cec9273fcced348783d1f445c37", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03b5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5b63261c7996cee0ff27b2c56373db9f60ec7bd81fd82cb56d981aa10ea40442", + "s": "0x54d4930787bfbaf402a0ea8542e4fef36e5d7c29cc9a4601273e03e450fe11fe", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03b6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xea5f8096249c4f5ef1a787c44d2f40e6b6c8d98b2bc95c4e53771a3522de8e6c", + "s": "0x37bbfdf3d5cc583a1fa92db5ae25bd0c40c96f379c9879be83edde13d8647cd5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03b7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4d3c61c3a7d2bba751217ccf22834bf81add13726de93710fe054e690189a052", + "s": "0x793dcb95545e9d756bbe7db439a78606d5b6797a9aea324e9000ec6df319547b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03b8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7988a8d13d48d2059ce5174cea2dd8d6d2f4150e275659a0a154008bc143c3e8", + "s": "0x5d5d1d0a4c8edb5b9881f7239d4abc14daeb30a3cf720ea2ae2406c5a837e272", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03b9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x194270394b93d0e4225673abc283848dcde7b6edc9554b93ed0ab351f61694f3", + "s": "0x4c6dcda990dc0e8a8a883cf6633ac36e16f3ac3eb0bedd1ec11a2b3247fdbde5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ba", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x29f982473489c6849727fc9bd4c1f3923d5d7145f069347789e03b2e7d9438d4", + "s": "0x7ebbddbb929b4e7e294dc9afde4cecea2d2d398c8b39e29a06760bf241328446", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03bb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7dbf74e1841dfdf68b629781201e0369917e2aaecb274861a3aaedf4083ba7f9", + "s": "0x6fc25f85dd0a432f925069c2c403035890af4ef0eda8eb8e3e4d19ff13fb05b8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03bc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xde2fb76a2335ce042007a273bcc8807f009e70b13f805f1bd9dcda3cbca06d8c", + "s": "0x12e3f7a22104f3e17d8bf19bfe69393d6a77b65e5c5c0e6bbd9da23c76daf50a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03bd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcf32d3267233bb64f4acd35d289acbb2432229102590d38930142169dc9e2c50", + "s": "0x571ab5b0febcb01cdead3bdef0068c5bed79a73824ba3056c6815e88fe92e30f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03be", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe1c627c7b0f5e1d72f850aea36d4be7f02203faecd759f5c42960ce9dc0a0e32", + "s": "0x4aff87adee896b730cc15190acfcdb855ac17b4d5b3e8eb36858a90fbc1c96a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03bf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7201ecb26f5317a01ab3718abfd0f7133325bab39d5b696a7fb93e51fb3205b2", + "s": "0x6f740bccee361e68eb949b706a95d40988f755c661fe27383998594b5c9a1f41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03c0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x31bccc5963795eea499f35709bea61080c3e0d7dccbbf98cfc0d769433da53fd", + "s": "0x1b4c0453b0b2b438bbe495c2432ee91d437ebe965aa3aca7ca28f8f4284b5030", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03c1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8f0b2856efff5241fa1c3aaa8d9164fe4b45f96fb1584fc3aad762fdde7aff7b", + "s": "0x648d93050c001cae6e0e7feb240bb1af22eafe65938d85da9cfb7f1f88556ad0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03c2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x83522f2d2ba48444f20a3e0f24b3b55ccb05cc726d9627b1807b5e6a8b2481d8", + "s": "0x0a9035ddbd2826c1b118142bc014a8e99464b02f42d208c00fe9b31d8e4f4aea", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03c3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x84fc6fc7be168b6419ce7b23c1e975ed793addad41207014cf4f420881419c74", + "s": "0x2ea1f8e28ef177d4cb693b05865d95942265cdf9f9246860d271eaacfe34bcec", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03c4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x165b4816c0b29bf882144e28ee54838714c44cf2489254b787757a3f6f2d77e1", + "s": "0x1f6d22c09d1ef42db621efba63ce49e70f5ce250c4a1d963610ba4921fc30255", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03c5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc0ef78da4bf73429958644c3774bfccb55316cb369fa0dc80da93305c011b169", + "s": "0x358fd049ad5b3dd9aa605215df2ade31c7132e01a794837e3874ff1eab224304", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03c6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x253170ec8261ba4ff328c244dee2325972ed2744107ece15aa5e73af6cd8ba11", + "s": "0x033141449aee68fc8d9fb1a03f7119f945478977549ee684b78db26811823459", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03c7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x99cb0cca593f0dbf29d559d94a0f200bcb63ba247d3fc749eda90c4a7b136a8c", + "s": "0x50ed1f3cc178d3a6850cc9839a2ca81243c4233d666363521f75c3b5503d4bf4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03c8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xaecd0116f8bf5c437868ecd35171204eaeca94551e07e5d5ce4c75e57a34a379", + "s": "0x388bec8de2a8b6c30cfc0014362bd2be336d3e09e4cb8a04659f21da445ca675", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03c9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeb3f592c1e49ce2759bc0ac2a715f60cc2fc247708ed7c1cd3deace617e56b8e", + "s": "0x2a974e684306f1c0ff89cf3debb1cfcf1c7ecc9589acd6819c2f999f00be8068", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ca", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x73b72f997a20959fbc409c46ecaa32643f661c879345eb6c891bd55b4a666015", + "s": "0x3cf356e806a277005e1bce0562ed2b84bb9737fbdb85e7b09c200a39ceb54df3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03cb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xabf9e2104fa524d69672f8583fd25eecd817bdee78769d955953f8fea49da3c2", + "s": "0x18623483151e335a07d13c7726a0881cea9ddd9dd42c679ef46a91d67171ec5f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03cc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4e5c714dc3715646efa88c788a16da5840d563bffe96f8365323905f28b33ecc", + "s": "0x4739fc9252412a8da8ba5d485c48a9f99115d6fef03a7cee308c68a46ecd2083", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03cd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4c6c14be20fbb01a2de4ef2521523248207f0ae86b92bab37f8859b8309b3000", + "s": "0x34ecb762d61e860230f0f6aeca8888c42804a7ec5feb6cca6dd7aba59cd0c786", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ce", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x90ae026e14be1a2a806782305eb7ca9c1e7216b2f40334724999dbefb7cbdd7b", + "s": "0x44bf624b6b28a38d1ea84f858f5b758016fe3b46e456f37699d0f058c039b84e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03cf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc9a336b2f37dc8fd193aa7381f13922f2d5d070b9bbf0e6d6ce9cf6ed93df827", + "s": "0x04000bdbd5ec44bd0a056ae386503a431b8af133692294539074d96f076032e5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03d0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x65af49f5e1dc049a419d044f76b92cb33c363a10bb25568cc8e8404a7aa800f5", + "s": "0x74d8449465e87364f5ab83b3fe77f53a95bc028c64dc0548f336ff1c3a86ca06", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03d1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8518b86f3dd99c7b04c275923d62ee117142828b881fd7455f68212d469b876a", + "s": "0x331135126f9e3ad93c8c5b42dcf7a0c0a9895807c13681eabfbc147d2b0122af", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03d2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe3fbc7669b2f601ee261644acc3e788da66a697cfa54538bab50782d94c30042", + "s": "0x4032b44d66f2470dc1972ddd789f7a7fd710d66a78f2987c56b3e3e05c8a7904", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03d3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2b33ed97cee0dffcf69e83f61dd20eb9b597e9eb4a69a379a34dd0e9edfd72d2", + "s": "0x53f30c94d8fd5e8bed0e7b4cd865a939f0063184dc6ebdd70e01b4f44c277979", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03d4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x43e0aaddcb03e14e7bdc608821cdd08762aac2256ad430094cd6cc2e43513ed3", + "s": "0x397e475e3a4a66b33d5fd23c32c895b6194405123f93697368942f8af1a40d10", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03d5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1c979f15af3ad5b0eec126e050437c53beb1c6519f36e64072a0a742aa783e59", + "s": "0x5e5398cd7119ec46cb06127824ffa28d3f87ca39bc9348611886fbe5466eb1e3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03d6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa7f3cefca7ca56a3e3893b2672faeb901d415c641eae67ab512f9eeba019b67a", + "s": "0x5b89586abf791f2f5c2fb6b8deffc46610a971a16524139cd3d23bf1b5c5174e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03d7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5f9a4dfdfa301d86b66f05e387e84021867efea07f5f56051fc6c90cef8305af", + "s": "0x4b7a2617b69a46f7164cffa3fc78321f7e91bba4bb2d375b07ff3c4ca4738093", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03d8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2c81670dd687c860a1c946fa93c87d33d8b98958172edb0b49e8f5e97d85297b", + "s": "0x522dbfd6a6d8c1759b60f06854a3ca6d5bedf76b683bf79f50890325f10a2fd3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03d9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xddbfb4d12707957bb96c4ade0ecc4815cf44fe8d752f3a9e4428bad775330651", + "s": "0x5ac209d941443c9786729f766dd6ae5484237cc1cf525306d8e7957f75eff153", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03da", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x90349c9333f16207fb76e1c3cf72ef1722fa3e601bff63942f98f98f12ff74bb", + "s": "0x70998e169d7c1690753f1b6726733f41f1283e7c5f6ea6bd7f87b68fb7bd9431", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03db", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x57c9a967942d0a985e263dd00afcd049fe729a2b5e61922de58eac143d114ed3", + "s": "0x5ee50502be8a802164f35e304415937ff00d33a584b1edd19b7ec260899a4460", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03dc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf4ffeb3a0aa04ed70cb75899d0da9d16caf30989f11cb8299e666f7764bdac04", + "s": "0x59ec3487e9ffa9d6b20c80ca4e0d6a01f8eb55fbcc53c04732983a23dde7ff21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03dd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xae241993216460fe0bfaa3342ea7214439ed914d44ccb18540abb8bb421b32fb", + "s": "0x49ea9f06c492ed09899694fb3ee8a0f0849e027e97b2fad479ea183f094cd730", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03de", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x26fa1a5f861066bdf3c4bb471c7ad4e670d3c1b4ef29df959b0364b06becca26", + "s": "0x5cda18e2dd0b892bf6d72cb92e1d110cf5a94178b668109bb227ae5e9337fd85", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03df", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9e3140350627ca0fa87ee199a45d291c0081740f5382ce4c8692a7e002c886e0", + "s": "0x498a26a0cf9e9eaa4d694b0fb1b9104d915ae96e0accc6a797a7ec6dd65b5ed8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03e0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6e7b99786ce0251f967f67e6bebe7960478a7d1c733716742eed201d9337ae48", + "s": "0x1923a45519481c8c36f569e50efe9c5814a27604121848169dde47630f741c18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03e1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8f843aeda2958e7e4143d187968edbb293ab0fd616605c62f8fdf4163ef4191f", + "s": "0x0d0bc6203fd051ecbdd5f4d4c3dca9769bd531a3f397e931416e478a525f3cf4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03e2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcbe6aac92db30b2f25923f35d32c1ad290dc6d8b92adffe7a2a4c5e0052539c8", + "s": "0x41c17a20929b500dea0c691a372d212e216877deec15bc52ae65c2a4d6882cd2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03e3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x665aa270ab15b467fa429999a9a256bbabaceafc614e93195da7e9a680f236c1", + "s": "0x632c727462d78181d0769c5fcbd128408cf3908167a01381b4338887dcb469ba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03e4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x73ff436ea35def919253eaa52de2798ac4e69b5a3b966b2b024e37cdd4282db8", + "s": "0x092bc98aad0a984ef9f7bbcb6951659c6de9cbf070422f933d99a8a9e133aeb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03e5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x96949201ccd93e477d5a891522cee3ce44356d991befbe5274b2d503b8d1ddef", + "s": "0x478ced0c00ee8fd09ac9d79c709c2737a673ab8cdcf219620dcd525e3ca34122", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03e6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa3bee9fad2ca19eaaf16c6be2bb3f5893b9f2608dd1f3da470baddf47c3edbbd", + "s": "0x26a3f3d826e52bbee44aa83681e9ee990477b7e7b10c36a87e615fe85ab8f0b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03e7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xba0274738a5298ff614af004f472e200cc1aba73fd10d2cda923f8c5147ac5e9", + "s": "0x79c451363bc8af428f43d43ebebf67873fe06240de7045dd4dcc64b2a682a714", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03e8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xca0ee5d093c232264d0b23ab100aefbd1a50f56dfc248fbdcf57c7c8d3c53a10", + "s": "0x09300167c9ca40ee33f38aaefe37c362f069edee10b314905438024843bf4c76", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03e9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc4df028dfe9506ff1406632cd5260de2762ef95b8b17e28c44285799dadf7c77", + "s": "0x546e088de1636b228d099d09423e62b2d6e06f62d7890863430d5d83d686959d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ea", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe353cc831f9829fa746a1ff153d4991e89618690f56d16d6b50d3040abeb9c9d", + "s": "0x6d44a51197d37814810ee0a295d8ccef81a0e12f1468eb6b43e5496aaf183a56", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03eb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb7eb662613afb9b166d3efde37ac1831de7eb6111c385932193aa3f5103255cc", + "s": "0x5fce21c0f62886f5c71ab7ef35a1a59eb8fd48c573b86972e283a6d1e72ff5f3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ec", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3d49792a68b8b1dbe40cff64290fa23705d7b085883c56f5b4449826cedb7583", + "s": "0x06009978b9a6c918627a0f5105b2f032689b1d9f797ff38a074ceb1258b61272", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ed", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8854a635339056fb80769f229cc4297c583d2388e38eefa13c2584d9181a0f6a", + "s": "0x61d93e9f58fa09958c9ec70a1c725ea32cfd75566a367cee2eb85dbfd0ced438", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ee", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbc73172155e7f92492ad40eed0e9862876afaa1e81b70fd5e6ba235bdc7aa9c5", + "s": "0x733aa777804bcb8f5619e3898d3ba779640923d3a74b62ac4b5456a007d9486b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ef", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xad578e1dc19d85772ea43b46ee5cb1f7fbaa507af68c5b6d9280ef6af1376518", + "s": "0x57d39fcea5af4ae7dbe1b195e7fd51f54adad2a52064afae0cb195950c4f6645", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03f0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa6dafbca589213bb87dca7aff004503ce089495c283d6120793d96564bac8090", + "s": "0x66fb92c13b82ccc5282ce59ea43fc595fce297268bd6fe2e59d7871d9c5a1116", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03f1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeda8cc7ef002dfd289ccc2bfa04f4e336a41ea9a5eb1eebffe2acf81b6e298e8", + "s": "0x7551441504391a9181210bc0dee8dd95f1d45625c376957749616adb3f0f424f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03f2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3354a96c1bf5a23be895fea33c5c2bee53ac5083d667c875244594d8ae7e1d7c", + "s": "0x3ec5dc774eaa96278be0b0c8f54c1cbc9514e9f0c5266c0958f1c4693030dd99", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03f3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd4886203c3454143aea54d63670f5ac60a8e05f740a8d5c9aeb250f948e841d8", + "s": "0x67c309dc654fe6d81055cae02526a0eca32d8d4da574cb6c9835ff238a3bc2ae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03f4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1986f529194df80705148282de7b82fe1b35213c4347a9de2111daf4d533dbdc", + "s": "0x73154b519b8b4a22e5018fd7e6c0180bdb1ce6e4ee5c4569c7d2f1cd89f791c4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03f5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8a0b65255f6a414e2def13e14fdb4e463b653ef9aab4fd6e3ba09fabe269f017", + "s": "0x19fa295650d72559a6e69442fc97c6107fc610010f214ea5f6dc7fb370338b80", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03f6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7f12aac702cb2c5b0cf302891ac0554a0500b144a17df7b9522a9f5baf55aa3d", + "s": "0x7500f48a2743a7f85ecf06143f66f3f59b189ff2e55a751e923b0a3d782ec628", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03f7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5305619350ec6d2ee9df49ab452bb6112e9b191c4da281f483905f6bce20edf1", + "s": "0x03f77cbc3d6d02ad9d2f7a0421bb9f61096eb1f004dc8825b81ce7c2f3f9d82c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03f8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb17e95e03ee46a81ea491e7f8461b74514c859de4925a7e044f39ea456541bad", + "s": "0x674efa931297e21377e835daef9053325fa7de575067cc1f26617d82352de78f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03f9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x182006e7df41edfd06ca882eedf59bb97e7f99879a2e38446efac7b9bca12cd5", + "s": "0x05a1e643dce4e7e3dfbfeff8db020f9483a0305a21eacb6202069a391fd3ff55", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03fa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb006fb1a8e4076d828d508430bc54c17ccf797ffd5fa11e1034b23c11581b519", + "s": "0x059986a224689584ba022d8ff9e14c8665d0dcae7cbec7bb08fe2e2322d239b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03fb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x445626e120c605faa5b2fbd877b76e3ec0a8b4c50488d53fda22a1b4c87820ca", + "s": "0x6ed6b56cba3ae4051344bebaef23dcab12483d10619102d86a1f37d39e081200", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03fc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdf7213314630b947ef30f5eff3fa016b45b5a3599b76193a2b910a200ff8ac8e", + "s": "0x7a89c11006115d2cddd79adcbd8f1fd05ab83804d5e4500d0fd0458da38fe68f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03fd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x976954719f17f0e0026b4b02b71a8919387e377fb09990dcb347e9bebf93b312", + "s": "0x7bc9450b59221111985580cd8e058e43dd836825a816994f179639f714bffd42", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03fe", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8eec2ff888c3e478a480d257169047048b186488c82b25d78ea13c963de5f900", + "s": "0x4f46a8170c7a70b6cd2193db068ad8b24c2c76755d0ac101769bf0913ea75615", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x03ff", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x76eb106e5a7fa9ca27adbdb62859859f15bba4e97485cec74d8cb159ef5102fb", + "s": "0x1458c77aedc4b8a8b2c2ae7f2e124aa8237a4abc8f710cf92244f98234c613f0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0400", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x66b7935e08bd51e327461d9edcbc774b740725d617c10e27c0b30e7061f1e963", + "s": "0x41087e83cea215bf25d10e168ed643d991ef7bb545dee1b2c3673ba3ec13a135", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0401", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfd81b8143ac9ecee162e031020f28f3a018523686169fa424f1afebcf380080a", + "s": "0x59f2d219d323dd15197cb7b0c461cd1dbabf091b76e6cff5eb45d0a96db39e9a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0402", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5be10392633b9f1a86b5005811c10e3ecb4f55d833892b9ee7d6c1a1e9d5e38f", + "s": "0x07b1ffb0f3d9aa2680b277fe2a083fa1e086da5588daaf5204b8662dee925d0b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0403", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xea2b51596cad5ddbabbfb971e35905ce006fe04a6c2bd2e30bd82a1c1cad62da", + "s": "0x6e0675e4722ee51fdeec1e075c9a1f0ab6dd3cfb853a1d24d8c3ba563a7950df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0404", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1d1173939181de868baa9be2469f3b62b1bc9a31dd14b4ab95764f83102982ce", + "s": "0x0e696d1da4c595b1e387558df996be85f156eb61774f50ed279c74168ddc31fd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0405", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcc3a49969fc7e1d48f4904d5005c7f78f32a09df835c0d6505ffd19b320474b3", + "s": "0x2e77eab8a79d025876e85d1fc1e19ae03d7c140d57ece0d96c37cc2f0bd78902", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0406", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd8f6eb85ed3181559ed5373b61d559153751b80a15a8ae623bea474990c72ebd", + "s": "0x2d2166b0787980f2aeeefd2eaa7f221e19fe3a97b0c88086fa638194f2dc92ce", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0407", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x13801a19df0370fa3ba98f0fa2555f1db41cf2dfc5dddbd33488e250bfa666aa", + "s": "0x3749e3a5756051d8c8c0bbd267202bcbc209e0c5ebe101f8e72b09ba2aec601c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0408", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x08740eb0b33761d882ad55ef726477f8edf53dcfe757a3aacf38469d78fcc47f", + "s": "0x2e8059011340cc5c9d178610b39e9cb4547bb00174e59340cd5d992301de6a7f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0409", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x06e37582ecc8d021ac343523513e534fc87efa3c5128597a825ce313c22ebb12", + "s": "0x0c79133f0382dfda37df46961fae1d179294b46f706d96eb9c247b4f7b8abbff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x040a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa146f2be5c60e7ea2e585327dbc37e25075da3c3919752f5fb8411d9c2be0e53", + "s": "0x5bd7f9a0f079d07820fbf9f8d51b5bec295749dcbadd544ffa0f5754e5dd5279", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x040b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5493e48aec9a01f8a88f84d8454ab5b76d664218283ef014846c8a7c5e28546d", + "s": "0x1727edfa696503696e41dfeb73433bf76f6a26c063e6d240cfba916242bc10db", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x040c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe6e0bcd73f26c0249a5e75fe78cf05143a6178e2008753793030dd91da02dfe1", + "s": "0x366674fa484c64cf18f709e06c66422785bbeeb8f228ed7b738982bbe9518b2c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x040d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x474d57b9ba78c736e3bc7812332ba3596f8ca1210f5879be1223271431be918a", + "s": "0x224446c56a04a3ed2f4aecf0ab72707104b16d82516c0d7858a7109d160b3249", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x040e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4a11af1c549ec772da7aff3ba54d091337272810e66f76e6786bdb2814fa7a84", + "s": "0x7e1993d4e757613b648cd780ca317f3e6a9f1458c396dff9cdc4cf2b2988504e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x040f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x462636e56b8f95c51d8e064fbd6183199c7fb2ace73e9b932ced761527b35e7b", + "s": "0x3cc152593d4eb937b27e616438c887f659f01e72ddce63ab2692d3d1e459376e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0410", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb0986871ac94e85f10b52cc4244177a25964298abe817a62a99616e8a4283c56", + "s": "0x719ac4ea073aff3729ca1ec933f4018d36b424167a447c7d61d5b3ce81ac16a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0411", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd0f1dad156fd4812e98aa1d3a699e000addfabeac07f3df48ed059567b91ef91", + "s": "0xd5bb6b7f819e411a895e79a1dd691fd79ba62a3d6bf21586f09a0565e6c3a2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0412", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x26e4ae85e507d2cbed6fff85be41e05bdd7887e2d2375973fed77576d4862840", + "s": "0x59645343cda2e66f5b2436190291980164bbd81ef4c1add0057b2b29b0fb5b40", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0413", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf38d78e7ad9a0096be3793490824fb66f5e6439c4e3699be5ba20be4f63b615c", + "s": "0x376d21370e7cff621714188ea8d4623a712c56f6cb10ac16bfe52c52354fcc24", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0414", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd40f615cc9014cf29bc182c6d33ad53c24a18567903ecb21ef69c5329df87ea9", + "s": "0x5e1baafec7299b164d0529741caf056128604135be1902f97b1cfbe2c976ff9d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0415", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe62b5c060425e2710c6baf5b4a2ffbd4ef799afd4c7ff1db08d5382563412760", + "s": "0x7136d616da12f8dae2228d0ef022985f30798564a949d508ccfa010d5466141e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0416", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x832d2d414e867657216485019230445dd94f401188bc7d9dd730ab1bbcff3586", + "s": "0x1bf62105c8bce1651af77cf66bc28a9d07d19901203253c1655f4a59102a499e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0417", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x39749ac989717407ec83f61a575aa22663829b44f8cc82d8f140570dc3eee8d2", + "s": "0x73189b91f55654f7ce3028ddc445b336aabf4725df526c70fcc138dfbf4d2c7b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0418", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb42569e54fd99b720abcebf72212501e77ed81044e90186ef5cb0e5030b8a95d", + "s": "0x285c2b268deb7a1220377b307e43b2031d7504de9aabc720bf09943c2cc52d29", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0419", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x050a34a5e5c251a2f931a47c1ad35aa95d9428868c64e1391ca692f5be499f25", + "s": "0x4d1099b04d3d3f089f443d546d4e78c4f67466a3b3dbeaeaf5b684015513a255", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x041a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7a41ba7d7d2741eca2a63a3aa0e07cfa177a5a49f3aeb84ee7e41859df4daee4", + "s": "0x4580304d7c818deaae1fced0e5d1acc5ec480228c4fee08382a7653dd50252ea", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x041b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6870ca8533038b71e1aa27a38125e5c5d07feff6e1dce24a1f1e357c2cca74ca", + "s": "0x52be9fa1c74e3152df7a48103d9aa2170389aaed10b2e903ebe1e7ad60c37aa7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x041c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfb2069b0af6e58b34c9cd61ec88f765105c3b3c3b250a14c24ab113fd6ad8423", + "s": "0x48c1e3f793bc7a4ae2d5caa5878ee42a7c1c102b3dbc0179d56cd3877e3c07ba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x041d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4f141f6fb368255056e5646d5d1a80a69523b0b9bb0e88a5ddc0d4e1b1b5562d", + "s": "0x648d2ace1b378bc7c1e1d6a32c8fa1605cb3f7a3e9018a1bd16e14be60da6b99", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x041e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfc4d03165f2aba2d9ccfb1f60435b246028d8f0c2fb8bd8e62de557d84664897", + "s": "0x7897ba7dd6d0df6778e57baad1dccf3ea6437145903abd26565acc75f56690e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x041f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc0bf71961c671e0e613b72e78341d9644e4b75bb5fa566d39923a45df2d066a9", + "s": "0x394bb46d89ed2c8bdc9f0877a2b4a2ef965c35ec0abcc220696ae01306f69aeb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0420", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9184d16a338afd247d6c03dba68d78a05b259fa7d23def4892279cbd9a457cab", + "s": "0x6e2059a343aa188523b532b6ae51d32e7fc16c5fdf5321dee506b65298393f6f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0421", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x219e5d7ef2893671bbc3617fb48b1b33f2c008f8c5aef0847636c2d19d307d81", + "s": "0x7093dc466743a5dd98509ae27abf4bbc563d4d99f269749b0b4577b55d017f21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0422", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5be968d84414ad32eaba311de5c6a3c39f3d24cbac5dc57359de976f4b51b887", + "s": "0x34f21c4fc2d740a5d7d53f686da26823cbd6ae9dca1c27ae4899273dca4ecad7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0423", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x850fee46a01188815c356f47e8223cab207801c3f50fee5f51618e73a6ba1c52", + "s": "0x630f91caa8bb60a4089b1e558f5d1d5b7e634731cd5116bd876aa44157f7ad63", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0424", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xccc9250ee0c8bd457bb01f22ef195f043e990ab228f9c08ab701dbbe48fae572", + "s": "0x0618dff62570a9a859408cab924f8f05d87b070e1b268fac6c33062163e27600", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0425", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb841be541f5342545421922ec02f137d41250943b1e9e475aac4434369a859ff", + "s": "0x4ec3931b38c6093ded96cc649856535ede36e1478422197f105270ba812440f8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0426", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x58e85c9262d44c7cde0bde6446550677cc6d00c80e277d5ca1e66667493a32d2", + "s": "0x04d132b86877d5884c93703f14f033422619478562e67ad462d2d0f06bccb1ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0427", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xda317b121cce2fed1015659267be053e17570cbd827f785131ef49b43fe5bae0", + "s": "0x7c9ea09d920bc429908d1d6886b2e9e8e7815d0c0f9ffad5fbd39d98571b8d8c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0428", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x553e57482c0efd570bd119ed03e75adbb33cb2ffe151710e11fbbb86fabaa454", + "s": "0x326c2f0b420044b6bbf95a4da71387994f96e25c9da30d8720853183100a9e25", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0429", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcf646a8865b7bccc71bc1c71ecee405217ad1b9304275eaacbdc1e7e2609039c", + "s": "0x37ea131399f105544ad925edb81b9b21646e55ed48c25790c07371f57d5a5efe", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x042a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf1bf32a0571f089db7138ab3c1978bceacd79e4d8557853370f782af8f3ebe9e", + "s": "0x5f6b57039491f279baff4af8fc3cc149ede235efd14c5bb4439b26c3acfab1f8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x042b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x03c871d01046860a577017067faa0d57d2143679d179f6d24921f925400cbc27", + "s": "0x3ef060e4cab56f6f3ff786f2b961afc93f6f1b7b6ca673a8d099d5e61f66f08a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x042c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x555f5ee1543f6e3171f85f9e854f5d51e17956aa4b8723d443662dbcb6ff54ba", + "s": "0x6be946bbf7b8766b754d39c3d8795fc889b4728f5579989df7a602eba839e61c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x042d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xafd979a240e0cec76d6e33d705d40a68160392cf46880275798a5c601d44261b", + "s": "0x72f46c2743dac2da6b169834c38e361f261b83ee85461a78ad0875f240561eee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x042e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7622b29040b2de6282f511b7e6dc2f21b254f0f8f2e9f5340800b597426b155f", + "s": "0x711418d975d5d7c1b9a99f92b91a664a9a5986bfa26d8b5c52031dc1b1db3476", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x042f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x89caec0c783fb413bbf5097e8fba20ee15614c04496f44e79da84395a8717cb8", + "s": "0x295f7fba781208f9f68d92917a7f6e1a18db04c48d82200f18c300c8a70bb655", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0430", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x310f57bf34668ab8cb803e9d8037e931714fcdac5c1204530ebc2ba4d4f59193", + "s": "0x63cb2a18e0bae9b1ba0b49086ae9700dace21bacf09192fdc8b0a76da010ab46", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0431", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb6ae36267c243ab190c1d91b1f08abeb242f37121d5569a6e07508e8f64e3dac", + "s": "0x231c6cb018521d27d725aed126ff398bdc297d7e758201c83ce8fe280259c402", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0432", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf65d8fc08d9a38412ca4f02823477d150c264790f1da650c548950a050887b7b", + "s": "0x189e594c3e447725f4c0ada87ce1aa09936e0e06243fea2af9a7a7d9eaf222bd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0433", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4840846964d167647ce817aebf3e9f4ed9f634792d0af20ae7972e38eb2ac2df", + "s": "0x170b171c48c83ca87d27dd9aacf2a47c57a3a100bfc57fae4d589f0f24d930fa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0434", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0dd2b0e64a42c2dcc30dd7869750ab5ee6a23be1f3b34bf24abddb2d3531c823", + "s": "0x7a9f7cbde05f099139834cb2900c57e13d740c02d71a0d79dd80a71447720d10", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0435", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x62084f7fa81f245caf7ea1df45e2286132805427e5e798d4d2b9a0644873ab4d", + "s": "0x5245fcb272942795abc10fc677618c51ed6614bf297caa15a567d03083619d73", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0436", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xec151c424220a3258b379e656dacb6f486a854910c378c32a11f43135037f68d", + "s": "0x541befd36d1654022715b66ba5b2e13ad6dd0257a04ff278a32a5b36650ffc9d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0437", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xeb18063ebb451f9385f0669612726031823ded651b127496974a69a409da015f", + "s": "0x4ee4a8bc1e1f69802597e92d4a0fd4d6cc2826b50c7c30b2d2b4163853b266de", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0438", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x27b95f7be167773798111c20db098fa1872b99ff7e2db9aa006821fe763b8133", + "s": "0x29567ddef33aae07f1808ed8a77d476188f9d46ea9f0a5e0cd64ad72065c2a24", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0439", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf58a1e802d9b5aef08dc0e5215da460d8497bfa70f58d9fb2e56f0660115502e", + "s": "0x26b4e5ba64a401221da397736cb7d6699e5aaf7cf5e094b8492941e9dd31a30f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x043a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x240807dff3066162b4d3f7f1b603703a77640e0d019e75f3c44bac64becad051", + "s": "0x4e3c7118c5545bde2914b4f0550f92d4a1ef609c4e38ffca1f501373cc59093f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x043b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x888a37ed98e16d28b3a9e33c5ee02d92546557373da5d9b2f721a987824d384c", + "s": "0x0e9592b6f07048a841b849faa3b9710366c5e237f4aa7e1dcdcf94e6ca1ca551", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x043c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1cbbb2a0609d9a72d69e8685581e6d3ec59045b2fecf6d8f773760c2d55d2386", + "s": "0x20a7508d05bf526f47a77e9a2520835e59292e071a37a7aa0ea644d12c6af2fa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x043d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7b11e302bcbc88b1e96b22acab9c609d9714baf0247a1415062814b59bec788f", + "s": "0x59a4a756e2c9f37fc29c7f16a2e47eed2c1014be0b3c8099fbaa8d23b15b7049", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x043e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe1aa81be39aa518c0774ebcd51ac3d89bbb21ee722cb0170c3f9aa15ccf04755", + "s": "0x77dd29286cef916e97b5cb7b0c4f3d8025eb1b6c5212ee9704a287f58da3e2a9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x043f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0cf98e33828396fcffcc923fc859049412905b5fb69bbd4415140bd0471ac95b", + "s": "0x618acc1a8c9fc9a58664294ec1f61e8ec844d0fd7182c292e672f22656c15a9f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0440", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x858caa5e5abc947d0f394cc4a1d4344342acba3c6834496e549104ddcf870697", + "s": "0x7d0f4e6ee074de14ce1cb5b584399ccf1709afb43fefe2ddbe2c5196185e63f0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0441", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9d5dc66f8ce591cb7de0cb53c82dd693df3e434c6fd12e6b857d15424c24b641", + "s": "0x39a05fd30cc35c1418bbd8f6001d4ab15a5f0b811da75f695d516b20862ed107", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0442", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xda897adbec2d630020296ace94124c147fa4b95b883fc4707f5e8064f76f960b", + "s": "0x02b1c8c2d9d0a3800b24c837feb76ee4f069c53dc86d528e16d2f17a2b087db2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0443", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfd3690923875789befd7a9b1011e1b2e5f7233ae8083d85dbafb7561a68bbe2b", + "s": "0x5e0719b2777435e430739a5c021c5cccf9486b2cf7ebf2dda97da6d77dc542fe", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0444", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x68829af0380f266673eba8518afd83b19361b68e96294ec9f1d057c03d35d9ad", + "s": "0x68008308975d303a9691a9c4257bea696909cddf540995cdac78283b719ce876", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0445", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa4c83087203b55c2a7771a354441bbd8523ed2011ca6539b0279a676771b5321", + "s": "0x3d25897c496fda7c9c29c57b6d38faa4d004a0c480f8feaf040b017ea56d6345", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0446", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x84c4f92c627c206a4e2a2bc5a5d9ee5471505927100d3b6eef69b0e208918150", + "s": "0x6a489c43e03d4f88c6f4b2b45226b568411c9677d4a04c7b1b951d532c1dcaa6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0447", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x43fb4bedd8a8c70a1f78591a1b59aeb24fd0cf0d17ffd22e5ef75d5fc129e42a", + "s": "0x22f029edfdcc35585dc436c660818e4674fd627ea44806c0ba92ce2db4981cf8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0448", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5a05b1c00cb9a517d6cfb654c9cedb42ae923a75b4ac8d9608a66517b1264044", + "s": "0x70790562b326f822f4b6dcd7674b3b2b28b4bd25b14e1d94bbfb61b621c0b150", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0449", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x35a7f9ddddbf9cbf43ddb149cd0574b3944be6055c7f6933c879effd2d84bd99", + "s": "0x79675dc53987e2a9a97a60d777d9ff087f1bc64e06c5b67333036c5b6a54bef5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x044a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9bf63c8b4f971bf575c5f05767bf89299698f05ebbebd4fa7b148210570efacf", + "s": "0x63392ce6a4ee54aee4b71f290393dc569ec1d923155b1165f933fc6ad79b3593", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x044b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfa4f2b7b07120a2a1a683982358220a113b49b2ae54ca92107f3e0e0b80dac8f", + "s": "0x2a39217978835b65ae9a06ef29d89c64ee38216b78a0afa206f528dcffd05bcf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x044c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa72f827e76a1eef4b8f0b860116061921c81d4cf63663b04defbac224e306082", + "s": "0x7af74c85f35885dc0e156e803745447462b04b803ec8644634b2f4030b817fb7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x044d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9bef898d79b86d7ecc051d70241c9d103ed2d2df37c8393fede68feb8c3c9e2e", + "s": "0x529433d98e888abe19959355504573c813c3dc1b003bcb51b604020ad9b2779b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x044e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa0a598ab73006bfe94baf791adac912d00648f6e5fb4a7b859d4fcf6ca16e451", + "s": "0x702173f98570acfe15d0860880f4b59f5ce5873732be61e174a6edacd55dd744", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x044f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfb6619242147fffce361c2c4581e9794cde6f51cfac24e6022439c44ee4b9463", + "s": "0x794919f1513f692f28068cf88a2241de38558647b033caec9bbe9f9558360feb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0450", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa58bb95fe14503978860812b486fe97d5cc2fd7623a69f5813e581d2f25b1908", + "s": "0x3022960f82c0de1e77e5fba0ad12f57b416293f7276122d959b228d47c064c92", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0451", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x67708a18f41b5908facab1ebf964ed0d237c60db4aa032a2ca9caf03da68a918", + "s": "0x201f168ba834a69ea737e3f7d965870a92121bbb5b8ee91249c6a9e3b2f7eaeb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0452", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x452f7a4f7b1831edc08f9d1543e515605791be37f27a38a5c0a57fe23d0627de", + "s": "0x5373b75ccdc453d09237017410121a5114685312412ac7c9a8962d6b4b8a7e3b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0453", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xccd1560db75450bd89693ee1cc5ae5e4036b8602f9a1b76fe45be25fc04e7658", + "s": "0x54495eab641ead9f86f02bc747b71a23722b16aa825be08bb8c8772bb6f57e8e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0454", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6dd30bac6ad1a141041851d9c3142c565f13c83900b4ff4463218271c1f72a86", + "s": "0x1e1ca78a16fcc038fcf551c1fd6f4e2b9bab7b2d38157fbcbfad8e3a455a0bd9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0455", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x06fab50c7ddf907f284fe6dd22b590090fc5bd5d8c4d6b32e7892f4b8f467582", + "s": "0x74223087bca4cdc8b820b77d53799ac6cbdbb1ea503b6a5cb679f0f9e1555c04", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0456", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1eacb8659e156c82d1bb009ffade5615ca6933bdff8a303fb09991cced4adeaa", + "s": "0x0fbe527de9bf84c04098fb88ab149a9ce1eb60cb34455aa7acc2546d84d82cca", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0457", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x08c604d7dc1ad46f7360457e2284056595ec440f9e6089003182a72c11eb8d7f", + "s": "0x0aaf8050c6c31c6a6ffcb7ed65d63054d3c527d3f52d068d173b139f112b466b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0458", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x034a5911aa5144d443a38b2dc0317973ed5685ee611e6378c3d3f7122f49cbee", + "s": "0x4ce35e6b72c54d52deee04cdcb4d47ae0196cbb333766e463abab7e215bea512", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0459", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x228ff38b1333f3736e574ae469a25fba11b5a48ac101c88d1c341bf8dabb8c7f", + "s": "0x2d87f3ac9f12a4129325dd6529a4018c18139fed9a03c1ca2eb424b0d26db504", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x045a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x217ffb6b0040c9c4067b0674980399a8e5e344f82067a7668857a989005b330a", + "s": "0x79813762e2db6d0b6e26a4255c8de2532e0468b9b43cecdd4fe0182c72315675", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x045b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3a29ba32761b07c262181dbc9ed333f37862c865302b1fad0ba786c7796cf2ee", + "s": "0x23604271df1dbb85a4de1e7413a6e85bfa7b78f205d11c0731a35b3cb2f32e65", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x045c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5a0ffeb138bedbe34e0882d56457c08bddb4e747b857fc141a1444f149c6df3b", + "s": "0x57089c488bbc970d3d9148534da9edc5f361234705b78022fc4b947327a3e41f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x045d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4159e16e01ab4d8b9c256730fd18587ad72889028fce307acdf54945d94da2ce", + "s": "0x3569c457a08cca17553fb2484b46eacb5462acb44b73bb457c846ba72c1f33f3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x045e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa1a2ca336727735a6407dfc4d3589d7075e110bbe7d3f1f948df82e6b5d66921", + "s": "0x5b96050e8c66262125b109ffdc19f5b4cf557c94a396f2cd653d169cf5c8db28", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x045f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8e6e73fd4ec4d05b42089de6e167ef692ca5fb9ca8fe9a643562dfaeb1594c71", + "s": "0x3a4ed45807dd1a2382543331c59f9b464acdd3ecbe07da9ab87e3749cc8a05fa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0460", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8cf22b6a8a5cd62e01199db9210de7154dc2522334d9ab3b40d288eb578d93ff", + "s": "0x0a8c69c3e40e546cd6b878625d506a1f739c1cdf31e0cd085383e75a88fafb91", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0461", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x050ecb5b82fd588390e6c9fed5010b1593e074d58b5f08d20832ceedd1c61d85", + "s": "0x21f3301cb74aea864643d5578fb855a599b2c7dd022a33652199d2db1ba3e01f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0462", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3d036ea92f207a66d24ea7f3dd0f27fbf7298203c7fc64035a1d2d16bee3963c", + "s": "0x586bd1d0c2f821a553ec742fee76c157d3d142bb5ad6da22cf84ba8f8990f8d3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0463", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x662acb6de18cfb87194b2fc1dd51134715efaaf8d8b227c670f4be94afbf276a", + "s": "0x5f63ac07306eee07856bd8da7321bf3172dcb9a81bebd5a0d92c8dbb7b48a5c8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0464", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe7e6f852b8d44d68207696efb227a0bf7fe29590c5c6f150d4dfde52a2a1045a", + "s": "0x46f7efac8a77647da1149f597f961e2a50350252a7a2e0d52ea6490176b99a53", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0465", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5cf67bc7b57e5e7bdcc4a8b3b8a1d8e8e22ba1d7794907aca13876d0002e5f3d", + "s": "0x0e6767ef641ae807d1243cf070a8bc4bb90197302aaf25de490ab691c91ebb69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0466", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb13d944949a70737d2e9a2df669048bb9c2f258e81e38de13d1abe8897ca9ed4", + "s": "0x2607cf0b4960e02794f90c4630f2847056164029013514913062e8ccbb03fcbd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0467", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x21383765616f89089edf605ae170f625c70ecdc7999987934a775d0514a62e5c", + "s": "0x7e9b0dc1a6fc8a0cef12a0aa95a6c99cb47d96d8ed242b2407d86ff37bd0724c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0468", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8f4d05c5b966bdb724e46274bdcd1b0dfa1965a58c25374dca558e1dc108d80a", + "s": "0x13e84c3b240b040bd305926a0cd20dab081bfe8bb54fec8ec477066ef6134ac7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0469", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6f93b005fdd7360cc6d2b3f2fbfe9717fb74b67a5724718470e56946e4b6629d", + "s": "0x7a0fe52ff2cda0861c0fb77644c72844619d1bd442efadc726e8fb4b0759020f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x046a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe63d38def247d38ab9c75579bc8ff709f124825b5c61abd462c32a3d981c3d74", + "s": "0x034659f1ee9d84e08bd773f990abc776f4cf9396a93c7b607b9cf012ff0be104", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x046b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2992595ac795c76400973968847e7bff55c22159ccdb347ba4fe94c409d3a5ca", + "s": "0x513b3c2cdeb88e9694eb4fb8653a17cd550190ebec639d5f9e2a0eafbc31ff51", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x046c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb237d2d09a1ac902678ea3cb9dc9a23c36ceb35d1098104d7602caeff8df66c2", + "s": "0x18e6be64dc17221f4d7233e767ae909238730645a9b360a3e3e987d7ca057e9d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x046d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5a1ec8b4f0769e1fcb639b2914c69ccbbb41fe393794e3277d3de8d3d3e40793", + "s": "0x4e4dc4427bc572d226f1675c16342bdd379c803fb06794db0c056173279008dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x046e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6968f4d946a9a77c07b9b2a364e636184f36415062ec3e5ad840ee069e1837cb", + "s": "0x77e6443463831981490a31f020a1be23bca097c409528f7a0ee60550703c118b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x046f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdc8c170729ec563ebee711ba6894e8f449c25506e8b58618276cb0e2d12bf5e9", + "s": "0x27ac3a28abaffc8ce10a5f9902d45be326b66ff72b5dd5bfebc19bb12cbc6a1f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0470", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfd922b694048f6e604c91aca4ddc93b153d7c840f7bf33308e591017fe01e13c", + "s": "0x2c0a1bfc044a187038ce7eb54bae961edc0666d8cf5ace4b020897df1198a32c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0471", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x074108b1e3106540b594abb96ec6bb9953f60158f3cc56b541aa0ab2b4d6c62c", + "s": "0x7c0b69c6ac7d467909c36dc61687a3bbedaed0f42ad435cfee00539105f11515", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0472", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x349962295821381e486b15000687b7ad40f59a3eccd13f93938318fd74ece7e5", + "s": "0x5b4abdc991f07de2e264c55d67144cb341326aa7310da97ba53aeaac3ac70b34", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0473", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x542e87e24707e2129793e5024bf43914cab949493b9c506ee83d9bddd2c23d3e", + "s": "0x532f08cb5e51ffcbb7e0d7c7d39a7a4ec3d95bbf086047eb09dfd52f42405950", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0474", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6a3d8d02cbe316e3e38d6cf25550b9b73df5dae45831d964ff9bb28ae7089acf", + "s": "0x5e9a000ce52fd058c97383a0ee0cd64c5212aec90096eb326213acfa52e2d7de", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0475", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd8877e393868e86b78250d54bad01e9c36d361f4dc806acceb98d23eb056fed5", + "s": "0x0f413ba89bf5d0176a165d2f7033c88e756bb1ee13ebe072f48985a38917dff3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0476", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8d5fa69698216906a359130f12dbdea64290c63d812994d9386c62de9e3ddedb", + "s": "0x769c989b0c80cfba2c4487984c6971f1036630ab367979c3f8c23181d4049d5f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0477", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x320e186b62d565a29b720cd189598f549464ac5571207c6867deefdff0576721", + "s": "0x38706fee9b031b465c46957c58166e18ae38a412e11c024850fc6d9b094e68b3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0478", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc13be93e55c91d715d3e969959708e2b86873082f68d8516630f64222378a7e6", + "s": "0x414f0d0b720561f28c41cfcedb3fd828b31ac949e5b6d2c66102d54105fd7e01", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0479", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x27ef123bef8d7b4828c7d06de67cc3ebfefd673392303c6b5319797e40accfa8", + "s": "0x745e8509eddf3662ea5e8b181f246cf04f98ea99efa34f4148ce46648ea1b540", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x047a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5cb48c2dbcdae79ba081f692b01a5cef45f39b3ba34b6f49ca1769e377a4e7a8", + "s": "0x027b9222249a87c54b6d7910dfa1e55f2a5db02e86fb9fba038f7ae316b2d432", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x047b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0e50437d88bd25ecfe67ba14bb09b634df1b53ab231701c4be95db7d0c701aef", + "s": "0x6fe6dc67239695b0cff33051f06a30006a4188a9996fc334b22009086decfc76", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x047c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2a1d570ed74b8729cf2599f55f826ec5a9ae3686c5da87e0df3e90f8b067fbdd", + "s": "0x6bcfc41cac22e9748bc5c3b98a7e2a4b7145e3410a63c7b9b3993ea3309223bd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x047d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x293a0ef942de83b50c8b9693a3d31f5c6cd843079a46d4c42606a2691e605a64", + "s": "0x28397d85531e66eb833cddb35329dac5a6356e9609030c5f8d4ec7c19745fe29", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x047e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7ff4038dda83b4a71f21c0435b50b0993e41b649b0cb37ce9e8b5a63d4d0aadd", + "s": "0x2f9b7a446dd91a50b3b65a6adeb244b794fe7c4d8194d5386f43e96b803677fd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x047f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8d182434300a9977278ee76bcbb2aa0818115a829961d97c5b34bafde4508b54", + "s": "0x3b7ecdcd196d3702b0190788c4893c2b4392c57589dfcb5516e91edcac533d30", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0480", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0655c348412b1bb281ae213749a473871064da8eaeee1d8b285bc23d71fe590f", + "s": "0x4572cfa373d0e7bad608d90a67a4b35af74ebe20369f6b2d437adf02d679d23b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0481", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x458f66c8be1b839e942f874bc6bbe8100adca2babe339d32d478dc4e55c3a899", + "s": "0x752bd00097e0f5baab30acc2c0e62f71c860822cd8987d045f33c0065c395256", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0482", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc98f8a766f335bbf33439387d4c535250f41955e08e10b1faeaa7347823052f7", + "s": "0x7f7793bdfe08835584b6ccec45159f949e936321978a3d2a7b67d969e89126e1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0483", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf7bf20017f3ad4ef07a2669d72684d6c4fed6847f1d787e50ac2ffa54c655cab", + "s": "0x105ff4dfb864ce2cfeeec0c766b47238502033fb6db6cf14226ef7bc9fc48f27", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0484", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb38b853c799ba5870c1dc5fb4b3859a9b188866182a3d321ed6f90e03fdb4b69", + "s": "0x481c1c031178850a12714e574d876180f8e36a537d6489589130d3ad5b5085e2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0485", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5f916dd17284ccf1b31c5e9ba91e15286233efae6c6bc61f0edfb8afe77fe69a", + "s": "0x3058fa3238ecfa4cd0b460b291f59eaa3bf9c6e361eadb763b2b122adeaa8603", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0486", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6bf5b7b8792a55d6001327c40dba28537bd736287b403b08b3b49905e3c92a27", + "s": "0x7907f79cb8c228f0dee1c7cc0e881c01d9641e5d38c669582851a69f0c3663ee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0487", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3589ceec93d69967de04e361da236f4c9313fdd05809d461d9e45d7438bb83c1", + "s": "0x6b07d6df78ba1e2810a551458dfeded5c68f4a858f7a3b53f51ad1beaa8d20de", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0488", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x48c00dc7d9ccbc35106749c73071a62163d567aad238aa214ef304cae851f86f", + "s": "0x3a3e30857e7c5c9601a6053223f01f0ce554cb356bd85fbf5e4f3ac04b7aeba8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0489", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8de83d2cca51dc4a3b1c544e251c083a9374e36ef0d0148932981e4a3cbd1f19", + "s": "0x32685047593dd687c435453b040b492bf4a5b0226691320923cc6ed81f24064f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x048a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0c055e619bfdcf164a2c7a0cdce0b758da2011db0a45be391ceab30070e22b03", + "s": "0x12b8db5fe9b299df805fa66fe867a3a9d86ddc1c583ef515e94de9d1fb272fd8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x048b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfc8cb9c7473ba108d3c350e7fd3e525ec13eed34d4c664fc036572d807281ab3", + "s": "0x3f118828fdf3718c21268e57355513b8d80351b0686073fbf8cbb4b5e121ff7a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x048c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf7476f7663cb23ff072532dfa19c29df6ffcff79575db884914269130310a432", + "s": "0x5c5251b0899223ef288e8ce3c48444c408b277d62d52469787a6d037b578a659", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x048d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4b4cd53fdb19fe73e250a6aa79de0198c10a9430b0fc0db0a740cf5f85b65a00", + "s": "0x79ca109b3b2426266e68936127740b41a0c7a8ec0e0eeaccf40f281e87094daf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x048e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd90aae126bc346462109dc1f9d3ab988a35b1896c1bc56c54f306b4213063642", + "s": "0x097a4a5946337241dd2f8f7f618da175c2a3560253dd3a4a71bc3ae99851dfb1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x048f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7503a6e925884f45a027a73086a6dedf16150d77f4b76e250fd0a415a903cbd8", + "s": "0x26798308f3638fb2269977a4908d907f6a67568785f06488f95a90b28215d885", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0490", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7a300633c9413c1c38572d8194baa51f065b04b4fe644cdaecc7cac2e611c445", + "s": "0x2fc77c17dedfdf4b6a91a0204ef493d8713038abfd84178fb997af5e7ff4c26d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0491", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc07637cdc1032eada07f1a5dcc35e084360ae35946dbceb6a5a07054d5b221c2", + "s": "0x54ae9aa030919c122816022bd0eb91ab0279c500ef8918ca7092006fa5de8582", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0492", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2b060f796379fa34090973cf48d51263d889dbf9c9064ac245f90a1f3a60d9", + "s": "0x448062399c041b5ab48afd8496120665b0404d76539e6b18db34493a3e8244ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0493", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xaad473c963d0baf6f1c9645722ac4eed30043f3c5096b7a7fb6d340989cc3cf5", + "s": "0x338af091e5435e44dc983cb6e18de4d69b74b12f6a0d49c26a6548b0dbaf52ec", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0494", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf947740b7862177aac891faefa06d6cc5327241d8aff01a2cad0a2daf22f2077", + "s": "0x05ab5ab69ca5e22e426dcd72cc72a76f7d3c0f95c5853a94bf7ad160ae68c38f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0495", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd2d3c5ee43d9263150c50e1822a56c2e02691d7ed605522f32732a5c666c7510", + "s": "0x6315f671e2ce505626bf17da48ca269d290289bd6a69284e396eb586897f8a8f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0496", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x874478f6d1b227b73c5422412c549f98f90471ccfeaf6c52f1c5f1e7491519fd", + "s": "0x62a97f7542b7e9094fcaffecaaf510db9dce2d844e80d5892103dce8915e8195", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0497", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xaecc5b3867577dce1b96b41cafe76e8bed9de54b6e2d985673bf11ea6ce29d3e", + "s": "0x4d9c4dee660baf0b18fc1206984bbbe5dac67b6daa9658042b070fb618517216", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0498", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6108d865c882fb09f205070c71184b6a415a9ce9430eb12fb112cb2287ceadcb", + "s": "0x17d8dc2d5141917d4d0fdae8a0ca5e36389e62075d8defb14eeb750faeaced49", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0499", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x29fde128f61304990d3beb8382c1a5dca4a3dda04e80d90f0b09e574db09d28a", + "s": "0x252462ab8d93894e3f97118e1853889461c6e8698722a29110f9f7c1ac5477b7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x049a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5e7861ab3915d802e89c87c608ffb334f2802426d4c2321b2c1007d54e30f868", + "s": "0x4dc5665ba6ea699f1691b6659a4a7f62032a74fc0ff0f41f06abf493517b9b77", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x049b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x390b9895378aa4e98ae3beaa6b50ac1d60bc5ee81fb857526a9b3508aeb9bea0", + "s": "0x534349739c150e1c41a722b164b4a50bcd1d5aedf4966c00ca18afad20da872c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x049c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf7d4fe978d63df2e5d402a4ba4c951a2083401d2b05ff6078fd2e176cc695bc7", + "s": "0x240e7d3cd22932ed2018af7ad4f014cb0ce7fc89eeb649b7e2d78457bad6cc06", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x049d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbc1744b858087bfb6110eb859a779120f0b3721eab7f23a3d2038ae421623a61", + "s": "0x4ebecfbef3dd66bd6b8cd9761c1cc89d7e96990030c931b39ec181ec7a024583", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x049e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9d5ff3d053638092a292bf441864870f595844ddd7e2bf650e6b991627cb26cc", + "s": "0x51ff988ed53e0726fcc5ae4c2e684fb977940dd2e4e1c693ac8e44164543c5e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x049f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xba4c6b1906ce5980a94829ce23b92383b6ec4e9cc65cf50aeb2ba7787993e299", + "s": "0x1f33ecbce8c55f6ae04dbc750dccb0a4ae4822c9ff5b34dac31531219845dc76", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04a0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6a9e484586ebccd52be1c6186e8200076a60a2de2e73d088c8a1f3cbd045a539", + "s": "0x670d58b7290b8999a3055b6f3e567b899ad0772823f6a2246b2ba17bff605a0e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04a1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe9846ef2b71c8cfd4f84bba35466881fcb39df8b5a6ff4cbefa672ec52e7b3ad", + "s": "0x2e77b1fd7d27fe395155088595f88bbaa18342934c31d83274adc6879b04f931", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04a2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x229a45e4608df72587ecf05142129edea75d174d2cd21c2feabb80e769db731e", + "s": "0x613f8cebe4df5045efd85521b9f38c3aa43d8a5621acc4ea1d78b0e902d6c6d7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04a3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9da86d45299f734ae43c31f515df8846524c4027ff877fc2251c20858226be4f", + "s": "0x055fb772e434c5034a1f37e462f4dcd1605baa7d11a54dbe1f994d2fb7bed0f7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04a4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6fd8666f30a7ddc3652f14ee3e4d70a00f88360f3e98b2e0c2081e16062f1c83", + "s": "0x500b4cc6f53e95fd8ccd621ae3f9389a18902c87db127dc2f3482ee48312a1dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04a5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x03ef3e6302164e8421be577f626f439a86f129ff04973c34e51abb5d1bd11858", + "s": "0x66166493ac3894285550ad63c16a8762e3d75400b3155b6d859ed270ede9c299", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04a6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa530095619e20681dfd8d1268b08c33beffd0f70d5c5bb0530340bc04d74d9e3", + "s": "0x5a5a8cfec6ca37ca6ecfe3f8514a5cc6a22756848f413a222164d4d37e44fa60", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04a7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa22547817703207f6d706c5a7201a6620127d4a1ebbba67844518907e3f18482", + "s": "0x7d5d9a3d951e00702b938dfbbb4c5b9a8f031d3a85356eb8093968a7eb480225", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04a8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5a7e149b54b4bd8d82c3a30faf24b478df422430f2311167baadec3e291a8722", + "s": "0x3007db5265621ee848fdc27b344ed852725a1b72f14e7e285dbc876f014028f4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04a9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1b6ac9f1e781b0ff015917d53de474f98a9da49001b77ee1fd2322bbd20861a1", + "s": "0x1dbf17f57ac9ce45ebb74d30e2bafb9a081a3215134b4e3ccd88b8e2c0f6c01b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04aa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x628e13aa0e435c06ecfaa7c82cf7e8dbb1744fc7c255e0c62c635f6f5e201976", + "s": "0x0996065769465429dc306b592e7b313d937350282f82a18f56054207219e20e8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ab", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5fa7e38e6b3e3ed16e7cca8ae11faca1ba558fc4886e83ca0fbc251f3c02b2e8", + "s": "0x569cc8c2569a2c94c285da643d47386041f59a765eadeb7e0a45c4e0bbb55131", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ac", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf3b427a85f7d7409b3660751c5d9db8a4d42f6f5fd1a93275a328f07fa9b108b", + "s": "0x769021923072877d8258d78a911657f886827846e6b0f2f7d872907adef14cbd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ad", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x07c0570b94d46d3bc858624cf337c5fc8a0a8c0930e3dd62e227f840fafec919", + "s": "0x0d3c55a22725a0d9742643984ccda08cef8826d8adfb72e6a9f45adaf283339d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ae", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf08fac1936887846a373ec5b98b61f33cd249fc40e10e30a8e93f3499da61290", + "s": "0x76a8451573c17e1709ddede31255549b8994e78f058f1f98c035f4739b6c715d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04af", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc46367369fa29c6ddb5a436fd02634df094d1cc762494d720e47f9b2275c189f", + "s": "0x556169ecfbe54a422141c3f3d6e63f406f79b226344b401d68733cb0ad5fef95", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04b0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x111c87468cc01c68e4b3ff787167e57d92ee613136d33ba29d0a67f8e4db57fa", + "s": "0x75c005483ad241fd08ecbd187d19b8a94702d481cb9b11ccbba6568ac34fd750", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04b1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x958caab6f50017f2aaeaefbe7ae7176173b8ad1c9fca8716c7d6911cd7385ed5", + "s": "0x58e009d154f24612e8a593a912de375f2f479397100b2440e16e8f6c0a2c5a3d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04b2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf96707484f6553f04b55af1a2babdb6ee0ee0fbf94e07fa7e8e4be906cd27ff1", + "s": "0x46f0d4566ffb25625ac15f305fd1dc59234909fad0c1b0c84ac274c4ad079696", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04b3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1f1b1ae3a898f1e13c5072905dfd2f815a35a56112102d0d664ca3647a5f461c", + "s": "0x4c622f99ae193522ba71369c25cac21e773cea7867a85ed693c6eabddbccbfae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04b4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa82f4fd5f0d8174b0a7ba97e6bb6b99d8299b808f7fb7b2320ee58520dbb2720", + "s": "0x45e9e303bbc8ece79dec5299fcc4d4084195ae50f36318ec6beed3501a5b41fd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04b5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa687318adac225a963b8773509215a164d55a59702c1fde81f7ef92ae870a8d3", + "s": "0x2f286fc5833a2089e3ba748964f8afc7689536e80de72d8c5bb34b886926272c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04b6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeef822430be5b9da8ec9b1a49d907d4f02b65eda90a966835b0582e6d9d8d5f9", + "s": "0x09f69e14b47c6c1b5f4cddc7a211f983725bbab483504a46f9e77dbbebab8b71", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04b7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe01ad24ccc16ef50daa41e5eaf2fbfc12b26404975d3efafb4d541c688274371", + "s": "0x1c0ba022bb740f1cb2aba09763d42ffffe3967b69c1f554968d6c4d8e1c83060", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04b8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2a5cc6edf995ec47ec760c32fbc185c20ae58c8d527e90921f534e26443e5a45", + "s": "0x39ece9d32ac4496de0de542c57181d7f232d47a894280901d398d07e0cc05c62", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04b9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x82a38bfd18ae51b6f2f124d84647f80aa3cd051c22a049fc3684d07137d9ce7c", + "s": "0x640f92afeaaead948b84cb6a6ac34b3889e261955606c6e9fe3b9460bebec3e3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ba", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbd3227f4026dd4b561bbb5d8b818e7793726922c08c95e7a7bbdbc6d380bb1b4", + "s": "0x26f278361ada67531d1b33b9e4adcab007d68a0d8512a2ed77a06233b9d2918f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04bb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5120581a72c00e72d55dbfc7a9e0db93182333112d7d147a9a30e0f0cab01e23", + "s": "0x096b9fb237f69c40ccc3b33bd8b419a2d28fe26c433b7edcefcc6e031357650d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04bc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdf877e0960edfd8bd03f7176aa773e0f76be1fb510d09bf87949528163509436", + "s": "0x10439dff431718a15dafb03b836c493c370eaeaabca19b240b9bca0744955e09", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04bd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd9432deede08c7432f15c15656dfc91386514fc1bd914e6fefa5fd158f14da65", + "s": "0x092c43a6bd1b1465b6b1a84a0a68799bd85eaf94989e795fc11f52403eaf2b08", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04be", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x17cf5e9283d1a61970945b6a0fb0280ac4da93e1b642abd76a8e30f0d0200657", + "s": "0x53a3b0cecf1d98e452f63d7f5b202b3318b41bbcdb0d9f856ab37f3f6d5d0003", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04bf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbf7df9b5f89d9e46e150a976766d4d56f0479ee5cb712a7c962872a2c411cb1d", + "s": "0x38ded036c6655e5071af9b02f89dfb25125108d1f552366ebf1858e91da47f90", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04c0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x678032fa526c6d78145ee48b1798ff678809357c049417c88fdca10cc6a34a7a", + "s": "0x6feeeeff3c3589102aa53022b42661f7306391cca920f749449d39a180cca8b7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04c1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xabf7f428073635a1f073b393fc4e192949c71ff590ec5b6208e08f311b789e56", + "s": "0x511b340e155f832540662fab8ab98766308cfc45781c2013f5476d6e7a96fedd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04c2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x670bc151cb05d97ed543a745f69bf194c91313b3e67c8004718b2b75c19ce062", + "s": "0x1e0c44d9a2b271cf850a1a1b5d5c441c15b740fee83b7d6e39536c24bff10995", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04c3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfb6a0b351958490b389c6d5f7aa6c0626cf5ab8365f4acb6704adab5072ad41e", + "s": "0x425f892dfd1aa4d9e22640fb37de43925d4a66c02ef92092a7990d53266267fd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04c4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbbd37f719c85128b28aa4f0a25ffa00ea1e8de59b610d0525220d1d04efe77fe", + "s": "0x32853f6f50ca6dcf17ab7d2a4fced168e124434eaef43a39b3a1bd1de28d1a0b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04c5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdd02b847f54fd37fe61272ad1c3fa9443d033e2ca720107534bf19f4420151b7", + "s": "0x4b58ecca3bb86f98e626cc5466bfc7d525050bde61aa6cef14614c429ac33838", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04c6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x36bab01957e293e2d2ed4661ad8fa1aafd99e11873369b0e64fee8e0679b58eb", + "s": "0x69d8046d82bed4e657699e92a846b60640ac6733940d4de8e4b5facf79ae1605", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04c7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd760d4aec0554c8a951c3bcc270269fb62f0c27e31a6d2ae84f371deb3cb7c3a", + "s": "0x0dc29b643a2a69c49ffefd4d0ccaf74e18ddbd8025cdc914a2c083ae510f2e16", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04c8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9dc9276d230e685ed0dcff0e6b86c4342f45295af6c3bc9b80dbebce1e49e1bf", + "s": "0x52e494894413954a5650c81e4c2c4ce5c696fffcdfe6eb1266c8f68b288f87b5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04c9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc82891fa2ebf9a3b2d6ca9c5ce222445188ba7449ce445958993fbb5dc55d0a1", + "s": "0x60d8a90e57636dee6b05b29e134352362f217eba6e95be4e8e7de208e1f0a0c3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ca", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x847cd4cc812a2da9ff60ecaef39555dc8ae41967cab0f7f694b37d71d14963b8", + "s": "0x373ce12dfb10acf84263148ed46d1bc59226a56fe64d973e0a754a14099ecc67", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04cb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8c5500c12632f25acbfd7f845abb9033158375162b8b2915f28372adfd447284", + "s": "0x3df68d1193c1490b2df30fb929ebef088328f5d71e0efaabc33769da84db72bc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04cc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x062cb54d9e091333a2cab9cbfde10940d7ccf0b785d1e9ee5eb07cb0f924e00c", + "s": "0x38a6c5373fcd4b25b49ad59307b811b05f512975350085617e7f93873b218639", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04cd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9eabc4f7ff8ebea5bb8c6453bcb961c6ad77a8ccc2264635697a94326ccb0ddb", + "s": "0x2922473615c483980c03d7b64f12787172e3efaca2ef5afeed4947c848d801eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ce", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x541145737232122dd74c2d395ac59b20dda6b71ce441f1c5b3b22ca6f2bfecf4", + "s": "0x21c586dad72ef0a94dfd20a726886616b6759d909cb999037b8f59fdc8925898", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04cf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf34f45ce451dc268654f610058e4981697cd9fbafb3e85655c9dfa0a75ef72e6", + "s": "0x0189501b8bc7eaa2316851682d67b6f9c7684e2ea1f79b4b923e2b8f2ceeddc8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04d0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1fd7490bfd466f6edb3a571a5edc7b55520fbd518486b8a608f06147fd96e118", + "s": "0x76c784a7660a2a48e8ef8516abe894d33a62b2fc70239bb0e766967b6d00fe22", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04d1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdf8bb48d5a97c2b132e68adeace0ae7fae9e160deaf82d539638b94266d37c1d", + "s": "0x531d1429b18b1f8eff02705806a94573c76344ffcab051c4886fe6126e0573d3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04d2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9bd9cf1c72354ef622c8509d20dca775932c52a135742d4e690c29fc96105e8c", + "s": "0x4392ec29e8a86b2e2a70aadb7e01a35d805c73335775f27d64e25aa4b85fe3f0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04d3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdae0c9f74b4b9801c0cc2583078138d42f3487d615bffe1b3b09af32e1035334", + "s": "0x1f8677a03b98e0ab1d0cc4488f5dd74d0c2266aa6e474f0f96ef11e0f6b33a1a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04d4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3ad1f790bb9e726678549e3ac1da1e9d3a646a3775d030d715f3c25fa8b94337", + "s": "0x3423fe2a75caad32bfb2a2a99b0efc81fe993cff3d6c7cfdc77ce9a89bf6f04c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04d5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0356bf1498dd4041b84996f8159131e2cc2aa68e102cd84d18614771b8315429", + "s": "0x5d791cb1b7aef40cd0b84ac628a5512cd012ef8df88d25e3c1d11c76821628fd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04d6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x57c1abcddfd20e2e9e0943cc2378378604a800ebff76f3bb5f378971b1f1e575", + "s": "0x6313a432d3887d27da825fdd6f9315fab04125e257664a7383b76fe51bbf05eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04d7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x774092c070f3f8764bdc77b62700370973d14330ec4e45a9d6f567031ffcee7b", + "s": "0x75ee28196ac593636fa83ec0ad0058184f97d3c8e8577f6bcc95e75549049380", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04d8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf78008bfa7766dd66fa26d438e04a639db36e62fb620a7b5509133a2167fb224", + "s": "0x2c6dcac1227b87a2337c22a46e55c02b6a550f5bed593aa485c34dfac8f601ea", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04d9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x50465ae34ac622a0785fa5c5cc621fffd211ab443ff92bc94ff1498e6f47dd7b", + "s": "0x7cc186e7bb31bbef4dffaf410e290048f5957d44c81662bcb972e0a6ba12a5ed", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04da", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xaf6f27dc44e9c1129b6a24d9223cf5a107f613ba3e3dd43abe2ffc0366f87aa5", + "s": "0x6b4a23350ac379225247b2e9b9988067d616eeee7f3d285dd2e861f416bc8589", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04db", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x296a3de45f71836214a36745daf80bdac4f50801d353f934d272fbad5f1b3a34", + "s": "0x4d6082cb7842ef7e2de8f3c1b271c64ee2a2e6b58eb875cd11ad7837d8226795", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04dc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9d40734a7c5f4fde22252a5e76a3d4057a2f7209e35b5399b18f29ad9cc5fe11", + "s": "0x5ae4767d5b23df5b86189303da0fe5767c2253b745001d48d2a822cb2c6d959d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04dd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf6ff161f1576c6637e874f2c7c07b0ba0a61b3b78b419a32bfc8b7b1057146b2", + "s": "0x0be6181a011d869710b26389345f688d0a7e0b3bbfd6795034afff5150c140a3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04de", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x48a45eda192df09e3482ffe9e596ff1bfda3d61fd7cae243d55722bf58dd526f", + "s": "0x6452a06d2c51350dc398771848fccf46ceb66b77e79c8f8fe728d094649dd0c8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04df", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf49b32b37cf28e54b6fc82288e8b4df9b2759a33b99fcc51e009b16a5c7c7017", + "s": "0x389c46233509a1efd23b7fe47de5f16b0fbc27f66720beb427421c4c6520020e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04e0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd6cd09de6609c9dc2bfbc9c73206094e1bfbf7cfa765da8ba7f76e576f38f4a2", + "s": "0x24332bde05f3e5eae8234993100d4b0d3b60133f68e93fb57e2f819df4c37017", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04e1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x991149b6e46a40ed21f6091850c635a88a7d616926d44149449ca206bf411977", + "s": "0x408f774cb613ca3f1f2febf682f0a64e1ebc05816a3dc8704020574e8e20b669", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04e2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x89e28e7c44e66aec9b915348d3da296d4e58e64c4023955aa3642c9b63c875fb", + "s": "0x2e5e2353d81c8fd0a354f0862bedfec62ef56639bcec452be15d95811bce8cb7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04e3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4ec114a0643cb71d2ddef00b8ecee26ae0ad0fe025717b0b328b6b552f1c50ef", + "s": "0x0acb6ec0dd791a33b57d4c6cccc99c1a32c72363cddfcb71c91c4d5f4be6fbb9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04e4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdaeb8a8d022a10ae2ff8a3d64851aef9b868d5f5646698e2d1d45378bd29dfae", + "s": "0x22b07bebcfbae0a61b14121c8e37933ca02ca6dd361a7de87acc65e1380557b9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04e5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x61fcce74d0408f1d4d1b3e8797e2715ce61065aa433df942892ff6c67e5b58d8", + "s": "0x209599ca7a69a7fe98a1234a62ed32f0b42a170522dd877fbef5e11b2ee87a76", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04e6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x123988d1ad7c0bdb1e98c2c89ae9d89e4e49b7ec5ea146288ceb54c9260a5760", + "s": "0x0d56752ac00d5e90db86e1c77a947cec4e81cc53d88dd710842e5d641098fbdb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04e7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xaa2b75276689e951f6e08d8406fab8f1f182069db34e4926435eea6fd7997bd0", + "s": "0x3afd9351faf1fbe11877d9e04dc6b1ca8589585c747aede7f611a7281df306bc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04e8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc07bd40bd84f15144eb99c2ff107390b46f77282bb1d8e517a12bba63c66c21b", + "s": "0x1f337fd2b58c963563c745ed9bcfe112cb7bb12bd87ca55fdf726372890486ee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04e9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x029011c68f67acc9ca45ea95c1b509adf83ccccde89d36baf17cb3fcd5a78096", + "s": "0x383ce4d89cd8559afa97e470aee9226d1ac2ca0a91cbd3f3d6ca8da507688a9c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ea", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf8e4412c1c7945c7a4219e01964bfb6bb32722f8e1f91761c7dc510a10676b08", + "s": "0x43267cd7ea9d034878248f281bbc476957360795da9e1f4ce274789ec8fee1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04eb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x122486b936436e139dd73225f1d186aabc5a992c465e58050c617cc0138fd36d", + "s": "0x7d60de0b64b3438d2eb116b7487ef6a4e656e6b3f3cdc18d7aaa5510cae697e9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ec", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe5cc7fdb6e34180daf2094d2c490dd722d09eb7509f6cfbc185cefb56574f13e", + "s": "0x1830cc88b3a94e92c7dce5542c564976593e5ce0b65eae90db2bfe1d5083fd5b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ed", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf484f9efda2e464c16d16817e7703ca19f7b6563d683a241d12b55001cd02261", + "s": "0x0b8ede135ef1974a8582315719cb9abe584dc337efa6494fbb4724faffeab71a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ee", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdde9a5b7b1aae233228230331ddfa674244a7df19ef7bd55219743efd5cfefe1", + "s": "0x07e8a1985e75ea3c25d5b1d475561f543f63c6882c6d34fdff70c7992091b513", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ef", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4e7587c98aab6b07a64e0fe59d33310022d06ce6f82d8fd389bdabf8aae7ac90", + "s": "0x7a3324b2f0391fb21b6667a1efab88d0c531f3c35416a900421b561a295fae63", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04f0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6f8aec35de7fb55e1728b33331ac5ff2b8bc38b6ce808dcb31831c91be1dcd5d", + "s": "0x1286fa4fcb65d88fb4af0cb47eaced4aca23c20798d8330a65a2fa1d756b6e91", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04f1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x033fc63d7f1401b67738419749d7c8f2d22ea587e2810051d2c60749877faf34", + "s": "0x51b5a3f96e8d5cd1b29a663ee7b9d099bd418d9baa174deeafd2c917d49b174f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04f2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x343b551be39d9111e544d5ba7119a08f13bd6bece8f73afff21e36aae365360e", + "s": "0x4cd083887a0bec35fdc21a27347beeb48ed2b4e3961ba38ddd02ce60c7ba8b35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04f3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xded2aa0b260a6228c62ad11d01c064bf606f97feec63fadb5ef223ea301b4259", + "s": "0x70d3440c059e199b89b6530e9b02f925e80b3f3cdfc45e0ecede236aef28480c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04f4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x39b8587347df1b8e7b71b4243e8b23ceff3b5afd5c1419acecd79efcf8adf301", + "s": "0x5c67c295c5ecce8cb6922c198f3071116851740a2fc2160dad5b96aafe40944f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04f5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4f368db21dda6bb12951cea2a2d79c50fd0a22e6bef85501e3625f3d2f47f6e5", + "s": "0x79f641f7ad521e64b7b68aab591da07984dc734f4daf9257d8c8c3a26ca4fe47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04f6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x48fa00f9573369b3260be0aa2ebfcfd2f9a23e7e56a8d7888d0fb3b385a3d168", + "s": "0x1b2b014178a2cdc6a9b22adc8c225fab8fa7bbee8b48431192c163b3b776a68e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04f7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3dd5aec65cf6eaddf0e7f49c833d212c67032b78b0f20d492235b789390b822e", + "s": "0x1bca4a367dd6444264fb09c642f437d7ce4b5151162238f0d0958e997de28734", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04f8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2b54bd02ea534f5bc09dac6feb15b9ad1d9a7b631b276a387bf9ef0c7590f3f1", + "s": "0x0abad2dd1f4218901bdb0fcf51fc37d222638f518d6c05e5ed5cffcecf33d7a0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04f9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa90edeb53c0a88333ba962f025a2a5422c49d1add41dc476be47bcadf0bd1a47", + "s": "0x6d34f536f841787d490d5f7a2e24768c26f9613958649ae2d62d8fd491ce9c6c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04fa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3c2e3e207dc93f3f7cb4a1ad9d2642db6d74002224d66a23d5c234faa186aa45", + "s": "0x69fc52c10dc259c24b5f44a9b2ca6fd801306ed718837a55c31f98722631fc73", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04fb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3a0dc31fba76924fb295995f3bc5c86ebe54567f9a8562d67971773915bf8053", + "s": "0x36d034c9f7d7a7a11549b1de97ce650d6f160ebbb9b486c2873f483561557c8d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04fc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3264e21132af681a782f22846f484523421f75ccb165f130ef448be9df4ad6c5", + "s": "0x2dd888edd1ff3f2ecf36c033e0211453d70b5fefc066a2165ffb89dbe8d84a89", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04fd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcbfa545586e503e364a51c3bb5d5e80745ff827c4efb7a99efb75a33ab2bd3b1", + "s": "0x15cfc6e9c3972898e9d3cc5201a673a9905d0b7809e3367b6494a8a43fe5f956", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04fe", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5e72e7bad851af8261a86930cc75a744c47bb55e6d82493c8a4fe60268458756", + "s": "0x4516cb41a7f1b7fa960e2a0d43e17b90320262b3f46030c3469c5c6fa41c6f3d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x04ff", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2d8aebc89dca195fe8a1e5a0b6bbd475145ca28e8308f6b19826b2f4c1dbc0ba", + "s": "0x06d7d4ef595a5b079994e2f0d4e09ad1880ccd051d4e44fa69d44c2ac694782b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0500", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe30224849371b051c4151d2d7f7e21104b26e8cf7903efe59ce2bf6d285c0f46", + "s": "0x4f656f810a9005da8b6362e4becb010c3b2754ef3f1f34e0a8fb3b91490f7ed2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0501", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb90da6c7ad4d0b28fe58d4a2737ff397cae8e02980c453232193a2ce0ff84d09", + "s": "0x5db386c71105a364c236d66450baa8e2b26e937c053892767c7b8d8f73ba4f28", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0502", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf91bb7956572b97cf345779ed18115c7286b05045351ac998b1bdd02594b15d3", + "s": "0x59dcbb444ec279b4de383c1f176c3ef38114aae0237aa3246ea31ada97a59ee9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0503", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa279a6377837c1f9eac69521e19e59f02dea418c3b8405cbf6f54a8a8726e8e9", + "s": "0x7f40b336edd7b794529277e164455418bc838e0db93dd8de40d307e658de8951", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0504", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf57888b52612e14b3d471c07e9ca24852086799d9b1bc639af2192b863facf8a", + "s": "0x32d4682d4bd4de139d8edeb378ce57386bdfb18687aa235a905a3ec4e5db55b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0505", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdb334e6034c8fccdfe6a20bef393968f163d3bb3e95547bf3b4a2ba58a5f7865", + "s": "0x42eb994e5215d747cf8ee8fd832f226351b42635d3f1cba644906acfb34bf319", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0506", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb9f7e8e69cd1816744f030c757ea301ba8dac7fee888d40809d23c1985481c93", + "s": "0x378ec1bcc9c5bc67fb93476966f4b2a4c79c25083bf61f87bbf3a391c884475a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0507", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0b4b595634e4590a251b2ec2797aa6684f1e5107d670645f5d1085c360579047", + "s": "0x2b72858f6be53942ef4a035e1a8f99aafa4c88dfb8eb9c0bac80318940a15355", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0508", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x04221981b2db3f3eddaab3dc090016ce8454bf36b5596388659fce7dd10f43d1", + "s": "0x18ae3dc8976e86cf3582306b7752271e356d0b274c23c0191d5fef1efe1b8cef", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0509", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2569ba58bee0e7edd5bfebda1987bfcce97590f367607683a0ee3d5d02730ed9", + "s": "0x4a9fbe09fa4704c673e2829be2bba769969df4eae19735a96956948b650de28e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x050a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2454d1d3625c49208ce6420876efa4ca1ca9c1c06812eaae8eec4551f863c062", + "s": "0x0a2b3ac6d54890108175282ea1936b4ac15de4e93296e67620a1a119c43d7cdb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x050b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa5550b85a0981b5808086fd58adc18a8d9e94305aed653621ad8aca03e07b8e1", + "s": "0x6d0c37b92b9de1e07dddd0908b39c0862a3b189e7ffa9a0dcf0bc091951b5816", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x050c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2602d3d7db61b167bc454127bd2e781b50e4a0c00a0ed11e3228654864eb4535", + "s": "0x53f2db269acbf2f4b7f59fd5fd21fc15b6e3625866996fc171d42ac3b47da5a7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x050d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc73862b4ddd5b420b35baa45f8b8ed2b52fd619dd2c1e121f7a2f5acb5758c14", + "s": "0x0f4bbb8050aa4b072855f5811b6723d8745f328020c55402df53d45159ea4cad", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x050e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8fa419934d3f8aef81e7e7f7897923ff50e95d5204e4f96e9b5a9cb56cb0dc3a", + "s": "0x58374b79609d4d8292916eb9ffa12aa69fe9a398edc490d2ade19db6f7c94831", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x050f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x61301200001006841da7b08f42f4a9f9297a91a2a9041431f2bfef6265cec92d", + "s": "0x4ab8400ee5cfcba62e61c803d29b52abb32a2ec11cc77561a89a7a5ddd9d330e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0510", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x48c2956af65a9a0bfa6dfed38cad230d5083b856f82395debaf36654859db78d", + "s": "0x2624841f9c958ee5ed89778f5cbed8b882258fab1cc240f9599f6461e0e4cd4d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0511", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xee4c8b728f1bfdff0623386ff29c82d7b428349208c1f815f2804fb604f10607", + "s": "0x650b2cd2ab4d991b514e83e539466915414b46fae75cf2620b3c504c239b1cfc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0512", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8443c3d7e839c1f9857c634a583ca3e8df61dff6267b17c8eaf1347d5481dfb6", + "s": "0x3a2e506ba6b3c1b5804ce0176700efd4b221b4405525293cbdce7a744c40c0a2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0513", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x253d24a0e18df1d37e9a6177cb5e79906c9af1422339f97e392fec3c0f634f2c", + "s": "0x1e1b3703a397ca243a50af4d00db9cbb330b7b3bf2784dd8e7be05d3cf90eb39", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0514", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0fa95c4eda88c8b5dda2c82943edf357b9232e13176026b2f325c8d9c1c0f2e2", + "s": "0x6fad11b48425ff2c0f7df782322c33df31820422ceaa9a6454c63dbdab88bdb4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0515", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7eae600f3fb2c7e11803591fe2a86772c56f98c5500b9f55b5e3f8adf85fe36a", + "s": "0x411f5a9f1a4035dacd9834ac9b76d89cb319c8b3a2f8880024db010306ac3d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0516", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9d6038463e788bc6be3cf44b5098d117ed7e6c0e898adb774401ce36e89464ca", + "s": "0x41a961df8334754228f72f0a960f09fe829a670f2a7f9f427648d87a14eae15e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0517", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2761d6d469ae83678a84ac1795fef41f3937ac39d8b5390e865eb28ca95f8ccc", + "s": "0x062a895c0a4d068c67020b0b5c94f223615918ad926fb3933889575144b532fb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0518", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x32768c99e480f7eb47cefcbd749221555c6803262bf4563dccf27314048dcbbf", + "s": "0x7b8298376c92878ae872bb2aacbbc3f8d852fd94683a32737fc8816a23dcd330", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0519", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc404b3a22bd7d6e661b45a8dcfeac130f524ab6b13d97b42a8e0b3ba9a57ed8b", + "s": "0x768eb9d808091645ec8efa2763580f279d74fb024047db11a79b0e745dbf1c37", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x051a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9da0b6423e33a7c0695c0c72c1a1694b644470b71d8607fa823c1b057b07f4b3", + "s": "0x73eae8b516757efc512459967d8603b08257099cef79e26658e23d56c0b23807", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x051b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa412ac3c4f3d2681fd61c2865ca244ad0481bcd4df0a58f6d5bd7ad4ead16f1b", + "s": "0x0c6c65de22cfc287f0241c8cb77b4968e11c2da3dbdd9848a6c3693922b9dd80", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x051c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8f8e8fcfb01eaf09cd9d3bc28a80363b0519e3b178555d66f2f01ce278bfad1a", + "s": "0x62e07fb09f052fee226a2c6290f7735b65beaee1fe09ff14aa4cfb880d0645eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x051d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x13fe01fa4e14c8edb95604b3593fa29fb0fc342f42533687498e0451865888c2", + "s": "0x1f68d34b21f114e6f073171b2242aa53e442a9cead5b8c938c4b3541111665b4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x051e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x51285ce9864e355ea4921d748ac04c013ddbefb8123374b7c4e52187f8c2c92d", + "s": "0x1d6cd27f8fef6575a8a673efcf209fd6feddd019ca1f3b7f2307ad44c6cae62d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x051f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x89091cc20d35b577133ea4e6f271fa64bb37bb370a66a54a8fc4a846a949305a", + "s": "0x21de00c43d87595f0c3dbb2837785bf8b89806997b2ea91815ed1534ba8b1cce", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0520", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1eae9d966307d350e8560130f4ecf09484d0674dae176925ed5fb67a0f4ff810", + "s": "0x7a44f67e3864924fd985aea4753241200b8163814eb33c1263ff76c82cb71254", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0521", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8c2fda7f9dbb1155ec9e1803ca471cbf944b6e56f21a2474b982baecf570113b", + "s": "0x4143c42fcdbac11300d145e15c41ada9adc1a2c7a16152cf6a32c2cca63ca642", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0522", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb4614ce18c22fcd6fdc796c8e75546ae4197c7fc20394024a7f4637744a63697", + "s": "0x25b7c0e85a5c2230404f05155b537fb4b3ae788076c8ff8998ec876c2c1d2d5a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0523", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa372f097b56d03c9be4868ebd828ae80789534b91cd8357e9c6b493fa2fb6cc5", + "s": "0x41b95b52f46473be81e3b7c6bb45b9db5b0a224d253064d37e0c56a4c474955d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0524", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0d2806664a4d5601af2a907fcd8ced449c337523fbc092c25d029ae4a7aac24f", + "s": "0x5a0fa81ba408ef3cbe3ef16a5bc081d92a40737964aa4734d73899afa8936a87", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0525", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xda9ff6b1384aed064faf0fe66858c92d8840e78d51e49c197e0c4de01ab6e177", + "s": "0x29b76f2c3983f9df13428df2a61c8fbdb2d921fce4c53c2dcaa27e43376d435a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0526", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa61a87bb93a34c65ff2c7c3a7021cfb3bc0d93f0ae48f3d8a40ed2ab826a95dc", + "s": "0x6695acf8a48c3dacbc43cdf44c0c434f58a262264cfb7ad65a115570ab57a1a3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0527", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x189d88fedb432da8a7eaea99ebb8f4dd715e7598c0800e6e65f7d93e330deaca", + "s": "0x53be09c1ecf12cd5bc0760347239c4c891ace2c9504293e349eaca18e8029ecc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0528", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3b25b22b2b07b832ddbdd29ac8a8b4d6f10d068e50036ea16b64b5a78ecfb854", + "s": "0x7db1608e91ab443483584ed7aa1bf4b5a4bea911c07074f8659617e8b142fd6d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0529", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2d2e2b256d0796285bc5fe6c3d561034133057c51887b7baa375ae815ccc0f69", + "s": "0x70f08110a2ddce34da2f2af188a5505ee1e942ba184b767b403d2981ce415752", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x052a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeff2fa3e6a0976f0cac76cb2ac3bfa7eabc5365f8277096b04cf3c649c1df832", + "s": "0x3d0403c82a99ccbdc3b17797dcb60d9f80905e472a4141cc15470046296be3a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x052b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xca3b72403b8db6ea079c0fafb4393b2e6f489154f9e4ca4b50f293d6f20469bb", + "s": "0x21c72d4f7d0537b175f3e888cae4a0b2a768912aa97961a9f105b8b71934ef2c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x052c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xabecbb8e88d17a38afad6e7c9ca058f7a00e1d4a6861706b44ac97796b14b4dc", + "s": "0x7444b86d83f9eee879ce3539031eaa80a07f21c6f6d2016882d8f5481fecf1d0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x052d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x48fad529ad4ab85571795297127b2bbe9eb6ea27e8cbc2b528e599841d042dc9", + "s": "0x7a23b85d336918445acd4556e1e0915b676e44b58b855b14664bf0faee10d17a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x052e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0232432f0ac36844c9d2dd4945adbe13c259cd8228e5cdd9c504e25ff73fca4f", + "s": "0x43d071b7dba82eccb32d503707f9a90c29c302eeaf66f49a93791efd4810e1d1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x052f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xff4112517fab0410923e311476085b58792b08afe0db0fe82e23dab642b8c98a", + "s": "0x76e7064483082136b650b8d594aa6390341bfa63c851f65f2fbed2e9a2f05d4b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0530", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6de528008bae6d92976bc72c6aec43505f71747c5524f76c19583a477dc0b76c", + "s": "0x5783605ee885bcc7580ebb5a1e0c0e6228bd32828c868979bb8da050400b6bd0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0531", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3631060c8cc9892eca741e2f211d5ca160eee22da35611260d2acde7fc601eee", + "s": "0x1dd01a4971cf2f30edf9cdaca23589137cee67418ea907d1b4021db4ab4131a4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0532", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc606e05f6898e55f0cc1b8565c2554a8b07995a35ebbccca9b1303ead4726444", + "s": "0x31bb1b7d23d9ac7293f1dbfd8cd642d42927a4a2d408bceae0b8dad2086bc198", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0533", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf26ba80efce01e975f86db7f5d832ffa11d2dec697ed9743405beebacf4461de", + "s": "0x34ac05f8d8b50ec0cf04333176d6c5403d979124e171a41c1a852951db6c5567", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0534", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3540fef6c618204b87fe41ad64755175d75c22c3344855ab11b06c1e739c11cb", + "s": "0x7f5d9dc26455e8d695d460fa159283f3f2ea0b96506fd4a201c9770ee5b4b928", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0535", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xff0cab014d1252803049eac472517166b73eae2efad5295354a09165b0e12ff3", + "s": "0x626c787e06335eab52aaa0fa058252328f57d90830876abd5df2a413774213dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0536", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xca9a997773430f21cfdd9ea59f1d3b329cd1955bb5e32a90a314fecfe9cc33d7", + "s": "0x53a96ce9c3e260052482cd2a1b3971cba528b668c5daaa0ddb21e1040a38ef11", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0537", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x15192a98d74dd1caa615f03399c1d747e0dbefab665de39d47ac519596660dae", + "s": "0x525dd7da88757a6819282bfa5ac4c5b4b4fd19b4dd8f5dae5bd9a3f3a7e9c0cb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0538", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x21724a5450f4bdde6287a1aca4967bf5d4fdd9ade3a8e87eaf1c26df1d2ccb8a", + "s": "0x7349e7f3bab5c5c7168f4edbb5a56049bc49c0d844339cf547f01f36c3862808", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0539", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe71ed6591ab9fd33d7db273e79c78484f68256df6ee04b56c424dcbcab012354", + "s": "0x26a9843950505bcdee096a8c20788a38f5766e248bd879dfc40dadc27ce3ffd0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x053a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbdb70f234f6e7a7b649075f6a4dd4d83d042814732693ff4b63b3cd71781f7ea", + "s": "0x62c56775fb8c31bfbb6f8c85357286eeb94a65a19d0a1e35c4c8467c7dd9b632", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x053b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x29b75c3ec35670e67b81d52a2e6f6e79983453e1c1c3316e4d65bafc434608b1", + "s": "0x545e2ee13274884b067a15c529bdc865373741f65e9127d9367dd61f8f78ed39", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x053c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe9de6d6f4013b7cdfacb3cd7434ebb88472877249997fd802f9579393770f23d", + "s": "0x234a711b618ac1a291a2e502d745c8c513474e6b5b807af6b56ff2f5a0c9c10c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x053d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x60c660b64daf4ddce233635f83cc61b1f7bb1567da9e2e18b16ed0a63cd9f528", + "s": "0x4b189928e7d1d80f67f42fbcc161d5d72f6a76832934aed211708b7f2336bb1b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x053e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1d5eda102f3793a74cd044fd75dade5e4296acbb61016607673a48452ad02e05", + "s": "0x0a9fd94649a9f1aff88df4092448f8530d5aa3cf66c95fe23c6cde6e7ac36a4c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x053f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x71ca64b4187dab9c2d593ccc3ce985b03def014da9049f337cc3b0a5aee8a75c", + "s": "0x3a0fc1bfcb25ea62e237ddccf7cda183f64c5e3032fc1095e9ff8c7cb8e5b4ab", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0540", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x01169891c9650c3b02974b16f43c8d63ef7e65a3f28b22d5f2c0814d7ac2d9af", + "s": "0x5babfb6eb1bf7374866b0d31deffcbea72282ab8cf001b2fa79bccfcf2a8b393", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0541", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfdb7e0b96fbf2c28cfbb72343f8090f97921860138e0b02b36c18654499145ae", + "s": "0x55d4b1f1734abccd6d93bd7afbd4878ab63e70d73b2fb1f110b9ba2c0dc46992", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0542", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xafe6f89a7f4090be8c1d80291753efd6ff9930345e2dfdc66eec34f3e8a82109", + "s": "0x5e848060a90ece88522bb02fea028e3d160605592c1b2af7862bd0c546585dc0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0543", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xba8683e4fb81c08c3ce563cdb2124d1f863f3fc6b93a65cefd6e0bf197ccd206", + "s": "0x079db3c23a7069a302d8cd009fa761787c4e5d2e5e985dd4de28625a9323b658", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0544", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xaa225eb580e4fc61cf56a19300fd7393c9be288df897b2aebf96d5416553317e", + "s": "0x19bc17068866d2be9d8ff3833425018bb3d90e0af3deb91516e6f7bcebdce95b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0545", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6d6667fe368465e13044935d5d328827a39fa8ef20da335dbc23ba866146ba13", + "s": "0x437e272bc8bbb6c6c066d454f40aaa9646a3bcc232cf861ad9bba64e97d81d42", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0546", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x494af7cae50d49fb2542592c1160e5aeafddbb9634b298bdcd89d0e2144448da", + "s": "0x25ba52e96cca44fb9332ba369b0bece3f5935b1b92d8b62bc5460f58586db603", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0547", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xedffd83ace7322a61ee4ab6abe1868080967751d4be0bf60874b33bc39ddcbb3", + "s": "0x08b4a1e0e44ef3d80db26fa8cf537366b68307031a2ab0d8443f537e8dfb8b5a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0548", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc2457366413b2916813d3e5be5ff283db4e7b898457b234e6efa47ca398bc06d", + "s": "0x683b4382aa6596c3fc9c2029808415d22b7d13f79368339ff510ea72c81e247b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0549", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe0b051b3d603c57e16bde938a0e3870543b7921ede03d0b22d3eb380c3e72f24", + "s": "0x06bb7369a2b86b37420fa5fb80ace56f989c2080ff247217635f7cc48e060794", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x054a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2d764bf6ddc284a0965850a9fc81a9f96f7ce6e7b56b9c52ccc1db4288989799", + "s": "0x63fe3f09904072a1db459005f3f0e0ceee8514387e16fbfe0ff331ebdb214168", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x054b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf0b52ebfd0f619929bc0034be0e411c95f518518b53becff6ea6823299917ade", + "s": "0x70c6c83af39dff511ca4dc088aff0f7e58669eeca00496b35f18254a4f24ba9c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x054c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x92361d48767df7fee08b1f45b7b9871482a4873acdd91c905229a33a260cec12", + "s": "0x3ebd876440bcb5998e4df266c8eb49c524a2b34867c41bb97f940b46393cb7b8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x054d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x650910153a867f16edf20b4fe33747cfb4e0dc08b2f2df471d9a0a7aac389463", + "s": "0x4f9d28299ad50e5175bdbad709bb6c38fc728ce2d3d9c25482715b7c15f7f7ef", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x054e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0682177f3d4c89a461f2463f7ffc98d6528b598d7c27b8b906ad46ca7c91a711", + "s": "0x01e2d6c6002240fa90053a602109ff5eaf38fd003faa056a06cbe5d89018a532", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x054f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6c15462388d66ccfa67a29e00540d5d7d437358e5cbf778fd654593334d5ce7f", + "s": "0x1cbf6a1ac56bb663647df6100487d64e94eead36386aad594b574b6b323567d3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0550", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9b3e9348e0c3a606cf7db9da4201e1672ba8e7e8d038ace5c9329bc99650fb0c", + "s": "0x49748cc5742f3157145e595cb1ba18ba057affab6305cc600ca34e2e6717ba38", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0551", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xef0f1a58e4afa16dc3c46c79b6362ac8b5ee95c2f3eb96bf0f90069203763c35", + "s": "0x6dd4d36d14f8613a18ebfacc4b8f575ac808538a34adc0aeb001f4caaaf84eb6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0552", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x02635c286b66efda4d7f4eead96b02b955db4d40c48d914d4b3df331e9b85426", + "s": "0x11085225c6bba28b24598da1edefcb6ae6e7b5e98f48338b917dbb9498b5b2f2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0553", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3b3aaeaae9241acb70e8b30ecb59d6b4eff933fcce6d7ed998f28a320a4caefd", + "s": "0x519a25e36ab9ada3ea9edaeb70a11a3986c17df6b700c681b221f3f30cb7077c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0554", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7f9634cc5c85e9148e01352e184bce6ed25d64e3de3c3277313ce33b12f57d23", + "s": "0x700818ca28c5e42bcc7c8521dcc5492962e5cc3b4bc68fef462dae382b9a3caa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0555", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xab8d0a8488604bce18f641ac9cb3d26d39d007b477e375cf88023f1393c9376e", + "s": "0x24fd1dfde1da5d2763cb24b30f83c7d56d4857dc10afc999824d4fc497df8935", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0556", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x644894df9b091002b5c655b222c24efbd10b318334dd8300929cd324b5fbe71a", + "s": "0x1a24c4eaf6e8cbf13f20529b314fbb5f76be22ca4d4f7e0281dfc6c0c9c38da1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0557", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd5ec1d28a03af324cf2cfefd3d8b5e43762c102a19e8684da35fdf9b3ba09da6", + "s": "0x3bb023c9580db85d50ef969b3bb0b488dc7b4be87058068c83890ad29dbd5574", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0558", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdcb4178a1f46f6ac474684209466fb7a8a26361d2e6cbf9d8c54ea8eaf637f6c", + "s": "0x6ebc23b6f0b461c4a497f597348665e27ac064935bcdce58a4e50cf1ca3f758e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0559", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4e73f2fb486c4e10ad6be2687b3c4ce2d9623a8cc573a37f0f0dae56df813965", + "s": "0x1afbe59a5c9b57075685fe3a2b669e6c3c7503aebc9ab3215805d641a9319d5e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x055a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x241926c1e29c29d50cd2e8375d21c50ffec9e180adf66a0905073b0554ea7ecc", + "s": "0x1e8da5951ea9bf21648a7b4afda6047adaa1911496231032e3f3fa2de76914fa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x055b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x79d700a77c284dde35fcf49984a67e442c5c54fe35e17030573ceed68e96b41a", + "s": "0x363734c89d17524eba2f7abab93212f47ca9c0aa3398ba654046c7e47903b638", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x055c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8c244a01b793a29316347c5bb248c87bc59aff74e02f7b8ac24981b7bbf12f1a", + "s": "0x516309a0407e1c567be908ed1a0d778ca78fd5ccfaa70c440642b06e2157ccf2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x055d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3e7324f1fff0a38b27ec758836cc787017b9242e6cb6329540f587bb83bd9f39", + "s": "0x7afdd64e690afbe74dec73c99bf47b1d6b6c8424bca1671a35f4e94694fd5289", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x055e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd6f42d4361520a0bcb3b3ea3ebefe5a52418ee7a37bd1d81f47d9fdcc81aaf41", + "s": "0x5df08175afad66d1e40e8019488c704be3b624518df6e04a77bf35f9accf47c5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x055f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcf10300c2edd727f54118fef49b99732f9afc9429db016f3b81c81ab48c01032", + "s": "0x572c8d470356d720086b7b12de73a63382aae03ea1eecffd853c916d7920b275", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0560", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x404e8afa51117ac2f5ceb3b65d843e0aeea8b325f67f32b9263e37dbb3aaca36", + "s": "0x221935466d87d972e54de2033dba588de3a02e11bd61263dd4b4c94c4cb7afe8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0561", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x24f821d0258cd4a83c66cfaaac36a0f2a7f1bfd95a996f352853826a79742eac", + "s": "0x69a5d60eb941672f97fd1aea7a7e1d2ed7d800a47045ce5b38dea1ad79d04518", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0562", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x425a8b057c2f421f1f33456ea972671e36941ae5e2c51be1a388cab74a7a6321", + "s": "0x2ca14cdd0740d32ad468098e9bf8edb80f27a77778e6e85f2e813faa5af53759", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0563", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd993847037f00d4667b0ffb3c089c7699590484e0f873c7fc59318faa597c03b", + "s": "0x1afea0d1218506b7aff6fa603a52775956f2842ae1c02fb0a2502285163409e9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0564", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7db19f7116ddf6a94a036a9b046ef8d4f47313627eca20f0fa578fe603a6c74a", + "s": "0x23a2511e4189d8fbd30ac2ecc0293493ca94c7e4375d251b1d1df93ff96a30f0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0565", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x12370cf57c0747e6cbdeba9c78d3342638e05b1a3219841c864e16d690ef54ec", + "s": "0x41a8d7d8a11a02c11eac4b8f2d9589a3732ea4bf32ba9442c7b05da6a078c9eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0566", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc4dcda32fe0675faed68b628cded7423dec7a9bba9d37f2a6846eeba04f3ce29", + "s": "0x4bba425b0d131ddacea79c55a7537d852d2a4a77156b01548d9f58ecd298db21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0567", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd4ba1b5f07a1ff0be5d3b034da8e931f17ad1b58939e2f08a788f94681f16811", + "s": "0x45c7e4d91f362470e792e3e84560467157e8da80645f8ff3790c2f8be9d0a93d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0568", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6631e98e477133329b42e5d66e1c7f33e4d6770226b93900295ebc7cd1719493", + "s": "0x280de25446b84bc9cb19127f301b6788dae770e93d6960ec1859f56b39812a50", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0569", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3ce59723ba1346ae60b048aaec7d8c137a2c2c9b56aefbd39e7e38b2d73b8c4c", + "s": "0x10d90e703245763284cee3b5e752f205a01bea61ca735212ad575c946f654ae9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x056a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1d93b6bbd02915e4edbc7d23018d52363414d5df467c35d4302eb464568d1fcc", + "s": "0x7047dac869d2c7e6c21686d01b85f1cee3ef68c96a7ab17be72ab679872775d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x056b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3614cdd557549dd39b7009672ff966f2fbee1a9e7bdf3495a26def538f201317", + "s": "0x569d12e26fa027c2a18e263bf575fcd32b4d0841854591a68efa6f6e7333b631", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x056c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0e3c4b02d563eea32d8b42b411571e1a16eebde582f6becfc0b6b8663b095d89", + "s": "0x39b52d7893b45dadf704168d651e4e9777d02e14c8b768ef80292dd9946b1bd2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x056d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x39cb9f3907a744d2af62fc16d8afdb0d9e62490b4a278eb07c3558e750671c3f", + "s": "0x25bc2fa9028dd7955bb0205c8756718f56cb67ebe59e21296612bc7219a7551b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x056e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5f26693912fc46e3e64d51eb87ae71d6194e7f4b5676325ac5d9eb4fbd1bd63a", + "s": "0x671d59fe5066f2d6d450d9d024b25cbcbf7c859ce48580bee64905c747b00193", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x056f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5d7b58d0c1a9da1f81538b1e44c969d034d887394ecfb73e2b28550f67abf3ad", + "s": "0x42b94815d1a2e949edd2a27daa7bc2c6fe69edad611936893801796b28408569", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0570", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x24ca4634de9ac6fb0ca74e6e4ae3d963507096c66aa38c6fca03cc6fcca56d8c", + "s": "0x12e1723196beb1d3d978b59e48f49a8ea4fad4300b1c43df5b5812bacb8758e2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0571", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xeed2433ae867b16f7a87c6d78388f28a0f96323fec60fd87c2f6a62cfde332d6", + "s": "0x65320bf7afe6ace842baa23f7898f66d9effebf550bf4b058b1980d8dcddca5e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0572", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x54bc998dce920f65b9da10259c37139f172e54c3e53ac328530b733a5bcb726e", + "s": "0x5e28564f5471fa79233b1785c48039c18f59c712ce4ef9691e880232c4e62b6e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0573", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1bfaaa58b934b3785830205e806238d9a4d953f5e4d42626105dd0f24018367d", + "s": "0x488f06e2a897003e630031194dbf1f2b94947873059dcaab7c3c6a8afc2db733", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0574", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x934a03ab5183146b1497b132e2bcbf689dd7578cf9de7785bf779e78f3facaa4", + "s": "0x6786a25bc456ef4a04a5c686304dac6d94d3cf4e4860a68789cde1ad397bc4e1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0575", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9c41aede6b856539fdfc78cec41e9774893b4e512f53d1f1c1dbe583ca69b2b3", + "s": "0x7e510c401e54b024f4dccf73bc3f6d216b830b8bae6f8b39c1439839cf7bacc9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0576", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2efc570f1875d16c97a29844f8a6db04b456cff8c96bc25bc92f5d6a77a43d87", + "s": "0x10b169f5768cd75abc58c8987586ad77a959bf4180a64b6a8fb44dba771b818b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0577", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9d2a2168fb89511544b140f9682d01599e1a53d5e5b09cc72e7d100c5cddfbaa", + "s": "0x5c0624aa1c80f2a6f844b507d62455bf9bc395aca7a464b32b3119c0ffb4f992", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0578", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5bf90d198a9dc791a7451fea7679050b8bdf11c35aa37a3713be7b590b0d8af6", + "s": "0x275b0365a06e569a71a95ff3d24b47a4b599d906fc3d676ae51ba8c2cf0983d9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0579", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x72eadad644eff6fd747aaa4c24114c8f44d483903a9eeef5d5a2e728f56c8fc4", + "s": "0x3be180d690fb648e6f5f7fe736af888df54924e6392aecc548b35feaeba7dbae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x057a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdc823b7d6d55a50690eb78320c7c9296946d1e5e2796613ad9366d479074eb09", + "s": "0x6e2c247032cdc207f66c2eed95507be243fbff330933f9d4fdb0fef6ec3a49d7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x057b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x41abbce89187c7d02c7fbd86ae0a5cc2736dee1dc21c69c39cc410f461edaefa", + "s": "0x3a36890d43f35d6ce14a11ae6133d66eed6332d9f429e941ad728b61cf7c1585", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x057c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0ba121fffacb5e97b5293694e009ae438244b7e605d17418923a79dd4c89fe91", + "s": "0x2fccaf71cb40d28adc44aafbc84be9760e33f453e949ae0fff68eaa646f0eed8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x057d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3dac6550b4fc9ce78dab83db6ef22289149e32b3f554605cfe1add704925338b", + "s": "0x751c6e7490f75108acc7323f58c908bd7da3c5ec44d0a438605d72f0b1f8148f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x057e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf5a34c498c8c5562920c03fffbd93099f3c8887f91bf365939720a00777d140a", + "s": "0x42db7ac88361ea17fff36559868521641266dc844c37764de25d04486a1c006b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x057f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8b0252c32e6336b45a2b48c6f15c00b596665f3cf1439c380f29ca074dc8de64", + "s": "0x20e3280a283aae70a109b64049aaa232dd260e0cb311b21147cb1cf1befe286e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0580", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9b55d31e56ac156fa3630a656abb75a26f0ea9f350c4ad44fa114a347418c158", + "s": "0x0a574d2b8b88df139d04d59b4e51faf78e00411bfe2a1cd29d4da7295c0505be", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0581", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xceac1394db4edfc1d8bdb9c5e81ee3d248f28542631970be14081de03f0c5309", + "s": "0x5fef224235cdcc4f6dee778ac51e35fe6c579d7f6e6ee887b99a30b147522200", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0582", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x96a991783f508e0e1353858d418323bd8f42c7e48a4767b185d81c751318f3b5", + "s": "0x2ba327f0c1f4eaa313473126962c39835ac452899bfe97e00abda17f7a8429ea", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0583", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7f8a04e75c163f7bbeef03d0c62c15be52384a9187b16fbd60fcf95f3aa0c2d1", + "s": "0x526c0c7e063bf7530bb71c39895fed6e5430b5d2c376f9ff105a160d452bcb2a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0584", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfe6fb0afe443235c1a561e267f3b089567eb1c4431fd535450ea5c1e9cdb2f42", + "s": "0x1b35312465e0a330ac0778fe27506a93c2345b9d84ce5fd33ff584c575ed8c54", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0585", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc346774e8ff67b9db059f0b75b940de8a13649602d8d3b5e1389b1784745de7d", + "s": "0x620a97224e90bed0f431fa0f9ff3ac9a94fa0f682595d388f9c4f359b51208d9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0586", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd23f5d604c1f241dc7e21d2421bfe42b0266252a3d58754df8d6e9dea9b65518", + "s": "0x373e54837e1ab1d24272a811fbf1afba574ada5757fe7caabe0afd3414f88a5f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0587", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x08e6f3352c3a915b194f6bfefd0d14f9ec34ed3179c4b32e144813feb9d96b2e", + "s": "0x05a0650a786962677957a2105aedadff28a9e95b754b1d4465213bf34611c699", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0588", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6d83138341580727b9d31e1fb2911ebb59fea474166542ffff5cc88a6ba05eed", + "s": "0x3b9a5e6bd86ed9e5370c124b362a47db688669af5533bd8eb9a8ef3cb4323027", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0589", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x08cb9639c70819e4a17ac7a8274fb140ff54a6aa1317b5600fde7ee05f1eba76", + "s": "0x697e1c02ef3624938d151fa672d4ab73eb0291ff90071ff37ff32e82a0fc5ef4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x058a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4a6b27180c2931027229bd42317eacb9f476dacf525884e1a8a0cfecaabcd19f", + "s": "0x581a685d12d640b86fdbb94259cca008da3d3a4dc69629bfa4e82f6c45cf652b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x058b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x92fed6780050f27c4e45a403eebfdce30ffb37eff3dc825675a375a9b7ee7eff", + "s": "0x3930c3e7264f786623e0d34e2ed646126b984d09fa724d1bf5b54080d1ba028c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x058c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8c65e1b3be5df409d07c7ab92f659588d0b01649544b036c70d5672c65c53f09", + "s": "0x29892283c3d14a2bd548e972c51294741c602f610e6b30dc73fc1fe4a1616719", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x058d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa0214a1ceb053b0b47e4e93838b52b2cb97644fb7b70c31e810ca6017382d7b1", + "s": "0x2faf2358b813491354c9de4fc348344f1ad6ddf60338d63f937a54bae146b455", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x058e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x856893598dbee8186e4ca4c71f74475fdff25128686d6e771df296ec6bde8831", + "s": "0x16f57145423b52444747ba02247be1865b568fd4f11554dce4707673223951d1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x058f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xba885a4c6a08371534ac15ecf2b58769a225f07addb1217db8d4f488dee9e85f", + "s": "0x47ba1fd2b47510c2d5bc1ddab967291d9a9025d3f5e5c9edd6f3da84feef4da7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0590", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa333fdafb450317486ad7d8043ec182ff169475e3c78d1bc6c1c04146f710a0a", + "s": "0x6d6ab7863e0f144d54065905ffbad43194781e25a84d0d86eb0b9e427bb3bf52", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0591", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc1413260fdaa1ee8142cb949f061fe73d41847c6bd8ca8bdbd021012c0b2b7a0", + "s": "0x53daec90c758275664a73bbb06f4e1b44caac908ed8fdb7d6da7ea5c1e655255", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0592", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x623065a05755169170fe1a623b31bd45b99b71bdcc394e5fa2e5662f397f96f6", + "s": "0x165a7eb39cddb571aa1547eae2c25ac88709737ad98a44093c642d2b277f60b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0593", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb698e963b7c782c04f72714dc85389031a6b478db1c4e8665dfa844525cf453d", + "s": "0x1404ea28fb687b4acef8ef5927f939c7ddbd3a6fc8a11421197e4a220c561b78", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0594", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2a10f7ec4efa44206f81f183fc4df4183566c912bbea4ba2e17efa489d6f4607", + "s": "0x6a5bc1d6e098c93870b2e0d1c15a7f69ef783dabcf3cd80817981d5ae262e680", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0595", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x90ddb95ae6c16c4f8151ee0af5133dbb04a53da3ff1653d73fd2f1305f833344", + "s": "0x63f61e952134c1724e764898a36c693dd3437a0106f33b8d84df22efc44fe0ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0596", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x063e1da5f0c409ced750b001815a10610bfc61c1790e9440b517610a4ac460a2", + "s": "0x72b8decb824742643a09db4d2142f26920e49814fae49f20990f97819d9aa67d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0597", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5304f56c4407c4a62d4045054bc8690c48264fa1c1c4053d8fddd7c99690c541", + "s": "0x6e17c279dc221ed1ac1fd8d284c5b478ff8f6525fdbcfe0769378db74a9ff5af", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0598", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8d1def2cbaafd0d623e3bfd2d4f6e5c5a54e1905cfdcdced15a458c6622c55", + "s": "0x2917ac530694bb7193756e5cb7acc9c9402ce756af612ecb2358c3e94d9afb9f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0599", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6e44ddbd8f0bac6bb6fa23ff6409f68e057166675053f8759165933385b27495", + "s": "0x79ddd2f83e7f8002ab623907b9ef987a1ddc7491620febb2f9678c78c0c735e3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x059a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x76e7a4d11f45bd73f4a37343f45bd6071ba0eae7a28b4971b3463c42f9570bd2", + "s": "0x45babc052409f64a4d364d858ff235703a5f0f1097cb72a214a48107783dd0b9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x059b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd8280ceea400fa798a07fe0a3d77b0ae2ee76d0533fc967632da1843a2445a96", + "s": "0x733e837d09697006a6565bc8bc100730ed7da1f78d92d28ae490c4228bb1ac55", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x059c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa7af9aaed201af63849d73cf1dc666f33418df121cd37bac126866025a22f965", + "s": "0x60c9ea919bca54d2b5e0dd40c6cad1f951bfe98abb39590be5342a04aafeaf13", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x059d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf1c33db0a2d37eeb660f29053c43c9745d04e22374c18b2e69c623bae8e47b70", + "s": "0x517c3f667bed6818b3d840cf4a835e480e24fc6e14b7e79359a955314c806bd3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x059e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x97e6033f891e29a01e1fa04f2f3feebb0a238e9dbe7b8e9834dbaed4d5c951ab", + "s": "0x3f66b74c23b48b106d7f26d44142e9bf15813e3f5a05006899ccc9b06ea36b3c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x059f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5f3ba013b059dad52a4307c1e958f485959c0c757c496bca1873e2de7b0f662a", + "s": "0x52db931bdd4c357963fc148ea7af8af451bbb21cd7d99104d262c11ed7013efa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05a0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x34707753e269d7c1ee2b9c881a86e40df960611763cbebc478ad97655a2240d8", + "s": "0x0d55dad95ec6d6011771b575ccb0114ef10f36cc34b8b9de37c4d0779d01d3e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05a1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x15df90e0e7c9eaab1a5f395323609979a5a9860e1995b55e1539ef496e097d21", + "s": "0x36cc9d9478f6e55e8867ec8f5dd3d0742d240113b942e123a98b8ee7de096ba0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05a2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x593deaa169f7816c576a68cf15052f6231d40e6b265c855c2058810391c9b21b", + "s": "0x5e89b7c1af76143b66e4ebf1b7abccb2ba58b14d3b81411126a6ed8bf7a48ce5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05a3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5a6f941242c3436278e0d3ee3af9d652e738ebff56a2aff9055b510fb0723f2b", + "s": "0x0f3002ff4297e270427fa04665b321e91ea44682fdf3fe166044a26b17cdb752", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05a4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9a71ae5bd0c873b00c27a844d5bd6581f605cf1813851a6df87120e60274a759", + "s": "0x28d570e85f1ad9509f68e1bf8746edd47f1ef7359830d5b31c262ff0ce83450c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05a5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x18d13943c59c174cd2abb45713065666f7781e6aec4aae361028d332a20f6ef2", + "s": "0x5019faf8dfa4d4a13d9f69f228626728bb7e3e295ef8d32f83c3065ed1b27aec", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05a6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x231b0d5a3e4e897b176f5bce29a5ed4c3f4f1e01d8dac9716382cc8b99c6faf0", + "s": "0x2c0cfccdc3a02af9815d724f65896a397ce5444af433a52e6317554a62d16c65", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05a7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x989e9887dfc4461dc0a61d5f17d83ae76253c19364e8438eae6a444d37ef90fe", + "s": "0x3ad6c00e3d750c878c37dd6bf8f389bb6e84dd09966b3be84b81f51aac299529", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05a8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x44fcc4ee212645b6aa5e216c880cad0404d52a25057078faaefd4a13b7ab81bf", + "s": "0x0848147714b1e604bb017cb705a4a4d16582d9eaeabdf313a8a57c99d752d679", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05a9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa248d0e15be4a54391d013d7d21966842176f4d0024db95fc91f47f8712b1307", + "s": "0x144f9e196fafbbccdb3e4b547af07d9bd283166c63b0ccc065f8aba222fde363", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05aa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x049739b06a17e3e55348661e955d4a11b4ce8a6bcd7e193ae2bdb5fbc7d07e07", + "s": "0x313c8dbd00e08a9e7eb1d5ed982332ec29598467e9d4cdd7fe6370252aaf9692", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ab", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xebe2d37a6f3af7aa235982f8832ae31484a1eb85fec2ffe8a4ebc0dfe543ee9d", + "s": "0x7225f8237b866a7386296d85dffa6ac5d4dbfb490dc68ba34ec408d9beac263f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ac", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7988bbebe1950b7b04ccfdb8bb278d881bffa97c033326a135a334bcc0b6b994", + "s": "0x1758ee3c394dcd4db0b3e26862d8a7dbfc85cf8f886b3e88e8999928dac1ad1f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ad", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x333dfbc79d6ecb387291ad2fc28ce1706f596b9dace3a2eff70889031084118d", + "s": "0x0ee161cb62764d4fdffab6cd30df40bf490d97cc87fc1be7e95ec40018640f38", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ae", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc8c3b7a5b24a238edbd1cc35c4cd56a99dbc70c06c72d9b14432d7fa8972f18e", + "s": "0x0bddb72d90125899d05d73ae83645c0654772c890119e205aaddb4c9cd8f50b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05af", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbc1131784771d60d5fad29fd0b579d419dcbefbd698b01f36b8a1ae400a9c14d", + "s": "0x2e7940de61f31d723ca7c87d91ebc5a2b7fb56174a068f15a86da3050e49258d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05b0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcb747543cd059f8f48a0041f1b5437b5b08ea2e52b87b283a582feb9b65e41f2", + "s": "0x16974ede7fd6e0aeaa0a2319bc8178d8f42e804f780e6e3255f1bf157e4b98bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05b1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb5038646a8aceb9d36fe82e67e7dd8d2f52750270b04a55673972341cc41c566", + "s": "0x238e0cb4632fd6835335f7e4599b4019cb3668d2317bdf57cfbbcd5990606a43", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05b2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x818666bf5fb037d55ce8e76f8f941510ef06e17ed41aeef198b79252d69dfc97", + "s": "0x043988cbe1a32a2424a8eb6a09548b100531f6d7af0800fef9b73a5a487a0470", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05b3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8d530a07c34ac477bd10779aaf3a1709002a407374e892b8c726f6a2e9cb5016", + "s": "0x63199d97f2b1182290e78eecd42437e2922b3d62bd9892f659aa547317a74d02", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05b4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x999272265e16658d737e7bda82812df27cee125fdc56df584141cce48b407478", + "s": "0x7f91972b8e898a53487f7104431a44534f4ec78bf7f95d430873bd1b8aac10c8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05b5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa1d14e901f6a8e0bb2db37d7a50dafc23a0a740be61dc998bad4adf67908bbd8", + "s": "0x5c6f48b50b37e9f109e18c328a31b148b245e727ad451b327e8ac13da7ae348a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05b6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x44fd9ce8d8345afe957e6e22fbe814925bef9accd5f01c8fe76f2b62e554b039", + "s": "0x03ef7f1119fe2dc326895e624c938bfc59f87ec7b592931a73cab56f7b721a70", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05b7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x89e92f6555a3cd7b03d3dfef741c5d1989a6517739705afe7dcb2ca09ecac794", + "s": "0x39a4820140a6e187f7d3fda12787d82db1ee01d033b1364b5a2d717d355caea7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05b8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xadb92c20b1e5c80ddbb99976bba1daa4b8d318b5e3d99830ed33035a99c4f6ff", + "s": "0x337e75500d9906d9b2c6e4b09a45ef79ab6f85b1dd69f119225ee76c1b363ede", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05b9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdca06ce4cea35add203694370a08c768edcb38fe6c492c1126cd625b2c66488e", + "s": "0x5f5fe8ea1395441c95bda4084bd6d92930486ebe8635776243ee1a09c1234166", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ba", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x037380f42e5a97217aa56cbd20e847521a1a2b3038648dccbc97d9597bf97088", + "s": "0x7db93b707e9c52bc456b80f59a6fa758df971301d2f07a419ae3bea769ad31f3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05bb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcb49c38a8a446441d824a4e59ce5cb254008384d61e7cddcc8e9075b394894da", + "s": "0x629354ccfb918e69ef243ce77421784e24b7a5611866372e77675725185d45a2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05bc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe93e3999770973f6c79064b09b4c3ad77789bdded1c3dc03240eaca76618d6ff", + "s": "0x22aa0cc2ce5df2afd94be6efbc49a734dcfa15fef39fe359377900c9bcac01b4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05bd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa0019aab8a69fb2290fede8b11b7add59acfec6f4f3ef1c635682c5a948cc0d0", + "s": "0x5ff85727a7c9591b91f9a800dd8f221ff6df3d99678b9c1e11bde5b0220e7a74", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05be", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x873bac0184be305dc74c17b8f8e348ae3d5fef33133eb17e5f1e05f2da1cf8d0", + "s": "0x5131f9bd9d441975465aed9edc6bfd02c07e7857ef4f156622ea3e205b0b8fed", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05bf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0ef3e7d71799210f713801c0a6ad9b3988a88c8fbb3d7fc28a3d6356854fe7e0", + "s": "0x55df668d1f3ff2d3a5b8585b8622241729b0c4f7bba04d1d2debfe050b884572", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05c0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0f017ca0ed87cbcefa96ea7bf8dabd49039b3d4310958a9090717313957347bd", + "s": "0x5f07593314e8b206ff652ec8cfa57ade41ddece38778de7a5e883cc9660ad795", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05c1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x055e9cedef178c9044ecf6d0035b55a96df0253964d6462213e1d1384876b127", + "s": "0x3f122b9e4de52dc54fea4306da0fdcec568456d003dd8ed4fc3e81628f7470ca", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05c2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0c76a2bcbc3676aedd4982eb8bc19644e6666dbde04fd7ceafeec79322d6e013", + "s": "0x12d8555c002023f06e47dc478a298b8ebe903a6ef01a93689e64d0a3951fda39", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05c3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2133b976f01286c0604108cc7219eeb3502a54ee09af8590567de0dea7fd1fdc", + "s": "0x3d66efad614334a2f0ca887f5c118d6542d3b4a63a19a8bf55bc05dd2a9a5736", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05c4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x04e6cc33736d8905c19381e6cdb16e8abfaedd66f09729438f91a32801e6e684", + "s": "0x1a412f74f6b0aa3c23bfac1d7842f8157a6f4bcb364ead66b4ae091e08f90a4c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05c5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4ac81d42e8bcd90cd1410217d5b7737eded3effaf9caf6fd55f8efd581b2da89", + "s": "0x412016983e064917ebc85627150796c7c2061d1fa8fc1e1d9cbc47caa44b3781", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05c6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x66a5c7db22d2b5a614ebbcea87ec412d4b2916bff634b426ca7484811da472df", + "s": "0x1bfa48f2ab9c3bdf7db3c784aba8668a0d69287be5bd4e07a1b7164b36e876b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05c7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x154734e2a21e19d2df6bef5d3afcf1d7928aaff70d99fe3a1e32809aa5a874b3", + "s": "0x5efeac94c67e0b48f6bd2b3fc35671896a93d495e1fcce9fe6da6feb65f2b0f0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05c8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x445be77906d0151c2b09dd76d783653b40553bd79795c6a625d85649b1d300e2", + "s": "0x46f40bfa1fa9441b8a92776a3ed20d291234e715a74d8db79da3216eaf99f8d2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05c9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x665f67a2acbc03ff06e49db57311b99f1172c295d291b7b6723b752086cd80dc", + "s": "0x04c0c050d3134f4fbbc49172cefc5eb761e189930ea482ce99d668b5f991f32f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ca", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcbfd1fcbd5daa1fc77df9d58ff76b411ea075f0ce35d4719141a5ee1a65f4f93", + "s": "0x0fc54c9eaeef136f5dc063de561ee5a820f44b42c816e6d837ff458f5eecd4de", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05cb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7b3395135fb9b4c0421631e1940d45aa196f633a9abf82ba18810e18e6d1d122", + "s": "0x637910a2285d09799b640dd1e69998676a73ed5e54dec42393ee6460e82dc492", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05cc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb5a14f47290ace8cc3bee37c0b2ffa7f7b5e8547dd6b3d6a4e0cc8a8342e7005", + "s": "0x773f9049e4ac8a5f9cd967631a78d4e53fed5a84d235d73479983d25276f8780", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05cd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5e7b5d50c284d9fb5c9464b087fd4c29d5539739ebe56028076e1c0fa1121b02", + "s": "0x2b000b62a5a37802064d3741a466bd752407a2be91c4cf9667ca934ed36112f3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ce", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4308b1896eab0c25f710b4f91cb3cd7bae669afa03dd0e7360dd01ebba4f38c9", + "s": "0x7abdb2df4d9b24a50b7f8a56b57a0a48ccdca7c02922c455482ab179526ecfa2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05cf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1d540f5c08bcebdd9d69e37d7a2df365414dbae0ac5a1fb898d3c681f25f725b", + "s": "0x1beba7c0a9b4053cc07bf9c20b2078338d19d5119811e4d660e72a7d11fadd69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05d0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x355eec195d1493121947a112a17a5406f4f7b00c5b3fd8944c21ab1d2b6debd9", + "s": "0x46893bd28d3b22a0f47bb76ddaabe3ea1245cc29c53a4771f179185face4025a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05d1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2c314a994a7141242856cb941400db273af347926dbec550e9473dbe74aef095", + "s": "0x07b26a820e84d0c5a625267f119dc21b57261d2fb63bcbc8bcddf0d4450e8756", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05d2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa37ce18bc0ad3ae4eecd01940ee2807fe4672affc6a5ac75fea4e2e733427467", + "s": "0x391b4d96a3fdd44318f9ea9d62bf183ce1e26eae00509d730310b8ebcf7920b0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05d3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe95dbc4649c7a5cd08073c74418febf86e1336e1978a0d3993e7b43e64542ec8", + "s": "0x2674f29f384a8d09b684b2a73f688ef3829a15b5ef3a0ed6e488c65db6bd3fef", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05d4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x280748209c0df422eb955fe08ce0c39465b8227dca1ec84776e4212bf89b0bfc", + "s": "0x0882c6cfbd4a9f87f6065dbe005c7cee8e1b7517a99e7a1bc89edfcbd510929c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05d5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc51169ae803da5e5f2bbc625b1de6edbbf8b5d65fc0ca4304d06e051e51de569", + "s": "0x109a2ed0f7fa415984b31e39cdc7dc6961c5e85fa1cc524c501eedd62e671a5f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05d6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x98d19445042a65f88b4b77d5e21cf427c68ea4220f59f2f8f6c041643ae9f628", + "s": "0x7e97bfabd055c9288cdc987b96f7dc971ebcf6744d3e20cce4a95bddb82462ab", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05d7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1015331b08e4459c8d3e6e13103f96c4884745df2aaeefc8cc6d787f976d15ab", + "s": "0x5ffe123f7360be7f4c99bbec884c83cf31c448cdb76805004fb2a4124e7f907b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05d8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc167932334c2b0be7981bb751c959dab2a41d583385eab0c50b2995ce4bc6515", + "s": "0x7fdf151f82fd936f093b900e206d62cd78edb8336186735c5d52451c278bc76e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05d9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x196cf7794ed3e70e37daf3a8067f4b04edf00f004eaa56ae83f2eef79448d05d", + "s": "0x6fd01577dedf28826cec8a17902d0b517eabf85d96312c55870389b73720f375", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05da", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x21a41122d7897098cdbea0755389ebdd245ab0ad6e356de1b04def75e66b84f2", + "s": "0x15e601885798cbe1c0eb644a693e57c8b557e5ca41480b24e59d141f05fd1a5d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05db", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfbd962448762059aa7036e61b61a02fffa2f0b24e527fe82d04807b2fe8beb4b", + "s": "0x3afe60760ce8fd2ae24f0781fb9776d023a5bb25b4fa66604d72bb781ebeecb0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05dc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x34c0d85515dd2c0273af0cd3c727af6f3888800443f6dfa0938a32af25d1aa75", + "s": "0x6452e524aa9a5a57320f07e3869560c3c60a1dbdd728b37cb78760a03208591f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05dd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd291dafb3a2ba56daf01fc370632450951d8e46940792806e205c1a7f4fda56c", + "s": "0x79d2d031efb2a9fd950696c0836447d7c079bc760317f20ca21e27369770f0a0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05de", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x86c1f5306a0c3159258ca3456cd652d72d61dc6a158855445fdab6c615e572ee", + "s": "0x49a658a3c1225176d71676d6e3a3d0a8df4da4b413bd8497904e7b305dbe2159", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05df", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x14989cf20a179c51d24a4bbe851203ae1af5b1e301af7ac3c92a6d298581ff98", + "s": "0x4597b724297f808c4bc657c5df4635c3c542123808c2a35f1287663061b62664", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05e0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x07846b7b63568dffa545e9f1ae734b29de8f67c6ed2d46356bd827d6cd9d9f03", + "s": "0x3cdd8238c241382c5d23962c77b10327cb6e88275ce2f5e7dbf1778078981886", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05e1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x097e0e7ed597d85729314f6ecc07dd9ff5af680437d1289a1592cf5966414344", + "s": "0x1458abff2f5d85a256baedda3ecaa038fc5f5a9ef347d881712a3be9d1fc2503", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05e2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc5bd8dd1bef1d1133c582a7c322d626dc1971a44c4620e0a4ee9633d17b08d2f", + "s": "0x7de1a34ce280e3df3715f734eeb6d63acf0c846b621409b254beb0ff47b54360", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05e3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9630120902f222deff0d99e3c50280b522339eba6d3f6d86c61a1ac3adb4d363", + "s": "0x0520763b93b8df41dfce6c31045622ee09f4f0bcd2cd96fcdf69d4ee5beddf01", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05e4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb78325e1c43da7c12d6fa728cbabe424b2a15e964f6de4acb0244f9ba61ed9f6", + "s": "0x75055f1162d3090308401f2780706b76bf76ae2c0b38755c57e3233ba6c1251e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05e5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x15edb31ac9ed092708737918f565c154acc2a2b6a0aa052ff6d4652f0740d3fa", + "s": "0x7784e41cc8cc6b48582a405399dd9204184da23f7e006e68ea1342eb737f5811", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05e6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5e80a0dd2884576269e086f90601ef7f74cf38ab1dd18aec3b6cb30e116ee0c2", + "s": "0x6cd302c1d6822711ea6116ef51bb04ca7f3616f061ac62e8da721f3373587652", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05e7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb0e3c62f3c542406e6712049ecc0e41128a14a78cf0fa93c503e02c33b774bf0", + "s": "0x1f9f29b8a45e07edd584c7ddc7b3765ac717804894987e4c69d474257a18dd3c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05e8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8f00857df45ead1592fad456a3b10e365533be8a623cc698be67fe6079b23db9", + "s": "0x7e65bc69dda24f7d6629f5b963393f87194e258195b933e19cbfdac7336eb96c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05e9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x695784a3d7f342c1c0794b888e901755bd410c9fd20e70252775b8ce7134d32c", + "s": "0x26f377a9ec408d230193f72fada41c7ce1f276282767501a292531a937b7da60", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ea", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4600c7a120fcf3e686e8fc45daa75d2fc30784467fcc6d99381dd703b0a0524a", + "s": "0x6b22076aa82b0fb3d46baff97a311be8e752865f443b6486d07b95e70c320d91", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05eb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb3380b534499bf6bd62c4bd3524fb8af4062289dcd552e27bca9d213800e6c52", + "s": "0x5c06510e822a1afca28c90465373b8c08543902eb230891dfc2b0c531a8d2ffd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ec", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe3b713b0ad25d2e70268b43a6837d681ef859287d1aaaf4ca2a142d75e20d7d5", + "s": "0x2bedc2bc7f23b9d02542cebae53ccd4f26c4f805afdf617f87a791eacdd5fbee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ed", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe912350c9f5c5d203642900686b5ea36ad5ce0118e4c5508b076a7dc3cec0f8a", + "s": "0x574496a59a1c373c41ca2a1b439df1088f007331776a323b8e9eb1f716431777", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ee", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd52a943af819a3d6a3b673e34d62390c129f21ea997e1f88608a4a590c30bcfa", + "s": "0x1f58052c8175156f06bc3cf34fb8f17f3f137c1adbdd867f84c6c3022db08ff6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ef", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9ef299099f8b7951e7a4ef0bef1330cc14f4aaa278219c4189e75c66919bb39c", + "s": "0x4da1aaa286805b40150e37c55fca59439e3b2338264a934d45d1ea54b605bb64", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05f0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x73a084d7e7578c3f23af534a2d790a478ec63a881537d07d54ca4045103d17d3", + "s": "0x680dff98219686dccc09977a0f82d83b6d03bb00faf0a38e45a0f9abc44e6732", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05f1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xaf841b8c1733b6f9d14185edef98f7b12fc76abf1788c657927156e44db0cd50", + "s": "0x157e424b3dd40af321344fdaca23747c2510fa9e4ffc00b6f3e8188edc06a354", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05f2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc37794372f0f02bf95e741aacea93b105f6153aa301040662202848d9bb477a8", + "s": "0x7939fc67fa05ea5a6cca788286922582b68ea8e75c442c484d598af0bc06471d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05f3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4e362b4da4299757ba8bbe136e9358032ef211057e7ee7c143dda3d0fb232c12", + "s": "0x4e9c5b7c17057517f96f44e520e6780962317d6b3099ee02f5c704bdcb8a8e6c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05f4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf511f72bacabcb8ac68f586648614da870bdac615a36424a7fd890e14ee93971", + "s": "0x6bc74b92169896226deb3ee3fcfb60e6750be869c9344dd391347bd623c6fee9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05f5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf4d3b8b9ccac0add68f3f285b088eb14ae1b68bd69811598dd103f58e7076134", + "s": "0x19cd40df03e5eb8eba33980736093b65e0130a376c3eb2e0215c42ed6abd7cd1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05f6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf4b77c7c72d00d31b377f55f4e64192932678a3c175ec16f0a92452f9b595ce5", + "s": "0x39216781182aa01885de4d665bd8d61ab85f2e8bb0f0e91ffaf2434638b0aa52", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05f7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6498ce770eab2ce12203c78fe1ea380ad610f3a65fca783ffc83b07bed98d717", + "s": "0x7d17de1092e0bbac120734261bd1dfec4a5a339243a4eb9d10cb98d90bba3532", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05f8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9cd889c6a62444ce6505de65806168931cda136d7d538bf95b9e0bb00ae2e041", + "s": "0x68e1d3f221846bab5961ae584e725c34ed08bed60a49b2c467480b56e1350181", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05f9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe4f7640742fda2d98b886450ccacc25dd13b87a8f3b7c8b7669a372bd58476fd", + "s": "0x1124506f46461f4a430234c70571f9ae4116e541b9827a9e361273b62b9cfa01", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05fa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x61232f5ccb058ed211043aa046ce87876618b9db960760fbf302644020753b63", + "s": "0x09b5801bb6a2db5d9a2184a746675eb14e45e86ce278d1d752d755eba0b946c0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05fb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd419476a92229e325968c95f295088ae786d6fe471782c476739e1966862665e", + "s": "0x7ff979f14406393c9ac8ebbb1b2124cb981855086abcfe7a7ea7520222da416c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05fc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3d98ddf89bdae11331e4bd556d48e91877582b1dab2ef511bbefdae3858f733e", + "s": "0x6e7be8e4cf3f90af1646a0b597e6bcf5f98bf07059dd5e411544edbf1e6eb547", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05fd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6468df42fb6538fcb4e35b8e6ec7ace8a44be7110e1bd23b8d57886e27994b91", + "s": "0x3da2aba01fcb4aab91f98303fd066f21322f0df72b275f22941fb4efa3bdf179", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05fe", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6749961b373d0385feeb3c6355b5e10950fd4fd33b24e24c7093530f1f0f7a29", + "s": "0x3f6cffaae756f1e2f59a8a6d4ddcc6618987375d9ce32045680d1f8522611d70", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x05ff", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8d86205b3104052973dcb15bb3a9ea6cab7f6716d836a519fb298b06e6d485d6", + "s": "0x47be8d9be1a8d218efb230544fbe1a56aab8477539cad26ea97c8f7f5a794caf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0600", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xca633c64435000aa1b52c387dd0508d3d338f842fbbb657a8fd0986c40614e10", + "s": "0x04f8cf7a6759c608a9ef5b57090cbcb937cd78763630f29053cccf8e092d4071", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0601", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8b1a8d450330900082c807f8bc4b9c5ca5fd3d50f1803eccfdbd169c89ed6924", + "s": "0x17abbd2c24e7bf82b4f4c50d1d9249aa91aee9f9676135ab3f18be969e7a7684", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0602", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4adc27afbce2aca550f3f4e6d7305e2bf9bdd77b689cc4b1d50026bbaf3c209d", + "s": "0x19deb29b19a2622ddb9e04b05bfa628d507adea594c2102f6b78e6262445bb20", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0603", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x42e053ce21d30477e665d20e6d0ba3c4e22754e865da12bd5abfaaf606f16cf5", + "s": "0x27faeeb2a4f37ff571dc8cfdc6c3121576d0e9baf4e390e531e0947a6e23e2db", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0604", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x163123453055707fa9c792b68351c94f48b7f73e7424c562b6e9c083becf7a99", + "s": "0x79824c977e82ffe9768af8d0fecafd3d6bb28c9ce6526c2b377f70a09d640f28", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0605", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x94ed9ff2f4b49758107a1237663139ab0e535f2d6f09d45c9ddac5a279dc50ab", + "s": "0x5cbabf9d54906702205a3dab69a441896f95e5e0b3e3c7ab5a8bc5963c2c6d7d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0606", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x47f1ed0295f7ef4b6dd6da69922ae47bba364a419fd37f378980fea2d95c48ed", + "s": "0x53114b834158e73b3395f4726e259ca460e887b5005ef4b9a64870cb082f4ae4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0607", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9da3445a077799f760f7a9644911b55f2896e5e490f1cba667abac25b232bb7f", + "s": "0x6d982e01816b870567faddfcf80e849160990aa224b55ba0626029e2fcbb10d1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0608", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x49021cd57a3d4b2c412b4f92434b2ffad1bebd0f74c90b70fbd2eb2820e6f349", + "s": "0x781b78b6e22dd54cdcec541b0facfb65e2325f9faa425c03d11845b5c77f2d2b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0609", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1a4063b01dedc06714be0ed90648b8752c8ded0e770f3430e0d143589d64f4cd", + "s": "0x0c930481c3666b8f8a9456d4764875c8295b4f1dea4eb3a3907083e448b31827", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x060a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x43585a5d27d5e26ab3f0e65f7bd471cd0d77067ca16c76f0c5adb4669535fc4c", + "s": "0x2d92c28d38e8b6d37ec5c7a1248d162a71ce8f5406d16b52bd00afeecef6bb69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x060b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd91d22837c064ef8fdb927fbae4d47ae15867064d2727a18902b8f64c23bef0d", + "s": "0x7f397e10d07a97f70c6329ea01ea27962cad7c6622b2efb078b579de01cf3c18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x060c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc27a4058203ecc193a3c5e19e65d8f1bbd2528a1808b40d9343457e31abf06c0", + "s": "0x27324ce80d6048019c28f9e8c93ffa057f742c5cb05ae4b12c96e588bf215598", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x060d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x31056658e03ddfd45caa85b936eafc1c15cf7cf90e01d255fb123ff509e06f0c", + "s": "0x29c5f9572263de26b5a2671e1b7ab051105a6f987f494182abc8689b1e1e2c9b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x060e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x805fab6ce0f88d556726bec55f0a8de7eec8d18aaabf153c1123d699b9ea32fe", + "s": "0x6605c3e6c9d0d8cffa6aec83aa28890f2a5528a0c73e12ffd00ec940410057eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x060f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6c65a5e4e8f5054900736151523b97bb18157cb589de5c9f0ea622ec68f44697", + "s": "0x3bedf264abf6f35ba7501fec53e835b51827113a46c88fbd7d913f3ce21de74d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0610", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x59f19316a6a5761c993ca4a181d6a614c9c9b0add55271b84998d643ecc1cf90", + "s": "0x23306fc70d09d4c4eaab23a0032ac64a9c2c8b63800a911298bc83d0c72c83b3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0611", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcde2e846c2cebf278612a844c388d94de69a55e050b06615cc4a51a420fc3282", + "s": "0x54a9f5fa93de6dc9b41c474e663c8fe7d91c4768e3b75e7651aedaa2d0f0cd3a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0612", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf21ab6ce96c11ba079c2aeb2a045a4b47e4b449193ff556cc829574ffc1662b5", + "s": "0x29746f5df63bc8d52649d57d484ae9f54d82810a03d5d7fcf0d595c1250d94b6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0613", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf916b6552afce6d62f1422fd084dc4f6bfb05f656b831e13b57e0125c8e767a0", + "s": "0x4fd8a81f7665dc422ee53d7bf49d81d4940a54c4bfbe6d33bc4a7ec656121cad", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0614", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x14b5a43da607076ba3540e21733c409bc825defc6bd58b0a87c9fe70c7702c7e", + "s": "0x1cb401fe35f29f279b71329ae4d972bdec5e000334db0373abdb8f31cd8ecca4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0615", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8d71e63fc19ec9fb249eeb0a6f72a4e18e30187d55585191b6d00be1ca1f4c82", + "s": "0x2cc36f869045c272ba8e646e8eab6ff6839bc8d653f3d54381a0fa607c4d0716", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0616", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9191270ee2a23f0603dda32c495a53c757f0a3ecc1b8aec829c86f43af8934e9", + "s": "0x2f375d4ada597c4d6413442089590cea592922fdd7b3f0c495d61bf174e50b65", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0617", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x36e568a2f6c5c97fa7096801dc8c4d039c806642d54c7d8edce8557f18ebd52f", + "s": "0x4773fba3a6466fa4bb60e4594a763526c915f07671faf7f22e20f105d3441159", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0618", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd74f12e69ec83502b32e54521955e2be4b38bb184e3066fb2aaf202b76ea6fdb", + "s": "0x7edd1df47e6309798f0d8e3e0441a54c611affc12d244300a3a4291a3a2f14ed", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0619", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0da8c02f196ce89055af2033bfed4bb495c6bbc11ca754db4c5989dec1558b7e", + "s": "0x6efa543ad1d661f120187e4af51dc89e8679862dec823a88cdddbb4e959b8c56", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x061a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x758b7ffbed537703847e87f891f14334e0d37f36af5ab10082ba5d3e6d4048a3", + "s": "0x789d9ea80503ed106be2a08a8be6eacbf5e5ecb15054c3c1d68d0fca135730c9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x061b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5648a131390be46b6bf056a5bd241181f8a8c16e941d7222be3fd0c2813ef1e4", + "s": "0x4a43535755c881707be76181dcc1ab4cc087603ea6ab2a4b190ca0d3f934fdf9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x061c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x728c5f97c97b8e85df5896a35bb4a05d0db59800fb5aca42df23bd451e1c6fc0", + "s": "0x5f4f812566241b36f5d60a5dda3bf1a37f47ea73a45070bcb00aba3aac2f6c1d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x061d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x858a08f9915246ebac55cd2680f630291d1a342cb9cabde17591accb2fd3b5f6", + "s": "0x753eb208e728c1125748faecdeaefc119baf05f35b76dec65b81a173bb6e9f73", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x061e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x575938836ba80703ac38f1540d093649bad2353bc0dfd7f9eeeb99fedaa5c229", + "s": "0x45c0c31b1ee7255b59a2b2e33bc75131c0924aade6c4f5d694a5ee403b27381c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x061f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xae45757e3bc0ed8db3815ee8d364810774794fd630b8010035a7b70f15fc50c9", + "s": "0x6f85756a2e004351aae2c0d2733ed763aadee8fdabde8b22b7461571a1d48545", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0620", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xba627ff31e2bbc086b1396c7bf2a76b4675579e69acbfc5b5d0884cd8fc742fa", + "s": "0x01d6ea63fa34c600b1ad3d9780f0d5269ca856a45c45f8dc487aec41dc6fd595", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0621", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe0bdae2e6102078def62aa483d972967dcd307c52a754704caaf94662489cc1b", + "s": "0x3387cb6649855f49a53771c8c0effb96f8999683bb8d256eefe4cbe7e72d0153", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0622", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb27ebbf9204d5d2b7f2e878e4c1326251b4afbd66a6ce41a2f3dc0a672abbc34", + "s": "0x5bb9d303f62a85be30a9f434c3692e6b7feb9938f726bd9d382795ff65474a10", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0623", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xee3a05d15a86347c8092555eb18f49d77793d8f98d317ef0ecef0ab3790d7bb3", + "s": "0x3c686b79f8f6b90e11941a67eb37aa068a143aeaddadf02b21ca826e33ab7aa8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0624", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xceb014b7e3f7ea1fb34f6a5098895d17a905ccdcab2b40a26330848ab440a520", + "s": "0x6e7ab62c7abb16c9967c72503ee204e2bb9b7e417972886441ef69a4bceb6c1d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0625", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc318f04c8b186db5d4177758c7be4a0ecbc10b0d864f567218c21e0c5c66e3bc", + "s": "0x0c7e776a4d0949d4ff7af0d1b55939302f4aa556167fbf7903c645f28dd6ca54", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0626", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0605169e831de477aacbd2ee9ae969b6e849736ecac1818e85f2ed79c760f676", + "s": "0x37fd1eeb20d88c9cdc002d9cc5dcbe66a740195e8243d6be876ba51b7943a7dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0627", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x43d8d2169620e914d3a4fec40cc6853313dcf3a7a4a6b4f69d2c8669561143c4", + "s": "0x092f466f6c44dd9e0eb4f3a2defce72ff5f273435d3820e9f5d27bf6098ea4f3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0628", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2d09b7855f1b032d16223f4975765adacb1e9203fe949264e2b93860713409b5", + "s": "0x5afe66597b6d3d616f5c10c809f3dce2fb284024d1feca7317e06a1a3abc592f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0629", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x066862c486f8c2843b7ad3d414bfa03b1830369e53793fbfd2862f2bc774a73b", + "s": "0x2b9514f9ac35c49afb3fc7048b6e0b4ce89e0dd29bffa3088dc7407115bfadc9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x062a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2587675f24251b2553aa3fb9d42db964d0560c752f0aa934f0ad632e45c242af", + "s": "0x40dc019e4ee455d71f6a493c36027945775da52638cba339fea158f53ec00dc1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x062b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf02626c73bd7369c355b844aac2ba94ecbd1dd7f4fbc3b2dc72dd65f29e50b0e", + "s": "0x4dd71693d884aa43b5048091df10f2dc9dff05aac18176f896402e6f6a3333f8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x062c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4b87c14c7a57d3bac7fdfcd84573f7ecb3b0da4d6af41390d9d825f1136ef7fc", + "s": "0x2116d526a5a966a258f3451cbb55389f488eab1a5a0b2615d163e0768d662acc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x062d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x95cd704fa30576a6d12b50b33b9ea539185a26dc5f2aa9ca1b4af42f3bf4fa46", + "s": "0x20c8500f67c313b557031e870d703f5956b66a96369b6e0d216e97e3c5b0c16a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x062e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa7ccc35a47661ba854979dc4018d93889b724a9876d51aaafce9520d318275c2", + "s": "0x14e7ab0d5236826c02420a231f6e22cb5fc4d7fe99fb073c44d57474fcb0409d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x062f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x901da90f94c08eefbef851a6c1c4367c5e5e753fa86483f992b8d1589f796754", + "s": "0x0ddddef3f98c9afe6e19a66fd8db1e8041b814c4ca121dff8280b483164ee149", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0630", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xeef65cf0ffc1ccffd5bf97d374d60e098ff2a497c602da285543c268b14fc2ea", + "s": "0x7294efa500b547878c74b8a09c3690b0b5eaae47c72a5c7c9073e2cc1031bad5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0631", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6521b4ad46dc1b9c7026feb026554c07a4ca617763c906998a3533e47d624d26", + "s": "0x0ee10de16180b30c9b82ad354d10046ed29a833951e10d4d8497b69bb682c6a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0632", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc022a4d7f15c568e29650deac402e9871fa1a3dd88318019e74945aa10a22d95", + "s": "0x22fe88a30c903d52727fe4ed4255f656393a2f1bf0c33065927c35b2931c37e1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0633", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xae5467a1df505386c7fa55ff0b69d3fc26f5bb78635c9717736bc7cc4f5d3adc", + "s": "0x17bb851966b45d80d2a034de1351781797c4206eac1788a2351109c8700c3589", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0634", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7cd65e505c7f9124599dc2a3bbcc2ddae235cca9c55909f8913e7a47a410155a", + "s": "0x3a2a9f16aa0424f6857679a10c50745f4fb9d0121ce329d71389f72fe5e8f56f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0635", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc1de1092aaba4a1a61d9302a33282ccb67583157659b5c436b109d657c67b8a9", + "s": "0x4c3c640f69eb85ce05fe574db8f53e5c97f2004519fdb2423907dfaa046ab9d2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0636", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0f2f60d29712a8f5e9b055c5263fb4784d37763875712f77d36e72d602a379b0", + "s": "0x17c6257c3e03407bd1a527e54be52a74d49eea2666cce335591bd6e88fda311f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0637", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x856dccd4c95df3d9ae6e9fd9a8d73bac58fb3373d8c581dd693d9dd6bab73a9b", + "s": "0x5800ed6974c92bba03c6634cad3d7726715b21cb555a5f6fabfa9c39fe2b8e5b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0638", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xaf69a11803065bd4a460f3532abf613fa68f7db05b80696b25fe608113505db9", + "s": "0x4040761a295716d12128d9dd4d4f5b32b0c541bf3bacc45b6dbd27658fbf560f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0639", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xec438f97982125d4acac890c165cf9d589e0d38e54f6aef9b9e5518c4a35d66e", + "s": "0x59173d0f4ea535b7bb69111ad8a7a5300a6347b4f36e31108eb822240ba9ea48", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x063a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x715b1022e9e4248550c1a271cc2c478c065b06d70236344bb18c9fc0033d97fe", + "s": "0x139189e265f872c900e58e55661e868ab6f8557bb26cac1c4029f8ab34e0ec07", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x063b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7cb94667f58694c8d5b3aad2548ebde532719c98e6e7e40e1610523128324ef2", + "s": "0x22513beeee7dd4a94b752d2986aa09a411ab95b89c129ca0bcb8b89d7a6c7c5e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x063c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1f2bda49434a8cff59a7402954ec6d34778c4e80ccc1915de5e38513e5cc8332", + "s": "0x24d6194e1a50d511ed7995f442190589f88aa2898c315aad44c156283ec82d67", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x063d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7eb5f09c9e2cf3fd5900f6212b040edf0f35a0210e88db42203b67eb057226df", + "s": "0x0cd4c079690737da4409306664a9e715a09b1baf0346de025dd68e8398fa6ea0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x063e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdabc73bb843bd746400fae643e92045b0ac632ec9964401eabded07b3c2f28f8", + "s": "0x493dc3b1ea2be72116c2a8a72cb7e3f593df9755b93ef7bce6eb869dc0c17916", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x063f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xdeba30fb76ecd3db0be868d7efc18ee3cfa0fc5eb973aa522424b585c5ca8833", + "s": "0x5e56c25fe073138516062146a9e09595d5bb2d4f321e6025c7add440cc65107b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0640", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8d80b246294a9856b4b9b423df8b2262c4f3ac5349e9060536e5e7e124326062", + "s": "0x4929dacf4f87faaa73860c4aaa0bdf9e06db47b958bdaba3ed87f2a023a5b06c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0641", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6d4176c8f67c870b86ef11098a15519caa51009f530f7d31f53e46b0382ed3a6", + "s": "0x2edd1626b1b8c45138588dd322675d3291cb24bbcaa34e0b58f7f9a00a89cd00", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0642", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4e5aee31d8b83848b19c70274a509277e0ccfb3170647fe500cb142162b92a82", + "s": "0x3d48b3924acf5412f3974208f8efdb12e9d5446bb72c3a3acf972acb78eaaf79", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0643", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xde27eb99eb107f87cba7f2cd54b7eb71d5e25ec99bd72ec3c7b8755b53fbc74b", + "s": "0x40f84dfa731e3eb1eecd86cf71afe1118ee4138879b54cf4dec2f49ce76c7831", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0644", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x03d35a5c66b5a9eff3a12f82839526093a5008fb57eee929f11a880141042755", + "s": "0x65711f337280b70813676b282db1f8f154629726b7ea40f5e980af6f1f942426", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0645", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x79a4d401f538f7d0aca9056e51983c69bf2164e1171d8e8490d29d95c6712b6f", + "s": "0x41a76e1c31700b70d134a05309d2a48d7104de95d7fe9c618a2d9e65612c86d3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0646", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd841234a0df56ef1b15876d50d1731aff50e11826688140605ef0c7df6f6ac93", + "s": "0x5549b2d1f06d7d5d7087e1fa8e74bed2f5192de362638c44847e806d902f6d46", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0647", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x123cbb732c3772e679fdfb17240a3818be85c04eaed844a5414653564bb46e9d", + "s": "0x6acf8d67adc86fd0fee8b55839cac13367365ac509fe5dcd0b34265a35650ee0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0648", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x65e45abda59c2afd7371624d58fd81aacec60518b9a593647801b86d582c28c7", + "s": "0x78aec8a153565368120a02308d6b106824ae4ff006c8344dbf750a9b9bace018", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0649", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf1975256c01a662ad8b6a3734edfae7a3377b00593825423726110e607ef64e3", + "s": "0x2c77b23d13be95bcc7053fc62803df88c06ad9c350be20cd58ba04d749551440", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x064a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x70c2243acfa7fcdd726e53bf2518e11b634160fa00612bb46882c956a9bdf51f", + "s": "0x47c0c27f2325911d4e9e5fcdf3a7309e3a07b48b6e229a0b49f64bd29d661dba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x064b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x96f979dd0a55bcaf28f39c7db8ca0527196db98bf262930a8c407981fb45dccb", + "s": "0x333d55bcc441f5496aa93f0ba642359fbd3e6c169566982b7313d7c0aee04f1f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x064c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x07371de47a6bbcdd64abbb321c7966f7c99ec1c75f686ff7b3f111671354ca1d", + "s": "0x2885014eeab02eadfe74c712b4b6029cdbca60a27192681529f56f66a29e9d7b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x064d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2a77d78c6c015104ff1ca42b0bb81b2dce843ae9862f5681f41a5b8a09b7b671", + "s": "0x73233e447b74a1fa02b8616b9042bfa304c4f01d00097e80ba4e522de0e63029", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x064e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf10e51f7c737f33555966894bf34cec0cd74d7ab93245917e513fb8e9b2bfe2e", + "s": "0x538840d0aa9868ece0d45a1cbf8fe84345c455efa06a1afb7bc94e971ded1a27", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x064f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x03f3b2819e62b80d5fc894348ae423cd48814471d7dcd7bdab5b531b1dc6d303", + "s": "0x5cda17ceefaa907072612269ac9b6091b0c7ad8f9c0058ea6950cf30cd63d5f5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0650", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3c1111e7fcddcac50d5874ab3826ad32b69a2b53523b147d6e8f697c5982d24f", + "s": "0x038f356c8f78a2acc88be9308edfcb189e2ec78e3e932420483f714d06d760cf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0651", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7ab9a18c9b0fd42e465a671c97a9ba5f07165feaa9bf76438332f94aa10561d9", + "s": "0x151f96818df57f84f22289336735dfc5b93c4267195a264bec5de33b2ac3d7ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0652", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfec2f387eb0b35718dce4382bb7f4f87ebd3d8d66b8863ff4d16fa40ca4faeef", + "s": "0x3915e0daca8cfe40f5efb0e595c9be99bb925d1c55d789b219b7d784dff2bf35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0653", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf2d655bad5cb4fcd1970dbe4158b873b1d13c04482b9f1f4586c4e34d7c55d1a", + "s": "0x494bc108a8ee701bfdb8716558766f27f0fe6982c315325d05af873293f7338c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0654", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf4b5f1952701649fab7171a47fa86cf85eb6539f475711a0afac444b65c59193", + "s": "0x0499f529ff56e68e6eec6104f2aa15bcb012803a6362aac9e64b3449ad35a701", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0655", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfc8239f333dc166b23c558d09e1f7f395cd109645d13d0f3a24322dfd8996f35", + "s": "0x40f7688eb831f710b2fe60207fe12b8e01a9e51577c179acd32b4bc0b90fd4eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0656", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x46c12cb0558456879ba1b6618d437c17a11d10e28438da1233c4d0ad0a7fa50c", + "s": "0x0986f338ac284be24b0e4b1f1c91f1770d8ee44b1d437cd615b8443f52befdd4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0657", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x72599c374bb24795d8e8677a9e0c151958366204741d582d209ea5d58562b83c", + "s": "0x3cc23fbff5f6e6f7287666c13df42722b8a68b957846dd503c845c7535bd859c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0658", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd285848634eff279c9993184e469bd76a3e2c5f579bcdca2ebd042ee95798c8a", + "s": "0x4afcacf64456a5f14b3965eb2eee3bf0b20a48d5510b8827b2e4cb3741d22273", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0659", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1220817cc4d49bcc7616e9eab1ec6dd478edf4bedddd6b371a6ba18c5e20a678", + "s": "0x47b913ce489dbc785fcee68fbee1b53c59f4e2e911d27a988c43a819adf890d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x065a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x60d8163ea305d6f2aaa66ad0370ff2e00dca024f731264a88bfd3110c61347a3", + "s": "0x2a40bc7913244b83af6eee2a012491aee5c0ffce259300fc01be3e9bef755b02", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x065b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xccd31c4ba5aa24b2e1a3b78b1fcb53a3b14d08351dfcb6dee813b957eb3982a9", + "s": "0x1376c2a148aae04c5be10d39bce63dc5ca91bb018b49d25d882ddc596e4afa7f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x065c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4db5b4d71b324dcfd6ccba96280efc145b7e9f05ea808679c714bec3dc62e54e", + "s": "0x3df9dbfa7888171de845c030e97926d25072e33b52a8346228b8ba4ede376edb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x065d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4f4f9ec742a2a1dfbf296ace6957547a74941d87965db07af686f7dccf3df75f", + "s": "0x6ccf082a4a7fb1c41937023e5d768c16bce907e547d73a8c9f6f934f72612f3d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x065e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x15624899bf657458b900adfc3614e42ad367f202d20739dfc2a3944179a2a0f0", + "s": "0x7b0269cf15595b15fea1441e7724459435e8279bd96e040088a81b505bb55fc9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x065f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc3db80a38c45405822149d05a024f4824adb1c1614b0313b1741ee63b55424b8", + "s": "0x28d946d81ff56c0c08e7a0959203c6b36f97312106cfd7f3e9a5e36aa1a2d3a5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0660", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe02e23fb6fd26330779a78bd166be16774d5e33d43bdadef341f2cb8cd47d35e", + "s": "0x019e0f5a4b7bf7ef2bcce960aaa3f6e1404ad084743f317867b1e7c894bc7194", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0661", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x49e1e53bb3802e6c1ef8430a7988ae8c73122adb5b7058ed1bd45e36695842fa", + "s": "0x3ae6c4cc6963455a3a9874bac1da1be5af2113df465b1d4ab4971bae50e0e867", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0662", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xea87f0cb84a837977bc1b3b6d25d219afdb4003410d4f30e7ab434976ca1e7d4", + "s": "0x7489047117041dc901b00cb49ff35d9236b77e1f745a9bfa0a719e1fab78544e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0663", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd8312e73786c25ddae476edf1aeb2e5902b73e9135c03bccb6e1f0c5fe0e5e0a", + "s": "0x53e2a28769090da696553de4aae95393174d2b7ac4772e6f5547292db2919a11", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0664", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf5da98c719ffd3aa3a09155c7834eb0b92798f2e7c1a616e48c9d34c489a64be", + "s": "0x05b7967300cab829091bcdaf22b99edbcc0854c26d1e451fe0ec2046c50c79e1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0665", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x30515cacc2e597431bc938836435d02d80613c36f62c31f4248e3d3b95631d38", + "s": "0x41366ffea29b9b190d4d153c2f3dea25b3afa4466f4f8ca675663b03199413b3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0666", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x067e64845ac7f1cbc28a753dec913200bbb99c85a631d716731572fc1c8ee412", + "s": "0x1c7fdf1719ce3ae8cf9f5807e171d340943ef28227f047a2a3cf1b6a859d4ea1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0667", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x49805f079945d17545656a8fa543160a7e3cd1c26af7011b12360d6da403d114", + "s": "0x77f018f23af4192344350e67068d2b2cb67e99c8bfa51bcfb85e0c9fb0915358", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0668", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcd5b4844c8111d4aa0b8cfc27a98ca6c68dd00197f30caba9e25ab6fdf0fcd8a", + "s": "0x303fa7c6ff9dc10972e34c0e3b371fb3d57f580c39c5f581bffe6a0b8a98fa0b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0669", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x88a408ce1f8961b42035396c7bf40b928d72aff799625dc48db1350bbd1e497d", + "s": "0x2ba4e53a868371e18c2f699cb2644d901599352f17e330cdc1d0800e03b4c14f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x066a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7e6aea831dc7bd2ee31d249300608c859eb643ac8e06ea998842028f40048bff", + "s": "0x716f21cea9ab146446e845b78b093827b291852b78aedf020e0a7b6ce57c112b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x066b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb8dbc8f2d447c49a8eb2a03b3a3aab76e359f5ad9d5d6144a930ac76e6bbbe20", + "s": "0x65eafbff6cfc6a9747c1dc0ca34b0bacad0332be31ad4fe2f978ffa6d1299e09", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x066c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x77b2fe1faa3234b885a127a46161ed33f9996df7f5875fa91e5bdd724f3065c7", + "s": "0x4ade76188a37f1381048ac1a3aa9fc3478f3e0b157c785f7b9eeeae0458666be", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x066d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x434706588578b85e7a1210ec2400d85e91cfd221e72a1d2eacd039c2107d94a8", + "s": "0x7e5010ffe186b1bff8786dea9c66751df604aabbff44bfd7e6f5dab8b46785d0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x066e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcf9c7a3dc7de407fedec28eedb3e583a7ca1584d8a77e897498fdbce3d71ee82", + "s": "0x281bb79ebdc131624008ad800d602788cc36a44528425708e3ed577e2ac0311d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x066f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0759d5b00fc3eba9e67d704be6537e5c9bc28b715c95e1ebd0529de9b9ae8b83", + "s": "0x4947fab5f9fea6b79179bd9882066f071bd01b164f916a05c2fc783d76f871d2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0670", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5433992e43d2e1aea2d90714fdbffab236704dba01b39e82a629aa2d4a0c78db", + "s": "0x133ab35114d78cc8a02be3366adad56cf46948e3730760abd9edd75d4dadfa70", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0671", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3615aea7ce703a94bf615381fbe3d57dd34a4689c41c2c3c1315534d75d6f7b0", + "s": "0x54ba9ac6318f4cdd0c08b6a3390258a34d7b57a1ae8efa55ad258b0a2efc4a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0672", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc7e4b842bdb5de2abec90cf215cb0255d260ef2aa772bcb71d0cf21bcdc454df", + "s": "0x08fb778d04976db4ff994f77ffcf7f382026406d6e34d7fe01a786a44e34c430", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0673", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3fd9f491bdd3a9d02f91c03a9b29670d9ec818de32c374d35702935aeeb2ef7f", + "s": "0x2c6413f56027b1e47bb4f048c44b5f2c19a001adfe9df03405f7a7b46dae1a7d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0674", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc30551c188c20f74093a5c24c9c0c02b47bdc51831167f1a9607b9a865c5f267", + "s": "0x3870442128536459b9356b30b440c74b01aa276a3f30cecb65d31d12e62dda4d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0675", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1fb4325c7649ce84d90b8f4477505df5b2db724385d1ee16d245d337ebc8e0a7", + "s": "0x513f0f3c1b6f2a7c5b888b52e4e2e98a03b2243eb122d14a4b5637d611c189a4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0676", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9a41aeab58a99e80df4f52c1d6a948b4aa4f7a05cf3d01408c0e686b5f9acf3b", + "s": "0x1353581bf1eb24c2ced2474943ed82a7d26bdca398162043aa3638f111e3ba02", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0677", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc75c5f88ec8962a27fa91e2057bba7efc8f0769eae42b292e01d12585225559f", + "s": "0x349f6f2e3ab0ffe21d723eb3e39fa361e7c14873cd0a2f731a792618db6fc04e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0678", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xecaeabffb29f96c7aec5374afbddb8df715d2980b2e27804232d2a4373e3f366", + "s": "0x43eb7910e075e3d826dab2396a6b286fbdec55367c7c55ad35f32009e1300540", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0679", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa37d0383aa9bf34d7de4ed6efe03b7a353ef5b31b9dc79beac511ac9906e7325", + "s": "0x4b3ae3fa0afd0f1ed5ea4785d927efe392e48dd1bb18eebb2a3588fcdb4f938d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x067a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe6afbb9adc4ff8001d31e55bb933d7a181c0d0edec4f8a0291c4855cb5bd9ef1", + "s": "0x2690d7fc76cdb6a0c6b5aa662282c6cff1bacebf88011ece56d72e100bfa2f34", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x067b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7324b5831e291f001f1c8d09de2e9f0af5d20ee6fadeaa811b236b9c5cac58b4", + "s": "0x21db0691d4e6887274ae8f100f913f309a8fd9af8ebb2f857c417e5b372652c8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x067c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x397996c80b2182cf7f7186c68eb3db82a4873a8de9ecc6a2c4f541fbd4a64ade", + "s": "0x25a06f4cdaf5377d1003ed892deb8e9f99947b8a8054aee076c5c21d44e31ea4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x067d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x28d1222f0d865b8b9abf6a3fb8cb75749b6cbeefdf5c8cd00e51bc6f1306e85f", + "s": "0x55c7ddabd900cfc2c018cf5519dc301afd74217b8c2335c9a3ec68d3a6dda0c3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x067e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeadfa64545e46da483c6883928af5d2859b6b2b0ae75ae9e2a35534935e21c3b", + "s": "0x3b96895e4b36a9bda81ca179a61c83de4ea18dc86bf306e211f2cb2951ac440f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x067f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4bcfc38062acae52a3064daba29f87635615f616a2e3171a934fd6061195e0e8", + "s": "0x71f7f8723e2cc8eac37e8cae958404dedfa296c7fcc8365a9ef2ca7942fb334a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0680", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf7c37d81bcfd3f4905d33773d26beab78444f71467d4e7d2b98c55622760c543", + "s": "0x621edb20d1ec580090a4f7e16569ab1925b00b15e58f536843d35f19ee038255", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0681", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa8c7319bb946526667c14ddf4cc84ca6c18bb2b4556a136d04716b142b8b5366", + "s": "0x24a07ad5158fe87c0fd06c362b88031cb4c67cddd7e9235a0b73aab8558c01d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0682", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe44aeac777a06c74f4200348a9d28e209a75f411db9c7296a84d1a27eb59ccff", + "s": "0x37343e4bc25b013f43b2219cf6b3297f09950cd726dfc0e597d1ec5c23f4e7c0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0683", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc2504a880b2a90a9c7c2c0c98c2042c0eb529e6b5a81fc441de37219a16c19ec", + "s": "0x4617813ce7fc1e908cbf5ed39b08cff9dbbe9eb5a3e08d939c04e35ff6d24988", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0684", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7b3a9de0e321cae73a5904d667cd7b82b04011cb95a3815bd288d226b8de5df5", + "s": "0x08c236c88053891f323a8911ed16848972501ca621cac08acf20e82af62bef23", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0685", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc48e5fe9de6c396d730f14d7943c07783aac1662322cead8b370b125a73d8e11", + "s": "0x64510760c380a1237e1095c09594ebd5562c2911a10d0890686e9aab0a166249", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0686", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x41038db9c2c8aa77cea70d85e7f27f80af540c4c4716f2b7a0c79961d4a0704d", + "s": "0x200d2a814042b1ab1208061861299422b9b6262b105eca6c578ea2d0f24e23fc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0687", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3baa221e00337f6ce3663dc981b0bc7c410fc13a6f98beff7f28a6076ff8baeb", + "s": "0x752eae6cdc4483fa18d464d9c716f4feda0efc235ad65027cc22f999156408b7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0688", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x64c75bfcc378e9cbff4d96134e8e5894f6deff5c63cb93845b3e07df68ecf7f7", + "s": "0x52931e7e792eb1ec982ff09cf5962dcf6cbf0906db20dff8906022b45b0a6daa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0689", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9eab7155a5c17ba3a7fa65972e73a71f80a427ac263553df663479cd96006ef7", + "s": "0x28b5343c5b8542d19e5bdd3a087531161d5319f9969ef4a34d0ef02e25c7285c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x068a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9d0cf956b493ca08d7dccfe978dbbe270babe91c6d5ad69dd2779ff414f3636d", + "s": "0x68d9e47bfd6f12ea08303f9cb5f45302aeec2d4d2d5e952e232c93a3b018a5e5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x068b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x977d7c4a527965af46f375bb4c65f3269aea192bb7e90bd81f9e8621b95c3820", + "s": "0x7d1e416a79b5fac1a60aee1f8191070f0ea851359c6f5321e87b17d5da7d7a57", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x068c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa18588e88716730ce6d7882df5a703fa7da9493a5a4234c5ff2eca2652eb93fa", + "s": "0x2c938e239226ea1fe779f34fd9b4a21304f2aa220e3d28a7367e70837964e716", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x068d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa1113349d636fb3b1408dadb36cadc774ccdfbefa9ab0fc530c58250f0c8e007", + "s": "0x119e4106bea4c7b436030c914101d270dbca921f9fc21868f321397cf65dee9e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x068e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x18663f454b3e147f7f0add68a4e26524ce33c95fc4d326c7db1014d04153a824", + "s": "0x73e3be41ded96691e55b5c658e40dbea785742dfaf00f1b15709f70544b60438", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x068f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5ad683b9921e565897e523af83e22f93692837ba9a97d10bcd0da4cf592a7f92", + "s": "0x7f548c7d54920cd71644ac6de62a59c2b96fde2bd1c572f3ea996d3a20b11394", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0690", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb77dc22e066837233f4ff63747477455044a44a9a56ee3b1dcf2017d0a466fb0", + "s": "0x0cbcca1ec2f802ffcd65a8ddbb3aab20efba651f84ca794dee70af11613e6651", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0691", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5259affd3b81ef4601b3ecf6c369ed24674ea21c11603b5233be46dd3984f589", + "s": "0x4c0f282bc49e8fe79f4f7d3118cd025b4ecfd15f82477c2d58d6d1caa5a463e9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0692", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2419a0bf1a00376d63f6c042a34b4d5fcbf43579170d4e618ebc3bac36614767", + "s": "0x2cd025a416084d459c5f576eed025344fcf241c74ae1a2d4410b88091e3bc78f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0693", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x67050c2fbe367a633357dce0840679924a2a186327d1382607cf730adc66fead", + "s": "0x7f9a9dba5f143183dc660cd71823b0e99c685570352d21ac6ac9c96b6e1fc577", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0694", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x64745448fe9cd1bc4208b59d570a0c6f5ba9503be6fa3f9a6a937c7a43b206b7", + "s": "0x1cc32c05a9f837b859a1c13d9cfb84e6999020b470c034bf0751ff8181a1b4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0695", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x70a93f418a789c34ae278be171ae2cf1ee4af05944c9b53b6df8b9d44fee47d2", + "s": "0x579ca7201f3326d714e668df1f113e06c01ac17227bfe4c7ec8ba72ddae21424", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0696", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x47c1294b02b2c83410cb83790b8863d5725e430bcd129bbf0a30ba0a4841fc2e", + "s": "0x1f90b3f60d3ff6452a83f5c30722492fadd3c4260cfa0d520f20219625d8e073", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0697", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xed6fb6309e38ab8b7c03238bdcd1a5cea4a46fcba97ce3b7f0b994893a4db1b7", + "s": "0x2794fa90db30370617c2b242df00671c880b9422892cc8bc954f3cf82844779b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0698", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x14310e77e5902059f89f3de4c10205408e1d63357990250e6782e58708dd7b1c", + "s": "0x1b8bdeff9023e3e886fbc89807454335f1ed91cb833ee0f76f27a9abdce39dee", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0699", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x52756c00ce331380d6ca899530c35150da6051015962c62f5b48f5f38ed9e4e0", + "s": "0x248256889cbf2269c45d6130c378089d57cc207439371f830d6c6fb97c7b176e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x069a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb1c58a20b1b838f9e6df3254624423d44f837df59befc4999bd1e664628dca06", + "s": "0x1dc0728efd709b8720ea34b5e2a83d8846d5e767276340f7e999abb2a217fb64", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x069b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb169156f19714466ef5dfab18c57006432fe722db2a124c7c9e251b140153c44", + "s": "0x58e767d8faf347254b246290ee7cd678d114d21b6465d442946537e941cdd411", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x069c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3d4c5fc46a787f019282e499fe44d49c9b8e3fbc7586204868b49ef93d665d46", + "s": "0x5e4406fc0706ff4607dadd6991932352a18fbf26cc7aa683959d756be85029cb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x069d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8741e1a0940aaf76c4748abec09ca0a49f294a957cbe248615b7c02bd4e3bd61", + "s": "0x7ed47b358971db55e8a4840234a06de8966a4de191021816724ba8d42e8d0cc9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x069e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1543801811e0978649e95d9872209299164dea955b146d78edf3e84b9ce48334", + "s": "0x2020a278e694af46c3a8f0917af4720058f1342a0664adaa61b708a4e69765f7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x069f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9c194818f864db2136fc0b80697f26f6e12b294e10c184c0573109c7087d1fca", + "s": "0x59b8fe7a72798ac81b1e5b4f32ccf719041980e92df8c5c1b79b1ad1bc12b203", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06a0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7da4417652bd1ce68847a392976a0ddb5f2da7203d8006a09e1085fc963396b5", + "s": "0x11dae7a8881c8650a3642fab332cf86bb3619c9dbed95968c4fdf509d8453f34", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06a1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd5b1dbf2ca7e1555a152a417586c039e2e679fb53259bdea7027d0401f79822b", + "s": "0x524f7a63a8458272dea7e6f84f7e689668b5993a383bc10f20111d3472b0da67", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06a2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x194bcdf381bed461976bdd76113364370ad6549e436b5e2cd4db5bb811d4e8de", + "s": "0x5a1a4e87a4d8ceae545c32abfc29e508abb1acd4d89e8e6358304853e4b81832", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06a3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbf2f8cc97e43eb134e06038a5a78b0139562376f9aec8e6eb892b616ca5f16c4", + "s": "0x250de0cdec25624f32a461676dded863a131efba450435ae88d437dcbc6cf507", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06a4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x588f5427ef3d57660a21fa6685fafcd3d09bebf3af8f714a806eca21a6b3755b", + "s": "0x45bd9ba5e2c12a8d95dcb5dfb00130073c6fc5b60c8895c51e8f9cbd5191c087", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06a5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x96fd2ebd5927d02e664e4e91e4c705549b874b407771f153006cf336a8de4a62", + "s": "0x126ecce66f0b5afdcbda5fa4e2ec4f5f38e64f12ba22e346636197a32f8d4e05", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06a6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb4bde08deb9cf7d887442138551c5e43432206ade4c33e433caccd15901fd255", + "s": "0x5ad4f306f69a2f6f4c4874534698baa72812d63bb409e6356d3ac0a3440c2aa9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06a7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9e7afd04f444b482912d75cc2cecbb172bd28fc181efebb018ef44eb8ac47173", + "s": "0x76c9c478777c30387253bb0971188f39823741ba8d648fa071bde9de118b80ed", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06a8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x46d60765b8a748d5e9413efe5527c24573bde15d4d715393ed7708eef0c2922c", + "s": "0x24977c95bb0c0b627d1cf5221cfa15d2fa38dce80b00d45b744c8f7c77c2928e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06a9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9c94a854f42edd7e4d98dd93fed2dde91f607bbd52c69bf411d7b84716eaf6aa", + "s": "0x7b35416aa530b0a345bba555154719f2db71a5279a94d0091063327e8e58847c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06aa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb2cbc657098a78d8ddd837ae8ac1029922b2f1639aecf962a3ce457d810f14be", + "s": "0x08a3d385e75d6c6e1feb6b3bd0108ea4cea33f5bb7fa395f206cb560158aeacf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ab", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf1e130e2dade821edbe0b77fffb47eafe8cc39f2af62e248a79558dd668c62ac", + "s": "0x475811597886a7636c414703afd2d74caafccb4e9ac840b54c54eaa8689f513c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ac", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9fa9103b465d6ab281bca8946d1802265211022dd5314bec43a000b05551e5fe", + "s": "0x6c53da392718ab50785528df4ca06400cf0ea5422c5c7b68c1774f98cd8f73a5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ad", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x08930319fa16a4ad82b9654ccf0e06f736f6eedbc436566bb45d883c9cc02226", + "s": "0x3a7d969c828271f9f6ef559ba861cda94943020bc2391a6f6c25cb56ed63bacf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ae", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4d4c4be5618c0d7b271575e69fbc8d1eaee0a67a41ada99a63d14337ca1e420b", + "s": "0x0e0fa99a28f8dced949c42add8849e34536fb4b47c0217c32990822de2f5a705", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06af", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcf5b0204e137286cf6c77246bc444ca32b3a74b5326685c66f003b756c8e3e58", + "s": "0x57672f0e5d3eb58ffab4af0934504d149f15ac6caeebe9a0f92c8a3b32ca7508", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06b0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5749be21d8f3827a0806059193cafa97570bf66f7389f03eb02ff8861802e8cf", + "s": "0x2ed1e3bb1ab7737150552ba501475c71aa10eb823982d93801a44349726689bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06b1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe0a6e9d82e689debdc551af7b42612bfaa84e4aeeb5a6c3dffd2e2553cef1a56", + "s": "0x0e59bee3c9fb93e2e409e16e058d83d56b31263703584990a2fc6e847184c112", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06b2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6fca8d50dd5e6d2428dfca742b6988026da98237d8e70701c701d50b393cf61d", + "s": "0x0ecc41220962cfea76cd340c2867381865726292c79ef590585e51aaded3a3bc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06b3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9199309eaf77b658680ca4b066dc06d286c64a0e3ee8110f7348582356aed375", + "s": "0x527df078d9ffcaa67881010269fa27855c7eb520077bd740ecd0b14090b79b93", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06b4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3fe0826991a6fe7a714bd51f4142e0b7c5e90f2b0fe4e476dcba0e73e982061d", + "s": "0x4396873788bec4aeadf3012f19c2b8bb29ba3a25fc952a416e3e886f190123aa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06b5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8084aa5b828a9dc41c78c6c8dfbfddad195494c788efcd083502d349c5735aa1", + "s": "0x4a9d21970f01ca9b21d56de8a099fdd247f336adcfc2acf10884c6c7fb16d5a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06b6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5e94aabee2fc5c268016610acd4bf1395ec3d4dccd8400c449b132943bf25a06", + "s": "0x0750374e47e426921f865609df08c1f09271fca7907bcfb55182c1c33da8386a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06b7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x416543ec227a57e76f089893de7adbeb255c61581b64410302a2d284eb2c0796", + "s": "0x6ac3c6eb9b3ccc90a18cf2b33a2e9e88e7235a7f4472ccb7aa6db28bbb889a74", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06b8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd2cf716ad1b1d164dad4435d826139b0c6f545adc49fe808d88dd8eec2edcf78", + "s": "0x493b8d61240bb38705a2ff53b50005134b78a0a0b0b0a88ab1f22403317a64d1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06b9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9ace9ea7f887ae6abd7eff270c3a6ac38b581621567067559e8fe5fc5611cc53", + "s": "0x6a8ae7c63453b9eb63e41c5274cba5c9b66803241f5ce73b6e5ee01f70aaf707", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ba", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x76ae2e5064114368812a5dea75941690ae642c752b1836f751bfa1dc8e72cfcc", + "s": "0x5ca5e67c84a3db282adc7d6e70c5335f423ecd447bba1780317ab8f36110c2b6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06bb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xca11d85f98f4f8b95ec48ea19d414a34e95a0c3a420ab0948e288d93a93c769c", + "s": "0x1f98fb8f20f369ed262faa11daa6551b5242839b51302e8b4f55e443ef1bcd4f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06bc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5a327b0b52da797b6fe89f491c1850596a8c2c50453f326eaaf04435e04bcb85", + "s": "0x424328e521dbee2fe40050174ad8965a2e5c2a8b1d8ad9bcb775a5a090fa1b49", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06bd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe8b741a56c195b95098899aa470a96fe0046a02a74b76d1455d9b7f5af4036c0", + "s": "0x45c6a15b72f4e3a32d93bb5d7a8879b1751e790366b6821bdca2f503348ade49", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06be", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcb1a1da5e427ad6aa93daacba373efd16f134b1529fa980e08de2ec2e85231a0", + "s": "0x338774c389148ee81947b6b685d0543ecc9b4a00608f4d5df7b73a3f0e97b865", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06bf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfa7e0dc7445469e8d75adc68091b686b773fc015c4ef0f0742c8a055a0c6ce2e", + "s": "0x33cb0b427bbe8aeb4c9a6dc2fd65a4bc1b38d268fbe80f9039f613ef811a08e1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06c0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9ed7786438c445eda207120efcf74f38be64e5606389b2effc37c09960c97b23", + "s": "0x6b4266d010aae162e3e3d44d33a6d781e59ec11a1f4e24a7232da60ec83ad610", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06c1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd44c10fe87da4ae4ff44969532b1aa1eb1439067808b363825ce0732d98aa86d", + "s": "0x45bed7c00f2ca1db2146ead427377f4af7cf0dea346cee1b779cba4192b889b7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06c2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbcefa85ac01f8cf1cf0a957b71007b2ac5cc0e8bf223055c299da3f62faa20f6", + "s": "0x7e16678c41eee2a979ac32f540411f95cec9229a489aa9f0576704366f441afb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06c3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x89c87f244e5b8bd0a8c7ab057ed4a8fd683326681d31b939d5f7df7e7daf3875", + "s": "0x6c81914f4d9da0efa424b55f94eaf0ca978ccafcdedc20fc43a478482769cd42", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06c4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf3ff352877d79f145991a4322752e84b64610a81681f296953ec6f28e486e3f1", + "s": "0x483146bf0940e759c8d968f407a011c9a995d96905f15d4729357cd5881f382c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06c5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe75bdeb803ae54d2065edfd011b36783cd06af473b8084ad25d9eb29930bf4", + "s": "0x0de23a66caea3ee96f2366cf4775a98d088b1b480e87840d56e567f17d69dd3b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06c6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2df993029b08eb0cb2e2e414c1c59bcfdfd2fedd96927d14f7b0117c816832c2", + "s": "0x048557310bf81f7b0aa0b849ee6da2e4bbda68b61bad047b45d3715ce947b01f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06c7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0180a776b36a08df4487968c1ab81fae69d509b1c54399d28fff52e7d3cb91b9", + "s": "0x510de88762dcad8f05466c9c18f102bab6732feeb0c7b239d336d9075f415e9e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06c8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x191dd09dc4de738686e32a9d65d0aafe51d6b2f28a53dfc2ec4d745c4afd952d", + "s": "0x2c9d9367f44eb42c5e87a305bb3e491e7b0e71a0938d9fba869ec1d47397b7d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06c9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbf8d22970df2df37aceb521e7813345ca799fc9cf210d821072da07bb5db61c3", + "s": "0x621fab8cfe1243faeb42a7d4a2d514bbec628d07b892b25704718dbe7c8d61ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ca", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa34203976d4d31e3b12eed623d31997b74c3dc47c6eac990baf1da6c9a11149e", + "s": "0x71b57cb97d9629ba4e401d4bcf9336fd9eb76bdbf927b5d351a9b24a099589cd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06cb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb24ba80ff38a28165b4dc77b35efec546c4cccf75f8aa951c8489364403406a5", + "s": "0x6b61f11efcf18cf65e8ddf2da38297e37f68fe6684e9d4479641f37dffdd9d19", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06cc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2bf8b14ff249a7718520d2365e3e2272639d4fcb2e854c4f483c70d63215c8ef", + "s": "0x5abd7a0b622d556e5de1dfc66c7eab503519eb96cafda4e8a4ec8fcfe57f3cbd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06cd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3b40a02f165f8cfb81f4b790c8906573dc66d4513b63fa67db483617841d77cb", + "s": "0x01d2b2b1293741ed94ba612dc3c5e86688b9473200234c20296f5eea71d5e897", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ce", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x91a48127894d0283ab2c0ec733938d437f4151bd9749670aa61d8a48b5fe5bfe", + "s": "0x15e9b9b7bf4742a977410549be393e697d1dd05d971c822f6b7a9897e6d5f64b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06cf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x67a2fe8e275be3aa7ad5b11889d688280e362297f6450077df4b993d5db3098f", + "s": "0x5949bed87f647723d7c00c08c942ed9ebb6bd8a5aebb6bc4c6969beb0ee91cb5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06d0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd7091d0450103b4694ec6114395adef7d51ac3bb5ca95890aaabb7e83fe5c2c7", + "s": "0x20e776446174ee8471591362b3938c849b7d04ca66faf85fc2d4ec1c67b2bf2c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06d1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfab4b564410e54d493fb133b5892cacf26d6ee9a97b12c30c044e6ef0733d667", + "s": "0x37da1ad834d6a358ab1a8403b95a2ee83ea065934e22fbc8248e278a48643183", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06d2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd115b3204c442280b3f021ea8565b9544d8da28636f2b2533bf2e8dd19e9b527", + "s": "0x4ef92a65de4d8ccac3908eaf45e42cbfb96deac263f30c7279a792649af8b3bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06d3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x01cfb82429b2679cb2004880301173617b2f95a4fd1e32fe5aa0dee78cfb771a", + "s": "0x36b26660ece3868ae6fdfeab7f2bd75e72026fd7cd04a596387084293c2bc139", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06d4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x74b23ed7bb00005c0448b35203e1e51dbbd05ccdea9d87247fdc108e1a59df37", + "s": "0x1617a5b2ac4765938a857deda1c346904bcc392c6e2b52c31a26ce82552c2f78", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06d5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0fd62711851bfb888f9f8b1d84c36c5c374f095b666836308d6978a3192a462d", + "s": "0x71ca5ca26bf00dfe19cac4bdb813eb2fc00c2b71a5662f25c6bd7a8695e10ecf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06d6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2ab257133252141735aee2f3277535600efd5858b9ef9dd77e10b70c5abd41d7", + "s": "0x05af84e59348d0d430fb9f2b2fc1601dfc80d23bae6aeaf8d0724585589d99a4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06d7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa9024ffab26a9aae817de977bef907dc74f0c49566495bb1870ef490a0a8bc1f", + "s": "0x4a3161602a4ba9a8f0a9c644ab2d95f8c923bd0dad3a01926300f93115ae1dd4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06d8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5a20845e26b8be674f381aae39fa125f8e22517a199afc3c7dc6490a3ec640c6", + "s": "0x6ad3502b703f137fe9862075e898403653e82c642d528473d890b1199718afd2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06d9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0576ff1235e9925bc9def6696ca8140e656bb53a601985ab108a84e6660b0e83", + "s": "0x12b2db72f649b0d7b954ff40870b1b4e8cbfcc0e0111a7b7b4d0ecea80534d8a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06da", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9439e1cfa855eaebf9af95fcfce2776d64af96a84b463d0c9b526637eeb5f234", + "s": "0x2636e002c01398f1b736b444be48e201a9555856458eb149f55ea3aac08fc1cf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06db", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xefa1189c0147d1f826a734259d731abd4c577410235b691e655c8be2c7a45be3", + "s": "0x10c028bb9e05b157c2fd68428f77a71374e1569b9331479e5626f4d97f5ff267", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06dc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8f8ab540effe1f5657d85abea27b4d29d6d588f82fbd49bb08400cf8764e7ac9", + "s": "0x38b31810a3c2c51698adddba6aded7ce94ce93565f36094624b07eb49183ea92", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06dd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5e23e43965e562a8af6167d7507204873e5b33603c30d1bbeed4203a3c110273", + "s": "0x721829024ca9c4927ec3e9cc7483bb3bea9739dc2aa1b8a3b71ea9eb2e2a5e8d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06de", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x30dfc210849ab764bfb6a3206317a2c471ead7e20db575d3e502b383a7609664", + "s": "0x6d1a974e10ece068f83ba7332ab9302c1f7d57d0022a9d7d1560246b00dc7f9f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06df", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6935ae21d959cd71e38523f42365a6695b931cf5d11d88784b104bb8510f8681", + "s": "0x440210387a7329ff04856ee35bcdeb9260cd4acc6008c4f26d52010e6f015ae9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06e0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfd722e70388a2a84b424b9dd1236ed9a6cbe7aa42048636de7aa650d71daec16", + "s": "0x697a3d6bd498cff6a075a00838837e9f2363e1729eaba727f5b047ba545888ea", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06e1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9b7bea7b4e6a12600298f79205758d31dcf816e0b95ae840ffdec6e730eb91ed", + "s": "0x5fece7b19fb4c7e0a9ffb5338fc244332562b6171c723371ded16a6e186122ed", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06e2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9d1827fe8e4b9327168748f8452fc8502acf70c79d9522957d2400988d6542c8", + "s": "0x7f13d1bc523ef30f11acc517edefe91b48350aff4c3a48fea7e818246f92f049", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06e3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x58eb40ba989fba8d2492bcd4e0275fc1f1a8059025061c157b0ab3d6b3053c32", + "s": "0x0543b4da6ba25d4d87b319f17d5773457af5510c1daa66aa529b7a83de91f05e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06e4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x48da925fb8be0be9656dcb3522f9c68867c6212975b7d27acfde42460c1414fc", + "s": "0x1f6d9ad6f7572635399c28224a495431a4a80622f7a7b5a4182db4f999b995b8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06e5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe0be99cfacd193e61529b2a7cc0bbcaa9c71bf51fc29d084798f3d6b2391e34a", + "s": "0x1ba0cd299c867990fe1b4a13410701fb661e0b24064ced7364b8b975abb655ba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06e6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7d199ebcc017f804dde70fc8c563c96014d6a37f1424754d431d8ca29139a1e0", + "s": "0x29ddf33ca49475478ea11826a589acee49069e9994a58ea139f2766006971211", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06e7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4c84100707c553b4710fcc7dc6fa1414e9408300db73e33f11ef25837fc2d630", + "s": "0x2a1f346034356b666b05a4d61bd3e21b0aa678b42c0d90e0133350f3a955b9f5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06e8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xed6595ad31d7ac6e0b0cd2b674ff393536b4b43166401615647636ec4e463a0b", + "s": "0x6c0a4c5d9819a7b5e84115353be22520a04af1bf3ddfc6b2684b9fccceed51a6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06e9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd075b7d594dbe6a233d37ef85b98cca0692ff65dc4c6a1ca4b254e14203490fb", + "s": "0x1c596a992a8c9bf21b511c1d50d46297b42346d83489f384d7aa6aa8cb1fd37a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ea", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf79082f248e84fe0c8585accb7afebcfc555860c525e16b071c0cb992d4f6d44", + "s": "0x1f6324adf60e839f5623bffc4635b69dbbf7588d659275d47c8314adcacacc34", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06eb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcd85d003a9205779236ddc73c745b16602d48d6b891bdf85575686febb53789b", + "s": "0x4fb7df41298bf54826d4b26d9e309ee2f9d84c86b73a91a48a78fa26b58e1192", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ec", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9d61494c74d4078e0b751bd417e72238c7dd73e9e69b252cdf7242e4cc13e34d", + "s": "0x02ee337486c5cc4fe990482b201236f679b096801807cef73b8230fc7be2bce6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ed", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xafd2c8b32fb97b6a817ce6b76fcd858f9d45b3d820ea67d74261c88d3a0c1140", + "s": "0x40b5fafab976264b1ac9e1dcb5ebbb7a094b7a26590790c4dced97b592dc921f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ee", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa63fe1fb2914f9ee5c14601b1c3a00102b609592e6c0da782695f1918d187b6f", + "s": "0x6477c580d67b657809a5eab179c9608170a99018ef19631d5dfcd9435e5797fc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ef", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x73ce0b954992222910d1dccd313739dd3cf71daa306bd70ac604b89c9adff82b", + "s": "0x03d768b267e532a5221d6584e361cac6aa8bc7aeb375e2329f6731a806275f0a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06f0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x28a3d4b43662f6356d1358f5d2ae4bbb984306c689334b14e9ca77c8002238ac", + "s": "0x7665ad94c8466f8852b43c1b450d530567e6ff74a4559f0a53e4645db43bab41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06f1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x11cd0df309da278bb6acbe58ea576ac3da0dd0ac8998f08ebacae3f190101582", + "s": "0x219aceafda63141369da2514897bcfbf057001bbd06ac94fbf0c211b470fb17d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06f2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6bac0ed381a7339f9893a22274f084cd5bb5755b4f1d771fcce8e73b2892d69c", + "s": "0x5895f343264fe577c24c69fece12790b454c9f5aa08b38d039991a40ed555f52", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06f3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8ae212e209d3921f26aadfbaf4ae13d1766f333e1aaf998605dd33566d997e", + "s": "0x60c1b82d6a94901c63dd4c600677e0df00db79165d7314848f463c8da7256b68", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06f4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xafabea30830f3a1201dad244c18a58969850821abc55f410fc65bc2bfdced053", + "s": "0x3e3a917a50b021cf0fbef013832afb28ca682fe5a51013eed17a5eda320c85e5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06f5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeb71cca59f5ccea97924dfc3bd36c1920e80616f9bda2d9c91dc5cba7e136074", + "s": "0x486cc5b26205b2f95b231cb5f4979fb64b8c7f8cd409ed949ddff9ad6b387e93", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06f6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x91f42438e6800a0fd640f9690573548efbd38e4aca9ac58548246e8592450355", + "s": "0x37415c0502526bf79323271bc599c99ffc9bb63ab43bb88e8b435666e5d37779", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06f7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcf24a66e22b88f4a468d7dd12906cfba388cec82298c1dfd84aa9bf6d5f27c44", + "s": "0x31ee33db5a5872f3f162055b5786c6afd7e65a2d5b4710a47f529bf122418d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06f8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe8d218eeb8058d3c5e7f4bb01fc88ecec4afca01c057e2363bd39710aaf28461", + "s": "0x7b100e70294e9c167b5b99f1d0ea26df7c6e6bf48206a55a24526e8d7cac5d0e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06f9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0e83ad3394a78ae00b239d2c3d927721a9cc6272a20814ed7b9edcf8f6f65c1a", + "s": "0x3f3f7aa4e17a58c96103eb9773d67993213635852dd4b49a4918f7354d0e5869", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06fa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8d1075b2dc6aa3bca5403a1dcd0971e1aa33bd88edfa81ae53133b3b6d88aaac", + "s": "0x5fd5d79fd883c5d86a99071c7e0139e0623da7c8a9f68dc3a1f00fbcefb73905", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06fb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x29377e3d99a1a6044976766cb6ebf2037a42c1e7bb9c1074d3a3d1488ddbda84", + "s": "0x4caf782a338f80508e98feb146cbfd1718bc848e921f0b7d78f26ae048b8ae4e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06fc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0b3d5c2ffb520cf19427e3f19ba15dff2bbde648e425f7ef43b50f1142db37d6", + "s": "0x629d842adba009ff494bdbf11baef31aec08244203c04dad23bc5bebf98553c0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06fd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4c6406e28385ec3eaae5fe24b9866f6d69c7dec1d0f3872e52a6618ff0badf67", + "s": "0x227e5819f31c853bfe7040dc2bde033ff0049ba2a4570c7195b8e2c63920cede", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06fe", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1052581157d0d9415629d159a1fc4001a3ca6c95e66205cd0fef96dc65325f99", + "s": "0x63a84e433a49085c4dab9efedddede9eababd9d512a7697d6e829029e4f25f82", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x06ff", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa40caabb73aba069c945cf4c43f078acf0088b40a236385c5a5f17270e8aaf91", + "s": "0x1adf5010628b26854166f83f153107adf090712ee38601262208e5e0c3ea960c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0700", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x628944f381a9a32efc474c25831e0ad012adf24b9504e0f435a58629d8a944b4", + "s": "0x4cd11aa333fa381fadb69f42337db66ca7132c5fd0d79b9b2ec71d7a224512a2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0701", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x281433fbceb155f0f6f5e1a39e03fce790cc0a57deedb965673f445bea0e8356", + "s": "0x12aa2e911ab163586894a7b01bd3c1b4e31c949d737fe60a459fa24358633e55", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0702", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc027520d6d80e5ba725267b5b685476142786962bb6747a8da5033b4d65ff11c", + "s": "0x5c3a062f7beaf6cc65141a643c240f32b3bde539c93985d1c0ee72013ac489ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0703", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2be074e9455d031ea2b2d10f7892fa07ed5b20a4936951d30384fa7e9f3f1d9a", + "s": "0x3c35791cd2f6a5ee48bdd2807bd84d41de962ba1adbc1acf293441cfd7dbce6b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0704", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x56710fbaacd8b19cdab82dfdd54cb60b589b295fe13655a9e95a5af89a8aa3d0", + "s": "0x280fc094231ccae9810608b24423e57eaa80050ee7ba37fca3ac145ccfebb7d7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0705", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x238903ef347714033f7fadaacdc1adf8ee7c566965474704537b48fc751ad3e6", + "s": "0x2a54bff125df1df2929d10e676f182ba80a8bf3f8af6953789ba6da3205fb409", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0706", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb73773b74dd4803cc84697a91b6b38a0a1becd37c6b6678dd46eaf8b3bfe6b35", + "s": "0x17c06e796b7d91286473603a42bd4c72b7cefe2eef5cd40ac67a4dfc5c08f788", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0707", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd9cfbed4e542b012d2d39855e8f5954396797f9170b4b4ef1bc51ba8869309a8", + "s": "0x7c92f9442128d2f35bda29bd0c8e4ed16015ad2e1aa9daeded7682cd5cf4c69e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0708", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2f914ac83d4bc00cbf9ac0b22bdd876cb2ae5998c03f51ca8207a1d7a44c7c1e", + "s": "0x3b746c2548741c6502b6d5ec1a0cd93d90edee59e13c83d2c09c5c467b2823da", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0709", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x96c9dfb9642ff121c4eff2eb184cb10765359ebb917a30f809e365f31b36d3e8", + "s": "0x631e95058f1c582a59bc09a1240842daa840770915638bc6139df6f633365141", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x070a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x459ec2d850cc0b0d6a68d91d4667d790ac34795bccee876c537fdfef357ae325", + "s": "0x020e6f83670f1e84c083215f63f77246517e0300a9e5e62d173c4c13b2cbf211", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x070b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x07b1a5c0aadbc662fb2713b5902c55d988632cf7965d4111855b4ac1c9b19a7e", + "s": "0x6d0e45b995ae4bddd2b38d9d6bb61b5fd75d0441861a9b768fa66636575de7ae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x070c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5add52440020553a8248c64cbe6d69a0fbaa0e406ac82188a28cc50e590ed94a", + "s": "0x3a77faaaa1e0d6642a1f1d686d082b268364a8110f1473a053fc70a9012bba94", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x070d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf109159c1cc980d7149c57a4c195f1b0e80ce10d0bf263bc1a214d1f8db4bab0", + "s": "0x6cd5ec91263938a882bfdaa26e1f6b24eb2237e016eaed893fde15a1a6c29ba4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x070e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x68354308e2a02ef9667b43d7476c7551d7f3ccb57c5bac51e32bca0833c2d228", + "s": "0x7b9e771edb4eeab29c2a6b51c920df41c0fd1c285db52ce8456cb2e86a7a31c8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x070f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfe944bb53a38f1dad3874d2f51b33d1db9ad3e5fd35f9a5b2ea463d1c8088a67", + "s": "0x604f7d6a893e1bd708da38982b7af44145d48f4dcd5a0e39f8006c7309a3d228", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0710", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbc4c06e041d814de675a59c1b74c1cae3d263b49d88c28d27fbd1d15fa12e077", + "s": "0x269c121cad3abf0e8479bfc6bc86c54dbbe61ff466f83b5f9e5e40510af4c913", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0711", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9bd53826ac3cfd8d46730f1630e7a89869d14ef556f1cc31bbace066e719d55b", + "s": "0x75444b99b7066ce56a69da2003a2627ef905bb86c8277cdc9b56d887cdf8c012", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0712", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x98e7cfd48f1421d18d96ea699319101ce0683ae5615ed9232d8fd0cc4335edfc", + "s": "0x36f1f254770c1e6c5082f44fd31e6a6cc449f3620e8c338923223306679388a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0713", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0fe74745a827f62e5f80ae4d85db207b7fea454fb0f83515ce38299f7634593b", + "s": "0x53c409d4ef94102bb2f5580a593adf321fd72aa5bc3c83c5bac3508c27901046", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0714", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3a40b91d6bcac7acd8133c1e6975c95cff4ed666188cbb1c062f16cd0fa645ed", + "s": "0x01ccd914391b2a08d3486daa672f1190b7379e1e94d76f0905a104787fa9d0a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0715", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3a517473e4f8df53b4778e54eb1fad9e33c83ce3eff5cbc851c695efbf116759", + "s": "0x030622e963e8a8bc00adb605b82605e2819b126f59a3d6b5ac584b49c23b1041", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0716", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbea64932ba64b7b33f01fb089cbdc0788091a448b9aa0137e0227a2036d6bc86", + "s": "0x4dc907af51f7f40a22d868c51b3b1b24061d8159f3e11d812f90db2096f277f7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0717", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x96eb06d2f03430919ae65b4938426bf3ac12ed2ab8967742d4492d5a8865ebf5", + "s": "0x55ddb9b6dedbc4afdab57d0de8cfdfaa1936b062d2515a02aaedc44e9b560c0e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0718", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd5504cf8069bc31b496793f441e15a251658d62d6b169a78fe83a5633749f67f", + "s": "0x2a70694ba755d87546974e9272d69335e6c9809f3a7710c706435d2d411186f7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0719", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf4ef89149f27e287324957f2966b7bcf6844c532d00caa56c17b0a948bf0d15b", + "s": "0x09ee12b9e515ec9e8c11786bf3c1fbdcb982f7f6c424e1cde40528bea46d4f4a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x071a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0c396e8f07517009ee9ecfa258b602b8a5cc919be804eb445d41b05f0a9580e0", + "s": "0x343fe9139dd1e80037214b60e8a9892c382bfd9c445075aefd4e0b59aaa04cec", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x071b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0c9d098e62b1edd0e1cbe90e312ae90e4fc14bedc6f1dc2ea48a8141e96818ae", + "s": "0x0cb7ab6552d9a516250acd54f6de1effa6039ec02d4b5ad39e91acc374fac0ca", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x071c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x06ecdad654b24259cddbed02bef865bfdd3000065029bff61520cf10516f4502", + "s": "0x6969c32f3f1bc8db9f008309faa3777b760b9f1486a2b5c0ecc9a55735dd8e79", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x071d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x30e2e35d5a01f120a5d10111b4902e856a581e45f08872d3f0f80e9488580dca", + "s": "0x605f7f97ef88b9359136a34f4e079bd1ee3f8182a4aa1c70604d460a0ad97b44", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x071e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2fb482f658922187245e21031f549bb87d1d9180ae52f825a62127f0ba8b235e", + "s": "0x712ba3e89cc8a730a27a8bfb1e85b550cdde9985d9053ccbe8612b429dd820c2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x071f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x18ce06f45b1f9aaf8cfd85113fc73ca561e9e89eddfd274312cae53d06d89e4b", + "s": "0x2a77ac9c0a4eae941d2e175bc46f78f5e61615b44fb0fd3d4971949bf0779c14", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0720", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x69f1598034b9fa991db980d7c0b96353f560ab45f75f63eac304386f8eb7e35d", + "s": "0x29fb55360313bab435df82b0f59f84df6de0e09e636e38345402cf5b1ef17b5a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0721", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x643182a7fa0d0abe70f311fd3ff859bc532edd80697f9776a1af6fbd17c3ed08", + "s": "0x2989a5c22a1822f98aa9815c013dd67d14d28f6810c052337b21571117280b76", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0722", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0401d176ecabc2275ba8bb0c83d8cff11132db4d1d480288a5ad3251cfb6bba1", + "s": "0x3808e47b0bd38470902990d7875d1fa0d1225f51aa4631ed96308438d06df2bb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0723", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa023d9b23d390a6219884c4b932319c43888ee47f1d2ca97a6f71eaa9a0475c2", + "s": "0x462479b725b3f1e74a892b32d166ba7c78ea20ef17d569860fb163cd282a12a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0724", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8d1734e3955332cde053808348f506c036487cdeae945a975b67798c640f6ccf", + "s": "0x5d445c953b419f48579a87f60180bffd68149e6044257b11f15a817bb4fcafc1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0725", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5f89393f9496ceeefe81a709c8e4b81b8c3bea64ec2fbb6326a51df1adae45e6", + "s": "0x68dd257e27dddd6d481bcd2e7a90fe8d250c38ca721d1798922e6e36a0cea86f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0726", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0a74d28d2f882f862136a12dc2f91166d9031f64a2791e0f40da441d2cb5a828", + "s": "0x5046a00b882e7284e6dfc6fc6003659f1a5e464b40b71b82d80a56151bd4c8df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0727", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xeb9a15df16d4aab095597cc0bdc32fa5dab5f443b5afe2651fd44eda8aa20ffb", + "s": "0x54bd3905efb08241f142292a9ffa048134718ba9a5886c0fa6181e6995840676", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0728", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa80afdfd13c7e83db7d0e0ff3da8518111b160687cc7925a64b6e795e4a3c268", + "s": "0x409c75b473383a15fa12d0cf56b8a76b3cdf07f6cb140e911e5ffa6b2a79db60", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0729", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2c993800854745ddd9258ea7ef013f09df2262c07630a437e439cb27c15663fd", + "s": "0x326a6f9c09c7a2f281762e2c1fa2427b3199150692bed17a9f965990518a460c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x072a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x0d1ef7fbcd87259a1e749ad3320920ae2b18052ce90871d232ef372daf6f5927", + "s": "0x707358ba3f104a4a9b359608d6666cc792dbe46aec13416f0bdd89d8c14fdf38", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x072b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcbaa06decf2439d71296f49da4767e274b3e5fe17ea7264be2f15818762af4e2", + "s": "0x76a92843eda671e1b4ca9db0fb2b27678c2a14cbdf8cd94755b1e91080afd3bd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x072c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x22959eee73b9199f758705bb2abe30add529b60e59a2dc6f100e199c1a4d02f6", + "s": "0x2c2df09e803c67e5680087946a461abbb59c99f9df32bcc0f5844a4d0ce1ebdd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x072d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb4a7c46d5bf4a204b9907bdde508d9921c8686dc2c52a7fe2f7408658822da2c", + "s": "0x5d2b5fe12225030d466dac433e0342df7d2da6438c63903be5c93916276e1f07", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x072e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x2187f2d53ba0b66503919b0381c93aa2564f84122cb7d78ae73be6845d51a648", + "s": "0x3f3b75c4a18d6899118aa14aca1760b988fc4d42265edc325830cafd5d58845c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x072f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x01b4248393d55960082278e385e08bf947e7fd6735eb78d31ab67f7ea4874d26", + "s": "0x40696de84f2feac0743a42c7cafaffd8d94757f1f4d2b5826d602d634c7a140a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0730", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x79251815ddc519ee977c7bee4246473d0b282d278961e61d4920987ecd1b187e", + "s": "0x6572e93862389f738fcf0222d50d9f0eb3f5a148c43556e693503de0426bd760", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0731", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6890d1fe827c5f02d6364ccbec5b4de12a7b5a0c34dc7f9c4f446cb9065a44c0", + "s": "0x06f647e8373d998e9cf4072033bb0f1b2b7e11b9bae9a642283e1d9fc044cf42", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0732", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd8df58bff93e218f5b635d7b36ba7032ef88bf6aa136cace2bd107ac856e5b7e", + "s": "0x34949056bfcc52eaab11784c7055f510cafe0a72a551bfcf8972f5c3714b8df1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0733", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4940b277b86dedccf7505dff55f0b4516c9187080e6af7983bc0b8af26724910", + "s": "0x4585a76e1fd1956c633185897c801fa868cc0e0a59fede73654f66b740148833", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0734", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x72f2280fad50316db7c88c1620b2d92c9853291c4253710bcbe8832e67da48ab", + "s": "0x599d8668f4677fa123be6c66a6f46ab80a0fd5c3720660cdf526cb41bc4774a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0735", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7717fa08b58611cfe944b9fc00449be7528a71c53e643f9975ae16452d3ab717", + "s": "0x41582fda914ee67a8bbf02204df561a4f751089a753a5087fbb2a33173e40e54", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0736", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd1be6a4b2ae2cbb38ea908b0308c4fb5655c540849d7b948180cc24dad9398ee", + "s": "0x0539127449676b03ea0e59e16cad5fea42972136144f9e62ba324e368ba16b0b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0737", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x64b6d787e15d95e61936196ab6257d1473311727a7740aa0cf1874e8f0bea187", + "s": "0x6e803d876ce713702a93e0ffbdd940503b76ba8da405bd6a0a72b1e4d934cd43", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0738", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc8992a2828f803d9db7c2030880107b8e37923bb93360e3a1ca6397699ab6ceb", + "s": "0x30c91151015b9af2707e601654459709c32245ea858109dc5b93e132e8ed25b9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0739", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x379aefd453848db352470ed67dd9344b10071a7bbc50fb7c54a074c2a620df1f", + "s": "0x594d5de1e56475d0484fc458898f268fdcf327a10775bbda045e32483de61377", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x073a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3c1c2abd4ff4236af28a68a03aae7b7e6bdbace7d52f5e6770dc4c132c633c7a", + "s": "0x1b13b5d7e5d5d85c33bca19b9a33da2408dd8403a62a6e403d12febf7d9cad55", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x073b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xdc3144eabca56e0717f30634fc21246ab94aa70488be96a09366cfa5215bf5e5", + "s": "0x312cea336bbf08f7ea57210b809ed88c5e9c26afe9c2c0d1905cef0e29e09100", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x073c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb22ad1ab7b96479e359bdeeae70d7051e38bdaf9dc7f1168173b31d735e2bb43", + "s": "0x242a5923680aaf539fb94f4c5ae636f1cbd4d8a5a7c5ce10f789e3eaaa65df8f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x073d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x065e8d76088561c5e23e3d8276bca456eded63ba83a261a4bf87f3d8b689c39e", + "s": "0x2035c9bf4ec875c8d424ac15192aab80116328edd5cb778391886263d878230f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x073e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x19d5e71de894f6788438b7fb6d7b6d54a11c44ccb0954ffae13902c9ba9869b5", + "s": "0x09ee1bcd2b97d6cb14d3d4f014d3566d5b3a98fd39e975ab4e2c8e48285f7166", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x073f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x10b402bb0aabd6b39708e9e54c7156cbfd7b4241ba418cd24f51e06fb548143c", + "s": "0x087b3ec8ee2fc1ed11098e3dd63271fd184d595afc83a8a9a30f7710a53da860", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0740", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x44883ec5d2b5289f47294e6adad6c3c8f79e39298c701628ab9d4483ae3e7b7a", + "s": "0x16e6cfc5e909bdd9d7589b611f175406c342a3135c3fef761462f8bdac4be9ac", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0741", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x19c55d9141731db97bc8daa53bf4c2598c7fca4c570cde1438301802f594a7b4", + "s": "0x708436639a44d77de83ae7c6b9fef8567c4e8bdc38b99895acbd92f04993e834", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0742", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4db3e6fd1f7766ac9b70b03d13a2eb6403c2670ab6770135016afa668d8fc410", + "s": "0x2008a4afaf80d84e963e2db7328e8b2f542405f5eaaa48240185a5dc842f81a9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0743", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7ca169f18872a4c716a29fd0df09b3ac333477f5f674fb8c45a6e6bf829aa120", + "s": "0x57a3fc1b88c4800eecb56f75ddd382abd21d670ff13251b4eea0b4b895e77f66", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0744", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x550ffd23e790b1852b9e98234b1e8f1a2c02f8a7c7cdc9c0823b21a59623c4c6", + "s": "0x4a250875b95a7fbf61a90174cb03a2686ecab1320cf42227b8526245a466a365", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0745", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x05719bd392972fddf03e8d0c329b6bc61c7cd2993f9359171017fc42c8bbcbc2", + "s": "0x44e9579b92568ab06b43466827ee5c52d5f176c7873f64dab795d17ac76fed7f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0746", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x462049e213259aa3e5d24c079e6548b3dae05626f01aaaf4a6310d0755662bea", + "s": "0x16cfe656d36db95641fd870bf9ac6195b9b5117385158500ddefcad0f4741798", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0747", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb3227c13fe8452ac8d091e349632fb0bb7d318f4f3cf06576d3e82c1048bc742", + "s": "0x54f09e7de75d7cef0cbb23c9410856d6263baa578ae7db5d3c4ba2e5a782c789", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0748", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5cf84eb78bb8b1524bd72609b740c357dd36e762b77b5fd79a54898a051bb888", + "s": "0x29c4c1021f2be0117ab55d9ae7c5df338e4a8f96a7891f24294fdb654d855d99", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0749", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xac8a526734d1620796160580afb27eaf1492d8fdbf4ba1ac94197fab5fef96ea", + "s": "0x5ca5de73d40509eb5b0c0740107537c60990067b43f3b4f5cd9ae0df826259a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x074a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa88ae0978999b29d62d5ec32a460a23a7b915bd9958e5b132484a2326ed1e617", + "s": "0x6c870f4baf665989f6a5fc7ea6b324a639d116b4a8fee7f8262bdd957dab5fc8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x074b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6239fc76ffebd01fe8300f1c76257535a898dccef94720516e86d9fc90884355", + "s": "0x1ffc30c7cd9c47bf773978fd32ea1010f2f0f316de288b1a854023e0438bcecb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x074c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8a70bb953765c5789a04126a9cbb12664c42a00d338a8d060a6d4cebe572f9f3", + "s": "0x5db7d478881038c923927cbca838f07f526d224f628c1eff4a4a52064aee0233", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x074d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x5bb97a65b367ceb30a7dbf2cf236b317c9829deb3dc1f991286e52773a9ab2f6", + "s": "0x2ea7300e5056d5685b90728846f3acc2e48e5fe4e7a56dc19e601a71468116a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x074e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x45600976079bd02a91c47a89dc41afabcc6a8432f6f12fed185420d4a645199e", + "s": "0x3fbb58c316c42041a08cf81b260a0c737b2f9bfd86d5afe1decc7c1c63a8676d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x074f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc2a79441befb80c4b67c52fcc1723220ba8b3061c5b16b8ea55acce399515b8a", + "s": "0x05c4a2a6f62d1205612120c616d4feea3de488f76f943f9e436b39d77f52792c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0750", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd9af8f6695446e4bdb6150d89693e52b0e88fac7e26cc8340469b8089583edc6", + "s": "0x739683569b097f2f5d6c78cb50cc7e912f4bebfad8522886e40425a9ce2398e8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0751", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe3105aac1e331239f939cf2310e0772f6ea0bab3b9dca1105b119f15a49a611c", + "s": "0x6a7ef917de2539b0649bacc2ebbe945cdd5a1e7c64ebe2dd3b1abce1270eba09", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0752", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa085731dc274d26b60239b87b30d8b7a3a55526aae7a21095775ce8c0d1bf979", + "s": "0x35e934742adca8084bb6a67b21ce0997cdce11e6f69e656d3e9c671c92e96069", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0753", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfd9cf14f31a25437395f93342d300d74511a1ef391737495063507e032f159a7", + "s": "0x24c5c66c12e56bfb096456a01d598623255b77caa0b2416bed737795cd742dfe", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0754", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x13bb3c63779cb50648e4373ac6cf262dad73b9744ede5a4dd40ed36453eebb69", + "s": "0x445894978f50ee55c4e9c6c5dc23cd8a90fa83263396418e2ee0f98eb0562572", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0755", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8ecfe28a98c1df0b98aa7a366efb6cbadafe1355db321f878c5c2702ff870539", + "s": "0x50658464c91b01fc444daf0c1b666c07a3e3893d45f8d639907ceae2337ca80f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0756", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4be028e4e532a517d9ee38000c48d2665b9c015212bf5821b03edc6032a9c463", + "s": "0x2d1f56de7cd182259cc3100472da1f6f6a4d1eecdc4500c73e581f8a2767d572", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0757", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x58c16e650c4533a11857a783832476d37a5193bda0843f8bffb1b26381a3c4e9", + "s": "0x0ee34c32cfd7a1a518106a6b50c71815760cfc2d9d4c1e4def23cd6ead66326a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0758", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbc97e3948b3db174c24eac3ea1fe7f67d42c38f8967811a61fa01ef19c734a8e", + "s": "0x6fa131c40435f74811e1bd273699f4f9d4a8739573f1296f88e83d5ec75d0a4d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0759", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2869206764422314409c6dc41a3d310c5b55c67556047df324ce81bce434899a", + "s": "0x53cd893353e7af5a08f834f2ecf4f652e43c1fdfea341b1b23469b5f71f705cf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x075a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x04f7ab7e3e04a2b320d4d92fd76dbdcea7f73af1160e1096735f461c8885bfec", + "s": "0x587b40297be407c4912950cbbe84d8ded46dade0eb2b926a99d33dc37f77ba5f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x075b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x89e1ec481b0435ea15ad08dc7a7099f82bff20899a96edd163a6d8005aecf5d5", + "s": "0x05752dff56e1e225ed292618919ee142233178372ad081ff64b627e607dd3110", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x075c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x73884e3ea66ebb73ddb2ae9b42c6edaf090bdfb11d229570f1cf340c48f100ab", + "s": "0x3ba586979caa0836520058ea216a265c84e669ab23d23591207373854525cfd5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x075d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2c3b03962a6c37a04133762bc64beb7c5a1555ba34f8c8a7fbeed68519b907b0", + "s": "0x03ffc75dafa096b602382f282b873118fc024bd347a276f89bd846b70d5b8a4f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x075e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc92fad10c9d393f12ed4d590f21be9a95388e749c6a40f1c728244aadcd9e3be", + "s": "0x3fab1d45b16a449108ab3b29a57e8d7f28ea9206d4991c3ff562efcb2ee9c5de", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x075f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8e175aab72c5d101de289d8b86ee232596bdff0d6dcb2b7290f0bba8d983d516", + "s": "0x0ed9f650644abc6dd2983df67e9374c523ecd5beb1708ff8baefd6f756a6f752", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0760", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb8536efd611ce4c6e828c5320d9d67759d5770420a5fceb44bfe766e85c737d8", + "s": "0x72b159275d49468da9c8336f994b8a5a0258f595340ad5f9f8cef24ea963e0c6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0761", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc077da52d0ea3eee104921274b6625a3cf2a2e42414557f33365a18ae2d840c6", + "s": "0x24e93d97cf2e7105ecc700ea9df87efbf2a009457b48a210bba151f17303b442", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0762", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8009878845adeea5b37f3d185164fc0902cea275e727284116e433ed78e21b03", + "s": "0x10e75d4929b027ce9ffd239fb6ca8f0b93c97a57795fe6a469885925334f9ec5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0763", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x137b6d2ce8b3bfe689eba9243df0d5e79bc1b548124c6665562efcac92e8b49e", + "s": "0x4cf3ac5990fc49e57d7fe97fed3c9c7354dc7f4e22673137884da51b368b18b6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0764", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf1e9e8409a4f0aac6583663d070252aa88d9fc309da659eaa6a1fb714ae122a5", + "s": "0x59a5962442516c1dab70cfc18a18c9e933bba34ee796ca793f7a13a12334f5e2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0765", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8a3b5b9e84f384178099cda7d17f69a67244eb54f20ad5bd3f33dbb1caea7d36", + "s": "0x25adfeb033f0b25ce8f47a0c7aa8ff632bd1ab710c9641261d54769ec9f6d0ce", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0766", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x497cb5c964a21724d4f51b410b8b13b40d94548c25b28f883aa623f49bd95601", + "s": "0x35f642b42879c484545d5927a4730470071ac446630dce3845eca1e883942170", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0767", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3346a045016ea06bbee8a32cdf83e01c25c6ad4b18c7a0c738907558f9629f7b", + "s": "0x717b995ec417eefc6f671dc07b496159f233babc26c298238f7d7eaa5948f97f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0768", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x690f55d22484a70d413f4c243e8911edfa74ca485e85a360db03e096fbbc4e07", + "s": "0x1e7e6dc1723531ad79a329689aeca2c371b5466105b80b2744759fc00dc9d40d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0769", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x033a2316f8f5d9562187731eab16b4eaa6db2eec2ee9c851d173bfdbcfa0d136", + "s": "0x69753e843aedb1d9423e51b2d283bd93522872f63f25c7f949fd361b7a90de42", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x076a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x28bfff22bd341de51304445e14357d230f1124e3f6c050aa1c7952447a1d0939", + "s": "0x1b056ed673b00b4bcc4a5cdd5a324bdf51cd65101bf6ceaa1a4ec1c3541795bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x076b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc26a5b38e23a6e96bfd84a9cd8bdb176009c5a04da5cffc0b3e49f532f910761", + "s": "0x794114c9af5f21e2ad5204f8f53ca974b77ad8aaa35eacbb98381f7116d4c7ba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x076c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x58e0c6d3b7dc01c7eeb1ebd0e81f0c4dc0a8f0ecdce47468a3e6d1fc37d338cb", + "s": "0x414b498edb6c705aecb507cacb2f7e39ce50b4d40999b30a26908c772eb87a28", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x076d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xee98104ad3fe6beb21871f31114ec9cf4a4b03b89ad33f48ed61135c79bf376a", + "s": "0x6787af640a4ea51d307ea772fa208a54ad9542dbdb3cc6b3fce07ad56fef09d2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x076e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x657dac6c0c46720f666de228deed90770c54727f5803a66b84c34b3506aad292", + "s": "0x33f8626e3be0fe3ca8f6c69c328af274616bd25598ff7eeb5c20a115f69cbd58", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x076f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd9a33f705bc3b53faf3d0814e2030179a3dbbd1d7e1706202d36348ccb34f106", + "s": "0x64e9d1d46bea37a75b2b8622f7bf4d2b73d144e1aabbe43d8dccbe24c2ec1d5b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0770", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd0d3c858ddc60c21735240ba66852c1bab673ce587b4c8891b18b198713f8d89", + "s": "0x74af0e5ff44bfcbf07265dc2426bf7f9d7c0a6ee0ee968e1244baa9098c62228", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0771", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x64b2fd006a9f178e133bd0c5f822d1d6770024a6a3023d7bd256074f8a392590", + "s": "0x0d53b3ff298cf4bb5cdb4389128d640a896b163b78f58e54efbfe20a34e011f8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0772", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x970d1bd91781ab3138ca5772cf83f92d432bb2053fa9203df67d21234c3e06a8", + "s": "0x34093d97c572c0c5c9e7ca694e56c360af8a87ef168a3b8644eee521485bd273", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0773", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x53b288663e5c12d03a8cff7088c69746f1f291c835381c882a09f3c9e7fd7e26", + "s": "0x59759bb131d571604d9afddcafa0b0a9d3fc9c9f670e017f78cb95e7828e92fc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0774", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe238ff1649d30eee17490ac9398621cebd5c6f8b3fe7231a70584568f38acbbe", + "s": "0x4684fdb1f4dfb3df6e9506047b94e44e192d0beb253a98ef130ef89710150d9e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0775", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd88978166d2a74fa14b3728090aade8c038b4bdb943c95fb7198a07671ccc27f", + "s": "0x267c76aa2de70b43c0a579dbd0fa23a6eb97faa9c5599a1039906a833dd2aa21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0776", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3d2ce4668a92e0a71c9bdf056cb2907c0454df0afd99e01316ef69cdac4316b0", + "s": "0x01d87e03e0d0c64e8326febf7247ed2660a854990ca9d85b2d6a0d9f465dd409", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0777", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6d737619709dd1679b9b2d3ab691f6f6f83e6e01447a4119f585751554a16bed", + "s": "0x507f4a61b766a37d9eb412085288f831afdc433a466212f5307765af01a43301", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0778", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcc4abcb0aabfea52b8d335a0e0643713c89015b9424d37c3d4955fd71932fb26", + "s": "0x7eb21e54045ef3fc3492988be30aec6619459e2168e7c0159cb4ac3433af1967", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0779", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xe1f5e37722c5ee48e049a4e08f449f1b09ebcf3008d32f2d90b073e8503a59a8", + "s": "0x1474fa2cbee7c47f9b2eecde6328f3eedd67d4a376e130722e11b36b45e85b3c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x077a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x38160ebd751eae42aa9ffedada0717a2b68440d17f918a5012fad7825b330756", + "s": "0x132bf2f5c602aa567540fcf2bf28534fa13bb710a3d8d8656e1167c3d05b99e2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x077b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x61acb7ec0ecf923a3520a31eb69444c5a3fea16843757d07eed84d002ba797ea", + "s": "0x133edd3c976e1ba52e78101598ecc54c4fbfc8d03dbed17a3765fa3ac04a45c6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x077c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x7abe2241ce7527c5246dacc4b55b25744d3c5d27a6d61a9e2c5d5781965007da", + "s": "0x673cb794757dba09b68c3b05bed115d19f08c27c405797d7db5d0b6503536da0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x077d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x960aa83219c55368ea31c84a9612bd3e015db1251a6fc2fa3e6525fb7d6c4a3c", + "s": "0x3605858a506415a4ec752283da845a7d2178144a2e96a6cd0d9e1c879c5c68ba", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x077e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x3ca2c607d8a03cf56388a7756d653472a8605b83856f70af6d1d8a95c7a435b1", + "s": "0x6c32dbfb3a8861257d9a9bc27c40b0ff743445358398d698fc339443e6119f06", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x077f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9cee6b544c4554808858565c8e0e7847024a69f884bc1a2cc6d0d8831d761b53", + "s": "0x3204a7b78715c4e5368441345a1c259289b70f1f1826f631fe68af3d052abee7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0780", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x53eabd5e674fd6dba80c9b43a7b0db7b7b3fa8659239d68bdbcaedd917c1623f", + "s": "0x5669eb96ac7d9fae76f914866bdc0902754409c173f67e031742ad59459f96e2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0781", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1fa08598041968ff5ce24d51af853cca6612978cb32f8a82ccef50981b62195c", + "s": "0x2e0fbff6d80d64cde550e3d2bb38eb99a7d8dcb22a7170a436a6aa3ca2f58f6f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0782", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2212569918f72361516451045ef091665fdc5eb481e8c6e768efd6826ff7015b", + "s": "0x5d184bc1634d1b2ec7b95f1ce7ba9ff6fc603ec9df22d89254d1b56fd7e1d34d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0783", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x76d386f9ab7d6c76dc8d33a9a6492d23cc820afae2e1ad2c7a001b4b25f366c0", + "s": "0x7ad2b78ecd1a3defbe33a53d4b4347962b2d6a8453ef9e66a473c885828ea0cd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0784", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb5754622da07c729853357da7a4411632c8e3ac483e66cf47ffa53f5a494f02c", + "s": "0x7733891bc4ac4fe85ddee35b1091f23a307444464b359e5ea49c0d313fd357f1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0785", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x923fcbcbf50c5677b845e8375a568ecec4c4f8ad1ca73ac47d997baef10ff9e3", + "s": "0x03db2c50d37a443e14b54af2ca713f43a3aa52a573390bf7360d60885613f8bb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0786", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3abca3893c3de473ae2bfe36337f604b99d125ad2c6f20056ce0228bfac85763", + "s": "0x12edc90c08c950ef9c23f7a5f6e93db5911e3e2c83d6e30773bdc18e42822ae6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0787", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x311b667bd4165e11877ec49ae02dccfccce4d11a98bb1819440c5b35fabdfa50", + "s": "0x77bb12fceceb609503df889bb935337058a7a7b367e1305d5726f3012fe0f0a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0788", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4575b25f64a8dae041990436697dbed7e10b7134430c30476a01a6a2c7e62309", + "s": "0x33f78a95d54c9f2e709d7ddb208ed3204371ce0ae9afcd9e04b484972ce5e7df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0789", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x7623f441be6da908ae7f180cc2ab07933149809e2436404531293b5ab0af0dbe", + "s": "0x76dd94255552c04e5f25b7d9c84ceb830a6ed39434c250be7a3ca77eb3c42eae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x078a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9fe1b4ff370fa559b3b385022cb6affa4d4ba2c025fcebd506ede9823515c0c3", + "s": "0x59b8a18dd8a452451b7d0865ab561ae81e467b37f873d0b9e8288022807ac8b9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x078b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3cde2875ec84229e751ce92ff22693776c6e1e306f634d3f2c4be3f2758fd78a", + "s": "0x7fde0d86b6b81a870b2cf7f6527c7c369ca2c93b6159ac134161881c334652f8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x078c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x4a869973e69f716ddf1db76572d615b8c9ad5659bdf7459dad623f25e0d44014", + "s": "0x751a4903a025f168d30138dc2bc575455e76813697b095746d4f80f618524177", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x078d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x35b85becb6e9743598adc2a9fc3906495fe84aa9a09f8402a68763ec85793a18", + "s": "0x49cb1d22e600d6e520d75db75967bca35670f12de918863840c7ef04ed9f41ab", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x078e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1299cff99a2ccba7733ac65117dce9e8b73e19c5233297a394f4f13228ba3561", + "s": "0x72dec8448cd70e78770e7ac87b989688c2f8f7da6dcdba0da2ca3a201310098c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x078f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1837c4ec34df5a0565d153561b7e334bce78f686e47ad948a3d023e17e983822", + "s": "0x2b3bfbaad1d89db0440d7871460bf270faa3d8a49b693062938bca0e5912c76f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0790", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x9e8b5545448c0126bd4a4ae91c8045ec713e34093118fe5fdb443f975b02b80b", + "s": "0x4920a148dc53ea6f8255af7a72bdf0e237623f88c48cf16e5c16de5e0986f392", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0791", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4f305df49f238726a7dc18c7cceafd409fb29e327e315a333bdc5bf5cd964f92", + "s": "0x4df2c2966c176a9c445a468b677e25ace6b1afe1f9e87df2e021942a466f1270", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0792", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa0ed6d92719be48da4e8ff638080b9bd54af5a926b7f9ec927364adad3a80e41", + "s": "0x6c85620310c24a4cc283d29e475052ee8d1806e5f3441415cdb8305a8f63406d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0793", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x49f0788b279b5622317d87f57f7e87fadfe277f8b40ab7957218d5b4b60644ba", + "s": "0x50423d05757c2b07920736a23af08dfd1e56df5bba19374fde383f712e46520f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0794", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa6b3b2692cb5eb10e73d29b0bc7f63cb41563cda4e2aa332d1ee821809782db9", + "s": "0x38c9dcf96e6364d6a9f1a5f86a9b7d6aa6192246f63daa420549ef208a503d42", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0795", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x64a291993d6b6c531383538a24b2c9a4eb0690a5a9bc6a8e32dae7794f44574a", + "s": "0x43f5ff22dba43cd5223c8f3c988120b170798a09aba34ab5d79a974f22cc48df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0796", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xf750d43e91054eeec62ebb5fd82978481c7f237fba2ec8b994dee37dcb31cb9d", + "s": "0x02c49b1cc33d3d393d3164f10c597a69d8b56ee7e0e54397bf0b2c392a8c5eda", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0797", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8d09c766f7a9b984098f295929350d8de9ec0ecc167410ddc2a78fd8e16f67d9", + "s": "0x6368cd82004847a07da47565debd586d2445569274f2afd6746db1a06aa5b7f8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0798", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb98429279fe87b445871afe25937e8698ac51acfbf49de70c66715e40da3f6b0", + "s": "0x409a3b850afeeeb16494450601258c41e12f298bf6c8b14ea8fc407e774d2aca", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x0799", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa8825e14ffc098d87facbf9c24b659d06e4f5d8ae3b60e5aa814c663c5d7a3d3", + "s": "0x692aca803750dd0ed17a86f31a53a9884b1fc48774fa483673588c67dbbbb55d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x079a", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x96165d4eedcb1fab8a79cceaed9cc236a9791240a4668e700b024200020f54cf", + "s": "0x309bc94b308fe8d95ba837fa931b540cdae6aab7d9d4f0df7dfb0768745668a5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x079b", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xcab223fdcc7672656f5e317d2f963fa32c38a65d565fe19890d0e7caa0040781", + "s": "0x2ad346044f806ccf5f90a8aae6bef14a6702b38cd2f059655bc925647600b80d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x079c", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa09d0271e217b74126ae51382af1901cffbb860a2a49b8f2364bd25d801ce745", + "s": "0x5d0b899baf242a4042b925013859bed322573246d0310a807ea17f4e6dc9cf76", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x079d", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x8b71595df411abdc54556d20c56df98443f6583e1dfbac3714401b9deb7a2b92", + "s": "0x124066d5118a628195e38179ebacede9840e8a6079b99214a9ab0260aa43d534", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x079e", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8ee811ea974844a92ddf980463492b20c878a23e9194693d36b10928535b792c", + "s": "0x3fd8c837972eca905ad1171516a30ca444e59e7173c9dbb1015da19fc7704a8d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x079f", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcd68c7cd72b052d6942bec61e1c5389cc3b004a8712f9d4dbebfd3acf0eb9f9d", + "s": "0x66e21fb14706bdaeffd91bbb571b6fe18aa216e30aa1417dd94f87af273d4404", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07a0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6bc3ffb0a327bd828e1d8356f7fed7e63fc8d6ea3a667d44b5ee7187ee0a5f3a", + "s": "0x34818e47808018cd07af0306941776998a51d2ee7133a7de5f93d80c19c78da4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07a1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6b0c92035973d11f42717dbd8a9b23f68607736903f17dd07a8d0d007fbf5035", + "s": "0x753d68d3433a6ae3a8460d1cf279c5739f348b8d7b03f4a682ebbe8a129e5c9c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07a2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x94bb1139a83cf99731be08550600da5af67699066c7ab9d5e8e8e23fa1ab92d6", + "s": "0x5f0dbd3f983624527b3bc3308c71f834d5f02eb93148a96e5fad2087db2a3c2f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07a3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeb945e336561efb2529159e1a581203c27be13233aadf8956ed10c1db2cadb12", + "s": "0x5e9e688e71e55b99e42b97836de00589c8ca45767ebae88f62a5eaab56623d09", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07a4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe2b9504eb07ba3d264fab39a5a17f7c659f3ba6935484a38c6f0ebbbe561fd86", + "s": "0x7ffa0de3ca4e9ab0f19bebeedc702795f97375a9e46a843366948315399eb63c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07a5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x3ae1cdccd9ac0ff0be3341a1c7b25deac4043710e991b6f57ecd071bfb222af2", + "s": "0x1674c257ece942e4c817c5931a423c92c08a404f402c64391d76c6eef6ad06b7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07a6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xbb7a729c33f617e0c1f7f9464d0020c31d39544c64d98c387382b6c043a84152", + "s": "0x76b049bf318b8ea3214380155dee005f2b787e0545884cee9ef77da131020b15", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07a7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x1fc1d0c9b3f420b06ade7423f98451a5a5d362022d8e66684d628efcbb122667", + "s": "0x33ca67873f09c0e99a4f57ecc1d822b36bbddb8392535d2576cf8de50aacfcda", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07a8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xff37933e08275b7b9172f6b8e4db39616aab508d1000a55a7ea9a19df65adac6", + "s": "0x6159157084f78e4973cb6a1db7935dd75aca1464bfa8fa5190553c0c1a67e7dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07a9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x34c3a85eec428d83b887b8b870b773f2b3d529eb9783b2ea91765639bd774906", + "s": "0x1805fe3a94d6d88ab04ff8bc57d15ce9621144de0338929a6d0852246a54d8dd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07aa", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x40f6095a8e981a8a518336d97fe287a2ace0d2999d42de7fc3345c366261cb40", + "s": "0x4f620b99e45a4c44f06ae0ba161e1770a71d973d2fb019d36f5c4069d6da3fc0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07ab", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x1374c984afa4453455ae0288ed3b798e654545cd5fa2c629c21278c538b8ef13", + "s": "0x2eccd279194814b7d8acbc9d56f2734adba188a1b4641849ab8c1b0f097a2a96", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07ac", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb61559eac559e57671962a6bf915966409da612529f5c6b19673cef36abf0966", + "s": "0x1f70aaacedd16896c78dc9a8c0a3672fd82a287da65038865c6e7b9d1d14ff78", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07ad", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x66c6f885f08359b00e359a50c34926cd9cf6f68c652662abeb06daaa494d810f", + "s": "0x5d6bf8b93ae6a5d8fde01436c2caae428a0fd82c42c8b36ea1c52d3108a46298", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07ae", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xcce25b87107d9c4af8591fce3e1deb6f986683957f5937aa04d3b133b09084f4", + "s": "0x21bf2dcf528c0aa17e14c0c27b12a54b448ba09e7224314a1091a1a1949f7b21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07af", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x6451f67f98f12b88134c33e37537df2e17572360ee44d19b333de808d9934615", + "s": "0x3686cb600debe0cd4beac5dcccdf335194bed87634cce9aa4695f556616f4c1d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07b0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xeb8005be2567f1d27dc036ee7afac1587100a67515c7e6eaae16d46a4bd47784", + "s": "0x12c5639ad52c601c26cf41c320b767fac355191b731e2d65069f66acd000e923", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07b1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa21776484875f902d7aa5b50b384abd019d7ebc1f8fd3752a98bc3bfd83819c4", + "s": "0x247b642261cc9888e58307f33d0bee90a7ba357df97e179a79210b0f3b416d4c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07b2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8a5765500366f4542511cfda58e8bf3dafe7c11559a529c2e1b682ff1c04a283", + "s": "0x73ac4ee22e5f05daff618d89916fa822aa8bda76656fa61ce3bbb54a214770c3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07b3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x045654154d43a5e17f45c1061d487dc0f9321441187ccdb890ff3453bbb0953f", + "s": "0x11b6fb8faaa77d1ae41b6815a32234f00636a7960557fd67262b5c1d78e669f0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07b4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9d92aed327cf2ed0f94867a8af7864e3d7b09a3e9ec23d106eafbbcefd2c2250", + "s": "0x2d439c34222a3be59734080cc2000159c12e193d432e1dae9b2df8cccac2feaa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07b5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6144485f64d35b5d0ff737706acbf791658ea18f6948c667de30a1b1f00b9654", + "s": "0x648e75fc26edbdfa61277105346fd2bf80ff7c54f75f23a4b4d3e8bdd5e0aa77", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07b6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xc74c7920ad6e8b3f479b33dbbefcf2d563dc30706cc0dec00a0bbead98660567", + "s": "0x2d99fb61c95ebc3f9ddc2093e89793fd70a6b1d982e92bf2ceb454efe356b61a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07b7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x63332fcb449074930ccf64e630d50f9a0e010d2d591a1d7a8369021aa413e0d4", + "s": "0x7041230d619d83a77d4ec7176de66c5e7f80b56ed447b2f2f032d82eadd98bb3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07b8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfe835e35aa2c0b3a55326260e4d95af1a0276c49b5511756a83ced73d8de95f3", + "s": "0x1e82a85bd3d93d3e731351e9dacb175ac5d7bef4f1bf5b115f31b5d197ca620a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07b9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x914348bd636762b2221b0dc110a4baae78b3a6732021b8924da6f6408bcb74f8", + "s": "0x206b2e15310578d795d3f684e202c8bbc2af44a5a3451637ac6d770fd2ebbb64", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07ba", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x680141af26e7889a7d5c48ef59f918459e58779ac3c325388c371b215a6625fe", + "s": "0x200770d0326dc265b36658242ebc6e1893f504627c89635b30693b7135843823", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07bb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x08e1af1ab96c83cf448114db0133700df67527d88842b4e8c8418a122ff64210", + "s": "0x02619bf5429588dac609ccd86391ff1c2126e975e5be0faad98a796bc04ac44e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07bc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xb50d4724dfe2f9c0a2fbcf930ed39617502179d7954c27765be3fb1c03124ed6", + "s": "0x6a2998e695307f806ce4cfa5f6794caa492392b361cd7de49414d9bd2ab651b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07bd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xa5782736ba9b0003efe0d30af70f571adcd37f3848569c914714bf225cfb52b2", + "s": "0x2806e645f414fc7d8f1ed45953db1efc4bcc327635ca439e1bdc33faa4ade54f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07be", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf82d3088327532461e033e5c7063ad2e3254106a7a366e0ae8ab4a02596921f7", + "s": "0x241b5b065d705e583c11194dc1d4da2384b5e9c98a157bc7d973dcf4d9eabd83", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07bf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x4a57e5202f9e25a22d30f035254f0ce2e9c85b78acdbba77003123dd87fd9fc7", + "s": "0x6a6c8c573f852a2d471c2f0aa8532b1b4922423fb29e4b4ad89a2a24a11c83fe", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07c0", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xfd617b319d7e5fe00c62fe0f9f2c5699d6784395d3688e6dafb7d0cfbbbfbdf8", + "s": "0x3c495a1b36765a595f166329a82cc1ca6a0b605a79c2e5ac31b57f707dfc3c7b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07c1", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8321650c6284a7909e2082eb77dcae6e06296d3aa08175f14795c4c4815cf6a6", + "s": "0x22ea42b66b036793358b39849898afd42d16799d05c908e8318806f1965a7b9c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07c2", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x760a57b4a5916bea18b8dd8c0f3a8589a3d935e509c3ee1d2e9013edcbb006c1", + "s": "0x1058dd033881668d15f5a6af3c08614c52144de03690d9693fcaeb4c2054df36", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07c3", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0f08c447a672d5f45ae780f2cf19e8486126b8d3004548103cf257772848d4b5", + "s": "0x720a4fd2598348ca073dfb8a24e0c800146fecb3562168d7738df45e88baca04", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07c4", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x9aacfcc04f966340e90dbeaad1d8163313a46d5b9a76a2d5232fbb273a430f1e", + "s": "0x743fb55a389db60df8f1fd1fe5f1e15fdfc0a162beb7b502a5af6918faa17a00", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07c5", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8d1566e03d2f0639ee0184cfec2bcb7997d33c66fe3955aa5c305b260928a4eb", + "s": "0x1bf35e68711e085acaa8b9cbf94cb38e927f1783ef20a05d3a9e677b80d9e158", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07c6", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x92ed47955d57306081454a78cdc22975faf09ca06265d999d3786fbb567a5272", + "s": "0x605982e2d7c01d7ead8b2246e3401570a09bd6dffcb5bed15157279df4d5a021", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07c7", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xd7e1528af59717daf1a8a51912619e9e097d9a31614944a7c4f53ad20808ee19", + "s": "0x1a5102c9a98d5ae81ba3ee5d9a251a0064cf6090a1a6ae3278caa669c75c21a9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07c8", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xd284643502333bd2a510d3c367e286501712e23e404166a886defa025791637c", + "s": "0x75aeafa27ea2a9840a46dfc29c4ffc7a4077708f5780824366288cd6d74b250f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07c9", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x12b2b1d0b195354a7dff6809ca3abced2377814be027a961abcbf8fa215f4579", + "s": "0x78dd2b778f253d28512e32cd558e04796b2dc8eb2da43b09febe57d307fe8a21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07ca", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xb0acd0971afcb68d1033d9ec3820f5e59443b43924f9b3fcf02b513da7893f26", + "s": "0x1dec20e01a6cff7eefe03d96263b1c2b0b22bac78529a68a2d22489639b1974f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07cb", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x52b37d00acf2fcf83f9f3233042c0baeffbb8f7bef1a6bad537ec1faa147a87f", + "s": "0x3fd3f083895e42144a034a18d4de0225d23942d7f2df5c8406ff829f8674bc02", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07cc", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xc9633ef784344e358eab69262fa811d820b52f5551b49f7154e0d46a0a804dd9", + "s": "0x6563f3760609b4d0d3db74868a2dc3d292379a45c117aa51a2789f8df656e0c2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07cd", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa49186bcb26e906d7826371921cf36c0e4c3eee7e34a8490453d4f64f9776db0", + "s": "0x182d56c313396c4fb261ed386be13724d1ae68f55bc1d7cae1aa7069b16300c4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07ce", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xa30a656625aa89d532ecdaa210f5f5f2b4ccbe125d92882cb882698ad6d27fd8", + "s": "0x0f0f22767517aade20c1f2f4c2f34e0f217f49f0af51f9595115655b679bff59", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x07cf", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x0de0b6b3a7640000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe96be0581ea878e13e531b4a717761add2c1b5e27079dd3c874ab2a85e8a538b", + "s": "0x5fc6003ef7d21350b0b4ff6173fcb16d98948d982ec80395f35917f407213cdb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x08" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x09" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x10" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x11" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x12" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x13" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x14" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x15" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x16" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x17" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x18" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x19" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x1a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x1b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x1c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x1d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x1e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x1f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x20" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x21" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x22" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x23" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x24" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x25" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x26" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x27" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x28" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x29" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x2a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x2b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x2c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x2d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x2e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x2f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x30" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x31" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x32" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x33" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x34" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x35" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x36" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x37" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x38" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x39" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x3a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x3b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x3c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x3d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x3e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x3f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x40" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x41" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x42" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x43" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x44" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x45" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x46" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x47" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x48" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x49" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x4a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x4b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x4c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x4d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x4e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x4f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x50" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x51" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x52" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x53" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x54" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x55" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x56" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x57" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x58" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x59" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x5a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x5b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x5c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x5d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x5e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x5f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x60" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x61" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x62" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x63" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x64" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x65" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x66" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x67" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x68" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x69" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x6a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x6b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x6c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x6d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x6e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x6f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x70" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x71" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x72" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x73" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x74" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x75" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x76" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x77" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x78" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x79" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x7a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x7b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x7c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x7d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x7e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x7f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x80" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x81" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x82" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x83" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x84" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x85" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x86" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x87" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x88" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x89" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x8a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x8b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x8c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x8d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x8e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x8f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x90" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x91" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x92" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x93" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x94" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x95" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x96" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x97" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x98" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x99" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x9a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x9b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x9c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x9d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x9e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x9f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xa0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xa1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xa2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xa3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xa4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xa5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xa6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xa7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xa8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xa9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xaa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xab" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xac" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xad" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xae" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xaf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xb0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xb1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xb2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xb3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xb4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xb5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xb6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xb7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xb8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xb9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xba" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xbb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xbc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xbd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xbe" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xbf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xc0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xc1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xc2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xc3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xc4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xc5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xc6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xc7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xc8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xc9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xca" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xcb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xcc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xcd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xce" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xcf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xd0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xd1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xd2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xd3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xd4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xd5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xd6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xd7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xd8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xd9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xda" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xdb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xdc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xdd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xde" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xdf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xe0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xe1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xe2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xe3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xe4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xe5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xe6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xe7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xe8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xe9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xea" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xeb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xec" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xed" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xee" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xef" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xf0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xf1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xf2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xf3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xf4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xf5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xf6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xf7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xf8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xf9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xfa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xfb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xfc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xfd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xfe" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0xff" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0100" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0101" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0102" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0103" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0104" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0105" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0106" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0107" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0108" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0109" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x010a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x010b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x010c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x010d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x010e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x010f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0110" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0111" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0112" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0113" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0114" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0115" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0116" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0117" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0118" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0119" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x011a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x011b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x011c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x011d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x011e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x011f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0120" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0121" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0122" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0123" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0124" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0125" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0126" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0127" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0128" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0129" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x012a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x012b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x012c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x012d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x012e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x012f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0130" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0131" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0132" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0133" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0134" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0135" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0136" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0137" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0138" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0139" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x013a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x013b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x013c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x013d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x013e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x013f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0140" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0141" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0142" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0143" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0144" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0145" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0146" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0147" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0148" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0149" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x014a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x014b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x014c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x014d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x014e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x014f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0150" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0151" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0152" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0153" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0154" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0155" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0156" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0157" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0158" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0159" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x015a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x015b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x015c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x015d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x015e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x015f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0160" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0161" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0162" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0163" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0164" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0165" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0166" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0167" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0168" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0169" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x016a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x016b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x016c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x016d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x016e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x016f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0170" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0171" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0172" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0173" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0174" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0175" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0176" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0177" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0178" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0179" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x017a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x017b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x017c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x017d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x017e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x017f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0180" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0181" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0182" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0183" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0184" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0185" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0186" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0187" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0188" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0189" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x018a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x018b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x018c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x018d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x018e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x018f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0190" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0191" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0192" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0193" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0194" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0195" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0196" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0197" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0198" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0199" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x019a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x019b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x019c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x019d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x019e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x019f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01a0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01a1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01a2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01a3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01a4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01a5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01a6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01a7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01a8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01a9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01aa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ab" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ac" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ad" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ae" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01af" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01b0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01b1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01b2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01b3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01b4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01b5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01b6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01b7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01b8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01b9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ba" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01bb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01bc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01bd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01be" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01bf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01c0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01c1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01c2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01c3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01c4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01c5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01c6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01c7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01c8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01c9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ca" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01cb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01cc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01cd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ce" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01cf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01d0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01d1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01d2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01d3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01d4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01d5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01d6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01d7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01d8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01d9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01da" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01db" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01dc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01dd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01de" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01df" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01e0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01e1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01e2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01e3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01e4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01e5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01e6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01e7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01e8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01e9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ea" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01eb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ec" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ed" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ee" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ef" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01f0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01f1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01f2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01f3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01f4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01f5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01f6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01f7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01f8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01f9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01fa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01fb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01fc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01fd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01fe" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01ff" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0200" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0201" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0202" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0203" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0204" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0205" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0206" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0207" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0208" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0209" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x020a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x020b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x020c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x020d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x020e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x020f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0210" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0211" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0212" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0213" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0214" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0215" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0216" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0217" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0218" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0219" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x021a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x021b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x021c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x021d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x021e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x021f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0220" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0221" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0222" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0223" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0224" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0225" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0226" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0227" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0228" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0229" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x022a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x022b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x022c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x022d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x022e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x022f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0230" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0231" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0232" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0233" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0234" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0235" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0236" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0237" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0238" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0239" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x023a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x023b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x023c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x023d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x023e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x023f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0240" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0241" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0242" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0243" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0244" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0245" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0246" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0247" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0248" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0249" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x024a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x024b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x024c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x024d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x024e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x024f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0250" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0251" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0252" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0253" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0254" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0255" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0256" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0257" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0258" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0259" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x025a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x025b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x025c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x025d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x025e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x025f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0260" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0261" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0262" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0263" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0264" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0265" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0266" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0267" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0268" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0269" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x026a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x026b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x026c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x026d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x026e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x026f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0270" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0271" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0272" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0273" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0274" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0275" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0276" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0277" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0278" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0279" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x027a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x027b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x027c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x027d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x027e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x027f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0280" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0281" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0282" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0283" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0284" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0285" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0286" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0287" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0288" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0289" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x028a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x028b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x028c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x028d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x028e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x028f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0290" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0291" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0292" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0293" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0294" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0295" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0296" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0297" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0298" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0299" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x029a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x029b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x029c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x029d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x029e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x029f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02a0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02a1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02a2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02a3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02a4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02a5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02a6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02a7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02a8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02a9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02aa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ab" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ac" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ad" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ae" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02af" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02b0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02b1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02b2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02b3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02b4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02b5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02b6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02b7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02b8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02b9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ba" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02bb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02bc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02bd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02be" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02bf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02c0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02c1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02c2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02c3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02c4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02c5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02c6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02c7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02c8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02c9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ca" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02cb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02cc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02cd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ce" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02cf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02d0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02d1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02d2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02d3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02d4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02d5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02d6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02d7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02d8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02d9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02da" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02db" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02dc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02dd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02de" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02df" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02e0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02e1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02e2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02e3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02e4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02e5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02e6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02e7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02e8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02e9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ea" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02eb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ec" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ed" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ee" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ef" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02f0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02f1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02f2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02f3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02f4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02f5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02f6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02f7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02f8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02f9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02fa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02fb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02fc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02fd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02fe" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02ff" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0300" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0301" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0302" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0303" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0304" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0305" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0306" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0307" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0308" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0309" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x030a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x030b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x030c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x030d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x030e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x030f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0310" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0311" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0312" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0313" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0314" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0315" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0316" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0317" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0318" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0319" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x031a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x031b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x031c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x031d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x031e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x031f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0320" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0321" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0322" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0323" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0324" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0325" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0326" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0327" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0328" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0329" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x032a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x032b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x032c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x032d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x032e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x032f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0330" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0331" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0332" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0333" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0334" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0335" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0336" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0337" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0338" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0339" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x033a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x033b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x033c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x033d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x033e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x033f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0340" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0341" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0342" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0343" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0344" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0345" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0346" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0347" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0348" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0349" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x034a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x034b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x034c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x034d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x034e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x034f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0350" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0351" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0352" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0353" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0354" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0355" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0356" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0357" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0358" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0359" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x035a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x035b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x035c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x035d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x035e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x035f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0360" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0361" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0362" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0363" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0364" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0365" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0366" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0367" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0368" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0369" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x036a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x036b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x036c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x036d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x036e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x036f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0370" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0371" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0372" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0373" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0374" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0375" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0376" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0377" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0378" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0379" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x037a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x037b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x037c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x037d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x037e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x037f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0380" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0381" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0382" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0383" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0384" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0385" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0386" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0387" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0388" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0389" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x038a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x038b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x038c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x038d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x038e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x038f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0390" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0391" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0392" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0393" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0394" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0395" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0396" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0397" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0398" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0399" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x039a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x039b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x039c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x039d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x039e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x039f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03a0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03a1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03a2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03a3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03a4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03a5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03a6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03a7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03a8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03a9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03aa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ab" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ac" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ad" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ae" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03af" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03b0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03b1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03b2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03b3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03b4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03b5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03b6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03b7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03b8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03b9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ba" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03bb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03bc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03bd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03be" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03bf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03c0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03c1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03c2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03c3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03c4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03c5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03c6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03c7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03c8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03c9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ca" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03cb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03cc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03cd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ce" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03cf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03d0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03d1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03d2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03d3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03d4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03d5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03d6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03d7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03d8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03d9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03da" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03db" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03dc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03dd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03de" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03df" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03e0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03e1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03e2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03e3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03e4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03e5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03e6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03e7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03e8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03e9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ea" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03eb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ec" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ed" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ee" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ef" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03f0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03f1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03f2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03f3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03f4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03f5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03f6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03f7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03f8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03f9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03fa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03fb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03fc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03fd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03fe" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x03ff" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0400" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0401" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0402" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0403" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0404" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0405" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0406" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0407" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0408" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0409" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x040a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x040b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x040c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x040d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x040e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x040f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0410" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0411" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0412" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0413" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0414" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0415" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0416" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0417" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0418" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0419" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x041a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x041b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x041c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x041d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x041e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x041f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0420" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0421" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0422" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0423" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0424" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0425" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0426" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0427" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0428" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0429" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x042a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x042b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x042c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x042d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x042e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x042f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0430" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0431" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0432" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0433" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0434" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0435" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0436" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0437" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0438" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0439" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x043a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x043b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x043c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x043d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x043e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x043f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0440" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0441" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0442" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0443" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0444" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0445" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0446" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0447" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0448" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0449" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x044a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x044b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x044c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x044d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x044e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x044f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0450" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0451" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0452" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0453" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0454" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0455" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0456" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0457" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0458" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0459" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x045a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x045b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x045c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x045d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x045e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x045f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0460" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0461" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0462" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0463" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0464" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0465" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0466" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0467" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0468" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0469" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x046a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x046b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x046c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x046d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x046e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x046f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0470" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0471" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0472" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0473" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0474" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0475" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0476" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0477" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0478" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0479" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x047a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x047b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x047c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x047d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x047e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x047f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0480" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0481" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0482" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0483" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0484" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0485" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0486" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0487" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0488" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0489" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x048a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x048b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x048c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x048d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x048e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x048f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0490" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0491" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0492" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0493" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0494" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0495" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0496" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0497" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0498" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0499" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x049a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x049b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x049c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x049d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x049e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x049f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04a0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04a1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04a2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04a3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04a4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04a5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04a6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04a7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04a8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04a9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04aa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ab" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ac" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ad" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ae" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04af" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04b0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04b1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04b2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04b3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04b4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04b5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04b6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04b7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04b8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04b9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ba" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04bb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04bc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04bd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04be" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04bf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04c0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04c1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04c2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04c3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04c4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04c5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04c6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04c7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04c8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04c9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ca" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04cb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04cc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04cd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ce" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04cf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04d0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04d1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04d2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04d3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04d4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04d5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04d6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04d7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04d8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04d9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04da" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04db" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04dc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04dd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04de" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04df" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04e0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04e1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04e2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04e3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04e4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04e5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04e6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04e7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04e8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04e9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ea" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04eb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ec" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ed" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ee" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ef" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04f0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04f1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04f2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04f3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04f4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04f5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04f6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04f7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04f8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04f9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04fa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04fb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04fc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04fd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04fe" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x04ff" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0500" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0501" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0502" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0503" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0504" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0505" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0506" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0507" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0508" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0509" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x050a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x050b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x050c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x050d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x050e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x050f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0510" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0511" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0512" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0513" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0514" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0515" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0516" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0517" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0518" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0519" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x051a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x051b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x051c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x051d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x051e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x051f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0520" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0521" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0522" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0523" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0524" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0525" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0526" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0527" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0528" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0529" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x052a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x052b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x052c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x052d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x052e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x052f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0530" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0531" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0532" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0533" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0534" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0535" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0536" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0537" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0538" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0539" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x053a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x053b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x053c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x053d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x053e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x053f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0540" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0541" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0542" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0543" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0544" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0545" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0546" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0547" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0548" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0549" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x054a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x054b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x054c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x054d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x054e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x054f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0550" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0551" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0552" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0553" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0554" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0555" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0556" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0557" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0558" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0559" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x055a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x055b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x055c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x055d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x055e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x055f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0560" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0561" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0562" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0563" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0564" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0565" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0566" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0567" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0568" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0569" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x056a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x056b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x056c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x056d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x056e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x056f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0570" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0571" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0572" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0573" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0574" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0575" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0576" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0577" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0578" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0579" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x057a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x057b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x057c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x057d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x057e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x057f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0580" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0581" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0582" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0583" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0584" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0585" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0586" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0587" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0588" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0589" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x058a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x058b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x058c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x058d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x058e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x058f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0590" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0591" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0592" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0593" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0594" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0595" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0596" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0597" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0598" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0599" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x059a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x059b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x059c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x059d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x059e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x059f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05a0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05a1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05a2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05a3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05a4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05a5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05a6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05a7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05a8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05a9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05aa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ab" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ac" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ad" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ae" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05af" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05b0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05b1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05b2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05b3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05b4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05b5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05b6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05b7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05b8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05b9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ba" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05bb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05bc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05bd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05be" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05bf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05c0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05c1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05c2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05c3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05c4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05c5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05c6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05c7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05c8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05c9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ca" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05cb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05cc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05cd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ce" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05cf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05d0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05d1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05d2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05d3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05d4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05d5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05d6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05d7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05d8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05d9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05da" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05db" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05dc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05dd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05de" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05df" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05e0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05e1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05e2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05e3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05e4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05e5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05e6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05e7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05e8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05e9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ea" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05eb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ec" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ed" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ee" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ef" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05f0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05f1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05f2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05f3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05f4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05f5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05f6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05f7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05f8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05f9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05fa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05fb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05fc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05fd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05fe" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x05ff" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0600" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0601" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0602" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0603" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0604" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0605" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0606" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0607" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0608" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0609" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x060a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x060b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x060c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x060d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x060e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x060f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0610" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0611" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0612" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0613" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0614" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0615" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0616" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0617" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0618" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0619" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x061a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x061b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x061c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x061d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x061e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x061f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0620" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0621" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0622" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0623" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0624" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0625" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0626" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0627" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0628" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0629" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x062a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x062b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x062c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x062d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x062e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x062f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0630" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0631" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0632" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0633" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0634" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0635" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0636" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0637" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0638" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0639" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x063a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x063b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x063c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x063d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x063e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x063f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0640" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0641" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0642" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0643" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0644" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0645" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0646" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0647" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0648" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0649" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x064a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x064b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x064c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x064d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x064e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x064f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0650" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0651" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0652" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0653" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0654" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0655" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0656" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0657" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0658" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0659" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x065a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x065b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x065c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x065d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x065e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x065f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0660" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0661" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0662" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0663" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0664" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0665" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0666" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0667" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0668" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0669" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x066a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x066b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x066c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x066d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x066e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x066f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0670" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0671" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0672" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0673" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0674" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0675" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0676" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0677" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0678" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0679" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x067a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x067b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x067c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x067d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x067e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x067f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0680" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0681" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0682" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0683" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0684" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0685" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0686" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0687" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0688" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0689" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x068a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x068b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x068c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x068d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x068e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x068f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0690" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0691" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0692" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0693" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0694" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0695" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0696" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0697" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0698" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0699" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x069a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x069b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x069c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x069d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x069e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x069f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06a0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06a1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06a2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06a3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06a4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06a5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06a6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06a7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06a8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06a9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06aa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ab" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ac" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ad" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ae" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06af" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06b0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06b1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06b2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06b3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06b4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06b5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06b6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06b7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06b8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06b9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ba" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06bb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06bc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06bd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06be" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06bf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06c0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06c1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06c2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06c3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06c4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06c5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06c6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06c7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06c8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06c9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ca" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06cb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06cc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06cd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ce" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06cf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06d0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06d1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06d2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06d3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06d4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06d5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06d6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06d7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06d8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06d9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06da" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06db" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06dc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06dd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06de" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06df" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06e0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06e1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06e2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06e3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06e4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06e5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06e6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06e7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06e8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06e9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ea" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06eb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ec" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ed" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ee" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ef" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06f0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06f1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06f2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06f3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06f4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06f5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06f6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06f7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06f8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06f9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06fa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06fb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06fc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06fd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06fe" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x06ff" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0700" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0701" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0702" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0703" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0704" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0705" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0706" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0707" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0708" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0709" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x070a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x070b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x070c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x070d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x070e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x070f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0710" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0711" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0712" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0713" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0714" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0715" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0716" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0717" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0718" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0719" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x071a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x071b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x071c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x071d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x071e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x071f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0720" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0721" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0722" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0723" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0724" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0725" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0726" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0727" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0728" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0729" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x072a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x072b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x072c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x072d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x072e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x072f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0730" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0731" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0732" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0733" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0734" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0735" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0736" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0737" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0738" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0739" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x073a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x073b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x073c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x073d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x073e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x073f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0740" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0741" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0742" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0743" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0744" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0745" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0746" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0747" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0748" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0749" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x074a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x074b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x074c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x074d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x074e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x074f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0750" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0751" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0752" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0753" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0754" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0755" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0756" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0757" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0758" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0759" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x075a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x075b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x075c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x075d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x075e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x075f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0760" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0761" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0762" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0763" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0764" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0765" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0766" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0767" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0768" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0769" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x076a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x076b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x076c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x076d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x076e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x076f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0770" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0771" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0772" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0773" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0774" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0775" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0776" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0777" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0778" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0779" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x077a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x077b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x077c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x077d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x077e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x077f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0780" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0781" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0782" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0783" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0784" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0785" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0786" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0787" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0788" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0789" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x078a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x078b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x078c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x078d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x078e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x078f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0790" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0791" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0792" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0793" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0794" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0795" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0796" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0797" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0798" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x0799" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x079a" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x079b" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x079c" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x079d" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x079e" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x079f" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07a0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07a1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07a2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07a3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07a4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07a5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07a6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07a7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07a8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07a9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07aa" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07ab" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07ac" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07ad" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07ae" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07af" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07b0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07b1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07b2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07b3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07b4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07b5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07b6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07b7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07b8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07b9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07ba" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07bb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07bc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07bd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07be" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07bf" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07c0" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07c1" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07c2" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07c3" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07c4" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07c5" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07c6" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07c7" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07c8" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07c9" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07ca" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07cb" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07cc" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07cd" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07ce" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x07cf" + } + ], + "rlp": "0xfa159a99f9025fa09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa045b91a6de5e21daa74baa5ba69ae904a3decbf15e7211eaf845701e55efe5221a09832988f2e56130730b13372b8bb2b429f5faa477ab0f69dd95ac4be4601ed81a00a22918f5496d638dcf1c65c0205974e2288ba3ade03ff6b9b77b00906650f27b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008405d15b4f0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0ee1fdd8114b7c672f67093d83f01b7b042bbe744da6bf2ecc97d6e824101ada9fa0fb5ddf901fe8007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a030bfaadde922e07317ec3fa2976b8b705a5442fb9ee84eb6e0fd91a450be17b4a041257abd690f8ecb1197e00c3159cb16f5bd1318d60460260064eabcbfdf3006f901fe0107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01f953db14db7ac12dcfe4a3bf5673b2fefdd5f05536ec9714d5b2396afd7c01fa07bbed78cf0d3b6bf45962e3d33b7c58e0ad263b3c7168a618305cd690880a842f901fe0207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae7f6d2ff9f1396ca646269e917a7232e92287f74fca578160a9810d9ebcee84a0123e5b6ab498ff9bdda0abf2f11ac58c6bd69d36b7855db172faced230e38a14f901fe0307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048cace09a9d8b80ee1fce66547e192b15ee2b12fd6839d6d88a733f61e6dd325a0115fb47c4f8cab29186935eb325f8ad938b2ddbbe826ec01b650a809983534c7f901fe0407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0861c18c825531c9f4b77829cdfd30f65446b047f990da11249d3b1a67b4f9325a01bcc1ff2e73e35f44e9e9f1be76661fe73680632e503808f9a4be090e4e155e7f901fe0507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a050fbe885b2b502173c23180d9baff06c199199e84cb8fe901064ceeae581a8baa0249232d8309166719f796b490724758bc443aa20c2c267ad0850b77b1346af03f901fe0607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04fabbbbfedf60c926b84add1d41b172cb38cad9697e045638fd692b3288f0079a0405e713144b205d30ebae217330e39a08671f1f3039a19346eb3ee0758253de8f901fe0707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dae805ecef72558ed56432a303fae74f2a2cfd42cc700c3e030e77bab430370ea03855e4cdf81322864a298381e5f557f87e452e314638287e84d6c7dd87f26069f901fe0807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d15d3dbdcad0fa346c1c0acf70c373b4b19a959092a0f9ffeeb91395c8c0ac43a039b7820c18370e747dabe12a1f4aa3fa33f6ab461a97ffd44601ee4becefd18af901fe0907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06eff2f34b6821b345eaf7172308f07411d3ea86953270cc8d7d26dca4d0d180da018e91821c35f923cddb3b4b9f9e0b31ff0557a33a2802f99abed62b2d71a6b50f901fe0a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09eb91429146f87e966dfe5f0e680d614b90d445a7024f0d3147df824222e7cfda0381fd142e704c51ea4cf15c884884d3d3fb54468322712a935cbca147fdbb781f901fe0b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a081f2280555928874904cfc3f5fab5c174f8ee1b13ee9570753f9720df1c79b56a021357a1fdf2ad683fbcb4b629839e238cef8149dfc67263a736e2b77e93819d3f901fe0c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ba6a97889900794b405e9841710694a81cd2038fbf5e14b4a63f752ec0482049a01a2f7a08e9c8a066c968a60ce39fe0d0184dafe35f2d9a8a9acc237282d2f329f901fe0d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f44c4480b6910737b9422d6ad6ac5f92410433b9d1e24876588717e65b89b438a04855832825a190f7edbfd82694a0ae4a10cc79c3508775fdea3a645dc7e36b82f901fe0e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0910a78eb187da9330075c1cd560eb805e116ea34fc5ae5dc02fe3429fbab938aa040d85a615e70169a6f79c444e9a7d4f1f2568c7ba2563e8972647776ce0176e4f901fe0f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dc44ba25575ed7eecdaf772d37e071386f737a35a78ae0cc9c66ba852ae9cf6fa05110901d4e54deaa7f8322cfbeadb63eb3b984bd837fe500fb06671a2ad57133f901fe1007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08c4f8e06874b43512d0b150eaf9279e2f434684404df2317221006b9e7ed46d9a06005605cb5393654fc39e47ef7d93fd4f10a6de6b5bbcf2c80310f8377ccfc7bf901fe1107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ef27130e159c446f39f09268f342b91e36c30659b5cb526050b9440979bc4949a039b752a48abe9c89bdacda591b52b46306be7325bf10e7c9b46236fc7bc5ff73f901fe1207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01281f265da4c0c96221584fc99ef4eadcb04c26e4b3c17494a843e5796265c53a008ede8ba6f0ee70db3efbd6af7967e15f5b0a1a35f62e44da2dad602effa6746f901fe1307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01ff11ffab646cb92362b1630911b7692503786a331102ec1f1f7f71b708713f7a043257da3dd01fea90ff91a15b0e2b2bdbbef5469aa0b50d982e216a0e43e1ed2f901fe1407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0208d7d2c54a3416c00eea31f3f94cac01c3337688c6317fa697607406f08f5eea00df2927462f5eeda4be51e5b727339874ee7671a5f4dbb111b68ee42ee5fa5bef901fe1507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01475d86c913756348ef44bf0b9f1f4a2979dd13247eee5a70975392d0d4ec994a0431928daaf03cb384a3a059d338d1e290e96380a69363287fa5230acc1b6f3fbf901fe1607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c8de8d69b8026d35d3b4d73ec13300e5951f462d1a68f4be0c1c5b177346ad08a03d1353c74101b31f680a29f3d9d0e5614675fc535e8abf8439da9422301172bcf901fe1707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f9dda6a3fbf0ae965bc16564995cb506229655307ba01748313ad99da8eb6002a076e5da59ce108b2e249323ce8d8467219b2145dd192939fd45c4187e73fbc55cf901fe1807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01b5572ceb4c3a9631638a85dd3b9716753a96efe8287d5496615e35b5fbf77d6a0233aea4c3a49b3b4d5f862905001abb97adfbaf4fc2828df167e96b4ce0c1c0af901fe1907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a034716c28bfacd6d4246ff8873bbc19b7e6f467ce75c593fef158521e47ae7f67a078d92dab02ebd52feee2cec39e60522889c3d4efcac20fa0c0ef41c9f420ad7df901fe1a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eec4ea41e915d78772db83b8d6be6e1c3cb62381e87729ba030ed6b61f6e0b49a05f6a6b1b542989bbfd58ac4c7aef8ac5bff3a78edfad59fe4daf74de98acc457f901fe1b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02e9d1b4102901ac027bbe9991e22dd430243f3d2e715aa75f8f3f28865d6d285a0541f451a95cb8acd20ca9f7fc5b76270477a2c129d2e8277d3bed1e93181c687f901fe1c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09276aaccbc85591a59320f24730201eebc133a8a6a7d9ca40c5d69eb129e212ba04192679f083bf490597ea927f4408704e93efa4581ac8965ca796a1e78156ff7f901fe1d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d330644ac6751c59021bc5e8023558db4d7b42efd4bc33ecba07f5933b548b5ea0528cb047ea106522d6e46f131f77b51239327d8815c37d192144a6c2c533b343f901fe1e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08e17577df3e0fb222d82f5ff46e30e499b9cebb355a23e418fbdc7dedec9ba3aa05c5ccf205bf74abdf30c7ac3bd41448165e38ea7fd44e09e459db38c27222b62f901fe1f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09a65058f9873d0bdffa68727f95690244c566c1cc1b5936c1780f4883be3c1dca041bb9e33b19d87be35ca11d355bc2c8fb08306ec087acef79df19456b5e27972f901fe2007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a065cda48a49ad598966f48b94440a341626903fb83cfdcc1e4a40f9e564daf40aa01798ed01c0e15cd61808446583c8a61e4c0103022bd0082911c9d805a7b8be8df901fe2107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a082b649b6276650f574310f46c2abbcc9535db3f5f252f783421ab34273d79707a04d15552256b1a138ae4ab56f3968f1422ed0eee91cb35b0bf637cd769821ebb1f901fe2207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07c2566347ae0fa8ef37794665991d515b56dce1a324869932af91fbb1d7cae74a03e896ccb66800f64a2c89715ac70e19b63ef491f372eb5cd4604dcb32bf7621df901fe2307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03be58a124394e07120494ad8dbb8c8268c1bd06cd2a4222e2e7ea8c932e8e2b7a0153ad28a7fa3f83e162debfbadda76744f2ffefe854201469da6a8744814af88f901fe2407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0273fc782c3e041edfeadf2a2cad4935bbebcd2d99e6675ac658c4caa6bba80fda03aeebc4f7da199d77df180f010464ab1a499efbea12c895e76a84c8eb56586b4f901fe2507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bb26993c942d7285cff908d73fb767cb89684ec544a173f099e459074cac6d87a01fd7691b352eaf1d01ffc759e84d710c2c693a3089a1bb5e7e157ab1b879037ef901fe2607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0397b06d648e9ea1edafd4dba235d75c55ddc66c1cce4c7624a5985cf2cbeae63a07bb7ff29908b0dc7852c765bb3df7350ad4cb4deccd4c03086e924518784f789f901fe2707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dbe2a516534c4f4342998ac0ea8f3bfefddfb7585e1f02ae0a385dc2f0691a13a00fa8c4ea1a81485fcca654b57937e3393b62da22057d8b0c95cd70ec0d5e37dff901fe2807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c6e29c3f5551aff27dc7b17a408c7bf563e4a79166aa2637f1cab3bd80240976a06a8c76de1f8a6a7950fb332e9b472f792ac022cc8c44daa3cf46a1a445b9adf1f901fe2907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ee4521ea00ba95490e1486ee10866a449e5c0e73f373c193ca614c9ee758a9b7a001bd7e6f7b2dc1a48acf06a003fd09e7f2c24f132d9e0c97bb34cd62e08217edf901fe2a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00130cd73bf9df83763c71c78dc273dd42c3c284abd7b254e5d26807545c9f702a002aff1271c2f4141e299df7a88703f57a2f9a0f4d275e1dcc8c8c9dc40ca6fa7f901fe2b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01520e5a11b009ddda73027ae4fe4a0f125f9b04185233753a4d4b7fd7107d573a070c463552952026483b5ea493be4cc21608535ed1d952d000e0f2e10c395fda7f901fe2c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a098a7428c6f1a1f6bc2f346285fa81e019c081525c0f21879f3d131e1e52daa99a0745649c6ee07012431ee2b12d10140a94eb58fd95d6e27fb50ce64911af21f4af901fe2d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0be1e6dbe5d9ffd9bdee102647cfd94692ab2dad9943c7972643f3cf8b08ba09da063f6484303a5da3cdcc69690cfbd3eaaed60c5b32b05af922bfc086a2294be0df901fe2e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cb5c40d75a1a1dea6134a54f49cdfdae20b861b4992b984a3d4bb1f5beeee18ba01917ad58b085c1f33d704df9014619220632e8c2bc14c6dbaeb1be69c0b17532f901fe2f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0950134a11deeb34dabfdbe3ea21be3b4b2024ec04af8305ce02265a09c0a88d3a06d1fa6c9634c896a6f400a50b91de6778440d75327338decf6173b1dfec3cc96f901fe3007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0552d5c1f64ae8c02d56fe21f79e3ae02613ca7620a815fae01bf2a5dc454c419a079b88c7ea5f1cd8bb8ff343dc2e507cfdaaf3a16f55740ee9477f3465c103821f901fe3107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0872ffeee2b99c1caa2a6a25e8ccd8110261d503cb0284bea25322b52d701c3c1a02682a003f086a581783af1ff1dcbbe92723bd20195732d1dd1101ac7b3e13d25f901fe3207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b4e7d5aa82087cc385cd5415703d2b0a3609fe01930520c2ee6fcc2cc66b3200a0216c836d593e93fc574ff016271076c5c1177bd738830b17b0e17d5536adc1d2f901fe3307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f8ce12c6738b4d9093615e85a50dbd13dc4c49643a1a4f74b153328d4f6a7d80a047cb587232bd8b0f03e111d7905a8c8e1b49290de95fc55929ae54deb394fd3af901fe3407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00e6d4ba0d16a94cd5ba8e9163179803884d45f0d3b70beb76b0847f0db770bc2a00ca97524a7d002e8e6833c0594079ae6f43d9d35adf6307234c50da2d1e2249ff901fe3507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06c466ee1def939321f6a6f618ddf3c85946aaa8a6d1d1429623a43254871595fa0480bdb8c4167b8f68f5e71f5c9c3d7a44c243066386b1aa82b2bfbfbcab4ccd1f901fe3607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0309f9165ace59e83cb8592a44ecd1866fb611a9f85ca3af683d6cff66de60a37a046b8447395b35775c4c0dff87c38b79d85bceb04f962528e0f8268258e7b42b6f901fe3707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ff7d01ab7aa1a7a8638118019a10e39df1fd0c0699d5ab54cb0c081cc4b4635ea04269b7d775daff6c191e560dc95f32ee91de047c8130878645f2608201dc7590f901fe3807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04548d41641babf95019296ad1c546aa65ee89da85c2c7a95ab49b8a48ebb9efda00bbf7e8abd6320f53df01a54bc54cefbfdc6a068ce00366897fea9b5873968c1f901fe3907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fe68f675aac42272ad8f90b51a2877e6019a693f3310ec4891a52d942e4a42d5a0776b995e5fc15094ae13946a475a0646f7e4d0248699578f66a995d4b8799fcaf901fe3a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ee3d298c4b47bc795eb2eaca2334a352057bb0904a08b12502ef982290cb3293a04614e54a816d23fdfacf16cea9adff8eb07da95224080f17743ec0bc30051452f901fe3b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03c241f16dbe10f1207fa4f696680becdb5790dfabc19d49dc0091cf2eb66d033a02d7633c6c6b7c4b19b96b8344706e29e507c84eafc7623611637124abfd8222df901fe3c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0135300604bf871c099b002d1fc242e954b5cbc0c8febe0435dd9359eb3888159a02e25ac6d3c588724d3639f2632ccb1cb554bb3a1751b6d25f8d507e310c7ffc5f901fe3d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02ae4c7a84b8220a30ade7d5bb02416fb02b6315e8beb95b5e9e2180baadca2a0a051cd7493db288496edf44c0903b7748632fd10e900086fe91dd636f0eb9d7ef4f901fe3e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a9581826e1638e7060aac31848d72e8a94d549fa8dd52618b8b92846c67a5871a05a1dfb368ba242afdb36c55853ebb3795f59a4e1b6532d2dc4c296ec5fe597fef901fe3f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a050fd795d555d31153965fa1a540fe38e523711d8ee14071f5739421f0706dbbda0042d43642633825ed96a56c1896b520deb13990c2b52c68a9ca6fd14fc82bda8f901fe4007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bada34b96134980003b543ca853483918038a416ac6766757edffa1991cbe87ea0744fd1ce5f38af3138112cd92a7b2983d2ede6ad5dd91b81e5f679ab3ab469a6f901fe4107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ce5ba871c7364d8edb3f1af972b4a1a21851049251e466838a19a2d01e9310a8a04ff5187ddec6ca9f64ab64b8df8fbc0c90cf8081d30a0ca771eb1b4d00866454f901fe4207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0050fbb03140e0d8794907e619626b58ae8830b966517638b299b82df85303c8ca05e946f6e617da2286b37c6cae6ad22b2cba0a48ca2ead0c6aa32cb2f611f9cf8f901fe4307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02154375e0a448769b45846ee65e725a3a702425ae430f76e9b2e401dcd07d61ea00e80ff7821d8776d9c3a03d2e14a4f4c659210ae0f0e9a7dd3f8c2b7cb24e878f901fe4407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0546e6e53fae2fe954254ef5a4ac21127f564532cdcccef55206a40822f071e99a00b3fc0788e90b7e2c7ccf0e040dd2e9374dc70ed035fe1bf045a785f76e130eff901fe4507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02630a8a2b68ee0ab71de697a18d9f26245a32c523b1a416dd583ba044143391da07d757f9c0b9de9246a17a2c4bc5dfa61f9d69a24275e62b312a3557a4d217c8ef901fe4607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05d15f59071c7d289185e3b38d9e68d29c86eb95df0fdfe8276ab10af213c6ed8a06c89aa67f4531dc8cc378fc582f58d4758602e55f0f159b682049806ef7fee63f901fe4707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a086478ef013bc35b4fb23550c8969ef05271afd4ea2283d61ec1d63c17809e592a0587f9cca2f431d60dc22065c3d2d19c8c77ef0806f7c32b747a9ea8556845f1cf901fe4807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dd1d2223030a4636ec3b18d85915f09b2042c4cca3a110dc83812d33a807f001a050adb91f0bcbd64dc62a1344026abae36e99985e3f0e5d381976ce7543e6d8c5f901fe4907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0272422a872a113c4903847687b96a46fc7e903a59fdb7d52855231033d1e95daa063adb464d1f9cc270a91d726e5abb5c32a3d4c064aa9d14d46d20cf569ee6803f901fe4a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c37d9ec1fc7e0f50fadd2541381c84b680739184373154f3233eb8e60d432541a045de21c3c3d505d1f1e10a24d69a7cd927c0a158e9a810d490c0a469e2adb8f1f901fe4b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f6f56f5dd31e385bb84042a9fdc16790e08412a591d71ccda4a4cf5af966484fa037ad8a17459b384fae29edf7d8bd9400246db9b31c3c52d871cba85fa12ec63af901fe4c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e9925c901c51e760054f85a63f14bf55e2bb9770d4f2ee97f67a1339dba796e6a02959bd4a6b4c278076bcd90485d894d1508f727b8edd96aa6e5a91db5027f4e0f901fe4d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0619a1e0986aed678dd714362378d57e4d0d4560eec83c77401b122e6f06c32aea00b681c7d375aa8ad94d444443a5241236d8ee7178aa9d9e3b390152446272733f901fe4e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a9e2c27290c3eec8596b72e1abf0f2cbeaadf993b62519e8f2e8f5f7380b2869a04c6594ceb3766c1e9885229bcd6b39cb48163a12131f0d7ae41b5b366a841a55f901fe4f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ea64bc00ca0607d43673a547839df2f5f14071b68ccf4a1ffa97339b396f712da01618e30ec6b6d47631f2db134655511394a76cd80a36fbfd70b9ab4f341cc885f901fe5007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00ce5055f7222659247c31a8b7b42ae082d160d92a2f2ca9d5c0d7cdaf3eada69a00aee0fe3e92f75f2bcc8b1c1b9d5b1a08d54522ea2d11bc3aa416f06d727034ef901fe5107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e31a51c402796c6300692b7ff0c6423aec1122b985131df0193c7199341d8247a04bc9d1095cdbca7c78ae4d9bf9a91e36245faac41d63e1ca87e3dff12cbb7652f901fe5207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ce05d106e03df07e754f6395d9535ec3caddd40811a659020cc43205042fa632a034701a79953ee0f5120499f874094c872a66ae8fce1f4cff2fb09ecffe9bb1aaf901fe5307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a083d1165fcfc805cc3740f719fba2e88c814641bc62e7f99f9c5c398d9e446f07a015ccbde8864333e89b9909850754fac204d917d9ec4e9d2b8ac2ae824a7779adf901fe5407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a015829b6424b08dbd2fe09562d56c9492b1134426bbab7a2219e5405e9211f603a071a1573fb9da1f182e5b47bb9c5d22f3615ad2ad10d96003f484f4721a7a5b31f901fe5507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0163a52be64b02c1d10db54b312862a0ea0f53770deb41c39ba4d827620fa5e34a004d0ef4d5c3b0c2ab0489577bf573e95212c2e4cc113ca3aff7d4be87ad02227f901fe5607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dceaa112aafcbb854396b567ad21ddb8b9033db655d8491d47c89d5794281063a065ed7b789c1091ec1c9d16ee403b00d5c1a157af3c9f42b9d0606f55d77ffb5ef901fe5707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a016a13948231a380a405f3fd8153b5f880ebed457c669e49f3a5f48398f013d41a037276ffa0df8652ebe13d632916896ca6bdc73c745da9a49eb629949c70ab85ef901fe5807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f03b89f8d2340ea29af76e061f256fe1bc54ce24c000ee41921b7c010bfc177ba0339437a5e44ab885d3aeeb9746ddf0a43f683c56dc817c42180426e2cf2bf89cf901fe5907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a048f799349aefcb86cf805b25f35a749ccf58242a4e2b9420f0fbd27e6844ed02a0192673adb2d14c689497222a48bab997997e9ca14e2b00043feff29452887fa4f901fe5a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f5571c0f55a00bd418be5d44bb1cdb07441b12b0825b08e2f0bea7cefeadac67a03d27ba8f520482c213a7391cb00ed1b5e1a21f2e43b160e0da7f98f575abec06f901fe5b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a071f3161cf021abe2ec2d82f69f669eed1f66e7fc4c21b7255cd33707fd0ce520a07d9982cf3e01d5077c40ca0d0cea59810f456defb412b02d35ce955fe66c4009f901fe5c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02d24494c5e29711a1bc80f5c41e758778c05f3fae901d3c2537a095e32783a12a04a911abc5c6c4aef34c35257240172108a17cca7db691c2b765d4b5b34358c2ef901fe5d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a4754f155f3cb5c09814a80a1a0cfa36c495c6d79a6dbbe0eb1701b8c37f1561a04a93aa032d0e0dc7156e8af29d82ef4db53861bd606dd2e8bf12533640cb6543f901fe5e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a6925a12c2a9dd24c89c077656b3ff67934b96af1203417167fb19640566e152a01d841f3f83a7a52152bdc2aed332fa4edd29571bcdea933128bc8a7280086521f901fe5f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0713f5e5986bb6655c4548b0d9007a0f97f9c11e670501e28455ce47641e83905a07592d786224e2f9760a4aaf3cb65e2a638c54d3e03c40b884ab5d8fd575b867bf901fe6007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ca95946554942d4c991cef63ac30d58f794682b4a96ee0655d7460d3ac06adba025aedebb0dddf781829a85ba6fd42c063fa2a7aea3487b21a05f51135ed9c692f901fe6107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09143b5f4c15752cecf3746afd5f2064566f3c4fa373913f34629f4809f237238a0411e0eb56604ff9b361855942492e3227539c0347dfac1428936fdbcca132b97f901fe6207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b108494b53797d6afd359e154983fd20143b7051212dcfeb8564f5ebfce778dca01e4cbd01a9bc75af072f46584fe695541d6b0cddbb97d900561a0f327215eecdf901fe6307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7b7b6cb68738dc40921983d2b6b454a8fd7217890fee3f1ea68866847cd5740a0257b8b0ec1cb162457f30c919c063ba1797dfe29afa240e730342169bd4cec63f901fe6407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0666e5aaf0986ee1fda1b72ee4fe9a82311b0c809c266d5ab11d11022b9874b55a07e8438f1f45635f76db910dcd1099ddb91ef7bd72fa277164228f82f92bcae3df901fe6507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a082cbb2ef9c903d610d2534e40fb0cc2745062572a45608dc60f1ae28938d9240a03c6ad55e6b7857884a615cad98edf3c4868612f3a15692d28b9e35fb31ea22d0f901fe6607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a066db8cddf7f78dc98a85da50e1d5263a7518b573b1b95853548ebd3d12b8820da01139cac9c7b1082a6ed979271f2cd3b8cd23c4e342943f53b67a0d5d69da1dabf901fe6707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06ba13c11c6bd52a7f3cd6bfe57795db692ed4b8d60702800efec7c5d0f932e92a03cbf54ff26b456220537b11b78d60bf1b5c34a4bbc1aab9d88478cdea607324ff901fe6807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f4b6a4a73eae8a3cf63aa9e863adde2c890c64c8eee7fe286a7df6cd9ae199da00a3c305b9cae13983ec21784d3b52b2025c6456c753da9035d563604c8211da3f901fe6907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a078827fb1b93f095c13f442f340105e53fdc9f30df13fd69da74588b0e17571b9a0600162a652b3fab6525f1428f2f727eba40ceda6ac0ac85fb0f8023bfd5998b2f901fe6a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01cadb5d6845b63ee01b0a7848b54ca720b7b0b46decc67458240d8eeca827b58a0185809f31d9b4b33d2023c1ddfdf787f97bd156ddfacafabd550c182fb5626b6f901fe6b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05b7959086548f45a80e4337ccb93ea38c6224c2d3f6fda9437c9f87ea56aa071a00ebbb0f375fb043b2e7e729a81817aac272ea3342170b7284a9ffe04307f221bf901fe6c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0887ef8bd2a940f65b066bf672daa5c9da9ae3bef7ba3798e0b61e01c173b83f0a0537010836fd6e0a9e8d5bb34820f3b56430f448adcdc25e195a63757f6b2fc6cf901fe6d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05e356f0a2e98772d12ec22a5240ec47122dd882c7ef2a2f1843e77a1fef24f24a00ce9eadb09c5243628677ee6295778471b4ebec078fb6cacf6465caef1e7dcd6f901fe6e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06345be4691e50c7617559372ab0ff567e706998edffa9e5ea0255189898806c3a068f081f904212544c73cbb5b362115e231f09dafc014e3f29c800e43f0777af6f901fe6f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b251e3bbb5f090f41f9fc072906d1de70739fc007fc5a7618c77dda038c84c08a04efe5a210efbaeb82f2646a9f82258484a25b5cc74adf6dbf1d44610411c0f6ef901fe7007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0266a2bbdabfc48777555b7b3e07a70126717aa5bbd58d7d3d6a5ba2bff795d90a0208c4aeb4b8f18a1ffa148d07b646e9c0e8edbda9f606956da769e9e537f03ddf901fe7107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00a600d1b5369d6e9079b2720be2550df7177dcd4363a323303e1d120e324099fa00cf342e8e0633eb46452127f0b508fdf71a3fbddd7aede072fb076434c989a18f901fe7207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d6fd1c1f164d37376bf8bbbc9766f14a2f40269be5dfdc936da4b95be6622417a03c8f643c0be4f482e98bae8281544e6fd3bd07c8edc0ffbec2c73fd5f48a428df901fe7307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d0388287b5335fd022bbbcd39bbb06baa93c1879456e96993142b3d862e30ae1a0715a5f93a08ccf6470a3f6d670b2041c6d6a23236e6f722123b09e5e6e712e84f901fe7407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c15eef91a8b38b0202a32e1d10e35441db1a3c00e6c2e6123a4d400843379abea05e8a8b1b038bb6922c8b4e838a8b53b5fc9fc8842eaebc7bb592f409e5e79d47f901fe7507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c79106aa4021e2568f7462a8b943a10cf025a14d64e6f2e5a5d473e7800d5d0aa001f9da633896cfe6260cffbe40f4406d0257630f60c9afc4bf872021a5ee2707f901fe7607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05e015727be7663a16ded69f23d3097885b8a933707ff768e9745053b45f83e05a0310ee338e6420a76aeb280ab1a5c56f3e7810220c84e0214dde83bc68a0acdd6f901fe7707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e5c4b751a1759d9b70cf043349de77c214a7d469dbf6eefed83b6e94916b7704a0688c20aa890065a7f795080e297c50d5acb7804cf513042e89af1a930821666df901fe7807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06cf7abec00cc88de6e8b1e99eeabe20f76a1d6b1415a43ff3bf0314f74bba081a05726d3bdf5d92e61a3aa8a730fd35ed75b4e0727ec1520ecafb764f0eff2531ff901fe7907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f767bc4ac0d203a9390498d5348a5d24abdf1378f585ab461b1bc7b7c4980cf7a021208f773d5f8e349fa05a11823e4e51a7536500d41020312e26b4adfd894dfbf901fe7a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07b3aeb50d2ec3ac9b9371e84fad6d6e9687cbfeb3f1a3a4824e0bb7f84883569a02151414c999118c6cd1161d77e08c7f0de30efd58e28a1f925d9f435f5de0b8ef901fe7b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a061b8638a043589365deb454683448cd64e6d6910cf5b7d74e1780a003ca902efa03c2418ab68f700584316886ae4e226dd1146f80658013c9eddfab57c9633c3f1f901fe7c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d037a9c9cf5ad87a446f418ed91f9240d56b104ea52859a452a1897e68609eaca02c65fbc5f36f8d7c1a95799c1a64c25f87d4c8b124d92d989aa78c76ced5fa2ff901fe7d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09b39b10e7890b8855e3902c61f9481cb9dfcc9897028f4d84657e92b2e843fcba02f082451860cba8529312749c3cb770044196e2ad83e005316c259458f3d33a1f901fe7e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00e0c790f90d72b4403680ee1e7e54f0ce55fafe32f614db1da7a749729b48adda033d3bafa1b0bfc432c3f3079dc6662b35ca29e6298605fea554f45bc78779533f901fe7f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06f21803102b7d1f4355a36ab99c47053b2019e5af727dfce16758df8f7080a23a055b3e15ec9161b8e04e06c4271012a4664e260bca639cf8bd6f475935828b255f901ff818007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c23af0538111f2c20c8f058eeea58e6f4d180ca2e335bcb992cfa7b0060b2801a0065d4c8e1d95da282a6ef79895e509945928c577386af60c7e8404f7e68997e1f901ff818107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09dcf2c2f0833efe33028859c06bca3b9711fcb2577c32890b08c16595819c5d5a024e0616d04004371344b36a41d275ebf1ee997d54a7c5d98a0b11a6c60ad0dd2f901ff818207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05af33653a918764bf5b65d8a30d3effe63e00ee3ab6a594f288a50eb92524ae4a02b5449b3f5bcf5bd2d6f0849cc17495d64c748b95a1a164cc7373912fe252bd9f901ff818307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7d53bbb3ddea5b5ec51d0e71787bc733ee7d472de457a298c9b01de5cb55d34a05f871365aafaaf861154a8b7f6b6e6a4ab0f512d2cd55616a876f0b1b7cb3206f901ff818407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ed1390ce53c6362ed508ae53be09d784dca4418b772e93281da7d2cf21dd8855a022e327c73ffbc80f97bc6d67f2ab183b1aa15d371baea213c4eb8a6b36b21c19f901ff818507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04803b814b4b3b87ff97a7409165b1847947830442ca4638a68956e86663dff26a01ad6f4ab016a8dff98bd5a658f12fc14cd2ce8d420dc3ba92cc5388449224777f901ff818607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dcd576746d3fd3535568c9f00674cc733bfe214b63c88655989ff01baee09058a06cbe7ccc0e1366b81d48cac7c2010170a89f8c9f67ad91a632a46e7b0adef921f901ff818707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0579cb2976797939e0299e84a7be80fb1646b641a0a7517ede71875b8853b3ffda04d9ebc1d4fbef669950faafd4f6bd6557d55ff8b5b01097230ee88dc42abbb8cf901ff818807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b68b2fe588fc6514c97399bf95d34998ddef42c511dec10b2a13f800871795d8a070f74a4277c791168983709dbc0851c679eb504c534b9cf9d26c01f51378021ef901fe818907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003259f67e79cbc078202f1a0d611e1084bff3cf45136c02430dc58a460c283d05556a07460183162b1cfc0b3afc69986c63c9951f3562c5e23582a5d8dbd176237be24f901ff818a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d1781915c05dc2a9d58ea3ee9703235d5282d2d2fb783c57a5f2538e4117b1cda03d91d1a24a482dfa5e3d4def5a286cb74baddc17132d2b2fd1a9db4bae28a27df901ff818b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0056843123ac4bd31362b9dc620b8a29643b1174eb5202fa1b1ec5ff3951fca13a008d35201606ff48e78823d8468c0ecc38ebedaa4dd1cb1af23b0be04a05a8ed5f901ff818c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03c24f9276aa06d8e15f04d8268197c808baa2d72e14bab73d8bc0f6c40403256a02e639814b0d2dabae3661b15057f32e81d2e8992f75621f9ee132b16cc304c13f901ff818d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06aabbe9c006cc9a516e709f0481f23b4e0dcc4a9a01927eb7f13dbba070e758fa0497f38e035e7047956dcd017bbb993d116ff0adb441abdf221f1abcb86d95fe2f901ff818e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02f2fc81c0c6ee5f9a5de97459d92b8b37bcea5117f2e639de075eaffccef204da0202aa50e030622202e83d13cea4f16885a38ceec60f2b7fdb0425114a99eb163f901ff818f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02990b4577ce0ed732dec87637400cdeac01fbd4368f74f54c17927eecd429e7aa039ae23baecf98703a8203debdf658c7ec31c2e16844a506031b98daf2700f30ff901ff819007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ae7196fd8261d9cf5e7ec6c716e24c0daa3acc0556fb3a6c79d6b1b6c21dfe37a011e1548f3484e2525ea37e0a6cc5db4fcc3cc3fd2de1f55b6404bccb5c215999f901ff819107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aa2ceb6d0b530dd182e3581d8f26f9a0b21e9f1931d9a4cc16fa813f5abd99c8a0375a769efde2ae9bf86608fe8c84976ce148d89aa0631d4da0827c3a8c1ede75f901ff819207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03c328d4c78907793ab45e7e197bf324cf852a1b697f2708c52832c7050f5e345a07afe518b46684e62329e70e1c777dded91f13e2e673dbc3e98693b986d2bf42af901ff819307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a030fce07d857a21dc702416f025d7600d32da6070d1701c894a8fc4834d4075e7a0144775bad50d460fd5b2c28291e1d012c11b33b1e3f2fe9a1bb2d33f2ad9e5f9f901ff819407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0091ca73174e46b96c3ecf05656ebd980ccc86e3d10c1def697b582c939b886a5a031b789184ef8530ac0e00ae174872e3578d53f392492fd7c6209bbe13911d8daf901ff819507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044c2f6ac8e685e4b30452da15c3f67150b95ceebfb3456039387fc2e9ed63a29a00660d7a1449ba7fe15b70fddee5e70fd6de2b0ced278b3d683d8903e3e3b462af901ff819607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0363804a2e6360ced3b5cda784d62323949e53476b9c92f603fb66858d76883e0a02ab9dd354af169bf92b529dd125aae36b9ea78907b1403200311b571148038abf901ff819707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a86908d18a513cd0d817ee02d9bf29896d794ec42e33aa94bbbfa409eec68ae3a00ed16d62ad6e30d369be844cc0b3a597d2619676316732e4a6b5ae46959c4467f901ff819807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a01d04dc582736eb1237745bf6f99ce50f9882b04c35ea9ead79b475b8bbd4b7a04f1a6b7da65958b9c762a6882f48939ae85522c673ee4ebad77a3dbdae2fac69f901ff819907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0629bafb76b54e614028d6cf9ce3a27365750fc3cf9446071fd2687d0ab209817a00a5cdc8285070d9fac617fd074c7a0de9ef07358989f42f20d9b52c29e4664d7f901ff819a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b19c1ec71f6ac77691b7a0583627d4e22647a9c4e65a0338133441d68c99305fa03b68ee1e20dd37f50ed9bf84e7ac4faab08259679a49dcb55d721aa39d0cfee4f901ff819b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03ea25b8f969faaf752723afd48b7898f91d089cd1a8ccb9545dbcb80cc4896bda06967248057d75d9986a237ee114837c4c5f009bb9e3b202a5d0b79d71eb4de11f901ff819c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09eefd6a7c4ee355a067a0e1b52d697284c2a6f5016d13ce9d319ae6a934a1e77a0279bde03d38b1af816c3bd7d71b2cc7bc55de3c3edad89e78b587716af69789af901ff819d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e8b880fe4632b45aff98e3f48a4362e5ed2aad49444ef647c2587bcfee263575a01bd6d1bb2b067358aad339b091278d3aff80eccc2482a467804a690313ce3bf6f901ff819e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01995b12240fcfd8dd9540badc309afe1f269b5f2fdcc0024c9621aa089d8d21ca069f32c4143a79df510537f628cc1db538408ff1c617ee4330507f0c4bf648ce0f901ff819f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fa98d7dcffd59e7795ab3699d54c9e7b058982494c6079614a56deb45ce54354a04901dc4a6f63870ae9c281120900a4c1a4d0d880bd9f9bb21888c14951904a6df901ff81a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03138399804ee31267dcbcca1003082d4309bd76f84d805ba4265ccfee3742d74a028f6fe999243717f313c5ce2e81a185dd721356c368d7a8d09f65787b7471765f901ff81a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c85f49643c4a15a52c13b7404ff764244b843b6b72a068a3d7ee8a697a0ca840a050c10b2ff7315d05d8023a87fab2bcbda8866734c9075bbbc35bcc09d1fa4335f901ff81a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b8c5e906c437307ed3125c12cb9dd2a3a9ce90786de762280eab3dbaceee32a3a03ff54a9d73cc913e9c18b00c2e3822c72d7487cb6db0f7a4b81808ef66446820f901ff81a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00caa5b9445cfffce62b0f51fd3ac43a926d409b28490e6393ade554ef9b451f2a046dc0ea812b60691e3d0f751c5058f879f1559957e7f4b90cef3f583afe7b416f901ff81a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01ae6e9c67233d6bfeee87564c7f0a4314885d87965940ec87c3d73b0d0baa136a05f2bdba2111e70746440b34aadb31851f5cad47d0ba0126d7a43089d8c394cb1f901ff81a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c6b4ed5b12e7e00866b67fd068b44392ab620915a4709bd7b3c2b1304cebdabfa05c4fe543aa8a3f49bd877a2f9895fec207b9a56438e98e62938d07366d66e294f901ff81a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0090de1d6414ec3495df30395513c82c35f9ca5b4497d567443e2cbc386735caea04d166abadbf7cfeeaf1d0842b81d74e558ec94a210befafe617b2664dd02940cf901ff81a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08719dc204de497dcd7b0c68a1ffd9d8b3f9bde65fd9c3ccc1071dcfe67742630a060cef812a61dfda7c0257fe985b57c1888eeecf5277ea5b182feb515b8191bbdf901ff81a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01f00f03b44bf5b01e79364abc5fde215278f48ffa2a111d3486932a060715d74a026815332734bb5ec7c7f50a5ea936a7c848ce9780447e2d20693b1c4f10a2d2cf901ff81a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07c7c157f1d6aef37faac98094999f4f006d49ff0513dc4546909ff2c72558186a03b5f1e293a6d72bd3498217ed08ecde2207ab25bcdec978a6bd2e724d13b67eef901ff81aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a068d22775b78d38579e78f2ab5a98e63eaaeb40a17d4a7cb509c463fb28c790b3a069299799f72fbe791453a6c43b9d48156cbb370b5774c5a37aa4caf91da0beb6f901ff81ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f9c0ccb2b108b70a2af68057e8b288ce607c6f2b4c9108b2f13c2ddc34ffaffda05becb88b601988539df9871b2c3d7b7207a8e6d42e00d91be30f403112288511f901ff81ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a057e049ec8e2378ce8c29d2eccb007830447945e4fbed92b7645203729d21432ea05e47d3d2a6f57eee6a48e366b4ccc49de74073ca6afcd102e5d0b59467ddd644f901ff81ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a034b755cdc9a3fcb5d6bcc511ed0dca8925b50670ec8c09f3e01af86aab120e7fa06f61ad45b19c11af1482f3ae4dfc634037c0725e6209e40038619cc6e36823d9f901ff81ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09942e24535d0f61657064aa627b5fddc685adf2f2c8f2cb5a8954c0e5d6fcb31a055d6e41f70bdb833840be484d1efd2b282267fdeece5ab87f10fae586163f094f901ff81af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09afb0a177150dc8fc0d35b652a6d52c540caab3321fae47dbf9bf43a575ed645a06a6c0a4845d384294a16adf7c8207c314f0f50a89531e4c19325bd816789ab26f901ff81b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0834b1d740bc389ab6bfb7e96bbfceac3746b964d0e807318e63f1e1a0a7ef9b8a00dcaf3114ddef34639cda679e10700de0413c2f8814cec2dc827f1debd1b0ce3f901ff81b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e9a3de12edf04da8ba2c18a94eef01319b2e0c6a8f56817642cac38727f75cc9a04a45ad6ed5d2e808aa1b40497379690f301fba61b63af9b373288d95f44dd514f901ff81b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cd86739c675ce6cb9c53e6508b8baa18e01326fd8caea81a6915c1bdb50e41d7a025caa449b949dd9a7243fbfd78b2ea7275d97412096ec20959494d075606bd36f901ff81b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0312f947c920614ba0f12433bd192e3af13bcbfca665e16f5f20889e239c8a393a05e029290afee75cf81b5eb99f12c9f314b28d340ae9111ef1adf2d48c66a115ff901ff81b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0043959335ace01192a4285a555bf6336b07dc54dd7a3dce42539fdf5fd69baa4a03317c5f3047d035a03573947c2bea5143d87a5a9ddbd7d6f8583c00aeb78083ff901ff81b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a044f492a184b1c17960a85d65a7eea733e266f647c511f2fb0fd38330e2a8d519a04ac62ff3279678947719ca30eab1106b259d101299933eda4cf68655b39e3201f901ff81b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a008bc8e695b66f60842eadb8bb5e4b21fa7787bc418957693772c70c4b618c2c1a06d13a9a655acf95bed8a79dcadb35ab704b96dfe3fe28df18c8f2ae2d96d50d9f901ff81b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ed5c602466d5f8ad584b64f67f2a6d662b86bece09d63d3d3e9be60285af697ca0660d6f0afbe7f9cce5cf58588b3a6c57e9196d96b1ade00b39f5d8b44a1db24df901ff81b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09bdb37662d95250a9968ef2fff75f74a9419806881abd9423954f11c2ea2734fa0110dd03d6faaa2ae820443595aa9c2945fa74e341002adff464293ad92ea8596f901ff81b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044b7de1a9ba0d839160b42c7be0601d674b1dc22621c06ba45776aa010a614c9a04a6822bcb25214b75b4fad3873d281c03643fe1527de4a80abb6899053ebabaaf901ff81ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a465852de02fa7a4a7c6da9bf2604ca642d4ee50cd0f3a4c1c1bfddd8a59dc08a07cb7a660abdfd44b53e0c562efa2ae3726aafebd5149e0924711bd415f915d94f901ff81bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a027b05a5b5873c8148ca9669e1b21d0af919ac302ccdcac47922e5158457d9f53a0360d14f0259144d38a31297fcc145a71b6f03fdcea785935ce168074d9f16174f901ff81bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a006d80f58df5232cc0856c111f61f582f86d8c9fab60f8d4015e586af8bc0efa0a069583604e788eaba8e8f52f94366e55f29d423988904572f581f595f7ba4e0fcf901ff81bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a093d65fc49e7d19445af6da304b0f2994708992ad91c61511874456c4e9298132a0591e054012bcab96bf72e9fdbd4b0e52b4976f12bac723fd63d0106b4714ffccf901ff81be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a060a1a63de170f104e51fcc8a168151309a8ad27211537d59aeae83f4a85fc9ffa02802cc924eef0730f9572fedc53f3e531ad2cf5941a6c20ca349c13f42263bcef901ff81bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044ee795fd5bfe2676ba4d40f925af72c36e46734f1314a0d5d0a2fea71b745e5a01a02ab666ffe3b22fbab308eb4a82bd416e7530c113865d4ad23e9fcd6cbe502f901ff81c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c6b0933bb71d5d2ea1611d7f3b8580c8dfa0e4f411128aa5c0e23985ec2cb67ea016e9f443c9ce0825f337850a220d47b97b2e95534fca2e300ce10f7ec3784fcaf901ff81c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0807ea9cc6c7aa21c8ac6ba8f83603025c0e3a24162022e250756378cbee41a09a05ab1e13fa5002e343587701cfbdec876760980fb038b25a80842a9f729aea95df901ff81c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aadd090ee81d93e910ae2b6107f40b597ae2bd828dd17b651d2e90287035a74ea015fc42bbe099290281369b8f4f8c9a23520948e6fe7118412b604aa0eea253d8f901ff81c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f9e7b77f04886bf2bda53f2235e17de04e2ba88bb33de68677c3be5cee63fa4a0180b961d255ce79f6bbc41b3d7f1b1cf028f6e51aa62f1f7c49c304093530b3cf901ff81c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08c8774b5c6691c7bc7a069754b31721ed815f08fd2686dc6c778b026203341cea05a96c6abfd67e6165b1702e18dfd5dbf54279e6a14f9a24ef69570ca3fb0b5f5f901ff81c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d9c72f1e47ebbbfd4bf670f2cfd4174a6faa7a98886bf2d397a094757eaeb341a013f6cf01f8bc8165fb29032b68684f99779b1be3d3bfdfac71ea0e47f57a2148f901ff81c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0426569f6e25f13b1da4ed9aefa2a2922d41bfd96b2a25a04dd020ece12c4d3d2a0701f1ba3c0b06404a3694f733b59f6db41b38559a44c257c6256b30ba21e4206f901ff81c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0feb7ac09f057ec985e0fd4666fd4d47f79d25333ff67c375ae346ae4c86a0f16a071f94854f083d368a48c0b528d9eb6531523e887230124ecc7890500d56a5c7af901ff81c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b61257aabb3969a83936899ebd268e238b5978305027ea69dcf160ec8f74f743a05d60de636ba9df2edef3aa0e478971a025293552bb7560fd330b8514ee6aad86f901ff81c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e4bb49895017f42ab75361004d43ddf54b3ab021c588e0491c220e613d25b98ca03510d3630aa350498ab2020c0f92fe11683954000bdef90aabbe0e8d899f4eabf901ff81ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05f61ebff664e545ecfb9ac6d58fb757cea4a2249bb4ba847f6d4ff0e725b4bafa01ef671e1c71111dd5bcfddefaab9c3779cb02861bc17f9678da73c9f92671520f901ff81cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7f5a5b333421ea4f5470e85405668100fae760dc28bfe354b51f929ee54ff6ba0034651c73cbd36b625ec3d91e494d41e730d01c4a998da41559bd9d3d73f6556f901ff81cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0efaf12f33767f255793479cb3cf96d2eeba021c6b7429604832845a5d7aeca01a05d893125527316dd4a8f70abc5ee479c6ec7480518b78d67271acf15849cdcaaf901ff81cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01ae2abf2e74385879fed91706c7f10da41c6704c578ad63b1ee7b11f32c02f11a0488214aeac4e8a49a1b1936f646d10d67a4bd43e4e4739c0a9429a1ba5a8d062f901ff81ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a090e318a85fbd76aded4da5dd42743ff722914aa168784ca30c3512d737381512a012bf51cb43a06233f2f356694ec637e6aa8887dad693e236e99c868d1d9dbb14f901ff81cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a033e6361a5e7bcb6129d8ea2d56cadcddc05b1bbe833de7e087bc60ea24ab8c53a0680fdd41f87e899debf0243bb5c75c9a966bc8781d3f2579fdba5e84ab371ccdf901ff81d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cbbfafcc56318be63683ffc5a47a5bafdb8af5ea500c4da61ad3ddb55ccbe79ba05b08eec769030de5e50e99ec35a67637a2760376b7fbbab7b6e5b48ea25085d2f901ff81d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e48323c25573f2badd635cc469f1603c1ee788c7f9019f70e17e5b63929da762a03621cbd083966c0abd3e684feb56a081e6899841f2b5b10c771660ed6c4d9c1ff901ff81d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f00ae7cb02949b58db145c92c166325c62d9103f6ace3091f02a82993284c595a01941b742d124e2f8fd811fd96e8fd9b3356bb15e4163a6bb1749ac1b08aef0a2f901ff81d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0173979f7bbe8d6eccf2951a9ff22a96216815cb509cb38249c7b1b7ab1c48f2ba028f11027005fc49dd547a035c65049c482deadd6cf122dd54c733cdc4d87a1aaf901ff81d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08e62a12605bfdc5a111b6605003553c10eabf00743427fb9d9a8694e0a9224d1a01f52397a5a0cc9991cec77ccb858a63444580e101fdeb89f295c82caad899121f901ff81d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03bda62589cf3a7af7664ac0e55f820af7b8bc7c474d225d09d9cb5f8636df94ba02aa2fc175fcbdf53d405cc66927438016a1f27b0cacde56421b8260488728372f901ff81d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00cdbbf0d687b68b4cb24c4835d3959770ae30829c4ae3b0c6cd871a4becc2a9da059eb4d7b8b5369f5776fab4b216e7c28bba41558dc835aab5403d25117295f73f901ff81d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d0d9af6f81b78f26eecee62698ceb3972ffc264b9e664cdad6fa4002c97d496a0178e1df9ee081155c6299327a0e4635619910754cbc961d4953b8b8f6e68a5f2f901ff81d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a027704c4100acea131aac3e1a2c6a71c073c459b6c42a2e4530fd5ef332c05e55a043bd28687ac1637072bc0e2f88fcfb89db15ba9251ee2859dfbbad7f444bc308f901ff81d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae678e31408962956fbae28021d1a0ecf1ad5eee9caec171f91570fe9e8a25fba029a074f9aa790b0e18c02f5bec726bdaf8800be465da692f092625ed6ca4cc3ff901ff81da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0411f66e84e4187f5c4f9e00ba95e8f85894878ace6ff1553ac2804aaaf1bf860a016f9096c9a24076dbf480388500e240be9a3b0a10eec6edab9638e044704bf14f901fe81db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a84bfd0986450e2a1e3563da74a63372a564054b308247d7ddbdfd913eb069f29f6dbb389b36997ae2bd63f21120ffc51fbc730b24921865c05dce8bd0439e7df901ff81dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a067deb187e2eb7ae59d369a6819d8a1ebc8a20449c3402bc8374b74b048ad33c8a051db239737832764a7e7c1574580af215e8066397cc2232673a2e580634c3033f901ff81dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a083567ecf6965182249b6ad444319bab38adf6b5a566821d0eb5db3e51922fa05a024974184362365fd218ad4d7a88b4c17cf3ae792b374b2306309a7d1fa24e367f901ff81de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fa0dd7c213671eac235bafcea7e9299401b2f32ac4f6b39078867a317ef2546aa04e5e68d856907da297ac8c672b68d911cf40748c256d75a210c86000c2e76d37f901ff81df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a069d77d76d8ef4c9750dc47adddb64b14351fae3759a14b6772f33181ca7dfff2a02bd4c9ebca27bd2c84cc51893fe99193f2dd3f92b746f0d16a6fbd15ee00db4cf901ff81e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a033f1dfe2d3d01acc30ac971f9805f8aa3c60f144485b3c41377cb16e89935796a02da208e198554ce128e9ca8082545af330b66ea37d7efd0b3b51c93671fc694bf901ff81e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09be2ed33d07892e813902240c9935213ea01b3dfacd80ae5929abf504d6e2480a05b9b17fb42714ad957986909a59b18cb48154734bd35a7cf768c4a142a1e4bbaf901ff81e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a047a30dd5dc513a7d601eceda9d1dcfd5edd12946d82ee59648c1a30181af33b8a068f6185a35334dae3a29b62c8d1ad3ae7d63d7c85e66d2dbdc0591e641cf413bf901ff81e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ca41c60d684045b8daaed5f35dc852d07c91f63632a95ed2b93f911d23b1fd46a053cc0d433b7ce84550d29d640543ca6dcbb5c7ec95b66ab30d92e2107a4e969df901ff81e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a077dce9afdee2a8e6a83b0625a4c33c85051a08da3f52fd2bc788085c0846b9f8a01ec939e5fe7edcd031a1c1f9ed5aad26668c2092b276e863dbb1b241de926368f901ff81e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044feca4acb4895d5bc3fc91eeacba2291725d64cfbdef7311af0e11fb83b9322a01e50e842f5dfeca7efc102c8de99e533ca53de7769db638c9e8afdeb63321f9ef901ff81e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0817f05b085fe94f1b34d13fa30a6c2e31a52783fc37f7ac39a78d2486019dc62a027b25f5167e8a122e4cd9215b6ac81c5bf5c3c84c7672aefdafa85e682a4ab7ef901ff81e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0546e1b85104f87f13f5c1cb13cd608becf4196572ca9e5c1c398e829aa4838f9a06235516eeb507dfad0ec77805a12ffc2978866e97d7d64b92a92db76dd2b9688f901ff81e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dcbbfed177fea524d7fe2ec9137465686a602a17c7c2142e25677508a5c6afe2a07c16578d1546d7f00384eea0c6b53bea871e3909e6bcbb48bea04a997ec4704af901ff81e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a033ba3adc2ad4314f71de7cc8d84e6592e032d7efcb6d6ef04fbb3c42ee3c6278a0243f8f351396b96a28381f4f3ee4dcc550ea2aae23469a73984ddd2a32f60d6bf901ff81ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c1fe8224fe1c8a71b2ff0aebd414889e7a1406f0d9b5663692264f83b6bdf0f9a03188e35120f0f0170f2405c113ef7375c8a9feb0e7e853cabf6758a0ecdac27af901ff81eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01c0f795d459554ee8ea3c16dba5db585d5eabf8e7e8acac27ded7833cf4e5c8ea06ca7bb8dff880f8bdd9ac22b24797b06f705e912b4a33b8fa6042cd52f07804df901ff81ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a094db23414cbfffb1b22ecd110d37c6ab3615021d033067025b5a76cbc965c817a02d2d56d15c637b395ced1cf8f40b0a1cfd1fe40ada92decd9fce75447f62082af901ff81ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aabaa3becff4d5fa8096c35fb841d2569baa75de331e2c7a4a071430474b2687a075150c1bbc9537e098218389f844222afe52d65e4fb868eca19b57d635dba37ff901ff81ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09845b01aad1216922358cc7df77e65a99b89f99fc4b8f8762f6afc903fd23e0aa00eccc2c14a0e42e89a98cd3f225536e5cd1ae0ebe33f3c51e4dcb02a8c846487f901ff81ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d45f5d77ff64bcdfd8f5db0d662abd72a930f88d65eee67da9752e327667ee80a05f4a01707971e91da35d4562d76fee8d64e2baf7cae89a8e8ceeb2305576c1adf901ff81f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a075be17f05ce390e2c77680b65cad3ef9c21d78b1d3f476e6e2b8db68ded2e5cca043c2c1d7e8b51a54aed3cff542a85b10cc5ec157bdf301d3fe6c8f5bafa10a9af901ff81f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c8a46dff7b8dbaaadf4ee843f58961f5c38ba29a39ac6844d97470d81e1bec37a05dd49fb66753ce80f53c1b7b1afd8d98e39988a137678bb257c2c450be63e181f901ff81f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bc6658bc6f0249ddc29e16061d84f6daa03c7a2b8a849882c58008cbc3c548cca0618d9b729c13cd8e48b2ef5419be5a88ec2e3baf3a0dff897034a50aeff96623f901ff81f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09e20cb0bbe2303d7d1692b731bddee334f8cdcd71b3fe67dab31bc2f8f25ddcca01cb83e770771594fef0e855d75c892bf7c8c27c538d6773112652ac50c5cbf70f901ff81f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a008aa073ffaf02a9b9b425e5d98a2cd8952b4773bb25ee4fe9070977854febbc4a0477523b8f3747df296b463fbab6a5c920393d5f7e7ebe76a220b9d1775e48a04f901ff81f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c65f2281c7f9bda71350edd6484178f436ea993dd93a145014068ef1fe8fca46a014d7cb51c9cddeade2e67d71083bf5ac11884c7ef3e8cccbcf5ad4c9bab1d2d4f901ff81f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00c40f28e2ea4b66b7d14d7e0a56024120c53c1787be0fc820c310c2497aa7ed7a01593116b12848de117faf65bbad6f95693acada142cdb3fd37da8a2099bc4063f901ff81f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d1f32f74b33ecebcd36d950ee515342d064308748e8c6e10d5cb859cf9cf89e2a0115ea4ac1f9e6a5efabc1e2b77eecc2c38754cdf3ffa68e3e6c6806f3e2e87a9f901ff81f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0df3c515a2d8db3e223206b1748a5df67db1728c5e5407bfa6decaf56f0ea461aa02709643d166306c8577e80958b14980a3db7386cb81e2ee5d0bb51e46e2b9127f901ff81f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b4590d495482b5ffa35996ee041ba06949b140cd76039ab2efa32d78db4d0b14a06237f4d115861f991e175a85cd4aaad4d57619ccb8495d6ef67fdaa999e9f636f901ff81fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05787c7d1a2fc021850cfc428230797e0fca4f30579146ef6fb78dbf07955e27aa02603abb7e1659b40bb8ae045be6448d66e3592d28c8b9da92ea17776d3545129f901ff81fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a045c6bb5e0a5c1b8386df6b0ce60473f6a1e428df176dc7bbe0cdcec847325b48a039d2c96e7331382aec1e7ca17a5ed2e9bbf1fef5d1bfc7829e495e9f8ec5778ff901ff81fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e066a73a61e7e728872227639a64bb367254c6fb3f8bdf62b5a25667e1d1fa02a02c6a2e02de449a3ce39a3e43a694b71dcacc2455bd2bd0752385704811650ce4f901ff81fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08fdb702be8e8b12539ce9e06a92bd9fd225b37ef2c464a884840e0defdb38acaa0515afed1094093a7b8cd7b6a8d9cb87e4a2366ac8200735bc7fcd86421601233f901ff81fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eda1bf368991ccdea7bc126a11b1145af752469ee1efbc98b7a38a25500c400fa00936b57d5abd82a4fe2ed6c71dabe4280dc15e7ef3ca2beeaeadbc5d3bd7f798f901ff81ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a057184227d4d62113c168fdb2e31be53d8dde682bca4d02bfaee085487e3cdcd2a0115d2bb91ac9991ea4549012a941057de43f053fd1b4ae04fd03e65aa1b1a9c6f9020082010007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a067c026fbd3e0e690b2367e547994f4e8b8a865e6aba216a67ccaa80290cace92a0088a3e47143aa0ca8bcfd805464f64ddb30f38d62e5d9997f6bfef20155eee58f9020082010107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cb5bca3ec8a19dc452ef1b4a971b5a57b51bfc78ca80581a353a4547567d1000a02a9efc2a2e7f722a40139e4500479d6de50a9ab823a0f1d3c1824ddac632315bf9020082010207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01bf17085dac3227681594a95233cba0840e34606d570429bf506d9c4869537c0a073bbe95d1f048f7c791c5a0ab7962933f6d75f8125fa0606e0202c52dd82a833f9020082010307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a7bacaeb123b5756e1e60570bfc6d0b55a846632750a6ae3179d35c00744cd77a0768323fbc648a5230430fa8391e985adec9955ee46f5ccb34b98a88ade46d56af9020082010407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fee8132511097616d214a23a008c1a4272f7b2cd6765b0dfa69e5ae97dd64b95a06d718f433a80ca3249f76e31d3bce93c7a29584c0664f3468ecd40f2f32c08e4f9020082010507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05164d2eee3404cf84b890dbb17603332f161ebdb96fbf024938b1cb8b9fb72f3a071bfa35bd0802e01391411798da6b3fb7275c4799257033514572f1fcf5c9f1cf9020082010607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03e645d8e68916029982ee3159cdf389e6676f68ad2c4a3ae4318908b77b4ed91a07ab91128c0b4044d5ccef4683581e8162843b1eb9ba68ceda335534af5c16c99f9020082010707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a097fcd4a22abf0560aa6f313cced49e859a05cf0d15140ee331e5314277070fbda072420180b0821d57750236ca3d1ad78b32ef94b5e767f096572fe8d1a979162df9020082010807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a064597563517bd05c15a684aa016c1fd5c92626b6cce4d6b00f9a4033b6029be6a004fb256cce0c9fe1623dbddcde84c413fc0733760fb9778cac64262ea658740df9020082010907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b2cac9efb488c77600fd7f7f2ae058014801972170775f7add5afa215d86d126a067781c71870699ae0317e7c755214a84f04bf6490a3daa067cba325592e93210f9020082010a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00bf4a168cc3374de7b577a60b3558ab5e787f1d249672fa8675d7a100cf4d840a04da4ab787cb1aa2478455e3926a9c0d81adb70913e3910f141dc557a130a73d5f9020082010b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a003991116c5cc7c76c9f4a1b9b71cf16af67e74cb4a896085a23bb1381e4af88ca0673eb6ebaa9328058a425afce260d5a89eb4e9012eeab1f8048551c130e7c0bdf9020082010c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04ca81e7b817f6ef8378ca1cc10bdcf56513e3a2b7f666f507ecd285f135be368a01a3797e28b7300782da6a6e0c435047ecd2528c58ef4cddab595f06ec71074e2f9020082010d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a082b7a58f424f679a8594dac3347d0a86c4d0c4c30a805cfe1abae90888f9e0b5a025478085e350627df88fe73723cedd5ee99e8711c3da513777bf1578556817b3f9020082010e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d6829668c63f165d6f37818e242940e028b3b2ad1ed8c8cff7ce010d9795599fa028e25dd44489fb77ee6edc6e9820f6bfeb48cfb216f850225caa410e46edad82f9020082010f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0805a31feb9ced4784da02b6088568be222a4217f036da76e935b3e726ea9b8f4a05f2de180ad531159584a576d547ac2c32d0fc7df35b26430641f78b0cfe707f3f9020082011007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c3f4c397b2761461f3fdb28f7b7110b9397c260ef0dd9eaf42fe5b38727aadcca04238cb809269f6dce499f136b69e5db2e542f33a49c5c5d8f32bae12f3434440f9020082011107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07e0b318b8947b3eb33594fdc953449fdead85a705d3e9b430b59c2a206358ba1a0288490d99b12a36908756d177a2f6d5adb612af3aa3c0e5ca3017a67d134e9eef9020082011207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e51a798d58145e00e732a4d493e7851d668b45a67fb6e2e5e7c8053ae8758305a0280e146bb1b636fbd1131865af815d8d99eefc8ba90a4e440c5c73fbaaa476fcf9020082011307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c66059c9835598551b3d8cd60f7b55a55ccab280010af637b39ea4ae535dd301a00e7562f9a2f3eee70a0b55276a0c8c04faf959941073deaf1ca80e0a80e8615ef9020082011407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00d8d98bcbdd39e3299256c84d3b4915d1e41774536603301ba0ba913ed62fd73a046dcfbd76294c3a65ba484fe4b866ee3e855bbf805da8a0cd86b8decec04bf16f9020082011507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a045177bb85fe5dcc46e088e44a6fc3c9755096257d7ab4c64fbca5c5a818e1387a028b2d52a5d92a418cc35dafe2e0d0f98e063b270e6a12dcb75034768e57a8e48f9020082011607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0319770588c1982f1dcf64ed2a13268504ad41601da6d63cf6bc6b5efc188f625a009fd49a1d0ccee1be9ccf43f625f612e88ae6f2217b2d76b50ac55fcc8c5030bf9020082011707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044a7c934520ee6b9c3ff6b0b7fdd31ee61b088137fff90320af4f400ca21749da0466da0ece39f6fbc335e8bd64d62aa1ae0e78c1f72dc2864a26cd77316c82c97f9020082011807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c65fd8511538f0caf51993234815d62faf21f695a2881705f233f9dc52aa481a060b4a403c64b5d6d7c3b00163bdbbc72bb7a0c9a2e4e80198b86fa54a96c22a7f9020082011907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08ed32800f903b3378539d5fd9554866dd2486e2f711fbd2cac64125850186fd2a00e652857f4ce69a24ebd537d25c41495a288c728218f6b1e5a51689b1ebec1a5f9020082011a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a097a0236cf4734221e9ce24031d5a2837b7f3849ab92e7f0a46ab158f940c8c6ca02e95f529e090eb1306f8cdc738cbc95ff4bcf9635dbc27cb4d0f2f95407bfd5ff9020082011b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07aa224a6b3a2c8df8d212562c6b26eb081e6604e3f6eb164306af38a69579de0a05133defb87d1633ff4813452c3bbcd6fa7e2a481be1f057a4586a1ec707576e1f9020082011c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d85a652c3193e37efe893c63eb8498a905ea7174734443c6596c7e61258b9e4ea04157b4d13f5adc75fafe62b27cf02cf720b30b27c0de9e34dea0d8c144c21024f9020082011d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0806a4ebf08e6b138044f0cadefa06b451b7da7716c22f1992c0087f8ee24bdb6a0411cc5ca160d2c10d751c3225eca398c9ded6afba8bbfca4a1613fd42d294937f9020082011e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09a92f3c3a1bc878d9a38d21ebc1b86b55d4dfa06c34b951e07b106f0ed37d789a031516ddb7362c7daf85d71849f23589ff81818a700f5af94b0ba1882340c6f44f9020082011f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0176929242b9b873a5f75064c14267b0873cb838254c6c374a7b9feaec38421d1a043c093add86e7984e7f56ad07f507d81ea71f3a9d02bf3a438b406f9e56d5444f9020082012007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a084615e20c753ec008314bf94af0eb09165944c50efc8a961d620cbeddbd16c4fa043249217e26bb41f74d9b83d212ca3a9460a335dc572e7bedab8338e228b630cf9020082012107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d4ce5b6319d6595968524dca6eed69985eb1df8f877d672a0f7371d67c9f846fa02d7a5c5db3fcd51d6153504af4d0baac3609112cefdb02fadc69e0a5ab5cad11f9020082012207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bb3ee55a8254f77a95399dbb92833d2b9ae285bac1134dea65e27955cd042c60a00b34ef451e502a619f902be50259b7b65caa9b84a688bf9c80fe40c70c3707b2f9020082012307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a065e8ff087230a2494771a736b090d3cde65ba876a84351bbb72125fb5274bf0ca06b29d750ef7307769527e4dcec5c079f672a1fa1042ad71f359b80abf89c9235f9020082012407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0798194f44825902beef18aba0142d69db9d52e585f7d12124cd161d801a03cd5a074041a6f31420f8b1c2c0721fcc74e2b8923014a44eba0a7ffffc23838af22c6f9020082012507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00d90ad0afd4163f5190dcec00bfb3224f6d20ad5085f225906cf04319dc05c39a0211fa48e5ef188f15a71ea5e2b926db9627e93154af5c72f47be2e80024ecccef9020082012607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03b844d9526e97be780306874c8138a3cf8811b3a3eefa97f5b45ed1578dd0f00a01a61b3920a44afdf88f996a2f03a633ce792ef14848d2351b068ee29e8a06d8af9020082012707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bfc4a77b7b4b89bd775fddbcd9a262034d541a3a91b722b20af2a1955a506221a033bff1a51ed6b3f36c0222160695fef83220ab49789fbe54db53ebf80cff93c4f9020082012807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b2eb401b2e7a756ab9ace428346e3b2c3a6c34f6b89ee68600a171a1c2998804a07f2b68d01611f1863aac323b5594d8ceb11f5f6471ddeaaff488da60beea8620f9020082012907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a018adce731efaaaee4ce0a274d857510b53d34ca21bbca238328131f694910115a0379c40e5dc8011deb1007f26593a9e0f637946c262ad660a473ab0088e71afb8f9020082012a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0743c60f65197f182718c15d20dfe9f750e5168d05cae76e9d66520fa0ca8510fa052be4af852ec5694a68799aa3e6871a6644cee02b8a17789098e658adf2936f4f9020082012b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02e5b09be3cb383f5e6dc083a41ba18fdecaf877fe57da56abed55816bdd1429aa0216188955f59e5e1923fc7547b8c44cffe725a112cd1471f7f11246f82badbb3f9020082012c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a061c6754255131027bc90fef6cc63a332d43225fe0ba4eed89a0463c860f8c2d2a03c02cf812052e5c55d9b1b0ea78037bcc96d21e767cf8c3fe7ec83dcd287c4faf9020082012d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d92e741b16aec6e3876427078360200134fe2b1488415c5bf74b9e58fa43c5b1a06dd2d08560ce5ba32d5509c899ed53a125c638de3a67c91dca3d3ba8d6d20726f9020082012e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04a63d348a4cee7edcfe7f90f613e12eec254b7921ebe7c5585457ab2c04b645aa06d7ae67e22db02f9e8a671994cb11a1555131079bd902d69c4e8951ac789cc2ff9020082012f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a024a3416d3a9cf2b8eff283bf1ad741fffbd0f47c8ea5040d793b4ef7723a03e6a055572962c9eafed269fe9ffbe7f43efdd4dc5e2b7ab71fa55027e6f2a51440c7f9020082013007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01e724b4b2f062f6030aa624706efb412547a48f8ae1c5f8533a820bd179850e2a0790fd22de982c04b7ea7b4cc102a29190c26fe5630489068d0437becd7d35c2bf9020082013107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0404a91fc6749b2ddb6b02879f041986ce0a04700ab151310704c8ac768595853a03db68ab058d75b32bc69aec84923a681e6813d3b624141cb2d0e9e7b5988a561f9020082013207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0210052f0e29e62ade71bd41944d7ed5db6bbc4884b3a3b8d7b11e4b5b2015462a053bf812633d5230b228bc1b5f4cba27554d0f5d537d34c73d5585ec2b886ca05f9020082013307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06c0ed46102fd3b40aa475ef45af4e1d53f2c4e08fac2a0b97d50d34456b3adbca041d31d142d6b2c3ecce16a10d7a659f2dc5824514b94113a01b5ff2fbf31e05ef9020082013407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a080987011bd04c7f94a21d6cbb965aa3df4ced5cf89aa5639625cfb385b3fae14a05f9e0a54c85700e134f2b190801b8d8e817dc5aafb6ce12ad10b14f768c12097f9020082013507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a008ba8b960fad5dae297a34edd2620987ccf74a6566f3b4d6bbf9dd255d35ece1a01f89e259027a1577bd373407697d6526ab6fbbd8e514d63b484e29fe1a9715dbf9020082013607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b6ca8cd4a562b48d12022f3c7f3d82d818846de414bccccc65f468e11cfc729da07d9693fcdf1d5507f208c3c12a317171e58566f9273d11fdfa5459435488c602f9020082013707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09677b77a8ba15f56638b075fc883930c53bfff5e295424b65a051f0179ce4782a00c5a1a009a4f927138ac6757872ba850f134cbe8cc9921d5d4e37251884cb1dcf9020082013807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0579b30905718c2882736772a9807da4cf5d7083681a2ba9569011f2c6248ee81a062b10255640b5a72310ec26a80c86d05c7de06f63f69200700c099da7889e9abf9020082013907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0663cb3d459be66b7e94f9228cdc8a90fd577ee62429da54244a510d860a9e5b6a02cad6b0847eb5206f1360615a3bde14fd2695fa616d6a26a8c88d21f2f7ddeddf9020082013a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05184ab850fe3413a45a6b2d5c734261bf5b51b6572051c5615e60caa25df9625a015838d21fa4b2ee49f81e2eb4330325e374eacae503a9887d638278d90d9b92af9020082013b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0722b4b5fd421bf5add2820cf3aeb1ebc4c44378658647ffaa56fff78cc666085a0229861665a043dc7e3acda736fef57372101fb4ee2f8fbb0db211d5bd74b6496f9020082013c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d93462a33b920a52346a292825b68f6ee3c9a9a8f76e7507873761c6ee9e9398a052b08e5c484c11567abbeedee2082483eedb5c3f89a900a5ff408252676e92d0f9020082013d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b1e492b10550c5634fc4d3293dbced33a778379c3524ceacf8fd6f2d873d0bbaa06c14bc8b0bd033bfac7b348e79dc3627fad52d562c049446d623081d1fa413f8f9020082013e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06736916805ce2daa098c8476c820cda0b194c054a00f8ef43e0349cd022af124a027b58a084f0e3dd9f0b2f82d0c8449a5772f26cec4848d14813d27d7748fa2fff9020082013f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03365405c19710fc70050c862ef9c192553734294c08b9141765b78c3f24a3bdfa05b2c7791bf192744f46cad44cbb1012cfa3de85a3d73e4abe18ec3d6104d74a1f9020082014007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01964692083e3a418cf70322c39f2b36d2ef534859581d34538e0426fc5116c7da00f43d3d2d69a2e9330508d89f39e830ae9c54637aafa7e461ce777da745fe1fff9020082014107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f0f31b1b7e576ebcb03e611fdbe87819bd54ff71da21ba18f390727390a4f1da0083627b44237c6a46fe1179ea570203721de9a42dc2d76a90b2427bfe8c1bc45f9020082014207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0038546b4756909df0bb93c5f24145c52839123a117d5d3859729775042b1c37ea019a70636f3b9c95fcd0633f2e8edf9849ef4b5cfc2327e5b7172c577fecdd5f1f9020082014307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ef974df5d42f514ae5603d1c9e96de467cc0108cc7ce339e016cb099758eb581a0502d77d1185b56957f0dbfdb7d43573ba89ca8ffbf388f6ffd2c5aa20e08e9bff9020082014407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b973136c192d55967e4f58e7c196fd4e2a584a8edecfe6eed37147115bb40656a0615b7eae8273886ed33195c132b594494b1a88a4aa92354305321b8464b56f6ef9020082014507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c53959a8361f368fbc9c8bbdb6f2876c180092ad4d19b2b74f834bdbb711c2d4a07072c34db8885149e7d8e11e2b2ac8c78a672e9c66553c91e58b31744254861ff9020082014607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a028843eaaf8ff461139d298af83e2f163f508ce7da95fc566ddfff53bcb76564da06a726d2529678adfbaffe24191f15f40fc0ecb0100332cb9067d7d0c1e089a0bf9020082014707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0941018b5c302955e5bc539497e08d0c9d9aa53fffa9177263cb7e11048d256b3a0744a6e3c9b116f6d6b20c678e2f65118627f7698081371072437e7fa9a340f96f9020082014807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02f5bce14891fbedbc34d1132affa4f717c88c90d0d8013f414bc07d70b307846a03a70f36f407ba2686d9bb033088d7c64e6605fa17bc527f3ecbec9fb8688b39cf9020082014907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0be96b478474a8e00ca54284c077838e3ce558108fba5d8dcbb9fdf483c216670a017040675cee703d9fa64248e5b4378c45366339b2abbc99170fac58e2bc0235cf9020082014a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cdaea9e14b6695b9d1fff44faf01da692cf097637df322c0e54d2a27325c0e9ea00c19a9d79ce92bd17da7015247cd3f5f9cc9c578f03a66ba9e745460e78c01c3f9020082014b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04d71b9e8e09ce9132f58dc4e115c26fbe9e2917ab3e3b736a9cd896a968b2145a066b5ccaa70e9643c6a0b596a7fd094420d1bb164ad32194dc6e44333060f78e0f9020082014c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07a50d44ebc68bf463f85bcc08dd1e96c33dc1e090743771c9bf93ccbecc8d4bfa0484e745f715f4ba51d649c852fca92149037678427ea87f73506cdb5d9c63feef9020082014d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a067fbba13a37fc21981bc51690bd287fcd1853769ca0b04fd4f3b8a6f19808c87a079e094d556bf175153eb16fcbf9cc96ec3901491f16ab1fb5df0f207a88b0fc2f9020082014e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07fcccae44be940daa99653e0be7b256c74f5628f0dc7fb9dd299dc3edcf86b8ba03e61c39041fa8d3d7370da62512d3913bb1ca5a67a61624857b17e94a1bf21f2f9020082014f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05c675e6c8103991cf086d60e3bea925fffc68a3f84f8b7c40a797ed3ae96b991a07d2aa04543f111cb88b80f2825424ec891a23ba1ee22b555e7e3e8b426008751f9020082015007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb17a76a8362d083cb5538b5cda5b2552afe6c83b041a5f5ce69886d91ba920da060dd9870efeeb76416545e87dce7f35ae8bc5ff060f671d75b60ed19c0b993abf9020082015107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aebe3c67ee8da8d113b4ab67c7fd572b32ece055c70039df9bbf9f761e65df06a07aa97bba9dd0a2a742cf82a302be8a269edcabd08cbdb3b1b29557ee1dc0eb1cf9020082015207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c698eab6f7ccacc3877d8a73abf56f5f4d2a13b95295fdf1be7d2faa5fc7cc92a07a49853d8810327a166e7a38b18b39930097e1bacd94fe400c296573b159fa35f9020082015307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ed3d5463f4f361daeccbe18c63c45cd6bd89b02462df9bf38d94d99d05652ceaa02e71320eb49fd180eb43833a5a13019945f4a1ff87ed7163c1e2eaa82117b31cf9020082015407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cd9dea02738b8d40f309070875498780b7f7770d50b3bed9d43e64c7f69c065ca03d7b563c8e59c50844ed839e231e164b0aeee545f1929f11cfa674dfa7198e23f9020082015507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb7ff87688ff19784bbc7d2139b1f51130d05d3b3c503b01f917e4de45f763dda032d0d7c436b6ff2ecac91983bfcee3421a3dbf0405a9ff11ad2692ae1e5894f3f9020082015607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01fac7f38f22fd39f8148c1ee3b8ad37e7cac8ba4e3a839a5d7d166c96a9fe6bda046a900300007fb9759b01c5103bc731e9b1d47cd6d29bd4085d22690ad3f8b8ff9020082015707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09547537284386ea20ab137d52330be7136953b56ea650c3f2983fe0d2987bb58a01b5cd06ad8605515f42d7af572500bffa7b4fa7d513fcd7461c38b9655dcb1c4f9020082015807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cfba2cf294fefa61a2ae5aeaa8c0410a9de1842539a5efdfb7d2b12b2fc45891a030ff2d77179162cd10f583bf79cc79a2a4d767538e82f990d7a597665b4c486ef9020082015907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a0a2b9e8bfd79bfc5165a4777250fc305bf3ba8a9041cce6940348b9d53f4af6a047e148ba7e7ab247c86a5ef1bf6e4252f6ebf9b8904fc1031320f1f97441288af9020082015a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06be60e5081e635abe27b699dd113fe85ce221c6ba86eb3ab7c3dab357897cfcca00dcdf3bb8020371a16ea00d39860a400a1188340c22260dd990bb57a04f8f3eef9020082015b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09c2152ec973575bd850e2ffceaf8569f066c0ad910829796747ea3c5e69badbfa030ce4d1d12ff57b7abfbecbef78204203b1fcabcedecab32e8ab074da6ee4516f9020082015c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02cccc906d7aef4f6040d0437cae8de7a24d4ce3720d313a30f2193e334f91a00a077e626006cf1ff9bb20d4d0eb8942432ffa1ad111c91deb87ced1845efaba851f9020082015d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e9ab8ade860a5b110c97b22bff384b24c4078cbb512ec533d975eec10b057e49a0199f6b9041958202bbb0557962cfe2b12b317112bc21c58f6a487d3428f65c19f9020082015e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08115fdd06340262b942d372ba8de61839c9b691b92ea058c1358aad240b9c4cba0466fb313e668e9a75a4300694c236cf3b24f4d4c28a6c75366ce7d19bbbd7446f9020082015f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06ca0106e4c5805c0a2f755745714350c665ba40d3002a47494c1a5c363f8f64ca07805fe347c294821362c16e3d1d4dc71736fe542a8c651d996267b2a843734b4f9020082016007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e1cd7b3bd0bf6f1fb323c81c2c6406baece022ac1e815a41ca9038ebbe56c531a06c86e999de5aaf549d515351955f8c0a3116c2a87eca52e9aede98ccdf39477ff9020082016107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01eb709d4cacd7f27b5869e503679f94a0ee04dd9a932cae5bf821332eef4c740a0692f51062d4651ac495f203c668f6573bc525b853fa2ffbe0982c6f0a336915af9020082016207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0227f106348f83959dab2be4a53d97e19193b50ceaa61023cd37bc66050e898b1a041c2ae87967b7f034e0bf5e5d84ef27776cb0d0d587a6fe59380a90b634203b6f9020082016307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b8c9f23d91fef4ed913f90da7f7ec56e008cb1197c746da10aa63335f7cedd7ea0796a47e30fea0e02d1203e1c7d28daa93906f47fbfcb01b1d2f77a91af50f7baf9020082016407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a81fe4d49555e2f417015b6793a6db4b86ffeb580f25b2b29fcdad7413d38db7a0068eeb51fc3b15253313e0be21ed440365178ea838df616546b29882dd9715a7f9020082016507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d2ef532e9f290c16eb08f897ae9b9a14ab66584b625d8781387274838a2b14c5a0513f1d3fc007e31e7d0b70be7e468136da23ea3d0e02fe1d64f26cb297e4131af9020082016607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0664ba96bdd42d38e0ada0e639d9747d33668fa038ba1903591b7aec46527dca3a02d2b1df796a6704cc898ffa4d4235e241afa5d9095883a1856fc14044def7c67f9020082016707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01dd55232e0cdfa97d71d879e1164b891582c34f73e57ac81b93d3ec75ffb6e66a06eb4a70efc1b441c09e821254e66480340894d3eaf0c0dea417ad73e3d079567f9020082016807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a062d8132052f2143209147471aed3ef1dd1c3d0d5647b7bf03c8709f738b16e80a06e30e197c5d2a3f105f2718b1032fb49c028ee96d3efc949941e5819a39eebdbf9020082016907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e61025f5dc5051a9b64003e44e2ffa1a25086abae74193430720a2b1ce8184d2a076ab34c9757923f1b98f4b45a0be0bf7766e204c08fcc0d8a5e2ca7d4a570131f9020082016a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02695c8827322cccacc630ba73ad261db5fb9bd471904fb1760d243c4677ee7f8a04fd5b007722321c832fc4974d942c63441242fa4a6260fa544fade8dd57ed992f9020082016b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e0f86f2a4192f77d4e080fb48bd8fba69f65057414513b175db29afe39080c8ca036af1084a72a5dc522d65f2130930671b7d8c7181ac6b3f6290e63be43a2956cf9020082016c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f26b8e17d8d58c2895e2618b4c0bd241e9bfa7a2be82d690b51a5243f164d41da07ca94ff1ec67f476442c7dc2a7b44610eeea724e85fb5e2752d933f5f9ec06a9f9020082016d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dbe64371c0b9099400d887aaaf0f8bc3314198df73016bf9f0044f1e25aa049ea0135d9a2eed7466a849d9f4204e07488a37646cd146335bb5965f363803017d5af9020082016e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ac24345299315a91149b3d52c0cd3c0b963de5e01d6598c8a75f8a1deefaba44a076cc25537aa68c7a04b3d6f0a4f9c39086634666544f89443134792079ac7e03f9020082016f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb5497a9f608154aaab5999066558bbc99ae72f54b775155fe8d2b64f52f753da046ac745bb69cdea882b3c1787a48a799624550bf2fb24f89bfa5daced689814ff9020082017007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e9bc79e121d4c270b22a4480f6b32a0bbd970c246881f60a17b6b984b164e51da0640a55d0b1de60db78f1a600c768a83f21c3934714d5ace9a17c46eb7656788ff9020082017107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a044b96fd3d9d6fd723b8d419b86f74259c465cd08d82649c98a7bf9c315b07c80a047637e739b6bffeaa4f8845df5ba39849514621d3ed4bb89ad9f8b61a9a7d973f9020082017207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04b29ba5d5c39466fa774b76dffb822a9542718e57a2b68ee21243f0c958a0dc1a0495766fe8982b855f99a0a99793f995c741f226e1ce3934589d330eaea97944bf9020082017307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a023d1b3e13bcbe81aacdd7580772ec2e1b97b63dfb83c234d2164e44f479437a0a05d15ada878686e7041a5faaa350a7c97be9f65885b735f241e8b4d5fd3a868dff9020082017407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f081b613e4c4baca569b72902515354e7dbc46c2ec3d18d26fa039f8eb301b48a0214da576c2ab0072c800f507cb4a3adff83c2dc39064e58faec2639c9796079ef9020082017507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02baf609f9273b4b712a23864f9e9d8e9494d99f64efd64b2e54abd40bae7ddb7a04230ce99c05cb1148eb7ef4c326068311c51ce80e4e4f58f4890dc46ef9b45bff9020082017607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07aea3574c4a9fa09381dcea3e6585a725858275396b321885c579e96e9f91af1a06e45fd6517efb0919b08c1c820af4b40e115dd1d9d8f3e740c1fce383d473606f901ff82017707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003269f2acaf22450af15ecd1cc69945a93605ddabd7e935767e2f5b7a15e045f5635a0755be7b3a8da9b692bdda6cb2e891306f849f34bd706e79cf2a536bf7c005e98f9020082017807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02e3b19c669902968f732febbf1c4366b52acb6778023eda6380c982b854a8735a027d2552c85fa57fea74811573fe6d2e5020fe5a2d0955f67cba84e2677709d49f9020082017907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0078f770012afdcc7c0dab1615a96d64fa74341976cc485a8c5bbac653df01807a0787393653f1f6aba56ce2cd9c96d8f16f13ef4c212e0bba17c74b8572a89105ff9020082017a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7634839f4a3d7a17a5297df3184b5cf9c0ef3d77fca480ea38e42783c0a1a36a06a89a31553d961a4e5c92d283afeb048ebdd3376ebbcdf316c7b6f8277994c9ff9020082017b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00e60cbd5e8d759856d7dec0bcba479144237a223cf3db3c8d80da27d53b37bf4a00f6cb9a97983824635ef7aa02b4c3d686df12b1e2dc585a3f21d64c17f9de02af9020082017c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00470f467d0d2027054702a9851c6e119cd6f714dcab82f654ebfb285419f3d83a0166c19233334e596cddd3b6baf00dd45837c6896d1b529580ae1c327d3d70b8cf9020082017d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06ef2a52a964e160e0d8777bf772c3c7863287a25bfecfa1bba4901bd2039eee0a0489e6693ccf1dd6aea520494ed29077ba454d8826a07b6b8e7103b42d30c994bf9020082017e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a090ae58fbcc8f7305acc925fb413c7b9c9f9495106b5cebbb9d05370e280556a6a07dd655f52a0823c5c835c3e7f32cec32bd0ccb94b27fec433cc6ed465299cd6ef9020082017f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02bcbdc6bb393ec2d7b816c904cfc2a7119748414e688b0c01a3680a5f9284e1fa02c621158a5b1a62a6fecf6cead4100ff65cd04cd2388ee1ac1682da1bb104737f9020082018007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04c8d5b2e64f6900e114b5062d4c1481d583a3a5078a7fa800d29c25f11a1fcb4a04e5f71c0b25c39a1d5e6a6f42f4fe9e13fdca87a0308589a6a6d6a246e6ff26df9020082018107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a052da37a96872569daee542d729d4fb72664d1ba21c56c7e761590500f2da1058a07131c78999b43a8708d6337c7bcd3bb52f0e9ac40a3d8da1393d18a686c6bb83f9020082018207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06aaafb11761bf74a538e2414e013b492e6068e71fb6f5013e0f8420fba0943baa02ac1a25d14b0608534f3290d4e912724bb4dde3ef9987eaa689b65200a4c1728f9020082018307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ff0bc25d7aa59a201f2b6e1db5f6c5e7060bbd39a88cc0eba6b528dca0b50178a07bc1db008b69283b0b8b517415f5470d114da1db65f00e8c63929c193381703bf9020082018407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d2635b21e2e1693c549a0d74c979cda0cdddd6642a765aa8c6c29ef734493170a00ec89ae1e2f32cb3c9e2d377bc870b1fe3139135350e25c74ae2268ef16c342bf9020082018507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00a3dc75eaf041c2ea40588b1cd2822a133f97d276888e3905f903e6de920355fa0374460d50877c1ca5abe2abc72ca8882e9d5f273dd2b0091db3ad8813f4971ebf9020082018607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01a3c8d1dfccf60a638506bf636f7dc63c81586088ea0f82ce202b0e4aa505b46a01550acdc061f1f0d9efd5fec91cbe567a23aed67d9aead98713f3307aa2e9b13f9020082018707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07d5e3257affb334a0f29edc4be16c581ffa4c6eccaf2fcd91a98d4fd2b3b97f2a03f640a1f62e646824f5a928ad6a3b1bd45d8044aa045375aa15f05bf4cd21811f9020082018807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0210a33af9f9505450a5ee0fbc4e298f766868d12d62beb108648b6f5cab76045a01950d4937959407e94084a73431af393537a5aab005ea531e406850ed2b05591f9020082018907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0402d5aeddb5b892b67bd1b3698babc8ce3b670211d137aefbbd56a29218ef6b1a05f9287c0ef0b2249b8acdedf5c513bae917af1bedb16360909dccb31c63d1c17f9020082018a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03083549a416f4af0237ab241bca18a62368b4e7ba12bf78968b022549e25b328a075fe76d299c67d84bcfaae568999c338a7423b2a7c339b8c18042f6c04428c11f9020082018b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0922c4f2c61ed4dfbded6cf3b7332bc48487f94b01be80a6493c476a1990ddca4a0432c513c7d75e8a1a0e729ee99d6dfb1ff2b6719e16ec4a364546456e1876129f9020082018c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07b3507f082a37c6314c70aa7e32d3f96f4536ac728265075650954859e61c30ea047ff0e956ebe36008ffcd1cb78e647cc1a7567354f408e2c8d792c95c8babdbaf9020082018d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06e0024cc3aece13e45d7b16ef6dac66770fcd3aea41e3949cfb7beeac4c3600da0164e25d7afcdfc2be6d8f7ee9ed4762f0e3f0dfbf310aa8c8a4370338619560cf9020082018e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e6f976c3e4659f6ba76f6468e21f12779e6bb3e45cd3c7322a8ead23ffd672eda04a3c5ec6fdbdcd7d5aafa965184d67eb88200a60f2d174e98c66c7512cd34baaf9020082018f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02b84f7aaba039031c580af65f251188fc86b92721449ec22797a12a8773704b5a036fbb18c75aba9b014f7ae82743c19eae64c8573a041f68a8d04f6f5d012dbebf9020082019007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07b6634cdfc7f90c7bf96abe281cf18bdd92fc18abb358b77f331a4b59cd36364a06b3e302369932add1bb278e47ba91b5c84b0185e78693cd8e2ff426722ed4a44f9020082019107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05d00b750e5f57636854bacd99ed2dc248150f692a6e6482b673a1baa636caf72a0604aa8cbdea9c4f107c9e6953e67aca9c682bd988fc0170467db80bd6bfe610bf9020082019207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb553d316eced3e2ad5f2024c5962ef94dce62fa57513471bb9ba5cb6b905b83a04139ab8014597d9003059252ddc82f83bd766b4e977866ed05f538472b60ca8af9020082019307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a034187edfd78b4609480d84874b6bb8b63747ef159217fbd7d78c89fb5cb31d16a049e70fa6cd395e20ec4db2957fb487d3b7faf40bb84235219e894de602484778f9020082019407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e12a6a335cb7f15613767a9bbf82f6c0a8962ac114631cb363ddc138828258b6a051c37cab995dca6fdadbb5a7ae5016ffb52eaefbf51008d043c8dfa6a9dd9b83f9020082019507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a084d093735515350bdca3ed2a2b84c6eeca9f7d1d68248ec2be60f24cb8e7a105a034c83e7eb9419bd6a1739f9a8e00b0b9ccc7cb65c347915390c315827fa61b63f9020082019607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e43ad6e94ca60a9eabb3a6472fc14c08f38bd720d811d13bb6bf7ee4c7ca3f6aa04d235a473c019a21f8d9464b2d5040461e51259bad5fe5a28faff3e411744112f9020082019707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dbd1f1eaa92a6f162928d701da5b36d7d0e0548c2f636538d7149f6cfe8226b4a04ae2c0cbea1eda9b3a3a107fdce500692e0dc062ac84e8382e64d72c7ac9f8c7f9020082019807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04bf2dc20a258d2a85a42ad4432d44695c97d69880d967b947801398d22252cc7a063ed2aadcc8c0de939ba35ca0e428f5deb1edbc8417b31ac872fc21c6feb69bff9020082019907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ab31a5141a31d6347dfba8f5e3e5c74b166f795703b11202f68a730745d3d800a042b98950dcb1576f106ad2665b5b530fe9765d05baa216a73385c676b944a39df9020082019a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a051a508186f1d6ff9ed31457fe1500d2ae4dfed401f86e8866b168d8cd89a3b32a01e0f2217191899a9cbf0a142209fa4e3de2ed87955b09d94a3fa009848c1d886f9020082019b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d49ff29cc8d9e602fcc419c707d5d678e72797942b45c47b7a5b51ccb2a72e1aa073690ee90ee46f65590e06b7676cc86a14c11a237a27fcf5bc2eb3c1a38f53a2f9020082019c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01bade0d043fd0c7b761a1d644679716d90883d7dc046c277bebec52e0ffb37bda018e1d8b79d80aff9ae6face3c4d96c46821de6cdc090e6e430d701019b2f51c8f9020082019d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e6a4c51449393b3e043ca6276a15021d58d25d52ddacd3a473d561f6e1776b30a0785fbcf71aa14dc980c44c2b5a643ac8dfcc28e399680b7b517d7ce17b528ab3f9020082019e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08c8fc66a443dcc6c9af145b29cff1a04aa37c5b56d6eacc67d00471776434a21a031b0c8bfb93961d15385df58af67c2928d3e91e83079dc6dca9ef8c436afdec6f9020082019f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0733dccdacf26362321278866149d48a1ecdb331b81717063022ed70abcd73059a02b0e1d4c89e656ad3e74de60a5521aa4340c4f31dcc888fd20209e1d26c03cfff902008201a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03db81b07f1668f953510255f4e51ba666666e371eb5171932b49d3f482dbd8aea03cfaea803167fb8a952715da4e9d71982706d41fa2b3ef6eb4cb9af62ec926d8f902008201a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01eafde7221c64499d4c1dd60222ddc6e0b809a8d4a8e3704d8504546b9b7335da06211a8fad1ab1b0521e74e0713edb42927d5a5fa7f20295c8934cb986977391cf902008201a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02850983f99ed11e1bd4df47cefcb57a31c83a53c5daff78949bf738326c2528ca03bcc64526cbc456332fe5621bfc08b34ce65b88e531c6581c882966630a65a13f902008201a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a073e8d2f734dfd6ac7496039a98f07c1f8fe63290bf27e546be8e82b3ec975858a00de771231eea87e8768c9d7dedef710cb31b38bd40ce18449d202124d98ffa98f901ff8201a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00741697f3062f035d5be9ae72c6a66ddad843e466c29f15295f3ac269c17d8eb9f90b34e65e1ea429b174c2a94f908dc79120749917a67dbe29849e534bcd40df902008201a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0534008ef8f910f0a6c1575d98ef3627913b05db329c0af3bce0f134c89f35722a076adbb6ad475f5c3954289f0109d4a595cefe564b06ad707005b40c590b52f48f902008201a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a059d24233a6c6801c1b62cb038fa28321aa8bf3408b79ab0990be637089d63881a0072089d1e3c7ee0e0556052eb3f2e913c579e0241d5aa1086037569e276e3f06f902008201a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a030a58375d24e6708b31138a71a5017f3e3d872725b9a79863b48c72f822534d0a03e66a030b48fb7c5e6e73c29d04b3bbb3d4adedf8561e6faf3c559e21ef91c8ef902008201a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d2c75a35660cf40b303cb7bd9f5bb3a19e3addc3717b8dba45739a3710c7770da01a2611db4a68174168a321cd33124123e035b28166e8f04805e9d07b4d117c21f901ff8201a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a061bc175be6159bcfed6afe5ceb306c254d9ad816ca0b81cc052c29a321661d8a9f0257175a60b96947322b88db9db884c4e1eea64a27ddb40bce4fb5dd981864f902008201aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b65accb83ea5721c954b68678378d520d572da529d895e95ef4923a5215e51bda04e879174f9879ef67a9d757a44b33a1b399315ac0c4761a6f2433c90958218f1f902008201ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0432f2f41d513a78f942cb81c54064a0596d6eece90ba1fac6b228c8fa4c51637a074e74baff0a5840c78ee848632e37a438f4b6f8a7c1e2c42dabea7d8ad2c6f62f902008201ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b869e8b4d8b70b479437fce9ab72205ed0685a3c8faa81f88aa86092837e71f5a07a018d3c2a35a367ec96b0ac5abb58301c9fd8ae53babe1ad1bc3a4178c9a0faf902008201ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a065beb7e567a0af87f706181207ca4b942c5ddc2f1ecfd6cdc86c3c395e5e7ccfa032403fd2982c43444e2a8c4b81c0849dfad044dce831327e50336f563a62db09f902008201ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffa086a2a72b0781ffee37b5b61084070c0bf9f08da770eaf8773fa874edf121a0724629e50a7c67a771a72d4e3a866298af194a8fd8af3ea814a73eb85ebf2d7af902008201af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c8ddf9b5431f7ceb410773d51e1315b8b587bf6eb9f561413da48dc94b30dec0a01fe1cbefd8d62bb6d9c90a44f24e5864070f47e8d62bbb9cf3fbfb0b753a0396f902008201b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ff2c33e8aefc276fb12d8b2e333184ea10cb4ecfe0425f9a0f27286d205d4df7a06e9cb5a34ba3941faef8fb28bd355ac7531c5631f2d355c086f78b897373e878f902008201b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05f446fc98c2d866eca082ac7562fe2aa299284b7240aa1d26be5fbc9eb46aec7a0777d7913c07d38b889640796fabd2c6fe5232c7230688d7b3e2f369774363f7ff902008201b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c4c1b18dcc18626ef003e8f8a09e89c9c3a865938513a9b052772b5012e8aecda0363830efe697a959816670720d086f7b877656fc5d51ce315c69d5c304272e71f902008201b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ff947ca6a3d946013869cd8817d7f7a93d7950257576b01d58ca12458ba94103a05ef5307ff511812b48cc6347f67ba7288c64a63be5ae60872ba3ab5137896dd1f902008201b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae6f3f3ab5c67904e86348c6dcf6d54b8d74198334cc60b0e93932b0f60fc541a009c51a848387fee3fabf85928d5ea1c1672027f0fddba01ec507ee3b681d5f04f902008201b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f5c523bb44c7c9b2a16018e4068339262af4ab62cf40d808722f581c6d137d47a0470c7942ae1c24514d915eb470a778e6988964c14ce2a76209e32aa6e3694466f902008201b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a008fcfcdc8989a1c1d15067a6441899021b9ff37a9f4035e96f43e4208418ccb4a01f45043873b387f7b3677b0f41cdc9039cb8bdc69611f67a46d426f4c8c03ebaf902008201b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a007b7a67038246f6a24c1f1e9661c535f0a556be17af39c3b0feadbefbdd944caa0279ef06dc0c92dc404d2d4448f5e8bb9e1d083db203a3b2e647ab29f32d57707f902008201b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01f64ca2e312ed6d9aea702a093ec8307ee41604cd0efd865da988b832bb7fedca0586a0aeb730d38c8d2dce7d576ca376c4695c9a65c237f436a29a4fed4a9d705f902008201b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d5be24030f0c8ed5ca4bba22b6c73ef19cf1b3cee4d93619f132f062da57ebcfa012b45ffc3f4a73e45f9bdeafc8b404524fa3289e7f9edd3486a73e971f90e3dcf902008201ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04ce37999fb9da7de9968a34221458513d3ea8f558daecd68dac2eb2be90506bda022fd0c2acacd345090864f50ae81d2bfe99bb003def1478a4e2c4d058961d033f902008201bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f47dfe440a0d9933c2d9efb2d9baec974e4188a149de44ea8b996bc601c1845ca05a2f733e82f988610acd1fbf28cc9b29842c1d363f8958193febe34ecd1a561bf902008201bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0abcf172e2a4f34de759705d11b039c83eb506e6e3fe4e20b34eb76c26352ea58a002d39ed7bf92ddff7bd5f916c5ff490e10ce7722e18a6f7e4b10ad619cf2ea51f902008201bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7409570e30aa7158869a08e1baf9ed3ef93b376e38f3ffd5052bb842c54edd5a0776da8d05e33596e5e160bb75d312d5d4f412a6be485ce327400e58b778cb7b1f902008201be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05160f4fc77fbdddd740c3a338fee9b99a3ebe70382015402b1101b1abf00c973a037479852f6d973749bd6134cdb93ba0b2863be784331c2f5821511159d63bd6df902008201bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a026b28761c51b2a37847b0a48d76a5dc184f4056cfb33d02cec724a343c9c6c91a006031753adf0748c9e9b008ce3fc4cf397bbb321f8150035d0c22fc24c8a181cf902008201c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a012eff96f6d27bc3b157775a4c2a5d5155309b608738a4a584f67bd97a8440788a06d8e5a1e1b1eac9955445bd31c7d1c611d27be840391309bb516ad41a99761c3f902008201c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00d4245f14cf14c1bc74f0d52fccbcd3fa082c69a73dce33057413530250c9325a00fa36fdbcd6e768bc62d06923c664322481b3adcc88bf3a93d8fcfb0d73cbeecf902008201c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a022da7926fbf9f3e1f5be79790517379bfd2605269ea8c980ef9d707a5b730252a036f029520ff03da4578355975b7d13c924d79379ccda5fd644b95036acadb6cbf902008201c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d1b113b81a443daa1198ff00089f790cdffc62dcf13e15a75e74bc67bc3e3cbda05fdbe09347b26af3efbcdbc0b813d1925fba04efbe08d68f3d5a88a827eb3072f902008201c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07c669aef279b4087f9ea942235c419bad40a831a985f443104996fbaf80db890a07a8169b5a5e69be7c0c46bc71b41e0cfaa7e305cf8b3f19f945385bfc0cd8818f902008201c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a007fd7c904da9a3061363eca5e2bf3272d3780349d66069dcc9c80460c4b3ce94a05734aada5260f8463fc792315268eddd818d38ae29b297265515d1eca73b72a1f902008201c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08ff26ec254c9ccab24605bc55cf9fb297ce8959affd6096060a8645881e9b078a053c3b0cc1af24bf36d786057863fc9e2a11e088411f867bcdcdd141e64d958a3f902008201c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fea2a5c5e100ee0ee6c6363d6e5c4abb57892a29ccb715a4dd89e51f73c93d35a05cf893964abcad356f7833a078bc6e3503f892d592c01681d316ae6cf0e8363df902008201c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eac212f8fcf1011bb0b6ad6e52d63d967a84eb12d8f2b3062b7bc2fa8abdb9b4a05e81ce74390bb574dd31407e611d74ad93f039731dc704903584e0e5c123bf63f902008201c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08e327ae515e3ed258782f279fbe198272b9e00493b60e885c4584b50881f89cda02f2409e38d93f95b7af4a0cd777732b3d17232769b218fc21199b57edc8d759bf902008201ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d079029492ccb4cd5526438200c05c339cb48073ff70d9169a1642a5ba0b9b2a076732b16f4260157ba78f2c8ba8d0095163ceed575313364053ebe6e69be3962f902008201cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e6f6fc772e7738833828c8d6cdc2b18191f315a3642c7ac68f0eb9ef1d0d84d5a006c4c1158622f7d9b75f1bafb786631c79c3ae60494a0459d508b200b6e9c169f902008201cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04e95defbfbfea6457bfb3da316147d07fb95484a43c7ac7161b8d2aff0bcb3dca00321c30c0660b9f404b2cfdfa40e638e15c50b12a330bb4e19e7d6054afa211bf902008201cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0089c9ee88edcd973836f50e7c857ce3cb830a8dd50a1dcf59ba6f97349611dd7a07b9a2d7f9509679ebbd3e90d8498b7659c490c8ab757484ad089e3d0e1d8f4c0f902008201ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04a6fab5073772d872ce9c6cfbfd13e27d4114888a525c5352298add3e1f544eca02abab7ba90b26d0a7db3cc3dc499abccb575e60105724bf6b09b6ef47b951395f902008201cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04f878850164f78caff9a449d91bb3767e45812930852c820a0489962a8baed7da05b083d332215603de89125ef5fe76cd22910fabafde5db1dc5a65233bdd157a1f902008201d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09a16ee482501c470c250a14a1624e02c54777758b063b3c203d8da6eb23ecaa3a079ec17ccc988eacbeb5d5337821f4d4b997ec755f0bc7a55fb685cf5bb6cc458f902008201d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a073e1dfdf3fd076a3f5c8a4e65fbd2fa59b97e503c4f0ebca2d4101d2bf84490fa025c598d5eb8af6c06829003c22229dbcaaf9b13d90ac4928c040707ebb895852f902008201d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0931abe2ecff45d782fad4193681ec759ea11594a76aaa81360ddd58e64f13032a05715275cf6ed81d1ac6e105e4c84fc7f0c0e29959f531b6ff22bd4a11c156cf5f902008201d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f65f700895b2f92f4b8d19129aa098b00c99164b1daa4ac66749e4cddde0a40aa0593d0275a11e8f709b1b70d5f9dfe3bc5107868ba105052ea7c544eacf645bd3f902008201d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ea62afc19e8656bfa322c7731d8c0d5b1aa1a7cb86979bc22eccd4726f882c60a04e124ba7e3e72f10d18fae5adef04eca5ecdaed8369a79d34786b39660e046acf902008201d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f17a885382aab95865db4c4e0c0df60aaec6a98ce4ea3dcf180105f8c3e21f0ca05f60331dfbdfbdb2303a33964a58b059fcadab09808ba3f1e0bc0878176fa616f902008201d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08f9e7e0863895b94df5a8710595c8469d001f118b5b1e5b1c3facf2bc9b49daca01ba9edf52f6d97fc7564e2685a15377f1169d17f5b772046cd30ac12de405cfef902008201d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a4a47631da7c70a872f0c71536fc4acf8401af877fea4a9d865699e6f4af4423a061b17d30f4ad4211fcec428b3cc4c9bcdea168bee0e3f8d964b67a89f081ae37f902008201d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0408417736d29618c65dc5c9c999a6d1ff3071947ee9ebc43d0f3b721d55b2f56a006e20e9392bd70d8051da8c0b5cc897a4126d9a6b3a49542890fbd78e2880ed0f902008201d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a080156783afd34c36166f1fc7b6dfd530bca86f7756c0e3e25cc9cde247cd1fada04736fabf4ac2c71b3e6915b904ba383d936700b3d5709da91a9235f80feed4baf902008201da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01a7b98f591b21134477bbc29a808c6786f25e191f3b655c571e456f1b795fcdca02efb194d65e24f1e5124c42c5d6f0575073f53324707b012c7986fb1cc8c861df902008201db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09bc633cdb8986412b168b7722df87e83eee0186aeccdbccf4d9c72139e37b343a073b426dc34dc8cbd85dc4f242d2adf0a4112a50389a6395ff481f16789315c09f902008201dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01bac0546b410159a0a8cb7b3c8e3cd8e27d0af285ac379c0ab67200574cc12bba0283993633af3aa401d5557aa71ff9f5c750bee2df4ae41a4c7c51f3a015c1745f902008201dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0387240ce850b7908792af98d27d101f7e6dc76bc896bc21a6c47807f1ccb7576a0527f245d0af2e85b9e55bebba81e885c95e1f4352570a71a9e5b33f52013bdeff902008201de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02cb7a14aebb81bae713a8d255ec64e228e19783e976e7052198fb6e338bb430aa02b367e5bf49514ba4e28f2220762edbae2ae4708d0a0e3eaacb0954ae098d166f902008201df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d5ed3057e1feb3746f3d7cd1f701f3a17794552733c01297b3bf38a55c17d48ca01ecae3fa77a8c7f201445aec5613de847cb1de26789f4881ec88cde4e3f5a5bcf902008201e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a007741af779f452129e6ba89723b59dbfbc6e2f914c88b17816e5333be218dbfaa06bf7f39ddf05f1040ffeb6e51c548b73a858c8e3036433aa4e718f8e7f925724f902008201e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06782550d5b3b50b2581bfe88aee4a87cc0c79c8be09a0d8e9f9b82096286e433a038458e3558d2dbf579082fee4a752dc7303f5e62b51f886ca7be3fbc746e0bdaf902008201e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a7a05a30ba10171210f783ac640e7494daaf09188c0a902540206d689b7195c6a05889b36980e0c29c57e1df2bec5ea0db1ad756fc291769a4afc9b9945f571f71f902008201e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09f1456fb2459fb978a672b8ada02acc64f9c3110a1397667a8783c8ce0ef87c4a01852f192c9c804fedbb24b2348dcc12d0397a4adce5087c5c57c156ab620db85f902008201e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e315165cde1198716ab4a0633a1d1d7b1c90d4be2b20442c5a7c2ccfbb473bf6a076e60658c7edde0e3112742aeca589622f5814cbc3975e51a7559fe1c0e7a5def902008201e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0656c9e1c8622a2779ff5138b3b9f43d16fc63b503da6b5f75ee327c7655abb28a0312cf985ed295f0bbe6f6bea42a81fd55cb9391fc7a94b041a67f99ae8acdee5f902008201e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07752988a62b3b79b24011f252fbadf5c0b176f13aa8bde50ee71ee8354b4794aa032d5004e00c6a2278e55df7d805d541f1de78ab5ca354ae9488de990128cf77ef902008201e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ab0a4266fd18d9af1f3608afae1629fb23146aaf5a5c6b89e06d3a6769702698a0668ad580e9148ba80ffa13d8a1ffac90c23600483361bf215b54c9164f4e28c9f902008201e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b2ce8101292f68d0f1bd582f78a8cd8e0d2639c0ae4c7326b90cf8058951a5c2a02b3179c5fd0141991ee63dfcea2ec57103537d68f0f2b744cbb2840a0194cfc6f902008201e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a040ef88ea5230c2defb5617ba034bbc09c65604ce2df28e2dc2851858e4344db2a046dee52994e7ffc22ad1be938b531e3be1e8f36d4a88c62b3b14abff6bb8d567f902008201ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0878572ff0ab073a59956e9bcd8bb3c4673d532595be4151f7e97978c157c1918a0567603e36639733921b0b5d742a2ada3aafc8b5d6263ddf50f22d6bc2f36c83df902008201eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09b627f0e1f8b0cd1fdbf4058a2bdad78e0c8f88beb8bfb84c3f593c33ccb80a2a056773c64577a4724fb5c6d1c3a1ce9941365aef6f297a851ccc4e2b3921c3124f902008201ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a080307beb0a52c1f26c6af25c0c40998c959c3fa3a017cbd2d60682410000d3b4a04cd142ad3fd4de5adf4d6748fe34366a4ec53ebd043b257c7303b8adadfc9824f902008201ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07f61c9a1db3527a152c5e05c219a185d3dbcf823b707871969f4098ee20ccf2ca042048d7fa46c9e75bf017994e1ab0eff26e546770c7b8fc0dbff784c948b6093f902008201ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03c80256c71dac9bedf87b7e21fd655a6505221b5774e24b2ea9bb05b6f4aef46a007c0ca4a87c364a0da0401bf0343870358713fb10dcb91a67ba0fa176944d685f902008201ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09476c40d1acc0a6fd2cd29f31583ecfdbdba9cc38ab575cfb8fdcc031e15de88a01445d81f005aa1a8625ca56d11cde819ec50e1ffdd8125d1df1f0bf888db7735f902008201f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09f05e0d962a501cf88b4be361c03cdfa11908a9cdf023919769bc54f0c2bd5ada0621c4d632d79b5ca8cc2cf66ed108c2b721eda00ef4312edec4d21714d89b4def902008201f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0403779ddbe4c20a875389643c53c9ae765fa278d755d18d1b23fad43c1c95c3ba00656fdf66401b4e489febf7ef6c0bf1f437f04ebe48eb5e92171deebe0329c9ff902008201f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0651cc8ef3e8cd38ef35221372e132c01f489033112f42ba7b87ed94329996cb3a06889900d7891ca9d11582cc9bf5d035f5560fdb4e2d7b86ef0b644835683016cf902008201f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c409f64350ea425ece225ddf5f1f971faa767e2abe5c4206f691a538ed1fcbe3a05e23e3a6f0bf07ec7391fa5f6160a25a22569178014a73dc8979f09a412d2e5cf902008201f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0843736747cfa175817b752908488cb94ae55caf95808b0ad8df17fa72ee47ccca01e09b2783cfd1561d693320c5357c3f6028efc4556838ebd2d61c63ba39d733ff902008201f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a063de63ed85eff68f61007b77e201f193193626d05333a90fa8bd1d1e82af69fda01e7753ee7dd6e358b7b1e86e324c2d049127c6430b687ddc5f440158e99f7ccff902008201f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0960e87c545a07ddc9f7d42f546b79a530d2aef05cf77c40f16a9c46e965e3457a07daa59c34832beb5fd3be19fbf7abc1dbc0e91228bf6e01cab8bf905e5d63109f902008201f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a067a5bd42ce71e6dec5203dc8b2fb61dbbdc4592ea5d1563505ae8be3c2727eafa05ada67c90e19152de520e1d8a17777bedb1f5554776dcdea7bbc05b11c690986f902008201f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a068a52cd2f858432c718ff6dd81abcff42c350964f7d9ce286eb0dd9c3d4f414ca027b116fd4951689fdb8e8c3edbb60c8ae47f091f3694f672defb4de746eb8f26f902008201f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09c3501acda3aee84707a53d909e9d23c87796cd5fa746cd1d74fdd9bbb7b3261a030c608a5cd91e832e62bdc08d991dbdb7a7a496400137cff5963f42eae0d5c6ff902008201fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a029570c47df2f6a97da24b03f2baaf4e4397717e74a7efe3c0a9282b54f6637e2a067f3cc63d3d3c2af28b27c80ddf3b3b83488ca758907b55be11f97ffde792e88f902008201fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0745f86346c73470c73a6b8b97f605b5f1c98484f737f67ef7153e9cde1d23476a00d7a8334456c68b83d436fd1b7aa479fac08a8767275be059908682ca0575393f902008201fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09714ad60a27091cd58e12379c326e95de593ef60a7952c7937902270c66a15b3a003e004ea5585909cbb9f1e5271d07cd596fd8f8936557010e2a3f60930a801b1f902008201fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07dbef83eaf6a6441c000305e6c121ade88d429c3689d4064e3623cd412bca185a075adc0c42fa2f04e8de3c76d4d4fbb1ea916a3630308911aeaa6983f077d9141f902008201fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a053d4fa8b6f4867dd979fe0601061bebe105838d568a77948e37291d843643a58a02797c769137ac67abb1d0c2212c5d9614a5b02e462139d771a825181777e6419f902008201ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a001a16a08c7034ae3906eb19c641ebfed7c505837e312fc2449eeb08c13670d03a06fcc5e2db346c27802f245bd5d64f02be3d5fb61fece0a218702abb20d2184cff9020082020007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04c712968fd0d73beabc3540556a5a817f8caf61201b6a0a8fadb4bd745144437a021201c71ad1fe4162de4d84502aa58473aac7f4ff7073b2e69ccb71489bed057f9020082020107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ad4ccca0d7ad0c8799de7fe093479290dc7004577d23d7da290a2af0df8da339a05f39dabf48f416a3b1981b9398838a26a4d2d1e9adfc9152bb856c311e7d0748f9020082020207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03c4dd198567bac32556c530260060dc29a2a5e72fe3396bc00016460d30e71eda0220ad27075e5438cf1f697d1231de8e780680b0210696abe9fc1212eaaa701b4f9020082020307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00b809e8717f94e9a25d271f88fe2872fc23deee420b0055e10f7fce21b2894c8a00c1b8e17e0ae36ff64b65793ddbcbf3a858adc34dfa45aa60f2e9655109d2501f9020082020407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0579768bd9c1be2a5028699f089193fa90bba0b1c63ee1430dd57a5f5ae2e5574a0685f3e8e9201a927bec769cc430804ca180468321f4fcc73cb35e16ae0d5233df9020082020507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd2adcfefe6c71e8d279e7743219f889a2355a0f49a31e5636988740fccf7cbba01951dc67a2133cb5e6b60d96577f2ea1af8037c64bc4bb254e6a43d6e3cce0ddf9020082020607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a052ce49321eb6432a713ac2521f6092dc6ea42a651ae1efabb8f7eaa7e9db174fa0481200197d4cc485384af6dd703764ae21af0ae11e23b04c9e870f0ffb2f811df9020082020707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02dcd3bc05efe6f5dc7e9aa1c45a0890b612b9ffa914d2ac8664313022f3a331ea04fe9f1833100f88cfd791a89d402ffb355aeb1b9e255629e693d8bbae8ba4136f9020082020807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a020dcd7c43eb82193ecc63c8f74e522502440a13624050931b1e1c36389b0ccc5a07c697abf6560cf35eb139292fccaeb8cca0ae8f33a840ef7b11510a340fcbaa0f9020082020907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0db1f69d43cda1649371436012dad6e111808a0ddf0d610ea652ab824ef0f019ba07f047f09e3635644d86797ffa31fe5c8a8dbd952da8c0c30b1fb8decb69857d0f9020082020a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a022e80c634ee709edac7bcbf4063883771fb7e8627b6fe0e6601f318489f5037ea0032c31c542edf9247170a2ccba0d46383c83135705eceff6575c1095661104fff9020082020b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a095e33cb23d0499aa32c32e18b42763ddd54eae9acea78100c5c187558387e47ba0418acb63b1b7710dbf561af5214a3368b4b00bd3c6fdf0532385bf138941524ff9020082020c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bbd79605b3fbc951874de7b948ef47e7b1cdfaf0bf412de760c29b028ad38f7ea02ea4e0e1105b208e07e1b9e610a244b9dbaae689e1017eba438811c8c317a9b1f9020082020d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f05539ea7bdaa8ae393ad051f6bd53896f2126559079c1747ad67cea7f8a575aa06e6209d40ccfbcff9405c9a41b0d6e8707249d7680ec0895dc5beb3cd6defa06f9020082020e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a0e815d53811a82d2d4ca9bd5a77919bb1c7732fd2e94ffe35e9ba8497c7b35aa020b949b37705ee223f112f3e9d8df8ae83cd327102ab8c8d5584728795f55a10f9020082020f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a8ea06905372418bb739ecc7f8aad4ec497f5e6bf6f8652871a5cb0d0d7bad6fa00ade044d241250f4a68a02e5b840eb639def87ecaa21eedb7a06a52eeae30870f9020082021007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a035016f882b0006aacdcb6ca89bd3ecd53c44404128b598e13ed4478da5b06b12a078084b4db9f3eaa09ee934fdb7bc857798b8b85a7f22c81ce940f2472d85f97ff9020082021107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d2b3c66221fb37d05f1acdaec1edb4ea2d842da7d6c976ee7bcce43d2b142a9da01b6207cada71964661c67d385d3c5ee923aa94f02f74f847545df68dd1fff91af9020082021207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0921c6e58324f9a254ebada1cbc0b78f2298aeef5b64ee6c5d335fa351415b19ca065b17129527f997d445187e300e12dc9f863c6846ee70f1a6695c56d2abb5fe7f9020082021307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0efe4f57cb483face4a7c47e673c0d4b4e1f3b9178fb196075f64db339c4f04f6a07be279f3a39be0f1341d5358ae23712030a86c991196c0365e21637e8bae9e7ff9020082021407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a030aff1fffc65282d38e9735f3741a952337ac932f59623339e59d48c228b674aa010e8c6c902ea85273cf1f75843171cba5ad24082e60169f851a00b3bda439a1ef9020082021507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08859733ad102dabe865d44df2505bf1f19d456882d2a27d61d9764fbfdab7e3aa05772fda185d59ff4c5b57f2a9a1506b21a442ced21cdae6b9d91cc691afd71cff9020082021607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a026dbec41d6851dff16c47b2b25e7b68febc6a6532faabd2c5f43e20a73d94bbea07b15afe16750cc5323a24dd8cb0ca9f8ea3f9f2092c2322102542d1bdaae5a15f9020082021707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0129129f541b783872a67159ae90e1e7bd74dde573b054477fa8365cdb6e18e9aa06247d9d254ef17a1d6c4cde4e025cc2aaaaeb76b2c4cb89505e2a195868a53aff9020082021807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0530ed192fdaed4a6be000a57cb427c3fb84f361cc171a041369ce3ddbcbc8ef3a056cdba5901fd012b35b5fe6b2e2ceeaae927834ec639d9f5910af835cb80b309f9020082021907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a095c5055c45b3beaed815f520d71e64157822f98f050b0644a105d940f0206f02a022cb53e2e4b711fee54e0985f41dafe04ca7a6a415979c57c8cd3e402b32ef7cf9020082021a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03db59da6a30bade5634d418936cb2f64458fca5a8df019aca8ac7b085b03539fa019044e7ad17355aa8c20bc53e0c6d87fb8ce14eafcf2aacf2794856925862815f9020082021b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08ac54273a15c9d6892ed661e0896c105f55f84475dde74cf6abc36db3b2b08f2a05d94f4fda7866b9f0b63356e7816dcb15b79d09d8e96e7f311ce788eb3f1217ef9020082021c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d776562e5afecabefb4ff3b346ebbaf1f6b7cafa4503cc71fea42e4047fad71da046a0c5d57ca7e8356c8520d670d967b55533ab4442c5146e198f8b3f7a586b28f9020082021d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ad76ffc4c0d126da6c733f1c56d7a0666a6b95bf0c6c7348bc6f1a2caa46302fa03b1541b5d09cd8164eb4fea196285c9d247416e2a60bd7bbebc73decc8da0933f9020082021e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c843acc66ec76594ed4c3b7f3d8f43f24f760522566d962f8a9d96a7a7e2f4c7a01a9459b683983097f834909c8213bbf47bdc0975dd0e7c962d36aefdf4147e0af9020082021f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09c90a5f5cf61bae6a80a041a317eff85ea0ce8ffdae47dd28078face09e558cfa0263f96a4eae67f901582cdb5e74015300c23b6fe8e036234dc5b0c129cc46715f9020082022007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a7db5a0084fc56ad22c4cc34e7e474737d37603c678dafd8bbd6e797175bef2fa05536b92089b4c1601c4d8d9e986b61e9b002f79c6a5bcf74d7be4f040f500b01f901ff82022107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0482f5f942bb24e1a90471bee7dd550b1b5b3e7ef3aac3de6603bf082db5c34ed9f342026170229ef588ce4de9050d06d57206e21b50722462f419b570718a3dff9020082022207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a025261e1e0172c086cb1eee49ee97ce9fb5af64a5038e98dd07099d3f59e93209a03215aae832ebce135c3c724c091efc60186f7ac106c1ab41dfe9473eefec1ad5f9020082022307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e14a7bd174ecf8e536e5f85cec1cc778765752dd6e7a34f387045a5c8008bd4ba0055b48c4f83e4370b0f5825f42607fc700238bce66eb9d06255aec7b6e9b65acf9020082022407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a014949db823ab22b1cc000df12c035b0ee7336260266dfc04a13b3e2a482d5e76a0670b4cc2ed08aff61d9229093a481dd1eb9bd0f74e18d3d5823b135c4318b607f9020082022507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02ca2549cd98f75860b9fe15529b9216a72166a7f6c9d1e4ca3ae29d4fa75f746a0245e197ab1e76bb0d4365d5bfc738c46561332a440229cd35b672acbcb3e9008f9020082022607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dee0a17890490282a8aa5f7507cbdbe4d702a0a4786fae871158235e2a5c26bea07ab6e7a5aba582c84ecb51bfe31e5ae2e5aa24f55cdd7898d6330e144b686260f9020082022707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a025798513fea402e3a4d01261e708b75920c483edbaf108849f30b0d4c3eb08baa01d2fb00fe3cff1d5c5eefe1129541faa1070d086f6b049047c74657500ffe495f9020082022807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0399e7eb2679c471b3b6af0896d9e919383186a7a3108d9ac6715f1a1aaedca72a00a5525a58347e7b0093519a7661ca94f3a3f785a5775d18f6955fb7c2facc736f9020082022907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07fb1fec09e9e171bd7dc879b8b46ab529994fe175e6a135baeb8ca5d01101394a059ecd18a7c246f3897c1837f16a7aba97f8664e93eee1ef5cc907fbbf3005bc7f9020082022a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a079dedbc77bdebc2ee87126be716f3478dc187ac5fc7bbea7db6702bea916d0f4a070f4db16f64ee951f459268979738a5ad79a714aadf88f2470d6e3591d9c6577f9020082022b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d6385d54e452aff056f0aaa3b801788d15ee27c61ee2e06686dfaac16c59dfaa034eca52dbae8216088bc07fae6d64ecda8ee96c8510247e76b57313a1dd0835df9020082022c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b8b12045184d551409cbf6d5f3f22a50c5245b885ab7dce8b31c0f0b62b9c65ba078af3a73b143a2a600a48db7918874a79093ba435c43b570864140dffd2d98c9f9020082022d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a408fb31756fbc7a48c193d8dabd094d3b55759ad8431d7383221d2cf4f987caa06697f96b43f4faa97e1c02dc23ec4400446de184e41064a7e2c9d678496ab10cf9020082022e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a050d878035bac49eba996d80148bff8eb48f52f2f656ce13628d0d615de017283a0588106522bbfb90cb9783058d1dcc16e6d673c2587ea439bfce9d1e45dadb70df9020082022f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c3b9d2625d2463a42a4ebb64190482a690f33f6343f44065a70703e6637d7544a04c56f90c975c35872d3f350624d4a9a9284fea15c50c52450777111b6f86f5fef9020082023007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a014f24982635959e43a06a1ac4d226826a60f84e460eebd150384e2817a088db2a062d85b8987da52a8f1b94da2f8c505be75ef52ec88b6d1b0801edf94786027ecf9020082023107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b3ef9a0b7a18323e08e2f94f444a8503c03cf9708e0ce89a69efc5b874291a2fa041a6bb9974fea5b124b4217f2bfc32e9e5b2d08f4b15e60b85d00d1d1074e2b6f9020082023207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09b4df6da0b87d099b47313e2aaf6f7027afded84b42abd76afe00b68bd3f37dfa034d977f61242aadc2048f157d4584a82b7b0761bfbdd905bbd96edb30a2e1d42f9020082023307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0701d02b18ca81f8ded3cbaa44ca33831906ac7559ab44bf7dd8412f8661f1339a02dfdb138f7a7715ce09f3154990534dd9ce17ae7d15138336e4d64448ffc34c2f9020082023407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a053f988af6de7a9afbd6970ada80eaf280c1c351ebcb7e2b6f7674101c536b568a067616a9b81f9358d2eecd82a766c98a264631ef8045dc997e17b140d0053c11df9020082023507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c4e6c52578d4957a3fa191ba32050c730a08d84df4329df04dcc4eb0cba4ede6a051e0e1c006a7c50b56b519b7c219da07381ed5eb33713a27b5329edf8e0aa966f9020082023607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0198fd2a29f70f3bde9d83c7b36ec8298af550a1d7ddb339c72b4923288181284a023d72eb69251e12de471fac1ee66a6621a566df936d303fafea46198407adb2df9020082023707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a051623093d591cce725792f08e976f7a5eabfd13a40f6df628b3424d374f8c3bea059b24236a7abeafa931800788bdaefef39eabe9b0c59f5712e6c70a32acd629ff901ff82023807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003269f081d07c216daa06c6a6e9c4ed12d7e03c49251f5e6fff9432a7648cab131f1a06f011e8f13b99e298c7eb2fd1df1b4812ecf2658013f51f8f9699dafe9720bdff9020082023907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cea589ed1c5f7547a4537d6ce363aaede1ee16412bd2f87b45a6bb3dce242716a0506b7a55c9eb8a811c43e5c2fd427da50f87b4c90bc26266336daace506a7a6bf9020082023a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fe75b06e480aff615d7738258b72f98fc7e28f8e2f13c4c8a8900869ab5242eda03ee55239cf68ea3a9b62daac50307fc3f45e3a233dbd8ae0da30e4edb85b7c01f9020082023b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06a46cd0bf6bdd224ca2b4fceb1af612c137672df8f197ea380b3492635b2a41ca0707aef193dafe55bdb6f54fc5d5e9b5f70b7db0b729304e2f93ae2e2880ea86af9020082023c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0afd6e8cf6784b31ce0d1b8e61f4adcc83c308eee2f34a738db0cc5cc2362ed4da04507e6b3300cfb4a84149512f6a4bfe9142169506521e6fbdc2095a35f1bca5ff9020082023d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cded5f16dde9f18d4cf07a189f7c95fcb7e44a6656f8516b17c98c1e9dfad597a07afb377b629de89d56d5d2b550e95f37efe267be000226ad100ab6bb728ce703f9020082023e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a005ab7b6c5d7ced4b0ab32039b2ac44d031e02afbc5c9df8bf138ec5729f11128a0032a53b49d5a52c59f82137e7a0a210dc59846f168671a9e5ce6f267ab8a48b2f9020082023f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a040999d56399835b4875a5201581a3958f6d341adcd147c000332766b90bcad00a06364742dcf9d3caa5624a2f2b49cd6e90d3c2ef099442e06d1f1b8bc09ef8e2ef9020082024007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a3ee2b94f16c4d2d0a84322b6121b0a77ea03fbd98f111d2076015a0754aa1e0a01f7dd5a5f11b78a6679e5d5949648b5c68c3daf5f6b18230cea4f231997a58def9020082024107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a034f4cf5c22c94f87424c0545b90c373ea2fad8dd08e8217ef4908b2fdfca079da02a20213a770748a6a6ca1cabda7d77fd018ffce408ffc160ac0150b7de700150f9020082024207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dc890fc31231f0ec57aee6472061d78248b9d84dba545a442a445c1626ce5dc4a040d582ca077a412138612a7c717500652332b27387f5e352eb2f9c69b971a4aaf9020082024307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ef248b4a2a6166456312a3e4294dcffc90a5fda830ae1026a1fc528395a746ba01d9b645445b86d447e8956e0fa33cc232f872c2290e62c7af29cfc684e08f2f4f9020082024407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cfc8bf2658e996045ae3ba4b9787ec1246cd1189953432d368b220dd75a2d0c1a019976f8d7ba43956f933fb4c19a4dbe61a5a7716feb909a6979c7a4c4b9276def9020082024507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b857332c472610bdce6f4b75f77ee9083534e9b49f339dcc11c55c5b6ae70e30a075dc421c3a8315f280c68380abed0966fd34c641526b49f34ec82764936c6e03f9020082024607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0637c2a0ae06934a733fccf6a22c64606d90dd5fd56003c0a32b362ccb1d863dca07788389227308264dd7c8081150de551c1ca4318248e6b49c958a05045ae7a0ff9020082024707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a002e2d2533c109d2986431d544006b2f9cb49d732eb6241d2f4c5915852a100a9a0092d31ba26113245c355e038c2afdd11597b8b981f2c87d994cf41be53d65dfff9020082024807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02b5ea26df2332f750bc86458e6c69a8f4937b0459fb226343d0ea54af23fb3cea0271b9ff945e187dc08ba3298fe53a91f4ee79f7778dc50689e721ad9251fe5a5f9020082024907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06d4b720c9139aba5fadf415157ba0b8f8707b1339301eae4d56906f3892f3294a03b7e5b451e0ebac619ac5558445996a8e31ef8702b1ada88a6c75d7dce48d882f9020082024a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0036326aff562171685d59fee804104cf491d510b792c5a25743953e82b491e72a07fe5ed89813db17702e7e44611ae2e1cf30ee5e512a166205bdc07df95238d5cf9020082024b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ec6fb2fbe35aff9574050693e9a0569dfe40c3b884896c107f1e65fc50ba1dda0149691d73831084a5de790282197f1f90702383156f829367cd01b33a1fb5418f9020082024c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00514eb0d58fb1496931e1a3068c34d52a34f15764165c6e66c1930c1e3c79a68a005b3359a430f639b94b11f370e42f1dbc9a93e21e738a935c4ad3e8aff720e45f9020082024d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a8077cd66c95413a27da58611086a9193f44c1aedaa513d2a4859895b40dfadca072e24743ee1d10ac472faf274d688f41e2e5795caf39f788b051a81863de5926f9020082024e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06d7099e8ed16dd59c528de5af37e9c4b9bb11d1ad76929d27d97aa09ea4c6be3a04b5402cc1e35592cd976df1a4e1799ce18bad45104acf6938d54fed68e5a4b53f9020082024f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04b2de8017b111adbef2850fd2eb60e84362cf44ed8b00ba9a2edb65172d19e73a060f500b15e6dc5103ce64fc719f1990b875171c0f4a708c5ab724ffda4284453f9020082025007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a032aff2da0dfef1fac485f40f18e72ece820c39b3a15a83bf5f37d6799b33fa35a00ae9831702063ce30dd90abd1bc85d19828e0a5476f9adfd6947d2b1c6f8a8eaf9020082025107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b0dd08012b480e8953be77aae6db9ba2645ba7473f46b092545abc9843f11aa0a03bd88d9d66abd35eb945f5652ae50f2ea9d1be637a73929b1d5eb157fb29d53bf9020082025207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0266dcd211a3e7af9d29659ddb88ba739d9a92ff1fd692d653fafa3b87cbc3d1da036f08ddf662d3949c7aa63b21ec41f08f31540fb67941c8cc4dcc83ed3820128f9020082025307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d48d7f610b540c25bda8753a1b2259c7abf2011ae7d67b36b66b9b2ce25a66e3a0688ba5228e1d1758883d7bc89af99bb726cb4e34e375909e4e3a339b9bf87d66f9020082025407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a040bb44db15b53cd849a80be0da896cb12ddda457e7fb7de22be59d7de968efa6a02913c32692a92ebde775252eb5c678bfc5a105248100a46726a7229d90702a08f9020082025507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f4a200e60e19261c28412e5b815ec8b2e0614e4efe49892b16ab38700573b050a04d0640556dbe2850bb9d1474d23f748973b678bbfb9774282ccee11c09a21252f9020082025607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a046042bf9f8e623a917d8c6cf6970f43074b17eac0f34b835c16714b3d061e275a073b05adc5c4e1bce54dd6ce3261eac7f7641dd94dbc689e1dbd8838dd173ab5df9020082025707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a013bdbc641d4271411d3e319394fa5293c0cb3a1a8248b149523cb388eb8ff31fa06ce925b3a7de132a4f639e4bfdd817a66462693b4fd540cd0f63b34d98e5971df9020082025807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048286fde3d43c13a40af84bdaff9773587922f8a75cbeeb9ed2b888a4c5525ada0185553553d1a9ca12b309ecac410af788ec5aaed220be8aee04fbae4b79416d1f9020082025907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b4e6a59c829fb68cf7128fa0488ee2251f5ed9fef2fdde856082010558261305a0590e87fce5723f5303690abed0b47f0ef55ed757e669156257336964558d4b06f9020082025a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb541b8eacef68be7ae979e7ea99223725d58965339ff60cfb6c2ad6cb5fed4ca07dd473bd0690fa425d8f8bed60d58f8db605c286eb8068748198ae56df3e8ad5f9020082025b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cbfa885c1ba3b04f06e9e3df56f528a8518e9e4424536e88f085eae4a8a46046a025893f9c690590fa0df9cf6c161ddcb4dfc24daac0d3f7196b7ab05931505e62f9020082025c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a043e22cca7759f399a18bcda9ba6e28b085aac422591530bcea3f13d48ccdc6b6a04cf31d47839b65c8372a3405e41fe7cb3de8226e205ad06d23719a0cf5181219f9020082025d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0075d01eec8bd179bba521986ad674f1b410f2eaf0ad59e4b68cd0880c9b17803a046c7116fceecc4b1783d5b3901d05fab00ea0014ba49cc85b96ad2b3b3af0dfff9020082025e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dc6a264f11fe085bd07a543d5ceaeafdd17652bdbab9530b5aa0981befc464a0a07293728f88a881b4e2a6ff0b94f7747e277d864410b05972ab97dc7b53d8e95af9020082025f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eee2bf43e998e5bd21b0131b44c2bf6fd54648969ea6979ccf1e9580ed3994daa07053de4906a5dd910273c3321e84d77a04facde63fd7c16d5634542423718278f9020082026007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0847b6f5a92f3464691dfe17983a1e5165e210c72767aa8021b5c9e0ffc3a8b07a0163e9f376d906b9db49e2f3f43d5975b7e0f1c9e2ce6d30a16c57512368546a4f9020082026107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cba0cd5b68414c29c71d785567e6ec7f4d2b006c691f2c7279f7c263c7f2db29a060fd91883a3903d5dbd4e9b9b113c3fbd89d99b9a59a8ab49f1d9e8709dde2a8f9020082026207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a19c0739d2e9ba0226c7674c3baf3e1164acac497fbb27491ac2c4be8fe9daa4a07d755182f1b179625aefa9df43566df168ecbb1b7cbc0ebd3a145878276946baf9020082026307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05ba26afbb599b4781d6cce34c1de60afcf8e4c8ce542355469a3ab50b83ed3aca02bc5bbe5f4913aaf83085005567afea14a7e79d887ab5577205dc6ff2747e1d5f9020082026407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05494ff8e5aefc8adc798c012b4948fcb6c24aee382cca9ef32d311201597a6ffa00b97ad7399ae46db835c122df6e6f660b333cb16318931018f48179f7265a69ef9020082026507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06a184e038374d0da312e0bb4fe03ad6b688970e551783388f8ac61bf6c81778ba0144a78902e0eac4e7eba11a1a8c8abfd92358741389ec0f9f83600d439eae653f9020082026607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b7e11cfcb24b2a1285b061b6f8ff90fb75a04a10d74f2915f58922f01baa0cc2a05642903bfa15ce6c7955c28cfbca823dd30415661647d6f34e87b63192acbebef9020082026707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a035b30b04a6432c57ac64aeaabc117bdf34c166a3aed2b6d69621728af611e711a00fb070edc532c6616eb31bd943af6bd74124d48c1690800f1173ebd676f656d3f9020082026807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a0a0f16741dd2fa8aae7708ee9b7ee9b53c6efd11c6498c232bad0210c887f1fa03e33c81d8873c3b36c4b66e987699bbbf07f25668e0a04967c6d64867b71d80bf9020082026907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a040533f3185e6a2f5482fa1bb08e8087ef6e07dc5d5804e5bee4dd25c998a332ea00c3e8378d174f4bfbf5196222d71b8cb4277e91c365a98d60f9cdb4c11fa5dfff9020082026a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0abcfe2b1afd585c429ab2287023ac5ee643f21d267a54cbebdd71164d8aa34d6a01b6bffd5fd5c17e0eb9e6160ca4dd2b8e9e082d1e6ad47d5381c24a072548ed8f9020082026b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f17add457d9d79ea9a294da4ccd6aefbdc9cd69d578473925dd652702f6c7650a0779dbe12d256836215c46db3fce8eea62917f296e4fa31711c4ad1a9a7bf64bbf9020082026c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a012d8e99628d370bfdc2d6aac0c55c5fbb50876976610f62ecc63c3abe3ddc2eca0405753bddb4bf7fc61bd7d58499a7b78c1dc52dc20699043bb5a44e7931b13a3f9020082026d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c78a37deb538ea264539d3128b7889224eb442f023196ee408a4710b9eb37426a04617a2f65e1711c88d3fc05dac225928b53772d72cc449fbce076d566e77448cf9020082026e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b9147aceb6b008e59957426b2754f9221a7a8d5065157ea445773f31026af877a048cc2c8e824a906e75bc2e35d612c06c1e1375cf96627aeb8b7611bf61c1ebbdf9020082026f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0457fa371cbc81bc41a42f33f39e0fc1b3f5fe2ab4811e8b77c103e21c52e42e7a01bb3a86519749b0e67b4b97454e9ce835f5e1330a29fb6bcf06937a1233141c0f9020082027007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0836515c53f7ade4e81c9c7e8f003c64b32d2ce65d231368494d10ba5d718c203a05bb6381a92a071962d1803827a00496336e1504206d83093f09f17be688d9d84f9020082027107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a060f4ace7d970e732790cbb07c04431d913dd28d76caac40be7527676f8bada4ca074a693e4fd1a2c1694b26908eb0256ff913315f0c9d435eb6269a693e8169d1ef9020082027207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a2f1ccd6cb4912e2b20a04ae123b2fc897c931abe63ee522b5e065a59cc1f9c9a0508ecf015dd66ca6f6dee817a80fb937271a2b84f6b9e6b2c074185a26ef1c6bf9020082027307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ac1f7e1b7afce10d7b7451baf40b34d44089a260747489c0ebfcfd5d41941d0ca03bb4adc0c8c687da1273af53207b2185a6cbe178a0f4811eac850fbfd591081bf9020082027407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d484c33c4425fe087fdb5671706528bf008fc72536c34cd1da13cec61edc3c3fa009de8b72f0a5da06d8f89e5cf26480cdb8bd56535fa09ebfd13e1acfc7302ec1f9020082027507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cd521606fc7388f2905a02d9d8f4881ede29658ca3d3b87d2ea75a2dbbe02028a0032525c1d6c9e0b7ca038dd816a9d503db9c54b573ae81499d9cf2b17f9875c2f9020082027607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dfffc0de08224fb1de7366a377b6bf6ff770eda5193904a15757f9e5d3a78ecfa0097eeb9888977f65a4a2e673e123844c6486072090ca16f33e370941885801d7f9020082027707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0df3fbc45457ff895cd0ab847f154c9459cf8bfbe48f3efa3fb18f4c8583ea217a01fbbe3a5b138b4654d6a77da453fb8f851e5feb3da9463e4edfbe9fca5403584f9020082027807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a030c90a2ea55b466cf3f4c91efa461d445190a2b55881572572773914a594555fa006f7f279fc54414d95e0479bc1cff769b67c2fb4c810d65a42b2fb427031ed94f9020082027907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a87d13a391893dac13cdba7fcb545e1dd899ddf3d9faad2abb53257ed589a1c4a0062a16ec0de8f40e72fc96859b3cb74543b27ef03804d4d80a4c57afe0228c40f9020082027a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a037915dc0583aa9d5b9f580bc75eaf877e632c8a908c31530d46679a8633354f3a00f61fc9cb41cfbbab5402d2faaac180b57fc1fcd7a3ece902d4041b5bf5c18c3f9020082027b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a038d8b2c171d8723862a05de486569e24d6365a4c1cfe7ad2dd9e7b9fdc447d56a057efa2dceb2256ea22f963361a7fc43a381d0552e41ab51ff7e3a405341275f9f9020082027c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e2b445b107c686d09cdbcd01bb16b8d9b1913a6c7ee33a086b8c0f9fe73b4bbfa077d337a88eee95386f2b1f8b087a8f320ceb2fc6a6789ad30cb183833e9a7d5af9020082027d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c3942f4ef4e801f4f95c3b816986836d71e98e71e281b66eeb483404ecc56e6da03b05bf49f633b2ca3f856877e33e31cdcc27d095b65b22ca4663579e9247ea06f9020082027e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07c2d611a0abfb9518bb198d9db7ef9be2d7d9cf98be52ca1347802c0d2e996aea037826c7c37d4f5087263bcc6a945c6b118b1926703c4899c8e528e164f8e7cfff9020082027f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0742683f5317524169368be5e995f35311448627ae80398e174c60c117230ae3ca06ecb6943549659baf22d08dfa5ee07bc8ef2719522c57ef78fc1ced22f05d2cbf9020082028007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09c0a4c01a8219409eb9e494f9aa5481f13326880a88b97ef8983c3bc239865e5a0039e59b7f7b23eb59191d008140fb07a7ae487b45f7754592afb08b7f836da95f9020082028107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a46a15fd6aaf09081c1b0a42c6dee9f9734d54e87054adb1e7daf68903e2d2b7a03318671bbb82fc0f674e831222e8af52687cbb7d0820860d6e3b6e2b82d0c6c4f9020082028207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0751ae0d91d299e6690a33eb07391c65371267af93c5c42729c0e0f4b490773baa02945e471a7723539ab8aa02f9964c7062deb75626aed56fd8d1d859bf0c5e0bdf9020082028307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0799f2b5b532d3ed7e4e80afbd7ba922cc547cb49007cf9d5a607d91636e8963ba04f389c07b1815ac2e9375820ce30e778dab4cec4cca5a21d4ee1ecd77d9b34a5f9020082028407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cab698ba7a009245ffc6b500fde17b9695a2759b2e935f68cc8481d5cd2801c3a037da1c448e0829dfc8339a5dff27b53be32054249e9e143db23dc4b2994f0d56f9020082028507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f2c684f632df07d60d563651713b50fe1284b2cadb5955999f27a904e1e44c76a03b9d303ab4142376dc8761c5a4b9b7f67c1986ee4337f10386a5167c06ee011ef9020082028607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f5fe7461870ee3c2133d10763a23d1cc55744d9e52ecf6962134beed7328719ea0361a52a788b5ad473be6516bb67ab0df86c8556e4d007802c279557b347bdf90f9020082028707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07915719c73872884374922c286efd6109f4210f9b860c91c440f9e0354c9accea07d5d33726b52b237d83d19f8447cbd298fe7472c795f0309417bd893c4596e51f9020082028807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fb9e1bd91188eb52f898bc80759b1ad67b9165839e387d50da8754a9970883b3a0542cfda7575ed79d0bb5c04b32218a334aeb32584096292c4242c5cd7485ddaef9020082028907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0088264b302493e5ad50f0a8407a5842a23647b7c0239bf5b8ec4b1666475e02da01029064d2c67437caa6dce3540863ed9e3c0beb75f6099b00e9031a99a624d53f9020082028a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06de7761fb19c7df8975f3befc3677b93fff2d16669aa0e92d023c7aa2d908ca1a0116f5ad2c4218731b5f60db1f1e457ff781765dadab1e620064444fff5963dd1f9020082028b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a029584ec499c83f7c380f4d42ab3c854fd882cb3e3dae5fee2eea005fea348f8da01e88e6e6c6b3335ead7a579f7c6074a490a304b6cde43bffc908c6ab43534d6bf9020082028c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08420061a8480b74895dd0649ff15214c6aafd6cf3f07a950ea0e05bd6085ce01a00aa8f33fe8bb64908f927e92acc8d386f4332aba9c57606895d4977c219e60b8f9020082028d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f537d169d62619a37ab04525b5f5e96c063aa71b3b24934ba29ffad41e23012ca01cee0da99e0a6dc39a862d7e331446367de8c36e4c43098d66b230b818f0f8ddf9020082028e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0453d3fff3972d366b6cd94bd14fdca3e233f8a8156d26474dcd9b22e256b1dd5a03fc2cce14d97331773f963e81b0f74a19ff7dbec055373e93e0c528c8eda1f98f9020082028f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04ddf6d1d76f2ac1841f944ef0a88f259067b6c67348c1b7743b419037f2bb836a0558c30f5a959d17afc7187b43c61b45f2e826b5f72b36e06bc3db91da817a2e2f9020082029007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0218495bec550a2b0ce615651039e7eab4200ae63b2dbd02f308e688ead163488a067470292730a807cb2b3b7b82b5288e135f2fdc6539e7738478aa8ff73cca0d6f9020082029107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0be93b7eda235e85166745f0d0c536b0176413832284ae33481baf713be8e6ea6a06d93bf20408395f8b2ffe06b13062780e1c4a31deed9cd4c915b4c3011f1f0cbf9020082029207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7c8b865d5ac8cd738c5b530453a2aa3167c9f99f430eef8fc261a91b5dd0460a0529e6458d9cd71849b7afc0e1c197365727d1f7dbaec47ec3a2dae61edfbe024f9020082029307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09a990c5edf8fac8f4b70a836f453b80d9bf0a4d9796c3d51860180923e050261a03ae0a0df319a5863dc86ac1d32e2d3b20ca2d2c35ca5750cd220213192ef82eaf9020082029407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cff5d5c6d740ed1162870a81672af8afd70815bf58ad5a4d79aa6b9a709436d1a053e2231f5f86252a6b0e8a86246ae5775150c656919b12000eefa43cc6c8e101f9020082029507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06925eacd050543612e037a4869643d6264824e40c4b8d2b6fc55d9941996ccaba052cf9c3675991cfdf4f1fcfba17ddcf4c123a2af92507d7f78bf4b1234c77948f9020082029607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a09b09ff8509083483b8fce71a2a1593462140f8812bb7a0949f3563a850b249a0288341aecb90d8699a5deb1753d304fa829b40455d9aa461a2204011a54d7805f9020082029707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d04fb9af6eaa7c3d9cd96e4032298d4721cecba9e1c9aa1beec5cae9a839256ca04ce9ab38debc5476e9682f17f1d5c28c022b6c3b69866dae461479fb51e12d4df9020082029807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08e5571ed4341e7c43bc2dd61bf72b4e4906126d40b913074bea9f70442c4d73da05e40210db2d8e319e43f3d5b86467e7b3c2282bedc7a5b3d2040c8687c043998f9020082029907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08f7ae6739ce9d7df2c873203a8eb2f4806ce31802ba214c6a846c1f2a4f3d000a05ecff5832e6da2f31576f1812dcfd311bc4ad536cf736f90c519be6373ba7641f9020082029a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00bdcba32761b0d3df8b69327dfadc8df0740bd85664732b1128cc8dd4ed6e609a07c7005ec6c84af35dcddd417d38c468a8fc6634224dbc2b0dbb450a561537e65f9020082029b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a018abf6de8f7e64e73841e87612ac4851a20eb5be30f8f420a0a8935eade82a4ca0544e60b1089526b95e43f645aaefa3358331c220fbfa741f62468032ce8e9a3bf9020082029c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b470233fb1b05fd736d12675bd826fd689e55eaee1893095b34d75e53e969d77a02cd24e1d5106b9a07466f378611b86af751ce04515e2bb90a3752296460af70af9020082029d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d2def137b20679ed06970c0d26df97556912aae847608eb852e7423bb83a6f54a0599196c792120e227bba614b10557cb7a5e32535c18156e40a5a38ee54f57c1df9020082029e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0583768dce3933d0d1ddf8492f8ed7ec95b2f7d4970d58f9c934402d382b50db8a074a265b45d5f8d33b2709cebb82bfacea37a04746e60fb3751cd29e7057d2adaf9020082029f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a049641c3c4e430485ffc658f766acddd7646d8d3fb88d2e24dfa182217b77d53da045a0882e66bd69ede398566a8e379b372d9e2afeafcc9bc935c5365df6b5d650f902008202a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f9e19a6a6f5a8c48180fd2d781888ecba0c3bb2f49d2fc24c6bfdf917264fcb6a03881d1ca7250a48c0662d8dde8ec61beb2121b519a43cfad9683b5375a9d9d55f901ff8202a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a057da74c2fe6b1a9406b278ef16d3fd2048cafc7e3922ade27f31db58a9d1301f9f1d7d64f0aaa3c300e7cdf018098427866edbdd374820e4c0b1ca91efaf8aa4f902008202a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a1218f5dd9a298e07b371988801a96c42b5d30b7a1cb040c6124113f75ed7acfa049488125da78d69f38283295e7c23eda5c8f9bd68736ac9b1cbe5bf54a47071bf902008202a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a070f676ecc4e80eb7201615183aad4a891f417bf727d09042f6b33e47fc56560aa02434f6fa6c57bfcf2709893a1cb7632c7c653f6aed3da68053b195a58c676260f902008202a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04c0d30edf61aa1d8cf22aacd7d187ee436bfd21f86b2a4db0b039fa2d83b1923a0134c29f21a3e7b04631591f3da7d7331ae4213891232e5b060e64623dac65a06f902008202a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7d53859afa64b85772a0158bc4db08d417881f4320d14ba7136b85e77ed75d7a0069a954c0dd53d86be579f7a3f28ad6ef6f1cb42297db50cb95085878bb01dfef902008202a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f93af5b1e4eeee4d648573550eb135cfafc7fc099c9cc1f9e5d6c090ca0b0d35a073bd70b8bf2a951f0c4c1a4018e955231950de89a6289f5b160add334cc95cd1f902008202a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0989e480d04c0791c82dde5b5ce17a5df965a10b289a1133edb02730012390e6ba0466dbe50d54d1c7baef6a1fa276b96f2740a045ce2d9b08c2ed35024e1b8e55bf902008202a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02a3fe0b4dce5b1a8f86e01742151ab5787e717be7c0bb5ccdbd79f3dcb59ced8a02bc8f36242797a1e29152087a13f306870f60cd24fdb8a57ce93529e9721ad8ef902008202a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e4c297e4ba3fbc04c86c137ead1814d11f37e72cd08e124526c9b46ecc5d4c3ea0193f6e05663643aecf7a79b4501dc672ee5ac0087d223565bb028985e152b5fff902008202aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06c5eeac1984eaa94dc49c22051d9e5c494063feb10f00dee4447f5fa932199d0a0555bda3cfb7316b57e0846951ce083402cd25703132914da5c4b4f6e62b6f570f902008202ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00236828cfdc0eb4da0e3deb46c213cf4d4522acd217f5e7095f00839aec3fa0fa01f83a8ab17b62fc08f1bfefb30fc28bea9611f2eb4ecd9bb76f56329a5052684f902008202ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a046994e76b10603a4afae08b633fffb9617800fb4166b43580507b87c32468581a0752f335330cf9405ef5ba4db1fc44563c5ad8508c5ec4929d7e313093036e593f902008202ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0729ea9681de70ac8b94d168acdefe8847e6cf8c883ec9a39858937b630894449a07eae229a21cc470a57765965262a0a0c19605f221aab4c1c85ead66e823c5234f902008202ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072470007204531e7ff24b97d1cf94bea41b21af1eeb3855d61bc8e71a9955de4a060650f5a7796c68abea471bbf85163b4f792a89543fd8273ba92b7cd070eaff6f902008202af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0646b2cdeaf857ae9ccc7a922521ff5b4f4eed403d62f29a23de1c2bef486e511a011bce5c3815cd506b10bfd4b17f11c92204763dfab554ecc0b19b396c0a47f69f902008202b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09a009e8f3dbdf759867164a83e3f2071e9e7fb023675af2777f9f4a2b6b536dda07263b0ea53dad073f3204f8e8ebc4895f52c26dd8790c5036d6ff39eea1320c0f902008202b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a24e18c2cc4f3b57df8d5e1655bb1cd7d53dec4fd15ac558f14b23f548aa66f0a05203ae0f68dec98ce5b12814b2c7d7d96dfad5e02ebe8ef30c25cc9da33cc63df902008202b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0642ec2a76972272ae21a4a83fc81b9153f9e08da825221a7ca034cc69f196990a055630142fd3f242e281e937ce12d797922a91bed23c876990238668d8db14715f902008202b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0733eef98b99bdf184f4124030a2d1b48b296bfb493d204853fba90bdd44d51c6a0057abbb49449be076c076c5b05324e0dfa45953818525c0969888e379c5ef2def902008202b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a015eed1f055753b548eab60efc569ba3db5d63254f2cd23a37c25596d96a62f48a0546c8ce6d0051c94a52c3e115b9dfc6890eaa205d042c8b4a738c1159fd85f8bf902008202b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ca58e97d6c42233451d58dc6d32c45ede6fdff333a33e0dd3e64795d5d614d9da06a077ea9b4f957c65da140d30c177234ee8c7a5b88288ca7395ad8d4b7a6afbbf902008202b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00550201cdddc79912f5be32ca9e477a0a213d08732e13f6bcec6f6edd9e4519ba04264833beb92b994361d6d5f758ee869513cb0b10f44ff2f908c0debb7892de8f902008202b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e79b61d9ce001cfd1c46ea3f009b43f43950e81fc639f2a73cb8e36946f43150a04d7098b903f081d130073eeb4498fe95f9382f8cd652f1422278682946d68642f902008202b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05ec22c52419e01fe8c7ef8ac6f3f461a2cf5dff4bda9c07e5a8128c8f9f49f02a06ec907ce14620886d49df8490779ba7b753204c68f1d334bdf39a618ccea045df902008202b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08b0a2d6bb604bb19a98dbb4ca016d2bad1f861b7ab9343bfef7da1108847c8d7a011f4bbf6ef971883691ffa39bdccc97557fd10352e7a54fe932e18b7e630969af902008202ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c2416ff970aada1ed3e85f1dbfa5804006ba3834857b47e99306c4863195c544a05b494456007f73940be947d85b98eedfbb64c670a1742e3bb73f40d93dccb251f902008202bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d47ebd1fbb71c224a2cdaa269b4df4a219ace58742c2660739e1b7d6fa06488aa0335834d7868efe5d911e651a35ff3f926eb3861ab6b8c94f07c1f47e6d41d815f902008202bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09cec329097de55d639a171c034058d73c4522a2deae04d43cf815040614030eca0699c54193ed142f072604237a2aa78fc7c91ce88de63f963e37660bde42ff30bf902008202bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072e0b412e2466734213fcfd28d6add92e962632ff9c8fba07c66065d74804910a06d1e8ae8dd40e148ad4f2b152221aa1c7d4b25ef2a4e79e58aec49151f9c1fedf902008202be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07932162c0e9627e7f9fd24b25ba18810749bc4e704b18a0ec556d4a900fb122da0228774ef654c281eb07288a503601ecfd5a552126709b0363b61831320763e57f902008202bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0608fe845144b8d2dbfc48c36681a5480d3676aac8e9afdccbc86de191ddc52eea06eed04fe73317107f74718f088bf81164aa85721c380eb86eef865e240505260f902008202c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dea15456db71d8ed630d047028ed438b83bf2ff84c4aabfbd65867c1547cd1d1a063bebe4a3ecd6f244b3a082c17a6212cb2146b6cd1a74f19d73b28d43b1fabf2f902008202c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a057d5cb40262e75a3611ed471d62013ee308a18dac2ae6cb753ad4ca140be7449a034d015491e4cdca74e5f78a9c7d500f9b9938292933d8d2bcc4cb23d70369ccaf902008202c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0517df2ee20ec386a67a5d5f593199db219fecd19d38d697835cb0ebffdd8e57da07bbf4f14d8b6a3e5aa44afc1ce01408b2e577507494cba40c45790ae9fd53f24f902008202c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b864001b2565f232a85f6a73af08e2eeb28bc8f0715acce2f459141c974768eda03b0d8d1b9f97d78cf19632c69ceeefc794937d0d9fbb553e5333f271657708f9f902008202c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05f2fcf354c7dea49f2f5df2be271f361b31750c0cf243d387511580d0f61ad7da008556976fe5edaf31f488a3a65db75bfa0edef616b8259e9aa3b479761a0d2bff902008202c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b55ac55e7aa7f5d40a456d42293405023375d9030d63b601f819d2d24e941064a050708806d4d971ab8dad647fc821bdd9366c88f079639fd07302323956431472f902008202c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a031711a7f479ae5b5f83b8aedfab649360c51a08884b43e1d514e988dae1bff94a03dce9dbbabd0492614e6a8cbe65536eb30cc08fe63239d8e18fccc41570c2d75f902008202c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06a5d775e776c02851abed5ca582e42446697a7a4fefbc6666fefef055419f8f4a05f34ed9d0dee0538bc81c20e07143e1e6ac142f195f961f4df51868230ed7b13f902008202c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09705fc20ca255f9b037ca495c4729e98bab994871844a28b9a2d0066cd7b7995a05aed8e62435a8b03a0e95188f98ab84b56bccf6c8a9664cd260a3c520859ac33f902008202c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03a9dd306cf8d00c0c047ad039e92c791425b5ef9f5b38f7cb2649eb2142431e9a06486e9970d10cb9bb5ef5584570df9217ab8619bd162d177e366c702fa8bb2b1f902008202ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a3d4c9bdbd6deb5589a38a839536c30624c2fdae224acd5697a48de76131c8a8a07ea5e54c382413322ff8160596b1048e3e55143a6ee90540526965760e506564f902008202cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01b3861bc0d0a8ad4e3ddefa0c5a71d8e27d8acf2402060d36c54890d69faffd5a06f6c0779431d575e16755113c5923942e010eb67a3598b44e888eb03d74d92a0f902008202cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fa2f22c66f136b174d1d1251c0d79f85b862651cdf99cf9e975f11faf25946fba0614038381daaf89ef53740b731a3435a3e3ed202d1c43082c90bc02ed49086edf902008202cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a056991ff282741591cf4a491cb2e11185ae27911aeed45b00906085d3fe59b97ba049f3c7f039aac5b105a143985055002df66977d95fccaa0696b3ab00cf5c8b04f902008202ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b54475d98c5ddade5f49fd2cc82ec8643838456463d25437433b9dc51a464152a05cf7a5b64a597459a543f337c2fd93bf699d993085404a22d9619fe8bb2de400f902008202cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08107287a10744686aa374a120749d098dfcd1c3cba97bca20a2e6225364c14e9a029eac5e64e7083fc1b106a6873cb4e4d3d3d6a5183f6491614fc839ee2f721a9f902008202d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b2520c1d84ed055e621a2255c1012abb6da4c609d8ced742ac0b7c9902c86ae7a030d29e717788d0549366fe6853ab56d427273a24a546fe12cc2173508e8b096df902008202d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d9359f63f7c4d9770bc9ecfc709c45b1406996a1fafbe04a30d2ea09d8685943a06fd81ce89dc28d9b17ab8b564d4310fb380a758a423cc93cae0226cec8ee4a38f902008202d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf5657c6d0af7c6673ce7127cf7e2ae47e82e8ebfc30eff0b63ef0e832aa1e23a04f17c293a4f7bda9c86fd8959487bb0ce5abb930c8f5518c057ef538f54d7ac1f902008202d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a047c121ada1836b60aa96b3ddbeeb708869f685103f2bf1ac8645420384c12159a02c70e9d75be5679ec56f01d3602d5c82ed0d31b302d1f3c86ecafc2777c47576f902008202d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01c9282981101892d7c8209ec753b65423ad1c102446ebef460eb58a8a9f3d5c4a069d8dd49097ba781cf2d2c4f533ad6ec32594a44a0d8ebb614561c01771183f1f902008202d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bd5436cbd0e1ea508132dbe017f098cca9703856e67abd5fff6f30468bfcb415a0772c41508857c28dc607c8ab9e76165c20d2e79dc2aebb2de6975adc08aeeaccf902008202d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0170dd67bbf9a837c80a1a1883d14e965f0a60de349fae697e06a2fd0511efa7aa05dbc2a93d55d80b29644fe28eb75498c6a29b255bd99653c9c9af0848cc612a1f902008202d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a058610947565a135d3a1bc4cacc5982e750092f61662d41e149200329f47494daa00ab2fce95a911ec47b2c1124e30a7e6c10ea7e193161b8bbc40ace9558f444e1f902008202d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e4448ae163fe1b54ed7fe4934c949dbff2ed2a933b5956398f02a6a6df0006faa06168047cf75b9dab21c4b51d6aae1eaf56394bc5ffdcd3759da9953d6f211c07f902008202d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02043187d388677679d03d51e87202a7a32feb0f4150346aca63fe89e1862400ba05abddc12ff086490dc68adc83903d90af3561e42219b0f40f4a2f390afe40648f902008202da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a066e3b2fe5f22ad2a966a2dd5e282c7fe73887d7d0b1944e0319ce4a35dbdd748a071216497f9b64a64361b35aa0e7afdab4f7b10417c6e154f7cbfd0d56564de89f902008202db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f8c8bb54c4c3c560a5841bea3e48439a6f81f271a05cb74d3dcfcbe74a5dec3da02d6f47702da496832f1afc71b927ae8395a4f1a4974d8072c51be5ce806e672ef902008202dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09f466e4271c5ec0ca09087c8d75f74048bdc8db721882084007f097ca6e19604a0462822480e8c07c4c2b1e9dc84296f451c6e88d4e199baba0e45dac20b93b2b5f902008202dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a058cfede45a0f7bb8b300adfa5b2572eca6e42d16a96456bec252f5c4aa2a8a33a018705e965bf65c53def9a32690756508ebf63c3b33a62ca4727ad50f982ae60ef902008202de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072a4eea6b141fed167ce321536d1b02b38aaefbf94e54cf0a847815141fa51b7a01db75b60eab78bd185dcfcaad4e50e6fa12931b33d7fb2599f4d3dbd09b06365f902008202df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03f7091223bc6df7593aadfc42dbe925f8713e3ecee141d7579bef9e574f31291a0788d8db7a6bc76fdbb7d1af1e09865744690bc61d4d44d2591de5efd39665e72f902008202e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a024c4434f806f3f01522d6b50b30ff9192d55ccd1dab5745fe6e04cff90d34941a04b5459c37f757e2dcd0b5dc3bbd24bb79ed0aabe2e0195289a540acf7ad99b51f902008202e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a72381ac9f7d3909342cab17ab65cc588b626c1a6227c49e03d5e827a336d3d9a03e7f8293cab24e72531a0f34d24eb459ba673835e031eaa5869cab1592451aa4f902008202e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aa32aa404134a8efaff1806149321273a32e515aeed98f05d65c0ac2b4b7beb5a003d3f0949801d3d5bac24d2175d4c23f4ef19d5000bfb7b754f8b21ae92a86c8f902008202e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a073b6e01d7380318ab923bc955b2cda0665707d7def3d0302a51d835216ae15a7a03b9e16d541c5e786458c92f023f7df911c593ab27308f6026985d213ae3dbbd7f902008202e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a91cbc23b1e72fbaa5467519e471353c8570f184a2f36880ba5c62ccbf226fa0a0064fe7928f96e39f7cd2ea30f33204a34b99ff18dea18ba96e5317e27357faa2f902008202e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a054cb6fa5602e38526e26f985b55c687996eb392e132d97001ca9622266442a45a0703f451f059a5b1d18980207c45b410616c1ab351448fbd8c74ce2e6b43a1875f902008202e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a028a1a52168a36ae525998bccd81ad7314302cacaaafa8fcb8f89cb7d065003b0a00c87971d2417910b2ee5c9b42240e597d018e8dad30a57e71a93d40ed6014e0ff902008202e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0407cec6a625f8639f8d0e4e21d8d35b99961e7a9c6ef62f19c78eba62de4cbc3a040a0b8a6aead5e9b27bc917938ec7b03b266853188caecc0e52422012c880205f902008202e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c1306b63ed50376b52e1f324e1bd50fb053ad98f01deaddcabaaf91d0322ae37a0411070dd5c25a1ff57dffd4f48df49bb309631f9e79fb3d298da8360449b8d7bf902008202e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0604fc6dabc1829749cbcadca906e3442537072c2a783059238602ee74af055fca001f0bf64252fdf10e1be9059f289690f4c78b93b3359ca0d739feb6a60baabf2f902008202ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a094fa6a7611cdef494d66c14cc5052791dfa98b589a095ad6226590a7b48f1c78a0165651e6a7240441714f752b68f2bd6921037fb11ced50acaa20b1e75edd3c3ef902008202eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a090bb5fc999a58277ecb197afc850c1c1336d2df35d2f3acdc5f57e6f33270bfca0139d86a2371c4a13982885269a9388475aa37ca3e6ede52df7ca1fd88d04b1b2f902008202ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01f8c7b698dc8ff8b1a52cd6463d1053049470ad8337fdb18f904da6ffe7e89b9a02fe80474c9275336a796a3e8fe74d3c1ab44ed9f9473f5eb9f62a6b80775b6c2f902008202ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eac981c2a45a83348ce0afb9009913d4ba25526f61729df967cf32b8e0b5869fa043eafef87c8214918cd1caea2e7cbd06bb71ea0917bd7680c91e4428f208b3ebf902008202ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d471233eede9562ee441736ea0f10cb706ab13395c2bc7f6880a95f35534b6e6a002d03f5908a9962046fbf1e0a19f2170d26dc42634ef4d58bde2efd5bf92a54bf902008202ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0286fe27019927f61bd6370155a479b2db7c711039cb664d9ded116bc61b8a156a00883b43c8e511e5988a1af8d216c470214a0d327fc94eea473ee5a0289a2bd67f902008202f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06e2b17a952ad55793e24f1863006a99ac136f62ecc01679234130a1eacb5279fa06f4c7f8bb8276a45945dc3a0d5e2c4fab0ebd49f661371482df2de6d13b31e06f902008202f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a097f52c3911205acac8350a3b706bfe51b4f623bc3800f39d2eeaef856d515ea1a02fe802d7edef14b8c0238d377ef284c14e2db146c039db456306fb5b6c2a5e43f902008202f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0857f128b9f3c621b9d3dcdf5e7813c73d5be5fea310b8619b51dd7d035a79be7a0726413bd22c029cd20f228e5ebc4cdeffe7f2fe217457c2dd3d5267294ff92bef902008202f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0349a2a758cd65e0d62cdf992be14f5f9b65344a49170c8253d426039b86dbc7ca051c944a6f8b774638121e88d4197164c8088608dcda013c505c08dbbc61a6963f902008202f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06f74a51def9d7c9c2226621c738f6ebb5be4a6aa78e1a5ab8059c190c791c9fca04b68f6538cd4064c97bc95307b95899b4e06e371601a24ce04e57d06b1e2d335f902008202f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a6125344e9d932a08ca8a68354e60b0c0dc5363a60f97646676bc9f392bcf1b4a007e5b7f0843f48e1d197d1832d98474bacc5c4a312bd4617f4d5eda1b6375b56f902008202f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a094c333b6b01f7c9ec7ec6c102a798f06da731aad6bf058f66eea31887275ee3ba03a066c6f9ceb7de4c2ab386bc9eefe1504ec137f8a8603a10cee4886d3eb637df902008202f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7e2d99c2a0c4a797ec33f5dfd0dfde281357b29c9b3f54774b53f840e692f2fa05046cb61cd67036646edcd69323bfa9d5c92f0269722166a9a833da9ed0e712bf902008202f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ae26de7a08cf0381a6bc028b0c8ad2023856b752b7f42589a0c2f53998bdd053a039facd5f949e0ed6621e02654dfcabf307a6877be7be03496a51b9b14a06c8dff902008202f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02ebfda7d1ce035ae11f5cd07fa49fe2338aad18f895a1c7d278fb6f6a6f955dea0544ad3be1b8f0ad76ba407e9df3fb6c6afdeec2b16b2d0b270f6ca50e413b556f902008202fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a028df357a30cba17e53744482af6759ecf0b3dbcdf92b2abbcfeb5a1de0aadc2ba00264a9b8c65cdfcce964758d81d6c649e45e180f56c2bb489ef50cdb46d69ef3f902008202fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0658b442e120b82e2fc44d3d976124cf212097dff555f8a973d2888d52bb95af0a073a77ad0cc6004f61c2f249032b404dd030524b95b4cb5d1dc33319ca8e73c2ff902008202fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b678b9bb8652460cd8c119e9fe35f26ba8616138aa9fa43c48c4f92806283314a00d4ff0e6bf029c24433c9355598452e37e82c5dc6ab47cf32f7ec94a8703c879f902008202fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e0da762cc555b2b5d541d37fcec932853c7d12f2cab6261a2b4a36ec4a1bfe94a05629e4e7177dcef01902db2ff44673b7057cef5868497e2e278c607e4b243443f902008202fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f9e758c2cccb355841679d81b79ca7e081e0ccdb0d7a3e0a7bc7291a7dc2578fa011a0c03373ae9a36cfe3157589942dce2f1ae3077ff108888733d0108080f6c6f902008202ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0151f3b459d710ad5e3faf76d6659c55da50502ed398a29aea2e467c596d6fd3ca0236c317cffd2abb956c88d894aed4f2bbedca924fcffb69ea56d654b95cc6799f9020082030007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0687fbecf498d14621849ad7fc244da4fdd4f6418978bccc19eefdd73be3678f6a05639c8a41d7218db8de6dcd76e125564f181e8ce6377b4e89604e3db5c07aa17f9020082030107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06f615d8d5b99c330f22ce54550b2f8e556a3fb535b62ae11eeae8eb5d419d421a01a771bc53e0e08b8ee839b8a25b20e9ab26dd22a5529d1d419bd7faf6554b1acf9020082030207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d79e774c6c6fab43a4fdd27b3096d6230d6f2311b47b886351fbcd69e5c179b5a0667d21a34f8102f368e042fadaa68d3a17ca8baa208bbeb24f9fe7b494d927aaf9020082030307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0170285312e6d6f694a7414d0055b6368cb4f4721d9dccefe415a036794313e72a061748fa60ca57ad1d0d956b92194a65c18fc511a304b956f9dea5c49d7b2eac0f9020082030407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a8cb1f1602f321493e0f1d90ab3a939e32a5cc765739609746c64ea660864394a05be1490901216e5f858cbc64beae2994161a251d04698b308dd20c81c82eddb5f9020082030507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09050f7801510f638ece4c37934069b93c50b234912bc2c0335b2b90895d86a7ca0624407755c61268c24695b0bea99b597c2b55d6c7079d6b9d04ad2208fe3451bf9020082030607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c4fc56c03a0f7e76657d2c18122adeaa6b8f8aa5db5997555207f25f22856c49a0235cec6b5bef61c3bd22c59ff9bf2dd7b2acdf556e9e2f06d603d78a97164073f9020082030707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ff106054cecd39a27c3e21b7e4e604db70b38ae9e9f63495891cb236a20a2bca009771734e3f96c78f5c61bd8940724698132061fc9760027355322212d033f4cf9020082030807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bf8dc2864b010a3f1ab0bff50b187cf1b037373bbb9f1ccc8da35c52f194440aa00d38b632b5af43ef66a55be7e5a6ef94c0e9320918aafe5afd26281e31bbe558f9020082030907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0da0cfed77fe19b281e0a511acca9438a9808171a03f7c64c682120b7e5353b76a04e8410e1ce057d06c8541057f3f247cfb3406dddbaad3184e2cd96204cf94efff9020082030a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00bdf9bc0fd26943d0c30bddb74a93068aa22064e1fb8dc1fe2e016ccd11c827ea041cbcec15545f5a396db18370b5e34f637a630a26f4a0f5d2fd9998c77662291f9020082030b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05be3c5856f1d3f15b2e08da42642d5c5caf944acc4cdfcb7781564c7877ca1a5a0545ef0d3e9b6e6ee377166bc97e0988caa951562d02adcc3a14fd78cca081e62f9020082030c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05ea1db7afb770629e59aa5b22f365086afc35531a64a003c4bf769fd8dd9ae17a050019352552a29fe3d42631248ced33b35d8035d6150b89db6933f4e0733c6a9f9020082030d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ce24be2a63ad09d35ebbf7a58587ef0fdb987db806b84064bbc81d1a18353fc9a007a1d1b27f7fc9f08cb6332e3c5c9e1349a925248a8980b40f5853377d18ab2ff9020082030e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a013cfb39c990a21d68a582382f52786754e79e3b936ec2bb9a26d6b59e5ac0763a01fc3ffffb73d2df8012390b9d44599e74edb877895449b57e3aab1f037182f86f9020082030f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0646afdd432f2652b6c57f4307a7b96707c2ed9820991e992e2554fb6169576f3a00addc33ff5cc20b37b901f5995bd1b964ca1a6ef497701488a2491a66c425385f9020082031007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0986d5152e49b0198678d17b8a474de252f1ffa7438e02b144df869fe7154f656a00d1f121a1a9eab04b95a4558a92a317de4c31616e69fd48b771e504c7fffa240f9020082031107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bce2461e6fb8b3b22bb2a0117947a5cee6bcf33dbd681fd23895facce40d2f1a06606b1b2f87532cfd20d0f0d1419f9e69db53790156b804c1aacf1d3b262be42f9020082031207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a3a40325e0e7b97242a5eab0b7605e48dd78cc7f7878fcc109b8433ab8c08baca0603e32c62c8a1ea1b348cb973165aee32728037d53952a659526fe2b3f1ea4c0f9020082031307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07d1ac7b0fe569b9a99be539531ea606e2c3de394967701dfc5541cc0c734e91ba044f52c3bde8ca7580c4418f42e52312d0e24d46d1dc697a9c57ce653e2432c61f9020082031407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cf2605608bf91b7023cd5d7eeeaded83b8e635be0b46c8f7b28802d998588ed8a023e73ecb962e773b615141aeb20a75ee08f42cc699ded2b599d22e339de1655bf9020082031507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0caf4d1613de80d78a596bdce7d7eec15535cf7772da56f11827677d2fa3c4cc6a06635d51d57cc79f5b934a65d779673c6e11881d28ca15708fb24160e05b43562f9020082031607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0221c4a6b3a6462a21c486c8d83f7d637e2dc66da50a60bdac4a20dbea7459cb7a05a79a075bb676de2ba6bb47a6c7bee83c5ec17bb14c56e9bd073beb9a4b1cc11f9020082031707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f67058684f0c0432fd351c5ef039218fcd581a3c86ffe473837260d72141b43aa0103cc1959f307b392f6e2b9d97eb0d7d7b05b3015033b84c177c0f75022379eef9020082031807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a064e70c60991aa014a3708259fe9951088094da5e24cf9bf3c7fd80fdadaebc22a07bb9363ac3981bc2c83d78746684ec6d3ea6027916ced83f71c85284810f4d0df9020082031907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b39f50ffd99fb0303e4a3980156772cb8a7ea303c4d3a23ab7725aae78fdaabba07cea7d95a054c8f0950221e675e107f35b0a964a8a64f48a195c67ce33ae763df9020082031a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c8ecfc46ad46ebf2dbe3a97943a7114ecf33e79f3508689d0d60afcf3fa7b119a0347ac6fdf7704417c0389b61769060fea1fb17e44ce780f5b38bdb9daf21fcf2f9020082031b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06da1a3820619fe9249972e04802e0bd229c1b2569e9e1d33e5865558889225c2a02a580afc610e701a4a4fee01f189b5fc3f010a375ce1c62725a722d43f87d564f9020082031c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ab96ab4ebeb224bb73897c7a864080d7c566103565985e50756ab3d87ee8a5cda0175647d55c335386c79823deb19058b07dfae96654d1010abb680edace55ea38f9020082031d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a088c44e2ae8429f023c81ddc669e6ab3b845869e54190be883c46b830e911f691a037a786dd5edf3e59c987366c362ec716c7da99311f27da13b42472c2bc785a1bf9020082031e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05b5088c2f7ce960f94efb613c8a936d1833ba64b4a6f22300fe9889d456329bca06709e0cd4e3707ddd36ede58caae9c89b4127b854a6d28096b679f328f856edef9020082031f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00caf7c04de2a7da17a4497f896749d89e7ec88d77c4a9432f3c561a551a6cd8ca00646adee790fe92a067054201c5786a71aab3e0c4102c253893d7929e40504a5f9020082032007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0953acdb065d80d08eb7997e3af1199439f10f67f9305eba468d58d41c1e668aaa05a3d9599fde000f1420f3c9669046a25a637898351b10f1afa7bbe28feb62a75f9020082032107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a094e1186ce6fb51e233d26c0a67585e4800461d6e942dd5c072eb66ce79372bc3a01c149f04a3431d9c8428913c2e35714a9526037873ee9293ec3293b9e682df6ff9020082032207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06953e5066ff54dc085e332b406a67d0b6443b39609c945b48e63c34cd07213aca02859ff2425178a5c33b95b6eb4564c2cd16cc7fdda7da2d81456b5c9ffcf78d6f9020082032307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03f6f52e08ad9ba1493fd7a9e75f86bfae1cfa8d0f4f862495ed5a6bf80b74908a06ce5be7c9a46a6993f521a35784dafecaad49004cb7c3285c2085d873766ed50f9020082032407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d195c5a95af11790e20fc6ea4b0be28c4088ca02fd016971e1980f2186ae7b6ea02455d48442ff7f3e70d91277c152f37bc786ddbb423702215a945c66f7af039bf9020082032507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00646dfa262f8419a75db767526d28c97de4b04140e59939eed98efde7a41e258a05a0e87e4d93369fe24a138df4986f27917793ffd6659188bf16f7f5f7b7a51f5f9020082032607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06b5b18123a1f997fe4a87be63de67aa4ae9f01fbbe7887443b057846d07546a8a058b1ad60a1460985480ed6534107a93e21c87176946e9d19bafea5f827e31fa3f9020082032707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aa055e14c3fad2e1f7f53e937a24f1233c0045696b0e23aea3c96f77038d04b1a048e85bfba54f9ded8089f61e76651de8db38c7287c50896c861f900e5fd20cfbf9020082032807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ab389cf696315b6b38968ba323717dcc875e571dfba9cf1b67045270fa947139a049f4f7e140f61bd1bc21c806b0ead3cee04e3d4b8a26ff2bc525e9af9d247eccf9020082032907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0225b893623f41daf7782732a776587f05eaacdc02fd60c03e2ef10f010cd040aa01c0054f13c28093b04482ef2519bb9de33a328d56c9c6b09f2b206482e0e2cf0f9020082032a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a083d9676f472e460d0c600d803a1019835f77995cb3951e64ca5881390c84d2bea06e49ba04d20b236609612f40f07d4e77590dbe45929d492175a68570c88bd5a1f9020082032b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0be7be391daa08af854357f9d55556751d283b3d6504433d235fda0eb2f78990ba0115a5395a8d452e73ed8ab98368501c1387c9a1feb41b156d79f5a3cd7c2de71f9020082032c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a081906151b5a52dd966862409cc4775b35f810012224c31034cf183a0c3f0263aa07c9e7b0039f422c93897d778883f70dd8b59b408313f686646b92cf329f420f4f9020082032d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05f9a2c6114f6f6b8ac06f1e83852cb7c0ea7da5236945ea32bf535eaeeffac6ca05d6a48c022dfc44952a6f402d1e0e33f82014e2e9c61b4a12e035b8a03f7a5e0f9020082032e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ddbc945c51c827159bffc27a6c07878af77f1fb930560ea920ec62f9fb06838da054c4efa59f7daa134d3375d64fddadc8f408124bf6ef581549b255eea2b8252ff9020082032f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a001ce8a921b74266164bb0040c7e32312d32aa812405209cdd4c5f5ea309a779aa0705ef966f43624226b946c5cf40ab5ae389337e91a85da08196c258af4706fd4f9020082033007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0da0de250fbb855ac86873abeb232b2ff78a457b4e6eb6c0f8c0a3dbfdfd5ed90a035951cf80ea4e5e13ce949d69ad069c87021debc40d8c174cc9dccfbd53bcb09f9020082033107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09046aa1c05e893730c2a7edcfdc0794c20a639866082a6fd828d485d1917e118a0207d7a5ecf28b8fc986cfcd2fb4e361af8ad8a0e4d6d1772d38aef43b05d3a7ff9020082033207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae44dc30a1551a3f885015c7430bdb29deccf75a1cf3c366f1c19488bfab8429a071c3652be3731337e92f3cd36da2f80aae2b8c5e40a03388f003cec10274e726f9020082033307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b5c7e92430590811bc7eed28b60ba964716389c0b7dc624ec9a9d6f56f4a97eca022060f20b53ae1b249a6c9e2608372bf83fb650e97c4de5a127cf15633197cbdf9020082033407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c6413688bb2c30b19a73968eeddb7ebfda1af1b5a8692ce92f65ac5cdae038d5a07ce12488af24b78cce18c184cac6b0ff39f41ef03451b55538dff997385b32b0f9020082033507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a021a1f28cd6a4ca52a81a6149568adc3610421620d343d446b50066819389faf7a01e456b1baffd6888aed631f7c90bc935ec3aaff96a4841c2c97d2115be426482f9020082033607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eeea9391c77f9c40d84015546ea52ba7bb35dfb1789b6232956846c231663d02a054d90ecdfbf156483db9142430b821ad0d812fd83a1cdb7d8f07104811193a52f9020082033707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a022a2caf27ac12f632f4eae0c6aec4f6a98e06e16486d64ed4b6e413befb81769a00ffc1a410654b401acb20c2e6e2deb7d2c7ddd6ea02519cc9dc1b5a8c33ac08bf9020082033807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0327cda15eec96dd76dd8eb76a790b8630e0e389e89d0e2ba247699ab9f143fd4a038884c127f00cb476d19e5c76f31cf12207b8574b88bdbdbdb5f9167e73cacf2f9020082033907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a044822a8842ae8c394583e08e333b87c2048630a9bf13bc2162599d1041faf931a01a1719d69ea8f1d99c830f3d530d215d46593693723b297b4bb7ea22e17c180bf9020082033a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a025a2d321a6f11783e5e902575de72124ad6a48415a92868603476f8372bf678ca076f1cd872d86bfd5eb3ba9dedb80cc5ba2a6aa2001f8fd311d1feb1dc5a8fed8f9020082033b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a007118208601c2a5b88b99edcfe180e1e311bb20970a071e3a94e2fa11be303eca05e1584e4ef1e2ae581f4d015468ef7f5f649be1ff524f7f09765963b5db096f5f9020082033c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07ecf36c6c9b1bcef5d9c4bb6abf1dd427d5560c774d3c0350f8dfed12621fed9a0332912af23f9025faeb2e02c46db3b55cec0e190c71cc1fbb51d88140d969173f9020082033d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a074f35fcdf73fadeeb4613b22c9c6f05e6f8cddd62ae690a8582140c5f718ced0a00b1817d882712c8f625d15b3fd7e0224cd7cb5401456e4229fdcc2b2f136ff75f9020082033e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a022c29735a641ead3690c77058613c6575682ab8de89fd30ff457fee535dbee47a006b2aafc90ea661c78d8a0bd0273c745e70c705be0be42d2b1fa6806a0a42086f9020082033f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05919a7bcb1fe862858d5937c2d6dbd8d9b94f515d231a910ea8830d00596974aa07dc09a502b57be5135083b17d1004519437eaa3cd49a503a15ea081cab887bcef9020082034007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0366076a956fdc88c21fc6bc0de8b47bb6422069483d8f7b831d4ba08bf383ef4a01712b46c9e0ce900887d09317db4b7e2e4f922986970cb95156c6e53f440234af9020082034107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e3464629bcfeb565aa6de37c5dac5a91aef7a4bb473c8d2bda710397bdda2167a04b17bcafec032fdfb9434afc58eb15a8a38ae6a5637bb3f109d20231718312d9f9020082034207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05c6f446397ae23a1c3b71da01fa28ebdab5a752a92b56fe6677a617651c0beaca053e28ef44a28f19796fe3c7a78a51a3714fa5942d940643f7f7d4dd14caa4915f9020082034307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0886fb52bd6e4dbde75a79938f0ffee27a4865dc7576d658b1f0bdcf466d22017a03df4c9b2e8733b4b1e219a250bc398a4969256897267511c67275d16e3b7aab0f9020082034407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a3b2a69055439d5abb56f585300d2a3b10bfa8f4df6d3928858dbfcd8f867531a070bf70e6447a9c794c94e0c996c7afd1fd819c4458680b02a697b8d65d934e7af9020082034507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7f16312fef46e2a54022bae54a249cea9bf68444905d6f5c169713f17c85ac9a00ebef2917a24414a80bc18a3e674f0e297b66f64f93edb5c0c62e57610c9a8b2f9020082034607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a080936a2c04af5825ecbf6e756d61fe278807b9f609bee3118c79413105394fd9a07dd7ca111b6fadf67eff49ae2e1facd17f0b31144623b6ca595d3a51d1fd4a35f9020082034707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd06963bb51405ba0376ba38ef5c02abb8b3f516e69fe24c7376b40115f24b3aa0620d0bfc9295ac93438a98a4d58468e9f12371df20d8434ab8a98de5c7aa7b52f9020082034807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e218b6f335c02daafab4b9facaf135364221a9250d2260d8cea5330b2de33016a02b1fbd57f9985c942ebaf61374f74e64151d7683e36ff891aa700abc888232ecf9020082034907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a041d29ab33cd41dcb2ef56486caaa488c90306fbb33c081a28a2a5e5cc17f0fffa0690483722d7033d3fdb5ef9bd2afca9ae1152ee6e3aa8b3465588756d2f6671ff9020082034a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a085edbb4c7a651729a7be1084f4b018d8ac774e668fde2c30ba60bb9dfac61311a03719d78e4f5f05ba7874315319b5d38beaefd62738653e4ff7de91ec3f361326f9020082034b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a054f08c0c5a8da56961bd0977443b6176ab6677a9ad576dd6260de2206580a77fa0029a0bb85ece446ef69e8b8f5e1ea907d82241dce0617ddef8a00dcaa73de07cf9020082034c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf1fd5447c525edfd9631a756fb52977bfca00516ef23d6ed5bbf6b55695dbd7a00cd3ad8cf4f8660559b74a587ea80022f7ba026d74b2e18029a2c8fca94ad362f9020082034d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a097287e90cc5e0b598d4603772977f38c6fccbec9355585e5e0af36ef016ad2faa03151e3c7829c920edaf9a8a0b6011d512cb1248658300cc61b405b46524d0e91f9020082034e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0af2355b0560294035fa12887696b8f08292a73ee5a7b573b177beaa1c595fcb0a01097feaea572de92e98fa2fb7790df325171f47fc426548556819f8bf4624604f9020082034f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a051fe6a2c45c2a732b8a4706ec5d07c95ce0a21f598d4720ee3edbac38be1250ca02f345d13526edbe0a514250c4d35afa85c1c22605ece54f9520d93f8b9f5f360f9020082035007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04ef4fddd824c0dde6a0aac2896f30c08f3ca04018ecbad1fa1cde2032833aa8ba05f66a874f1059f240568244dc19d6313905c8d670ab030e6521bf45111808a81f9020082035107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0109f5e8dd896ac82385952c39daa814c8105b30e3541f3095dac5c6e2cf00feaa0153a04f1ccee6a97cce6204f1a543e4d4478451128627c22dadef90d813c8458f9020082035207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ffb23145f46b61d31df07533aedaacee4e9ae9443442233ebca2002074ba2574a039916927421ff2cd80d96b058d53046ca5474be298a96d41445bc4bcaeee5b4df9020082035307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ac6311f1b8c8b8e0f806e8ffefb7412b4924045278b868db1e1a4c7b798b0064a005ee741bdb89cd466343389b2bb922c82b2bc1a3064e4244612ed3ddeb22cd21f9020082035407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04c0648aae33ded1544036c43c53095861011391511c0fab4f5080168f5c7a3fda06b99491231f7c849d257d05fe11eb998260a57e404b1bb54b176cbafcb566143f9020082035507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06db0786690ad6b7d6f7c05abfc27aeab5bc23112c3159d16cbd5725122418a8ca0380135b7a4d3c35623de49c207100f0d1f6420362f968b19665434c39e54d5e4f9020082035607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04cb42cc76e02cfa3f0ba756da8fe2580d023c739c2c25fa5e32a7f25f2236805a0173768f36b733216d8d02db998da31f4b97d813591760e216726201a9546647cf9020082035707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b32adbaa62574e685e426aea971722ffb5b823796c9b002050d3d3479be55311a0750bd75d1f3556f9d7adafb4c0310ccac30dcdc25e9a0d87d7da380c79aa1157f9020082035807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07ecbfb7d7b2ab641a7e6a942c6e4efa06a852f0f63cd26bcc80394f3ce63ac84a0280308476854e4632ec2a7e20556b8a3a707b9a4d02ef9b65bfd232ac9ca2e46f9020082035907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ef23ab06841c958ad9fa4d02d35b4d4d629ad009f630074fb0f8847394735afda0124a1f17f73b0b5df6e2473f2ba79c73f02fd9f9147587690b19a864b3c9312ff9020082035a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ff628ab656da32769cb0328bfaafaea552555dad9871ca7d52fec7a43dafb5fea028a24b4967792dbcf7103c515320ffd0465cf4f774311a958a28d2aa2a7a65eef9020082035b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02a0dc9b51314cfe50f8722342f4d9f855dba49003aca9456ce0dea031185d735a07ddcd1df659a8694301e82d8f6165966e482f3f68fccd1a111b6709e1673e3b1f9020082035c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ecb5792d31e3c1ff367d72a84d23161ac26afbf56793789f8489dec7cd949a89a05fd4e075c9128c8ad8883e7628e8cb96d130fbec769a310f3f9889c147a6128bf9020082035d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dfc4fa0ffe4f1649d840cfd85b6e094e1025fb66a0a71056fc909b45fa6bea2ea0385f17cb6705f04e4246459981d0569a0f8edd49ea278ba74824be2b22e60dc5f9020082035e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00d61a03c5a4b0814b2df3772a08889bf22ae03e958824a64368e3a48e3b04b94a0386a5550763c9be5e1d0d15abca1078c82d2e0e664f29a0594228b4226b22233f9020082035f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d43821f7821b76d9fdc08ba87d7db41a449400264bc8665de96a82d23fafedc3a03595050952d21a83e739f2b37732f99015215b087ed6929c6d67a675320b2e80f9020082036007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf19dc7a3b2d7536739e0886e66625adebcaa5dbf13895b67af63a5e4aeadf74a0125bb35ef4c0335fa1b336ff13389103cd60d7a175775132d37fba56177c3100f9020082036107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eeaddf7b115e49b6002eb63cad5a4cdc16c32456e2d9fe3560dfb9bca86ae349a02e1b0aae5891748a6da11ea475ad180f04272d87cc1516db4d04112a29d38b95f9020082036207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0488bd50f932d0b92e8da1e4caae361c1eb6448a6c8000feea474dfaec7b43131a05c4c6b3f5cbacbbf148acb8e6807b1e72813073703c551629b9bf0cf5a2e7f2df9020082036307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04d016dd2b7f3cd0f83f131652028deec089cb12805f214c6ec8007fdf4f7193ba06690e188bbb291fbd2536fb7e3fe2a0237170d5310e429e373324d2041e78bdaf9020082036407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a097aabda9cb66064d8e442ac3b867c989cccb0c5a4422726f4b7635d34d34ee0ca03feeaa5a755feff699f468d494ddef55a0fd3973b259a08c733f8275328a64e1f9020082036507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a8140848d2b9e343767de528e94009d1f10ae079212bf71836c22814bcbcbb65a0751d57af1f2e5249d17b875d724dd8d42fc94d0d2eac52bdf301c46a6a88e53bf9020082036607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06183ed319daa9f3d5b1fd664a7f218aa2bfa223f1d20bb6c3c705ebe74d533f2a0467e5516c8b616341653e2d12fbcda2c75894795198624329c20f47cff0eca0ff9020082036707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06818f615118f821b8ec5b380001b3981bc2c8c2ac5b1575b7ee35abaf7d7fca0a06aaabdb271e54f7c8b586eb9204ccf9640748b11dc8cbfb6f85318b81e8a0ebaf9020082036807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08fdaa361ae584a917ca782c2d44eca94d71e8ea9164e651bb0e6fdb2246adc88a01ac78bffd554c1562f7b508c33c72e6c699661a8fe93eefa5b2195ee30868d1df9020082036907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00bcdabd4316c63a29ba84ef956567b5fe9978d41a89bf4a088248ed0302103e2a0569efb3d35c5dd95be0d91e3066a6cb0f2be165bc3348dc328bca7574d966abdf9020082036a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c92a472a1e306f7b3653a87b599d7f90cb14476d1b5d0aaae9575597351b61a3a060c752ca01d84932d2aed8fa45f429c357e5911045b72b16663e7b1ed0b8bd70f9020082036b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0753b665e96ad8b2132570edf5dfae47c056b165ab15198474e90a8db42c5e684a06dc6ebccc93ae5dd400387bcb7a78a606997ede966d641e9468f96fe4065a349f9020082036c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00937309216e3c20e0ac93f49bc5aaf7661704b864b9d003434acbc7af7503e3fa04e91f49dcceb36305b76353256dc06c29c916603f4f1cb1ad9ad036263d689aaf9020082036d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a040e0848a8990f57f478b975a06ad4f613e2dc42bed1e5a504d0282078ba2e41aa03fe8526742aa7ff8a8419dd9e20ab96e7d496df0143742a5f3ac5572532b67c9f9020082036e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a040e85bc86e883ae62d842a89cfbed1bfa863152b0c5404327d3e53a530bfa9aca016512fb4898deb5855fd1ee81990327bea9a273da49ee8cc9d8681c7e5c5cf0ff9020082036f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c01df4e0a21ab3909ca7cf3c3ebbe6b8a13e898b4996330922837d364e668702a0596432454ddde3615ff61bcc64fe5e4c74889514322ccaf871c6257830fdcd24f9020082037007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0447882f66709c68d8c675a1bcea5922637d51e2c5424f9d04d44775dd32279cda07af9fb7a210915535fec327bd6aeeb25e44794ed82c919ede28464007d9632bbf9020082037107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f0ed2d1ba427cb66ca01c1ac76248fb0d019b52120e85070dc48101f1a64745a01fccdac31c026121223f78dd7e564e1a8e6ba57a1e5e7187ff90055e932cdf16f9020082037207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e75017a918824065045f66a82b9f8d6b6579185e84f3296d28532751bfdbbf0da052c525a2d17dc35b93a9d6a62e8af2c89202f34a0f7b42bda18a5c4b3f657eaaf9020082037307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fbb2fd387ac74bf45b96fa9e5cc53b25e3cfc5a6760750d5cd7b41a6d2da4d79a00639483d352e50eb75603191b6bc28bdd5486fbf0fed0a0d8c7257d4d2600900f9020082037407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03ddbec3c28c2c7a4a7049bd9335f35fce2921021e42cd567a461d94643e522e0a043359d72797797679922f92ff35d4088d195cdcf885236269f1e94838b0b0417f9020082037507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d12c9c86895098629d64cc0ff6225fae9fb8f53083192e5b537975a2d9607ea1a0259761cd4885f1ea93bb869f4b0dcb262d6a1fb6e4e90e3922377076d5f9c67ff9020082037607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0727c3e5442add4bd8c14018602097a32f2499cd60efc1d19d826bc101358f084a006a9b9081b9aeccc0a1d1c7af39399e64a4e6d7faee4c164e5fbeab1b7ca3cb6f9020082037707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0677d7008bdd040ff17d58712bd36556cf57b64a4773fe85860ba031920601710a0227768fffdbdce219c6cfa7e5339e66d14e829e0e73c1066c95860f18bc1f0bef9020082037807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0baecd3755331d404ea91fe4f53bcf5a71b0a643d1495892b6cd4ba342c7d2c66a01b1d9342e5dd5f6899367a40483906e7f549b5ddfc530f0837ed023f37b7802af9020082037907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01f62fc5b931245a66d38251b5c606a139f4f5a8de55a251a62f5265c608470fca06acb80bbbf7a56227ee75a6ca8c71a02d489844d403bc5b39e11b94e02af0cd6f9020082037a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a044fb14ded24ba0ea7a3260b5efd6e512652fb4593b3b498715fda35f17b64de5a05ceaefcddd7392c8787d097f4b702f5a3c0333bab5546f292d16ba1c4fd5e1cef9020082037b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a033398397f52588ba94d983d640de1173d098953b4345ea70ab8c63783de9fbb1a0281b0920886290f461a70c53deb02a0f63e52efe127420c107974ecb6cc64893f9020082037c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04053702947b9c616d1eeb1e97b616fb30fcb5285e7138274b5c1d81f75d473daa064fe182a0f977b186ac1b372fe056bc6c20882d5bf6ba238aa765003874b25c4f9020082037d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a87ce28bbac23b438c18d7bb9eebf84e40c62e5eaf10e09b3fa31748bda4500aa028907630f9f05089c422c88472b47429efe7edfbb57ae13229351cfed6309746f9020082037e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a087af83209a7a73d072dd894feef833fb1895c5618fc6a4d6a864dd54a79fafcea02b69a185890d56ea9861e8d8f754092c3292bba8401db0caaed6fa91b19b8063f9020082037f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09945b5ac46e4c185ed3a4bd38a1918ddb7492cc3db8b24c9d1b759c07f5f4a15a0395a8c566c3798ed24cec91aace350b7e96fead8528b5de7ebe5d36600e50259f9020082038007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a093ba10ef53dbc916bc48d93a44ef7e391b6c910d82144efad6c69cdd49a02d9da07337b3faa1aa0b30e64d8e04c75e16e7bd849cd6c331e10c90b079107fff0162f9020082038107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04e06b57bebe2050d5eda073a3f9710c23d33ebd98afe47665dce1960031d912fa00848cc7d899f75a96609c27cd65ccbe653311d950da82581ebb74049da33116ef9020082038207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a050f5f2d6c66b2c7252414d098b473f7022a58071a8ce6dcf4a4da2c27787b9eba0667140f69f400530749de2b3bd1cbde9297e52ba45e4f2dd719038ab5b8d1fdef9020082038307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cd13903742291f4b85d32b5ed32aee0b467f6d026a38669bb1ed340cebcf1c0da03337bfd04439c87a299c9775c2d270bae283aa22b8c51b71a56b1eb8393655fcf9020082038407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0249c872d28c26dde372e0d9bc85307b65514d4a610d686f3c629f2a582b9e495a04c4e21c323ab29eee88b11f79fe97f78f8412fc9cf42860cb8093f0a18027f33f9020082038507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0739f446343788763ea8bf9522d982607032b50cf190a528d8cd483cece9fe619a00ed29ac76855e43fbb2ceb6e15b0aff1dd4daf514a127cfa9757bdafe5f3caa0f9020082038607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02b68c6b19a60e4335b3671c7a85eb97b2a9616c0daafecf92e8f3049dc6df5aba0248edf0761c0e69b03417fcf048df8ea0f1edda7a3e5ab88b74df9911fd749f5f9020082038707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07403e9aa4326a1bf768dca72d313920d03c70f26ca6ce137e1acb93fd3327c4ea06c498f3ec189931b7f1a17fa009fbc141264be6fa8ff686674b3eaf43fc85991f9020082038807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d6e63e388f4c75a0c48a5d4f5ead5587314b967d5b452fb93793a5b92ae8a5daa00724beb8d03f5b8271ebfcce2f43050bee63b07f24cbf71b07283aacd9aba5e3f9020082038907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08a7f62ec7bb06023bd23fe2206d11aeb7c71e44987caa4845e3215ce1e570aeca019c8f8a6721818897594277b1d859811d5cb154ade291a4aaf7514029c2b31d5f9020082038a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a070442c2faa06a7a3084cc1799cc1bc9d7f2a77755c5bffa415319f08547e06d8a07a8f2b21e0276f996c38e2356e9073d23ce6dc114937eafc278a905b1f4b6463f9020082038b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a036f53e9b9fae4f046af832b06b753ba9baf408742977e140b2b73669c237138da016075d7b91562ce0747aea3e6c45b139e0ff2d6dd0ea37acd519a812134d84bdf9020082038c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fb3c44a7f1a2d016a20e6de043f7893c91bf90fb6304375483485300f14d0ed7a005f5795dac1f7a941349eceb15a0a9bc6dc04535e4dc75b80aef681b6c5ec7ebf9020082038d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b9e9f65347747cd837fa0384710063ea29fe124c2f5e276bbaee5e659f73f7e8a00f0a48725e6ec7f55b0c50b28787a05cc7741763c49da67b1a3b19192ac46bd1f9020082038e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a36c783e5a739b05df99ecdd9883ebebaae2b9f9479365d0abac6d0b3b3906e6a0225a0237801308f4ab43cbd3a7030931da10b1b7670c8e7eca132ff753b9107af9020082038f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01df868668a96d83b96fa416d0558e7d3d80cac67a722b4cf53d32fc67eb66231a032b494d1cb3e9cdc619bf8cba3f66fa609f138dc158cb46406318913f1e0b3daf9020082039007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fd6f5ab64238a5ed1ec33be7e0b5c027830ba3475f52ea8c8fbc87943e930329a049258636ffc06a4bb0f2963a98ab4ec2972b9c613d69f43780147a74795270d8f9020082039107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a074fcd1fb12cab9791a1ee6075f983cc79085d792b40df274a14e3d94bb6b4a8ba0212e567d321a882bffaf583d6dca62b63e4928a637fc360521a78c3fbbf2aa17f9020082039207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d59b2b1c99bd2c67b49c17b908c7e6e2fb6fb11af129c49e8749999faf932638a079c8b018d30288e4700c9f4894353d19742c488db32d1bb15d387c695446f5a2f9020082039307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05759c888ae35ce5573fabfbf8b30f549259aee62916c88c13b060a8691420d97a0516dfc5a9b81d6ed479d0dbf4bd6675443782507da405d576d28fa03c19c2ec3f9020082039407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a075d3948ed0821d74144bcb85e5f13772837dda08d4ca81afd1fce0efd0724f6da001c91961159b1ed197ae7d5abde3a1539f2432b7daa69d189b1324eb018f89e0f9020082039507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01b9c4ea8226668b75932ce82f128639de6fa751769afe4a3eae01f429c54bab7a0583827a5c6e40187f53d8e7114635390024148306cb37b1281a03a1dc70b26cef9020082039607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01076eae29ba00b477a97d501a53fb6a068ea52673d78019f7d2968436dedda57a06ec109221d1ed503c30aa2b99f11110fcabe6b89559f7e9cf341f47a10c623d8f9020082039707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a098325fb7419a550d879b1a0e2b442443470eeb1099d579b70b1bad2896b774e0a008a965910ba076ecb55e8b25dd0202504d9beea6eadb0f0e2af491e499fa8946f9020082039807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aaefcc2de5952d4456e847ebb9a14b7afb3085cf04b6e3f5f1ef918e95d2f8e6a0115b1d43afa194c32c3f60612e8d1580e2e9eebd26d6366052a975874635a7c6f9020082039907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e1801d92679e9da35e671bc98e04addaabc38f194001b25cab6d3d5afd55881aa0619b5da2830c00c72df7c1695fa2b4ce790b1bc5e7bc40afafcea23a62970060f9020082039a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a068eb53ea1dbd916a796d552914e3cb7f8a3e93584c0a25baa2a521681ce7806aa03b94a70d0e6396b6a047266ca203c26e72e869c068424398f1a195b5b3b25be7f9020082039b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01e08d0de89813477c4d3dee412e5e392ffd6436a7c85b221f095e43fad5936d3a01b22b33987c1340e5bff7b0c383ac06dbf833c9c0d801aae8ebe09d4839a9acff9020082039c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0227cbfed9206a7e19a675e7968ab2731103b30a8ee02f8b71f821e40caf3cc08a0355e85330da01223cb65521fd6edf5c9eac05f244722242c4871ea58be8425a8f901ff82039d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003259f6c5920a04004ef5ed045de184e859ba593d6ff255ca62c747caaca69445e0ea06a6fa4e46d6b7d2840ee202885721fcb26071f8bfbcd19f81ead792d7e72943ff9020082039e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d588cb780f47a3bd4babb093ce099034f9d9b8eed4738fbdd14650b036e3659ba0080223f0bab5fdca3e7c0357b3e4c86d030ff911ed32cc6e14d092ac1fdee663f9020082039f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b3382d477ad00be8e2f251eccfb12d3a6a23a7d0d100f308507c80e23d1adc50a02cb0b430ae33e724c25bdad9f387a0e7c3eea912f93ec33384cb2f728dd3d6eff902008203a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d9cb4e4f2741f1b7c7d917813031ab0f49a3b546778884847ab54279b6378e8a07e5b26f6fd497d154031095395157d5cd1b44b51a326d429297b2431d9ddfa73f902008203a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e02fe63585c5df106673d3529d0f1a541491bc54c3f7deaaf1d6731f385755c0a01c37653bce0b1ea0a35819d4d8a518cf7eaf7b5eebd4d7770b88c1555501cdb8f902008203a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cc528dd5a0725c9c93bdff07dd4a7911c107f6c7bf4a65704072b7361a9331f3a01e798f43469df8da8b36687ca2866f8bf492283b8772184f19da42aec7ae3693f902008203a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06985eefe1076936c78c3b388f2657444f510f4a1665bd64d1bcd0c94f440592aa01ee6830914fef83ca991845a0910078da5bca5911cfe3f951145e16ede487d1cf902008203a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bd1c02fb1fb09c052a762576443d7ada196539cfdd770f5795464b259869d1cfa078d7111927e9adb81706ee0acc2d85ed332ae3e57cbb5afc89f80edead21f53df902008203a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072d613af58b5a5ce38836f416bccf7d5765d6d90af6d868e319439e336387556a046f1dde03adb6d400183fb8212ab530a18e2a0a1c89b2dc3ea51aed4d28c1744f902008203a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0701d78f1b7023c8f3400d6d7aa65240d0fff7fe68a7dd1f4944f1e45ba896959a010efa10c1b7f598ccf11c21b72a266b8f295b64d12ce56474925c89096e6305ef902008203a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a041a6c9b9e841c37afcf7c318d9b941bc563d48ed11f39eb9da48f5b4e7d9ff36a07239d79b639f044501b214c9dfb15e2f0631ccf82987e53c7484037502d93b71f902008203a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09c393d00457684d6e886b81d7633e414443b2a6bac3160b74bc2f923f7440a94a00ffbd50345093a17ceab1c2ba700a957b0bdc05434499e3353ce3d9659ce3287f902008203a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01715168cea8ca29d7100d4c65e6780a5470fea6f56eef194fd7f4e3fdfc4d537a047d6872913806ddb8ef627ab3770197479488117cc0b467218328ee9cc768173f902008203aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb719b998d977e83ac8491871dd4b61d7860d7245523bfffa0b7e8d7d0938377a0555b5fbb0ffd1b56f2b66ec86ad926b9ca7c2c634ace78f3eddb89aaef7bd75df902008203ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a006a19685c9e9cca1f13d2461c956fcd903df0a765662ba21984139bb4c9fc7f5a03f4675d26d1cd0025ef09b290f328b20f775e6290275ed59ecafe9ee98eee091f902008203ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e3f68607598d9efecadff0064c4f5cdabdec66a03f719488cb25986e96c65d8aa0289b30be02b16b32db2bfec07c810ffa8a82f37940a5de1e991c8464798acde2f902008203ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0104ec351cfbabb42fc190b7339cd56197c191a051300c308e00b5e2e98d3991aa0559742638777927284817c7c7c89fca5952a2da753f7c70c288a4bf588cca3acf902008203ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0239789ff943b0ab18952484d66d1850c0d5e5f72d0e205eac72981d6d5bb9ba8a0574b61c803ef00eb8b5ecb46f65bba646853fd8221e2b43906f9e3eb02bfdda8f902008203af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a027986cc2465c907cdbe47ad04b4b3c1c8579388fc51e06291e2df32ba8c47589a0535a1ee0445c03399073a396bd27ea78c7f305e0f4c1d4575c14be171930324af902008203b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a098df876881eeb804886d2688df1133b36acfb19c2de1dbf86414d90ab656535aa06b6c57385e25a7287b4fce8fab6822f7a9d43f27317fca7430f5eb97b6b74ed8f902008203b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0668f20d5e49731cddc798d8cbb3c66942898b72bee20378f5781287e2d917e05a044b9505d8bcadb774f057f35db800641530a53bae47f2fade142523a889b46daf902008203b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0026fb0df57b50ca14842f1b819115d0ffc4e0b0cb5ef4b9a533e3d32a70a92baa02b476cdc4b9ac2e10d2fcd5dfee04cb5fe53a10bccba856b5f464ea0e86ebd4ff902008203b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eadbd7df406ac5cb47270379408fcfdef1b63a5b0afba1e20dda3ac49907b417a01e1bd46959ac309e55e451de428919dbcc82a6b5743d78e25d189a5b201c20c5f902008203b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a2e9002980b5ec8676f724ba8b038ebd17d00ca147be73d48b0a5f463b5a41f8a019e29f276746a52eaad0bbf1616d671d3bce8cec9273fcced348783d1f445c37f902008203b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05b63261c7996cee0ff27b2c56373db9f60ec7bd81fd82cb56d981aa10ea40442a054d4930787bfbaf402a0ea8542e4fef36e5d7c29cc9a4601273e03e450fe11fef902008203b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ea5f8096249c4f5ef1a787c44d2f40e6b6c8d98b2bc95c4e53771a3522de8e6ca037bbfdf3d5cc583a1fa92db5ae25bd0c40c96f379c9879be83edde13d8647cd5f902008203b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04d3c61c3a7d2bba751217ccf22834bf81add13726de93710fe054e690189a052a0793dcb95545e9d756bbe7db439a78606d5b6797a9aea324e9000ec6df319547bf902008203b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07988a8d13d48d2059ce5174cea2dd8d6d2f4150e275659a0a154008bc143c3e8a05d5d1d0a4c8edb5b9881f7239d4abc14daeb30a3cf720ea2ae2406c5a837e272f902008203b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0194270394b93d0e4225673abc283848dcde7b6edc9554b93ed0ab351f61694f3a04c6dcda990dc0e8a8a883cf6633ac36e16f3ac3eb0bedd1ec11a2b3247fdbde5f902008203ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a029f982473489c6849727fc9bd4c1f3923d5d7145f069347789e03b2e7d9438d4a07ebbddbb929b4e7e294dc9afde4cecea2d2d398c8b39e29a06760bf241328446f902008203bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07dbf74e1841dfdf68b629781201e0369917e2aaecb274861a3aaedf4083ba7f9a06fc25f85dd0a432f925069c2c403035890af4ef0eda8eb8e3e4d19ff13fb05b8f902008203bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0de2fb76a2335ce042007a273bcc8807f009e70b13f805f1bd9dcda3cbca06d8ca012e3f7a22104f3e17d8bf19bfe69393d6a77b65e5c5c0e6bbd9da23c76daf50af902008203bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cf32d3267233bb64f4acd35d289acbb2432229102590d38930142169dc9e2c50a0571ab5b0febcb01cdead3bdef0068c5bed79a73824ba3056c6815e88fe92e30ff902008203be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e1c627c7b0f5e1d72f850aea36d4be7f02203faecd759f5c42960ce9dc0a0e32a04aff87adee896b730cc15190acfcdb855ac17b4d5b3e8eb36858a90fbc1c96a1f902008203bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07201ecb26f5317a01ab3718abfd0f7133325bab39d5b696a7fb93e51fb3205b2a06f740bccee361e68eb949b706a95d40988f755c661fe27383998594b5c9a1f41f902008203c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a031bccc5963795eea499f35709bea61080c3e0d7dccbbf98cfc0d769433da53fda01b4c0453b0b2b438bbe495c2432ee91d437ebe965aa3aca7ca28f8f4284b5030f902008203c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08f0b2856efff5241fa1c3aaa8d9164fe4b45f96fb1584fc3aad762fdde7aff7ba0648d93050c001cae6e0e7feb240bb1af22eafe65938d85da9cfb7f1f88556ad0f902008203c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a083522f2d2ba48444f20a3e0f24b3b55ccb05cc726d9627b1807b5e6a8b2481d8a00a9035ddbd2826c1b118142bc014a8e99464b02f42d208c00fe9b31d8e4f4aeaf902008203c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a084fc6fc7be168b6419ce7b23c1e975ed793addad41207014cf4f420881419c74a02ea1f8e28ef177d4cb693b05865d95942265cdf9f9246860d271eaacfe34bcecf902008203c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0165b4816c0b29bf882144e28ee54838714c44cf2489254b787757a3f6f2d77e1a01f6d22c09d1ef42db621efba63ce49e70f5ce250c4a1d963610ba4921fc30255f902008203c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c0ef78da4bf73429958644c3774bfccb55316cb369fa0dc80da93305c011b169a0358fd049ad5b3dd9aa605215df2ade31c7132e01a794837e3874ff1eab224304f902008203c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0253170ec8261ba4ff328c244dee2325972ed2744107ece15aa5e73af6cd8ba11a0033141449aee68fc8d9fb1a03f7119f945478977549ee684b78db26811823459f902008203c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a099cb0cca593f0dbf29d559d94a0f200bcb63ba247d3fc749eda90c4a7b136a8ca050ed1f3cc178d3a6850cc9839a2ca81243c4233d666363521f75c3b5503d4bf4f902008203c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aecd0116f8bf5c437868ecd35171204eaeca94551e07e5d5ce4c75e57a34a379a0388bec8de2a8b6c30cfc0014362bd2be336d3e09e4cb8a04659f21da445ca675f902008203c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb3f592c1e49ce2759bc0ac2a715f60cc2fc247708ed7c1cd3deace617e56b8ea02a974e684306f1c0ff89cf3debb1cfcf1c7ecc9589acd6819c2f999f00be8068f902008203ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a073b72f997a20959fbc409c46ecaa32643f661c879345eb6c891bd55b4a666015a03cf356e806a277005e1bce0562ed2b84bb9737fbdb85e7b09c200a39ceb54df3f902008203cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0abf9e2104fa524d69672f8583fd25eecd817bdee78769d955953f8fea49da3c2a018623483151e335a07d13c7726a0881cea9ddd9dd42c679ef46a91d67171ec5ff902008203cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04e5c714dc3715646efa88c788a16da5840d563bffe96f8365323905f28b33ecca04739fc9252412a8da8ba5d485c48a9f99115d6fef03a7cee308c68a46ecd2083f902008203cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04c6c14be20fbb01a2de4ef2521523248207f0ae86b92bab37f8859b8309b3000a034ecb762d61e860230f0f6aeca8888c42804a7ec5feb6cca6dd7aba59cd0c786f902008203ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a090ae026e14be1a2a806782305eb7ca9c1e7216b2f40334724999dbefb7cbdd7ba044bf624b6b28a38d1ea84f858f5b758016fe3b46e456f37699d0f058c039b84ef902008203cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c9a336b2f37dc8fd193aa7381f13922f2d5d070b9bbf0e6d6ce9cf6ed93df827a004000bdbd5ec44bd0a056ae386503a431b8af133692294539074d96f076032e5f902008203d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a065af49f5e1dc049a419d044f76b92cb33c363a10bb25568cc8e8404a7aa800f5a074d8449465e87364f5ab83b3fe77f53a95bc028c64dc0548f336ff1c3a86ca06f902008203d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08518b86f3dd99c7b04c275923d62ee117142828b881fd7455f68212d469b876aa0331135126f9e3ad93c8c5b42dcf7a0c0a9895807c13681eabfbc147d2b0122aff902008203d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e3fbc7669b2f601ee261644acc3e788da66a697cfa54538bab50782d94c30042a04032b44d66f2470dc1972ddd789f7a7fd710d66a78f2987c56b3e3e05c8a7904f902008203d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02b33ed97cee0dffcf69e83f61dd20eb9b597e9eb4a69a379a34dd0e9edfd72d2a053f30c94d8fd5e8bed0e7b4cd865a939f0063184dc6ebdd70e01b4f44c277979f902008203d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a043e0aaddcb03e14e7bdc608821cdd08762aac2256ad430094cd6cc2e43513ed3a0397e475e3a4a66b33d5fd23c32c895b6194405123f93697368942f8af1a40d10f902008203d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01c979f15af3ad5b0eec126e050437c53beb1c6519f36e64072a0a742aa783e59a05e5398cd7119ec46cb06127824ffa28d3f87ca39bc9348611886fbe5466eb1e3f902008203d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a7f3cefca7ca56a3e3893b2672faeb901d415c641eae67ab512f9eeba019b67aa05b89586abf791f2f5c2fb6b8deffc46610a971a16524139cd3d23bf1b5c5174ef902008203d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05f9a4dfdfa301d86b66f05e387e84021867efea07f5f56051fc6c90cef8305afa04b7a2617b69a46f7164cffa3fc78321f7e91bba4bb2d375b07ff3c4ca4738093f902008203d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02c81670dd687c860a1c946fa93c87d33d8b98958172edb0b49e8f5e97d85297ba0522dbfd6a6d8c1759b60f06854a3ca6d5bedf76b683bf79f50890325f10a2fd3f902008203d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ddbfb4d12707957bb96c4ade0ecc4815cf44fe8d752f3a9e4428bad775330651a05ac209d941443c9786729f766dd6ae5484237cc1cf525306d8e7957f75eff153f902008203da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a090349c9333f16207fb76e1c3cf72ef1722fa3e601bff63942f98f98f12ff74bba070998e169d7c1690753f1b6726733f41f1283e7c5f6ea6bd7f87b68fb7bd9431f902008203db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a057c9a967942d0a985e263dd00afcd049fe729a2b5e61922de58eac143d114ed3a05ee50502be8a802164f35e304415937ff00d33a584b1edd19b7ec260899a4460f902008203dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f4ffeb3a0aa04ed70cb75899d0da9d16caf30989f11cb8299e666f7764bdac04a059ec3487e9ffa9d6b20c80ca4e0d6a01f8eb55fbcc53c04732983a23dde7ff21f902008203dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae241993216460fe0bfaa3342ea7214439ed914d44ccb18540abb8bb421b32fba049ea9f06c492ed09899694fb3ee8a0f0849e027e97b2fad479ea183f094cd730f902008203de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a026fa1a5f861066bdf3c4bb471c7ad4e670d3c1b4ef29df959b0364b06becca26a05cda18e2dd0b892bf6d72cb92e1d110cf5a94178b668109bb227ae5e9337fd85f902008203df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09e3140350627ca0fa87ee199a45d291c0081740f5382ce4c8692a7e002c886e0a0498a26a0cf9e9eaa4d694b0fb1b9104d915ae96e0accc6a797a7ec6dd65b5ed8f902008203e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06e7b99786ce0251f967f67e6bebe7960478a7d1c733716742eed201d9337ae48a01923a45519481c8c36f569e50efe9c5814a27604121848169dde47630f741c18f902008203e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08f843aeda2958e7e4143d187968edbb293ab0fd616605c62f8fdf4163ef4191fa00d0bc6203fd051ecbdd5f4d4c3dca9769bd531a3f397e931416e478a525f3cf4f902008203e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cbe6aac92db30b2f25923f35d32c1ad290dc6d8b92adffe7a2a4c5e0052539c8a041c17a20929b500dea0c691a372d212e216877deec15bc52ae65c2a4d6882cd2f902008203e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0665aa270ab15b467fa429999a9a256bbabaceafc614e93195da7e9a680f236c1a0632c727462d78181d0769c5fcbd128408cf3908167a01381b4338887dcb469baf902008203e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a073ff436ea35def919253eaa52de2798ac4e69b5a3b966b2b024e37cdd4282db8a0092bc98aad0a984ef9f7bbcb6951659c6de9cbf070422f933d99a8a9e133aeb8f902008203e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a096949201ccd93e477d5a891522cee3ce44356d991befbe5274b2d503b8d1ddefa0478ced0c00ee8fd09ac9d79c709c2737a673ab8cdcf219620dcd525e3ca34122f902008203e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a3bee9fad2ca19eaaf16c6be2bb3f5893b9f2608dd1f3da470baddf47c3edbbda026a3f3d826e52bbee44aa83681e9ee990477b7e7b10c36a87e615fe85ab8f0b1f902008203e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ba0274738a5298ff614af004f472e200cc1aba73fd10d2cda923f8c5147ac5e9a079c451363bc8af428f43d43ebebf67873fe06240de7045dd4dcc64b2a682a714f902008203e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ca0ee5d093c232264d0b23ab100aefbd1a50f56dfc248fbdcf57c7c8d3c53a10a009300167c9ca40ee33f38aaefe37c362f069edee10b314905438024843bf4c76f902008203e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c4df028dfe9506ff1406632cd5260de2762ef95b8b17e28c44285799dadf7c77a0546e088de1636b228d099d09423e62b2d6e06f62d7890863430d5d83d686959df902008203ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e353cc831f9829fa746a1ff153d4991e89618690f56d16d6b50d3040abeb9c9da06d44a51197d37814810ee0a295d8ccef81a0e12f1468eb6b43e5496aaf183a56f902008203eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7eb662613afb9b166d3efde37ac1831de7eb6111c385932193aa3f5103255cca05fce21c0f62886f5c71ab7ef35a1a59eb8fd48c573b86972e283a6d1e72ff5f3f902008203ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03d49792a68b8b1dbe40cff64290fa23705d7b085883c56f5b4449826cedb7583a006009978b9a6c918627a0f5105b2f032689b1d9f797ff38a074ceb1258b61272f902008203ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08854a635339056fb80769f229cc4297c583d2388e38eefa13c2584d9181a0f6aa061d93e9f58fa09958c9ec70a1c725ea32cfd75566a367cee2eb85dbfd0ced438f902008203ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bc73172155e7f92492ad40eed0e9862876afaa1e81b70fd5e6ba235bdc7aa9c5a0733aa777804bcb8f5619e3898d3ba779640923d3a74b62ac4b5456a007d9486bf902008203ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ad578e1dc19d85772ea43b46ee5cb1f7fbaa507af68c5b6d9280ef6af1376518a057d39fcea5af4ae7dbe1b195e7fd51f54adad2a52064afae0cb195950c4f6645f902008203f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a6dafbca589213bb87dca7aff004503ce089495c283d6120793d96564bac8090a066fb92c13b82ccc5282ce59ea43fc595fce297268bd6fe2e59d7871d9c5a1116f902008203f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eda8cc7ef002dfd289ccc2bfa04f4e336a41ea9a5eb1eebffe2acf81b6e298e8a07551441504391a9181210bc0dee8dd95f1d45625c376957749616adb3f0f424ff902008203f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03354a96c1bf5a23be895fea33c5c2bee53ac5083d667c875244594d8ae7e1d7ca03ec5dc774eaa96278be0b0c8f54c1cbc9514e9f0c5266c0958f1c4693030dd99f902008203f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d4886203c3454143aea54d63670f5ac60a8e05f740a8d5c9aeb250f948e841d8a067c309dc654fe6d81055cae02526a0eca32d8d4da574cb6c9835ff238a3bc2aef902008203f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01986f529194df80705148282de7b82fe1b35213c4347a9de2111daf4d533dbdca073154b519b8b4a22e5018fd7e6c0180bdb1ce6e4ee5c4569c7d2f1cd89f791c4f902008203f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08a0b65255f6a414e2def13e14fdb4e463b653ef9aab4fd6e3ba09fabe269f017a019fa295650d72559a6e69442fc97c6107fc610010f214ea5f6dc7fb370338b80f902008203f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07f12aac702cb2c5b0cf302891ac0554a0500b144a17df7b9522a9f5baf55aa3da07500f48a2743a7f85ecf06143f66f3f59b189ff2e55a751e923b0a3d782ec628f902008203f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05305619350ec6d2ee9df49ab452bb6112e9b191c4da281f483905f6bce20edf1a003f77cbc3d6d02ad9d2f7a0421bb9f61096eb1f004dc8825b81ce7c2f3f9d82cf902008203f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b17e95e03ee46a81ea491e7f8461b74514c859de4925a7e044f39ea456541bada0674efa931297e21377e835daef9053325fa7de575067cc1f26617d82352de78ff902008203f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0182006e7df41edfd06ca882eedf59bb97e7f99879a2e38446efac7b9bca12cd5a005a1e643dce4e7e3dfbfeff8db020f9483a0305a21eacb6202069a391fd3ff55f902008203fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b006fb1a8e4076d828d508430bc54c17ccf797ffd5fa11e1034b23c11581b519a0059986a224689584ba022d8ff9e14c8665d0dcae7cbec7bb08fe2e2322d239b1f902008203fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0445626e120c605faa5b2fbd877b76e3ec0a8b4c50488d53fda22a1b4c87820caa06ed6b56cba3ae4051344bebaef23dcab12483d10619102d86a1f37d39e081200f902008203fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0df7213314630b947ef30f5eff3fa016b45b5a3599b76193a2b910a200ff8ac8ea07a89c11006115d2cddd79adcbd8f1fd05ab83804d5e4500d0fd0458da38fe68ff902008203fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0976954719f17f0e0026b4b02b71a8919387e377fb09990dcb347e9bebf93b312a07bc9450b59221111985580cd8e058e43dd836825a816994f179639f714bffd42f902008203fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08eec2ff888c3e478a480d257169047048b186488c82b25d78ea13c963de5f900a04f46a8170c7a70b6cd2193db068ad8b24c2c76755d0ac101769bf0913ea75615f902008203ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a076eb106e5a7fa9ca27adbdb62859859f15bba4e97485cec74d8cb159ef5102fba01458c77aedc4b8a8b2c2ae7f2e124aa8237a4abc8f710cf92244f98234c613f0f9020082040007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a066b7935e08bd51e327461d9edcbc774b740725d617c10e27c0b30e7061f1e963a041087e83cea215bf25d10e168ed643d991ef7bb545dee1b2c3673ba3ec13a135f9020082040107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd81b8143ac9ecee162e031020f28f3a018523686169fa424f1afebcf380080aa059f2d219d323dd15197cb7b0c461cd1dbabf091b76e6cff5eb45d0a96db39e9af9020082040207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05be10392633b9f1a86b5005811c10e3ecb4f55d833892b9ee7d6c1a1e9d5e38fa007b1ffb0f3d9aa2680b277fe2a083fa1e086da5588daaf5204b8662dee925d0bf9020082040307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ea2b51596cad5ddbabbfb971e35905ce006fe04a6c2bd2e30bd82a1c1cad62daa06e0675e4722ee51fdeec1e075c9a1f0ab6dd3cfb853a1d24d8c3ba563a7950dff9020082040407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01d1173939181de868baa9be2469f3b62b1bc9a31dd14b4ab95764f83102982cea00e696d1da4c595b1e387558df996be85f156eb61774f50ed279c74168ddc31fdf9020082040507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cc3a49969fc7e1d48f4904d5005c7f78f32a09df835c0d6505ffd19b320474b3a02e77eab8a79d025876e85d1fc1e19ae03d7c140d57ece0d96c37cc2f0bd78902f9020082040607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d8f6eb85ed3181559ed5373b61d559153751b80a15a8ae623bea474990c72ebda02d2166b0787980f2aeeefd2eaa7f221e19fe3a97b0c88086fa638194f2dc92cef9020082040707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a013801a19df0370fa3ba98f0fa2555f1db41cf2dfc5dddbd33488e250bfa666aaa03749e3a5756051d8c8c0bbd267202bcbc209e0c5ebe101f8e72b09ba2aec601cf9020082040807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a008740eb0b33761d882ad55ef726477f8edf53dcfe757a3aacf38469d78fcc47fa02e8059011340cc5c9d178610b39e9cb4547bb00174e59340cd5d992301de6a7ff9020082040907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a006e37582ecc8d021ac343523513e534fc87efa3c5128597a825ce313c22ebb12a00c79133f0382dfda37df46961fae1d179294b46f706d96eb9c247b4f7b8abbfff9020082040a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a146f2be5c60e7ea2e585327dbc37e25075da3c3919752f5fb8411d9c2be0e53a05bd7f9a0f079d07820fbf9f8d51b5bec295749dcbadd544ffa0f5754e5dd5279f9020082040b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05493e48aec9a01f8a88f84d8454ab5b76d664218283ef014846c8a7c5e28546da01727edfa696503696e41dfeb73433bf76f6a26c063e6d240cfba916242bc10dbf9020082040c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e6e0bcd73f26c0249a5e75fe78cf05143a6178e2008753793030dd91da02dfe1a0366674fa484c64cf18f709e06c66422785bbeeb8f228ed7b738982bbe9518b2cf9020082040d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0474d57b9ba78c736e3bc7812332ba3596f8ca1210f5879be1223271431be918aa0224446c56a04a3ed2f4aecf0ab72707104b16d82516c0d7858a7109d160b3249f9020082040e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04a11af1c549ec772da7aff3ba54d091337272810e66f76e6786bdb2814fa7a84a07e1993d4e757613b648cd780ca317f3e6a9f1458c396dff9cdc4cf2b2988504ef9020082040f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0462636e56b8f95c51d8e064fbd6183199c7fb2ace73e9b932ced761527b35e7ba03cc152593d4eb937b27e616438c887f659f01e72ddce63ab2692d3d1e459376ef9020082041007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b0986871ac94e85f10b52cc4244177a25964298abe817a62a99616e8a4283c56a0719ac4ea073aff3729ca1ec933f4018d36b424167a447c7d61d5b3ce81ac16a1f901ff82041107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d0f1dad156fd4812e98aa1d3a699e000addfabeac07f3df48ed059567b91ef919fd5bb6b7f819e411a895e79a1dd691fd79ba62a3d6bf21586f09a0565e6c3a2f9020082041207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a026e4ae85e507d2cbed6fff85be41e05bdd7887e2d2375973fed77576d4862840a059645343cda2e66f5b2436190291980164bbd81ef4c1add0057b2b29b0fb5b40f9020082041307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f38d78e7ad9a0096be3793490824fb66f5e6439c4e3699be5ba20be4f63b615ca0376d21370e7cff621714188ea8d4623a712c56f6cb10ac16bfe52c52354fcc24f9020082041407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d40f615cc9014cf29bc182c6d33ad53c24a18567903ecb21ef69c5329df87ea9a05e1baafec7299b164d0529741caf056128604135be1902f97b1cfbe2c976ff9df9020082041507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e62b5c060425e2710c6baf5b4a2ffbd4ef799afd4c7ff1db08d5382563412760a07136d616da12f8dae2228d0ef022985f30798564a949d508ccfa010d5466141ef9020082041607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0832d2d414e867657216485019230445dd94f401188bc7d9dd730ab1bbcff3586a01bf62105c8bce1651af77cf66bc28a9d07d19901203253c1655f4a59102a499ef9020082041707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a039749ac989717407ec83f61a575aa22663829b44f8cc82d8f140570dc3eee8d2a073189b91f55654f7ce3028ddc445b336aabf4725df526c70fcc138dfbf4d2c7bf9020082041807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b42569e54fd99b720abcebf72212501e77ed81044e90186ef5cb0e5030b8a95da0285c2b268deb7a1220377b307e43b2031d7504de9aabc720bf09943c2cc52d29f9020082041907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0050a34a5e5c251a2f931a47c1ad35aa95d9428868c64e1391ca692f5be499f25a04d1099b04d3d3f089f443d546d4e78c4f67466a3b3dbeaeaf5b684015513a255f9020082041a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07a41ba7d7d2741eca2a63a3aa0e07cfa177a5a49f3aeb84ee7e41859df4daee4a04580304d7c818deaae1fced0e5d1acc5ec480228c4fee08382a7653dd50252eaf9020082041b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06870ca8533038b71e1aa27a38125e5c5d07feff6e1dce24a1f1e357c2cca74caa052be9fa1c74e3152df7a48103d9aa2170389aaed10b2e903ebe1e7ad60c37aa7f9020082041c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb2069b0af6e58b34c9cd61ec88f765105c3b3c3b250a14c24ab113fd6ad8423a048c1e3f793bc7a4ae2d5caa5878ee42a7c1c102b3dbc0179d56cd3877e3c07baf9020082041d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04f141f6fb368255056e5646d5d1a80a69523b0b9bb0e88a5ddc0d4e1b1b5562da0648d2ace1b378bc7c1e1d6a32c8fa1605cb3f7a3e9018a1bd16e14be60da6b99f9020082041e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fc4d03165f2aba2d9ccfb1f60435b246028d8f0c2fb8bd8e62de557d84664897a07897ba7dd6d0df6778e57baad1dccf3ea6437145903abd26565acc75f56690e0f9020082041f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c0bf71961c671e0e613b72e78341d9644e4b75bb5fa566d39923a45df2d066a9a0394bb46d89ed2c8bdc9f0877a2b4a2ef965c35ec0abcc220696ae01306f69aebf9020082042007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09184d16a338afd247d6c03dba68d78a05b259fa7d23def4892279cbd9a457caba06e2059a343aa188523b532b6ae51d32e7fc16c5fdf5321dee506b65298393f6ff9020082042107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0219e5d7ef2893671bbc3617fb48b1b33f2c008f8c5aef0847636c2d19d307d81a07093dc466743a5dd98509ae27abf4bbc563d4d99f269749b0b4577b55d017f21f9020082042207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05be968d84414ad32eaba311de5c6a3c39f3d24cbac5dc57359de976f4b51b887a034f21c4fc2d740a5d7d53f686da26823cbd6ae9dca1c27ae4899273dca4ecad7f9020082042307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0850fee46a01188815c356f47e8223cab207801c3f50fee5f51618e73a6ba1c52a0630f91caa8bb60a4089b1e558f5d1d5b7e634731cd5116bd876aa44157f7ad63f9020082042407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ccc9250ee0c8bd457bb01f22ef195f043e990ab228f9c08ab701dbbe48fae572a00618dff62570a9a859408cab924f8f05d87b070e1b268fac6c33062163e27600f9020082042507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b841be541f5342545421922ec02f137d41250943b1e9e475aac4434369a859ffa04ec3931b38c6093ded96cc649856535ede36e1478422197f105270ba812440f8f9020082042607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a058e85c9262d44c7cde0bde6446550677cc6d00c80e277d5ca1e66667493a32d2a004d132b86877d5884c93703f14f033422619478562e67ad462d2d0f06bccb1fff9020082042707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0da317b121cce2fed1015659267be053e17570cbd827f785131ef49b43fe5bae0a07c9ea09d920bc429908d1d6886b2e9e8e7815d0c0f9ffad5fbd39d98571b8d8cf9020082042807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0553e57482c0efd570bd119ed03e75adbb33cb2ffe151710e11fbbb86fabaa454a0326c2f0b420044b6bbf95a4da71387994f96e25c9da30d8720853183100a9e25f9020082042907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf646a8865b7bccc71bc1c71ecee405217ad1b9304275eaacbdc1e7e2609039ca037ea131399f105544ad925edb81b9b21646e55ed48c25790c07371f57d5a5efef9020082042a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f1bf32a0571f089db7138ab3c1978bceacd79e4d8557853370f782af8f3ebe9ea05f6b57039491f279baff4af8fc3cc149ede235efd14c5bb4439b26c3acfab1f8f9020082042b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a003c871d01046860a577017067faa0d57d2143679d179f6d24921f925400cbc27a03ef060e4cab56f6f3ff786f2b961afc93f6f1b7b6ca673a8d099d5e61f66f08af9020082042c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0555f5ee1543f6e3171f85f9e854f5d51e17956aa4b8723d443662dbcb6ff54baa06be946bbf7b8766b754d39c3d8795fc889b4728f5579989df7a602eba839e61cf9020082042d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0afd979a240e0cec76d6e33d705d40a68160392cf46880275798a5c601d44261ba072f46c2743dac2da6b169834c38e361f261b83ee85461a78ad0875f240561eeef9020082042e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07622b29040b2de6282f511b7e6dc2f21b254f0f8f2e9f5340800b597426b155fa0711418d975d5d7c1b9a99f92b91a664a9a5986bfa26d8b5c52031dc1b1db3476f9020082042f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a089caec0c783fb413bbf5097e8fba20ee15614c04496f44e79da84395a8717cb8a0295f7fba781208f9f68d92917a7f6e1a18db04c48d82200f18c300c8a70bb655f9020082043007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0310f57bf34668ab8cb803e9d8037e931714fcdac5c1204530ebc2ba4d4f59193a063cb2a18e0bae9b1ba0b49086ae9700dace21bacf09192fdc8b0a76da010ab46f9020082043107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b6ae36267c243ab190c1d91b1f08abeb242f37121d5569a6e07508e8f64e3daca0231c6cb018521d27d725aed126ff398bdc297d7e758201c83ce8fe280259c402f9020082043207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f65d8fc08d9a38412ca4f02823477d150c264790f1da650c548950a050887b7ba0189e594c3e447725f4c0ada87ce1aa09936e0e06243fea2af9a7a7d9eaf222bdf9020082043307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04840846964d167647ce817aebf3e9f4ed9f634792d0af20ae7972e38eb2ac2dfa0170b171c48c83ca87d27dd9aacf2a47c57a3a100bfc57fae4d589f0f24d930faf9020082043407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00dd2b0e64a42c2dcc30dd7869750ab5ee6a23be1f3b34bf24abddb2d3531c823a07a9f7cbde05f099139834cb2900c57e13d740c02d71a0d79dd80a71447720d10f9020082043507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a062084f7fa81f245caf7ea1df45e2286132805427e5e798d4d2b9a0644873ab4da05245fcb272942795abc10fc677618c51ed6614bf297caa15a567d03083619d73f9020082043607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ec151c424220a3258b379e656dacb6f486a854910c378c32a11f43135037f68da0541befd36d1654022715b66ba5b2e13ad6dd0257a04ff278a32a5b36650ffc9df9020082043707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eb18063ebb451f9385f0669612726031823ded651b127496974a69a409da015fa04ee4a8bc1e1f69802597e92d4a0fd4d6cc2826b50c7c30b2d2b4163853b266def9020082043807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a027b95f7be167773798111c20db098fa1872b99ff7e2db9aa006821fe763b8133a029567ddef33aae07f1808ed8a77d476188f9d46ea9f0a5e0cd64ad72065c2a24f9020082043907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f58a1e802d9b5aef08dc0e5215da460d8497bfa70f58d9fb2e56f0660115502ea026b4e5ba64a401221da397736cb7d6699e5aaf7cf5e094b8492941e9dd31a30ff9020082043a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0240807dff3066162b4d3f7f1b603703a77640e0d019e75f3c44bac64becad051a04e3c7118c5545bde2914b4f0550f92d4a1ef609c4e38ffca1f501373cc59093ff9020082043b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0888a37ed98e16d28b3a9e33c5ee02d92546557373da5d9b2f721a987824d384ca00e9592b6f07048a841b849faa3b9710366c5e237f4aa7e1dcdcf94e6ca1ca551f9020082043c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01cbbb2a0609d9a72d69e8685581e6d3ec59045b2fecf6d8f773760c2d55d2386a020a7508d05bf526f47a77e9a2520835e59292e071a37a7aa0ea644d12c6af2faf9020082043d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07b11e302bcbc88b1e96b22acab9c609d9714baf0247a1415062814b59bec788fa059a4a756e2c9f37fc29c7f16a2e47eed2c1014be0b3c8099fbaa8d23b15b7049f9020082043e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e1aa81be39aa518c0774ebcd51ac3d89bbb21ee722cb0170c3f9aa15ccf04755a077dd29286cef916e97b5cb7b0c4f3d8025eb1b6c5212ee9704a287f58da3e2a9f9020082043f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00cf98e33828396fcffcc923fc859049412905b5fb69bbd4415140bd0471ac95ba0618acc1a8c9fc9a58664294ec1f61e8ec844d0fd7182c292e672f22656c15a9ff9020082044007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0858caa5e5abc947d0f394cc4a1d4344342acba3c6834496e549104ddcf870697a07d0f4e6ee074de14ce1cb5b584399ccf1709afb43fefe2ddbe2c5196185e63f0f9020082044107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d5dc66f8ce591cb7de0cb53c82dd693df3e434c6fd12e6b857d15424c24b641a039a05fd30cc35c1418bbd8f6001d4ab15a5f0b811da75f695d516b20862ed107f9020082044207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0da897adbec2d630020296ace94124c147fa4b95b883fc4707f5e8064f76f960ba002b1c8c2d9d0a3800b24c837feb76ee4f069c53dc86d528e16d2f17a2b087db2f9020082044307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd3690923875789befd7a9b1011e1b2e5f7233ae8083d85dbafb7561a68bbe2ba05e0719b2777435e430739a5c021c5cccf9486b2cf7ebf2dda97da6d77dc542fef9020082044407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a068829af0380f266673eba8518afd83b19361b68e96294ec9f1d057c03d35d9ada068008308975d303a9691a9c4257bea696909cddf540995cdac78283b719ce876f9020082044507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a4c83087203b55c2a7771a354441bbd8523ed2011ca6539b0279a676771b5321a03d25897c496fda7c9c29c57b6d38faa4d004a0c480f8feaf040b017ea56d6345f9020082044607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a084c4f92c627c206a4e2a2bc5a5d9ee5471505927100d3b6eef69b0e208918150a06a489c43e03d4f88c6f4b2b45226b568411c9677d4a04c7b1b951d532c1dcaa6f9020082044707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a043fb4bedd8a8c70a1f78591a1b59aeb24fd0cf0d17ffd22e5ef75d5fc129e42aa022f029edfdcc35585dc436c660818e4674fd627ea44806c0ba92ce2db4981cf8f9020082044807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05a05b1c00cb9a517d6cfb654c9cedb42ae923a75b4ac8d9608a66517b1264044a070790562b326f822f4b6dcd7674b3b2b28b4bd25b14e1d94bbfb61b621c0b150f9020082044907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a035a7f9ddddbf9cbf43ddb149cd0574b3944be6055c7f6933c879effd2d84bd99a079675dc53987e2a9a97a60d777d9ff087f1bc64e06c5b67333036c5b6a54bef5f9020082044a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09bf63c8b4f971bf575c5f05767bf89299698f05ebbebd4fa7b148210570efacfa063392ce6a4ee54aee4b71f290393dc569ec1d923155b1165f933fc6ad79b3593f9020082044b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fa4f2b7b07120a2a1a683982358220a113b49b2ae54ca92107f3e0e0b80dac8fa02a39217978835b65ae9a06ef29d89c64ee38216b78a0afa206f528dcffd05bcff9020082044c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a72f827e76a1eef4b8f0b860116061921c81d4cf63663b04defbac224e306082a07af74c85f35885dc0e156e803745447462b04b803ec8644634b2f4030b817fb7f9020082044d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09bef898d79b86d7ecc051d70241c9d103ed2d2df37c8393fede68feb8c3c9e2ea0529433d98e888abe19959355504573c813c3dc1b003bcb51b604020ad9b2779bf9020082044e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a0a598ab73006bfe94baf791adac912d00648f6e5fb4a7b859d4fcf6ca16e451a0702173f98570acfe15d0860880f4b59f5ce5873732be61e174a6edacd55dd744f9020082044f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb6619242147fffce361c2c4581e9794cde6f51cfac24e6022439c44ee4b9463a0794919f1513f692f28068cf88a2241de38558647b033caec9bbe9f9558360febf9020082045007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a58bb95fe14503978860812b486fe97d5cc2fd7623a69f5813e581d2f25b1908a03022960f82c0de1e77e5fba0ad12f57b416293f7276122d959b228d47c064c92f9020082045107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a067708a18f41b5908facab1ebf964ed0d237c60db4aa032a2ca9caf03da68a918a0201f168ba834a69ea737e3f7d965870a92121bbb5b8ee91249c6a9e3b2f7eaebf9020082045207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0452f7a4f7b1831edc08f9d1543e515605791be37f27a38a5c0a57fe23d0627dea05373b75ccdc453d09237017410121a5114685312412ac7c9a8962d6b4b8a7e3bf9020082045307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ccd1560db75450bd89693ee1cc5ae5e4036b8602f9a1b76fe45be25fc04e7658a054495eab641ead9f86f02bc747b71a23722b16aa825be08bb8c8772bb6f57e8ef9020082045407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06dd30bac6ad1a141041851d9c3142c565f13c83900b4ff4463218271c1f72a86a01e1ca78a16fcc038fcf551c1fd6f4e2b9bab7b2d38157fbcbfad8e3a455a0bd9f9020082045507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a006fab50c7ddf907f284fe6dd22b590090fc5bd5d8c4d6b32e7892f4b8f467582a074223087bca4cdc8b820b77d53799ac6cbdbb1ea503b6a5cb679f0f9e1555c04f9020082045607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01eacb8659e156c82d1bb009ffade5615ca6933bdff8a303fb09991cced4adeaaa00fbe527de9bf84c04098fb88ab149a9ce1eb60cb34455aa7acc2546d84d82ccaf9020082045707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a008c604d7dc1ad46f7360457e2284056595ec440f9e6089003182a72c11eb8d7fa00aaf8050c6c31c6a6ffcb7ed65d63054d3c527d3f52d068d173b139f112b466bf9020082045807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0034a5911aa5144d443a38b2dc0317973ed5685ee611e6378c3d3f7122f49cbeea04ce35e6b72c54d52deee04cdcb4d47ae0196cbb333766e463abab7e215bea512f9020082045907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0228ff38b1333f3736e574ae469a25fba11b5a48ac101c88d1c341bf8dabb8c7fa02d87f3ac9f12a4129325dd6529a4018c18139fed9a03c1ca2eb424b0d26db504f9020082045a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0217ffb6b0040c9c4067b0674980399a8e5e344f82067a7668857a989005b330aa079813762e2db6d0b6e26a4255c8de2532e0468b9b43cecdd4fe0182c72315675f9020082045b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03a29ba32761b07c262181dbc9ed333f37862c865302b1fad0ba786c7796cf2eea023604271df1dbb85a4de1e7413a6e85bfa7b78f205d11c0731a35b3cb2f32e65f9020082045c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05a0ffeb138bedbe34e0882d56457c08bddb4e747b857fc141a1444f149c6df3ba057089c488bbc970d3d9148534da9edc5f361234705b78022fc4b947327a3e41ff9020082045d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04159e16e01ab4d8b9c256730fd18587ad72889028fce307acdf54945d94da2cea03569c457a08cca17553fb2484b46eacb5462acb44b73bb457c846ba72c1f33f3f9020082045e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a1a2ca336727735a6407dfc4d3589d7075e110bbe7d3f1f948df82e6b5d66921a05b96050e8c66262125b109ffdc19f5b4cf557c94a396f2cd653d169cf5c8db28f9020082045f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08e6e73fd4ec4d05b42089de6e167ef692ca5fb9ca8fe9a643562dfaeb1594c71a03a4ed45807dd1a2382543331c59f9b464acdd3ecbe07da9ab87e3749cc8a05faf9020082046007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08cf22b6a8a5cd62e01199db9210de7154dc2522334d9ab3b40d288eb578d93ffa00a8c69c3e40e546cd6b878625d506a1f739c1cdf31e0cd085383e75a88fafb91f9020082046107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0050ecb5b82fd588390e6c9fed5010b1593e074d58b5f08d20832ceedd1c61d85a021f3301cb74aea864643d5578fb855a599b2c7dd022a33652199d2db1ba3e01ff9020082046207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03d036ea92f207a66d24ea7f3dd0f27fbf7298203c7fc64035a1d2d16bee3963ca0586bd1d0c2f821a553ec742fee76c157d3d142bb5ad6da22cf84ba8f8990f8d3f9020082046307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0662acb6de18cfb87194b2fc1dd51134715efaaf8d8b227c670f4be94afbf276aa05f63ac07306eee07856bd8da7321bf3172dcb9a81bebd5a0d92c8dbb7b48a5c8f9020082046407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e7e6f852b8d44d68207696efb227a0bf7fe29590c5c6f150d4dfde52a2a1045aa046f7efac8a77647da1149f597f961e2a50350252a7a2e0d52ea6490176b99a53f9020082046507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05cf67bc7b57e5e7bdcc4a8b3b8a1d8e8e22ba1d7794907aca13876d0002e5f3da00e6767ef641ae807d1243cf070a8bc4bb90197302aaf25de490ab691c91ebb69f9020082046607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b13d944949a70737d2e9a2df669048bb9c2f258e81e38de13d1abe8897ca9ed4a02607cf0b4960e02794f90c4630f2847056164029013514913062e8ccbb03fcbdf9020082046707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a021383765616f89089edf605ae170f625c70ecdc7999987934a775d0514a62e5ca07e9b0dc1a6fc8a0cef12a0aa95a6c99cb47d96d8ed242b2407d86ff37bd0724cf9020082046807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08f4d05c5b966bdb724e46274bdcd1b0dfa1965a58c25374dca558e1dc108d80aa013e84c3b240b040bd305926a0cd20dab081bfe8bb54fec8ec477066ef6134ac7f9020082046907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06f93b005fdd7360cc6d2b3f2fbfe9717fb74b67a5724718470e56946e4b6629da07a0fe52ff2cda0861c0fb77644c72844619d1bd442efadc726e8fb4b0759020ff9020082046a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e63d38def247d38ab9c75579bc8ff709f124825b5c61abd462c32a3d981c3d74a0034659f1ee9d84e08bd773f990abc776f4cf9396a93c7b607b9cf012ff0be104f9020082046b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02992595ac795c76400973968847e7bff55c22159ccdb347ba4fe94c409d3a5caa0513b3c2cdeb88e9694eb4fb8653a17cd550190ebec639d5f9e2a0eafbc31ff51f9020082046c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b237d2d09a1ac902678ea3cb9dc9a23c36ceb35d1098104d7602caeff8df66c2a018e6be64dc17221f4d7233e767ae909238730645a9b360a3e3e987d7ca057e9df9020082046d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05a1ec8b4f0769e1fcb639b2914c69ccbbb41fe393794e3277d3de8d3d3e40793a04e4dc4427bc572d226f1675c16342bdd379c803fb06794db0c056173279008dcf9020082046e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06968f4d946a9a77c07b9b2a364e636184f36415062ec3e5ad840ee069e1837cba077e6443463831981490a31f020a1be23bca097c409528f7a0ee60550703c118bf9020082046f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dc8c170729ec563ebee711ba6894e8f449c25506e8b58618276cb0e2d12bf5e9a027ac3a28abaffc8ce10a5f9902d45be326b66ff72b5dd5bfebc19bb12cbc6a1ff9020082047007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fd922b694048f6e604c91aca4ddc93b153d7c840f7bf33308e591017fe01e13ca02c0a1bfc044a187038ce7eb54bae961edc0666d8cf5ace4b020897df1198a32cf9020082047107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0074108b1e3106540b594abb96ec6bb9953f60158f3cc56b541aa0ab2b4d6c62ca07c0b69c6ac7d467909c36dc61687a3bbedaed0f42ad435cfee00539105f11515f9020082047207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0349962295821381e486b15000687b7ad40f59a3eccd13f93938318fd74ece7e5a05b4abdc991f07de2e264c55d67144cb341326aa7310da97ba53aeaac3ac70b34f9020082047307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0542e87e24707e2129793e5024bf43914cab949493b9c506ee83d9bddd2c23d3ea0532f08cb5e51ffcbb7e0d7c7d39a7a4ec3d95bbf086047eb09dfd52f42405950f9020082047407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06a3d8d02cbe316e3e38d6cf25550b9b73df5dae45831d964ff9bb28ae7089acfa05e9a000ce52fd058c97383a0ee0cd64c5212aec90096eb326213acfa52e2d7def9020082047507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d8877e393868e86b78250d54bad01e9c36d361f4dc806acceb98d23eb056fed5a00f413ba89bf5d0176a165d2f7033c88e756bb1ee13ebe072f48985a38917dff3f9020082047607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d5fa69698216906a359130f12dbdea64290c63d812994d9386c62de9e3ddedba0769c989b0c80cfba2c4487984c6971f1036630ab367979c3f8c23181d4049d5ff9020082047707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0320e186b62d565a29b720cd189598f549464ac5571207c6867deefdff0576721a038706fee9b031b465c46957c58166e18ae38a412e11c024850fc6d9b094e68b3f9020082047807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c13be93e55c91d715d3e969959708e2b86873082f68d8516630f64222378a7e6a0414f0d0b720561f28c41cfcedb3fd828b31ac949e5b6d2c66102d54105fd7e01f9020082047907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a027ef123bef8d7b4828c7d06de67cc3ebfefd673392303c6b5319797e40accfa8a0745e8509eddf3662ea5e8b181f246cf04f98ea99efa34f4148ce46648ea1b540f9020082047a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05cb48c2dbcdae79ba081f692b01a5cef45f39b3ba34b6f49ca1769e377a4e7a8a0027b9222249a87c54b6d7910dfa1e55f2a5db02e86fb9fba038f7ae316b2d432f9020082047b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00e50437d88bd25ecfe67ba14bb09b634df1b53ab231701c4be95db7d0c701aefa06fe6dc67239695b0cff33051f06a30006a4188a9996fc334b22009086decfc76f9020082047c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02a1d570ed74b8729cf2599f55f826ec5a9ae3686c5da87e0df3e90f8b067fbdda06bcfc41cac22e9748bc5c3b98a7e2a4b7145e3410a63c7b9b3993ea3309223bdf9020082047d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0293a0ef942de83b50c8b9693a3d31f5c6cd843079a46d4c42606a2691e605a64a028397d85531e66eb833cddb35329dac5a6356e9609030c5f8d4ec7c19745fe29f9020082047e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ff4038dda83b4a71f21c0435b50b0993e41b649b0cb37ce9e8b5a63d4d0aadda02f9b7a446dd91a50b3b65a6adeb244b794fe7c4d8194d5386f43e96b803677fdf9020082047f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d182434300a9977278ee76bcbb2aa0818115a829961d97c5b34bafde4508b54a03b7ecdcd196d3702b0190788c4893c2b4392c57589dfcb5516e91edcac533d30f9020082048007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00655c348412b1bb281ae213749a473871064da8eaeee1d8b285bc23d71fe590fa04572cfa373d0e7bad608d90a67a4b35af74ebe20369f6b2d437adf02d679d23bf9020082048107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0458f66c8be1b839e942f874bc6bbe8100adca2babe339d32d478dc4e55c3a899a0752bd00097e0f5baab30acc2c0e62f71c860822cd8987d045f33c0065c395256f9020082048207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c98f8a766f335bbf33439387d4c535250f41955e08e10b1faeaa7347823052f7a07f7793bdfe08835584b6ccec45159f949e936321978a3d2a7b67d969e89126e1f9020082048307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f7bf20017f3ad4ef07a2669d72684d6c4fed6847f1d787e50ac2ffa54c655caba0105ff4dfb864ce2cfeeec0c766b47238502033fb6db6cf14226ef7bc9fc48f27f9020082048407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b38b853c799ba5870c1dc5fb4b3859a9b188866182a3d321ed6f90e03fdb4b69a0481c1c031178850a12714e574d876180f8e36a537d6489589130d3ad5b5085e2f9020082048507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05f916dd17284ccf1b31c5e9ba91e15286233efae6c6bc61f0edfb8afe77fe69aa03058fa3238ecfa4cd0b460b291f59eaa3bf9c6e361eadb763b2b122adeaa8603f9020082048607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06bf5b7b8792a55d6001327c40dba28537bd736287b403b08b3b49905e3c92a27a07907f79cb8c228f0dee1c7cc0e881c01d9641e5d38c669582851a69f0c3663eef9020082048707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03589ceec93d69967de04e361da236f4c9313fdd05809d461d9e45d7438bb83c1a06b07d6df78ba1e2810a551458dfeded5c68f4a858f7a3b53f51ad1beaa8d20def9020082048807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048c00dc7d9ccbc35106749c73071a62163d567aad238aa214ef304cae851f86fa03a3e30857e7c5c9601a6053223f01f0ce554cb356bd85fbf5e4f3ac04b7aeba8f9020082048907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08de83d2cca51dc4a3b1c544e251c083a9374e36ef0d0148932981e4a3cbd1f19a032685047593dd687c435453b040b492bf4a5b0226691320923cc6ed81f24064ff9020082048a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00c055e619bfdcf164a2c7a0cdce0b758da2011db0a45be391ceab30070e22b03a012b8db5fe9b299df805fa66fe867a3a9d86ddc1c583ef515e94de9d1fb272fd8f9020082048b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fc8cb9c7473ba108d3c350e7fd3e525ec13eed34d4c664fc036572d807281ab3a03f118828fdf3718c21268e57355513b8d80351b0686073fbf8cbb4b5e121ff7af9020082048c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7476f7663cb23ff072532dfa19c29df6ffcff79575db884914269130310a432a05c5251b0899223ef288e8ce3c48444c408b277d62d52469787a6d037b578a659f9020082048d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04b4cd53fdb19fe73e250a6aa79de0198c10a9430b0fc0db0a740cf5f85b65a00a079ca109b3b2426266e68936127740b41a0c7a8ec0e0eeaccf40f281e87094daff9020082048e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d90aae126bc346462109dc1f9d3ab988a35b1896c1bc56c54f306b4213063642a0097a4a5946337241dd2f8f7f618da175c2a3560253dd3a4a71bc3ae99851dfb1f9020082048f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07503a6e925884f45a027a73086a6dedf16150d77f4b76e250fd0a415a903cbd8a026798308f3638fb2269977a4908d907f6a67568785f06488f95a90b28215d885f9020082049007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07a300633c9413c1c38572d8194baa51f065b04b4fe644cdaecc7cac2e611c445a02fc77c17dedfdf4b6a91a0204ef493d8713038abfd84178fb997af5e7ff4c26df9020082049107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c07637cdc1032eada07f1a5dcc35e084360ae35946dbceb6a5a07054d5b221c2a054ae9aa030919c122816022bd0eb91ab0279c500ef8918ca7092006fa5de8582f901ff82049207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003269f2b060f796379fa34090973cf48d51263d889dbf9c9064ac245f90a1f3a60d9a0448062399c041b5ab48afd8496120665b0404d76539e6b18db34493a3e8244fff9020082049307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aad473c963d0baf6f1c9645722ac4eed30043f3c5096b7a7fb6d340989cc3cf5a0338af091e5435e44dc983cb6e18de4d69b74b12f6a0d49c26a6548b0dbaf52ecf9020082049407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f947740b7862177aac891faefa06d6cc5327241d8aff01a2cad0a2daf22f2077a005ab5ab69ca5e22e426dcd72cc72a76f7d3c0f95c5853a94bf7ad160ae68c38ff9020082049507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d2d3c5ee43d9263150c50e1822a56c2e02691d7ed605522f32732a5c666c7510a06315f671e2ce505626bf17da48ca269d290289bd6a69284e396eb586897f8a8ff9020082049607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0874478f6d1b227b73c5422412c549f98f90471ccfeaf6c52f1c5f1e7491519fda062a97f7542b7e9094fcaffecaaf510db9dce2d844e80d5892103dce8915e8195f9020082049707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aecc5b3867577dce1b96b41cafe76e8bed9de54b6e2d985673bf11ea6ce29d3ea04d9c4dee660baf0b18fc1206984bbbe5dac67b6daa9658042b070fb618517216f9020082049807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06108d865c882fb09f205070c71184b6a415a9ce9430eb12fb112cb2287ceadcba017d8dc2d5141917d4d0fdae8a0ca5e36389e62075d8defb14eeb750faeaced49f9020082049907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a029fde128f61304990d3beb8382c1a5dca4a3dda04e80d90f0b09e574db09d28aa0252462ab8d93894e3f97118e1853889461c6e8698722a29110f9f7c1ac5477b7f9020082049a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05e7861ab3915d802e89c87c608ffb334f2802426d4c2321b2c1007d54e30f868a04dc5665ba6ea699f1691b6659a4a7f62032a74fc0ff0f41f06abf493517b9b77f9020082049b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0390b9895378aa4e98ae3beaa6b50ac1d60bc5ee81fb857526a9b3508aeb9bea0a0534349739c150e1c41a722b164b4a50bcd1d5aedf4966c00ca18afad20da872cf9020082049c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7d4fe978d63df2e5d402a4ba4c951a2083401d2b05ff6078fd2e176cc695bc7a0240e7d3cd22932ed2018af7ad4f014cb0ce7fc89eeb649b7e2d78457bad6cc06f9020082049d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bc1744b858087bfb6110eb859a779120f0b3721eab7f23a3d2038ae421623a61a04ebecfbef3dd66bd6b8cd9761c1cc89d7e96990030c931b39ec181ec7a024583f9020082049e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d5ff3d053638092a292bf441864870f595844ddd7e2bf650e6b991627cb26cca051ff988ed53e0726fcc5ae4c2e684fb977940dd2e4e1c693ac8e44164543c5e0f9020082049f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ba4c6b1906ce5980a94829ce23b92383b6ec4e9cc65cf50aeb2ba7787993e299a01f33ecbce8c55f6ae04dbc750dccb0a4ae4822c9ff5b34dac31531219845dc76f902008204a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06a9e484586ebccd52be1c6186e8200076a60a2de2e73d088c8a1f3cbd045a539a0670d58b7290b8999a3055b6f3e567b899ad0772823f6a2246b2ba17bff605a0ef902008204a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e9846ef2b71c8cfd4f84bba35466881fcb39df8b5a6ff4cbefa672ec52e7b3ada02e77b1fd7d27fe395155088595f88bbaa18342934c31d83274adc6879b04f931f902008204a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0229a45e4608df72587ecf05142129edea75d174d2cd21c2feabb80e769db731ea0613f8cebe4df5045efd85521b9f38c3aa43d8a5621acc4ea1d78b0e902d6c6d7f902008204a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09da86d45299f734ae43c31f515df8846524c4027ff877fc2251c20858226be4fa0055fb772e434c5034a1f37e462f4dcd1605baa7d11a54dbe1f994d2fb7bed0f7f902008204a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06fd8666f30a7ddc3652f14ee3e4d70a00f88360f3e98b2e0c2081e16062f1c83a0500b4cc6f53e95fd8ccd621ae3f9389a18902c87db127dc2f3482ee48312a1dcf902008204a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a003ef3e6302164e8421be577f626f439a86f129ff04973c34e51abb5d1bd11858a066166493ac3894285550ad63c16a8762e3d75400b3155b6d859ed270ede9c299f902008204a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a530095619e20681dfd8d1268b08c33beffd0f70d5c5bb0530340bc04d74d9e3a05a5a8cfec6ca37ca6ecfe3f8514a5cc6a22756848f413a222164d4d37e44fa60f902008204a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a22547817703207f6d706c5a7201a6620127d4a1ebbba67844518907e3f18482a07d5d9a3d951e00702b938dfbbb4c5b9a8f031d3a85356eb8093968a7eb480225f902008204a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05a7e149b54b4bd8d82c3a30faf24b478df422430f2311167baadec3e291a8722a03007db5265621ee848fdc27b344ed852725a1b72f14e7e285dbc876f014028f4f902008204a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01b6ac9f1e781b0ff015917d53de474f98a9da49001b77ee1fd2322bbd20861a1a01dbf17f57ac9ce45ebb74d30e2bafb9a081a3215134b4e3ccd88b8e2c0f6c01bf902008204aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0628e13aa0e435c06ecfaa7c82cf7e8dbb1744fc7c255e0c62c635f6f5e201976a00996065769465429dc306b592e7b313d937350282f82a18f56054207219e20e8f902008204ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05fa7e38e6b3e3ed16e7cca8ae11faca1ba558fc4886e83ca0fbc251f3c02b2e8a0569cc8c2569a2c94c285da643d47386041f59a765eadeb7e0a45c4e0bbb55131f902008204ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f3b427a85f7d7409b3660751c5d9db8a4d42f6f5fd1a93275a328f07fa9b108ba0769021923072877d8258d78a911657f886827846e6b0f2f7d872907adef14cbdf902008204ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a007c0570b94d46d3bc858624cf337c5fc8a0a8c0930e3dd62e227f840fafec919a00d3c55a22725a0d9742643984ccda08cef8826d8adfb72e6a9f45adaf283339df902008204ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f08fac1936887846a373ec5b98b61f33cd249fc40e10e30a8e93f3499da61290a076a8451573c17e1709ddede31255549b8994e78f058f1f98c035f4739b6c715df902008204af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c46367369fa29c6ddb5a436fd02634df094d1cc762494d720e47f9b2275c189fa0556169ecfbe54a422141c3f3d6e63f406f79b226344b401d68733cb0ad5fef95f902008204b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0111c87468cc01c68e4b3ff787167e57d92ee613136d33ba29d0a67f8e4db57faa075c005483ad241fd08ecbd187d19b8a94702d481cb9b11ccbba6568ac34fd750f902008204b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0958caab6f50017f2aaeaefbe7ae7176173b8ad1c9fca8716c7d6911cd7385ed5a058e009d154f24612e8a593a912de375f2f479397100b2440e16e8f6c0a2c5a3df902008204b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f96707484f6553f04b55af1a2babdb6ee0ee0fbf94e07fa7e8e4be906cd27ff1a046f0d4566ffb25625ac15f305fd1dc59234909fad0c1b0c84ac274c4ad079696f902008204b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01f1b1ae3a898f1e13c5072905dfd2f815a35a56112102d0d664ca3647a5f461ca04c622f99ae193522ba71369c25cac21e773cea7867a85ed693c6eabddbccbfaef902008204b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a82f4fd5f0d8174b0a7ba97e6bb6b99d8299b808f7fb7b2320ee58520dbb2720a045e9e303bbc8ece79dec5299fcc4d4084195ae50f36318ec6beed3501a5b41fdf902008204b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a687318adac225a963b8773509215a164d55a59702c1fde81f7ef92ae870a8d3a02f286fc5833a2089e3ba748964f8afc7689536e80de72d8c5bb34b886926272cf902008204b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eef822430be5b9da8ec9b1a49d907d4f02b65eda90a966835b0582e6d9d8d5f9a009f69e14b47c6c1b5f4cddc7a211f983725bbab483504a46f9e77dbbebab8b71f902008204b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e01ad24ccc16ef50daa41e5eaf2fbfc12b26404975d3efafb4d541c688274371a01c0ba022bb740f1cb2aba09763d42ffffe3967b69c1f554968d6c4d8e1c83060f902008204b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02a5cc6edf995ec47ec760c32fbc185c20ae58c8d527e90921f534e26443e5a45a039ece9d32ac4496de0de542c57181d7f232d47a894280901d398d07e0cc05c62f902008204b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a082a38bfd18ae51b6f2f124d84647f80aa3cd051c22a049fc3684d07137d9ce7ca0640f92afeaaead948b84cb6a6ac34b3889e261955606c6e9fe3b9460bebec3e3f902008204ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bd3227f4026dd4b561bbb5d8b818e7793726922c08c95e7a7bbdbc6d380bb1b4a026f278361ada67531d1b33b9e4adcab007d68a0d8512a2ed77a06233b9d2918ff902008204bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05120581a72c00e72d55dbfc7a9e0db93182333112d7d147a9a30e0f0cab01e23a0096b9fb237f69c40ccc3b33bd8b419a2d28fe26c433b7edcefcc6e031357650df902008204bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0df877e0960edfd8bd03f7176aa773e0f76be1fb510d09bf87949528163509436a010439dff431718a15dafb03b836c493c370eaeaabca19b240b9bca0744955e09f902008204bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d9432deede08c7432f15c15656dfc91386514fc1bd914e6fefa5fd158f14da65a0092c43a6bd1b1465b6b1a84a0a68799bd85eaf94989e795fc11f52403eaf2b08f902008204be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a017cf5e9283d1a61970945b6a0fb0280ac4da93e1b642abd76a8e30f0d0200657a053a3b0cecf1d98e452f63d7f5b202b3318b41bbcdb0d9f856ab37f3f6d5d0003f902008204bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bf7df9b5f89d9e46e150a976766d4d56f0479ee5cb712a7c962872a2c411cb1da038ded036c6655e5071af9b02f89dfb25125108d1f552366ebf1858e91da47f90f902008204c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0678032fa526c6d78145ee48b1798ff678809357c049417c88fdca10cc6a34a7aa06feeeeff3c3589102aa53022b42661f7306391cca920f749449d39a180cca8b7f902008204c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0abf7f428073635a1f073b393fc4e192949c71ff590ec5b6208e08f311b789e56a0511b340e155f832540662fab8ab98766308cfc45781c2013f5476d6e7a96feddf902008204c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0670bc151cb05d97ed543a745f69bf194c91313b3e67c8004718b2b75c19ce062a01e0c44d9a2b271cf850a1a1b5d5c441c15b740fee83b7d6e39536c24bff10995f902008204c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb6a0b351958490b389c6d5f7aa6c0626cf5ab8365f4acb6704adab5072ad41ea0425f892dfd1aa4d9e22640fb37de43925d4a66c02ef92092a7990d53266267fdf902008204c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bbd37f719c85128b28aa4f0a25ffa00ea1e8de59b610d0525220d1d04efe77fea032853f6f50ca6dcf17ab7d2a4fced168e124434eaef43a39b3a1bd1de28d1a0bf902008204c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dd02b847f54fd37fe61272ad1c3fa9443d033e2ca720107534bf19f4420151b7a04b58ecca3bb86f98e626cc5466bfc7d525050bde61aa6cef14614c429ac33838f902008204c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a036bab01957e293e2d2ed4661ad8fa1aafd99e11873369b0e64fee8e0679b58eba069d8046d82bed4e657699e92a846b60640ac6733940d4de8e4b5facf79ae1605f902008204c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d760d4aec0554c8a951c3bcc270269fb62f0c27e31a6d2ae84f371deb3cb7c3aa00dc29b643a2a69c49ffefd4d0ccaf74e18ddbd8025cdc914a2c083ae510f2e16f902008204c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09dc9276d230e685ed0dcff0e6b86c4342f45295af6c3bc9b80dbebce1e49e1bfa052e494894413954a5650c81e4c2c4ce5c696fffcdfe6eb1266c8f68b288f87b5f902008204c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c82891fa2ebf9a3b2d6ca9c5ce222445188ba7449ce445958993fbb5dc55d0a1a060d8a90e57636dee6b05b29e134352362f217eba6e95be4e8e7de208e1f0a0c3f902008204ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0847cd4cc812a2da9ff60ecaef39555dc8ae41967cab0f7f694b37d71d14963b8a0373ce12dfb10acf84263148ed46d1bc59226a56fe64d973e0a754a14099ecc67f902008204cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08c5500c12632f25acbfd7f845abb9033158375162b8b2915f28372adfd447284a03df68d1193c1490b2df30fb929ebef088328f5d71e0efaabc33769da84db72bcf902008204cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0062cb54d9e091333a2cab9cbfde10940d7ccf0b785d1e9ee5eb07cb0f924e00ca038a6c5373fcd4b25b49ad59307b811b05f512975350085617e7f93873b218639f902008204cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09eabc4f7ff8ebea5bb8c6453bcb961c6ad77a8ccc2264635697a94326ccb0ddba02922473615c483980c03d7b64f12787172e3efaca2ef5afeed4947c848d801ebf902008204ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0541145737232122dd74c2d395ac59b20dda6b71ce441f1c5b3b22ca6f2bfecf4a021c586dad72ef0a94dfd20a726886616b6759d909cb999037b8f59fdc8925898f902008204cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f34f45ce451dc268654f610058e4981697cd9fbafb3e85655c9dfa0a75ef72e6a00189501b8bc7eaa2316851682d67b6f9c7684e2ea1f79b4b923e2b8f2ceeddc8f902008204d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01fd7490bfd466f6edb3a571a5edc7b55520fbd518486b8a608f06147fd96e118a076c784a7660a2a48e8ef8516abe894d33a62b2fc70239bb0e766967b6d00fe22f902008204d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0df8bb48d5a97c2b132e68adeace0ae7fae9e160deaf82d539638b94266d37c1da0531d1429b18b1f8eff02705806a94573c76344ffcab051c4886fe6126e0573d3f902008204d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09bd9cf1c72354ef622c8509d20dca775932c52a135742d4e690c29fc96105e8ca04392ec29e8a86b2e2a70aadb7e01a35d805c73335775f27d64e25aa4b85fe3f0f902008204d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dae0c9f74b4b9801c0cc2583078138d42f3487d615bffe1b3b09af32e1035334a01f8677a03b98e0ab1d0cc4488f5dd74d0c2266aa6e474f0f96ef11e0f6b33a1af902008204d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03ad1f790bb9e726678549e3ac1da1e9d3a646a3775d030d715f3c25fa8b94337a03423fe2a75caad32bfb2a2a99b0efc81fe993cff3d6c7cfdc77ce9a89bf6f04cf902008204d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00356bf1498dd4041b84996f8159131e2cc2aa68e102cd84d18614771b8315429a05d791cb1b7aef40cd0b84ac628a5512cd012ef8df88d25e3c1d11c76821628fdf902008204d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a057c1abcddfd20e2e9e0943cc2378378604a800ebff76f3bb5f378971b1f1e575a06313a432d3887d27da825fdd6f9315fab04125e257664a7383b76fe51bbf05ebf902008204d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0774092c070f3f8764bdc77b62700370973d14330ec4e45a9d6f567031ffcee7ba075ee28196ac593636fa83ec0ad0058184f97d3c8e8577f6bcc95e75549049380f902008204d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f78008bfa7766dd66fa26d438e04a639db36e62fb620a7b5509133a2167fb224a02c6dcac1227b87a2337c22a46e55c02b6a550f5bed593aa485c34dfac8f601eaf902008204d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a050465ae34ac622a0785fa5c5cc621fffd211ab443ff92bc94ff1498e6f47dd7ba07cc186e7bb31bbef4dffaf410e290048f5957d44c81662bcb972e0a6ba12a5edf902008204da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0af6f27dc44e9c1129b6a24d9223cf5a107f613ba3e3dd43abe2ffc0366f87aa5a06b4a23350ac379225247b2e9b9988067d616eeee7f3d285dd2e861f416bc8589f902008204db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0296a3de45f71836214a36745daf80bdac4f50801d353f934d272fbad5f1b3a34a04d6082cb7842ef7e2de8f3c1b271c64ee2a2e6b58eb875cd11ad7837d8226795f902008204dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d40734a7c5f4fde22252a5e76a3d4057a2f7209e35b5399b18f29ad9cc5fe11a05ae4767d5b23df5b86189303da0fe5767c2253b745001d48d2a822cb2c6d959df902008204dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f6ff161f1576c6637e874f2c7c07b0ba0a61b3b78b419a32bfc8b7b1057146b2a00be6181a011d869710b26389345f688d0a7e0b3bbfd6795034afff5150c140a3f902008204de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048a45eda192df09e3482ffe9e596ff1bfda3d61fd7cae243d55722bf58dd526fa06452a06d2c51350dc398771848fccf46ceb66b77e79c8f8fe728d094649dd0c8f902008204df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f49b32b37cf28e54b6fc82288e8b4df9b2759a33b99fcc51e009b16a5c7c7017a0389c46233509a1efd23b7fe47de5f16b0fbc27f66720beb427421c4c6520020ef902008204e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d6cd09de6609c9dc2bfbc9c73206094e1bfbf7cfa765da8ba7f76e576f38f4a2a024332bde05f3e5eae8234993100d4b0d3b60133f68e93fb57e2f819df4c37017f902008204e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0991149b6e46a40ed21f6091850c635a88a7d616926d44149449ca206bf411977a0408f774cb613ca3f1f2febf682f0a64e1ebc05816a3dc8704020574e8e20b669f902008204e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a089e28e7c44e66aec9b915348d3da296d4e58e64c4023955aa3642c9b63c875fba02e5e2353d81c8fd0a354f0862bedfec62ef56639bcec452be15d95811bce8cb7f902008204e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04ec114a0643cb71d2ddef00b8ecee26ae0ad0fe025717b0b328b6b552f1c50efa00acb6ec0dd791a33b57d4c6cccc99c1a32c72363cddfcb71c91c4d5f4be6fbb9f902008204e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0daeb8a8d022a10ae2ff8a3d64851aef9b868d5f5646698e2d1d45378bd29dfaea022b07bebcfbae0a61b14121c8e37933ca02ca6dd361a7de87acc65e1380557b9f902008204e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a061fcce74d0408f1d4d1b3e8797e2715ce61065aa433df942892ff6c67e5b58d8a0209599ca7a69a7fe98a1234a62ed32f0b42a170522dd877fbef5e11b2ee87a76f902008204e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0123988d1ad7c0bdb1e98c2c89ae9d89e4e49b7ec5ea146288ceb54c9260a5760a00d56752ac00d5e90db86e1c77a947cec4e81cc53d88dd710842e5d641098fbdbf902008204e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aa2b75276689e951f6e08d8406fab8f1f182069db34e4926435eea6fd7997bd0a03afd9351faf1fbe11877d9e04dc6b1ca8589585c747aede7f611a7281df306bcf902008204e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c07bd40bd84f15144eb99c2ff107390b46f77282bb1d8e517a12bba63c66c21ba01f337fd2b58c963563c745ed9bcfe112cb7bb12bd87ca55fdf726372890486eef902008204e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0029011c68f67acc9ca45ea95c1b509adf83ccccde89d36baf17cb3fcd5a78096a0383ce4d89cd8559afa97e470aee9226d1ac2ca0a91cbd3f3d6ca8da507688a9cf901ff8204ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f8e4412c1c7945c7a4219e01964bfb6bb32722f8e1f91761c7dc510a10676b089f43267cd7ea9d034878248f281bbc476957360795da9e1f4ce274789ec8fee1f902008204eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0122486b936436e139dd73225f1d186aabc5a992c465e58050c617cc0138fd36da07d60de0b64b3438d2eb116b7487ef6a4e656e6b3f3cdc18d7aaa5510cae697e9f902008204ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e5cc7fdb6e34180daf2094d2c490dd722d09eb7509f6cfbc185cefb56574f13ea01830cc88b3a94e92c7dce5542c564976593e5ce0b65eae90db2bfe1d5083fd5bf902008204ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f484f9efda2e464c16d16817e7703ca19f7b6563d683a241d12b55001cd02261a00b8ede135ef1974a8582315719cb9abe584dc337efa6494fbb4724faffeab71af902008204ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dde9a5b7b1aae233228230331ddfa674244a7df19ef7bd55219743efd5cfefe1a007e8a1985e75ea3c25d5b1d475561f543f63c6882c6d34fdff70c7992091b513f902008204ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04e7587c98aab6b07a64e0fe59d33310022d06ce6f82d8fd389bdabf8aae7ac90a07a3324b2f0391fb21b6667a1efab88d0c531f3c35416a900421b561a295fae63f902008204f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06f8aec35de7fb55e1728b33331ac5ff2b8bc38b6ce808dcb31831c91be1dcd5da01286fa4fcb65d88fb4af0cb47eaced4aca23c20798d8330a65a2fa1d756b6e91f902008204f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0033fc63d7f1401b67738419749d7c8f2d22ea587e2810051d2c60749877faf34a051b5a3f96e8d5cd1b29a663ee7b9d099bd418d9baa174deeafd2c917d49b174ff902008204f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0343b551be39d9111e544d5ba7119a08f13bd6bece8f73afff21e36aae365360ea04cd083887a0bec35fdc21a27347beeb48ed2b4e3961ba38ddd02ce60c7ba8b35f902008204f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ded2aa0b260a6228c62ad11d01c064bf606f97feec63fadb5ef223ea301b4259a070d3440c059e199b89b6530e9b02f925e80b3f3cdfc45e0ecede236aef28480cf902008204f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a039b8587347df1b8e7b71b4243e8b23ceff3b5afd5c1419acecd79efcf8adf301a05c67c295c5ecce8cb6922c198f3071116851740a2fc2160dad5b96aafe40944ff902008204f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04f368db21dda6bb12951cea2a2d79c50fd0a22e6bef85501e3625f3d2f47f6e5a079f641f7ad521e64b7b68aab591da07984dc734f4daf9257d8c8c3a26ca4fe47f902008204f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048fa00f9573369b3260be0aa2ebfcfd2f9a23e7e56a8d7888d0fb3b385a3d168a01b2b014178a2cdc6a9b22adc8c225fab8fa7bbee8b48431192c163b3b776a68ef902008204f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03dd5aec65cf6eaddf0e7f49c833d212c67032b78b0f20d492235b789390b822ea01bca4a367dd6444264fb09c642f437d7ce4b5151162238f0d0958e997de28734f902008204f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02b54bd02ea534f5bc09dac6feb15b9ad1d9a7b631b276a387bf9ef0c7590f3f1a00abad2dd1f4218901bdb0fcf51fc37d222638f518d6c05e5ed5cffcecf33d7a0f902008204f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a90edeb53c0a88333ba962f025a2a5422c49d1add41dc476be47bcadf0bd1a47a06d34f536f841787d490d5f7a2e24768c26f9613958649ae2d62d8fd491ce9c6cf902008204fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03c2e3e207dc93f3f7cb4a1ad9d2642db6d74002224d66a23d5c234faa186aa45a069fc52c10dc259c24b5f44a9b2ca6fd801306ed718837a55c31f98722631fc73f902008204fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03a0dc31fba76924fb295995f3bc5c86ebe54567f9a8562d67971773915bf8053a036d034c9f7d7a7a11549b1de97ce650d6f160ebbb9b486c2873f483561557c8df902008204fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03264e21132af681a782f22846f484523421f75ccb165f130ef448be9df4ad6c5a02dd888edd1ff3f2ecf36c033e0211453d70b5fefc066a2165ffb89dbe8d84a89f902008204fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cbfa545586e503e364a51c3bb5d5e80745ff827c4efb7a99efb75a33ab2bd3b1a015cfc6e9c3972898e9d3cc5201a673a9905d0b7809e3367b6494a8a43fe5f956f902008204fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05e72e7bad851af8261a86930cc75a744c47bb55e6d82493c8a4fe60268458756a04516cb41a7f1b7fa960e2a0d43e17b90320262b3f46030c3469c5c6fa41c6f3df902008204ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02d8aebc89dca195fe8a1e5a0b6bbd475145ca28e8308f6b19826b2f4c1dbc0baa006d7d4ef595a5b079994e2f0d4e09ad1880ccd051d4e44fa69d44c2ac694782bf9020082050007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e30224849371b051c4151d2d7f7e21104b26e8cf7903efe59ce2bf6d285c0f46a04f656f810a9005da8b6362e4becb010c3b2754ef3f1f34e0a8fb3b91490f7ed2f9020082050107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b90da6c7ad4d0b28fe58d4a2737ff397cae8e02980c453232193a2ce0ff84d09a05db386c71105a364c236d66450baa8e2b26e937c053892767c7b8d8f73ba4f28f9020082050207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f91bb7956572b97cf345779ed18115c7286b05045351ac998b1bdd02594b15d3a059dcbb444ec279b4de383c1f176c3ef38114aae0237aa3246ea31ada97a59ee9f9020082050307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a279a6377837c1f9eac69521e19e59f02dea418c3b8405cbf6f54a8a8726e8e9a07f40b336edd7b794529277e164455418bc838e0db93dd8de40d307e658de8951f9020082050407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f57888b52612e14b3d471c07e9ca24852086799d9b1bc639af2192b863facf8aa032d4682d4bd4de139d8edeb378ce57386bdfb18687aa235a905a3ec4e5db55b1f9020082050507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0db334e6034c8fccdfe6a20bef393968f163d3bb3e95547bf3b4a2ba58a5f7865a042eb994e5215d747cf8ee8fd832f226351b42635d3f1cba644906acfb34bf319f9020082050607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b9f7e8e69cd1816744f030c757ea301ba8dac7fee888d40809d23c1985481c93a0378ec1bcc9c5bc67fb93476966f4b2a4c79c25083bf61f87bbf3a391c884475af9020082050707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00b4b595634e4590a251b2ec2797aa6684f1e5107d670645f5d1085c360579047a02b72858f6be53942ef4a035e1a8f99aafa4c88dfb8eb9c0bac80318940a15355f9020082050807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a004221981b2db3f3eddaab3dc090016ce8454bf36b5596388659fce7dd10f43d1a018ae3dc8976e86cf3582306b7752271e356d0b274c23c0191d5fef1efe1b8ceff9020082050907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02569ba58bee0e7edd5bfebda1987bfcce97590f367607683a0ee3d5d02730ed9a04a9fbe09fa4704c673e2829be2bba769969df4eae19735a96956948b650de28ef9020082050a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02454d1d3625c49208ce6420876efa4ca1ca9c1c06812eaae8eec4551f863c062a00a2b3ac6d54890108175282ea1936b4ac15de4e93296e67620a1a119c43d7cdbf9020082050b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a5550b85a0981b5808086fd58adc18a8d9e94305aed653621ad8aca03e07b8e1a06d0c37b92b9de1e07dddd0908b39c0862a3b189e7ffa9a0dcf0bc091951b5816f9020082050c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02602d3d7db61b167bc454127bd2e781b50e4a0c00a0ed11e3228654864eb4535a053f2db269acbf2f4b7f59fd5fd21fc15b6e3625866996fc171d42ac3b47da5a7f9020082050d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c73862b4ddd5b420b35baa45f8b8ed2b52fd619dd2c1e121f7a2f5acb5758c14a00f4bbb8050aa4b072855f5811b6723d8745f328020c55402df53d45159ea4cadf9020082050e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08fa419934d3f8aef81e7e7f7897923ff50e95d5204e4f96e9b5a9cb56cb0dc3aa058374b79609d4d8292916eb9ffa12aa69fe9a398edc490d2ade19db6f7c94831f9020082050f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a061301200001006841da7b08f42f4a9f9297a91a2a9041431f2bfef6265cec92da04ab8400ee5cfcba62e61c803d29b52abb32a2ec11cc77561a89a7a5ddd9d330ef9020082051007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048c2956af65a9a0bfa6dfed38cad230d5083b856f82395debaf36654859db78da02624841f9c958ee5ed89778f5cbed8b882258fab1cc240f9599f6461e0e4cd4df9020082051107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ee4c8b728f1bfdff0623386ff29c82d7b428349208c1f815f2804fb604f10607a0650b2cd2ab4d991b514e83e539466915414b46fae75cf2620b3c504c239b1cfcf9020082051207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08443c3d7e839c1f9857c634a583ca3e8df61dff6267b17c8eaf1347d5481dfb6a03a2e506ba6b3c1b5804ce0176700efd4b221b4405525293cbdce7a744c40c0a2f9020082051307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0253d24a0e18df1d37e9a6177cb5e79906c9af1422339f97e392fec3c0f634f2ca01e1b3703a397ca243a50af4d00db9cbb330b7b3bf2784dd8e7be05d3cf90eb39f9020082051407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00fa95c4eda88c8b5dda2c82943edf357b9232e13176026b2f325c8d9c1c0f2e2a06fad11b48425ff2c0f7df782322c33df31820422ceaa9a6454c63dbdab88bdb4f901ff82051507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07eae600f3fb2c7e11803591fe2a86772c56f98c5500b9f55b5e3f8adf85fe36a9f411f5a9f1a4035dacd9834ac9b76d89cb319c8b3a2f8880024db010306ac3df9020082051607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d6038463e788bc6be3cf44b5098d117ed7e6c0e898adb774401ce36e89464caa041a961df8334754228f72f0a960f09fe829a670f2a7f9f427648d87a14eae15ef9020082051707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02761d6d469ae83678a84ac1795fef41f3937ac39d8b5390e865eb28ca95f8ccca0062a895c0a4d068c67020b0b5c94f223615918ad926fb3933889575144b532fbf9020082051807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a032768c99e480f7eb47cefcbd749221555c6803262bf4563dccf27314048dcbbfa07b8298376c92878ae872bb2aacbbc3f8d852fd94683a32737fc8816a23dcd330f9020082051907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c404b3a22bd7d6e661b45a8dcfeac130f524ab6b13d97b42a8e0b3ba9a57ed8ba0768eb9d808091645ec8efa2763580f279d74fb024047db11a79b0e745dbf1c37f9020082051a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09da0b6423e33a7c0695c0c72c1a1694b644470b71d8607fa823c1b057b07f4b3a073eae8b516757efc512459967d8603b08257099cef79e26658e23d56c0b23807f9020082051b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a412ac3c4f3d2681fd61c2865ca244ad0481bcd4df0a58f6d5bd7ad4ead16f1ba00c6c65de22cfc287f0241c8cb77b4968e11c2da3dbdd9848a6c3693922b9dd80f9020082051c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08f8e8fcfb01eaf09cd9d3bc28a80363b0519e3b178555d66f2f01ce278bfad1aa062e07fb09f052fee226a2c6290f7735b65beaee1fe09ff14aa4cfb880d0645ebf9020082051d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a013fe01fa4e14c8edb95604b3593fa29fb0fc342f42533687498e0451865888c2a01f68d34b21f114e6f073171b2242aa53e442a9cead5b8c938c4b3541111665b4f9020082051e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a051285ce9864e355ea4921d748ac04c013ddbefb8123374b7c4e52187f8c2c92da01d6cd27f8fef6575a8a673efcf209fd6feddd019ca1f3b7f2307ad44c6cae62df9020082051f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a089091cc20d35b577133ea4e6f271fa64bb37bb370a66a54a8fc4a846a949305aa021de00c43d87595f0c3dbb2837785bf8b89806997b2ea91815ed1534ba8b1ccef9020082052007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01eae9d966307d350e8560130f4ecf09484d0674dae176925ed5fb67a0f4ff810a07a44f67e3864924fd985aea4753241200b8163814eb33c1263ff76c82cb71254f9020082052107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08c2fda7f9dbb1155ec9e1803ca471cbf944b6e56f21a2474b982baecf570113ba04143c42fcdbac11300d145e15c41ada9adc1a2c7a16152cf6a32c2cca63ca642f9020082052207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b4614ce18c22fcd6fdc796c8e75546ae4197c7fc20394024a7f4637744a63697a025b7c0e85a5c2230404f05155b537fb4b3ae788076c8ff8998ec876c2c1d2d5af9020082052307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a372f097b56d03c9be4868ebd828ae80789534b91cd8357e9c6b493fa2fb6cc5a041b95b52f46473be81e3b7c6bb45b9db5b0a224d253064d37e0c56a4c474955df9020082052407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00d2806664a4d5601af2a907fcd8ced449c337523fbc092c25d029ae4a7aac24fa05a0fa81ba408ef3cbe3ef16a5bc081d92a40737964aa4734d73899afa8936a87f9020082052507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0da9ff6b1384aed064faf0fe66858c92d8840e78d51e49c197e0c4de01ab6e177a029b76f2c3983f9df13428df2a61c8fbdb2d921fce4c53c2dcaa27e43376d435af9020082052607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a61a87bb93a34c65ff2c7c3a7021cfb3bc0d93f0ae48f3d8a40ed2ab826a95dca06695acf8a48c3dacbc43cdf44c0c434f58a262264cfb7ad65a115570ab57a1a3f9020082052707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0189d88fedb432da8a7eaea99ebb8f4dd715e7598c0800e6e65f7d93e330deacaa053be09c1ecf12cd5bc0760347239c4c891ace2c9504293e349eaca18e8029eccf9020082052807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03b25b22b2b07b832ddbdd29ac8a8b4d6f10d068e50036ea16b64b5a78ecfb854a07db1608e91ab443483584ed7aa1bf4b5a4bea911c07074f8659617e8b142fd6df9020082052907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02d2e2b256d0796285bc5fe6c3d561034133057c51887b7baa375ae815ccc0f69a070f08110a2ddce34da2f2af188a5505ee1e942ba184b767b403d2981ce415752f9020082052a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eff2fa3e6a0976f0cac76cb2ac3bfa7eabc5365f8277096b04cf3c649c1df832a03d0403c82a99ccbdc3b17797dcb60d9f80905e472a4141cc15470046296be3a8f9020082052b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ca3b72403b8db6ea079c0fafb4393b2e6f489154f9e4ca4b50f293d6f20469bba021c72d4f7d0537b175f3e888cae4a0b2a768912aa97961a9f105b8b71934ef2cf9020082052c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0abecbb8e88d17a38afad6e7c9ca058f7a00e1d4a6861706b44ac97796b14b4dca07444b86d83f9eee879ce3539031eaa80a07f21c6f6d2016882d8f5481fecf1d0f9020082052d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048fad529ad4ab85571795297127b2bbe9eb6ea27e8cbc2b528e599841d042dc9a07a23b85d336918445acd4556e1e0915b676e44b58b855b14664bf0faee10d17af9020082052e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00232432f0ac36844c9d2dd4945adbe13c259cd8228e5cdd9c504e25ff73fca4fa043d071b7dba82eccb32d503707f9a90c29c302eeaf66f49a93791efd4810e1d1f9020082052f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ff4112517fab0410923e311476085b58792b08afe0db0fe82e23dab642b8c98aa076e7064483082136b650b8d594aa6390341bfa63c851f65f2fbed2e9a2f05d4bf9020082053007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06de528008bae6d92976bc72c6aec43505f71747c5524f76c19583a477dc0b76ca05783605ee885bcc7580ebb5a1e0c0e6228bd32828c868979bb8da050400b6bd0f9020082053107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03631060c8cc9892eca741e2f211d5ca160eee22da35611260d2acde7fc601eeea01dd01a4971cf2f30edf9cdaca23589137cee67418ea907d1b4021db4ab4131a4f9020082053207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c606e05f6898e55f0cc1b8565c2554a8b07995a35ebbccca9b1303ead4726444a031bb1b7d23d9ac7293f1dbfd8cd642d42927a4a2d408bceae0b8dad2086bc198f9020082053307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f26ba80efce01e975f86db7f5d832ffa11d2dec697ed9743405beebacf4461dea034ac05f8d8b50ec0cf04333176d6c5403d979124e171a41c1a852951db6c5567f9020082053407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03540fef6c618204b87fe41ad64755175d75c22c3344855ab11b06c1e739c11cba07f5d9dc26455e8d695d460fa159283f3f2ea0b96506fd4a201c9770ee5b4b928f9020082053507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ff0cab014d1252803049eac472517166b73eae2efad5295354a09165b0e12ff3a0626c787e06335eab52aaa0fa058252328f57d90830876abd5df2a413774213dcf9020082053607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ca9a997773430f21cfdd9ea59f1d3b329cd1955bb5e32a90a314fecfe9cc33d7a053a96ce9c3e260052482cd2a1b3971cba528b668c5daaa0ddb21e1040a38ef11f9020082053707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a015192a98d74dd1caa615f03399c1d747e0dbefab665de39d47ac519596660daea0525dd7da88757a6819282bfa5ac4c5b4b4fd19b4dd8f5dae5bd9a3f3a7e9c0cbf9020082053807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a021724a5450f4bdde6287a1aca4967bf5d4fdd9ade3a8e87eaf1c26df1d2ccb8aa07349e7f3bab5c5c7168f4edbb5a56049bc49c0d844339cf547f01f36c3862808f9020082053907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e71ed6591ab9fd33d7db273e79c78484f68256df6ee04b56c424dcbcab012354a026a9843950505bcdee096a8c20788a38f5766e248bd879dfc40dadc27ce3ffd0f9020082053a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bdb70f234f6e7a7b649075f6a4dd4d83d042814732693ff4b63b3cd71781f7eaa062c56775fb8c31bfbb6f8c85357286eeb94a65a19d0a1e35c4c8467c7dd9b632f9020082053b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a029b75c3ec35670e67b81d52a2e6f6e79983453e1c1c3316e4d65bafc434608b1a0545e2ee13274884b067a15c529bdc865373741f65e9127d9367dd61f8f78ed39f9020082053c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e9de6d6f4013b7cdfacb3cd7434ebb88472877249997fd802f9579393770f23da0234a711b618ac1a291a2e502d745c8c513474e6b5b807af6b56ff2f5a0c9c10cf9020082053d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a060c660b64daf4ddce233635f83cc61b1f7bb1567da9e2e18b16ed0a63cd9f528a04b189928e7d1d80f67f42fbcc161d5d72f6a76832934aed211708b7f2336bb1bf9020082053e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01d5eda102f3793a74cd044fd75dade5e4296acbb61016607673a48452ad02e05a00a9fd94649a9f1aff88df4092448f8530d5aa3cf66c95fe23c6cde6e7ac36a4cf9020082053f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a071ca64b4187dab9c2d593ccc3ce985b03def014da9049f337cc3b0a5aee8a75ca03a0fc1bfcb25ea62e237ddccf7cda183f64c5e3032fc1095e9ff8c7cb8e5b4abf9020082054007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a001169891c9650c3b02974b16f43c8d63ef7e65a3f28b22d5f2c0814d7ac2d9afa05babfb6eb1bf7374866b0d31deffcbea72282ab8cf001b2fa79bccfcf2a8b393f9020082054107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fdb7e0b96fbf2c28cfbb72343f8090f97921860138e0b02b36c18654499145aea055d4b1f1734abccd6d93bd7afbd4878ab63e70d73b2fb1f110b9ba2c0dc46992f9020082054207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0afe6f89a7f4090be8c1d80291753efd6ff9930345e2dfdc66eec34f3e8a82109a05e848060a90ece88522bb02fea028e3d160605592c1b2af7862bd0c546585dc0f9020082054307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ba8683e4fb81c08c3ce563cdb2124d1f863f3fc6b93a65cefd6e0bf197ccd206a0079db3c23a7069a302d8cd009fa761787c4e5d2e5e985dd4de28625a9323b658f9020082054407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aa225eb580e4fc61cf56a19300fd7393c9be288df897b2aebf96d5416553317ea019bc17068866d2be9d8ff3833425018bb3d90e0af3deb91516e6f7bcebdce95bf9020082054507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06d6667fe368465e13044935d5d328827a39fa8ef20da335dbc23ba866146ba13a0437e272bc8bbb6c6c066d454f40aaa9646a3bcc232cf861ad9bba64e97d81d42f9020082054607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0494af7cae50d49fb2542592c1160e5aeafddbb9634b298bdcd89d0e2144448daa025ba52e96cca44fb9332ba369b0bece3f5935b1b92d8b62bc5460f58586db603f9020082054707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0edffd83ace7322a61ee4ab6abe1868080967751d4be0bf60874b33bc39ddcbb3a008b4a1e0e44ef3d80db26fa8cf537366b68307031a2ab0d8443f537e8dfb8b5af9020082054807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c2457366413b2916813d3e5be5ff283db4e7b898457b234e6efa47ca398bc06da0683b4382aa6596c3fc9c2029808415d22b7d13f79368339ff510ea72c81e247bf9020082054907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e0b051b3d603c57e16bde938a0e3870543b7921ede03d0b22d3eb380c3e72f24a006bb7369a2b86b37420fa5fb80ace56f989c2080ff247217635f7cc48e060794f9020082054a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02d764bf6ddc284a0965850a9fc81a9f96f7ce6e7b56b9c52ccc1db4288989799a063fe3f09904072a1db459005f3f0e0ceee8514387e16fbfe0ff331ebdb214168f9020082054b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f0b52ebfd0f619929bc0034be0e411c95f518518b53becff6ea6823299917adea070c6c83af39dff511ca4dc088aff0f7e58669eeca00496b35f18254a4f24ba9cf9020082054c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a092361d48767df7fee08b1f45b7b9871482a4873acdd91c905229a33a260cec12a03ebd876440bcb5998e4df266c8eb49c524a2b34867c41bb97f940b46393cb7b8f9020082054d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0650910153a867f16edf20b4fe33747cfb4e0dc08b2f2df471d9a0a7aac389463a04f9d28299ad50e5175bdbad709bb6c38fc728ce2d3d9c25482715b7c15f7f7eff9020082054e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00682177f3d4c89a461f2463f7ffc98d6528b598d7c27b8b906ad46ca7c91a711a001e2d6c6002240fa90053a602109ff5eaf38fd003faa056a06cbe5d89018a532f9020082054f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06c15462388d66ccfa67a29e00540d5d7d437358e5cbf778fd654593334d5ce7fa01cbf6a1ac56bb663647df6100487d64e94eead36386aad594b574b6b323567d3f9020082055007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09b3e9348e0c3a606cf7db9da4201e1672ba8e7e8d038ace5c9329bc99650fb0ca049748cc5742f3157145e595cb1ba18ba057affab6305cc600ca34e2e6717ba38f9020082055107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ef0f1a58e4afa16dc3c46c79b6362ac8b5ee95c2f3eb96bf0f90069203763c35a06dd4d36d14f8613a18ebfacc4b8f575ac808538a34adc0aeb001f4caaaf84eb6f9020082055207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a002635c286b66efda4d7f4eead96b02b955db4d40c48d914d4b3df331e9b85426a011085225c6bba28b24598da1edefcb6ae6e7b5e98f48338b917dbb9498b5b2f2f9020082055307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03b3aaeaae9241acb70e8b30ecb59d6b4eff933fcce6d7ed998f28a320a4caefda0519a25e36ab9ada3ea9edaeb70a11a3986c17df6b700c681b221f3f30cb7077cf9020082055407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f9634cc5c85e9148e01352e184bce6ed25d64e3de3c3277313ce33b12f57d23a0700818ca28c5e42bcc7c8521dcc5492962e5cc3b4bc68fef462dae382b9a3caaf9020082055507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ab8d0a8488604bce18f641ac9cb3d26d39d007b477e375cf88023f1393c9376ea024fd1dfde1da5d2763cb24b30f83c7d56d4857dc10afc999824d4fc497df8935f9020082055607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0644894df9b091002b5c655b222c24efbd10b318334dd8300929cd324b5fbe71aa01a24c4eaf6e8cbf13f20529b314fbb5f76be22ca4d4f7e0281dfc6c0c9c38da1f9020082055707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d5ec1d28a03af324cf2cfefd3d8b5e43762c102a19e8684da35fdf9b3ba09da6a03bb023c9580db85d50ef969b3bb0b488dc7b4be87058068c83890ad29dbd5574f9020082055807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dcb4178a1f46f6ac474684209466fb7a8a26361d2e6cbf9d8c54ea8eaf637f6ca06ebc23b6f0b461c4a497f597348665e27ac064935bcdce58a4e50cf1ca3f758ef9020082055907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04e73f2fb486c4e10ad6be2687b3c4ce2d9623a8cc573a37f0f0dae56df813965a01afbe59a5c9b57075685fe3a2b669e6c3c7503aebc9ab3215805d641a9319d5ef9020082055a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0241926c1e29c29d50cd2e8375d21c50ffec9e180adf66a0905073b0554ea7ecca01e8da5951ea9bf21648a7b4afda6047adaa1911496231032e3f3fa2de76914faf9020082055b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a079d700a77c284dde35fcf49984a67e442c5c54fe35e17030573ceed68e96b41aa0363734c89d17524eba2f7abab93212f47ca9c0aa3398ba654046c7e47903b638f9020082055c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08c244a01b793a29316347c5bb248c87bc59aff74e02f7b8ac24981b7bbf12f1aa0516309a0407e1c567be908ed1a0d778ca78fd5ccfaa70c440642b06e2157ccf2f9020082055d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03e7324f1fff0a38b27ec758836cc787017b9242e6cb6329540f587bb83bd9f39a07afdd64e690afbe74dec73c99bf47b1d6b6c8424bca1671a35f4e94694fd5289f9020082055e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d6f42d4361520a0bcb3b3ea3ebefe5a52418ee7a37bd1d81f47d9fdcc81aaf41a05df08175afad66d1e40e8019488c704be3b624518df6e04a77bf35f9accf47c5f9020082055f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf10300c2edd727f54118fef49b99732f9afc9429db016f3b81c81ab48c01032a0572c8d470356d720086b7b12de73a63382aae03ea1eecffd853c916d7920b275f9020082056007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0404e8afa51117ac2f5ceb3b65d843e0aeea8b325f67f32b9263e37dbb3aaca36a0221935466d87d972e54de2033dba588de3a02e11bd61263dd4b4c94c4cb7afe8f9020082056107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a024f821d0258cd4a83c66cfaaac36a0f2a7f1bfd95a996f352853826a79742eaca069a5d60eb941672f97fd1aea7a7e1d2ed7d800a47045ce5b38dea1ad79d04518f9020082056207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0425a8b057c2f421f1f33456ea972671e36941ae5e2c51be1a388cab74a7a6321a02ca14cdd0740d32ad468098e9bf8edb80f27a77778e6e85f2e813faa5af53759f9020082056307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d993847037f00d4667b0ffb3c089c7699590484e0f873c7fc59318faa597c03ba01afea0d1218506b7aff6fa603a52775956f2842ae1c02fb0a2502285163409e9f9020082056407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07db19f7116ddf6a94a036a9b046ef8d4f47313627eca20f0fa578fe603a6c74aa023a2511e4189d8fbd30ac2ecc0293493ca94c7e4375d251b1d1df93ff96a30f0f9020082056507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a012370cf57c0747e6cbdeba9c78d3342638e05b1a3219841c864e16d690ef54eca041a8d7d8a11a02c11eac4b8f2d9589a3732ea4bf32ba9442c7b05da6a078c9ebf9020082056607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c4dcda32fe0675faed68b628cded7423dec7a9bba9d37f2a6846eeba04f3ce29a04bba425b0d131ddacea79c55a7537d852d2a4a77156b01548d9f58ecd298db21f9020082056707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d4ba1b5f07a1ff0be5d3b034da8e931f17ad1b58939e2f08a788f94681f16811a045c7e4d91f362470e792e3e84560467157e8da80645f8ff3790c2f8be9d0a93df9020082056807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06631e98e477133329b42e5d66e1c7f33e4d6770226b93900295ebc7cd1719493a0280de25446b84bc9cb19127f301b6788dae770e93d6960ec1859f56b39812a50f9020082056907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03ce59723ba1346ae60b048aaec7d8c137a2c2c9b56aefbd39e7e38b2d73b8c4ca010d90e703245763284cee3b5e752f205a01bea61ca735212ad575c946f654ae9f9020082056a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01d93b6bbd02915e4edbc7d23018d52363414d5df467c35d4302eb464568d1fcca07047dac869d2c7e6c21686d01b85f1cee3ef68c96a7ab17be72ab679872775d8f9020082056b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03614cdd557549dd39b7009672ff966f2fbee1a9e7bdf3495a26def538f201317a0569d12e26fa027c2a18e263bf575fcd32b4d0841854591a68efa6f6e7333b631f9020082056c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00e3c4b02d563eea32d8b42b411571e1a16eebde582f6becfc0b6b8663b095d89a039b52d7893b45dadf704168d651e4e9777d02e14c8b768ef80292dd9946b1bd2f9020082056d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a039cb9f3907a744d2af62fc16d8afdb0d9e62490b4a278eb07c3558e750671c3fa025bc2fa9028dd7955bb0205c8756718f56cb67ebe59e21296612bc7219a7551bf9020082056e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05f26693912fc46e3e64d51eb87ae71d6194e7f4b5676325ac5d9eb4fbd1bd63aa0671d59fe5066f2d6d450d9d024b25cbcbf7c859ce48580bee64905c747b00193f9020082056f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05d7b58d0c1a9da1f81538b1e44c969d034d887394ecfb73e2b28550f67abf3ada042b94815d1a2e949edd2a27daa7bc2c6fe69edad611936893801796b28408569f9020082057007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a024ca4634de9ac6fb0ca74e6e4ae3d963507096c66aa38c6fca03cc6fcca56d8ca012e1723196beb1d3d978b59e48f49a8ea4fad4300b1c43df5b5812bacb8758e2f9020082057107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eed2433ae867b16f7a87c6d78388f28a0f96323fec60fd87c2f6a62cfde332d6a065320bf7afe6ace842baa23f7898f66d9effebf550bf4b058b1980d8dcddca5ef9020082057207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a054bc998dce920f65b9da10259c37139f172e54c3e53ac328530b733a5bcb726ea05e28564f5471fa79233b1785c48039c18f59c712ce4ef9691e880232c4e62b6ef9020082057307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01bfaaa58b934b3785830205e806238d9a4d953f5e4d42626105dd0f24018367da0488f06e2a897003e630031194dbf1f2b94947873059dcaab7c3c6a8afc2db733f9020082057407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0934a03ab5183146b1497b132e2bcbf689dd7578cf9de7785bf779e78f3facaa4a06786a25bc456ef4a04a5c686304dac6d94d3cf4e4860a68789cde1ad397bc4e1f9020082057507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09c41aede6b856539fdfc78cec41e9774893b4e512f53d1f1c1dbe583ca69b2b3a07e510c401e54b024f4dccf73bc3f6d216b830b8bae6f8b39c1439839cf7bacc9f9020082057607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02efc570f1875d16c97a29844f8a6db04b456cff8c96bc25bc92f5d6a77a43d87a010b169f5768cd75abc58c8987586ad77a959bf4180a64b6a8fb44dba771b818bf9020082057707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d2a2168fb89511544b140f9682d01599e1a53d5e5b09cc72e7d100c5cddfbaaa05c0624aa1c80f2a6f844b507d62455bf9bc395aca7a464b32b3119c0ffb4f992f9020082057807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05bf90d198a9dc791a7451fea7679050b8bdf11c35aa37a3713be7b590b0d8af6a0275b0365a06e569a71a95ff3d24b47a4b599d906fc3d676ae51ba8c2cf0983d9f9020082057907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a072eadad644eff6fd747aaa4c24114c8f44d483903a9eeef5d5a2e728f56c8fc4a03be180d690fb648e6f5f7fe736af888df54924e6392aecc548b35feaeba7dbaef9020082057a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dc823b7d6d55a50690eb78320c7c9296946d1e5e2796613ad9366d479074eb09a06e2c247032cdc207f66c2eed95507be243fbff330933f9d4fdb0fef6ec3a49d7f9020082057b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a041abbce89187c7d02c7fbd86ae0a5cc2736dee1dc21c69c39cc410f461edaefaa03a36890d43f35d6ce14a11ae6133d66eed6332d9f429e941ad728b61cf7c1585f9020082057c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00ba121fffacb5e97b5293694e009ae438244b7e605d17418923a79dd4c89fe91a02fccaf71cb40d28adc44aafbc84be9760e33f453e949ae0fff68eaa646f0eed8f9020082057d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03dac6550b4fc9ce78dab83db6ef22289149e32b3f554605cfe1add704925338ba0751c6e7490f75108acc7323f58c908bd7da3c5ec44d0a438605d72f0b1f8148ff9020082057e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f5a34c498c8c5562920c03fffbd93099f3c8887f91bf365939720a00777d140aa042db7ac88361ea17fff36559868521641266dc844c37764de25d04486a1c006bf9020082057f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08b0252c32e6336b45a2b48c6f15c00b596665f3cf1439c380f29ca074dc8de64a020e3280a283aae70a109b64049aaa232dd260e0cb311b21147cb1cf1befe286ef9020082058007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09b55d31e56ac156fa3630a656abb75a26f0ea9f350c4ad44fa114a347418c158a00a574d2b8b88df139d04d59b4e51faf78e00411bfe2a1cd29d4da7295c0505bef9020082058107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ceac1394db4edfc1d8bdb9c5e81ee3d248f28542631970be14081de03f0c5309a05fef224235cdcc4f6dee778ac51e35fe6c579d7f6e6ee887b99a30b147522200f9020082058207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a096a991783f508e0e1353858d418323bd8f42c7e48a4767b185d81c751318f3b5a02ba327f0c1f4eaa313473126962c39835ac452899bfe97e00abda17f7a8429eaf9020082058307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f8a04e75c163f7bbeef03d0c62c15be52384a9187b16fbd60fcf95f3aa0c2d1a0526c0c7e063bf7530bb71c39895fed6e5430b5d2c376f9ff105a160d452bcb2af9020082058407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fe6fb0afe443235c1a561e267f3b089567eb1c4431fd535450ea5c1e9cdb2f42a01b35312465e0a330ac0778fe27506a93c2345b9d84ce5fd33ff584c575ed8c54f9020082058507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c346774e8ff67b9db059f0b75b940de8a13649602d8d3b5e1389b1784745de7da0620a97224e90bed0f431fa0f9ff3ac9a94fa0f682595d388f9c4f359b51208d9f9020082058607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d23f5d604c1f241dc7e21d2421bfe42b0266252a3d58754df8d6e9dea9b65518a0373e54837e1ab1d24272a811fbf1afba574ada5757fe7caabe0afd3414f88a5ff9020082058707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a008e6f3352c3a915b194f6bfefd0d14f9ec34ed3179c4b32e144813feb9d96b2ea005a0650a786962677957a2105aedadff28a9e95b754b1d4465213bf34611c699f9020082058807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06d83138341580727b9d31e1fb2911ebb59fea474166542ffff5cc88a6ba05eeda03b9a5e6bd86ed9e5370c124b362a47db688669af5533bd8eb9a8ef3cb4323027f9020082058907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a008cb9639c70819e4a17ac7a8274fb140ff54a6aa1317b5600fde7ee05f1eba76a0697e1c02ef3624938d151fa672d4ab73eb0291ff90071ff37ff32e82a0fc5ef4f9020082058a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04a6b27180c2931027229bd42317eacb9f476dacf525884e1a8a0cfecaabcd19fa0581a685d12d640b86fdbb94259cca008da3d3a4dc69629bfa4e82f6c45cf652bf9020082058b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a092fed6780050f27c4e45a403eebfdce30ffb37eff3dc825675a375a9b7ee7effa03930c3e7264f786623e0d34e2ed646126b984d09fa724d1bf5b54080d1ba028cf9020082058c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08c65e1b3be5df409d07c7ab92f659588d0b01649544b036c70d5672c65c53f09a029892283c3d14a2bd548e972c51294741c602f610e6b30dc73fc1fe4a1616719f9020082058d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a0214a1ceb053b0b47e4e93838b52b2cb97644fb7b70c31e810ca6017382d7b1a02faf2358b813491354c9de4fc348344f1ad6ddf60338d63f937a54bae146b455f9020082058e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0856893598dbee8186e4ca4c71f74475fdff25128686d6e771df296ec6bde8831a016f57145423b52444747ba02247be1865b568fd4f11554dce4707673223951d1f9020082058f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ba885a4c6a08371534ac15ecf2b58769a225f07addb1217db8d4f488dee9e85fa047ba1fd2b47510c2d5bc1ddab967291d9a9025d3f5e5c9edd6f3da84feef4da7f9020082059007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a333fdafb450317486ad7d8043ec182ff169475e3c78d1bc6c1c04146f710a0aa06d6ab7863e0f144d54065905ffbad43194781e25a84d0d86eb0b9e427bb3bf52f9020082059107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c1413260fdaa1ee8142cb949f061fe73d41847c6bd8ca8bdbd021012c0b2b7a0a053daec90c758275664a73bbb06f4e1b44caac908ed8fdb7d6da7ea5c1e655255f9020082059207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0623065a05755169170fe1a623b31bd45b99b71bdcc394e5fa2e5662f397f96f6a0165a7eb39cddb571aa1547eae2c25ac88709737ad98a44093c642d2b277f60b2f9020082059307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b698e963b7c782c04f72714dc85389031a6b478db1c4e8665dfa844525cf453da01404ea28fb687b4acef8ef5927f939c7ddbd3a6fc8a11421197e4a220c561b78f9020082059407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02a10f7ec4efa44206f81f183fc4df4183566c912bbea4ba2e17efa489d6f4607a06a5bc1d6e098c93870b2e0d1c15a7f69ef783dabcf3cd80817981d5ae262e680f9020082059507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a090ddb95ae6c16c4f8151ee0af5133dbb04a53da3ff1653d73fd2f1305f833344a063f61e952134c1724e764898a36c693dd3437a0106f33b8d84df22efc44fe0fff9020082059607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0063e1da5f0c409ced750b001815a10610bfc61c1790e9440b517610a4ac460a2a072b8decb824742643a09db4d2142f26920e49814fae49f20990f97819d9aa67df9020082059707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05304f56c4407c4a62d4045054bc8690c48264fa1c1c4053d8fddd7c99690c541a06e17c279dc221ed1ac1fd8d284c5b478ff8f6525fdbcfe0769378db74a9ff5aff901ff82059807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003269f8d1def2cbaafd0d623e3bfd2d4f6e5c5a54e1905cfdcdced15a458c6622c55a02917ac530694bb7193756e5cb7acc9c9402ce756af612ecb2358c3e94d9afb9ff9020082059907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06e44ddbd8f0bac6bb6fa23ff6409f68e057166675053f8759165933385b27495a079ddd2f83e7f8002ab623907b9ef987a1ddc7491620febb2f9678c78c0c735e3f9020082059a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a076e7a4d11f45bd73f4a37343f45bd6071ba0eae7a28b4971b3463c42f9570bd2a045babc052409f64a4d364d858ff235703a5f0f1097cb72a214a48107783dd0b9f9020082059b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d8280ceea400fa798a07fe0a3d77b0ae2ee76d0533fc967632da1843a2445a96a0733e837d09697006a6565bc8bc100730ed7da1f78d92d28ae490c4228bb1ac55f9020082059c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a7af9aaed201af63849d73cf1dc666f33418df121cd37bac126866025a22f965a060c9ea919bca54d2b5e0dd40c6cad1f951bfe98abb39590be5342a04aafeaf13f9020082059d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f1c33db0a2d37eeb660f29053c43c9745d04e22374c18b2e69c623bae8e47b70a0517c3f667bed6818b3d840cf4a835e480e24fc6e14b7e79359a955314c806bd3f9020082059e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a097e6033f891e29a01e1fa04f2f3feebb0a238e9dbe7b8e9834dbaed4d5c951aba03f66b74c23b48b106d7f26d44142e9bf15813e3f5a05006899ccc9b06ea36b3cf9020082059f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05f3ba013b059dad52a4307c1e958f485959c0c757c496bca1873e2de7b0f662aa052db931bdd4c357963fc148ea7af8af451bbb21cd7d99104d262c11ed7013efaf902008205a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a034707753e269d7c1ee2b9c881a86e40df960611763cbebc478ad97655a2240d8a00d55dad95ec6d6011771b575ccb0114ef10f36cc34b8b9de37c4d0779d01d3e0f902008205a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a015df90e0e7c9eaab1a5f395323609979a5a9860e1995b55e1539ef496e097d21a036cc9d9478f6e55e8867ec8f5dd3d0742d240113b942e123a98b8ee7de096ba0f902008205a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0593deaa169f7816c576a68cf15052f6231d40e6b265c855c2058810391c9b21ba05e89b7c1af76143b66e4ebf1b7abccb2ba58b14d3b81411126a6ed8bf7a48ce5f902008205a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05a6f941242c3436278e0d3ee3af9d652e738ebff56a2aff9055b510fb0723f2ba00f3002ff4297e270427fa04665b321e91ea44682fdf3fe166044a26b17cdb752f902008205a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09a71ae5bd0c873b00c27a844d5bd6581f605cf1813851a6df87120e60274a759a028d570e85f1ad9509f68e1bf8746edd47f1ef7359830d5b31c262ff0ce83450cf902008205a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a018d13943c59c174cd2abb45713065666f7781e6aec4aae361028d332a20f6ef2a05019faf8dfa4d4a13d9f69f228626728bb7e3e295ef8d32f83c3065ed1b27aecf902008205a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0231b0d5a3e4e897b176f5bce29a5ed4c3f4f1e01d8dac9716382cc8b99c6faf0a02c0cfccdc3a02af9815d724f65896a397ce5444af433a52e6317554a62d16c65f902008205a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0989e9887dfc4461dc0a61d5f17d83ae76253c19364e8438eae6a444d37ef90fea03ad6c00e3d750c878c37dd6bf8f389bb6e84dd09966b3be84b81f51aac299529f902008205a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044fcc4ee212645b6aa5e216c880cad0404d52a25057078faaefd4a13b7ab81bfa00848147714b1e604bb017cb705a4a4d16582d9eaeabdf313a8a57c99d752d679f902008205a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a248d0e15be4a54391d013d7d21966842176f4d0024db95fc91f47f8712b1307a0144f9e196fafbbccdb3e4b547af07d9bd283166c63b0ccc065f8aba222fde363f902008205aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0049739b06a17e3e55348661e955d4a11b4ce8a6bcd7e193ae2bdb5fbc7d07e07a0313c8dbd00e08a9e7eb1d5ed982332ec29598467e9d4cdd7fe6370252aaf9692f902008205ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ebe2d37a6f3af7aa235982f8832ae31484a1eb85fec2ffe8a4ebc0dfe543ee9da07225f8237b866a7386296d85dffa6ac5d4dbfb490dc68ba34ec408d9beac263ff902008205ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07988bbebe1950b7b04ccfdb8bb278d881bffa97c033326a135a334bcc0b6b994a01758ee3c394dcd4db0b3e26862d8a7dbfc85cf8f886b3e88e8999928dac1ad1ff902008205ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0333dfbc79d6ecb387291ad2fc28ce1706f596b9dace3a2eff70889031084118da00ee161cb62764d4fdffab6cd30df40bf490d97cc87fc1be7e95ec40018640f38f902008205ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c8c3b7a5b24a238edbd1cc35c4cd56a99dbc70c06c72d9b14432d7fa8972f18ea00bddb72d90125899d05d73ae83645c0654772c890119e205aaddb4c9cd8f50b1f902008205af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bc1131784771d60d5fad29fd0b579d419dcbefbd698b01f36b8a1ae400a9c14da02e7940de61f31d723ca7c87d91ebc5a2b7fb56174a068f15a86da3050e49258df902008205b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cb747543cd059f8f48a0041f1b5437b5b08ea2e52b87b283a582feb9b65e41f2a016974ede7fd6e0aeaa0a2319bc8178d8f42e804f780e6e3255f1bf157e4b98bff902008205b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b5038646a8aceb9d36fe82e67e7dd8d2f52750270b04a55673972341cc41c566a0238e0cb4632fd6835335f7e4599b4019cb3668d2317bdf57cfbbcd5990606a43f902008205b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0818666bf5fb037d55ce8e76f8f941510ef06e17ed41aeef198b79252d69dfc97a0043988cbe1a32a2424a8eb6a09548b100531f6d7af0800fef9b73a5a487a0470f902008205b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08d530a07c34ac477bd10779aaf3a1709002a407374e892b8c726f6a2e9cb5016a063199d97f2b1182290e78eecd42437e2922b3d62bd9892f659aa547317a74d02f902008205b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0999272265e16658d737e7bda82812df27cee125fdc56df584141cce48b407478a07f91972b8e898a53487f7104431a44534f4ec78bf7f95d430873bd1b8aac10c8f902008205b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a1d14e901f6a8e0bb2db37d7a50dafc23a0a740be61dc998bad4adf67908bbd8a05c6f48b50b37e9f109e18c328a31b148b245e727ad451b327e8ac13da7ae348af902008205b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a044fd9ce8d8345afe957e6e22fbe814925bef9accd5f01c8fe76f2b62e554b039a003ef7f1119fe2dc326895e624c938bfc59f87ec7b592931a73cab56f7b721a70f902008205b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a089e92f6555a3cd7b03d3dfef741c5d1989a6517739705afe7dcb2ca09ecac794a039a4820140a6e187f7d3fda12787d82db1ee01d033b1364b5a2d717d355caea7f902008205b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0adb92c20b1e5c80ddbb99976bba1daa4b8d318b5e3d99830ed33035a99c4f6ffa0337e75500d9906d9b2c6e4b09a45ef79ab6f85b1dd69f119225ee76c1b363edef902008205b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dca06ce4cea35add203694370a08c768edcb38fe6c492c1126cd625b2c66488ea05f5fe8ea1395441c95bda4084bd6d92930486ebe8635776243ee1a09c1234166f902008205ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0037380f42e5a97217aa56cbd20e847521a1a2b3038648dccbc97d9597bf97088a07db93b707e9c52bc456b80f59a6fa758df971301d2f07a419ae3bea769ad31f3f902008205bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cb49c38a8a446441d824a4e59ce5cb254008384d61e7cddcc8e9075b394894daa0629354ccfb918e69ef243ce77421784e24b7a5611866372e77675725185d45a2f902008205bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e93e3999770973f6c79064b09b4c3ad77789bdded1c3dc03240eaca76618d6ffa022aa0cc2ce5df2afd94be6efbc49a734dcfa15fef39fe359377900c9bcac01b4f902008205bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a0019aab8a69fb2290fede8b11b7add59acfec6f4f3ef1c635682c5a948cc0d0a05ff85727a7c9591b91f9a800dd8f221ff6df3d99678b9c1e11bde5b0220e7a74f902008205be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0873bac0184be305dc74c17b8f8e348ae3d5fef33133eb17e5f1e05f2da1cf8d0a05131f9bd9d441975465aed9edc6bfd02c07e7857ef4f156622ea3e205b0b8fedf902008205bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00ef3e7d71799210f713801c0a6ad9b3988a88c8fbb3d7fc28a3d6356854fe7e0a055df668d1f3ff2d3a5b8585b8622241729b0c4f7bba04d1d2debfe050b884572f902008205c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00f017ca0ed87cbcefa96ea7bf8dabd49039b3d4310958a9090717313957347bda05f07593314e8b206ff652ec8cfa57ade41ddece38778de7a5e883cc9660ad795f902008205c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0055e9cedef178c9044ecf6d0035b55a96df0253964d6462213e1d1384876b127a03f122b9e4de52dc54fea4306da0fdcec568456d003dd8ed4fc3e81628f7470caf902008205c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00c76a2bcbc3676aedd4982eb8bc19644e6666dbde04fd7ceafeec79322d6e013a012d8555c002023f06e47dc478a298b8ebe903a6ef01a93689e64d0a3951fda39f902008205c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02133b976f01286c0604108cc7219eeb3502a54ee09af8590567de0dea7fd1fdca03d66efad614334a2f0ca887f5c118d6542d3b4a63a19a8bf55bc05dd2a9a5736f902008205c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a004e6cc33736d8905c19381e6cdb16e8abfaedd66f09729438f91a32801e6e684a01a412f74f6b0aa3c23bfac1d7842f8157a6f4bcb364ead66b4ae091e08f90a4cf902008205c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04ac81d42e8bcd90cd1410217d5b7737eded3effaf9caf6fd55f8efd581b2da89a0412016983e064917ebc85627150796c7c2061d1fa8fc1e1d9cbc47caa44b3781f902008205c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a066a5c7db22d2b5a614ebbcea87ec412d4b2916bff634b426ca7484811da472dfa01bfa48f2ab9c3bdf7db3c784aba8668a0d69287be5bd4e07a1b7164b36e876b2f902008205c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0154734e2a21e19d2df6bef5d3afcf1d7928aaff70d99fe3a1e32809aa5a874b3a05efeac94c67e0b48f6bd2b3fc35671896a93d495e1fcce9fe6da6feb65f2b0f0f902008205c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0445be77906d0151c2b09dd76d783653b40553bd79795c6a625d85649b1d300e2a046f40bfa1fa9441b8a92776a3ed20d291234e715a74d8db79da3216eaf99f8d2f902008205c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0665f67a2acbc03ff06e49db57311b99f1172c295d291b7b6723b752086cd80dca004c0c050d3134f4fbbc49172cefc5eb761e189930ea482ce99d668b5f991f32ff902008205ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cbfd1fcbd5daa1fc77df9d58ff76b411ea075f0ce35d4719141a5ee1a65f4f93a00fc54c9eaeef136f5dc063de561ee5a820f44b42c816e6d837ff458f5eecd4def902008205cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07b3395135fb9b4c0421631e1940d45aa196f633a9abf82ba18810e18e6d1d122a0637910a2285d09799b640dd1e69998676a73ed5e54dec42393ee6460e82dc492f902008205cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b5a14f47290ace8cc3bee37c0b2ffa7f7b5e8547dd6b3d6a4e0cc8a8342e7005a0773f9049e4ac8a5f9cd967631a78d4e53fed5a84d235d73479983d25276f8780f902008205cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05e7b5d50c284d9fb5c9464b087fd4c29d5539739ebe56028076e1c0fa1121b02a02b000b62a5a37802064d3741a466bd752407a2be91c4cf9667ca934ed36112f3f902008205ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04308b1896eab0c25f710b4f91cb3cd7bae669afa03dd0e7360dd01ebba4f38c9a07abdb2df4d9b24a50b7f8a56b57a0a48ccdca7c02922c455482ab179526ecfa2f902008205cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01d540f5c08bcebdd9d69e37d7a2df365414dbae0ac5a1fb898d3c681f25f725ba01beba7c0a9b4053cc07bf9c20b2078338d19d5119811e4d660e72a7d11fadd69f902008205d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0355eec195d1493121947a112a17a5406f4f7b00c5b3fd8944c21ab1d2b6debd9a046893bd28d3b22a0f47bb76ddaabe3ea1245cc29c53a4771f179185face4025af902008205d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02c314a994a7141242856cb941400db273af347926dbec550e9473dbe74aef095a007b26a820e84d0c5a625267f119dc21b57261d2fb63bcbc8bcddf0d4450e8756f902008205d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a37ce18bc0ad3ae4eecd01940ee2807fe4672affc6a5ac75fea4e2e733427467a0391b4d96a3fdd44318f9ea9d62bf183ce1e26eae00509d730310b8ebcf7920b0f902008205d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e95dbc4649c7a5cd08073c74418febf86e1336e1978a0d3993e7b43e64542ec8a02674f29f384a8d09b684b2a73f688ef3829a15b5ef3a0ed6e488c65db6bd3feff902008205d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0280748209c0df422eb955fe08ce0c39465b8227dca1ec84776e4212bf89b0bfca00882c6cfbd4a9f87f6065dbe005c7cee8e1b7517a99e7a1bc89edfcbd510929cf902008205d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c51169ae803da5e5f2bbc625b1de6edbbf8b5d65fc0ca4304d06e051e51de569a0109a2ed0f7fa415984b31e39cdc7dc6961c5e85fa1cc524c501eedd62e671a5ff902008205d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a098d19445042a65f88b4b77d5e21cf427c68ea4220f59f2f8f6c041643ae9f628a07e97bfabd055c9288cdc987b96f7dc971ebcf6744d3e20cce4a95bddb82462abf902008205d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01015331b08e4459c8d3e6e13103f96c4884745df2aaeefc8cc6d787f976d15aba05ffe123f7360be7f4c99bbec884c83cf31c448cdb76805004fb2a4124e7f907bf902008205d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c167932334c2b0be7981bb751c959dab2a41d583385eab0c50b2995ce4bc6515a07fdf151f82fd936f093b900e206d62cd78edb8336186735c5d52451c278bc76ef902008205d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0196cf7794ed3e70e37daf3a8067f4b04edf00f004eaa56ae83f2eef79448d05da06fd01577dedf28826cec8a17902d0b517eabf85d96312c55870389b73720f375f902008205da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a021a41122d7897098cdbea0755389ebdd245ab0ad6e356de1b04def75e66b84f2a015e601885798cbe1c0eb644a693e57c8b557e5ca41480b24e59d141f05fd1a5df902008205db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fbd962448762059aa7036e61b61a02fffa2f0b24e527fe82d04807b2fe8beb4ba03afe60760ce8fd2ae24f0781fb9776d023a5bb25b4fa66604d72bb781ebeecb0f902008205dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a034c0d85515dd2c0273af0cd3c727af6f3888800443f6dfa0938a32af25d1aa75a06452e524aa9a5a57320f07e3869560c3c60a1dbdd728b37cb78760a03208591ff902008205dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d291dafb3a2ba56daf01fc370632450951d8e46940792806e205c1a7f4fda56ca079d2d031efb2a9fd950696c0836447d7c079bc760317f20ca21e27369770f0a0f902008205de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a086c1f5306a0c3159258ca3456cd652d72d61dc6a158855445fdab6c615e572eea049a658a3c1225176d71676d6e3a3d0a8df4da4b413bd8497904e7b305dbe2159f902008205df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a014989cf20a179c51d24a4bbe851203ae1af5b1e301af7ac3c92a6d298581ff98a04597b724297f808c4bc657c5df4635c3c542123808c2a35f1287663061b62664f902008205e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a007846b7b63568dffa545e9f1ae734b29de8f67c6ed2d46356bd827d6cd9d9f03a03cdd8238c241382c5d23962c77b10327cb6e88275ce2f5e7dbf1778078981886f902008205e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0097e0e7ed597d85729314f6ecc07dd9ff5af680437d1289a1592cf5966414344a01458abff2f5d85a256baedda3ecaa038fc5f5a9ef347d881712a3be9d1fc2503f902008205e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c5bd8dd1bef1d1133c582a7c322d626dc1971a44c4620e0a4ee9633d17b08d2fa07de1a34ce280e3df3715f734eeb6d63acf0c846b621409b254beb0ff47b54360f902008205e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09630120902f222deff0d99e3c50280b522339eba6d3f6d86c61a1ac3adb4d363a00520763b93b8df41dfce6c31045622ee09f4f0bcd2cd96fcdf69d4ee5beddf01f902008205e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b78325e1c43da7c12d6fa728cbabe424b2a15e964f6de4acb0244f9ba61ed9f6a075055f1162d3090308401f2780706b76bf76ae2c0b38755c57e3233ba6c1251ef902008205e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a015edb31ac9ed092708737918f565c154acc2a2b6a0aa052ff6d4652f0740d3faa07784e41cc8cc6b48582a405399dd9204184da23f7e006e68ea1342eb737f5811f902008205e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05e80a0dd2884576269e086f90601ef7f74cf38ab1dd18aec3b6cb30e116ee0c2a06cd302c1d6822711ea6116ef51bb04ca7f3616f061ac62e8da721f3373587652f902008205e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b0e3c62f3c542406e6712049ecc0e41128a14a78cf0fa93c503e02c33b774bf0a01f9f29b8a45e07edd584c7ddc7b3765ac717804894987e4c69d474257a18dd3cf902008205e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08f00857df45ead1592fad456a3b10e365533be8a623cc698be67fe6079b23db9a07e65bc69dda24f7d6629f5b963393f87194e258195b933e19cbfdac7336eb96cf902008205e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0695784a3d7f342c1c0794b888e901755bd410c9fd20e70252775b8ce7134d32ca026f377a9ec408d230193f72fada41c7ce1f276282767501a292531a937b7da60f902008205ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04600c7a120fcf3e686e8fc45daa75d2fc30784467fcc6d99381dd703b0a0524aa06b22076aa82b0fb3d46baff97a311be8e752865f443b6486d07b95e70c320d91f902008205eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b3380b534499bf6bd62c4bd3524fb8af4062289dcd552e27bca9d213800e6c52a05c06510e822a1afca28c90465373b8c08543902eb230891dfc2b0c531a8d2ffdf902008205ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e3b713b0ad25d2e70268b43a6837d681ef859287d1aaaf4ca2a142d75e20d7d5a02bedc2bc7f23b9d02542cebae53ccd4f26c4f805afdf617f87a791eacdd5fbeef902008205ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e912350c9f5c5d203642900686b5ea36ad5ce0118e4c5508b076a7dc3cec0f8aa0574496a59a1c373c41ca2a1b439df1088f007331776a323b8e9eb1f716431777f902008205ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d52a943af819a3d6a3b673e34d62390c129f21ea997e1f88608a4a590c30bcfaa01f58052c8175156f06bc3cf34fb8f17f3f137c1adbdd867f84c6c3022db08ff6f902008205ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09ef299099f8b7951e7a4ef0bef1330cc14f4aaa278219c4189e75c66919bb39ca04da1aaa286805b40150e37c55fca59439e3b2338264a934d45d1ea54b605bb64f902008205f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a073a084d7e7578c3f23af534a2d790a478ec63a881537d07d54ca4045103d17d3a0680dff98219686dccc09977a0f82d83b6d03bb00faf0a38e45a0f9abc44e6732f902008205f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0af841b8c1733b6f9d14185edef98f7b12fc76abf1788c657927156e44db0cd50a0157e424b3dd40af321344fdaca23747c2510fa9e4ffc00b6f3e8188edc06a354f902008205f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c37794372f0f02bf95e741aacea93b105f6153aa301040662202848d9bb477a8a07939fc67fa05ea5a6cca788286922582b68ea8e75c442c484d598af0bc06471df902008205f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04e362b4da4299757ba8bbe136e9358032ef211057e7ee7c143dda3d0fb232c12a04e9c5b7c17057517f96f44e520e6780962317d6b3099ee02f5c704bdcb8a8e6cf902008205f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f511f72bacabcb8ac68f586648614da870bdac615a36424a7fd890e14ee93971a06bc74b92169896226deb3ee3fcfb60e6750be869c9344dd391347bd623c6fee9f902008205f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f4d3b8b9ccac0add68f3f285b088eb14ae1b68bd69811598dd103f58e7076134a019cd40df03e5eb8eba33980736093b65e0130a376c3eb2e0215c42ed6abd7cd1f902008205f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f4b77c7c72d00d31b377f55f4e64192932678a3c175ec16f0a92452f9b595ce5a039216781182aa01885de4d665bd8d61ab85f2e8bb0f0e91ffaf2434638b0aa52f902008205f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06498ce770eab2ce12203c78fe1ea380ad610f3a65fca783ffc83b07bed98d717a07d17de1092e0bbac120734261bd1dfec4a5a339243a4eb9d10cb98d90bba3532f902008205f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09cd889c6a62444ce6505de65806168931cda136d7d538bf95b9e0bb00ae2e041a068e1d3f221846bab5961ae584e725c34ed08bed60a49b2c467480b56e1350181f902008205f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e4f7640742fda2d98b886450ccacc25dd13b87a8f3b7c8b7669a372bd58476fda01124506f46461f4a430234c70571f9ae4116e541b9827a9e361273b62b9cfa01f902008205fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a061232f5ccb058ed211043aa046ce87876618b9db960760fbf302644020753b63a009b5801bb6a2db5d9a2184a746675eb14e45e86ce278d1d752d755eba0b946c0f902008205fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d419476a92229e325968c95f295088ae786d6fe471782c476739e1966862665ea07ff979f14406393c9ac8ebbb1b2124cb981855086abcfe7a7ea7520222da416cf902008205fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03d98ddf89bdae11331e4bd556d48e91877582b1dab2ef511bbefdae3858f733ea06e7be8e4cf3f90af1646a0b597e6bcf5f98bf07059dd5e411544edbf1e6eb547f902008205fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06468df42fb6538fcb4e35b8e6ec7ace8a44be7110e1bd23b8d57886e27994b91a03da2aba01fcb4aab91f98303fd066f21322f0df72b275f22941fb4efa3bdf179f902008205fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06749961b373d0385feeb3c6355b5e10950fd4fd33b24e24c7093530f1f0f7a29a03f6cffaae756f1e2f59a8a6d4ddcc6618987375d9ce32045680d1f8522611d70f902008205ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d86205b3104052973dcb15bb3a9ea6cab7f6716d836a519fb298b06e6d485d6a047be8d9be1a8d218efb230544fbe1a56aab8477539cad26ea97c8f7f5a794caff9020082060007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ca633c64435000aa1b52c387dd0508d3d338f842fbbb657a8fd0986c40614e10a004f8cf7a6759c608a9ef5b57090cbcb937cd78763630f29053cccf8e092d4071f9020082060107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08b1a8d450330900082c807f8bc4b9c5ca5fd3d50f1803eccfdbd169c89ed6924a017abbd2c24e7bf82b4f4c50d1d9249aa91aee9f9676135ab3f18be969e7a7684f9020082060207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04adc27afbce2aca550f3f4e6d7305e2bf9bdd77b689cc4b1d50026bbaf3c209da019deb29b19a2622ddb9e04b05bfa628d507adea594c2102f6b78e6262445bb20f9020082060307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a042e053ce21d30477e665d20e6d0ba3c4e22754e865da12bd5abfaaf606f16cf5a027faeeb2a4f37ff571dc8cfdc6c3121576d0e9baf4e390e531e0947a6e23e2dbf9020082060407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0163123453055707fa9c792b68351c94f48b7f73e7424c562b6e9c083becf7a99a079824c977e82ffe9768af8d0fecafd3d6bb28c9ce6526c2b377f70a09d640f28f9020082060507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a094ed9ff2f4b49758107a1237663139ab0e535f2d6f09d45c9ddac5a279dc50aba05cbabf9d54906702205a3dab69a441896f95e5e0b3e3c7ab5a8bc5963c2c6d7df9020082060607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a047f1ed0295f7ef4b6dd6da69922ae47bba364a419fd37f378980fea2d95c48eda053114b834158e73b3395f4726e259ca460e887b5005ef4b9a64870cb082f4ae4f9020082060707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09da3445a077799f760f7a9644911b55f2896e5e490f1cba667abac25b232bb7fa06d982e01816b870567faddfcf80e849160990aa224b55ba0626029e2fcbb10d1f9020082060807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a049021cd57a3d4b2c412b4f92434b2ffad1bebd0f74c90b70fbd2eb2820e6f349a0781b78b6e22dd54cdcec541b0facfb65e2325f9faa425c03d11845b5c77f2d2bf9020082060907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01a4063b01dedc06714be0ed90648b8752c8ded0e770f3430e0d143589d64f4cda00c930481c3666b8f8a9456d4764875c8295b4f1dea4eb3a3907083e448b31827f9020082060a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a043585a5d27d5e26ab3f0e65f7bd471cd0d77067ca16c76f0c5adb4669535fc4ca02d92c28d38e8b6d37ec5c7a1248d162a71ce8f5406d16b52bd00afeecef6bb69f9020082060b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d91d22837c064ef8fdb927fbae4d47ae15867064d2727a18902b8f64c23bef0da07f397e10d07a97f70c6329ea01ea27962cad7c6622b2efb078b579de01cf3c18f9020082060c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c27a4058203ecc193a3c5e19e65d8f1bbd2528a1808b40d9343457e31abf06c0a027324ce80d6048019c28f9e8c93ffa057f742c5cb05ae4b12c96e588bf215598f9020082060d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a031056658e03ddfd45caa85b936eafc1c15cf7cf90e01d255fb123ff509e06f0ca029c5f9572263de26b5a2671e1b7ab051105a6f987f494182abc8689b1e1e2c9bf9020082060e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0805fab6ce0f88d556726bec55f0a8de7eec8d18aaabf153c1123d699b9ea32fea06605c3e6c9d0d8cffa6aec83aa28890f2a5528a0c73e12ffd00ec940410057ebf9020082060f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c65a5e4e8f5054900736151523b97bb18157cb589de5c9f0ea622ec68f44697a03bedf264abf6f35ba7501fec53e835b51827113a46c88fbd7d913f3ce21de74df9020082061007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a059f19316a6a5761c993ca4a181d6a614c9c9b0add55271b84998d643ecc1cf90a023306fc70d09d4c4eaab23a0032ac64a9c2c8b63800a911298bc83d0c72c83b3f9020082061107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cde2e846c2cebf278612a844c388d94de69a55e050b06615cc4a51a420fc3282a054a9f5fa93de6dc9b41c474e663c8fe7d91c4768e3b75e7651aedaa2d0f0cd3af9020082061207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f21ab6ce96c11ba079c2aeb2a045a4b47e4b449193ff556cc829574ffc1662b5a029746f5df63bc8d52649d57d484ae9f54d82810a03d5d7fcf0d595c1250d94b6f9020082061307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f916b6552afce6d62f1422fd084dc4f6bfb05f656b831e13b57e0125c8e767a0a04fd8a81f7665dc422ee53d7bf49d81d4940a54c4bfbe6d33bc4a7ec656121cadf9020082061407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a014b5a43da607076ba3540e21733c409bc825defc6bd58b0a87c9fe70c7702c7ea01cb401fe35f29f279b71329ae4d972bdec5e000334db0373abdb8f31cd8ecca4f9020082061507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08d71e63fc19ec9fb249eeb0a6f72a4e18e30187d55585191b6d00be1ca1f4c82a02cc36f869045c272ba8e646e8eab6ff6839bc8d653f3d54381a0fa607c4d0716f9020082061607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09191270ee2a23f0603dda32c495a53c757f0a3ecc1b8aec829c86f43af8934e9a02f375d4ada597c4d6413442089590cea592922fdd7b3f0c495d61bf174e50b65f9020082061707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a036e568a2f6c5c97fa7096801dc8c4d039c806642d54c7d8edce8557f18ebd52fa04773fba3a6466fa4bb60e4594a763526c915f07671faf7f22e20f105d3441159f9020082061807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d74f12e69ec83502b32e54521955e2be4b38bb184e3066fb2aaf202b76ea6fdba07edd1df47e6309798f0d8e3e0441a54c611affc12d244300a3a4291a3a2f14edf9020082061907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00da8c02f196ce89055af2033bfed4bb495c6bbc11ca754db4c5989dec1558b7ea06efa543ad1d661f120187e4af51dc89e8679862dec823a88cdddbb4e959b8c56f9020082061a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0758b7ffbed537703847e87f891f14334e0d37f36af5ab10082ba5d3e6d4048a3a0789d9ea80503ed106be2a08a8be6eacbf5e5ecb15054c3c1d68d0fca135730c9f9020082061b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05648a131390be46b6bf056a5bd241181f8a8c16e941d7222be3fd0c2813ef1e4a04a43535755c881707be76181dcc1ab4cc087603ea6ab2a4b190ca0d3f934fdf9f9020082061c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0728c5f97c97b8e85df5896a35bb4a05d0db59800fb5aca42df23bd451e1c6fc0a05f4f812566241b36f5d60a5dda3bf1a37f47ea73a45070bcb00aba3aac2f6c1df9020082061d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0858a08f9915246ebac55cd2680f630291d1a342cb9cabde17591accb2fd3b5f6a0753eb208e728c1125748faecdeaefc119baf05f35b76dec65b81a173bb6e9f73f9020082061e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0575938836ba80703ac38f1540d093649bad2353bc0dfd7f9eeeb99fedaa5c229a045c0c31b1ee7255b59a2b2e33bc75131c0924aade6c4f5d694a5ee403b27381cf9020082061f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae45757e3bc0ed8db3815ee8d364810774794fd630b8010035a7b70f15fc50c9a06f85756a2e004351aae2c0d2733ed763aadee8fdabde8b22b7461571a1d48545f9020082062007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ba627ff31e2bbc086b1396c7bf2a76b4675579e69acbfc5b5d0884cd8fc742faa001d6ea63fa34c600b1ad3d9780f0d5269ca856a45c45f8dc487aec41dc6fd595f9020082062107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e0bdae2e6102078def62aa483d972967dcd307c52a754704caaf94662489cc1ba03387cb6649855f49a53771c8c0effb96f8999683bb8d256eefe4cbe7e72d0153f9020082062207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b27ebbf9204d5d2b7f2e878e4c1326251b4afbd66a6ce41a2f3dc0a672abbc34a05bb9d303f62a85be30a9f434c3692e6b7feb9938f726bd9d382795ff65474a10f9020082062307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ee3a05d15a86347c8092555eb18f49d77793d8f98d317ef0ecef0ab3790d7bb3a03c686b79f8f6b90e11941a67eb37aa068a143aeaddadf02b21ca826e33ab7aa8f9020082062407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ceb014b7e3f7ea1fb34f6a5098895d17a905ccdcab2b40a26330848ab440a520a06e7ab62c7abb16c9967c72503ee204e2bb9b7e417972886441ef69a4bceb6c1df9020082062507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c318f04c8b186db5d4177758c7be4a0ecbc10b0d864f567218c21e0c5c66e3bca00c7e776a4d0949d4ff7af0d1b55939302f4aa556167fbf7903c645f28dd6ca54f9020082062607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00605169e831de477aacbd2ee9ae969b6e849736ecac1818e85f2ed79c760f676a037fd1eeb20d88c9cdc002d9cc5dcbe66a740195e8243d6be876ba51b7943a7dcf9020082062707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a043d8d2169620e914d3a4fec40cc6853313dcf3a7a4a6b4f69d2c8669561143c4a0092f466f6c44dd9e0eb4f3a2defce72ff5f273435d3820e9f5d27bf6098ea4f3f9020082062807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02d09b7855f1b032d16223f4975765adacb1e9203fe949264e2b93860713409b5a05afe66597b6d3d616f5c10c809f3dce2fb284024d1feca7317e06a1a3abc592ff9020082062907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0066862c486f8c2843b7ad3d414bfa03b1830369e53793fbfd2862f2bc774a73ba02b9514f9ac35c49afb3fc7048b6e0b4ce89e0dd29bffa3088dc7407115bfadc9f9020082062a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02587675f24251b2553aa3fb9d42db964d0560c752f0aa934f0ad632e45c242afa040dc019e4ee455d71f6a493c36027945775da52638cba339fea158f53ec00dc1f9020082062b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f02626c73bd7369c355b844aac2ba94ecbd1dd7f4fbc3b2dc72dd65f29e50b0ea04dd71693d884aa43b5048091df10f2dc9dff05aac18176f896402e6f6a3333f8f9020082062c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04b87c14c7a57d3bac7fdfcd84573f7ecb3b0da4d6af41390d9d825f1136ef7fca02116d526a5a966a258f3451cbb55389f488eab1a5a0b2615d163e0768d662accf9020082062d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a095cd704fa30576a6d12b50b33b9ea539185a26dc5f2aa9ca1b4af42f3bf4fa46a020c8500f67c313b557031e870d703f5956b66a96369b6e0d216e97e3c5b0c16af9020082062e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a7ccc35a47661ba854979dc4018d93889b724a9876d51aaafce9520d318275c2a014e7ab0d5236826c02420a231f6e22cb5fc4d7fe99fb073c44d57474fcb0409df9020082062f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0901da90f94c08eefbef851a6c1c4367c5e5e753fa86483f992b8d1589f796754a00ddddef3f98c9afe6e19a66fd8db1e8041b814c4ca121dff8280b483164ee149f9020082063007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eef65cf0ffc1ccffd5bf97d374d60e098ff2a497c602da285543c268b14fc2eaa07294efa500b547878c74b8a09c3690b0b5eaae47c72a5c7c9073e2cc1031bad5f9020082063107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06521b4ad46dc1b9c7026feb026554c07a4ca617763c906998a3533e47d624d26a00ee10de16180b30c9b82ad354d10046ed29a833951e10d4d8497b69bb682c6a8f9020082063207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c022a4d7f15c568e29650deac402e9871fa1a3dd88318019e74945aa10a22d95a022fe88a30c903d52727fe4ed4255f656393a2f1bf0c33065927c35b2931c37e1f9020082063307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ae5467a1df505386c7fa55ff0b69d3fc26f5bb78635c9717736bc7cc4f5d3adca017bb851966b45d80d2a034de1351781797c4206eac1788a2351109c8700c3589f9020082063407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07cd65e505c7f9124599dc2a3bbcc2ddae235cca9c55909f8913e7a47a410155aa03a2a9f16aa0424f6857679a10c50745f4fb9d0121ce329d71389f72fe5e8f56ff9020082063507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c1de1092aaba4a1a61d9302a33282ccb67583157659b5c436b109d657c67b8a9a04c3c640f69eb85ce05fe574db8f53e5c97f2004519fdb2423907dfaa046ab9d2f9020082063607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00f2f60d29712a8f5e9b055c5263fb4784d37763875712f77d36e72d602a379b0a017c6257c3e03407bd1a527e54be52a74d49eea2666cce335591bd6e88fda311ff9020082063707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0856dccd4c95df3d9ae6e9fd9a8d73bac58fb3373d8c581dd693d9dd6bab73a9ba05800ed6974c92bba03c6634cad3d7726715b21cb555a5f6fabfa9c39fe2b8e5bf9020082063807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0af69a11803065bd4a460f3532abf613fa68f7db05b80696b25fe608113505db9a04040761a295716d12128d9dd4d4f5b32b0c541bf3bacc45b6dbd27658fbf560ff9020082063907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ec438f97982125d4acac890c165cf9d589e0d38e54f6aef9b9e5518c4a35d66ea059173d0f4ea535b7bb69111ad8a7a5300a6347b4f36e31108eb822240ba9ea48f9020082063a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0715b1022e9e4248550c1a271cc2c478c065b06d70236344bb18c9fc0033d97fea0139189e265f872c900e58e55661e868ab6f8557bb26cac1c4029f8ab34e0ec07f9020082063b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07cb94667f58694c8d5b3aad2548ebde532719c98e6e7e40e1610523128324ef2a022513beeee7dd4a94b752d2986aa09a411ab95b89c129ca0bcb8b89d7a6c7c5ef9020082063c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01f2bda49434a8cff59a7402954ec6d34778c4e80ccc1915de5e38513e5cc8332a024d6194e1a50d511ed7995f442190589f88aa2898c315aad44c156283ec82d67f9020082063d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07eb5f09c9e2cf3fd5900f6212b040edf0f35a0210e88db42203b67eb057226dfa00cd4c079690737da4409306664a9e715a09b1baf0346de025dd68e8398fa6ea0f9020082063e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dabc73bb843bd746400fae643e92045b0ac632ec9964401eabded07b3c2f28f8a0493dc3b1ea2be72116c2a8a72cb7e3f593df9755b93ef7bce6eb869dc0c17916f9020082063f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0deba30fb76ecd3db0be868d7efc18ee3cfa0fc5eb973aa522424b585c5ca8833a05e56c25fe073138516062146a9e09595d5bb2d4f321e6025c7add440cc65107bf9020082064007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d80b246294a9856b4b9b423df8b2262c4f3ac5349e9060536e5e7e124326062a04929dacf4f87faaa73860c4aaa0bdf9e06db47b958bdaba3ed87f2a023a5b06cf9020082064107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06d4176c8f67c870b86ef11098a15519caa51009f530f7d31f53e46b0382ed3a6a02edd1626b1b8c45138588dd322675d3291cb24bbcaa34e0b58f7f9a00a89cd00f9020082064207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04e5aee31d8b83848b19c70274a509277e0ccfb3170647fe500cb142162b92a82a03d48b3924acf5412f3974208f8efdb12e9d5446bb72c3a3acf972acb78eaaf79f9020082064307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0de27eb99eb107f87cba7f2cd54b7eb71d5e25ec99bd72ec3c7b8755b53fbc74ba040f84dfa731e3eb1eecd86cf71afe1118ee4138879b54cf4dec2f49ce76c7831f9020082064407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a003d35a5c66b5a9eff3a12f82839526093a5008fb57eee929f11a880141042755a065711f337280b70813676b282db1f8f154629726b7ea40f5e980af6f1f942426f9020082064507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a079a4d401f538f7d0aca9056e51983c69bf2164e1171d8e8490d29d95c6712b6fa041a76e1c31700b70d134a05309d2a48d7104de95d7fe9c618a2d9e65612c86d3f9020082064607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d841234a0df56ef1b15876d50d1731aff50e11826688140605ef0c7df6f6ac93a05549b2d1f06d7d5d7087e1fa8e74bed2f5192de362638c44847e806d902f6d46f9020082064707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0123cbb732c3772e679fdfb17240a3818be85c04eaed844a5414653564bb46e9da06acf8d67adc86fd0fee8b55839cac13367365ac509fe5dcd0b34265a35650ee0f9020082064807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a065e45abda59c2afd7371624d58fd81aacec60518b9a593647801b86d582c28c7a078aec8a153565368120a02308d6b106824ae4ff006c8344dbf750a9b9bace018f9020082064907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f1975256c01a662ad8b6a3734edfae7a3377b00593825423726110e607ef64e3a02c77b23d13be95bcc7053fc62803df88c06ad9c350be20cd58ba04d749551440f9020082064a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a070c2243acfa7fcdd726e53bf2518e11b634160fa00612bb46882c956a9bdf51fa047c0c27f2325911d4e9e5fcdf3a7309e3a07b48b6e229a0b49f64bd29d661dbaf9020082064b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a096f979dd0a55bcaf28f39c7db8ca0527196db98bf262930a8c407981fb45dccba0333d55bcc441f5496aa93f0ba642359fbd3e6c169566982b7313d7c0aee04f1ff9020082064c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a007371de47a6bbcdd64abbb321c7966f7c99ec1c75f686ff7b3f111671354ca1da02885014eeab02eadfe74c712b4b6029cdbca60a27192681529f56f66a29e9d7bf9020082064d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02a77d78c6c015104ff1ca42b0bb81b2dce843ae9862f5681f41a5b8a09b7b671a073233e447b74a1fa02b8616b9042bfa304c4f01d00097e80ba4e522de0e63029f9020082064e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f10e51f7c737f33555966894bf34cec0cd74d7ab93245917e513fb8e9b2bfe2ea0538840d0aa9868ece0d45a1cbf8fe84345c455efa06a1afb7bc94e971ded1a27f9020082064f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a003f3b2819e62b80d5fc894348ae423cd48814471d7dcd7bdab5b531b1dc6d303a05cda17ceefaa907072612269ac9b6091b0c7ad8f9c0058ea6950cf30cd63d5f5f9020082065007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03c1111e7fcddcac50d5874ab3826ad32b69a2b53523b147d6e8f697c5982d24fa0038f356c8f78a2acc88be9308edfcb189e2ec78e3e932420483f714d06d760cff9020082065107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ab9a18c9b0fd42e465a671c97a9ba5f07165feaa9bf76438332f94aa10561d9a0151f96818df57f84f22289336735dfc5b93c4267195a264bec5de33b2ac3d7fff9020082065207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fec2f387eb0b35718dce4382bb7f4f87ebd3d8d66b8863ff4d16fa40ca4faeefa03915e0daca8cfe40f5efb0e595c9be99bb925d1c55d789b219b7d784dff2bf35f9020082065307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f2d655bad5cb4fcd1970dbe4158b873b1d13c04482b9f1f4586c4e34d7c55d1aa0494bc108a8ee701bfdb8716558766f27f0fe6982c315325d05af873293f7338cf9020082065407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f4b5f1952701649fab7171a47fa86cf85eb6539f475711a0afac444b65c59193a00499f529ff56e68e6eec6104f2aa15bcb012803a6362aac9e64b3449ad35a701f9020082065507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fc8239f333dc166b23c558d09e1f7f395cd109645d13d0f3a24322dfd8996f35a040f7688eb831f710b2fe60207fe12b8e01a9e51577c179acd32b4bc0b90fd4ebf9020082065607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a046c12cb0558456879ba1b6618d437c17a11d10e28438da1233c4d0ad0a7fa50ca00986f338ac284be24b0e4b1f1c91f1770d8ee44b1d437cd615b8443f52befdd4f9020082065707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072599c374bb24795d8e8677a9e0c151958366204741d582d209ea5d58562b83ca03cc23fbff5f6e6f7287666c13df42722b8a68b957846dd503c845c7535bd859cf9020082065807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d285848634eff279c9993184e469bd76a3e2c5f579bcdca2ebd042ee95798c8aa04afcacf64456a5f14b3965eb2eee3bf0b20a48d5510b8827b2e4cb3741d22273f9020082065907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01220817cc4d49bcc7616e9eab1ec6dd478edf4bedddd6b371a6ba18c5e20a678a047b913ce489dbc785fcee68fbee1b53c59f4e2e911d27a988c43a819adf890d8f9020082065a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a060d8163ea305d6f2aaa66ad0370ff2e00dca024f731264a88bfd3110c61347a3a02a40bc7913244b83af6eee2a012491aee5c0ffce259300fc01be3e9bef755b02f9020082065b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ccd31c4ba5aa24b2e1a3b78b1fcb53a3b14d08351dfcb6dee813b957eb3982a9a01376c2a148aae04c5be10d39bce63dc5ca91bb018b49d25d882ddc596e4afa7ff9020082065c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04db5b4d71b324dcfd6ccba96280efc145b7e9f05ea808679c714bec3dc62e54ea03df9dbfa7888171de845c030e97926d25072e33b52a8346228b8ba4ede376edbf9020082065d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04f4f9ec742a2a1dfbf296ace6957547a74941d87965db07af686f7dccf3df75fa06ccf082a4a7fb1c41937023e5d768c16bce907e547d73a8c9f6f934f72612f3df9020082065e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a015624899bf657458b900adfc3614e42ad367f202d20739dfc2a3944179a2a0f0a07b0269cf15595b15fea1441e7724459435e8279bd96e040088a81b505bb55fc9f9020082065f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c3db80a38c45405822149d05a024f4824adb1c1614b0313b1741ee63b55424b8a028d946d81ff56c0c08e7a0959203c6b36f97312106cfd7f3e9a5e36aa1a2d3a5f9020082066007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e02e23fb6fd26330779a78bd166be16774d5e33d43bdadef341f2cb8cd47d35ea0019e0f5a4b7bf7ef2bcce960aaa3f6e1404ad084743f317867b1e7c894bc7194f9020082066107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a049e1e53bb3802e6c1ef8430a7988ae8c73122adb5b7058ed1bd45e36695842faa03ae6c4cc6963455a3a9874bac1da1be5af2113df465b1d4ab4971bae50e0e867f9020082066207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ea87f0cb84a837977bc1b3b6d25d219afdb4003410d4f30e7ab434976ca1e7d4a07489047117041dc901b00cb49ff35d9236b77e1f745a9bfa0a719e1fab78544ef9020082066307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d8312e73786c25ddae476edf1aeb2e5902b73e9135c03bccb6e1f0c5fe0e5e0aa053e2a28769090da696553de4aae95393174d2b7ac4772e6f5547292db2919a11f9020082066407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f5da98c719ffd3aa3a09155c7834eb0b92798f2e7c1a616e48c9d34c489a64bea005b7967300cab829091bcdaf22b99edbcc0854c26d1e451fe0ec2046c50c79e1f9020082066507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a030515cacc2e597431bc938836435d02d80613c36f62c31f4248e3d3b95631d38a041366ffea29b9b190d4d153c2f3dea25b3afa4466f4f8ca675663b03199413b3f9020082066607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0067e64845ac7f1cbc28a753dec913200bbb99c85a631d716731572fc1c8ee412a01c7fdf1719ce3ae8cf9f5807e171d340943ef28227f047a2a3cf1b6a859d4ea1f9020082066707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a049805f079945d17545656a8fa543160a7e3cd1c26af7011b12360d6da403d114a077f018f23af4192344350e67068d2b2cb67e99c8bfa51bcfb85e0c9fb0915358f9020082066807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cd5b4844c8111d4aa0b8cfc27a98ca6c68dd00197f30caba9e25ab6fdf0fcd8aa0303fa7c6ff9dc10972e34c0e3b371fb3d57f580c39c5f581bffe6a0b8a98fa0bf9020082066907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a088a408ce1f8961b42035396c7bf40b928d72aff799625dc48db1350bbd1e497da02ba4e53a868371e18c2f699cb2644d901599352f17e330cdc1d0800e03b4c14ff9020082066a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07e6aea831dc7bd2ee31d249300608c859eb643ac8e06ea998842028f40048bffa0716f21cea9ab146446e845b78b093827b291852b78aedf020e0a7b6ce57c112bf9020082066b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b8dbc8f2d447c49a8eb2a03b3a3aab76e359f5ad9d5d6144a930ac76e6bbbe20a065eafbff6cfc6a9747c1dc0ca34b0bacad0332be31ad4fe2f978ffa6d1299e09f9020082066c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a077b2fe1faa3234b885a127a46161ed33f9996df7f5875fa91e5bdd724f3065c7a04ade76188a37f1381048ac1a3aa9fc3478f3e0b157c785f7b9eeeae0458666bef9020082066d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0434706588578b85e7a1210ec2400d85e91cfd221e72a1d2eacd039c2107d94a8a07e5010ffe186b1bff8786dea9c66751df604aabbff44bfd7e6f5dab8b46785d0f9020082066e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cf9c7a3dc7de407fedec28eedb3e583a7ca1584d8a77e897498fdbce3d71ee82a0281bb79ebdc131624008ad800d602788cc36a44528425708e3ed577e2ac0311df9020082066f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00759d5b00fc3eba9e67d704be6537e5c9bc28b715c95e1ebd0529de9b9ae8b83a04947fab5f9fea6b79179bd9882066f071bd01b164f916a05c2fc783d76f871d2f9020082067007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05433992e43d2e1aea2d90714fdbffab236704dba01b39e82a629aa2d4a0c78dba0133ab35114d78cc8a02be3366adad56cf46948e3730760abd9edd75d4dadfa70f901ff82067107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03615aea7ce703a94bf615381fbe3d57dd34a4689c41c2c3c1315534d75d6f7b09f54ba9ac6318f4cdd0c08b6a3390258a34d7b57a1ae8efa55ad258b0a2efc4af9020082067207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c7e4b842bdb5de2abec90cf215cb0255d260ef2aa772bcb71d0cf21bcdc454dfa008fb778d04976db4ff994f77ffcf7f382026406d6e34d7fe01a786a44e34c430f9020082067307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03fd9f491bdd3a9d02f91c03a9b29670d9ec818de32c374d35702935aeeb2ef7fa02c6413f56027b1e47bb4f048c44b5f2c19a001adfe9df03405f7a7b46dae1a7df9020082067407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c30551c188c20f74093a5c24c9c0c02b47bdc51831167f1a9607b9a865c5f267a03870442128536459b9356b30b440c74b01aa276a3f30cecb65d31d12e62dda4df9020082067507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01fb4325c7649ce84d90b8f4477505df5b2db724385d1ee16d245d337ebc8e0a7a0513f0f3c1b6f2a7c5b888b52e4e2e98a03b2243eb122d14a4b5637d611c189a4f9020082067607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09a41aeab58a99e80df4f52c1d6a948b4aa4f7a05cf3d01408c0e686b5f9acf3ba01353581bf1eb24c2ced2474943ed82a7d26bdca398162043aa3638f111e3ba02f9020082067707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c75c5f88ec8962a27fa91e2057bba7efc8f0769eae42b292e01d12585225559fa0349f6f2e3ab0ffe21d723eb3e39fa361e7c14873cd0a2f731a792618db6fc04ef9020082067807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ecaeabffb29f96c7aec5374afbddb8df715d2980b2e27804232d2a4373e3f366a043eb7910e075e3d826dab2396a6b286fbdec55367c7c55ad35f32009e1300540f9020082067907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a37d0383aa9bf34d7de4ed6efe03b7a353ef5b31b9dc79beac511ac9906e7325a04b3ae3fa0afd0f1ed5ea4785d927efe392e48dd1bb18eebb2a3588fcdb4f938df9020082067a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e6afbb9adc4ff8001d31e55bb933d7a181c0d0edec4f8a0291c4855cb5bd9ef1a02690d7fc76cdb6a0c6b5aa662282c6cff1bacebf88011ece56d72e100bfa2f34f9020082067b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07324b5831e291f001f1c8d09de2e9f0af5d20ee6fadeaa811b236b9c5cac58b4a021db0691d4e6887274ae8f100f913f309a8fd9af8ebb2f857c417e5b372652c8f9020082067c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0397996c80b2182cf7f7186c68eb3db82a4873a8de9ecc6a2c4f541fbd4a64adea025a06f4cdaf5377d1003ed892deb8e9f99947b8a8054aee076c5c21d44e31ea4f9020082067d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a028d1222f0d865b8b9abf6a3fb8cb75749b6cbeefdf5c8cd00e51bc6f1306e85fa055c7ddabd900cfc2c018cf5519dc301afd74217b8c2335c9a3ec68d3a6dda0c3f9020082067e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eadfa64545e46da483c6883928af5d2859b6b2b0ae75ae9e2a35534935e21c3ba03b96895e4b36a9bda81ca179a61c83de4ea18dc86bf306e211f2cb2951ac440ff9020082067f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04bcfc38062acae52a3064daba29f87635615f616a2e3171a934fd6061195e0e8a071f7f8723e2cc8eac37e8cae958404dedfa296c7fcc8365a9ef2ca7942fb334af9020082068007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f7c37d81bcfd3f4905d33773d26beab78444f71467d4e7d2b98c55622760c543a0621edb20d1ec580090a4f7e16569ab1925b00b15e58f536843d35f19ee038255f9020082068107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a8c7319bb946526667c14ddf4cc84ca6c18bb2b4556a136d04716b142b8b5366a024a07ad5158fe87c0fd06c362b88031cb4c67cddd7e9235a0b73aab8558c01d8f9020082068207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e44aeac777a06c74f4200348a9d28e209a75f411db9c7296a84d1a27eb59ccffa037343e4bc25b013f43b2219cf6b3297f09950cd726dfc0e597d1ec5c23f4e7c0f9020082068307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c2504a880b2a90a9c7c2c0c98c2042c0eb529e6b5a81fc441de37219a16c19eca04617813ce7fc1e908cbf5ed39b08cff9dbbe9eb5a3e08d939c04e35ff6d24988f9020082068407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07b3a9de0e321cae73a5904d667cd7b82b04011cb95a3815bd288d226b8de5df5a008c236c88053891f323a8911ed16848972501ca621cac08acf20e82af62bef23f9020082068507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c48e5fe9de6c396d730f14d7943c07783aac1662322cead8b370b125a73d8e11a064510760c380a1237e1095c09594ebd5562c2911a10d0890686e9aab0a166249f9020082068607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a041038db9c2c8aa77cea70d85e7f27f80af540c4c4716f2b7a0c79961d4a0704da0200d2a814042b1ab1208061861299422b9b6262b105eca6c578ea2d0f24e23fcf9020082068707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03baa221e00337f6ce3663dc981b0bc7c410fc13a6f98beff7f28a6076ff8baeba0752eae6cdc4483fa18d464d9c716f4feda0efc235ad65027cc22f999156408b7f9020082068807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a064c75bfcc378e9cbff4d96134e8e5894f6deff5c63cb93845b3e07df68ecf7f7a052931e7e792eb1ec982ff09cf5962dcf6cbf0906db20dff8906022b45b0a6daaf9020082068907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09eab7155a5c17ba3a7fa65972e73a71f80a427ac263553df663479cd96006ef7a028b5343c5b8542d19e5bdd3a087531161d5319f9969ef4a34d0ef02e25c7285cf9020082068a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d0cf956b493ca08d7dccfe978dbbe270babe91c6d5ad69dd2779ff414f3636da068d9e47bfd6f12ea08303f9cb5f45302aeec2d4d2d5e952e232c93a3b018a5e5f9020082068b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0977d7c4a527965af46f375bb4c65f3269aea192bb7e90bd81f9e8621b95c3820a07d1e416a79b5fac1a60aee1f8191070f0ea851359c6f5321e87b17d5da7d7a57f9020082068c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a18588e88716730ce6d7882df5a703fa7da9493a5a4234c5ff2eca2652eb93faa02c938e239226ea1fe779f34fd9b4a21304f2aa220e3d28a7367e70837964e716f9020082068d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a1113349d636fb3b1408dadb36cadc774ccdfbefa9ab0fc530c58250f0c8e007a0119e4106bea4c7b436030c914101d270dbca921f9fc21868f321397cf65dee9ef9020082068e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a018663f454b3e147f7f0add68a4e26524ce33c95fc4d326c7db1014d04153a824a073e3be41ded96691e55b5c658e40dbea785742dfaf00f1b15709f70544b60438f9020082068f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05ad683b9921e565897e523af83e22f93692837ba9a97d10bcd0da4cf592a7f92a07f548c7d54920cd71644ac6de62a59c2b96fde2bd1c572f3ea996d3a20b11394f9020082069007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b77dc22e066837233f4ff63747477455044a44a9a56ee3b1dcf2017d0a466fb0a00cbcca1ec2f802ffcd65a8ddbb3aab20efba651f84ca794dee70af11613e6651f9020082069107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05259affd3b81ef4601b3ecf6c369ed24674ea21c11603b5233be46dd3984f589a04c0f282bc49e8fe79f4f7d3118cd025b4ecfd15f82477c2d58d6d1caa5a463e9f9020082069207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02419a0bf1a00376d63f6c042a34b4d5fcbf43579170d4e618ebc3bac36614767a02cd025a416084d459c5f576eed025344fcf241c74ae1a2d4410b88091e3bc78ff9020082069307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a067050c2fbe367a633357dce0840679924a2a186327d1382607cf730adc66feada07f9a9dba5f143183dc660cd71823b0e99c685570352d21ac6ac9c96b6e1fc577f901ff82069407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a064745448fe9cd1bc4208b59d570a0c6f5ba9503be6fa3f9a6a937c7a43b206b79f1cc32c05a9f837b859a1c13d9cfb84e6999020b470c034bf0751ff8181a1b4f9020082069507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a070a93f418a789c34ae278be171ae2cf1ee4af05944c9b53b6df8b9d44fee47d2a0579ca7201f3326d714e668df1f113e06c01ac17227bfe4c7ec8ba72ddae21424f9020082069607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a047c1294b02b2c83410cb83790b8863d5725e430bcd129bbf0a30ba0a4841fc2ea01f90b3f60d3ff6452a83f5c30722492fadd3c4260cfa0d520f20219625d8e073f9020082069707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ed6fb6309e38ab8b7c03238bdcd1a5cea4a46fcba97ce3b7f0b994893a4db1b7a02794fa90db30370617c2b242df00671c880b9422892cc8bc954f3cf82844779bf9020082069807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a014310e77e5902059f89f3de4c10205408e1d63357990250e6782e58708dd7b1ca01b8bdeff9023e3e886fbc89807454335f1ed91cb833ee0f76f27a9abdce39deef9020082069907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a052756c00ce331380d6ca899530c35150da6051015962c62f5b48f5f38ed9e4e0a0248256889cbf2269c45d6130c378089d57cc207439371f830d6c6fb97c7b176ef9020082069a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b1c58a20b1b838f9e6df3254624423d44f837df59befc4999bd1e664628dca06a01dc0728efd709b8720ea34b5e2a83d8846d5e767276340f7e999abb2a217fb64f9020082069b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b169156f19714466ef5dfab18c57006432fe722db2a124c7c9e251b140153c44a058e767d8faf347254b246290ee7cd678d114d21b6465d442946537e941cdd411f9020082069c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03d4c5fc46a787f019282e499fe44d49c9b8e3fbc7586204868b49ef93d665d46a05e4406fc0706ff4607dadd6991932352a18fbf26cc7aa683959d756be85029cbf9020082069d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08741e1a0940aaf76c4748abec09ca0a49f294a957cbe248615b7c02bd4e3bd61a07ed47b358971db55e8a4840234a06de8966a4de191021816724ba8d42e8d0cc9f9020082069e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01543801811e0978649e95d9872209299164dea955b146d78edf3e84b9ce48334a02020a278e694af46c3a8f0917af4720058f1342a0664adaa61b708a4e69765f7f9020082069f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09c194818f864db2136fc0b80697f26f6e12b294e10c184c0573109c7087d1fcaa059b8fe7a72798ac81b1e5b4f32ccf719041980e92df8c5c1b79b1ad1bc12b203f902008206a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07da4417652bd1ce68847a392976a0ddb5f2da7203d8006a09e1085fc963396b5a011dae7a8881c8650a3642fab332cf86bb3619c9dbed95968c4fdf509d8453f34f902008206a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d5b1dbf2ca7e1555a152a417586c039e2e679fb53259bdea7027d0401f79822ba0524f7a63a8458272dea7e6f84f7e689668b5993a383bc10f20111d3472b0da67f902008206a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0194bcdf381bed461976bdd76113364370ad6549e436b5e2cd4db5bb811d4e8dea05a1a4e87a4d8ceae545c32abfc29e508abb1acd4d89e8e6358304853e4b81832f902008206a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bf2f8cc97e43eb134e06038a5a78b0139562376f9aec8e6eb892b616ca5f16c4a0250de0cdec25624f32a461676dded863a131efba450435ae88d437dcbc6cf507f902008206a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0588f5427ef3d57660a21fa6685fafcd3d09bebf3af8f714a806eca21a6b3755ba045bd9ba5e2c12a8d95dcb5dfb00130073c6fc5b60c8895c51e8f9cbd5191c087f902008206a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a096fd2ebd5927d02e664e4e91e4c705549b874b407771f153006cf336a8de4a62a0126ecce66f0b5afdcbda5fa4e2ec4f5f38e64f12ba22e346636197a32f8d4e05f902008206a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b4bde08deb9cf7d887442138551c5e43432206ade4c33e433caccd15901fd255a05ad4f306f69a2f6f4c4874534698baa72812d63bb409e6356d3ac0a3440c2aa9f902008206a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09e7afd04f444b482912d75cc2cecbb172bd28fc181efebb018ef44eb8ac47173a076c9c478777c30387253bb0971188f39823741ba8d648fa071bde9de118b80edf902008206a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a046d60765b8a748d5e9413efe5527c24573bde15d4d715393ed7708eef0c2922ca024977c95bb0c0b627d1cf5221cfa15d2fa38dce80b00d45b744c8f7c77c2928ef902008206a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09c94a854f42edd7e4d98dd93fed2dde91f607bbd52c69bf411d7b84716eaf6aaa07b35416aa530b0a345bba555154719f2db71a5279a94d0091063327e8e58847cf902008206aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b2cbc657098a78d8ddd837ae8ac1029922b2f1639aecf962a3ce457d810f14bea008a3d385e75d6c6e1feb6b3bd0108ea4cea33f5bb7fa395f206cb560158aeacff902008206ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f1e130e2dade821edbe0b77fffb47eafe8cc39f2af62e248a79558dd668c62aca0475811597886a7636c414703afd2d74caafccb4e9ac840b54c54eaa8689f513cf902008206ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09fa9103b465d6ab281bca8946d1802265211022dd5314bec43a000b05551e5fea06c53da392718ab50785528df4ca06400cf0ea5422c5c7b68c1774f98cd8f73a5f902008206ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a008930319fa16a4ad82b9654ccf0e06f736f6eedbc436566bb45d883c9cc02226a03a7d969c828271f9f6ef559ba861cda94943020bc2391a6f6c25cb56ed63bacff902008206ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04d4c4be5618c0d7b271575e69fbc8d1eaee0a67a41ada99a63d14337ca1e420ba00e0fa99a28f8dced949c42add8849e34536fb4b47c0217c32990822de2f5a705f902008206af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf5b0204e137286cf6c77246bc444ca32b3a74b5326685c66f003b756c8e3e58a057672f0e5d3eb58ffab4af0934504d149f15ac6caeebe9a0f92c8a3b32ca7508f902008206b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05749be21d8f3827a0806059193cafa97570bf66f7389f03eb02ff8861802e8cfa02ed1e3bb1ab7737150552ba501475c71aa10eb823982d93801a44349726689bff902008206b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e0a6e9d82e689debdc551af7b42612bfaa84e4aeeb5a6c3dffd2e2553cef1a56a00e59bee3c9fb93e2e409e16e058d83d56b31263703584990a2fc6e847184c112f902008206b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06fca8d50dd5e6d2428dfca742b6988026da98237d8e70701c701d50b393cf61da00ecc41220962cfea76cd340c2867381865726292c79ef590585e51aaded3a3bcf902008206b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09199309eaf77b658680ca4b066dc06d286c64a0e3ee8110f7348582356aed375a0527df078d9ffcaa67881010269fa27855c7eb520077bd740ecd0b14090b79b93f902008206b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03fe0826991a6fe7a714bd51f4142e0b7c5e90f2b0fe4e476dcba0e73e982061da04396873788bec4aeadf3012f19c2b8bb29ba3a25fc952a416e3e886f190123aaf902008206b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08084aa5b828a9dc41c78c6c8dfbfddad195494c788efcd083502d349c5735aa1a04a9d21970f01ca9b21d56de8a099fdd247f336adcfc2acf10884c6c7fb16d5a1f902008206b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05e94aabee2fc5c268016610acd4bf1395ec3d4dccd8400c449b132943bf25a06a00750374e47e426921f865609df08c1f09271fca7907bcfb55182c1c33da8386af902008206b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0416543ec227a57e76f089893de7adbeb255c61581b64410302a2d284eb2c0796a06ac3c6eb9b3ccc90a18cf2b33a2e9e88e7235a7f4472ccb7aa6db28bbb889a74f902008206b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d2cf716ad1b1d164dad4435d826139b0c6f545adc49fe808d88dd8eec2edcf78a0493b8d61240bb38705a2ff53b50005134b78a0a0b0b0a88ab1f22403317a64d1f902008206b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09ace9ea7f887ae6abd7eff270c3a6ac38b581621567067559e8fe5fc5611cc53a06a8ae7c63453b9eb63e41c5274cba5c9b66803241f5ce73b6e5ee01f70aaf707f902008206ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a076ae2e5064114368812a5dea75941690ae642c752b1836f751bfa1dc8e72cfcca05ca5e67c84a3db282adc7d6e70c5335f423ecd447bba1780317ab8f36110c2b6f902008206bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ca11d85f98f4f8b95ec48ea19d414a34e95a0c3a420ab0948e288d93a93c769ca01f98fb8f20f369ed262faa11daa6551b5242839b51302e8b4f55e443ef1bcd4ff902008206bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05a327b0b52da797b6fe89f491c1850596a8c2c50453f326eaaf04435e04bcb85a0424328e521dbee2fe40050174ad8965a2e5c2a8b1d8ad9bcb775a5a090fa1b49f902008206bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e8b741a56c195b95098899aa470a96fe0046a02a74b76d1455d9b7f5af4036c0a045c6a15b72f4e3a32d93bb5d7a8879b1751e790366b6821bdca2f503348ade49f902008206be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cb1a1da5e427ad6aa93daacba373efd16f134b1529fa980e08de2ec2e85231a0a0338774c389148ee81947b6b685d0543ecc9b4a00608f4d5df7b73a3f0e97b865f902008206bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fa7e0dc7445469e8d75adc68091b686b773fc015c4ef0f0742c8a055a0c6ce2ea033cb0b427bbe8aeb4c9a6dc2fd65a4bc1b38d268fbe80f9039f613ef811a08e1f902008206c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09ed7786438c445eda207120efcf74f38be64e5606389b2effc37c09960c97b23a06b4266d010aae162e3e3d44d33a6d781e59ec11a1f4e24a7232da60ec83ad610f902008206c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d44c10fe87da4ae4ff44969532b1aa1eb1439067808b363825ce0732d98aa86da045bed7c00f2ca1db2146ead427377f4af7cf0dea346cee1b779cba4192b889b7f902008206c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bcefa85ac01f8cf1cf0a957b71007b2ac5cc0e8bf223055c299da3f62faa20f6a07e16678c41eee2a979ac32f540411f95cec9229a489aa9f0576704366f441afbf902008206c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a089c87f244e5b8bd0a8c7ab057ed4a8fd683326681d31b939d5f7df7e7daf3875a06c81914f4d9da0efa424b55f94eaf0ca978ccafcdedc20fc43a478482769cd42f902008206c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f3ff352877d79f145991a4322752e84b64610a81681f296953ec6f28e486e3f1a0483146bf0940e759c8d968f407a011c9a995d96905f15d4729357cd5881f382cf901ff8206c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003259fe75bdeb803ae54d2065edfd011b36783cd06af473b8084ad25d9eb29930bf4a00de23a66caea3ee96f2366cf4775a98d088b1b480e87840d56e567f17d69dd3bf902008206c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02df993029b08eb0cb2e2e414c1c59bcfdfd2fedd96927d14f7b0117c816832c2a0048557310bf81f7b0aa0b849ee6da2e4bbda68b61bad047b45d3715ce947b01ff902008206c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00180a776b36a08df4487968c1ab81fae69d509b1c54399d28fff52e7d3cb91b9a0510de88762dcad8f05466c9c18f102bab6732feeb0c7b239d336d9075f415e9ef902008206c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0191dd09dc4de738686e32a9d65d0aafe51d6b2f28a53dfc2ec4d745c4afd952da02c9d9367f44eb42c5e87a305bb3e491e7b0e71a0938d9fba869ec1d47397b7d8f902008206c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bf8d22970df2df37aceb521e7813345ca799fc9cf210d821072da07bb5db61c3a0621fab8cfe1243faeb42a7d4a2d514bbec628d07b892b25704718dbe7c8d61fff902008206ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a34203976d4d31e3b12eed623d31997b74c3dc47c6eac990baf1da6c9a11149ea071b57cb97d9629ba4e401d4bcf9336fd9eb76bdbf927b5d351a9b24a099589cdf902008206cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b24ba80ff38a28165b4dc77b35efec546c4cccf75f8aa951c8489364403406a5a06b61f11efcf18cf65e8ddf2da38297e37f68fe6684e9d4479641f37dffdd9d19f902008206cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02bf8b14ff249a7718520d2365e3e2272639d4fcb2e854c4f483c70d63215c8efa05abd7a0b622d556e5de1dfc66c7eab503519eb96cafda4e8a4ec8fcfe57f3cbdf902008206cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03b40a02f165f8cfb81f4b790c8906573dc66d4513b63fa67db483617841d77cba001d2b2b1293741ed94ba612dc3c5e86688b9473200234c20296f5eea71d5e897f902008206ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a091a48127894d0283ab2c0ec733938d437f4151bd9749670aa61d8a48b5fe5bfea015e9b9b7bf4742a977410549be393e697d1dd05d971c822f6b7a9897e6d5f64bf902008206cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a067a2fe8e275be3aa7ad5b11889d688280e362297f6450077df4b993d5db3098fa05949bed87f647723d7c00c08c942ed9ebb6bd8a5aebb6bc4c6969beb0ee91cb5f902008206d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d7091d0450103b4694ec6114395adef7d51ac3bb5ca95890aaabb7e83fe5c2c7a020e776446174ee8471591362b3938c849b7d04ca66faf85fc2d4ec1c67b2bf2cf902008206d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fab4b564410e54d493fb133b5892cacf26d6ee9a97b12c30c044e6ef0733d667a037da1ad834d6a358ab1a8403b95a2ee83ea065934e22fbc8248e278a48643183f902008206d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d115b3204c442280b3f021ea8565b9544d8da28636f2b2533bf2e8dd19e9b527a04ef92a65de4d8ccac3908eaf45e42cbfb96deac263f30c7279a792649af8b3bff902008206d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a001cfb82429b2679cb2004880301173617b2f95a4fd1e32fe5aa0dee78cfb771aa036b26660ece3868ae6fdfeab7f2bd75e72026fd7cd04a596387084293c2bc139f902008206d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a074b23ed7bb00005c0448b35203e1e51dbbd05ccdea9d87247fdc108e1a59df37a01617a5b2ac4765938a857deda1c346904bcc392c6e2b52c31a26ce82552c2f78f902008206d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00fd62711851bfb888f9f8b1d84c36c5c374f095b666836308d6978a3192a462da071ca5ca26bf00dfe19cac4bdb813eb2fc00c2b71a5662f25c6bd7a8695e10ecff902008206d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02ab257133252141735aee2f3277535600efd5858b9ef9dd77e10b70c5abd41d7a005af84e59348d0d430fb9f2b2fc1601dfc80d23bae6aeaf8d0724585589d99a4f902008206d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a9024ffab26a9aae817de977bef907dc74f0c49566495bb1870ef490a0a8bc1fa04a3161602a4ba9a8f0a9c644ab2d95f8c923bd0dad3a01926300f93115ae1dd4f902008206d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05a20845e26b8be674f381aae39fa125f8e22517a199afc3c7dc6490a3ec640c6a06ad3502b703f137fe9862075e898403653e82c642d528473d890b1199718afd2f902008206d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00576ff1235e9925bc9def6696ca8140e656bb53a601985ab108a84e6660b0e83a012b2db72f649b0d7b954ff40870b1b4e8cbfcc0e0111a7b7b4d0ecea80534d8af902008206da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09439e1cfa855eaebf9af95fcfce2776d64af96a84b463d0c9b526637eeb5f234a02636e002c01398f1b736b444be48e201a9555856458eb149f55ea3aac08fc1cff902008206db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0efa1189c0147d1f826a734259d731abd4c577410235b691e655c8be2c7a45be3a010c028bb9e05b157c2fd68428f77a71374e1569b9331479e5626f4d97f5ff267f902008206dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08f8ab540effe1f5657d85abea27b4d29d6d588f82fbd49bb08400cf8764e7ac9a038b31810a3c2c51698adddba6aded7ce94ce93565f36094624b07eb49183ea92f902008206dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05e23e43965e562a8af6167d7507204873e5b33603c30d1bbeed4203a3c110273a0721829024ca9c4927ec3e9cc7483bb3bea9739dc2aa1b8a3b71ea9eb2e2a5e8df902008206de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a030dfc210849ab764bfb6a3206317a2c471ead7e20db575d3e502b383a7609664a06d1a974e10ece068f83ba7332ab9302c1f7d57d0022a9d7d1560246b00dc7f9ff902008206df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06935ae21d959cd71e38523f42365a6695b931cf5d11d88784b104bb8510f8681a0440210387a7329ff04856ee35bcdeb9260cd4acc6008c4f26d52010e6f015ae9f902008206e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd722e70388a2a84b424b9dd1236ed9a6cbe7aa42048636de7aa650d71daec16a0697a3d6bd498cff6a075a00838837e9f2363e1729eaba727f5b047ba545888eaf902008206e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09b7bea7b4e6a12600298f79205758d31dcf816e0b95ae840ffdec6e730eb91eda05fece7b19fb4c7e0a9ffb5338fc244332562b6171c723371ded16a6e186122edf902008206e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d1827fe8e4b9327168748f8452fc8502acf70c79d9522957d2400988d6542c8a07f13d1bc523ef30f11acc517edefe91b48350aff4c3a48fea7e818246f92f049f902008206e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a058eb40ba989fba8d2492bcd4e0275fc1f1a8059025061c157b0ab3d6b3053c32a00543b4da6ba25d4d87b319f17d5773457af5510c1daa66aa529b7a83de91f05ef902008206e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a048da925fb8be0be9656dcb3522f9c68867c6212975b7d27acfde42460c1414fca01f6d9ad6f7572635399c28224a495431a4a80622f7a7b5a4182db4f999b995b8f902008206e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e0be99cfacd193e61529b2a7cc0bbcaa9c71bf51fc29d084798f3d6b2391e34aa01ba0cd299c867990fe1b4a13410701fb661e0b24064ced7364b8b975abb655baf902008206e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07d199ebcc017f804dde70fc8c563c96014d6a37f1424754d431d8ca29139a1e0a029ddf33ca49475478ea11826a589acee49069e9994a58ea139f2766006971211f902008206e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04c84100707c553b4710fcc7dc6fa1414e9408300db73e33f11ef25837fc2d630a02a1f346034356b666b05a4d61bd3e21b0aa678b42c0d90e0133350f3a955b9f5f902008206e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ed6595ad31d7ac6e0b0cd2b674ff393536b4b43166401615647636ec4e463a0ba06c0a4c5d9819a7b5e84115353be22520a04af1bf3ddfc6b2684b9fccceed51a6f902008206e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d075b7d594dbe6a233d37ef85b98cca0692ff65dc4c6a1ca4b254e14203490fba01c596a992a8c9bf21b511c1d50d46297b42346d83489f384d7aa6aa8cb1fd37af902008206ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f79082f248e84fe0c8585accb7afebcfc555860c525e16b071c0cb992d4f6d44a01f6324adf60e839f5623bffc4635b69dbbf7588d659275d47c8314adcacacc34f902008206eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cd85d003a9205779236ddc73c745b16602d48d6b891bdf85575686febb53789ba04fb7df41298bf54826d4b26d9e309ee2f9d84c86b73a91a48a78fa26b58e1192f902008206ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d61494c74d4078e0b751bd417e72238c7dd73e9e69b252cdf7242e4cc13e34da002ee337486c5cc4fe990482b201236f679b096801807cef73b8230fc7be2bce6f902008206ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0afd2c8b32fb97b6a817ce6b76fcd858f9d45b3d820ea67d74261c88d3a0c1140a040b5fafab976264b1ac9e1dcb5ebbb7a094b7a26590790c4dced97b592dc921ff902008206ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a63fe1fb2914f9ee5c14601b1c3a00102b609592e6c0da782695f1918d187b6fa06477c580d67b657809a5eab179c9608170a99018ef19631d5dfcd9435e5797fcf902008206ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a073ce0b954992222910d1dccd313739dd3cf71daa306bd70ac604b89c9adff82ba003d768b267e532a5221d6584e361cac6aa8bc7aeb375e2329f6731a806275f0af902008206f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a028a3d4b43662f6356d1358f5d2ae4bbb984306c689334b14e9ca77c8002238aca07665ad94c8466f8852b43c1b450d530567e6ff74a4559f0a53e4645db43bab41f902008206f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a011cd0df309da278bb6acbe58ea576ac3da0dd0ac8998f08ebacae3f190101582a0219aceafda63141369da2514897bcfbf057001bbd06ac94fbf0c211b470fb17df902008206f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06bac0ed381a7339f9893a22274f084cd5bb5755b4f1d771fcce8e73b2892d69ca05895f343264fe577c24c69fece12790b454c9f5aa08b38d039991a40ed555f52f901ff8206f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003259f8ae212e209d3921f26aadfbaf4ae13d1766f333e1aaf998605dd33566d997ea060c1b82d6a94901c63dd4c600677e0df00db79165d7314848f463c8da7256b68f902008206f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0afabea30830f3a1201dad244c18a58969850821abc55f410fc65bc2bfdced053a03e3a917a50b021cf0fbef013832afb28ca682fe5a51013eed17a5eda320c85e5f902008206f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb71cca59f5ccea97924dfc3bd36c1920e80616f9bda2d9c91dc5cba7e136074a0486cc5b26205b2f95b231cb5f4979fb64b8c7f8cd409ed949ddff9ad6b387e93f902008206f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a091f42438e6800a0fd640f9690573548efbd38e4aca9ac58548246e8592450355a037415c0502526bf79323271bc599c99ffc9bb63ab43bb88e8b435666e5d37779f901ff8206f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cf24a66e22b88f4a468d7dd12906cfba388cec82298c1dfd84aa9bf6d5f27c449f31ee33db5a5872f3f162055b5786c6afd7e65a2d5b4710a47f529bf122418df902008206f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e8d218eeb8058d3c5e7f4bb01fc88ecec4afca01c057e2363bd39710aaf28461a07b100e70294e9c167b5b99f1d0ea26df7c6e6bf48206a55a24526e8d7cac5d0ef902008206f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00e83ad3394a78ae00b239d2c3d927721a9cc6272a20814ed7b9edcf8f6f65c1aa03f3f7aa4e17a58c96103eb9773d67993213635852dd4b49a4918f7354d0e5869f902008206fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08d1075b2dc6aa3bca5403a1dcd0971e1aa33bd88edfa81ae53133b3b6d88aaaca05fd5d79fd883c5d86a99071c7e0139e0623da7c8a9f68dc3a1f00fbcefb73905f902008206fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a029377e3d99a1a6044976766cb6ebf2037a42c1e7bb9c1074d3a3d1488ddbda84a04caf782a338f80508e98feb146cbfd1718bc848e921f0b7d78f26ae048b8ae4ef902008206fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00b3d5c2ffb520cf19427e3f19ba15dff2bbde648e425f7ef43b50f1142db37d6a0629d842adba009ff494bdbf11baef31aec08244203c04dad23bc5bebf98553c0f902008206fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04c6406e28385ec3eaae5fe24b9866f6d69c7dec1d0f3872e52a6618ff0badf67a0227e5819f31c853bfe7040dc2bde033ff0049ba2a4570c7195b8e2c63920cedef902008206fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01052581157d0d9415629d159a1fc4001a3ca6c95e66205cd0fef96dc65325f99a063a84e433a49085c4dab9efedddede9eababd9d512a7697d6e829029e4f25f82f902008206ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a40caabb73aba069c945cf4c43f078acf0088b40a236385c5a5f17270e8aaf91a01adf5010628b26854166f83f153107adf090712ee38601262208e5e0c3ea960cf9020082070007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0628944f381a9a32efc474c25831e0ad012adf24b9504e0f435a58629d8a944b4a04cd11aa333fa381fadb69f42337db66ca7132c5fd0d79b9b2ec71d7a224512a2f9020082070107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0281433fbceb155f0f6f5e1a39e03fce790cc0a57deedb965673f445bea0e8356a012aa2e911ab163586894a7b01bd3c1b4e31c949d737fe60a459fa24358633e55f9020082070207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c027520d6d80e5ba725267b5b685476142786962bb6747a8da5033b4d65ff11ca05c3a062f7beaf6cc65141a643c240f32b3bde539c93985d1c0ee72013ac489fff9020082070307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02be074e9455d031ea2b2d10f7892fa07ed5b20a4936951d30384fa7e9f3f1d9aa03c35791cd2f6a5ee48bdd2807bd84d41de962ba1adbc1acf293441cfd7dbce6bf9020082070407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a056710fbaacd8b19cdab82dfdd54cb60b589b295fe13655a9e95a5af89a8aa3d0a0280fc094231ccae9810608b24423e57eaa80050ee7ba37fca3ac145ccfebb7d7f9020082070507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0238903ef347714033f7fadaacdc1adf8ee7c566965474704537b48fc751ad3e6a02a54bff125df1df2929d10e676f182ba80a8bf3f8af6953789ba6da3205fb409f9020082070607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b73773b74dd4803cc84697a91b6b38a0a1becd37c6b6678dd46eaf8b3bfe6b35a017c06e796b7d91286473603a42bd4c72b7cefe2eef5cd40ac67a4dfc5c08f788f9020082070707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d9cfbed4e542b012d2d39855e8f5954396797f9170b4b4ef1bc51ba8869309a8a07c92f9442128d2f35bda29bd0c8e4ed16015ad2e1aa9daeded7682cd5cf4c69ef9020082070807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02f914ac83d4bc00cbf9ac0b22bdd876cb2ae5998c03f51ca8207a1d7a44c7c1ea03b746c2548741c6502b6d5ec1a0cd93d90edee59e13c83d2c09c5c467b2823daf9020082070907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a096c9dfb9642ff121c4eff2eb184cb10765359ebb917a30f809e365f31b36d3e8a0631e95058f1c582a59bc09a1240842daa840770915638bc6139df6f633365141f9020082070a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0459ec2d850cc0b0d6a68d91d4667d790ac34795bccee876c537fdfef357ae325a0020e6f83670f1e84c083215f63f77246517e0300a9e5e62d173c4c13b2cbf211f9020082070b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a007b1a5c0aadbc662fb2713b5902c55d988632cf7965d4111855b4ac1c9b19a7ea06d0e45b995ae4bddd2b38d9d6bb61b5fd75d0441861a9b768fa66636575de7aef9020082070c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05add52440020553a8248c64cbe6d69a0fbaa0e406ac82188a28cc50e590ed94aa03a77faaaa1e0d6642a1f1d686d082b268364a8110f1473a053fc70a9012bba94f9020082070d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f109159c1cc980d7149c57a4c195f1b0e80ce10d0bf263bc1a214d1f8db4bab0a06cd5ec91263938a882bfdaa26e1f6b24eb2237e016eaed893fde15a1a6c29ba4f9020082070e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a068354308e2a02ef9667b43d7476c7551d7f3ccb57c5bac51e32bca0833c2d228a07b9e771edb4eeab29c2a6b51c920df41c0fd1c285db52ce8456cb2e86a7a31c8f9020082070f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fe944bb53a38f1dad3874d2f51b33d1db9ad3e5fd35f9a5b2ea463d1c8088a67a0604f7d6a893e1bd708da38982b7af44145d48f4dcd5a0e39f8006c7309a3d228f9020082071007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bc4c06e041d814de675a59c1b74c1cae3d263b49d88c28d27fbd1d15fa12e077a0269c121cad3abf0e8479bfc6bc86c54dbbe61ff466f83b5f9e5e40510af4c913f9020082071107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09bd53826ac3cfd8d46730f1630e7a89869d14ef556f1cc31bbace066e719d55ba075444b99b7066ce56a69da2003a2627ef905bb86c8277cdc9b56d887cdf8c012f9020082071207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a098e7cfd48f1421d18d96ea699319101ce0683ae5615ed9232d8fd0cc4335edfca036f1f254770c1e6c5082f44fd31e6a6cc449f3620e8c338923223306679388a1f9020082071307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00fe74745a827f62e5f80ae4d85db207b7fea454fb0f83515ce38299f7634593ba053c409d4ef94102bb2f5580a593adf321fd72aa5bc3c83c5bac3508c27901046f9020082071407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03a40b91d6bcac7acd8133c1e6975c95cff4ed666188cbb1c062f16cd0fa645eda001ccd914391b2a08d3486daa672f1190b7379e1e94d76f0905a104787fa9d0a8f9020082071507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03a517473e4f8df53b4778e54eb1fad9e33c83ce3eff5cbc851c695efbf116759a0030622e963e8a8bc00adb605b82605e2819b126f59a3d6b5ac584b49c23b1041f9020082071607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bea64932ba64b7b33f01fb089cbdc0788091a448b9aa0137e0227a2036d6bc86a04dc907af51f7f40a22d868c51b3b1b24061d8159f3e11d812f90db2096f277f7f9020082071707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a096eb06d2f03430919ae65b4938426bf3ac12ed2ab8967742d4492d5a8865ebf5a055ddb9b6dedbc4afdab57d0de8cfdfaa1936b062d2515a02aaedc44e9b560c0ef9020082071807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d5504cf8069bc31b496793f441e15a251658d62d6b169a78fe83a5633749f67fa02a70694ba755d87546974e9272d69335e6c9809f3a7710c706435d2d411186f7f9020082071907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f4ef89149f27e287324957f2966b7bcf6844c532d00caa56c17b0a948bf0d15ba009ee12b9e515ec9e8c11786bf3c1fbdcb982f7f6c424e1cde40528bea46d4f4af9020082071a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00c396e8f07517009ee9ecfa258b602b8a5cc919be804eb445d41b05f0a9580e0a0343fe9139dd1e80037214b60e8a9892c382bfd9c445075aefd4e0b59aaa04cecf9020082071b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00c9d098e62b1edd0e1cbe90e312ae90e4fc14bedc6f1dc2ea48a8141e96818aea00cb7ab6552d9a516250acd54f6de1effa6039ec02d4b5ad39e91acc374fac0caf9020082071c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a006ecdad654b24259cddbed02bef865bfdd3000065029bff61520cf10516f4502a06969c32f3f1bc8db9f008309faa3777b760b9f1486a2b5c0ecc9a55735dd8e79f9020082071d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a030e2e35d5a01f120a5d10111b4902e856a581e45f08872d3f0f80e9488580dcaa0605f7f97ef88b9359136a34f4e079bd1ee3f8182a4aa1c70604d460a0ad97b44f9020082071e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02fb482f658922187245e21031f549bb87d1d9180ae52f825a62127f0ba8b235ea0712ba3e89cc8a730a27a8bfb1e85b550cdde9985d9053ccbe8612b429dd820c2f9020082071f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a018ce06f45b1f9aaf8cfd85113fc73ca561e9e89eddfd274312cae53d06d89e4ba02a77ac9c0a4eae941d2e175bc46f78f5e61615b44fb0fd3d4971949bf0779c14f9020082072007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a069f1598034b9fa991db980d7c0b96353f560ab45f75f63eac304386f8eb7e35da029fb55360313bab435df82b0f59f84df6de0e09e636e38345402cf5b1ef17b5af9020082072107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0643182a7fa0d0abe70f311fd3ff859bc532edd80697f9776a1af6fbd17c3ed08a02989a5c22a1822f98aa9815c013dd67d14d28f6810c052337b21571117280b76f9020082072207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00401d176ecabc2275ba8bb0c83d8cff11132db4d1d480288a5ad3251cfb6bba1a03808e47b0bd38470902990d7875d1fa0d1225f51aa4631ed96308438d06df2bbf9020082072307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a023d9b23d390a6219884c4b932319c43888ee47f1d2ca97a6f71eaa9a0475c2a0462479b725b3f1e74a892b32d166ba7c78ea20ef17d569860fb163cd282a12a8f9020082072407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d1734e3955332cde053808348f506c036487cdeae945a975b67798c640f6ccfa05d445c953b419f48579a87f60180bffd68149e6044257b11f15a817bb4fcafc1f9020082072507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05f89393f9496ceeefe81a709c8e4b81b8c3bea64ec2fbb6326a51df1adae45e6a068dd257e27dddd6d481bcd2e7a90fe8d250c38ca721d1798922e6e36a0cea86ff9020082072607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00a74d28d2f882f862136a12dc2f91166d9031f64a2791e0f40da441d2cb5a828a05046a00b882e7284e6dfc6fc6003659f1a5e464b40b71b82d80a56151bd4c8dff9020082072707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eb9a15df16d4aab095597cc0bdc32fa5dab5f443b5afe2651fd44eda8aa20ffba054bd3905efb08241f142292a9ffa048134718ba9a5886c0fa6181e6995840676f9020082072807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a80afdfd13c7e83db7d0e0ff3da8518111b160687cc7925a64b6e795e4a3c268a0409c75b473383a15fa12d0cf56b8a76b3cdf07f6cb140e911e5ffa6b2a79db60f9020082072907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02c993800854745ddd9258ea7ef013f09df2262c07630a437e439cb27c15663fda0326a6f9c09c7a2f281762e2c1fa2427b3199150692bed17a9f965990518a460cf9020082072a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00d1ef7fbcd87259a1e749ad3320920ae2b18052ce90871d232ef372daf6f5927a0707358ba3f104a4a9b359608d6666cc792dbe46aec13416f0bdd89d8c14fdf38f9020082072b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cbaa06decf2439d71296f49da4767e274b3e5fe17ea7264be2f15818762af4e2a076a92843eda671e1b4ca9db0fb2b27678c2a14cbdf8cd94755b1e91080afd3bdf9020082072c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a022959eee73b9199f758705bb2abe30add529b60e59a2dc6f100e199c1a4d02f6a02c2df09e803c67e5680087946a461abbb59c99f9df32bcc0f5844a4d0ce1ebddf9020082072d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b4a7c46d5bf4a204b9907bdde508d9921c8686dc2c52a7fe2f7408658822da2ca05d2b5fe12225030d466dac433e0342df7d2da6438c63903be5c93916276e1f07f9020082072e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02187f2d53ba0b66503919b0381c93aa2564f84122cb7d78ae73be6845d51a648a03f3b75c4a18d6899118aa14aca1760b988fc4d42265edc325830cafd5d58845cf9020082072f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a001b4248393d55960082278e385e08bf947e7fd6735eb78d31ab67f7ea4874d26a040696de84f2feac0743a42c7cafaffd8d94757f1f4d2b5826d602d634c7a140af9020082073007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a079251815ddc519ee977c7bee4246473d0b282d278961e61d4920987ecd1b187ea06572e93862389f738fcf0222d50d9f0eb3f5a148c43556e693503de0426bd760f9020082073107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06890d1fe827c5f02d6364ccbec5b4de12a7b5a0c34dc7f9c4f446cb9065a44c0a006f647e8373d998e9cf4072033bb0f1b2b7e11b9bae9a642283e1d9fc044cf42f9020082073207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d8df58bff93e218f5b635d7b36ba7032ef88bf6aa136cace2bd107ac856e5b7ea034949056bfcc52eaab11784c7055f510cafe0a72a551bfcf8972f5c3714b8df1f9020082073307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04940b277b86dedccf7505dff55f0b4516c9187080e6af7983bc0b8af26724910a04585a76e1fd1956c633185897c801fa868cc0e0a59fede73654f66b740148833f9020082073407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072f2280fad50316db7c88c1620b2d92c9853291c4253710bcbe8832e67da48aba0599d8668f4677fa123be6c66a6f46ab80a0fd5c3720660cdf526cb41bc4774a1f9020082073507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07717fa08b58611cfe944b9fc00449be7528a71c53e643f9975ae16452d3ab717a041582fda914ee67a8bbf02204df561a4f751089a753a5087fbb2a33173e40e54f9020082073607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d1be6a4b2ae2cbb38ea908b0308c4fb5655c540849d7b948180cc24dad9398eea00539127449676b03ea0e59e16cad5fea42972136144f9e62ba324e368ba16b0bf9020082073707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a064b6d787e15d95e61936196ab6257d1473311727a7740aa0cf1874e8f0bea187a06e803d876ce713702a93e0ffbdd940503b76ba8da405bd6a0a72b1e4d934cd43f9020082073807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c8992a2828f803d9db7c2030880107b8e37923bb93360e3a1ca6397699ab6ceba030c91151015b9af2707e601654459709c32245ea858109dc5b93e132e8ed25b9f9020082073907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0379aefd453848db352470ed67dd9344b10071a7bbc50fb7c54a074c2a620df1fa0594d5de1e56475d0484fc458898f268fdcf327a10775bbda045e32483de61377f9020082073a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03c1c2abd4ff4236af28a68a03aae7b7e6bdbace7d52f5e6770dc4c132c633c7aa01b13b5d7e5d5d85c33bca19b9a33da2408dd8403a62a6e403d12febf7d9cad55f9020082073b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dc3144eabca56e0717f30634fc21246ab94aa70488be96a09366cfa5215bf5e5a0312cea336bbf08f7ea57210b809ed88c5e9c26afe9c2c0d1905cef0e29e09100f9020082073c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b22ad1ab7b96479e359bdeeae70d7051e38bdaf9dc7f1168173b31d735e2bb43a0242a5923680aaf539fb94f4c5ae636f1cbd4d8a5a7c5ce10f789e3eaaa65df8ff9020082073d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0065e8d76088561c5e23e3d8276bca456eded63ba83a261a4bf87f3d8b689c39ea02035c9bf4ec875c8d424ac15192aab80116328edd5cb778391886263d878230ff9020082073e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a019d5e71de894f6788438b7fb6d7b6d54a11c44ccb0954ffae13902c9ba9869b5a009ee1bcd2b97d6cb14d3d4f014d3566d5b3a98fd39e975ab4e2c8e48285f7166f9020082073f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a010b402bb0aabd6b39708e9e54c7156cbfd7b4241ba418cd24f51e06fb548143ca0087b3ec8ee2fc1ed11098e3dd63271fd184d595afc83a8a9a30f7710a53da860f9020082074007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044883ec5d2b5289f47294e6adad6c3c8f79e39298c701628ab9d4483ae3e7b7aa016e6cfc5e909bdd9d7589b611f175406c342a3135c3fef761462f8bdac4be9acf9020082074107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a019c55d9141731db97bc8daa53bf4c2598c7fca4c570cde1438301802f594a7b4a0708436639a44d77de83ae7c6b9fef8567c4e8bdc38b99895acbd92f04993e834f9020082074207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04db3e6fd1f7766ac9b70b03d13a2eb6403c2670ab6770135016afa668d8fc410a02008a4afaf80d84e963e2db7328e8b2f542405f5eaaa48240185a5dc842f81a9f9020082074307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07ca169f18872a4c716a29fd0df09b3ac333477f5f674fb8c45a6e6bf829aa120a057a3fc1b88c4800eecb56f75ddd382abd21d670ff13251b4eea0b4b895e77f66f9020082074407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0550ffd23e790b1852b9e98234b1e8f1a2c02f8a7c7cdc9c0823b21a59623c4c6a04a250875b95a7fbf61a90174cb03a2686ecab1320cf42227b8526245a466a365f9020082074507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a005719bd392972fddf03e8d0c329b6bc61c7cd2993f9359171017fc42c8bbcbc2a044e9579b92568ab06b43466827ee5c52d5f176c7873f64dab795d17ac76fed7ff9020082074607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0462049e213259aa3e5d24c079e6548b3dae05626f01aaaf4a6310d0755662beaa016cfe656d36db95641fd870bf9ac6195b9b5117385158500ddefcad0f4741798f9020082074707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b3227c13fe8452ac8d091e349632fb0bb7d318f4f3cf06576d3e82c1048bc742a054f09e7de75d7cef0cbb23c9410856d6263baa578ae7db5d3c4ba2e5a782c789f9020082074807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05cf84eb78bb8b1524bd72609b740c357dd36e762b77b5fd79a54898a051bb888a029c4c1021f2be0117ab55d9ae7c5df338e4a8f96a7891f24294fdb654d855d99f9020082074907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ac8a526734d1620796160580afb27eaf1492d8fdbf4ba1ac94197fab5fef96eaa05ca5de73d40509eb5b0c0740107537c60990067b43f3b4f5cd9ae0df826259a8f9020082074a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a88ae0978999b29d62d5ec32a460a23a7b915bd9958e5b132484a2326ed1e617a06c870f4baf665989f6a5fc7ea6b324a639d116b4a8fee7f8262bdd957dab5fc8f9020082074b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06239fc76ffebd01fe8300f1c76257535a898dccef94720516e86d9fc90884355a01ffc30c7cd9c47bf773978fd32ea1010f2f0f316de288b1a854023e0438bcecbf9020082074c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08a70bb953765c5789a04126a9cbb12664c42a00d338a8d060a6d4cebe572f9f3a05db7d478881038c923927cbca838f07f526d224f628c1eff4a4a52064aee0233f9020082074d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05bb97a65b367ceb30a7dbf2cf236b317c9829deb3dc1f991286e52773a9ab2f6a02ea7300e5056d5685b90728846f3acc2e48e5fe4e7a56dc19e601a71468116a8f9020082074e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a045600976079bd02a91c47a89dc41afabcc6a8432f6f12fed185420d4a645199ea03fbb58c316c42041a08cf81b260a0c737b2f9bfd86d5afe1decc7c1c63a8676df9020082074f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c2a79441befb80c4b67c52fcc1723220ba8b3061c5b16b8ea55acce399515b8aa005c4a2a6f62d1205612120c616d4feea3de488f76f943f9e436b39d77f52792cf9020082075007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d9af8f6695446e4bdb6150d89693e52b0e88fac7e26cc8340469b8089583edc6a0739683569b097f2f5d6c78cb50cc7e912f4bebfad8522886e40425a9ce2398e8f9020082075107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e3105aac1e331239f939cf2310e0772f6ea0bab3b9dca1105b119f15a49a611ca06a7ef917de2539b0649bacc2ebbe945cdd5a1e7c64ebe2dd3b1abce1270eba09f9020082075207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a085731dc274d26b60239b87b30d8b7a3a55526aae7a21095775ce8c0d1bf979a035e934742adca8084bb6a67b21ce0997cdce11e6f69e656d3e9c671c92e96069f9020082075307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd9cf14f31a25437395f93342d300d74511a1ef391737495063507e032f159a7a024c5c66c12e56bfb096456a01d598623255b77caa0b2416bed737795cd742dfef9020082075407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a013bb3c63779cb50648e4373ac6cf262dad73b9744ede5a4dd40ed36453eebb69a0445894978f50ee55c4e9c6c5dc23cd8a90fa83263396418e2ee0f98eb0562572f9020082075507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08ecfe28a98c1df0b98aa7a366efb6cbadafe1355db321f878c5c2702ff870539a050658464c91b01fc444daf0c1b666c07a3e3893d45f8d639907ceae2337ca80ff9020082075607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04be028e4e532a517d9ee38000c48d2665b9c015212bf5821b03edc6032a9c463a02d1f56de7cd182259cc3100472da1f6f6a4d1eecdc4500c73e581f8a2767d572f9020082075707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a058c16e650c4533a11857a783832476d37a5193bda0843f8bffb1b26381a3c4e9a00ee34c32cfd7a1a518106a6b50c71815760cfc2d9d4c1e4def23cd6ead66326af9020082075807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bc97e3948b3db174c24eac3ea1fe7f67d42c38f8967811a61fa01ef19c734a8ea06fa131c40435f74811e1bd273699f4f9d4a8739573f1296f88e83d5ec75d0a4df9020082075907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02869206764422314409c6dc41a3d310c5b55c67556047df324ce81bce434899aa053cd893353e7af5a08f834f2ecf4f652e43c1fdfea341b1b23469b5f71f705cff9020082075a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a004f7ab7e3e04a2b320d4d92fd76dbdcea7f73af1160e1096735f461c8885bfeca0587b40297be407c4912950cbbe84d8ded46dade0eb2b926a99d33dc37f77ba5ff9020082075b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a089e1ec481b0435ea15ad08dc7a7099f82bff20899a96edd163a6d8005aecf5d5a005752dff56e1e225ed292618919ee142233178372ad081ff64b627e607dd3110f9020082075c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a073884e3ea66ebb73ddb2ae9b42c6edaf090bdfb11d229570f1cf340c48f100aba03ba586979caa0836520058ea216a265c84e669ab23d23591207373854525cfd5f9020082075d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02c3b03962a6c37a04133762bc64beb7c5a1555ba34f8c8a7fbeed68519b907b0a003ffc75dafa096b602382f282b873118fc024bd347a276f89bd846b70d5b8a4ff9020082075e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c92fad10c9d393f12ed4d590f21be9a95388e749c6a40f1c728244aadcd9e3bea03fab1d45b16a449108ab3b29a57e8d7f28ea9206d4991c3ff562efcb2ee9c5def9020082075f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08e175aab72c5d101de289d8b86ee232596bdff0d6dcb2b7290f0bba8d983d516a00ed9f650644abc6dd2983df67e9374c523ecd5beb1708ff8baefd6f756a6f752f9020082076007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b8536efd611ce4c6e828c5320d9d67759d5770420a5fceb44bfe766e85c737d8a072b159275d49468da9c8336f994b8a5a0258f595340ad5f9f8cef24ea963e0c6f9020082076107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c077da52d0ea3eee104921274b6625a3cf2a2e42414557f33365a18ae2d840c6a024e93d97cf2e7105ecc700ea9df87efbf2a009457b48a210bba151f17303b442f9020082076207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08009878845adeea5b37f3d185164fc0902cea275e727284116e433ed78e21b03a010e75d4929b027ce9ffd239fb6ca8f0b93c97a57795fe6a469885925334f9ec5f9020082076307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0137b6d2ce8b3bfe689eba9243df0d5e79bc1b548124c6665562efcac92e8b49ea04cf3ac5990fc49e57d7fe97fed3c9c7354dc7f4e22673137884da51b368b18b6f9020082076407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f1e9e8409a4f0aac6583663d070252aa88d9fc309da659eaa6a1fb714ae122a5a059a5962442516c1dab70cfc18a18c9e933bba34ee796ca793f7a13a12334f5e2f9020082076507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08a3b5b9e84f384178099cda7d17f69a67244eb54f20ad5bd3f33dbb1caea7d36a025adfeb033f0b25ce8f47a0c7aa8ff632bd1ab710c9641261d54769ec9f6d0cef9020082076607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0497cb5c964a21724d4f51b410b8b13b40d94548c25b28f883aa623f49bd95601a035f642b42879c484545d5927a4730470071ac446630dce3845eca1e883942170f9020082076707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03346a045016ea06bbee8a32cdf83e01c25c6ad4b18c7a0c738907558f9629f7ba0717b995ec417eefc6f671dc07b496159f233babc26c298238f7d7eaa5948f97ff9020082076807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0690f55d22484a70d413f4c243e8911edfa74ca485e85a360db03e096fbbc4e07a01e7e6dc1723531ad79a329689aeca2c371b5466105b80b2744759fc00dc9d40df9020082076907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0033a2316f8f5d9562187731eab16b4eaa6db2eec2ee9c851d173bfdbcfa0d136a069753e843aedb1d9423e51b2d283bd93522872f63f25c7f949fd361b7a90de42f9020082076a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a028bfff22bd341de51304445e14357d230f1124e3f6c050aa1c7952447a1d0939a01b056ed673b00b4bcc4a5cdd5a324bdf51cd65101bf6ceaa1a4ec1c3541795bff9020082076b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c26a5b38e23a6e96bfd84a9cd8bdb176009c5a04da5cffc0b3e49f532f910761a0794114c9af5f21e2ad5204f8f53ca974b77ad8aaa35eacbb98381f7116d4c7baf9020082076c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a058e0c6d3b7dc01c7eeb1ebd0e81f0c4dc0a8f0ecdce47468a3e6d1fc37d338cba0414b498edb6c705aecb507cacb2f7e39ce50b4d40999b30a26908c772eb87a28f9020082076d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ee98104ad3fe6beb21871f31114ec9cf4a4b03b89ad33f48ed61135c79bf376aa06787af640a4ea51d307ea772fa208a54ad9542dbdb3cc6b3fce07ad56fef09d2f9020082076e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0657dac6c0c46720f666de228deed90770c54727f5803a66b84c34b3506aad292a033f8626e3be0fe3ca8f6c69c328af274616bd25598ff7eeb5c20a115f69cbd58f9020082076f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d9a33f705bc3b53faf3d0814e2030179a3dbbd1d7e1706202d36348ccb34f106a064e9d1d46bea37a75b2b8622f7bf4d2b73d144e1aabbe43d8dccbe24c2ec1d5bf9020082077007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d0d3c858ddc60c21735240ba66852c1bab673ce587b4c8891b18b198713f8d89a074af0e5ff44bfcbf07265dc2426bf7f9d7c0a6ee0ee968e1244baa9098c62228f9020082077107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a064b2fd006a9f178e133bd0c5f822d1d6770024a6a3023d7bd256074f8a392590a00d53b3ff298cf4bb5cdb4389128d640a896b163b78f58e54efbfe20a34e011f8f9020082077207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0970d1bd91781ab3138ca5772cf83f92d432bb2053fa9203df67d21234c3e06a8a034093d97c572c0c5c9e7ca694e56c360af8a87ef168a3b8644eee521485bd273f9020082077307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a053b288663e5c12d03a8cff7088c69746f1f291c835381c882a09f3c9e7fd7e26a059759bb131d571604d9afddcafa0b0a9d3fc9c9f670e017f78cb95e7828e92fcf9020082077407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e238ff1649d30eee17490ac9398621cebd5c6f8b3fe7231a70584568f38acbbea04684fdb1f4dfb3df6e9506047b94e44e192d0beb253a98ef130ef89710150d9ef9020082077507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d88978166d2a74fa14b3728090aade8c038b4bdb943c95fb7198a07671ccc27fa0267c76aa2de70b43c0a579dbd0fa23a6eb97faa9c5599a1039906a833dd2aa21f9020082077607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03d2ce4668a92e0a71c9bdf056cb2907c0454df0afd99e01316ef69cdac4316b0a001d87e03e0d0c64e8326febf7247ed2660a854990ca9d85b2d6a0d9f465dd409f9020082077707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06d737619709dd1679b9b2d3ab691f6f6f83e6e01447a4119f585751554a16beda0507f4a61b766a37d9eb412085288f831afdc433a466212f5307765af01a43301f9020082077807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cc4abcb0aabfea52b8d335a0e0643713c89015b9424d37c3d4955fd71932fb26a07eb21e54045ef3fc3492988be30aec6619459e2168e7c0159cb4ac3433af1967f9020082077907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e1f5e37722c5ee48e049a4e08f449f1b09ebcf3008d32f2d90b073e8503a59a8a01474fa2cbee7c47f9b2eecde6328f3eedd67d4a376e130722e11b36b45e85b3cf9020082077a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a038160ebd751eae42aa9ffedada0717a2b68440d17f918a5012fad7825b330756a0132bf2f5c602aa567540fcf2bf28534fa13bb710a3d8d8656e1167c3d05b99e2f9020082077b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a061acb7ec0ecf923a3520a31eb69444c5a3fea16843757d07eed84d002ba797eaa0133edd3c976e1ba52e78101598ecc54c4fbfc8d03dbed17a3765fa3ac04a45c6f9020082077c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07abe2241ce7527c5246dacc4b55b25744d3c5d27a6d61a9e2c5d5781965007daa0673cb794757dba09b68c3b05bed115d19f08c27c405797d7db5d0b6503536da0f9020082077d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0960aa83219c55368ea31c84a9612bd3e015db1251a6fc2fa3e6525fb7d6c4a3ca03605858a506415a4ec752283da845a7d2178144a2e96a6cd0d9e1c879c5c68baf9020082077e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03ca2c607d8a03cf56388a7756d653472a8605b83856f70af6d1d8a95c7a435b1a06c32dbfb3a8861257d9a9bc27c40b0ff743445358398d698fc339443e6119f06f9020082077f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09cee6b544c4554808858565c8e0e7847024a69f884bc1a2cc6d0d8831d761b53a03204a7b78715c4e5368441345a1c259289b70f1f1826f631fe68af3d052abee7f9020082078007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a053eabd5e674fd6dba80c9b43a7b0db7b7b3fa8659239d68bdbcaedd917c1623fa05669eb96ac7d9fae76f914866bdc0902754409c173f67e031742ad59459f96e2f9020082078107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01fa08598041968ff5ce24d51af853cca6612978cb32f8a82ccef50981b62195ca02e0fbff6d80d64cde550e3d2bb38eb99a7d8dcb22a7170a436a6aa3ca2f58f6ff9020082078207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02212569918f72361516451045ef091665fdc5eb481e8c6e768efd6826ff7015ba05d184bc1634d1b2ec7b95f1ce7ba9ff6fc603ec9df22d89254d1b56fd7e1d34df9020082078307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a076d386f9ab7d6c76dc8d33a9a6492d23cc820afae2e1ad2c7a001b4b25f366c0a07ad2b78ecd1a3defbe33a53d4b4347962b2d6a8453ef9e66a473c885828ea0cdf9020082078407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b5754622da07c729853357da7a4411632c8e3ac483e66cf47ffa53f5a494f02ca07733891bc4ac4fe85ddee35b1091f23a307444464b359e5ea49c0d313fd357f1f9020082078507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0923fcbcbf50c5677b845e8375a568ecec4c4f8ad1ca73ac47d997baef10ff9e3a003db2c50d37a443e14b54af2ca713f43a3aa52a573390bf7360d60885613f8bbf9020082078607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03abca3893c3de473ae2bfe36337f604b99d125ad2c6f20056ce0228bfac85763a012edc90c08c950ef9c23f7a5f6e93db5911e3e2c83d6e30773bdc18e42822ae6f9020082078707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0311b667bd4165e11877ec49ae02dccfccce4d11a98bb1819440c5b35fabdfa50a077bb12fceceb609503df889bb935337058a7a7b367e1305d5726f3012fe0f0a8f9020082078807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04575b25f64a8dae041990436697dbed7e10b7134430c30476a01a6a2c7e62309a033f78a95d54c9f2e709d7ddb208ed3204371ce0ae9afcd9e04b484972ce5e7dff9020082078907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07623f441be6da908ae7f180cc2ab07933149809e2436404531293b5ab0af0dbea076dd94255552c04e5f25b7d9c84ceb830a6ed39434c250be7a3ca77eb3c42eaef9020082078a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09fe1b4ff370fa559b3b385022cb6affa4d4ba2c025fcebd506ede9823515c0c3a059b8a18dd8a452451b7d0865ab561ae81e467b37f873d0b9e8288022807ac8b9f9020082078b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03cde2875ec84229e751ce92ff22693776c6e1e306f634d3f2c4be3f2758fd78aa07fde0d86b6b81a870b2cf7f6527c7c369ca2c93b6159ac134161881c334652f8f9020082078c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04a869973e69f716ddf1db76572d615b8c9ad5659bdf7459dad623f25e0d44014a0751a4903a025f168d30138dc2bc575455e76813697b095746d4f80f618524177f9020082078d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a035b85becb6e9743598adc2a9fc3906495fe84aa9a09f8402a68763ec85793a18a049cb1d22e600d6e520d75db75967bca35670f12de918863840c7ef04ed9f41abf9020082078e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01299cff99a2ccba7733ac65117dce9e8b73e19c5233297a394f4f13228ba3561a072dec8448cd70e78770e7ac87b989688c2f8f7da6dcdba0da2ca3a201310098cf9020082078f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01837c4ec34df5a0565d153561b7e334bce78f686e47ad948a3d023e17e983822a02b3bfbaad1d89db0440d7871460bf270faa3d8a49b693062938bca0e5912c76ff9020082079007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09e8b5545448c0126bd4a4ae91c8045ec713e34093118fe5fdb443f975b02b80ba04920a148dc53ea6f8255af7a72bdf0e237623f88c48cf16e5c16de5e0986f392f9020082079107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04f305df49f238726a7dc18c7cceafd409fb29e327e315a333bdc5bf5cd964f92a04df2c2966c176a9c445a468b677e25ace6b1afe1f9e87df2e021942a466f1270f9020082079207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a0ed6d92719be48da4e8ff638080b9bd54af5a926b7f9ec927364adad3a80e41a06c85620310c24a4cc283d29e475052ee8d1806e5f3441415cdb8305a8f63406df9020082079307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a049f0788b279b5622317d87f57f7e87fadfe277f8b40ab7957218d5b4b60644baa050423d05757c2b07920736a23af08dfd1e56df5bba19374fde383f712e46520ff9020082079407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a6b3b2692cb5eb10e73d29b0bc7f63cb41563cda4e2aa332d1ee821809782db9a038c9dcf96e6364d6a9f1a5f86a9b7d6aa6192246f63daa420549ef208a503d42f9020082079507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a064a291993d6b6c531383538a24b2c9a4eb0690a5a9bc6a8e32dae7794f44574aa043f5ff22dba43cd5223c8f3c988120b170798a09aba34ab5d79a974f22cc48dff9020082079607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f750d43e91054eeec62ebb5fd82978481c7f237fba2ec8b994dee37dcb31cb9da002c49b1cc33d3d393d3164f10c597a69d8b56ee7e0e54397bf0b2c392a8c5edaf9020082079707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08d09c766f7a9b984098f295929350d8de9ec0ecc167410ddc2a78fd8e16f67d9a06368cd82004847a07da47565debd586d2445569274f2afd6746db1a06aa5b7f8f9020082079807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b98429279fe87b445871afe25937e8698ac51acfbf49de70c66715e40da3f6b0a0409a3b850afeeeb16494450601258c41e12f298bf6c8b14ea8fc407e774d2acaf9020082079907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a8825e14ffc098d87facbf9c24b659d06e4f5d8ae3b60e5aa814c663c5d7a3d3a0692aca803750dd0ed17a86f31a53a9884b1fc48774fa483673588c67dbbbb55df9020082079a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a096165d4eedcb1fab8a79cceaed9cc236a9791240a4668e700b024200020f54cfa0309bc94b308fe8d95ba837fa931b540cdae6aab7d9d4f0df7dfb0768745668a5f9020082079b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cab223fdcc7672656f5e317d2f963fa32c38a65d565fe19890d0e7caa0040781a02ad346044f806ccf5f90a8aae6bef14a6702b38cd2f059655bc925647600b80df9020082079c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a09d0271e217b74126ae51382af1901cffbb860a2a49b8f2364bd25d801ce745a05d0b899baf242a4042b925013859bed322573246d0310a807ea17f4e6dc9cf76f9020082079d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08b71595df411abdc54556d20c56df98443f6583e1dfbac3714401b9deb7a2b92a0124066d5118a628195e38179ebacede9840e8a6079b99214a9ab0260aa43d534f9020082079e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08ee811ea974844a92ddf980463492b20c878a23e9194693d36b10928535b792ca03fd8c837972eca905ad1171516a30ca444e59e7173c9dbb1015da19fc7704a8df9020082079f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cd68c7cd72b052d6942bec61e1c5389cc3b004a8712f9d4dbebfd3acf0eb9f9da066e21fb14706bdaeffd91bbb571b6fe18aa216e30aa1417dd94f87af273d4404f902008207a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06bc3ffb0a327bd828e1d8356f7fed7e63fc8d6ea3a667d44b5ee7187ee0a5f3aa034818e47808018cd07af0306941776998a51d2ee7133a7de5f93d80c19c78da4f902008207a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06b0c92035973d11f42717dbd8a9b23f68607736903f17dd07a8d0d007fbf5035a0753d68d3433a6ae3a8460d1cf279c5739f348b8d7b03f4a682ebbe8a129e5c9cf902008207a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a094bb1139a83cf99731be08550600da5af67699066c7ab9d5e8e8e23fa1ab92d6a05f0dbd3f983624527b3bc3308c71f834d5f02eb93148a96e5fad2087db2a3c2ff902008207a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb945e336561efb2529159e1a581203c27be13233aadf8956ed10c1db2cadb12a05e9e688e71e55b99e42b97836de00589c8ca45767ebae88f62a5eaab56623d09f902008207a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e2b9504eb07ba3d264fab39a5a17f7c659f3ba6935484a38c6f0ebbbe561fd86a07ffa0de3ca4e9ab0f19bebeedc702795f97375a9e46a843366948315399eb63cf902008207a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03ae1cdccd9ac0ff0be3341a1c7b25deac4043710e991b6f57ecd071bfb222af2a01674c257ece942e4c817c5931a423c92c08a404f402c64391d76c6eef6ad06b7f902008207a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bb7a729c33f617e0c1f7f9464d0020c31d39544c64d98c387382b6c043a84152a076b049bf318b8ea3214380155dee005f2b787e0545884cee9ef77da131020b15f902008207a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01fc1d0c9b3f420b06ade7423f98451a5a5d362022d8e66684d628efcbb122667a033ca67873f09c0e99a4f57ecc1d822b36bbddb8392535d2576cf8de50aacfcdaf902008207a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ff37933e08275b7b9172f6b8e4db39616aab508d1000a55a7ea9a19df65adac6a06159157084f78e4973cb6a1db7935dd75aca1464bfa8fa5190553c0c1a67e7dcf902008207a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a034c3a85eec428d83b887b8b870b773f2b3d529eb9783b2ea91765639bd774906a01805fe3a94d6d88ab04ff8bc57d15ce9621144de0338929a6d0852246a54d8ddf902008207aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a040f6095a8e981a8a518336d97fe287a2ace0d2999d42de7fc3345c366261cb40a04f620b99e45a4c44f06ae0ba161e1770a71d973d2fb019d36f5c4069d6da3fc0f902008207ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01374c984afa4453455ae0288ed3b798e654545cd5fa2c629c21278c538b8ef13a02eccd279194814b7d8acbc9d56f2734adba188a1b4641849ab8c1b0f097a2a96f902008207ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b61559eac559e57671962a6bf915966409da612529f5c6b19673cef36abf0966a01f70aaacedd16896c78dc9a8c0a3672fd82a287da65038865c6e7b9d1d14ff78f902008207ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a066c6f885f08359b00e359a50c34926cd9cf6f68c652662abeb06daaa494d810fa05d6bf8b93ae6a5d8fde01436c2caae428a0fd82c42c8b36ea1c52d3108a46298f902008207ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cce25b87107d9c4af8591fce3e1deb6f986683957f5937aa04d3b133b09084f4a021bf2dcf528c0aa17e14c0c27b12a54b448ba09e7224314a1091a1a1949f7b21f902008207af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06451f67f98f12b88134c33e37537df2e17572360ee44d19b333de808d9934615a03686cb600debe0cd4beac5dcccdf335194bed87634cce9aa4695f556616f4c1df902008207b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb8005be2567f1d27dc036ee7afac1587100a67515c7e6eaae16d46a4bd47784a012c5639ad52c601c26cf41c320b767fac355191b731e2d65069f66acd000e923f902008207b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a21776484875f902d7aa5b50b384abd019d7ebc1f8fd3752a98bc3bfd83819c4a0247b642261cc9888e58307f33d0bee90a7ba357df97e179a79210b0f3b416d4cf902008207b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08a5765500366f4542511cfda58e8bf3dafe7c11559a529c2e1b682ff1c04a283a073ac4ee22e5f05daff618d89916fa822aa8bda76656fa61ce3bbb54a214770c3f902008207b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0045654154d43a5e17f45c1061d487dc0f9321441187ccdb890ff3453bbb0953fa011b6fb8faaa77d1ae41b6815a32234f00636a7960557fd67262b5c1d78e669f0f902008207b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d92aed327cf2ed0f94867a8af7864e3d7b09a3e9ec23d106eafbbcefd2c2250a02d439c34222a3be59734080cc2000159c12e193d432e1dae9b2df8cccac2feaaf902008207b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06144485f64d35b5d0ff737706acbf791658ea18f6948c667de30a1b1f00b9654a0648e75fc26edbdfa61277105346fd2bf80ff7c54f75f23a4b4d3e8bdd5e0aa77f902008207b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c74c7920ad6e8b3f479b33dbbefcf2d563dc30706cc0dec00a0bbead98660567a02d99fb61c95ebc3f9ddc2093e89793fd70a6b1d982e92bf2ceb454efe356b61af902008207b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a063332fcb449074930ccf64e630d50f9a0e010d2d591a1d7a8369021aa413e0d4a07041230d619d83a77d4ec7176de66c5e7f80b56ed447b2f2f032d82eadd98bb3f902008207b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fe835e35aa2c0b3a55326260e4d95af1a0276c49b5511756a83ced73d8de95f3a01e82a85bd3d93d3e731351e9dacb175ac5d7bef4f1bf5b115f31b5d197ca620af902008207b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0914348bd636762b2221b0dc110a4baae78b3a6732021b8924da6f6408bcb74f8a0206b2e15310578d795d3f684e202c8bbc2af44a5a3451637ac6d770fd2ebbb64f902008207ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0680141af26e7889a7d5c48ef59f918459e58779ac3c325388c371b215a6625fea0200770d0326dc265b36658242ebc6e1893f504627c89635b30693b7135843823f902008207bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a008e1af1ab96c83cf448114db0133700df67527d88842b4e8c8418a122ff64210a002619bf5429588dac609ccd86391ff1c2126e975e5be0faad98a796bc04ac44ef902008207bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b50d4724dfe2f9c0a2fbcf930ed39617502179d7954c27765be3fb1c03124ed6a06a2998e695307f806ce4cfa5f6794caa492392b361cd7de49414d9bd2ab651b2f902008207bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a5782736ba9b0003efe0d30af70f571adcd37f3848569c914714bf225cfb52b2a02806e645f414fc7d8f1ed45953db1efc4bcc327635ca439e1bdc33faa4ade54ff902008207be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f82d3088327532461e033e5c7063ad2e3254106a7a366e0ae8ab4a02596921f7a0241b5b065d705e583c11194dc1d4da2384b5e9c98a157bc7d973dcf4d9eabd83f902008207bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04a57e5202f9e25a22d30f035254f0ce2e9c85b78acdbba77003123dd87fd9fc7a06a6c8c573f852a2d471c2f0aa8532b1b4922423fb29e4b4ad89a2a24a11c83fef902008207c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd617b319d7e5fe00c62fe0f9f2c5699d6784395d3688e6dafb7d0cfbbbfbdf8a03c495a1b36765a595f166329a82cc1ca6a0b605a79c2e5ac31b57f707dfc3c7bf902008207c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08321650c6284a7909e2082eb77dcae6e06296d3aa08175f14795c4c4815cf6a6a022ea42b66b036793358b39849898afd42d16799d05c908e8318806f1965a7b9cf902008207c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0760a57b4a5916bea18b8dd8c0f3a8589a3d935e509c3ee1d2e9013edcbb006c1a01058dd033881668d15f5a6af3c08614c52144de03690d9693fcaeb4c2054df36f902008207c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00f08c447a672d5f45ae780f2cf19e8486126b8d3004548103cf257772848d4b5a0720a4fd2598348ca073dfb8a24e0c800146fecb3562168d7738df45e88baca04f902008207c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09aacfcc04f966340e90dbeaad1d8163313a46d5b9a76a2d5232fbb273a430f1ea0743fb55a389db60df8f1fd1fe5f1e15fdfc0a162beb7b502a5af6918faa17a00f902008207c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08d1566e03d2f0639ee0184cfec2bcb7997d33c66fe3955aa5c305b260928a4eba01bf35e68711e085acaa8b9cbf94cb38e927f1783ef20a05d3a9e677b80d9e158f902008207c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a092ed47955d57306081454a78cdc22975faf09ca06265d999d3786fbb567a5272a0605982e2d7c01d7ead8b2246e3401570a09bd6dffcb5bed15157279df4d5a021f902008207c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d7e1528af59717daf1a8a51912619e9e097d9a31614944a7c4f53ad20808ee19a01a5102c9a98d5ae81ba3ee5d9a251a0064cf6090a1a6ae3278caa669c75c21a9f902008207c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d284643502333bd2a510d3c367e286501712e23e404166a886defa025791637ca075aeafa27ea2a9840a46dfc29c4ffc7a4077708f5780824366288cd6d74b250ff902008207c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a012b2b1d0b195354a7dff6809ca3abced2377814be027a961abcbf8fa215f4579a078dd2b778f253d28512e32cd558e04796b2dc8eb2da43b09febe57d307fe8a21f902008207ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b0acd0971afcb68d1033d9ec3820f5e59443b43924f9b3fcf02b513da7893f26a01dec20e01a6cff7eefe03d96263b1c2b0b22bac78529a68a2d22489639b1974ff902008207cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a052b37d00acf2fcf83f9f3233042c0baeffbb8f7bef1a6bad537ec1faa147a87fa03fd3f083895e42144a034a18d4de0225d23942d7f2df5c8406ff829f8674bc02f902008207cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c9633ef784344e358eab69262fa811d820b52f5551b49f7154e0d46a0a804dd9a06563f3760609b4d0d3db74868a2dc3d292379a45c117aa51a2789f8df656e0c2f902008207cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a49186bcb26e906d7826371921cf36c0e4c3eee7e34a8490453d4f64f9776db0a0182d56c313396c4fb261ed386be13724d1ae68f55bc1d7cae1aa7069b16300c4f902008207ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a30a656625aa89d532ecdaa210f5f5f2b4ccbe125d92882cb882698ad6d27fd8a00f0f22767517aade20c1f2f4c2f34e0f217f49f0af51f9595115655b679bff59f902008207cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e96be0581ea878e13e531b4a717761add2c1b5e27079dd3c874ab2a85e8a538ba05fc6003ef7d21350b0b4ff6173fcb16d98948d982ec80395f35917f407213cdbc0c0fa05e250b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000307b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000309b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000310b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000312b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000313b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000314b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000315b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000317b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000318b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000319b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000320b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000321b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000323b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000324b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000327b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000328b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000329b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000331b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000332b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000333b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000334b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000335b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000336b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000337b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000338b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000339b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000340b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000341b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000345b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000346b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000347b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000348b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000349b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000350b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000351b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000352b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000354b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000355b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000356b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000357b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000358b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000359b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000360b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000361b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000362b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000363b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000364b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000365b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000366b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000367b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000368b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000369b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000370b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000371b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000372b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000373b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000375b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000376b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000377b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000378b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000379b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037fb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038180b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038181b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038182b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038183b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038184b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038185b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038186b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038187b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038188b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038189b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818ab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818bb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818cb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818db8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818eb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818fb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038190b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038191b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038192b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038193b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038194b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038195b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038196b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038197b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038198b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038199b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819ab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819bb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819cb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819db8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819eb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819fb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381aab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381abb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381acb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381adb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381aeb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381afb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381bab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381bbb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381bcb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381bdb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381beb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381bfb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381cab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381cbb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ccb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381cdb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ceb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381cfb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381dab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381dbb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381dcb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ddb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381deb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381dfb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381eab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ebb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ecb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381edb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381eeb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381efb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381fab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381fbb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381fcb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381fdb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381feb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820100b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820101b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820102b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820103b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820104b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820105b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820106b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820107b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820108b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820109b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820110b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820111b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820112b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820113b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820114b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820115b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820116b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820117b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820118b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820119b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820120b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820121b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820122b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820123b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820124b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820125b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820126b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820127b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820128b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820129b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820130b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820131b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820132b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820133b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820134b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820135b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820136b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820137b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820138b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820139b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820140b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820141b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820142b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820143b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820144b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820145b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820146b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820147b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820148b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820149b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820150b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820151b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820152b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820153b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820154b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820155b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820156b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820157b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820158b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820159b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820160b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820161b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820162b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820163b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820164b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820165b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820166b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820167b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820168b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820169b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820170b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820171b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820172b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820173b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820174b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820175b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820176b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820177b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820178b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820179b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820180b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820181b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820182b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820183b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820184b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820185b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820186b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820187b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820188b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820189b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820190b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820191b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820192b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820193b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820194b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820195b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820196b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820197b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820198b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820199b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820200b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820201b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820202b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820203b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820204b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820205b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820206b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820207b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820208b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820209b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820210b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820211b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820212b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820213b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820214b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820215b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820216b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820217b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820218b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820219b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820220b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820221b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820222b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820223b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820224b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820225b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820226b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820227b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820228b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820229b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820230b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820231b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820232b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820233b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820234b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820235b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820236b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820237b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820238b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820239b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820240b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820241b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820242b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820243b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820244b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820245b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820246b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820247b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820248b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820249b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820250b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820251b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820252b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820253b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820254b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820255b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820256b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820257b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820258b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820259b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820260b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820261b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820262b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820263b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820264b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820265b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820266b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820267b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820268b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820269b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820270b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820271b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820272b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820273b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820274b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820275b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820276b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820277b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820278b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820279b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820280b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820281b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820282b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820283b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820284b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820285b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820286b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820287b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820288b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820289b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820290b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820291b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820292b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820293b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820294b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820295b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820296b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820297b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820298b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820299b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820300b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820301b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820302b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820303b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820304b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820305b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820306b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820307b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820308b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820309b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820310b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820311b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820312b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820313b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820314b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820315b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820316b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820317b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820318b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820319b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820320b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820321b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820322b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820323b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820324b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820325b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820326b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820327b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820328b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820329b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820330b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820331b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820332b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820333b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820334b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820335b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820336b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820337b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820338b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820339b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820340b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820341b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820342b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820343b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820344b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820345b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820346b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820347b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820348b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820349b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820350b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820351b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820352b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820353b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820354b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820355b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820356b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820357b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820358b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820359b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820360b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820361b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820362b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820363b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820364b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820365b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820366b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820367b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820368b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820369b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820370b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820371b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820372b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820373b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820374b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820375b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820376b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820377b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820378b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820379b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820380b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820381b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820382b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820383b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820384b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820385b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820386b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820387b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820388b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820389b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820390b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820391b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820392b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820393b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820394b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820395b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820396b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820397b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820398b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820399b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820400b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820401b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820402b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820403b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820404b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820405b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820406b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820407b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820408b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820409b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820410b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820411b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820412b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820413b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820414b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820415b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820416b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820417b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820418b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820419b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820420b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820421b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820422b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820423b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820424b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820425b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820426b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820427b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820428b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820429b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820430b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820431b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820432b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820433b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820434b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820435b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820436b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820437b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820438b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820439b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820440b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820441b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820442b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820443b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820444b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820445b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820446b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820447b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820448b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820449b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820450b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820451b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820452b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820453b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820454b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820455b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820456b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820457b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820458b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820459b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820460b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820461b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820462b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820463b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820464b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820465b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820466b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820467b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820468b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820469b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820470b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820471b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820472b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820473b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820474b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820475b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820476b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820477b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820478b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820479b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820480b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820481b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820482b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820483b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820484b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820485b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820486b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820487b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820488b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820489b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820490b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820491b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820492b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820493b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820494b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820495b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820496b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820497b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820498b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820499b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820500b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820501b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820502b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820503b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820504b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820505b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820506b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820507b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820508b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820509b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820510b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820511b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820512b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820513b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820514b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820515b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820516b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820517b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820518b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820519b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820520b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820521b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820522b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820523b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820524b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820525b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820526b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820527b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820528b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820529b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820530b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820531b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820532b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820533b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820534b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820535b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820536b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820537b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820538b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820539b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820540b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820541b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820542b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820543b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820544b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820545b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820546b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820547b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820548b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820549b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820550b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820551b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820552b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820553b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820554b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820555b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820556b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820557b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820558b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820559b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820560b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820561b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820562b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820563b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820564b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820565b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820566b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820567b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820568b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820569b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820570b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820571b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820572b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820573b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820574b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820575b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820576b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820577b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820578b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820579b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820580b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820581b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820582b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820583b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820584b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820585b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820586b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820587b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820588b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820589b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820590b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820591b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820592b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820593b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820594b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820595b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820596b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820597b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820598b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820599b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820600b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820601b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820602b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820603b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820604b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820605b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820606b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820607b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820608b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820609b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820610b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820611b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820612b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820613b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820614b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820615b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820616b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820617b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820618b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820619b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820620b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820621b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820622b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820623b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820624b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820625b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820626b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820627b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820628b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820629b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820630b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820631b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820632b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820633b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820634b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820635b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820636b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820637b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820638b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820639b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820640b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820641b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820642b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820643b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820644b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820645b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820646b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820647b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820648b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820649b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820650b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820651b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820652b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820653b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820654b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820655b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820656b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820657b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820658b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820659b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820660b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820661b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820662b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820663b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820664b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820665b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820666b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820667b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820668b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820669b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820670b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820671b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820672b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820673b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820674b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820675b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820676b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820677b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820678b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820679b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820680b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820681b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820682b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820683b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820684b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820685b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820686b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820687b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820688b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820689b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820690b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820691b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820692b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820693b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820694b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820695b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820696b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820697b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820698b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820699b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820700b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820701b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820702b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820703b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820704b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820705b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820706b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820707b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820708b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820709b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820710b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820711b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820712b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820713b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820714b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820715b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820716b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820717b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820718b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820719b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820720b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820721b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820722b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820723b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820724b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820725b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820726b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820727b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820728b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820729b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820730b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820731b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820732b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820733b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820734b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820735b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820736b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820737b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820738b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820739b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820740b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820741b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820742b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820743b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820744b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820745b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820746b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820747b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820748b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820749b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820750b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820751b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820752b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820753b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820754b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820755b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820756b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820757b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820758b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820759b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820760b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820761b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820762b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820763b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820764b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820765b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820766b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820767b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820768b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820769b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820770b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820771b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820772b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820773b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820774b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820775b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820776b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820777b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820778b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820779b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820780b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820781b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820782b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820783b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820784b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820785b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820786b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820787b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820788b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820789b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820790b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820791b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820792b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820793b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820794b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820795b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820796b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820797b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820798b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820799b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207cf", + "blocknumber": "1" + } + ], + "lastblockhash": "0x988b9317a6aafeb5b8a25953d92b2fe13ab5ecb6d92dafbde00b6748302e8420", + "sealEngine": "NoProof", + "_info": { + "hash": "0xdaeb5bade558b3310ecdbc1425222fc50c3b58b032ff3f6c50f994bc17f57759", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_different_eoa]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4742ee95cff22fb9be16496538804989517b1be110c1fa6f051a66fb81dfd577", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x86c1e2ae22b7874f1b88d5f9dfa5fdc4247d2f1d7f5dfeb4a6506d2cf10a8f82" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x03782dace9d9000000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", + "0x20": "0x02", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x01", + "balance": "0xabbcd4ef377578ac62", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xabbcd4ef3775772a2e", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04742ee95cff22fb9be16496538804989517b1be110c1fa6f051a66fb81dfd577a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x86c1e2ae22b7874f1b88d5f9dfa5fdc4247d2f1d7f5dfeb4a6506d2cf10a8f82", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe0cb69f12993f04430c8d3b9d0aaa8c8ff245e80ef24db2bd8a0ec69fda8a79f", + "transactionsTrie": "0xe2b304dffb7efb361e5a3f61fe6f0dd0ac96695c130397520faf83bcd07349df", + "receiptTrie": "0x9c8d7a917ecb3ff2566f264abbf39131e51b08b07eb2b69cb46989d79d985593", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x024f10", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0xfba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29", + "hash": "0xe0ee0395258646d91291a46d8e9dceeed0e853ac08ed405732d00c461c3f8915" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", + "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x151cafa851383f84aa9bca842d970013c41da06d4cbd9218ea6fd5d93444d045", + "s": "0x2065bb8cd6b28c631d62f56bd72fbf68083556891ffd575afd4746db4bf32d30", + "sender": "0x8a0a19589531694250d570040a0c4b74576919b8" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01" + } + ], + "rlp": "0xf907edf9025ea086c1e2ae22b7874f1b88d5f9dfa5fdc4247d2f1d7f5dfeb4a6506d2cf10a8f82a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0cb69f12993f04430c8d3b9d0aaa8c8ff245e80ef24db2bd8a0ec69fda8a79fa0e2b304dffb7efb361e5a3f61fe6f0dd0ac96695c130397520faf83bcd07349dfa09c8d7a917ecb3ff2566f264abbf39131e51b08b07eb2b69cb46989d79d985593b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083024f100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0fba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29f90404f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0151cafa851383f84aa9bca842d970013c41da06d4cbd9218ea6fd5d93444d045a02065bb8cd6b28c631d62f56bd72fbf68083556891ffd575afd4746db4bf32d30c0c0f90180b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301", + "blocknumber": "1" + } + ], + "lastblockhash": "0xe0ee0395258646d91291a46d8e9dceeed0e853ac08ed405732d00c461c3f8915", + "sealEngine": "NoProof", + "_info": { + "hash": "0x7839d070bb9ce35b39176bd6f114b6c93d1696674b535cc87df1856c5fe0781e", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_reverts]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x01bc16d674ec800000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0xabbcd4ef3775749890", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x56c98fb45185e3ff3abb34538d6cfae09eecb72fa637ceb8711046fba724d693", + "transactionsTrie": "0x1ebe5245285b870fc6fe65a4d2abe5505e258744b278320b3da11ec04dfe4312", + "receiptTrie": "0xc82ea3aed32f99d57c62cf4a61ebeddd2c4ad1036832fe87980fa1618885794a", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01a110", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", + "hash": "0x90841e61050efeb01eba54c86083bef86a72491262885789107a3e8e52d24476" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x038d7e692bb600", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011050dacbd9d78a9f0f096ca5067699a6bd87cdec624729493294f6819fbf72af1d0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2153b02aa61f4f5e55fae4ce1a797147e18843385b025e70e81d0e228b2173b9", + "s": "0x2cca4835e18337e42c2ce8f330f9b6e092902486cca2050460087651f1c28947", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8ab", + "s": "0x4300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf9072af9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa056c98fb45185e3ff3abb34538d6cfae09eecb72fa637ceb8711046fba724d693a01ebe5245285b870fc6fe65a4d2abe5505e258744b278320b3da11ec04dfe4312a0c82ea3aed32f99d57c62cf4a61ebeddd2c4ad1036832fe87980fa1618885794ab9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008301a1100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f90402f901fd8007830f42409400000000219ab540356cbb839cbe05303d7705fa87038d7e692bb600b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011050dacbd9d78a9f0f096ca5067699a6bd87cdec624729493294f6819fbf72af1d000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02153b02aa61f4f5e55fae4ce1a797147e18843385b025e70e81d0e228b2173b9a02cca4835e18337e42c2ce8f330f9b6e092902486cca2050460087651f1c28947f901ff0107830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8aba04300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0x90841e61050efeb01eba54c86083bef86a72491262885789107a3e8e52d24476", + "sealEngine": "NoProof", + "_info": { + "hash": "0xb4edc2e6ba43ab847ba1aa2b77711e2851b5d167129b44dcb2867dde5fb501f7", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_reverts]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x01bc16d674ec800000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0xabbcd4ef3775749890", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x56c98fb45185e3ff3abb34538d6cfae09eecb72fa637ceb8711046fba724d693", + "transactionsTrie": "0xaf65f2d4d731a80adae207f31956de025f71fabdf2be177d36676ac10c4a4526", + "receiptTrie": "0xc8d01292bbdb04ea17fb308a07f1ed3f6a3d6a7843e893effe15367cbcd37031", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01a110", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", + "hash": "0x3c553aad964a228089d3ec79937c90489136dbf0399b175f77ec4632b85176a2" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", + "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x038d7e692bb600", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011050dacbd9d78a9f0f096ca5067699a6bd87cdec624729493294f6819fbf72af1d0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xfd868d6bf9f187bbf5549b37b08cdfd1e3fb0d5fb784a40841711580379270e4", + "s": "0x5e8cafdc55d4f56947a79fbaee4f25b086cb16b32e1ff3c49de23b36248968a1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf9072af9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa056c98fb45185e3ff3abb34538d6cfae09eecb72fa637ceb8711046fba724d693a0af65f2d4d731a80adae207f31956de025f71fabdf2be177d36676ac10c4a4526a0c8d01292bbdb04ea17fb308a07f1ed3f6a3d6a7843e893effe15367cbcd37031b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008301a1100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f90402f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901fd0107830f42409400000000219ab540356cbb839cbe05303d7705fa87038d7e692bb600b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011050dacbd9d78a9f0f096ca5067699a6bd87cdec624729493294f6819fbf72af1d000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fd868d6bf9f187bbf5549b37b08cdfd1e3fb0d5fb784a40841711580379270e4a05e8cafdc55d4f56947a79fbaee4f25b086cb16b32e1ff3c49de23b36248968a1c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0x3c553aad964a228089d3ec79937c90489136dbf0399b175f77ec4632b85176a2", + "sealEngine": "NoProof", + "_info": { + "hash": "0xd2571df4769a15d985772795d16fea76121c6bf6067c6147c4fc1f587f35c1e9", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_oog]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x01bc16d674ec800000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0xabbcd4ef37756e5463", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x00c9d36026df936c32ba9a7749ae0e64666dd3de2ed46f3f72bb43ad9d204daa", + "transactionsTrie": "0xe9b6ac5f19e90e6a68cfc57ffefd5da7037ff4d61b709631b21f2e1d1702654e", + "receiptTrie": "0xd86dfcf1df602248008020fe5fc7f40151ea660dc7e803f49a380cb132ed3a90", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x02863b", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", + "hash": "0xbc1e9f4a5eb7f8ecacb508bc88e9b8b10a7b2f08474f2191bf8cc87555117aca" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x01431d", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0xf73ecea9be326c1a956c874fc2b3b173e73ec035a166115a90c4216586d21f5b", + "s": "0x58263c228938a5f189d1b7524794d37f092125b7aa86ca6863992ff840df5929", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8ab", + "s": "0x4300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf9072cf9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa000c9d36026df936c32ba9a7749ae0e64666dd3de2ed46f3f72bb43ad9d204daaa0e9b6ac5f19e90e6a68cfc57ffefd5da7037ff4d61b709631b21f2e1d1702654ea0d86dfcf1df602248008020fe5fc7f40151ea660dc7e803f49a380cb132ed3a90b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008302863b0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f90404f901ff80078301431d9400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f73ecea9be326c1a956c874fc2b3b173e73ec035a166115a90c4216586d21f5ba058263c228938a5f189d1b7524794d37f092125b7aa86ca6863992ff840df5929f901ff0107830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8aba04300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0xbc1e9f4a5eb7f8ecacb508bc88e9b8b10a7b2f08474f2191bf8cc87555117aca", + "sealEngine": "NoProof", + "_info": { + "hash": "0x64707e3202bc3654685d27d04e34c0f711e15ba6d36fb12ec9487d2fd8beed2c", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_oog]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x01bc16d674ec800000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0xabbcd4ef37756fd697", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e87608a0f0b51c4a8860103326006c464e3231b0111cb3355c720b537616bd6", + "transactionsTrie": "0xfbb9043be1f806ad1d978f0a782c18187b568daae57bc8c467f005a41ebf63f0", + "receiptTrie": "0xd537192233df21f3aaa013942c2b536d6c5f75db3cbc2a06e09b527193da0651", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x024f0f", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", + "hash": "0x8b0f610af0b3dd7bd694a5ff94eebaa198b6e44afbb6d17ef74394ace05641b2" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", + "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x07", + "gasLimit": "0x010bf1", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5ea326e2af26bca5002830cda5ca29b01e7490596e08db6a9f3839dd3035578b", + "s": "0x71b06e5fdca96479f7706312e62ef6880a78a00348b8bea20fbae5dfe6d658ce", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf9072cf9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e87608a0f0b51c4a8860103326006c464e3231b0111cb3355c720b537616bd6a0fbb9043be1f806ad1d978f0a782c18187b568daae57bc8c467f005a41ebf63f0a0d537192233df21f3aaa013942c2b536d6c5f75db3cbc2a06e09b527193da0651b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083024f0f0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f90404f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901ff010783010bf19400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05ea326e2af26bca5002830cda5ca29b01e7490596e08db6a9f3839dd3035578ba071b06e5fdca96479f7706312e62ef6880a78a00348b8bea20fbae5dfe6d658cec0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0x8b0f610af0b3dd7bd694a5ff94eebaa198b6e44afbb6d17ef74394ace05641b2", + "sealEngine": "NoProof", + "_info": { + "hash": "0x07590515ebefaa2a01c340956d69961124abb181225a5d1ca0a68656fbb633bd", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-send_eth_from_eoa]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac61fdc086", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe1bc2f01a1bb4121a7af75b6ab289d367ae619e00e4836c52f3f884cfe8be9e7", + "transactionsTrie": "0x39e1372cf70f9e0d0684b5e087d38a557dc1abbbed95ebac6cfebb5955da666f", + "receiptTrie": "0x2c8ff3746c00ed1dfd4a6ecd228b16d470a4633d7d09b9033fcde8072824f3a0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5236", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x0c694c4c65c3c97f48d273b7931ed8e9138e9ed4aee79d3dc808111737338a06" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x", + "v": "0x26", + "r": "0xbfb111ecdfd08a897f2ee25ca4c46ca64033c44ea7c23eb9b36f0299e593bf2a", + "s": "0x7ae544de2e973d6df6cd7c1af1637488999b96f83e48f526ab49c1846a4cb8f0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [], + "rlp": "0xf902d0f9025da09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e1bc2f01a1bb4121a7af75b6ab289d367ae619e00e4836c52f3f884cfe8be9e7a039e1372cf70f9e0d0684b5e087d38a557dc1abbbed95ebac6cfebb5955da666fa02c8ff3746c00ed1dfd4a6ecd228b16d470a4633d7d09b9033fcde8072824f3a0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252360c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86bf8698007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec8000008026a0bfb111ecdfd08a897f2ee25ca4c46ca64033c44ea7c23eb9b36f0299e593bf2aa07ae544de2e973d6df6cd7c1af1637488999b96f83e48f526ab49c1846a4cb8f0c0c0c0", + "blocknumber": "1" + } + ], + "lastblockhash": "0x0c694c4c65c3c97f48d273b7931ed8e9138e9ed4aee79d3dc808111737338a06", + "sealEngine": "NoProof", + "_info": { + "hash": "0x4a27bfc45f706228ac29f188781a414d10bfb3e9f3d1ac46e34e47fa586bac29", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbabe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xabbcd4ef3775800000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x01bc16d674ec800000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac61f628d2", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0babe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x533b638d6e9ef6a4b477ac873886de573a503f7cf62b493d11a5e22277625ae7", + "transactionsTrie": "0x302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6", + "receiptTrie": "0x205016b809d87a4d5cf38435c64419adf2bef7b1abf2d67a0ae1dc105cc04619", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0167e2", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", + "hash": "0xaf1ce2e109e2301af86cd3f3498d2ab87ce51d27762e4f7e92c06ec747d4a09b" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", + "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf90521f9025ea03cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0533b638d6e9ef6a4b477ac873886de573a503f7cf62b493d11a5e22277625ae7a0302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6a0205016b809d87a4d5cf38435c64419adf2bef7b1abf2d67a0ae1dc105cc04619b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830167e20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f901f9f901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ec0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0xaf1ce2e109e2301af86cd3f3498d2ab87ce51d27762e4f7e92c06ec747d4a09b", + "sealEngine": "NoProof", + "_info": { + "hash": "0x557402cbf7aa45f82942361982e036097a3a61c1ee2080e536322f6791517622", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x76b380f6d83bc4013efa88d1a4ce29c9804ede3c14b67f8eff5701f710e9bf89", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9109772be4a327d4b0fc4f7f754683a1aea5de4290e20e979ab4f329ff3bee7b" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xabaef43883ce1c0000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x01c9f78d2893e40000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x01": "0x3a968154458dd8e8f2552c48a438fca9f2292e75ae22c4852c0926f58cef116c", + "0x20": "0x02", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac61f1116d", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a076b380f6d83bc4013efa88d1a4ce29c9804ede3c14b67f8eff5701f710e9bf89a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x9109772be4a327d4b0fc4f7f754683a1aea5de4290e20e979ab4f329ff3bee7b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x907567fb5e9fff9ed0d9a116e1749e0d6e62052445a25cdf8c1cc411459691e4", + "transactionsTrie": "0x9b91299bab917b6d03f75b8c163cfc91944f39b8ddabc606fd27b4602bdbeeb5", + "receiptTrie": "0xa6755caa8220d259543dac387041bf8ed79256747e461c2417cf4ec0f52229c6", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x022215", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0xb6f79c3a538bbfae7908cc60b490cffb950738ba1ee358b457321c930010fc3e", + "hash": "0xeea5d13534f4d682df4d68301d294fd3b933cd5ab5659a9e09b548e980acaab7" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x62a36ac5c520eb0d7228531756de393ca5868292b58fbb5c1b44d54a70a44181", + "s": "0x4ee4de764a47ba34a2ae5fcd3d33e59ad3ee0ff3bde8732136ea3fb6bf1c7ff7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01" + } + ], + "rlp": "0xf90775f9025ea09109772be4a327d4b0fc4f7f754683a1aea5de4290e20e979ab4f329ff3bee7ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0907567fb5e9fff9ed0d9a116e1749e0d6e62052445a25cdf8c1cc411459691e4a09b91299bab917b6d03f75b8c163cfc91944f39b8ddabc606fd27b4602bdbeeb5a0a6755caa8220d259543dac387041bf8ed79256747e461c2417cf4ec0f52229c6b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830222150c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0b6f79c3a538bbfae7908cc60b490cffb950738ba1ee358b457321c930010fc3ef9038df9038a8007830f424094000000000000000000000000000000000000020080b9032822895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a062a36ac5c520eb0d7228531756de393ca5868292b58fbb5c1b44d54a70a44181a04ee4de764a47ba34a2ae5fcd3d33e59ad3ee0ff3bde8732136ea3fb6bf1c7ff7c0c0f9017fb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301", + "blocknumber": "1" + } + ], + "lastblockhash": "0xeea5d13534f4d682df4d68301d294fd3b933cd5ab5659a9e09b548e980acaab7", + "sealEngine": "NoProof", + "_info": { + "hash": "0x10d743461e01ccccc9f207469340e207648da8411d363b2c768ea9eb17b9cea6", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_first_reverts]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x999fad76b129e7d51069ef92df397027b4ad846d60519921aeeec48a9024f790", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xee46510fa733945f21ec23098c97b12a3e591e5959431fcb1f29c7c7b6b5fe21" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x6101946000600037600060006101946000670de0b6b36bc936006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad6b0b0ef8ba9c0000", + "code": "0x6101946000600037600060006101946000670de0b6b36bc936006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x0de0b6b3a7640000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x46b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac61f5197d", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0999fad76b129e7d51069ef92df397027b4ad846d60519921aeeec48a9024f790a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0xee46510fa733945f21ec23098c97b12a3e591e5959431fcb1f29c7c7b6b5fe21", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x73f2701e4d39346e501fb48f32dc94ddb4e1f7c96d9567b0d4697ed3dfa530fb", + "transactionsTrie": "0x82da41971cdd334acbae330f507abee7795f58ead6da0f2d254545eba9d51240", + "receiptTrie": "0xf17272aaae851f50bed0363f377a1a72faf85791d5cede6cde4475350e1dedad", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x018ea5", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x64e4ae3d3f1934be8def3c80e2066f2bcfb8954f0ce18022fd6c817583279c08", + "hash": "0x5557e3c6ae0a31a5f9d01deee55e7e616bd9f10b95739adc16316bd7832d9c92" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011053826ae596a0805ec6b8f0a4de97dc32adea791e2437083e662caa166f6edc1b000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x8188f80358ff1a4bc78dce45b8529211b7335fbbdf467e58bc9a0b01ab88ce49", + "s": "0x3744154693a1c4cd56c0c9ed05216e3cad834e3462fe4876f4b1237290f8218a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf906b4f9025ea0ee46510fa733945f21ec23098c97b12a3e591e5959431fcb1f29c7c7b6b5fe21a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa073f2701e4d39346e501fb48f32dc94ddb4e1f7c96d9567b0d4697ed3dfa530fba082da41971cdd334acbae330f507abee7795f58ead6da0f2d254545eba9d51240a0f17272aaae851f50bed0363f377a1a72faf85791d5cede6cde4475350e1dedadb9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083018ea50c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a064e4ae3d3f1934be8def3c80e2066f2bcfb8954f0ce18022fd6c817583279c08f9038df9038a8007830f424094000000000000000000000000000000000000020080b9032822895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011053826ae596a0805ec6b8f0a4de97dc32adea791e2437083e662caa166f6edc1b000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08188f80358ff1a4bc78dce45b8529211b7335fbbdf467e58bc9a0b01ab88ce49a03744154693a1c4cd56c0c9ed05216e3cad834e3462fe4876f4b1237290f8218ac0c0f8bfb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0x5557e3c6ae0a31a5f9d01deee55e7e616bd9f10b95739adc16316bd7832d9c92", + "sealEngine": "NoProof", + "_info": { + "hash": "0xb354a27cb17b7d0c677adb8f628753a02f5a2810758342e2b6dedd433b419bac", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_last_reverts]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x37963e5c5cd0f74d513991625dd55b2311981a902dbccf22f0ad09bc09f2bc3d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x5a6224ce9ded0ac504a817bda1c748affe312d62bee7ad4cf2aeafc5db56fef8" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x6101946000600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b36bc936006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad6b0b0ef8ba9c0000", + "code": "0x6101946000600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b36bc936006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x0de0b6b3a7640000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x46b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac61f5197d", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a037963e5c5cd0f74d513991625dd55b2311981a902dbccf22f0ad09bc09f2bc3da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x5a6224ce9ded0ac504a817bda1c748affe312d62bee7ad4cf2aeafc5db56fef8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x958b62b7d72784f8ec0b92c7cdac08ef7292b9d89456dcf21e78037141ef212b", + "transactionsTrie": "0xb9e988dc4d0b7ab5a0a74b5b3b211e8bad1d3c5d4e9abdfff7a5f8c57cdb7e98", + "receiptTrie": "0xf17272aaae851f50bed0363f377a1a72faf85791d5cede6cde4475350e1dedad", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x018ea5", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x64e4ae3d3f1934be8def3c80e2066f2bcfb8954f0ce18022fd6c817583279c08", + "hash": "0x49e71c3003ec932d9e474967a49b06b14d627c01fdb96da823cfedf7d9545673" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011053826ae596a0805ec6b8f0a4de97dc32adea791e2437083e662caa166f6edc1b0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x2dea5995a1b5331ee5166c5234d9cd3d04516de5db32c1247fc816908e6dd4ed", + "s": "0x473ebc91b18bae95feaf09ef0cf8f02bb3900433e51011e610ff0119f8631bd7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x3b9aca00", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf906b4f9025ea05a6224ce9ded0ac504a817bda1c748affe312d62bee7ad4cf2aeafc5db56fef8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0958b62b7d72784f8ec0b92c7cdac08ef7292b9d89456dcf21e78037141ef212ba0b9e988dc4d0b7ab5a0a74b5b3b211e8bad1d3c5d4e9abdfff7a5f8c57cdb7e98a0f17272aaae851f50bed0363f377a1a72faf85791d5cede6cde4475350e1dedadb9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083018ea50c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a064e4ae3d3f1934be8def3c80e2066f2bcfb8954f0ce18022fd6c817583279c08f9038df9038a8007830f424094000000000000000000000000000000000000020080b9032822895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011053826ae596a0805ec6b8f0a4de97dc32adea791e2437083e662caa166f6edc1b000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02dea5995a1b5331ee5166c5234d9cd3d04516de5db32c1247fc816908e6dd4eda0473ebc91b18bae95feaf09ef0cf8f02bb3900433e51011e610ff0119f8631bd7c0c0f8bfb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0x49e71c3003ec932d9e474967a49b06b14d627c01fdb96da823cfedf7d9545673", + "sealEngine": "NoProof", + "_info": { + "hash": "0x2c088003448475d27b6ed283ca757d0763a07916deb9c05b36a284443cf76b24", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_caller_reverts]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6ab4970026ca18c2db52a6441d754c6530263267a5f96f13ef61916451290762", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xbba838427632c0a988954007c4420975c7a836df15bad2a4cf1c72e26b647ba9" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af15060006000fd", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af15060006000fd", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac61f11143", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ab4970026ca18c2db52a6441d754c6530263267a5f96f13ef61916451290762a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0xbba838427632c0a988954007c4420975c7a836df15bad2a4cf1c72e26b647ba9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcfd886611c30ad2c89cfaa7b2a6d11bbd08cb5287f28a2b17cc4432a453670f7", + "transactionsTrie": "0x9b91299bab917b6d03f75b8c163cfc91944f39b8ddabc606fd27b4602bdbeeb5", + "receiptTrie": "0x21cdaa45c33cf93bc4fd1e7045676fd58056183537ba1243bcd7ad1d6472faf8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x02221b", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf218fb9dd77a0088aab41046dc7925b954da20d795e274cbceb0ec5b356bc200" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x62a36ac5c520eb0d7228531756de393ca5868292b58fbb5c1b44d54a70a44181", + "s": "0x4ee4de764a47ba34a2ae5fcd3d33e59ad3ee0ff3bde8732136ea3fb6bf1c7ff7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [], + "rlp": "0xf905f4f9025ea0bba838427632c0a988954007c4420975c7a836df15bad2a4cf1c72e26b647ba9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cfd886611c30ad2c89cfaa7b2a6d11bbd08cb5287f28a2b17cc4432a453670f7a09b91299bab917b6d03f75b8c163cfc91944f39b8ddabc606fd27b4602bdbeeb5a021cdaa45c33cf93bc4fd1e7045676fd58056183537ba1243bcd7ad1d6472faf8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008302221b0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9038df9038a8007830f424094000000000000000000000000000000000000020080b9032822895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a062a36ac5c520eb0d7228531756de393ca5868292b58fbb5c1b44d54a70a44181a04ee4de764a47ba34a2ae5fcd3d33e59ad3ee0ff3bde8732136ea3fb6bf1c7ff7c0c0c0", + "blocknumber": "1" + } + ], + "lastblockhash": "0xf218fb9dd77a0088aab41046dc7925b954da20d795e274cbceb0ec5b356bc200", + "sealEngine": "NoProof", + "_info": { + "hash": "0x38f936eb2ce2ec0605ae2942dca1072cb79da049206aa58b52a0b0732fe92cc0", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_single_deposit_from_eoa]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbabe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xabbcd4ef3775800000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x03782dace9d9000000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", + "0x20": "0x02", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0xabbcd4ef37756ed534", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0babe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9b199228312510cfacf934f232793a95bcf8033d8d781abd0a6fa4c2728439bc", + "transactionsTrie": "0x79fc5803680c7fefb38b53299280848f14c8a370c1326d789e54dee51d21fca3", + "receiptTrie": "0x2389410d6da5588bfca9d515b397c44d55a444057331dbab156f453ba791bcc3", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0273d4", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0xfba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29", + "hash": "0x07f457eb1e9945427d805f2bf0a84a588a54ee62eaf3b3a2de3c774b12fb74b8" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", + "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8ab", + "s": "0x4300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01" + } + ], + "rlp": "0xf907e4f9025ea03cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09b199228312510cfacf934f232793a95bcf8033d8d781abd0a6fa4c2728439bca079fc5803680c7fefb38b53299280848f14c8a370c1326d789e54dee51d21fca3a02389410d6da5588bfca9d515b397c44d55a444057331dbab156f453ba791bcc3b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830273d40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0fba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29f903fbf901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ef901ff0107830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8aba04300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855c0c0f90180b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301", + "blocknumber": "1" + } + ], + "lastblockhash": "0x07f457eb1e9945427d805f2bf0a84a588a54ee62eaf3b3a2de3c774b12fb74b8", + "sealEngine": "NoProof", + "_info": { + "hash": "0x94c26151e0cd40ccd8ee24ef173fc6e5501c1503dd425ab2aea80206f6b90b28", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_single_deposit_from_contract]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbabe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xabbcd4ef3775800000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x03782dace9d9000000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", + "0x20": "0x02", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0xabbcd4ef37756ed534", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0babe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9b199228312510cfacf934f232793a95bcf8033d8d781abd0a6fa4c2728439bc", + "transactionsTrie": "0x559bc1f447286fbc2c9d444975f69fd4e2e811b81065b7c2729c867010484883", + "receiptTrie": "0x709ff470d8abd16a7c36cf42fdd620e84b70cddcbb21a519ae8f3b8173dc2128", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0273d4", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0xfba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29", + "hash": "0xba8e98a070716ca39d126e461b8fccd33e85ed832031c10fc7e0ced4a572fa8c" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", + "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0a850a008373fdab91dc4cc54c2f35cf95fc1e2e20843b7cebba3951eab1e8a1", + "s": "0x61ef31836e7be7e8262df7ad2d129349fb940c57baf860705991f98f0a1663c8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01" + } + ], + "rlp": "0xf907e4f9025ea03cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09b199228312510cfacf934f232793a95bcf8033d8d781abd0a6fa4c2728439bca0559bc1f447286fbc2c9d444975f69fd4e2e811b81065b7c2729c867010484883a0709ff470d8abd16a7c36cf42fdd620e84b70cddcbb21a519ae8f3b8173dc2128b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830273d40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0fba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29f903fbf901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901f60107830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00a850a008373fdab91dc4cc54c2f35cf95fc1e2e20843b7cebba3951eab1e8a1a061ef31836e7be7e8262df7ad2d129349fb940c57baf860705991f98f0a1663c8c0c0f90180b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301", + "blocknumber": "1" + } + ], + "lastblockhash": "0xba8e98a070716ca39d126e461b8fccd33e85ed832031c10fc7e0ced4a572fa8c", + "sealEngine": "NoProof", + "_info": { + "hash": "0x9f1a55f4633849e4f3c3f585c1c67df56b866c855ad8ce5c6fe2d72a900eedcb", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_between_eoa_deposits]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbabe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xabbcd4ef3775800000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x053444835ec5800000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", + "0x20": "0x03", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x03", + "balance": "0xaa00be18c288e9f31a", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0babe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x74f289c7fd81ac35fc5ffb5db3ffbf6608dd54d28e639b1662ab670110df6d5c", + "transactionsTrie": "0xc307333061d40ec0137ec938c89122643ec88e6ca28fd3cca677f5a5372e6059", + "receiptTrie": "0x07881abbf8c8bb3545de68ead33df0ae428c848849ae96cc5ef8752d3edc9d6d", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x03266a", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0xe9d994e854499fd3fa4b6a94f37f77f1d50fd385b09470f875bedabb3ccc3d1f", + "hash": "0xce8509e9a42a7eb48b60d102432cfadf799c0301a6dfa1d8b8bd978395a418a5" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", + "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x0a850a008373fdab91dc4cc54c2f35cf95fc1e2e20843b7cebba3951eab1e8a1", + "s": "0x61ef31836e7be7e8262df7ad2d129349fb940c57baf860705991f98f0a1663c8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x733ad6925a6ca48ea48a185ee58523d418d9d73d3cbfaf53c4414ed59af8c4e9", + "s": "0x31efec56c003f247a95d310150edfb0d165193990e8f923291b77f7704f095cc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02" + } + ], + "rlp": "0xf90aa6f9025ea03cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa074f289c7fd81ac35fc5ffb5db3ffbf6608dd54d28e639b1662ab670110df6d5ca0c307333061d40ec0137ec938c89122643ec88e6ca28fd3cca677f5a5372e6059a007881abbf8c8bb3545de68ead33df0ae428c848849ae96cc5ef8752d3edc9d6db9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008303266a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0e9d994e854499fd3fa4b6a94f37f77f1d50fd385b09470f875bedabb3ccc3d1ff905fdf901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901f60107830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00a850a008373fdab91dc4cc54c2f35cf95fc1e2e20843b7cebba3951eab1e8a1a061ef31836e7be7e8262df7ad2d129349fb940c57baf860705991f98f0a1663c8f901ff0207830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0733ad6925a6ca48ea48a185ee58523d418d9d73d3cbfaf53c4414ed59af8c4e9a031efec56c003f247a95d310150edfb0d165193990e8f923291b77f7704f095ccc0c0f90240b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302", + "blocknumber": "1" + } + ], + "lastblockhash": "0xce8509e9a42a7eb48b60d102432cfadf799c0301a6dfa1d8b8bd978395a418a5", + "sealEngine": "NoProof", + "_info": { + "hash": "0x6f53bde186c01580f2149135986895f3b10cfbf1fd357833adf5bcde6e8bf5ca", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_between_contract_deposits]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x76a2e98018880a8d1a6bc36e50f42d9d690c527e3a11f4cf8aa654f787dd7790", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x40892bc6d47af1c57be3fdc6063a9a516d90b3cef90e3b7ca6da702ecbd6af13" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000300": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xabbcd4ef3775800000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000300": { + "nonce": "0x01", + "balance": "0xabbcd4ef3775800000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x053444835ec5800000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", + "0x20": "0x03", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x03", + "balance": "0xabbcd4ef377568f1be", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a076a2e98018880a8d1a6bc36e50f42d9d690c527e3a11f4cf8aa654f787dd7790a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x40892bc6d47af1c57be3fdc6063a9a516d90b3cef90e3b7ca6da702ecbd6af13", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x98899f3ddae833dbb269ca979e5b523a61c66db7f93fb6b65588d13523d16bfc", + "transactionsTrie": "0x2e977fb428dbca7409c408d5e7269f9f4cd621b5cbe63dc06bebc92eedae4f45", + "receiptTrie": "0xab7cdf98405009ebc7cad14698bdfdf2275f13a59cd38a9b1d2d641cc2e90fd6", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x034b2e", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0xe9d994e854499fd3fa4b6a94f37f77f1d50fd385b09470f875bedabb3ccc3d1f", + "hash": "0x724b96fc1df1a0699be602f35048bdf8977bd34c1d770312a2f0495e9dc3c856" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", + "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x00000000219ab540356cbb839cbe05303d7705fa", + "value": "0x01bc16d674ec800000", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x5bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8ab", + "s": "0x4300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000300", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xbd624e9ff95747d7a41794070acaf04a8c8662a2b695aefb1833e20b7443d7e5", + "s": "0x7c60672fcd14981370b23062f146728fbb3715a959f357958685768c3a456019", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x01" + }, + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x02" + } + ], + "rlp": "0xf90a9df9025ea040892bc6d47af1c57be3fdc6063a9a516d90b3cef90e3b7ca6da702ecbd6af13a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098899f3ddae833dbb269ca979e5b523a61c66db7f93fb6b65588d13523d16bfca02e977fb428dbca7409c408d5e7269f9f4cd621b5cbe63dc06bebc92eedae4f45a0ab7cdf98405009ebc7cad14698bdfdf2275f13a59cd38a9b1d2d641cc2e90fd6b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083034b2e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0e9d994e854499fd3fa4b6a94f37f77f1d50fd385b09470f875bedabb3ccc3d1ff905f4f901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ef901ff0107830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8aba04300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855f901f60207830f424094000000000000000000000000000000000000030080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bd624e9ff95747d7a41794070acaf04a8c8662a2b695aefb1833e20b7443d7e5a07c60672fcd14981370b23062f146728fbb3715a959f357958685768c3a456019c0c0f90240b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302", + "blocknumber": "1" + } + ], + "lastblockhash": "0x724b96fc1df1a0699be602f35048bdf8977bd34c1d770312a2f0495e9dc3c856", + "sealEngine": "NoProof", + "_info": { + "hash": "0x0a1a4c3d47f37c2b569f475d03e61e6e2bf090306cbdc38c38b7dda2b9383d2e", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_delegatecall]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x456b5f953201b135253a2acb455eb873706423abceb0061b75f471084165055c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x2a57e20b8638b22f85c5700bb7fc1c7ad2c5c55047111be60510fdeab49c90b1" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006f219ab540356cbb839cbe05303d7705fa5af450", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006f219ab540356cbb839cbe05303d7705fa5af450", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac61fd244f", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0456b5f953201b135253a2acb455eb873706423abceb0061b75f471084165055ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x2a57e20b8638b22f85c5700bb7fc1c7ad2c5c55047111be60510fdeab49c90b1", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9b0c41f8c1e35996ef078dcf205b4e973dd840ca75cb761b37f44757e89409b2", + "transactionsTrie": "0x302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6", + "receiptTrie": "0xfd3f0fd297d0041e89f18bbd0af74b8dcf857f06832e393c3320ac72fca3e275", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6887", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x56925d63d598aae896cd85d4acf5fa18fbffbf00636a2acaae1d4dc21d937a76" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", + "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [], + "rlp": "0xf9045ff9025da02a57e20b8638b22f85c5700bb7fc1c7ad2c5c55047111be60510fdeab49c90b1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09b0c41f8c1e35996ef078dcf205b4e973dd840ca75cb761b37f44757e89409b2a0302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6a0fd3f0fd297d0041e89f18bbd0af74b8dcf857f06832e393c3320ac72fca3e275b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008268870c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f901f9f901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ec0c0c0", + "blocknumber": "1" + } + ], + "lastblockhash": "0x56925d63d598aae896cd85d4acf5fa18fbffbf00636a2acaae1d4dc21d937a76", + "sealEngine": "NoProof", + "_info": { + "hash": "0x08c4061211e745ec18529e748e11b155752feb8a713c93ece5c7a079b695107a", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_staticcall]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x27102520020adaaf699985a76ae3091f37e61aa5063298e326beee421d87fc90", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x6c1169af5b86c18ea0443c31bc457db845f21c08bf1eaf9a3ed7048e6051dc4f" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006f219ab540356cbb839cbe05303d7705fa5afa50", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006f219ab540356cbb839cbe05303d7705fa5afa50", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac61fd244f", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a027102520020adaaf699985a76ae3091f37e61aa5063298e326beee421d87fc90a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x6c1169af5b86c18ea0443c31bc457db845f21c08bf1eaf9a3ed7048e6051dc4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8347a5d7a6d7a6ecf05dc8a624a56672161ab7ea07a7eb2ea0d7d97cd71b8df1", + "transactionsTrie": "0x302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6", + "receiptTrie": "0xfd3f0fd297d0041e89f18bbd0af74b8dcf857f06832e393c3320ac72fca3e275", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6887", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x91dfc5f2a9f44c28975dfdc2f353178e6df79dfa838601b97dab494e880bb200" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", + "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [], + "rlp": "0xf9045ff9025da06c1169af5b86c18ea0443c31bc457db845f21c08bf1eaf9a3ed7048e6051dc4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08347a5d7a6d7a6ecf05dc8a624a56672161ab7ea07a7eb2ea0d7d97cd71b8df1a0302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6a0fd3f0fd297d0041e89f18bbd0af74b8dcf857f06832e393c3320ac72fca3e275b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008268870c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f901f9f901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ec0c0c0", + "blocknumber": "1" + } + ], + "lastblockhash": "0x91dfc5f2a9f44c28975dfdc2f353178e6df79dfa838601b97dab494e880bb200", + "sealEngine": "NoProof", + "_info": { + "hash": "0x1b3ae61ee053aff0e7e3c2766ac05cf4a1900af8f2f7b36f031ba595144ae054", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_callcode]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd4f0de4324af40dc5a5515bfe4090da87996052c229a19f3d91270b801925f7b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x266e9196df3df3c7d12e4dded9c0789a267f814cc7a798110c1c704ec1136311" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af250", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af250", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x20": "0x01" + } + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac61f628d2", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d4f0de4324af40dc5a5515bfe4090da87996052c229a19f3d91270b801925f7ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x266e9196df3df3c7d12e4dded9c0789a267f814cc7a798110c1c704ec1136311", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf2dcc06113e2a781bfe7d67dd85e1a93b2415e4140958f7512c2b9a7d1cb04cc", + "transactionsTrie": "0x302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6", + "receiptTrie": "0x246d2ee9836ddb0f7d15f8358c33d0939ff490cb49d4bae41cb8bf125a400581", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000080000000000000000000000008000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0167e2", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf8efa0254336afd219ff83c01cd67bfee8c139428258f6e9599c8672373278bd" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000200", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", + "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [], + "rlp": "0xf90460f9025ea0266e9196df3df3c7d12e4dded9c0789a267f814cc7a798110c1c704ec1136311a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2dcc06113e2a781bfe7d67dd85e1a93b2415e4140958f7512c2b9a7d1cb04cca0302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6a0246d2ee9836ddb0f7d15f8358c33d0939ff490cb49d4bae41cb8bf125a400581b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000080000000000000000000000008000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830167e20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f901f9f901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ec0c0c0", + "blocknumber": "1" + } + ], + "lastblockhash": "0xf8efa0254336afd219ff83c01cd67bfee8c139428258f6e9599c8672373278bd", + "sealEngine": "NoProof", + "_info": { + "hash": "0x54cff4abe0f4ab10248e0f306c11910e41a530060ae381deac402ed33483948e", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_call_depth_3]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xf5599c089c5bbf3a0d9d68a397907bf365b2e8f1f5430e9c4c60d1c4e553cee6", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x3cdc793a479660ad7f18cc316d4946c4f62e005d26e210ae37e0eab975304836" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000201": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102005af150", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xabbcd4ef3775800000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000201": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102005af150", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x01bc16d674ec800000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac61f5deb8", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0f5599c089c5bbf3a0d9d68a397907bf365b2e8f1f5430e9c4c60d1c4e553cee6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0x3cdc793a479660ad7f18cc316d4946c4f62e005d26e210ae37e0eab975304836", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd220bd36e89484c97d6b37bbe283298590c9b9a05ab071d86f8d50b9c14d9f46", + "transactionsTrie": "0xa571917db15626d8bc5a10b3edcd4a5ce2ac32dc973cb34cfa1027acedbf2379", + "receiptTrie": "0x2dcdeb6cdb8d9670ec16929614d39271aaba206a62818bf3034a0e4a19f3c778", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x017278", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", + "hash": "0x9c42f0884101f094d8e8b65abcf08a57306b7950cd7dff5c3acb1b9b030a06c8" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000201", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x25", + "r": "0xe9784a3c6b7bc731af30faac5c279958e269c72a91ce406a74a9953ca955771b", + "s": "0x5a8bf050a0b155f14d2cb4fe26457783e2cc04b0a149976b44f22ca6c22f7b53", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf90521f9025ea03cdc793a479660ad7f18cc316d4946c4f62e005d26e210ae37e0eab975304836a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d220bd36e89484c97d6b37bbe283298590c9b9a05ab071d86f8d50b9c14d9f46a0a571917db15626d8bc5a10b3edcd4a5ce2ac32dc973cb34cfa1027acedbf2379a02dcdeb6cdb8d9670ec16929614d39271aaba206a62818bf3034a0e4a19f3c778b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830172780c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f901f9f901f68007830f424094000000000000000000000000000000000000020180b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e9784a3c6b7bc731af30faac5c279958e269c72a91ce406a74a9953ca955771ba05a8bf050a0b155f14d2cb4fe26457783e2cc04b0a149976b44f22ca6c22f7b53c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0x9c42f0884101f094d8e8b65abcf08a57306b7950cd7dff5c3acb1b9b030a06c8", + "sealEngine": "NoProof", + "_info": { + "hash": "0x7267d5d0298a839c178493f4f51e6193f17e0d6bc7288a121f3fbb24c4e1bf54", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + }, + "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_call_high_depth]": { + "network": "Prague", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8f8a5ff479e425495fc6eac413e9db3378694c7611bbc6b1e47e8980ed3434df", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xb758f56efac696f1516f4858c182638796cb23f858bda02b0150550357a57d4c" + }, + "pre": { + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xad78ebc5ac62000000", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000201": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102005af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000202": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102015af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000203": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102025af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000204": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102035af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000205": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102045af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000206": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102055af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000207": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102065af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000208": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102075af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000209": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102085af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102095af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000210": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000211": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102105af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000212": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102115af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000213": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102125af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000214": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102135af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000215": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102145af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000216": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102155af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000217": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102165af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000218": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102175af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000219": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102185af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102195af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000220": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000221": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102205af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000222": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102215af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000223": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102225af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000224": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102235af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000225": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102245af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000226": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102255af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000227": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102265af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000228": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102275af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000229": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102285af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102295af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000230": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000231": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102305af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000232": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102315af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000233": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102325af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000234": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102335af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000235": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102345af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000236": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102355af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000237": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102365af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000238": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102375af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000239": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102385af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102395af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000240": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000241": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102405af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000242": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102415af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000243": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102425af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000244": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102435af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000245": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102445af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000246": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102455af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000247": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102465af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000248": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102475af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000249": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102485af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102495af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000250": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000251": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102505af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000252": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102515af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000253": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102525af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000254": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102535af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000255": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102545af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000256": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102555af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000257": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102565af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000258": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102575af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000259": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102585af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102595af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000260": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000261": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102605af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000262": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102615af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000263": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102625af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000264": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102635af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000265": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102645af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000266": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102655af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000267": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102665af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000268": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102675af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000269": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102685af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102695af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000270": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000271": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102705af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000272": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102715af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000273": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102725af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000274": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102735af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000275": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102745af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000276": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102755af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000277": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102765af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000278": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102775af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000279": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102785af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102795af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000280": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000281": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102805af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000282": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102815af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000283": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102825af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000284": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102835af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000285": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102845af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000286": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102855af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000287": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102865af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000288": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102875af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000289": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102885af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102895af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000290": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000291": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102905af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000292": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102915af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000293": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102925af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000294": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102935af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000295": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102945af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000296": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102955af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000297": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102965af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000298": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102975af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000299": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102985af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102995af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029e5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029f5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002aa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ab": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102aa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ac": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ab5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ad": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ac5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ae": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ad5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002af": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ae5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102af5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ba": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002bb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ba5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002bc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102bb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002bd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102bc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002be": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102bd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002bf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102be5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102bf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ca": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002cb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ca5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002cc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102cb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002cd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102cc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ce": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102cd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002cf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ce5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102cf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002da": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002db": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102da5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002dc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102db5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002dd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102dc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002de": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102dd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002df": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102de5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102df5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ea": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002eb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ea5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ec": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102eb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ed": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ec5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ee": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ed5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ef": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ee5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ef5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002fa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002fb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102fa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002fc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102fb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002fd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102fc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002fe": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102fd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ff": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102fe5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000300": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ff5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000301": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103005af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000302": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103015af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000303": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103025af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000304": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103035af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000305": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103045af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000306": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103055af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000307": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103065af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000308": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103075af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000309": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103085af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103095af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000310": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000311": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103105af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000312": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103115af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000313": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103125af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000314": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103135af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000315": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103145af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000316": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103155af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000317": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103165af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000318": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103175af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000319": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103185af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103195af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000320": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000321": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103205af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000322": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103215af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000323": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103225af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000324": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103235af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000325": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103245af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000326": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103255af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000327": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103265af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000328": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103275af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000329": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103285af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103295af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000330": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000331": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103305af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000332": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103315af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000333": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103325af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000334": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103335af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000335": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103345af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000336": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103355af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000337": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103365af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000338": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103375af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000339": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103385af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103395af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000340": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000341": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103405af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000342": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103415af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000343": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103425af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000344": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103435af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000345": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103445af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000346": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103455af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000347": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103465af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000348": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103475af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000349": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103485af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103495af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000350": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000351": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103505af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000352": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103515af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000353": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103525af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000354": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103535af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000355": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103545af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000356": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103555af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000357": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103565af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000358": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103575af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000359": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103585af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103595af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000360": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000361": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103605af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000362": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103615af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000363": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103625af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000364": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103635af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000365": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103645af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000366": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103655af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000367": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103665af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000368": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103675af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000369": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103685af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103695af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000370": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000371": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103705af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000372": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103715af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000373": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103725af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000374": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103735af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000375": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103745af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000376": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103755af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000377": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103765af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000378": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103775af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000379": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103785af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103795af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000380": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000381": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103805af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000382": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103815af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000383": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103825af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000384": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103835af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000385": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103845af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000386": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103855af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000387": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103865af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000388": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103875af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000389": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103885af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103895af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000390": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000391": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103905af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000392": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103915af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000393": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103925af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000394": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103935af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000395": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103945af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000396": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103955af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000397": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103965af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000398": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103975af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000399": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103985af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103995af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039e5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039f5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003aa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ab": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103aa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ac": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ab5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ad": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ac5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ae": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ad5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003af": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ae5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103af5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ba": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003bb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ba5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003bc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103bb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003bd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103bc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003be": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103bd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003bf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103be5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103bf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ca": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003cb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ca5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003cc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103cb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003cd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103cc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ce": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103cd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003cf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ce5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103cf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003da": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003db": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103da5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003dc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103db5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003dd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103dc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003de": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103dd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003df": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103de5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103df5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ea": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003eb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ea5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ec": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103eb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ed": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ec5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ee": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ed5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ef": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ee5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ef5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003fa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003fb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103fa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003fc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103fb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003fd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103fc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003fe": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103fd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ff": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103fe5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000400": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ff5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000401": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104005af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000402": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104015af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000403": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104025af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000404": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104035af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000405": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104045af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000406": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104055af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000407": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104065af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000408": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104075af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000409": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104085af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104095af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000410": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000411": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104105af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000412": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104115af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000413": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104125af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000414": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104135af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000415": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104145af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000416": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104155af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000417": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104165af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000418": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104175af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000419": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104185af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104195af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000420": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000421": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104205af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000422": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104215af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000423": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104225af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000424": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104235af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000425": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104245af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000426": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104255af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000427": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104265af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000428": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104275af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000429": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104285af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104295af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000430": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000431": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104305af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000432": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104315af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000433": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104325af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000434": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104335af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000435": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104345af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000436": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104355af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000437": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104365af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000438": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104375af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000439": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104385af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104395af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000440": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000441": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104405af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000442": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104415af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000443": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104425af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000444": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104435af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000445": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104445af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000446": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104455af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000447": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104465af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000448": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104475af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000449": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104485af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104495af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000450": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000451": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104505af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000452": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104515af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000453": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104525af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000454": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104535af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000455": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104545af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000456": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104555af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000457": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104565af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000458": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104575af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000459": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104585af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104595af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000460": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000461": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104605af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000462": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104615af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000463": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104625af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000464": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104635af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000465": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104645af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000466": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104655af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000467": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104665af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000468": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104675af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000469": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104685af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104695af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000470": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000471": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104705af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000472": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104715af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000473": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104725af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000474": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104735af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000475": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104745af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000476": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104755af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000477": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104765af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000478": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104775af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000479": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104785af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104795af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000480": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000481": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104805af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000482": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104815af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000483": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104825af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000484": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104835af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000485": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104845af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000486": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104855af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000487": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104865af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000488": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104875af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000489": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104885af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104895af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000490": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000491": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104905af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000492": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104915af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000493": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104925af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000494": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104935af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000495": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104945af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000496": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104955af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000497": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104965af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000498": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104975af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000499": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104985af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104995af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049e5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049f5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004aa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ab": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104aa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ac": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ab5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ad": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ac5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ae": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ad5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004af": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ae5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104af5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ba": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004bb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ba5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004bc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104bb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004bd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104bc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004be": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104bd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004bf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104be5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104bf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ca": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004cb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ca5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004cc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104cb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004cd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104cc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ce": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104cd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004cf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ce5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104cf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004da": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004db": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104da5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004dc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104db5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004dd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104dc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004de": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104dd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004df": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104de5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104df5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ea": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004eb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ea5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ec": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104eb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ed": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ec5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ee": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ed5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ef": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ee5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ef5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004fa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004fb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104fa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004fc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104fb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004fd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104fc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004fe": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104fd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ff": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104fe5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000500": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ff5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000501": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105005af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000502": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105015af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000503": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105025af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000504": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105035af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000505": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105045af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000506": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105055af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000507": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105065af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000508": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105075af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000509": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105085af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105095af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000510": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000511": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105105af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105115af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000513": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105125af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000514": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105135af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000515": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105145af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000516": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105155af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000517": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105165af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000518": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105175af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000519": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105185af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105195af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000520": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000521": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105205af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000522": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105215af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000523": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105225af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000524": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105235af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000525": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105245af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000526": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105255af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000527": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105265af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000528": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105275af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000529": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105285af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105295af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000530": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000531": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105305af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000532": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105315af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000533": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105325af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000534": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105335af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000535": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105345af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000536": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105355af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000537": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105365af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000538": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105375af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000539": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105385af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105395af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000540": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000541": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105405af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000542": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105415af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000543": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105425af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000544": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105435af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000545": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105445af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000546": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105455af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000547": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105465af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000548": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105475af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000549": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105485af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105495af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000550": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000551": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105505af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000552": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105515af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000553": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105525af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000554": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105535af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000555": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105545af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000556": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105555af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000557": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105565af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000558": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105575af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000559": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105585af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105595af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000560": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000561": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105605af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000562": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105615af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000563": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105625af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000564": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105635af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000565": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105645af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000566": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105655af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000567": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105665af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000568": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105675af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000569": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105685af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105695af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000570": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000571": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105705af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000572": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105715af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000573": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105725af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000574": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105735af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000575": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105745af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000576": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105755af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000577": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105765af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000578": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105775af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000579": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105785af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105795af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000580": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000581": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105805af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000582": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105815af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000583": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105825af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000584": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105835af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000585": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105845af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000586": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105855af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000587": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105865af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000588": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105875af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000589": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105885af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105895af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000590": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000591": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105905af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000592": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105915af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000593": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105925af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000594": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105935af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000595": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105945af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000596": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105955af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000597": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105965af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000598": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105975af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000599": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105985af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105995af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059e5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059f5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005aa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ab": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105aa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ac": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ab5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ad": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ac5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ae": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ad5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005af": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ae5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105af5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ba": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005bb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ba5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005bc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105bb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005bd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105bc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005be": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105bd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005bf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105be5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105bf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ca": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005cb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ca5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005cc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105cb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005cd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105cc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ce": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105cd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005cf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ce5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105cf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005da": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005db": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105da5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005dc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105db5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005dd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105dc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005de": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105dd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005df": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105de5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105df5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ea": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005eb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ea5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ec": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105eb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ed": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ec5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ee": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ed5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ef": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ee5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ef5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005fa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005fb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105fa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005fc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105fb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005fd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105fc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005fe": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105fd5af150", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000200": { + "nonce": "0x01", + "balance": "0xabbcd4ef3775800000", + "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000201": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102005af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000202": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102015af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000203": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102025af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000204": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102035af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000205": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102045af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000206": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102055af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000207": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102065af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000208": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102075af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000209": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102085af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102095af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000020f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000210": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061020f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000211": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102105af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000212": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102115af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000213": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102125af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000214": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102135af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000215": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102145af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000216": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102155af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000217": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102165af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000218": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102175af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000219": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102185af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102195af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000021f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000220": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061021f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000221": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102205af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000222": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102215af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000223": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102225af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000224": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102235af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000225": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102245af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000226": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102255af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000227": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102265af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000228": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102275af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000229": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102285af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102295af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000022f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000230": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061022f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000231": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102305af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000232": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102315af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000233": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102325af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000234": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102335af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000235": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102345af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000236": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102355af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000237": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102365af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000238": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102375af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000239": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102385af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102395af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000023f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000240": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061023f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000241": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102405af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000242": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102415af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000243": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102425af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000244": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102435af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000245": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102445af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000246": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102455af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000247": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102465af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000248": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102475af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000249": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102485af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102495af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000024f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000250": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061024f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000251": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102505af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000252": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102515af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000253": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102525af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000254": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102535af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000255": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102545af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000256": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102555af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000257": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102565af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000258": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102575af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000259": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102585af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102595af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000025f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000260": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061025f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000261": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102605af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000262": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102615af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000263": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102625af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000264": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102635af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000265": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102645af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000266": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102655af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000267": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102665af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000268": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102675af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000269": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102685af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102695af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000026f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000270": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061026f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000271": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102705af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000272": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102715af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000273": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102725af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000274": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102735af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000275": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102745af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000276": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102755af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000277": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102765af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000278": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102775af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000279": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102785af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102795af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000027f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000280": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061027f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000281": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102805af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000282": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102815af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000283": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102825af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000284": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102835af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000285": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102845af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000286": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102855af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000287": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102865af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000288": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102875af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000289": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102885af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102895af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000028f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000290": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061028f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000291": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102905af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000292": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102915af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000293": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102925af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000294": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102935af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000295": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102945af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000296": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102955af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000297": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102965af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000298": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102975af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000299": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102985af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102995af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000029f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029e5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061029f5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002a9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002aa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102a95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ab": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102aa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ac": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ab5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ad": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ac5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ae": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ad5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002af": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ae5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102af5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002b9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ba": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102b95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002bb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ba5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002bc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102bb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002bd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102bc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002be": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102bd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002bf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102be5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102bf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002c9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ca": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102c95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002cb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ca5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002cc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102cb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002cd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102cc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ce": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102cd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002cf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ce5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102cf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002d9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002da": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102d95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002db": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102da5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002dc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102db5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002dd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102dc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002de": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102dd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002df": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102de5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102df5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002e9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ea": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102e95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002eb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ea5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ec": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102eb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ed": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ec5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ee": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ed5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ef": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ee5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ef5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002f9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002fa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102f95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002fb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102fa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002fc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102fb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002fd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102fc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002fe": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102fd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000002ff": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102fe5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000300": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006102ff5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000301": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103005af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000302": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103015af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000303": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103025af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000304": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103035af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000305": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103045af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000306": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103055af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000307": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103065af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000308": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103075af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000309": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103085af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103095af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000030f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000310": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061030f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000311": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103105af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000312": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103115af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000313": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103125af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000314": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103135af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000315": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103145af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000316": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103155af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000317": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103165af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000318": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103175af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000319": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103185af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103195af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000031f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000320": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061031f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000321": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103205af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000322": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103215af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000323": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103225af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000324": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103235af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000325": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103245af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000326": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103255af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000327": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103265af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000328": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103275af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000329": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103285af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103295af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000032f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000330": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061032f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000331": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103305af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000332": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103315af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000333": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103325af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000334": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103335af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000335": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103345af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000336": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103355af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000337": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103365af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000338": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103375af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000339": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103385af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103395af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000033f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000340": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061033f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000341": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103405af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000342": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103415af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000343": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103425af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000344": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103435af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000345": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103445af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000346": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103455af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000347": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103465af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000348": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103475af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000349": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103485af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103495af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000034f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000350": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061034f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000351": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103505af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000352": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103515af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000353": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103525af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000354": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103535af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000355": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103545af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000356": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103555af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000357": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103565af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000358": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103575af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000359": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103585af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103595af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000035f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000360": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061035f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000361": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103605af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000362": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103615af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000363": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103625af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000364": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103635af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000365": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103645af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000366": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103655af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000367": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103665af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000368": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103675af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000369": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103685af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103695af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000036f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000370": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061036f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000371": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103705af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000372": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103715af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000373": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103725af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000374": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103735af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000375": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103745af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000376": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103755af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000377": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103765af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000378": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103775af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000379": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103785af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103795af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000037f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000380": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061037f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000381": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103805af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000382": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103815af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000383": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103825af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000384": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103835af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000385": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103845af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000386": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103855af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000387": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103865af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000388": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103875af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000389": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103885af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103895af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000038f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000390": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061038f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000391": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103905af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000392": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103915af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000393": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103925af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000394": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103935af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000395": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103945af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000396": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103955af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000397": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103965af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000398": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103975af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000399": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103985af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103995af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000039f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039e5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061039f5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003a9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003aa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103a95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ab": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103aa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ac": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ab5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ad": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ac5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ae": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ad5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003af": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ae5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103af5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003b9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ba": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103b95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003bb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ba5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003bc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103bb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003bd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103bc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003be": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103bd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003bf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103be5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103bf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003c9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ca": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103c95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003cb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ca5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003cc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103cb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003cd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103cc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ce": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103cd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003cf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ce5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103cf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003d9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003da": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103d95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003db": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103da5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003dc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103db5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003dd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103dc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003de": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103dd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003df": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103de5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103df5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003e9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ea": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103e95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003eb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ea5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ec": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103eb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ed": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ec5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ee": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ed5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ef": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ee5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ef5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003f9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003fa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103f95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003fb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103fa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003fc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103fb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003fd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103fc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003fe": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103fd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000003ff": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103fe5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000400": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006103ff5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000401": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104005af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000402": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104015af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000403": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104025af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000404": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104035af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000405": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104045af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000406": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104055af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000407": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104065af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000408": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104075af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000409": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104085af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104095af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000040f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000410": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061040f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000411": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104105af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000412": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104115af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000413": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104125af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000414": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104135af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000415": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104145af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000416": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104155af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000417": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104165af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000418": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104175af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000419": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104185af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104195af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000041f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000420": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061041f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000421": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104205af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000422": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104215af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000423": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104225af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000424": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104235af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000425": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104245af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000426": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104255af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000427": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104265af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000428": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104275af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000429": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104285af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104295af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000042f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000430": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061042f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000431": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104305af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000432": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104315af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000433": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104325af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000434": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104335af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000435": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104345af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000436": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104355af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000437": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104365af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000438": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104375af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000439": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104385af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104395af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000043f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000440": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061043f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000441": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104405af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000442": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104415af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000443": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104425af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000444": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104435af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000445": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104445af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000446": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104455af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000447": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104465af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000448": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104475af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000449": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104485af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104495af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000044f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000450": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061044f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000451": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104505af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000452": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104515af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000453": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104525af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000454": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104535af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000455": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104545af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000456": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104555af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000457": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104565af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000458": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104575af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000459": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104585af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104595af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000045f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000460": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061045f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000461": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104605af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000462": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104615af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000463": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104625af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000464": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104635af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000465": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104645af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000466": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104655af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000467": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104665af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000468": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104675af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000469": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104685af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104695af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000046f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000470": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061046f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000471": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104705af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000472": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104715af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000473": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104725af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000474": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104735af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000475": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104745af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000476": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104755af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000477": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104765af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000478": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104775af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000479": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104785af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104795af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000047f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000480": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061047f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000481": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104805af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000482": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104815af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000483": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104825af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000484": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104835af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000485": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104845af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000486": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104855af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000487": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104865af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000488": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104875af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000489": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104885af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104895af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000048f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000490": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061048f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000491": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104905af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000492": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104915af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000493": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104925af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000494": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104935af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000495": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104945af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000496": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104955af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000497": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104965af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000498": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104975af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000499": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104985af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104995af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000049f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049e5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061049f5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004a9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004aa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104a95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ab": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104aa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ac": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ab5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ad": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ac5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ae": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ad5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004af": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ae5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104af5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004b9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ba": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104b95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004bb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ba5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004bc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104bb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004bd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104bc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004be": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104bd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004bf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104be5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104bf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004c9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ca": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104c95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004cb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ca5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004cc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104cb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004cd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104cc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ce": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104cd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004cf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ce5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104cf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004d9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004da": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104d95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004db": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104da5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004dc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104db5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004dd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104dc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004de": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104dd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004df": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104de5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104df5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004e9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ea": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104e95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004eb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ea5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ec": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104eb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ed": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ec5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ee": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ed5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ef": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ee5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ef5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004f9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004fa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104f95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004fb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104fa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004fc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104fb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004fd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104fc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004fe": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104fd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000004ff": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104fe5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000500": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006104ff5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000501": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105005af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000502": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105015af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000503": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105025af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000504": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105035af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000505": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105045af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000506": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105055af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000507": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105065af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000508": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105075af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000509": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105085af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105095af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000050f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000510": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061050f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000511": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105105af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105115af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000513": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105125af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000514": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105135af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000515": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105145af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000516": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105155af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000517": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105165af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000518": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105175af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000519": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105185af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105195af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000051f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000520": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061051f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000521": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105205af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000522": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105215af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000523": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105225af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000524": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105235af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000525": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105245af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000526": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105255af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000527": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105265af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000528": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105275af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000529": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105285af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105295af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000052f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000530": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061052f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000531": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105305af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000532": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105315af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000533": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105325af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000534": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105335af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000535": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105345af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000536": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105355af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000537": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105365af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000538": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105375af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000539": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105385af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105395af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000053f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000540": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061053f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000541": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105405af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000542": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105415af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000543": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105425af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000544": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105435af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000545": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105445af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000546": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105455af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000547": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105465af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000548": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105475af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000549": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105485af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105495af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000054f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000550": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061054f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000551": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105505af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000552": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105515af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000553": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105525af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000554": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105535af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000555": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105545af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000556": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105555af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000557": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105565af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000558": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105575af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000559": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105585af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105595af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000055f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000560": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061055f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000561": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105605af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000562": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105615af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000563": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105625af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000564": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105635af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000565": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105645af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000566": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105655af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000567": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105665af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000568": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105675af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000569": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105685af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105695af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000056f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000570": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061056f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000571": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105705af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000572": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105715af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000573": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105725af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000574": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105735af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000575": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105745af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000576": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105755af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000577": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105765af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000578": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105775af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000579": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105785af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105795af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000057f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000580": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061057f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000581": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105805af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000582": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105815af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000583": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105825af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000584": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105835af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000585": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105845af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000586": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105855af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000587": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105865af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000588": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105875af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000589": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105885af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105895af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000058f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058e5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000590": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061058f5af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000591": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105905af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000592": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105915af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000593": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105925af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000594": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105935af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000595": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105945af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000596": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105955af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000597": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105965af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000598": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105975af150", + "storage": {} + }, + "0x0000000000000000000000000000000000000599": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105985af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059a": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105995af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059a5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059c": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059b5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059d": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059c5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059e": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059d5af150", + "storage": {} + }, + "0x000000000000000000000000000000000000059f": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059e5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x36600060003760006000366000600061059f5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005a9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005aa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105a95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ab": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105aa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ac": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ab5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ad": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ac5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ae": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ad5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005af": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ae5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105af5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005b9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ba": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105b95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005bb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ba5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005bc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105bb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005bd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105bc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005be": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105bd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005bf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105be5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105bf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005c9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ca": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105c95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005cb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ca5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005cc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105cb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005cd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105cc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ce": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105cd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005cf": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ce5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105cf5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005d9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005da": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105d95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005db": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105da5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005dc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105db5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005dd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105dc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005de": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105dd5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005df": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105de5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105df5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005e9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ea": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105e95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005eb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ea5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ec": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105eb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ed": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ec5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ee": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ed5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005ef": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ee5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f0": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105ef5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f1": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f05af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f2": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f15af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f3": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f25af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f4": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f35af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f5": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f45af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f6": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f55af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f7": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f65af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f8": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f75af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005f9": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f85af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005fa": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105f95af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005fb": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105fa5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005fc": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105fb5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005fd": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105fc5af150", + "storage": {} + }, + "0x00000000000000000000000000000000000005fe": { + "nonce": "0x01", + "balance": "0xad78ebc5ac62000000", + "code": "0x3660006000376000600036600060006105fd5af150", + "storage": {} + }, + "0x00000000219ab540356cbb839cbe05303d7705fa": { + "nonce": "0x01", + "balance": "0x01bc16d674ec800000", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", + "storage": { + "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", + "0x20": "0x01", + "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xad78ebc5ac60ce5506", + "code": "0x", + "storage": {} + } + }, + "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08f8a5ff479e425495fc6eac413e9db3378694c7611bbc6b1e47e8980ed3434dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", + "blocks": [ + { + "blockHeader": { + "parentHash": "0xb758f56efac696f1516f4858c182638796cb23f858bda02b0150550357a57d4c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x79d1140dada3817661b1aa8e720ab7221340ceba4683a0e68ee8865b8d9b1fd2", + "transactionsTrie": "0x2c3246fff7d874af17839e880ef9712ff08e76d9888acf082c59ed2158874b05", + "receiptTrie": "0x3a34448fb2eee61491e1fec53a616409ca679ba3049d5961438fd394634f893a", + "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x2baab6", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", + "hash": "0x7ee731b9a457fa1297eac2b32ec521abcd60571d369d6460126b203efe6e1d9e" + }, + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x0246139ca800", + "to": "0x00000000000000000000000000000000000005fe", + "value": "0x00", + "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "v": "0x26", + "r": "0x94504f92848f6ec77a8a8866c34ef90ed334a41cb258b7f8e20117491f2fe6f9", + "s": "0x70ee55ab7fbf20b29a8416d62e1ad2bf0abfed3d37d6d0f183539559b3c354c3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [], + "depositRequests": [ + { + "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", + "amount": "0x0773594000", + "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "index": "0x00" + } + ], + "rlp": "0xf90524f9025ea0b758f56efac696f1516f4858c182638796cb23f858bda02b0150550357a57d4ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa079d1140dada3817661b1aa8e720ab7221340ceba4683a0e68ee8865b8d9b1fd2a02c3246fff7d874af17839e880ef9712ff08e76d9888acf082c59ed2158874b05a03a34448fb2eee61491e1fec53a616409ca679ba3049d5961438fd394634f893ab9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000832baab60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f901fcf901f98007860246139ca8009400000000000000000000000000000000000005fe80b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a094504f92848f6ec77a8a8866c34ef90ed334a41cb258b7f8e20117491f2fe6f9a070ee55ab7fbf20b29a8416d62e1ad2bf0abfed3d37d6d0f183539559b3c354c3c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", + "blocknumber": "1" + } + ], + "lastblockhash": "0x7ee731b9a457fa1297eac2b32ec521abcd60571d369d6460126b203efe6e1d9e", + "sealEngine": "NoProof", + "_info": { + "hash": "0x67fe4b69dd8bf0b07cf56574625dd77d6ada5b1088b1e1202847cee8aaed8d6e", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", + "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" + } + } +} \ No newline at end of file diff --git a/src/Nethermind/Ethereum.Blockchain.Test/EIP6110Tests.cs b/src/Nethermind/Ethereum.Blockchain.Test/EIP6110Tests.cs new file mode 100644 index 00000000000..d55bf6b3af1 --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Test/EIP6110Tests.cs @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Ethereum.Test.Base; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Test +{ + [TestFixture] + [Parallelizable(ParallelScope.All)] + public class Eip6110Tests : GeneralStateTestBase + { + [TestCaseSource(nameof(LoadTests))] + public void Test(GeneralStateTest test) + { + Assert.True(RunTest(test).Pass); + } + + public static IEnumerable LoadTests() + { + var loader = new TestsSourceLoader(new LoadGeneralStateTestsStrategy(), "stEIP6110"); + return (IEnumerable)loader.LoadTests(); + } + } +} diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index 51483884796..2a474b85eaa 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -206,6 +206,7 @@ public static IEnumerable Convert(string name, GeneralStateTes } List blockchainTests = new(); + Console.WriteLine($"Loaded {testJson}"); foreach (KeyValuePair postStateBySpec in testJson.Post) { int iterationNumber = 0; @@ -284,9 +285,11 @@ public static IEnumerable Convert(string json) { Dictionary testsInFile = _serializer.Deserialize>(json); + List tests = new(); foreach (KeyValuePair namedTest in testsInFile) { + Console.WriteLine($"Loading {namedTest.Key}\n {namedTest.Value.Post}"); tests.AddRange(Convert(namedTest.Key, namedTest.Value)); } diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index 5d79feb6c39..15f100c9136 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -70,6 +70,12 @@ public int GetBodyLength(BlockBody b) { if (b.Withdrawals is not null) { + if (b.Requests is not null) + { + return Rlp.LengthOfSequence(GetTxLength(b.Transactions)) + + Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)) + Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)) + + Rlp.LengthOfSequence(GetRequestsLength(b.Requests)); + } return Rlp.LengthOfSequence(GetTxLength(b.Transactions)) + Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)) + Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)); } @@ -92,6 +98,11 @@ private int GetWithdrawalsLength(Withdrawal[] withdrawals) return withdrawals.Sum(t => _withdrawalDecoderDecoder.GetLength(t, RlpBehaviors.None)); } + private int GetRequestsLength(ConsensusRequest[] requests) + { + return requests.Sum(t => _requestsDecoder.GetLength(t, RlpBehaviors.None)); + } + public BlockBody? Decode(ref Rlp.ValueDecoderContext ctx, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int sequenceLength = ctx.ReadSequenceLength(); @@ -143,6 +154,15 @@ public void Serialize(RlpStream stream, BlockBody body) stream.Encode(withdrawal); } } + + if (body.Requests is not null) + { + stream.StartSequence(GetRequestsLength(body.Requests)); + foreach (ConsensusRequest? request in body.Requests) + { + stream.Encode(request); + } + } } } } From 4ae90945e3d92f49ad25b2e7a4246608d479f6b2 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Fri, 3 May 2024 12:43:34 +0530 Subject: [PATCH 224/551] delete deposit.json --- deposit.json | 59498 ------------------------------------------------- 1 file changed, 59498 deletions(-) delete mode 100644 deposit.json diff --git a/deposit.json b/deposit.json deleted file mode 100644 index bd967ceda9b..00000000000 --- a/deposit.json +++ /dev/null @@ -1,59498 +0,0 @@ -{ - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x01bc16d674ec800000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xabbcd4ef3775772a2e", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x33d1b02e518079b1f462efa8ffabbb13fb3a142aea75d42c7978d0a6f5622726", - "transactionsTrie": "0xe358c23815a60947e22eb923a8f47bd278987db94733b3ed2f19c6962d6e62cb", - "receiptTrie": "0xe9f13c7db67acb65121481f4f9eff264b27373d92b1001d85f22320b5f1368fa", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x01431e", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", - "hash": "0xb694225955d5bb7c03af09a1a9f27904d6e2130fe8db0f0927f0947b4235994d" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", - "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf9052af9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa033d1b02e518079b1f462efa8ffabbb13fb3a142aea75d42c7978d0a6f5622726a0e358c23815a60947e22eb923a8f47bd278987db94733b3ed2f19c6962d6e62cba0e9f13c7db67acb65121481f4f9eff264b27373d92b1001d85f22320b5f1368fab9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008301431e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f90202f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0xb694225955d5bb7c03af09a1a9f27904d6e2130fe8db0f0927f0947b4235994d", - "sealEngine": "NoProof", - "_info": { - "hash": "0x892c966c756e4119ef3ee2dd4d5ca39cdc542101bba91c707e272b987a96e359", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_huge_amount]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6890e07ca610e7682d606531ef36ee7231dae289710e4fdb85782ec7a1dd96fa", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x3d52fc6ce4e834b9ae72464c1477d8f2e23d43f5dacfd3ef6477dff6ea9f4601" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0x6342fd16d0c6171f640000", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x6342fd08f00f6378000000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0xc1733701655adf967efe9100e8cfa043802fdf6322431cb5a173bf9f311f407d", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0x0de0b6b3a75b2a82", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06890e07ca610e7682d606531ef36ee7231dae289710e4fdb85782ec7a1dd96faa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x3d52fc6ce4e834b9ae72464c1477d8f2e23d43f5dacfd3ef6477dff6ea9f4601", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa96c6d9b1baba233e8a67f9b2630ab159c6ce84f290a9c123908de69f5066478", - "transactionsTrie": "0x6b58604864da65ad9111e4dfeb8fa663921fc126f71e74942eb2398366d39922", - "receiptTrie": "0x6460e6adca5c9e2dec7c74de0de0e5d75b6e870d51fc39e289ad1ed39228ec75", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x014312", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x8e1ba7a0215358a51dd5acc48ee6feed9cf38f525ec99583738db0046988e3e2", - "hash": "0x4c3177429fe6aaa951ab2d23ceb7d72231d337afba6f6303805e739f382175ac" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x6342fd08f00f6378000000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000000110c1733701655adf967efe9100e8cfa043802fdf6322431cb5a173bf9f311f407d0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x02398da2aaf2046852e261d8a0be0d0986d14d3eafe70322a3c27579adbf593d", - "s": "0x18770cc6d9b095bce62195bd201f4b79db8297301bb90970a71192d1367b8e35", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x01aa535d3d0c0000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf9052ff9025ea03d52fc6ce4e834b9ae72464c1477d8f2e23d43f5dacfd3ef6477dff6ea9f4601a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a96c6d9b1baba233e8a67f9b2630ab159c6ce84f290a9c123908de69f5066478a06b58604864da65ad9111e4dfeb8fa663921fc126f71e74942eb2398366d39922a06460e6adca5c9e2dec7c74de0de0e5d75b6e870d51fc39e289ad1ed39228ec75b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830143120c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a08e1ba7a0215358a51dd5acc48ee6feed9cf38f525ec99583738db0046988e3e2f90204f902018007830f42409400000000219ab540356cbb839cbe05303d7705fa8b6342fd08f00f6378000000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000000110c1733701655adf967efe9100e8cfa043802fdf6322431cb5a173bf9f311f407d000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a002398da2aaf2046852e261d8a0be0d0986d14d3eafe70322a3c27579adbf593da018770cc6d9b095bce62195bd201f4b79db8297301bb90970a71192d1367b8e35c0c0f8c3b8c100f8beb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000028801aa535d3d0c0000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0x4c3177429fe6aaa951ab2d23ceb7d72231d337afba6f6303805e739f382175ac", - "sealEngine": "NoProof", - "_info": { - "hash": "0x4fbaa02481e66915a609d4b4f018e40bd03de45d9f1b547e258501856d8a7f9e", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x03782dace9d9000000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", - "0x20": "0x02", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x02", - "balance": "0xaa00be18c288efd690", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x5a3dded7e41139197ff26480034c53134f17b420027374d0a5ba68c46deef5bc", - "transactionsTrie": "0x2b790bf82ef7259a0e4513d1b89a77d81e99672ba68758ef2ba3fde32851d023", - "receiptTrie": "0x9c8d7a917ecb3ff2566f264abbf39131e51b08b07eb2b69cb46989d79d985593", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x024f10", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0xfba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29", - "hash": "0xb164f1922a21bcba751e0e045289fb784fc8df9f650324e9df157c76c0434116" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", - "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8ab", - "s": "0x4300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01" - } - ], - "rlp": "0xf907edf9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05a3dded7e41139197ff26480034c53134f17b420027374d0a5ba68c46deef5bca02b790bf82ef7259a0e4513d1b89a77d81e99672ba68758ef2ba3fde32851d023a09c8d7a917ecb3ff2566f264abbf39131e51b08b07eb2b69cb46989d79d985593b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083024f100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0fba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29f90404f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901ff0107830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8aba04300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855c0c0f90180b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301", - "blocknumber": "1" - } - ], - "lastblockhash": "0xb164f1922a21bcba751e0e045289fb784fc8df9f650324e9df157c76c0434116", - "sealEngine": "NoProof", - "_info": { - "hash": "0xb2119e4716821d4d5294158edd2f4f30935602768641a815653dfcee69e7e833", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_high_count]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x6c6b935b8bbd400000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x46b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9", - "0x01": "0xb32a298167876b57c5ebd4b953a6699512c5f768ddccb4c746ff31cf904aee44", - "0x02": "0x90141a44dac70eb24eca43db4089fb9461fd1304bc8d92d8abc98cf3388fe6a0", - "0x03": "0x0a03cdabe62f3f8573116942c1415708fa4eabe6978c322ccecf18f4396e67b7", - "0x04": "0x81a9f81177da067c7053450afa31a3dddc5ed33f78541ab7d0b2e62e99984bbc", - "0x05": "0x6985de225036bc96f8cb90412b330ac7beb84eb42a58976f468dc6a5fbffa9b3", - "0x06": "0x27df9f1cce102019216473e26d94b2f6b72648227af9e6a3aef0500d25d3afa9", - "0x07": "0xd5fce5d388fae4438ed672887b604e7ba0cf39e6a7bda203a7afe7ebc34287f7", - "0x08": "0xabb70c203712ea9b8e073831d1ac1c0eafd529674d1ba9148b3be4d2ef1fc55f", - "0x09": "0x57b9f7ff1d1efb2dd4f6e8aaa09efc7f4b3a89c42a07c9af156e89fbe77674c5", - "0x0a": "0xc7a7bc49082458da7e084740ff6d3f821d7953a1102811542ee7f9e215e3f117", - "0x20": "0x07d0", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x07d0", - "balance": "0x410d586a207c0680d7", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x45b91a6de5e21daa74baa5ba69ae904a3decbf15e7211eaf845701e55efe5221", - "transactionsTrie": "0x9832988f2e56130730b13372b8bb2b429f5faa477ab0f69dd95ac4be4601ed81", - "receiptTrie": "0x0a22918f5496d638dcf1c65c0205974e2288ba3ade03ff6b9b77b00906650f27", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x05d15b4f", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0xee1fdd8114b7c672f67093d83f01b7b042bbe744da6bf2ecc97d6e824101ada9", - "hash": "0x988b9317a6aafeb5b8a25953d92b2fe13ab5ecb6d92dafbde00b6748302e8420" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x30bfaadde922e07317ec3fa2976b8b705a5442fb9ee84eb6e0fd91a450be17b4", - "s": "0x41257abd690f8ecb1197e00c3159cb16f5bd1318d60460260064eabcbfdf3006", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1f953db14db7ac12dcfe4a3bf5673b2fefdd5f05536ec9714d5b2396afd7c01f", - "s": "0x7bbed78cf0d3b6bf45962e3d33b7c58e0ad263b3c7168a618305cd690880a842", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xae7f6d2ff9f1396ca646269e917a7232e92287f74fca578160a9810d9ebcee84", - "s": "0x123e5b6ab498ff9bdda0abf2f11ac58c6bd69d36b7855db172faced230e38a14", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x48cace09a9d8b80ee1fce66547e192b15ee2b12fd6839d6d88a733f61e6dd325", - "s": "0x115fb47c4f8cab29186935eb325f8ad938b2ddbbe826ec01b650a809983534c7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x861c18c825531c9f4b77829cdfd30f65446b047f990da11249d3b1a67b4f9325", - "s": "0x1bcc1ff2e73e35f44e9e9f1be76661fe73680632e503808f9a4be090e4e155e7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x50fbe885b2b502173c23180d9baff06c199199e84cb8fe901064ceeae581a8ba", - "s": "0x249232d8309166719f796b490724758bc443aa20c2c267ad0850b77b1346af03", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4fabbbbfedf60c926b84add1d41b172cb38cad9697e045638fd692b3288f0079", - "s": "0x405e713144b205d30ebae217330e39a08671f1f3039a19346eb3ee0758253de8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdae805ecef72558ed56432a303fae74f2a2cfd42cc700c3e030e77bab430370e", - "s": "0x3855e4cdf81322864a298381e5f557f87e452e314638287e84d6c7dd87f26069", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd15d3dbdcad0fa346c1c0acf70c373b4b19a959092a0f9ffeeb91395c8c0ac43", - "s": "0x39b7820c18370e747dabe12a1f4aa3fa33f6ab461a97ffd44601ee4becefd18a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6eff2f34b6821b345eaf7172308f07411d3ea86953270cc8d7d26dca4d0d180d", - "s": "0x18e91821c35f923cddb3b4b9f9e0b31ff0557a33a2802f99abed62b2d71a6b50", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9eb91429146f87e966dfe5f0e680d614b90d445a7024f0d3147df824222e7cfd", - "s": "0x381fd142e704c51ea4cf15c884884d3d3fb54468322712a935cbca147fdbb781", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x81f2280555928874904cfc3f5fab5c174f8ee1b13ee9570753f9720df1c79b56", - "s": "0x21357a1fdf2ad683fbcb4b629839e238cef8149dfc67263a736e2b77e93819d3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xba6a97889900794b405e9841710694a81cd2038fbf5e14b4a63f752ec0482049", - "s": "0x1a2f7a08e9c8a066c968a60ce39fe0d0184dafe35f2d9a8a9acc237282d2f329", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf44c4480b6910737b9422d6ad6ac5f92410433b9d1e24876588717e65b89b438", - "s": "0x4855832825a190f7edbfd82694a0ae4a10cc79c3508775fdea3a645dc7e36b82", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x910a78eb187da9330075c1cd560eb805e116ea34fc5ae5dc02fe3429fbab938a", - "s": "0x40d85a615e70169a6f79c444e9a7d4f1f2568c7ba2563e8972647776ce0176e4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdc44ba25575ed7eecdaf772d37e071386f737a35a78ae0cc9c66ba852ae9cf6f", - "s": "0x5110901d4e54deaa7f8322cfbeadb63eb3b984bd837fe500fb06671a2ad57133", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x10", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8c4f8e06874b43512d0b150eaf9279e2f434684404df2317221006b9e7ed46d9", - "s": "0x6005605cb5393654fc39e47ef7d93fd4f10a6de6b5bbcf2c80310f8377ccfc7b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x11", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xef27130e159c446f39f09268f342b91e36c30659b5cb526050b9440979bc4949", - "s": "0x39b752a48abe9c89bdacda591b52b46306be7325bf10e7c9b46236fc7bc5ff73", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x12", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1281f265da4c0c96221584fc99ef4eadcb04c26e4b3c17494a843e5796265c53", - "s": "0x08ede8ba6f0ee70db3efbd6af7967e15f5b0a1a35f62e44da2dad602effa6746", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x13", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1ff11ffab646cb92362b1630911b7692503786a331102ec1f1f7f71b708713f7", - "s": "0x43257da3dd01fea90ff91a15b0e2b2bdbbef5469aa0b50d982e216a0e43e1ed2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x14", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x208d7d2c54a3416c00eea31f3f94cac01c3337688c6317fa697607406f08f5ee", - "s": "0x0df2927462f5eeda4be51e5b727339874ee7671a5f4dbb111b68ee42ee5fa5be", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x15", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1475d86c913756348ef44bf0b9f1f4a2979dd13247eee5a70975392d0d4ec994", - "s": "0x431928daaf03cb384a3a059d338d1e290e96380a69363287fa5230acc1b6f3fb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x16", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc8de8d69b8026d35d3b4d73ec13300e5951f462d1a68f4be0c1c5b177346ad08", - "s": "0x3d1353c74101b31f680a29f3d9d0e5614675fc535e8abf8439da9422301172bc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x17", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf9dda6a3fbf0ae965bc16564995cb506229655307ba01748313ad99da8eb6002", - "s": "0x76e5da59ce108b2e249323ce8d8467219b2145dd192939fd45c4187e73fbc55c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x18", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1b5572ceb4c3a9631638a85dd3b9716753a96efe8287d5496615e35b5fbf77d6", - "s": "0x233aea4c3a49b3b4d5f862905001abb97adfbaf4fc2828df167e96b4ce0c1c0a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x19", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x34716c28bfacd6d4246ff8873bbc19b7e6f467ce75c593fef158521e47ae7f67", - "s": "0x78d92dab02ebd52feee2cec39e60522889c3d4efcac20fa0c0ef41c9f420ad7d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x1a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeec4ea41e915d78772db83b8d6be6e1c3cb62381e87729ba030ed6b61f6e0b49", - "s": "0x5f6a6b1b542989bbfd58ac4c7aef8ac5bff3a78edfad59fe4daf74de98acc457", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x1b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2e9d1b4102901ac027bbe9991e22dd430243f3d2e715aa75f8f3f28865d6d285", - "s": "0x541f451a95cb8acd20ca9f7fc5b76270477a2c129d2e8277d3bed1e93181c687", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x1c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9276aaccbc85591a59320f24730201eebc133a8a6a7d9ca40c5d69eb129e212b", - "s": "0x4192679f083bf490597ea927f4408704e93efa4581ac8965ca796a1e78156ff7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x1d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd330644ac6751c59021bc5e8023558db4d7b42efd4bc33ecba07f5933b548b5e", - "s": "0x528cb047ea106522d6e46f131f77b51239327d8815c37d192144a6c2c533b343", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x1e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8e17577df3e0fb222d82f5ff46e30e499b9cebb355a23e418fbdc7dedec9ba3a", - "s": "0x5c5ccf205bf74abdf30c7ac3bd41448165e38ea7fd44e09e459db38c27222b62", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x1f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9a65058f9873d0bdffa68727f95690244c566c1cc1b5936c1780f4883be3c1dc", - "s": "0x41bb9e33b19d87be35ca11d355bc2c8fb08306ec087acef79df19456b5e27972", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x20", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x65cda48a49ad598966f48b94440a341626903fb83cfdcc1e4a40f9e564daf40a", - "s": "0x1798ed01c0e15cd61808446583c8a61e4c0103022bd0082911c9d805a7b8be8d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x21", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x82b649b6276650f574310f46c2abbcc9535db3f5f252f783421ab34273d79707", - "s": "0x4d15552256b1a138ae4ab56f3968f1422ed0eee91cb35b0bf637cd769821ebb1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x22", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7c2566347ae0fa8ef37794665991d515b56dce1a324869932af91fbb1d7cae74", - "s": "0x3e896ccb66800f64a2c89715ac70e19b63ef491f372eb5cd4604dcb32bf7621d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x23", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3be58a124394e07120494ad8dbb8c8268c1bd06cd2a4222e2e7ea8c932e8e2b7", - "s": "0x153ad28a7fa3f83e162debfbadda76744f2ffefe854201469da6a8744814af88", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x24", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x273fc782c3e041edfeadf2a2cad4935bbebcd2d99e6675ac658c4caa6bba80fd", - "s": "0x3aeebc4f7da199d77df180f010464ab1a499efbea12c895e76a84c8eb56586b4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x25", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbb26993c942d7285cff908d73fb767cb89684ec544a173f099e459074cac6d87", - "s": "0x1fd7691b352eaf1d01ffc759e84d710c2c693a3089a1bb5e7e157ab1b879037e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x26", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x397b06d648e9ea1edafd4dba235d75c55ddc66c1cce4c7624a5985cf2cbeae63", - "s": "0x7bb7ff29908b0dc7852c765bb3df7350ad4cb4deccd4c03086e924518784f789", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x27", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdbe2a516534c4f4342998ac0ea8f3bfefddfb7585e1f02ae0a385dc2f0691a13", - "s": "0x0fa8c4ea1a81485fcca654b57937e3393b62da22057d8b0c95cd70ec0d5e37df", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x28", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc6e29c3f5551aff27dc7b17a408c7bf563e4a79166aa2637f1cab3bd80240976", - "s": "0x6a8c76de1f8a6a7950fb332e9b472f792ac022cc8c44daa3cf46a1a445b9adf1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x29", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xee4521ea00ba95490e1486ee10866a449e5c0e73f373c193ca614c9ee758a9b7", - "s": "0x01bd7e6f7b2dc1a48acf06a003fd09e7f2c24f132d9e0c97bb34cd62e08217ed", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x2a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0130cd73bf9df83763c71c78dc273dd42c3c284abd7b254e5d26807545c9f702", - "s": "0x02aff1271c2f4141e299df7a88703f57a2f9a0f4d275e1dcc8c8c9dc40ca6fa7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x2b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1520e5a11b009ddda73027ae4fe4a0f125f9b04185233753a4d4b7fd7107d573", - "s": "0x70c463552952026483b5ea493be4cc21608535ed1d952d000e0f2e10c395fda7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x2c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x98a7428c6f1a1f6bc2f346285fa81e019c081525c0f21879f3d131e1e52daa99", - "s": "0x745649c6ee07012431ee2b12d10140a94eb58fd95d6e27fb50ce64911af21f4a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x2d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbe1e6dbe5d9ffd9bdee102647cfd94692ab2dad9943c7972643f3cf8b08ba09d", - "s": "0x63f6484303a5da3cdcc69690cfbd3eaaed60c5b32b05af922bfc086a2294be0d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x2e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcb5c40d75a1a1dea6134a54f49cdfdae20b861b4992b984a3d4bb1f5beeee18b", - "s": "0x1917ad58b085c1f33d704df9014619220632e8c2bc14c6dbaeb1be69c0b17532", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x2f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x950134a11deeb34dabfdbe3ea21be3b4b2024ec04af8305ce02265a09c0a88d3", - "s": "0x6d1fa6c9634c896a6f400a50b91de6778440d75327338decf6173b1dfec3cc96", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x30", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x552d5c1f64ae8c02d56fe21f79e3ae02613ca7620a815fae01bf2a5dc454c419", - "s": "0x79b88c7ea5f1cd8bb8ff343dc2e507cfdaaf3a16f55740ee9477f3465c103821", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x31", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x872ffeee2b99c1caa2a6a25e8ccd8110261d503cb0284bea25322b52d701c3c1", - "s": "0x2682a003f086a581783af1ff1dcbbe92723bd20195732d1dd1101ac7b3e13d25", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x32", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb4e7d5aa82087cc385cd5415703d2b0a3609fe01930520c2ee6fcc2cc66b3200", - "s": "0x216c836d593e93fc574ff016271076c5c1177bd738830b17b0e17d5536adc1d2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x33", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf8ce12c6738b4d9093615e85a50dbd13dc4c49643a1a4f74b153328d4f6a7d80", - "s": "0x47cb587232bd8b0f03e111d7905a8c8e1b49290de95fc55929ae54deb394fd3a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x34", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0e6d4ba0d16a94cd5ba8e9163179803884d45f0d3b70beb76b0847f0db770bc2", - "s": "0x0ca97524a7d002e8e6833c0594079ae6f43d9d35adf6307234c50da2d1e2249f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x35", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6c466ee1def939321f6a6f618ddf3c85946aaa8a6d1d1429623a43254871595f", - "s": "0x480bdb8c4167b8f68f5e71f5c9c3d7a44c243066386b1aa82b2bfbfbcab4ccd1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x36", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x309f9165ace59e83cb8592a44ecd1866fb611a9f85ca3af683d6cff66de60a37", - "s": "0x46b8447395b35775c4c0dff87c38b79d85bceb04f962528e0f8268258e7b42b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x37", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xff7d01ab7aa1a7a8638118019a10e39df1fd0c0699d5ab54cb0c081cc4b4635e", - "s": "0x4269b7d775daff6c191e560dc95f32ee91de047c8130878645f2608201dc7590", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x38", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4548d41641babf95019296ad1c546aa65ee89da85c2c7a95ab49b8a48ebb9efd", - "s": "0x0bbf7e8abd6320f53df01a54bc54cefbfdc6a068ce00366897fea9b5873968c1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x39", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfe68f675aac42272ad8f90b51a2877e6019a693f3310ec4891a52d942e4a42d5", - "s": "0x776b995e5fc15094ae13946a475a0646f7e4d0248699578f66a995d4b8799fca", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x3a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xee3d298c4b47bc795eb2eaca2334a352057bb0904a08b12502ef982290cb3293", - "s": "0x4614e54a816d23fdfacf16cea9adff8eb07da95224080f17743ec0bc30051452", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x3b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3c241f16dbe10f1207fa4f696680becdb5790dfabc19d49dc0091cf2eb66d033", - "s": "0x2d7633c6c6b7c4b19b96b8344706e29e507c84eafc7623611637124abfd8222d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x3c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x135300604bf871c099b002d1fc242e954b5cbc0c8febe0435dd9359eb3888159", - "s": "0x2e25ac6d3c588724d3639f2632ccb1cb554bb3a1751b6d25f8d507e310c7ffc5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x3d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2ae4c7a84b8220a30ade7d5bb02416fb02b6315e8beb95b5e9e2180baadca2a0", - "s": "0x51cd7493db288496edf44c0903b7748632fd10e900086fe91dd636f0eb9d7ef4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x3e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa9581826e1638e7060aac31848d72e8a94d549fa8dd52618b8b92846c67a5871", - "s": "0x5a1dfb368ba242afdb36c55853ebb3795f59a4e1b6532d2dc4c296ec5fe597fe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x3f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x50fd795d555d31153965fa1a540fe38e523711d8ee14071f5739421f0706dbbd", - "s": "0x042d43642633825ed96a56c1896b520deb13990c2b52c68a9ca6fd14fc82bda8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x40", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbada34b96134980003b543ca853483918038a416ac6766757edffa1991cbe87e", - "s": "0x744fd1ce5f38af3138112cd92a7b2983d2ede6ad5dd91b81e5f679ab3ab469a6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x41", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xce5ba871c7364d8edb3f1af972b4a1a21851049251e466838a19a2d01e9310a8", - "s": "0x4ff5187ddec6ca9f64ab64b8df8fbc0c90cf8081d30a0ca771eb1b4d00866454", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x42", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x050fbb03140e0d8794907e619626b58ae8830b966517638b299b82df85303c8c", - "s": "0x5e946f6e617da2286b37c6cae6ad22b2cba0a48ca2ead0c6aa32cb2f611f9cf8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x43", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2154375e0a448769b45846ee65e725a3a702425ae430f76e9b2e401dcd07d61e", - "s": "0x0e80ff7821d8776d9c3a03d2e14a4f4c659210ae0f0e9a7dd3f8c2b7cb24e878", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x44", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x546e6e53fae2fe954254ef5a4ac21127f564532cdcccef55206a40822f071e99", - "s": "0x0b3fc0788e90b7e2c7ccf0e040dd2e9374dc70ed035fe1bf045a785f76e130ef", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x45", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2630a8a2b68ee0ab71de697a18d9f26245a32c523b1a416dd583ba044143391d", - "s": "0x7d757f9c0b9de9246a17a2c4bc5dfa61f9d69a24275e62b312a3557a4d217c8e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x46", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5d15f59071c7d289185e3b38d9e68d29c86eb95df0fdfe8276ab10af213c6ed8", - "s": "0x6c89aa67f4531dc8cc378fc582f58d4758602e55f0f159b682049806ef7fee63", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x47", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x86478ef013bc35b4fb23550c8969ef05271afd4ea2283d61ec1d63c17809e592", - "s": "0x587f9cca2f431d60dc22065c3d2d19c8c77ef0806f7c32b747a9ea8556845f1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x48", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdd1d2223030a4636ec3b18d85915f09b2042c4cca3a110dc83812d33a807f001", - "s": "0x50adb91f0bcbd64dc62a1344026abae36e99985e3f0e5d381976ce7543e6d8c5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x49", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x272422a872a113c4903847687b96a46fc7e903a59fdb7d52855231033d1e95da", - "s": "0x63adb464d1f9cc270a91d726e5abb5c32a3d4c064aa9d14d46d20cf569ee6803", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x4a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc37d9ec1fc7e0f50fadd2541381c84b680739184373154f3233eb8e60d432541", - "s": "0x45de21c3c3d505d1f1e10a24d69a7cd927c0a158e9a810d490c0a469e2adb8f1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x4b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf6f56f5dd31e385bb84042a9fdc16790e08412a591d71ccda4a4cf5af966484f", - "s": "0x37ad8a17459b384fae29edf7d8bd9400246db9b31c3c52d871cba85fa12ec63a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x4c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe9925c901c51e760054f85a63f14bf55e2bb9770d4f2ee97f67a1339dba796e6", - "s": "0x2959bd4a6b4c278076bcd90485d894d1508f727b8edd96aa6e5a91db5027f4e0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x4d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x619a1e0986aed678dd714362378d57e4d0d4560eec83c77401b122e6f06c32ae", - "s": "0x0b681c7d375aa8ad94d444443a5241236d8ee7178aa9d9e3b390152446272733", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x4e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa9e2c27290c3eec8596b72e1abf0f2cbeaadf993b62519e8f2e8f5f7380b2869", - "s": "0x4c6594ceb3766c1e9885229bcd6b39cb48163a12131f0d7ae41b5b366a841a55", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x4f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xea64bc00ca0607d43673a547839df2f5f14071b68ccf4a1ffa97339b396f712d", - "s": "0x1618e30ec6b6d47631f2db134655511394a76cd80a36fbfd70b9ab4f341cc885", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x50", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0ce5055f7222659247c31a8b7b42ae082d160d92a2f2ca9d5c0d7cdaf3eada69", - "s": "0x0aee0fe3e92f75f2bcc8b1c1b9d5b1a08d54522ea2d11bc3aa416f06d727034e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x51", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe31a51c402796c6300692b7ff0c6423aec1122b985131df0193c7199341d8247", - "s": "0x4bc9d1095cdbca7c78ae4d9bf9a91e36245faac41d63e1ca87e3dff12cbb7652", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x52", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xce05d106e03df07e754f6395d9535ec3caddd40811a659020cc43205042fa632", - "s": "0x34701a79953ee0f5120499f874094c872a66ae8fce1f4cff2fb09ecffe9bb1aa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x53", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x83d1165fcfc805cc3740f719fba2e88c814641bc62e7f99f9c5c398d9e446f07", - "s": "0x15ccbde8864333e89b9909850754fac204d917d9ec4e9d2b8ac2ae824a7779ad", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x54", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x15829b6424b08dbd2fe09562d56c9492b1134426bbab7a2219e5405e9211f603", - "s": "0x71a1573fb9da1f182e5b47bb9c5d22f3615ad2ad10d96003f484f4721a7a5b31", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x55", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x163a52be64b02c1d10db54b312862a0ea0f53770deb41c39ba4d827620fa5e34", - "s": "0x04d0ef4d5c3b0c2ab0489577bf573e95212c2e4cc113ca3aff7d4be87ad02227", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x56", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdceaa112aafcbb854396b567ad21ddb8b9033db655d8491d47c89d5794281063", - "s": "0x65ed7b789c1091ec1c9d16ee403b00d5c1a157af3c9f42b9d0606f55d77ffb5e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x57", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x16a13948231a380a405f3fd8153b5f880ebed457c669e49f3a5f48398f013d41", - "s": "0x37276ffa0df8652ebe13d632916896ca6bdc73c745da9a49eb629949c70ab85e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x58", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf03b89f8d2340ea29af76e061f256fe1bc54ce24c000ee41921b7c010bfc177b", - "s": "0x339437a5e44ab885d3aeeb9746ddf0a43f683c56dc817c42180426e2cf2bf89c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x59", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x48f799349aefcb86cf805b25f35a749ccf58242a4e2b9420f0fbd27e6844ed02", - "s": "0x192673adb2d14c689497222a48bab997997e9ca14e2b00043feff29452887fa4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x5a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf5571c0f55a00bd418be5d44bb1cdb07441b12b0825b08e2f0bea7cefeadac67", - "s": "0x3d27ba8f520482c213a7391cb00ed1b5e1a21f2e43b160e0da7f98f575abec06", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x5b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x71f3161cf021abe2ec2d82f69f669eed1f66e7fc4c21b7255cd33707fd0ce520", - "s": "0x7d9982cf3e01d5077c40ca0d0cea59810f456defb412b02d35ce955fe66c4009", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x5c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2d24494c5e29711a1bc80f5c41e758778c05f3fae901d3c2537a095e32783a12", - "s": "0x4a911abc5c6c4aef34c35257240172108a17cca7db691c2b765d4b5b34358c2e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x5d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa4754f155f3cb5c09814a80a1a0cfa36c495c6d79a6dbbe0eb1701b8c37f1561", - "s": "0x4a93aa032d0e0dc7156e8af29d82ef4db53861bd606dd2e8bf12533640cb6543", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x5e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa6925a12c2a9dd24c89c077656b3ff67934b96af1203417167fb19640566e152", - "s": "0x1d841f3f83a7a52152bdc2aed332fa4edd29571bcdea933128bc8a7280086521", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x5f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x713f5e5986bb6655c4548b0d9007a0f97f9c11e670501e28455ce47641e83905", - "s": "0x7592d786224e2f9760a4aaf3cb65e2a638c54d3e03c40b884ab5d8fd575b867b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x60", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7ca95946554942d4c991cef63ac30d58f794682b4a96ee0655d7460d3ac06adb", - "s": "0x25aedebb0dddf781829a85ba6fd42c063fa2a7aea3487b21a05f51135ed9c692", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x61", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9143b5f4c15752cecf3746afd5f2064566f3c4fa373913f34629f4809f237238", - "s": "0x411e0eb56604ff9b361855942492e3227539c0347dfac1428936fdbcca132b97", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x62", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb108494b53797d6afd359e154983fd20143b7051212dcfeb8564f5ebfce778dc", - "s": "0x1e4cbd01a9bc75af072f46584fe695541d6b0cddbb97d900561a0f327215eecd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x63", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf7b7b6cb68738dc40921983d2b6b454a8fd7217890fee3f1ea68866847cd5740", - "s": "0x257b8b0ec1cb162457f30c919c063ba1797dfe29afa240e730342169bd4cec63", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x64", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x666e5aaf0986ee1fda1b72ee4fe9a82311b0c809c266d5ab11d11022b9874b55", - "s": "0x7e8438f1f45635f76db910dcd1099ddb91ef7bd72fa277164228f82f92bcae3d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x65", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x82cbb2ef9c903d610d2534e40fb0cc2745062572a45608dc60f1ae28938d9240", - "s": "0x3c6ad55e6b7857884a615cad98edf3c4868612f3a15692d28b9e35fb31ea22d0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x66", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x66db8cddf7f78dc98a85da50e1d5263a7518b573b1b95853548ebd3d12b8820d", - "s": "0x1139cac9c7b1082a6ed979271f2cd3b8cd23c4e342943f53b67a0d5d69da1dab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x67", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6ba13c11c6bd52a7f3cd6bfe57795db692ed4b8d60702800efec7c5d0f932e92", - "s": "0x3cbf54ff26b456220537b11b78d60bf1b5c34a4bbc1aab9d88478cdea607324f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x68", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7f4b6a4a73eae8a3cf63aa9e863adde2c890c64c8eee7fe286a7df6cd9ae199d", - "s": "0x0a3c305b9cae13983ec21784d3b52b2025c6456c753da9035d563604c8211da3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x69", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x78827fb1b93f095c13f442f340105e53fdc9f30df13fd69da74588b0e17571b9", - "s": "0x600162a652b3fab6525f1428f2f727eba40ceda6ac0ac85fb0f8023bfd5998b2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x6a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1cadb5d6845b63ee01b0a7848b54ca720b7b0b46decc67458240d8eeca827b58", - "s": "0x185809f31d9b4b33d2023c1ddfdf787f97bd156ddfacafabd550c182fb5626b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x6b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5b7959086548f45a80e4337ccb93ea38c6224c2d3f6fda9437c9f87ea56aa071", - "s": "0x0ebbb0f375fb043b2e7e729a81817aac272ea3342170b7284a9ffe04307f221b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x6c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x887ef8bd2a940f65b066bf672daa5c9da9ae3bef7ba3798e0b61e01c173b83f0", - "s": "0x537010836fd6e0a9e8d5bb34820f3b56430f448adcdc25e195a63757f6b2fc6c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x6d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5e356f0a2e98772d12ec22a5240ec47122dd882c7ef2a2f1843e77a1fef24f24", - "s": "0x0ce9eadb09c5243628677ee6295778471b4ebec078fb6cacf6465caef1e7dcd6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x6e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6345be4691e50c7617559372ab0ff567e706998edffa9e5ea0255189898806c3", - "s": "0x68f081f904212544c73cbb5b362115e231f09dafc014e3f29c800e43f0777af6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x6f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb251e3bbb5f090f41f9fc072906d1de70739fc007fc5a7618c77dda038c84c08", - "s": "0x4efe5a210efbaeb82f2646a9f82258484a25b5cc74adf6dbf1d44610411c0f6e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x70", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x266a2bbdabfc48777555b7b3e07a70126717aa5bbd58d7d3d6a5ba2bff795d90", - "s": "0x208c4aeb4b8f18a1ffa148d07b646e9c0e8edbda9f606956da769e9e537f03dd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x71", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0a600d1b5369d6e9079b2720be2550df7177dcd4363a323303e1d120e324099f", - "s": "0x0cf342e8e0633eb46452127f0b508fdf71a3fbddd7aede072fb076434c989a18", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x72", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd6fd1c1f164d37376bf8bbbc9766f14a2f40269be5dfdc936da4b95be6622417", - "s": "0x3c8f643c0be4f482e98bae8281544e6fd3bd07c8edc0ffbec2c73fd5f48a428d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x73", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd0388287b5335fd022bbbcd39bbb06baa93c1879456e96993142b3d862e30ae1", - "s": "0x715a5f93a08ccf6470a3f6d670b2041c6d6a23236e6f722123b09e5e6e712e84", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x74", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc15eef91a8b38b0202a32e1d10e35441db1a3c00e6c2e6123a4d400843379abe", - "s": "0x5e8a8b1b038bb6922c8b4e838a8b53b5fc9fc8842eaebc7bb592f409e5e79d47", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x75", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc79106aa4021e2568f7462a8b943a10cf025a14d64e6f2e5a5d473e7800d5d0a", - "s": "0x01f9da633896cfe6260cffbe40f4406d0257630f60c9afc4bf872021a5ee2707", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x76", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5e015727be7663a16ded69f23d3097885b8a933707ff768e9745053b45f83e05", - "s": "0x310ee338e6420a76aeb280ab1a5c56f3e7810220c84e0214dde83bc68a0acdd6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x77", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe5c4b751a1759d9b70cf043349de77c214a7d469dbf6eefed83b6e94916b7704", - "s": "0x688c20aa890065a7f795080e297c50d5acb7804cf513042e89af1a930821666d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x78", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6cf7abec00cc88de6e8b1e99eeabe20f76a1d6b1415a43ff3bf0314f74bba081", - "s": "0x5726d3bdf5d92e61a3aa8a730fd35ed75b4e0727ec1520ecafb764f0eff2531f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x79", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf767bc4ac0d203a9390498d5348a5d24abdf1378f585ab461b1bc7b7c4980cf7", - "s": "0x21208f773d5f8e349fa05a11823e4e51a7536500d41020312e26b4adfd894dfb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x7a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7b3aeb50d2ec3ac9b9371e84fad6d6e9687cbfeb3f1a3a4824e0bb7f84883569", - "s": "0x2151414c999118c6cd1161d77e08c7f0de30efd58e28a1f925d9f435f5de0b8e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x7b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x61b8638a043589365deb454683448cd64e6d6910cf5b7d74e1780a003ca902ef", - "s": "0x3c2418ab68f700584316886ae4e226dd1146f80658013c9eddfab57c9633c3f1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x7c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd037a9c9cf5ad87a446f418ed91f9240d56b104ea52859a452a1897e68609eac", - "s": "0x2c65fbc5f36f8d7c1a95799c1a64c25f87d4c8b124d92d989aa78c76ced5fa2f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x7d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9b39b10e7890b8855e3902c61f9481cb9dfcc9897028f4d84657e92b2e843fcb", - "s": "0x2f082451860cba8529312749c3cb770044196e2ad83e005316c259458f3d33a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x7e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0e0c790f90d72b4403680ee1e7e54f0ce55fafe32f614db1da7a749729b48add", - "s": "0x33d3bafa1b0bfc432c3f3079dc6662b35ca29e6298605fea554f45bc78779533", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x7f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6f21803102b7d1f4355a36ab99c47053b2019e5af727dfce16758df8f7080a23", - "s": "0x55b3e15ec9161b8e04e06c4271012a4664e260bca639cf8bd6f475935828b255", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x80", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc23af0538111f2c20c8f058eeea58e6f4d180ca2e335bcb992cfa7b0060b2801", - "s": "0x065d4c8e1d95da282a6ef79895e509945928c577386af60c7e8404f7e68997e1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x81", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9dcf2c2f0833efe33028859c06bca3b9711fcb2577c32890b08c16595819c5d5", - "s": "0x24e0616d04004371344b36a41d275ebf1ee997d54a7c5d98a0b11a6c60ad0dd2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x82", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5af33653a918764bf5b65d8a30d3effe63e00ee3ab6a594f288a50eb92524ae4", - "s": "0x2b5449b3f5bcf5bd2d6f0849cc17495d64c748b95a1a164cc7373912fe252bd9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x83", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb7d53bbb3ddea5b5ec51d0e71787bc733ee7d472de457a298c9b01de5cb55d34", - "s": "0x5f871365aafaaf861154a8b7f6b6e6a4ab0f512d2cd55616a876f0b1b7cb3206", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x84", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xed1390ce53c6362ed508ae53be09d784dca4418b772e93281da7d2cf21dd8855", - "s": "0x22e327c73ffbc80f97bc6d67f2ab183b1aa15d371baea213c4eb8a6b36b21c19", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x85", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4803b814b4b3b87ff97a7409165b1847947830442ca4638a68956e86663dff26", - "s": "0x1ad6f4ab016a8dff98bd5a658f12fc14cd2ce8d420dc3ba92cc5388449224777", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x86", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdcd576746d3fd3535568c9f00674cc733bfe214b63c88655989ff01baee09058", - "s": "0x6cbe7ccc0e1366b81d48cac7c2010170a89f8c9f67ad91a632a46e7b0adef921", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x87", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x579cb2976797939e0299e84a7be80fb1646b641a0a7517ede71875b8853b3ffd", - "s": "0x4d9ebc1d4fbef669950faafd4f6bd6557d55ff8b5b01097230ee88dc42abbb8c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x88", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb68b2fe588fc6514c97399bf95d34998ddef42c511dec10b2a13f800871795d8", - "s": "0x70f74a4277c791168983709dbc0851c679eb504c534b9cf9d26c01f51378021e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x89", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x67e79cbc078202f1a0d611e1084bff3cf45136c02430dc58a460c283d05556", - "s": "0x7460183162b1cfc0b3afc69986c63c9951f3562c5e23582a5d8dbd176237be24", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x8a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd1781915c05dc2a9d58ea3ee9703235d5282d2d2fb783c57a5f2538e4117b1cd", - "s": "0x3d91d1a24a482dfa5e3d4def5a286cb74baddc17132d2b2fd1a9db4bae28a27d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x8b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x056843123ac4bd31362b9dc620b8a29643b1174eb5202fa1b1ec5ff3951fca13", - "s": "0x08d35201606ff48e78823d8468c0ecc38ebedaa4dd1cb1af23b0be04a05a8ed5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x8c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3c24f9276aa06d8e15f04d8268197c808baa2d72e14bab73d8bc0f6c40403256", - "s": "0x2e639814b0d2dabae3661b15057f32e81d2e8992f75621f9ee132b16cc304c13", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x8d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6aabbe9c006cc9a516e709f0481f23b4e0dcc4a9a01927eb7f13dbba070e758f", - "s": "0x497f38e035e7047956dcd017bbb993d116ff0adb441abdf221f1abcb86d95fe2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x8e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2f2fc81c0c6ee5f9a5de97459d92b8b37bcea5117f2e639de075eaffccef204d", - "s": "0x202aa50e030622202e83d13cea4f16885a38ceec60f2b7fdb0425114a99eb163", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x8f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2990b4577ce0ed732dec87637400cdeac01fbd4368f74f54c17927eecd429e7a", - "s": "0x39ae23baecf98703a8203debdf658c7ec31c2e16844a506031b98daf2700f30f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x90", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xae7196fd8261d9cf5e7ec6c716e24c0daa3acc0556fb3a6c79d6b1b6c21dfe37", - "s": "0x11e1548f3484e2525ea37e0a6cc5db4fcc3cc3fd2de1f55b6404bccb5c215999", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x91", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xaa2ceb6d0b530dd182e3581d8f26f9a0b21e9f1931d9a4cc16fa813f5abd99c8", - "s": "0x375a769efde2ae9bf86608fe8c84976ce148d89aa0631d4da0827c3a8c1ede75", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x92", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3c328d4c78907793ab45e7e197bf324cf852a1b697f2708c52832c7050f5e345", - "s": "0x7afe518b46684e62329e70e1c777dded91f13e2e673dbc3e98693b986d2bf42a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x93", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x30fce07d857a21dc702416f025d7600d32da6070d1701c894a8fc4834d4075e7", - "s": "0x144775bad50d460fd5b2c28291e1d012c11b33b1e3f2fe9a1bb2d33f2ad9e5f9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x94", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x091ca73174e46b96c3ecf05656ebd980ccc86e3d10c1def697b582c939b886a5", - "s": "0x31b789184ef8530ac0e00ae174872e3578d53f392492fd7c6209bbe13911d8da", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x95", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x44c2f6ac8e685e4b30452da15c3f67150b95ceebfb3456039387fc2e9ed63a29", - "s": "0x0660d7a1449ba7fe15b70fddee5e70fd6de2b0ced278b3d683d8903e3e3b462a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x96", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x363804a2e6360ced3b5cda784d62323949e53476b9c92f603fb66858d76883e0", - "s": "0x2ab9dd354af169bf92b529dd125aae36b9ea78907b1403200311b571148038ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x97", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa86908d18a513cd0d817ee02d9bf29896d794ec42e33aa94bbbfa409eec68ae3", - "s": "0x0ed16d62ad6e30d369be844cc0b3a597d2619676316732e4a6b5ae46959c4467", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x98", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa01d04dc582736eb1237745bf6f99ce50f9882b04c35ea9ead79b475b8bbd4b7", - "s": "0x4f1a6b7da65958b9c762a6882f48939ae85522c673ee4ebad77a3dbdae2fac69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x99", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x629bafb76b54e614028d6cf9ce3a27365750fc3cf9446071fd2687d0ab209817", - "s": "0x0a5cdc8285070d9fac617fd074c7a0de9ef07358989f42f20d9b52c29e4664d7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x9a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb19c1ec71f6ac77691b7a0583627d4e22647a9c4e65a0338133441d68c99305f", - "s": "0x3b68ee1e20dd37f50ed9bf84e7ac4faab08259679a49dcb55d721aa39d0cfee4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x9b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3ea25b8f969faaf752723afd48b7898f91d089cd1a8ccb9545dbcb80cc4896bd", - "s": "0x6967248057d75d9986a237ee114837c4c5f009bb9e3b202a5d0b79d71eb4de11", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x9c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9eefd6a7c4ee355a067a0e1b52d697284c2a6f5016d13ce9d319ae6a934a1e77", - "s": "0x279bde03d38b1af816c3bd7d71b2cc7bc55de3c3edad89e78b587716af69789a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x9d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe8b880fe4632b45aff98e3f48a4362e5ed2aad49444ef647c2587bcfee263575", - "s": "0x1bd6d1bb2b067358aad339b091278d3aff80eccc2482a467804a690313ce3bf6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x9e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1995b12240fcfd8dd9540badc309afe1f269b5f2fdcc0024c9621aa089d8d21c", - "s": "0x69f32c4143a79df510537f628cc1db538408ff1c617ee4330507f0c4bf648ce0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x9f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfa98d7dcffd59e7795ab3699d54c9e7b058982494c6079614a56deb45ce54354", - "s": "0x4901dc4a6f63870ae9c281120900a4c1a4d0d880bd9f9bb21888c14951904a6d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xa0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3138399804ee31267dcbcca1003082d4309bd76f84d805ba4265ccfee3742d74", - "s": "0x28f6fe999243717f313c5ce2e81a185dd721356c368d7a8d09f65787b7471765", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xa1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc85f49643c4a15a52c13b7404ff764244b843b6b72a068a3d7ee8a697a0ca840", - "s": "0x50c10b2ff7315d05d8023a87fab2bcbda8866734c9075bbbc35bcc09d1fa4335", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xa2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb8c5e906c437307ed3125c12cb9dd2a3a9ce90786de762280eab3dbaceee32a3", - "s": "0x3ff54a9d73cc913e9c18b00c2e3822c72d7487cb6db0f7a4b81808ef66446820", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xa3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0caa5b9445cfffce62b0f51fd3ac43a926d409b28490e6393ade554ef9b451f2", - "s": "0x46dc0ea812b60691e3d0f751c5058f879f1559957e7f4b90cef3f583afe7b416", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xa4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1ae6e9c67233d6bfeee87564c7f0a4314885d87965940ec87c3d73b0d0baa136", - "s": "0x5f2bdba2111e70746440b34aadb31851f5cad47d0ba0126d7a43089d8c394cb1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xa5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc6b4ed5b12e7e00866b67fd068b44392ab620915a4709bd7b3c2b1304cebdabf", - "s": "0x5c4fe543aa8a3f49bd877a2f9895fec207b9a56438e98e62938d07366d66e294", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xa6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x090de1d6414ec3495df30395513c82c35f9ca5b4497d567443e2cbc386735cae", - "s": "0x4d166abadbf7cfeeaf1d0842b81d74e558ec94a210befafe617b2664dd02940c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xa7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8719dc204de497dcd7b0c68a1ffd9d8b3f9bde65fd9c3ccc1071dcfe67742630", - "s": "0x60cef812a61dfda7c0257fe985b57c1888eeecf5277ea5b182feb515b8191bbd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xa8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1f00f03b44bf5b01e79364abc5fde215278f48ffa2a111d3486932a060715d74", - "s": "0x26815332734bb5ec7c7f50a5ea936a7c848ce9780447e2d20693b1c4f10a2d2c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xa9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7c7c157f1d6aef37faac98094999f4f006d49ff0513dc4546909ff2c72558186", - "s": "0x3b5f1e293a6d72bd3498217ed08ecde2207ab25bcdec978a6bd2e724d13b67ee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xaa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x68d22775b78d38579e78f2ab5a98e63eaaeb40a17d4a7cb509c463fb28c790b3", - "s": "0x69299799f72fbe791453a6c43b9d48156cbb370b5774c5a37aa4caf91da0beb6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xab", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf9c0ccb2b108b70a2af68057e8b288ce607c6f2b4c9108b2f13c2ddc34ffaffd", - "s": "0x5becb88b601988539df9871b2c3d7b7207a8e6d42e00d91be30f403112288511", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xac", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x57e049ec8e2378ce8c29d2eccb007830447945e4fbed92b7645203729d21432e", - "s": "0x5e47d3d2a6f57eee6a48e366b4ccc49de74073ca6afcd102e5d0b59467ddd644", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xad", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x34b755cdc9a3fcb5d6bcc511ed0dca8925b50670ec8c09f3e01af86aab120e7f", - "s": "0x6f61ad45b19c11af1482f3ae4dfc634037c0725e6209e40038619cc6e36823d9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xae", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9942e24535d0f61657064aa627b5fddc685adf2f2c8f2cb5a8954c0e5d6fcb31", - "s": "0x55d6e41f70bdb833840be484d1efd2b282267fdeece5ab87f10fae586163f094", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xaf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9afb0a177150dc8fc0d35b652a6d52c540caab3321fae47dbf9bf43a575ed645", - "s": "0x6a6c0a4845d384294a16adf7c8207c314f0f50a89531e4c19325bd816789ab26", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xb0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x834b1d740bc389ab6bfb7e96bbfceac3746b964d0e807318e63f1e1a0a7ef9b8", - "s": "0x0dcaf3114ddef34639cda679e10700de0413c2f8814cec2dc827f1debd1b0ce3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xb1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe9a3de12edf04da8ba2c18a94eef01319b2e0c6a8f56817642cac38727f75cc9", - "s": "0x4a45ad6ed5d2e808aa1b40497379690f301fba61b63af9b373288d95f44dd514", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xb2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcd86739c675ce6cb9c53e6508b8baa18e01326fd8caea81a6915c1bdb50e41d7", - "s": "0x25caa449b949dd9a7243fbfd78b2ea7275d97412096ec20959494d075606bd36", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xb3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x312f947c920614ba0f12433bd192e3af13bcbfca665e16f5f20889e239c8a393", - "s": "0x5e029290afee75cf81b5eb99f12c9f314b28d340ae9111ef1adf2d48c66a115f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xb4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x043959335ace01192a4285a555bf6336b07dc54dd7a3dce42539fdf5fd69baa4", - "s": "0x3317c5f3047d035a03573947c2bea5143d87a5a9ddbd7d6f8583c00aeb78083f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xb5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x44f492a184b1c17960a85d65a7eea733e266f647c511f2fb0fd38330e2a8d519", - "s": "0x4ac62ff3279678947719ca30eab1106b259d101299933eda4cf68655b39e3201", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xb6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x08bc8e695b66f60842eadb8bb5e4b21fa7787bc418957693772c70c4b618c2c1", - "s": "0x6d13a9a655acf95bed8a79dcadb35ab704b96dfe3fe28df18c8f2ae2d96d50d9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xb7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xed5c602466d5f8ad584b64f67f2a6d662b86bece09d63d3d3e9be60285af697c", - "s": "0x660d6f0afbe7f9cce5cf58588b3a6c57e9196d96b1ade00b39f5d8b44a1db24d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xb8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9bdb37662d95250a9968ef2fff75f74a9419806881abd9423954f11c2ea2734f", - "s": "0x110dd03d6faaa2ae820443595aa9c2945fa74e341002adff464293ad92ea8596", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xb9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x44b7de1a9ba0d839160b42c7be0601d674b1dc22621c06ba45776aa010a614c9", - "s": "0x4a6822bcb25214b75b4fad3873d281c03643fe1527de4a80abb6899053ebabaa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xba", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa465852de02fa7a4a7c6da9bf2604ca642d4ee50cd0f3a4c1c1bfddd8a59dc08", - "s": "0x7cb7a660abdfd44b53e0c562efa2ae3726aafebd5149e0924711bd415f915d94", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xbb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x27b05a5b5873c8148ca9669e1b21d0af919ac302ccdcac47922e5158457d9f53", - "s": "0x360d14f0259144d38a31297fcc145a71b6f03fdcea785935ce168074d9f16174", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xbc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x06d80f58df5232cc0856c111f61f582f86d8c9fab60f8d4015e586af8bc0efa0", - "s": "0x69583604e788eaba8e8f52f94366e55f29d423988904572f581f595f7ba4e0fc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xbd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x93d65fc49e7d19445af6da304b0f2994708992ad91c61511874456c4e9298132", - "s": "0x591e054012bcab96bf72e9fdbd4b0e52b4976f12bac723fd63d0106b4714ffcc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xbe", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x60a1a63de170f104e51fcc8a168151309a8ad27211537d59aeae83f4a85fc9ff", - "s": "0x2802cc924eef0730f9572fedc53f3e531ad2cf5941a6c20ca349c13f42263bce", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xbf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x44ee795fd5bfe2676ba4d40f925af72c36e46734f1314a0d5d0a2fea71b745e5", - "s": "0x1a02ab666ffe3b22fbab308eb4a82bd416e7530c113865d4ad23e9fcd6cbe502", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xc0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc6b0933bb71d5d2ea1611d7f3b8580c8dfa0e4f411128aa5c0e23985ec2cb67e", - "s": "0x16e9f443c9ce0825f337850a220d47b97b2e95534fca2e300ce10f7ec3784fca", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xc1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x807ea9cc6c7aa21c8ac6ba8f83603025c0e3a24162022e250756378cbee41a09", - "s": "0x5ab1e13fa5002e343587701cfbdec876760980fb038b25a80842a9f729aea95d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xc2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xaadd090ee81d93e910ae2b6107f40b597ae2bd828dd17b651d2e90287035a74e", - "s": "0x15fc42bbe099290281369b8f4f8c9a23520948e6fe7118412b604aa0eea253d8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xc3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7f9e7b77f04886bf2bda53f2235e17de04e2ba88bb33de68677c3be5cee63fa4", - "s": "0x180b961d255ce79f6bbc41b3d7f1b1cf028f6e51aa62f1f7c49c304093530b3c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xc4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8c8774b5c6691c7bc7a069754b31721ed815f08fd2686dc6c778b026203341ce", - "s": "0x5a96c6abfd67e6165b1702e18dfd5dbf54279e6a14f9a24ef69570ca3fb0b5f5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xc5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd9c72f1e47ebbbfd4bf670f2cfd4174a6faa7a98886bf2d397a094757eaeb341", - "s": "0x13f6cf01f8bc8165fb29032b68684f99779b1be3d3bfdfac71ea0e47f57a2148", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xc6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x426569f6e25f13b1da4ed9aefa2a2922d41bfd96b2a25a04dd020ece12c4d3d2", - "s": "0x701f1ba3c0b06404a3694f733b59f6db41b38559a44c257c6256b30ba21e4206", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xc7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfeb7ac09f057ec985e0fd4666fd4d47f79d25333ff67c375ae346ae4c86a0f16", - "s": "0x71f94854f083d368a48c0b528d9eb6531523e887230124ecc7890500d56a5c7a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xc8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb61257aabb3969a83936899ebd268e238b5978305027ea69dcf160ec8f74f743", - "s": "0x5d60de636ba9df2edef3aa0e478971a025293552bb7560fd330b8514ee6aad86", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xc9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe4bb49895017f42ab75361004d43ddf54b3ab021c588e0491c220e613d25b98c", - "s": "0x3510d3630aa350498ab2020c0f92fe11683954000bdef90aabbe0e8d899f4eab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xca", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5f61ebff664e545ecfb9ac6d58fb757cea4a2249bb4ba847f6d4ff0e725b4baf", - "s": "0x1ef671e1c71111dd5bcfddefaab9c3779cb02861bc17f9678da73c9f92671520", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xcb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb7f5a5b333421ea4f5470e85405668100fae760dc28bfe354b51f929ee54ff6b", - "s": "0x034651c73cbd36b625ec3d91e494d41e730d01c4a998da41559bd9d3d73f6556", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xcc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xefaf12f33767f255793479cb3cf96d2eeba021c6b7429604832845a5d7aeca01", - "s": "0x5d893125527316dd4a8f70abc5ee479c6ec7480518b78d67271acf15849cdcaa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xcd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1ae2abf2e74385879fed91706c7f10da41c6704c578ad63b1ee7b11f32c02f11", - "s": "0x488214aeac4e8a49a1b1936f646d10d67a4bd43e4e4739c0a9429a1ba5a8d062", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xce", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x90e318a85fbd76aded4da5dd42743ff722914aa168784ca30c3512d737381512", - "s": "0x12bf51cb43a06233f2f356694ec637e6aa8887dad693e236e99c868d1d9dbb14", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xcf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x33e6361a5e7bcb6129d8ea2d56cadcddc05b1bbe833de7e087bc60ea24ab8c53", - "s": "0x680fdd41f87e899debf0243bb5c75c9a966bc8781d3f2579fdba5e84ab371ccd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xd0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcbbfafcc56318be63683ffc5a47a5bafdb8af5ea500c4da61ad3ddb55ccbe79b", - "s": "0x5b08eec769030de5e50e99ec35a67637a2760376b7fbbab7b6e5b48ea25085d2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xd1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe48323c25573f2badd635cc469f1603c1ee788c7f9019f70e17e5b63929da762", - "s": "0x3621cbd083966c0abd3e684feb56a081e6899841f2b5b10c771660ed6c4d9c1f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xd2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf00ae7cb02949b58db145c92c166325c62d9103f6ace3091f02a82993284c595", - "s": "0x1941b742d124e2f8fd811fd96e8fd9b3356bb15e4163a6bb1749ac1b08aef0a2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xd3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x173979f7bbe8d6eccf2951a9ff22a96216815cb509cb38249c7b1b7ab1c48f2b", - "s": "0x28f11027005fc49dd547a035c65049c482deadd6cf122dd54c733cdc4d87a1aa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xd4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8e62a12605bfdc5a111b6605003553c10eabf00743427fb9d9a8694e0a9224d1", - "s": "0x1f52397a5a0cc9991cec77ccb858a63444580e101fdeb89f295c82caad899121", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xd5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3bda62589cf3a7af7664ac0e55f820af7b8bc7c474d225d09d9cb5f8636df94b", - "s": "0x2aa2fc175fcbdf53d405cc66927438016a1f27b0cacde56421b8260488728372", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xd6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0cdbbf0d687b68b4cb24c4835d3959770ae30829c4ae3b0c6cd871a4becc2a9d", - "s": "0x59eb4d7b8b5369f5776fab4b216e7c28bba41558dc835aab5403d25117295f73", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xd7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8d0d9af6f81b78f26eecee62698ceb3972ffc264b9e664cdad6fa4002c97d496", - "s": "0x178e1df9ee081155c6299327a0e4635619910754cbc961d4953b8b8f6e68a5f2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xd8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x27704c4100acea131aac3e1a2c6a71c073c459b6c42a2e4530fd5ef332c05e55", - "s": "0x43bd28687ac1637072bc0e2f88fcfb89db15ba9251ee2859dfbbad7f444bc308", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xd9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xae678e31408962956fbae28021d1a0ecf1ad5eee9caec171f91570fe9e8a25fb", - "s": "0x29a074f9aa790b0e18c02f5bec726bdaf8800be465da692f092625ed6ca4cc3f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xda", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x411f66e84e4187f5c4f9e00ba95e8f85894878ace6ff1553ac2804aaaf1bf860", - "s": "0x16f9096c9a24076dbf480388500e240be9a3b0a10eec6edab9638e044704bf14", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xdb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa84bfd0986450e2a1e3563da74a63372a564054b308247d7ddbdfd913eb069f2", - "s": "0x6dbb389b36997ae2bd63f21120ffc51fbc730b24921865c05dce8bd0439e7d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xdc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x67deb187e2eb7ae59d369a6819d8a1ebc8a20449c3402bc8374b74b048ad33c8", - "s": "0x51db239737832764a7e7c1574580af215e8066397cc2232673a2e580634c3033", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xdd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x83567ecf6965182249b6ad444319bab38adf6b5a566821d0eb5db3e51922fa05", - "s": "0x24974184362365fd218ad4d7a88b4c17cf3ae792b374b2306309a7d1fa24e367", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xde", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfa0dd7c213671eac235bafcea7e9299401b2f32ac4f6b39078867a317ef2546a", - "s": "0x4e5e68d856907da297ac8c672b68d911cf40748c256d75a210c86000c2e76d37", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xdf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x69d77d76d8ef4c9750dc47adddb64b14351fae3759a14b6772f33181ca7dfff2", - "s": "0x2bd4c9ebca27bd2c84cc51893fe99193f2dd3f92b746f0d16a6fbd15ee00db4c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xe0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x33f1dfe2d3d01acc30ac971f9805f8aa3c60f144485b3c41377cb16e89935796", - "s": "0x2da208e198554ce128e9ca8082545af330b66ea37d7efd0b3b51c93671fc694b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xe1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9be2ed33d07892e813902240c9935213ea01b3dfacd80ae5929abf504d6e2480", - "s": "0x5b9b17fb42714ad957986909a59b18cb48154734bd35a7cf768c4a142a1e4bba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xe2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x47a30dd5dc513a7d601eceda9d1dcfd5edd12946d82ee59648c1a30181af33b8", - "s": "0x68f6185a35334dae3a29b62c8d1ad3ae7d63d7c85e66d2dbdc0591e641cf413b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xe3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xca41c60d684045b8daaed5f35dc852d07c91f63632a95ed2b93f911d23b1fd46", - "s": "0x53cc0d433b7ce84550d29d640543ca6dcbb5c7ec95b66ab30d92e2107a4e969d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xe4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x77dce9afdee2a8e6a83b0625a4c33c85051a08da3f52fd2bc788085c0846b9f8", - "s": "0x1ec939e5fe7edcd031a1c1f9ed5aad26668c2092b276e863dbb1b241de926368", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xe5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x44feca4acb4895d5bc3fc91eeacba2291725d64cfbdef7311af0e11fb83b9322", - "s": "0x1e50e842f5dfeca7efc102c8de99e533ca53de7769db638c9e8afdeb63321f9e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xe6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x817f05b085fe94f1b34d13fa30a6c2e31a52783fc37f7ac39a78d2486019dc62", - "s": "0x27b25f5167e8a122e4cd9215b6ac81c5bf5c3c84c7672aefdafa85e682a4ab7e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xe7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x546e1b85104f87f13f5c1cb13cd608becf4196572ca9e5c1c398e829aa4838f9", - "s": "0x6235516eeb507dfad0ec77805a12ffc2978866e97d7d64b92a92db76dd2b9688", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xe8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdcbbfed177fea524d7fe2ec9137465686a602a17c7c2142e25677508a5c6afe2", - "s": "0x7c16578d1546d7f00384eea0c6b53bea871e3909e6bcbb48bea04a997ec4704a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xe9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x33ba3adc2ad4314f71de7cc8d84e6592e032d7efcb6d6ef04fbb3c42ee3c6278", - "s": "0x243f8f351396b96a28381f4f3ee4dcc550ea2aae23469a73984ddd2a32f60d6b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xea", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc1fe8224fe1c8a71b2ff0aebd414889e7a1406f0d9b5663692264f83b6bdf0f9", - "s": "0x3188e35120f0f0170f2405c113ef7375c8a9feb0e7e853cabf6758a0ecdac27a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xeb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1c0f795d459554ee8ea3c16dba5db585d5eabf8e7e8acac27ded7833cf4e5c8e", - "s": "0x6ca7bb8dff880f8bdd9ac22b24797b06f705e912b4a33b8fa6042cd52f07804d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xec", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x94db23414cbfffb1b22ecd110d37c6ab3615021d033067025b5a76cbc965c817", - "s": "0x2d2d56d15c637b395ced1cf8f40b0a1cfd1fe40ada92decd9fce75447f62082a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xed", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xaabaa3becff4d5fa8096c35fb841d2569baa75de331e2c7a4a071430474b2687", - "s": "0x75150c1bbc9537e098218389f844222afe52d65e4fb868eca19b57d635dba37f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xee", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9845b01aad1216922358cc7df77e65a99b89f99fc4b8f8762f6afc903fd23e0a", - "s": "0x0eccc2c14a0e42e89a98cd3f225536e5cd1ae0ebe33f3c51e4dcb02a8c846487", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xef", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd45f5d77ff64bcdfd8f5db0d662abd72a930f88d65eee67da9752e327667ee80", - "s": "0x5f4a01707971e91da35d4562d76fee8d64e2baf7cae89a8e8ceeb2305576c1ad", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xf0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x75be17f05ce390e2c77680b65cad3ef9c21d78b1d3f476e6e2b8db68ded2e5cc", - "s": "0x43c2c1d7e8b51a54aed3cff542a85b10cc5ec157bdf301d3fe6c8f5bafa10a9a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xf1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc8a46dff7b8dbaaadf4ee843f58961f5c38ba29a39ac6844d97470d81e1bec37", - "s": "0x5dd49fb66753ce80f53c1b7b1afd8d98e39988a137678bb257c2c450be63e181", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xf2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbc6658bc6f0249ddc29e16061d84f6daa03c7a2b8a849882c58008cbc3c548cc", - "s": "0x618d9b729c13cd8e48b2ef5419be5a88ec2e3baf3a0dff897034a50aeff96623", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xf3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9e20cb0bbe2303d7d1692b731bddee334f8cdcd71b3fe67dab31bc2f8f25ddcc", - "s": "0x1cb83e770771594fef0e855d75c892bf7c8c27c538d6773112652ac50c5cbf70", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xf4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x08aa073ffaf02a9b9b425e5d98a2cd8952b4773bb25ee4fe9070977854febbc4", - "s": "0x477523b8f3747df296b463fbab6a5c920393d5f7e7ebe76a220b9d1775e48a04", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xf5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc65f2281c7f9bda71350edd6484178f436ea993dd93a145014068ef1fe8fca46", - "s": "0x14d7cb51c9cddeade2e67d71083bf5ac11884c7ef3e8cccbcf5ad4c9bab1d2d4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xf6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0c40f28e2ea4b66b7d14d7e0a56024120c53c1787be0fc820c310c2497aa7ed7", - "s": "0x1593116b12848de117faf65bbad6f95693acada142cdb3fd37da8a2099bc4063", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xf7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd1f32f74b33ecebcd36d950ee515342d064308748e8c6e10d5cb859cf9cf89e2", - "s": "0x115ea4ac1f9e6a5efabc1e2b77eecc2c38754cdf3ffa68e3e6c6806f3e2e87a9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xf8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdf3c515a2d8db3e223206b1748a5df67db1728c5e5407bfa6decaf56f0ea461a", - "s": "0x2709643d166306c8577e80958b14980a3db7386cb81e2ee5d0bb51e46e2b9127", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xf9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb4590d495482b5ffa35996ee041ba06949b140cd76039ab2efa32d78db4d0b14", - "s": "0x6237f4d115861f991e175a85cd4aaad4d57619ccb8495d6ef67fdaa999e9f636", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xfa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5787c7d1a2fc021850cfc428230797e0fca4f30579146ef6fb78dbf07955e27a", - "s": "0x2603abb7e1659b40bb8ae045be6448d66e3592d28c8b9da92ea17776d3545129", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xfb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x45c6bb5e0a5c1b8386df6b0ce60473f6a1e428df176dc7bbe0cdcec847325b48", - "s": "0x39d2c96e7331382aec1e7ca17a5ed2e9bbf1fef5d1bfc7829e495e9f8ec5778f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xfc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe066a73a61e7e728872227639a64bb367254c6fb3f8bdf62b5a25667e1d1fa02", - "s": "0x2c6a2e02de449a3ce39a3e43a694b71dcacc2455bd2bd0752385704811650ce4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xfd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8fdb702be8e8b12539ce9e06a92bd9fd225b37ef2c464a884840e0defdb38aca", - "s": "0x515afed1094093a7b8cd7b6a8d9cb87e4a2366ac8200735bc7fcd86421601233", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xfe", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xeda1bf368991ccdea7bc126a11b1145af752469ee1efbc98b7a38a25500c400f", - "s": "0x0936b57d5abd82a4fe2ed6c71dabe4280dc15e7ef3ca2beeaeadbc5d3bd7f798", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0xff", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x57184227d4d62113c168fdb2e31be53d8dde682bca4d02bfaee085487e3cdcd2", - "s": "0x115d2bb91ac9991ea4549012a941057de43f053fd1b4ae04fd03e65aa1b1a9c6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0100", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x67c026fbd3e0e690b2367e547994f4e8b8a865e6aba216a67ccaa80290cace92", - "s": "0x088a3e47143aa0ca8bcfd805464f64ddb30f38d62e5d9997f6bfef20155eee58", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0101", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcb5bca3ec8a19dc452ef1b4a971b5a57b51bfc78ca80581a353a4547567d1000", - "s": "0x2a9efc2a2e7f722a40139e4500479d6de50a9ab823a0f1d3c1824ddac632315b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0102", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1bf17085dac3227681594a95233cba0840e34606d570429bf506d9c4869537c0", - "s": "0x73bbe95d1f048f7c791c5a0ab7962933f6d75f8125fa0606e0202c52dd82a833", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0103", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa7bacaeb123b5756e1e60570bfc6d0b55a846632750a6ae3179d35c00744cd77", - "s": "0x768323fbc648a5230430fa8391e985adec9955ee46f5ccb34b98a88ade46d56a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0104", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfee8132511097616d214a23a008c1a4272f7b2cd6765b0dfa69e5ae97dd64b95", - "s": "0x6d718f433a80ca3249f76e31d3bce93c7a29584c0664f3468ecd40f2f32c08e4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0105", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5164d2eee3404cf84b890dbb17603332f161ebdb96fbf024938b1cb8b9fb72f3", - "s": "0x71bfa35bd0802e01391411798da6b3fb7275c4799257033514572f1fcf5c9f1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0106", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3e645d8e68916029982ee3159cdf389e6676f68ad2c4a3ae4318908b77b4ed91", - "s": "0x7ab91128c0b4044d5ccef4683581e8162843b1eb9ba68ceda335534af5c16c99", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0107", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x97fcd4a22abf0560aa6f313cced49e859a05cf0d15140ee331e5314277070fbd", - "s": "0x72420180b0821d57750236ca3d1ad78b32ef94b5e767f096572fe8d1a979162d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0108", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x64597563517bd05c15a684aa016c1fd5c92626b6cce4d6b00f9a4033b6029be6", - "s": "0x04fb256cce0c9fe1623dbddcde84c413fc0733760fb9778cac64262ea658740d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0109", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb2cac9efb488c77600fd7f7f2ae058014801972170775f7add5afa215d86d126", - "s": "0x67781c71870699ae0317e7c755214a84f04bf6490a3daa067cba325592e93210", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x010a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0bf4a168cc3374de7b577a60b3558ab5e787f1d249672fa8675d7a100cf4d840", - "s": "0x4da4ab787cb1aa2478455e3926a9c0d81adb70913e3910f141dc557a130a73d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x010b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x03991116c5cc7c76c9f4a1b9b71cf16af67e74cb4a896085a23bb1381e4af88c", - "s": "0x673eb6ebaa9328058a425afce260d5a89eb4e9012eeab1f8048551c130e7c0bd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x010c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4ca81e7b817f6ef8378ca1cc10bdcf56513e3a2b7f666f507ecd285f135be368", - "s": "0x1a3797e28b7300782da6a6e0c435047ecd2528c58ef4cddab595f06ec71074e2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x010d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x82b7a58f424f679a8594dac3347d0a86c4d0c4c30a805cfe1abae90888f9e0b5", - "s": "0x25478085e350627df88fe73723cedd5ee99e8711c3da513777bf1578556817b3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x010e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd6829668c63f165d6f37818e242940e028b3b2ad1ed8c8cff7ce010d9795599f", - "s": "0x28e25dd44489fb77ee6edc6e9820f6bfeb48cfb216f850225caa410e46edad82", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x010f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x805a31feb9ced4784da02b6088568be222a4217f036da76e935b3e726ea9b8f4", - "s": "0x5f2de180ad531159584a576d547ac2c32d0fc7df35b26430641f78b0cfe707f3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0110", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc3f4c397b2761461f3fdb28f7b7110b9397c260ef0dd9eaf42fe5b38727aadcc", - "s": "0x4238cb809269f6dce499f136b69e5db2e542f33a49c5c5d8f32bae12f3434440", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0111", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7e0b318b8947b3eb33594fdc953449fdead85a705d3e9b430b59c2a206358ba1", - "s": "0x288490d99b12a36908756d177a2f6d5adb612af3aa3c0e5ca3017a67d134e9ee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0112", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe51a798d58145e00e732a4d493e7851d668b45a67fb6e2e5e7c8053ae8758305", - "s": "0x280e146bb1b636fbd1131865af815d8d99eefc8ba90a4e440c5c73fbaaa476fc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0113", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc66059c9835598551b3d8cd60f7b55a55ccab280010af637b39ea4ae535dd301", - "s": "0x0e7562f9a2f3eee70a0b55276a0c8c04faf959941073deaf1ca80e0a80e8615e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0114", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0d8d98bcbdd39e3299256c84d3b4915d1e41774536603301ba0ba913ed62fd73", - "s": "0x46dcfbd76294c3a65ba484fe4b866ee3e855bbf805da8a0cd86b8decec04bf16", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0115", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x45177bb85fe5dcc46e088e44a6fc3c9755096257d7ab4c64fbca5c5a818e1387", - "s": "0x28b2d52a5d92a418cc35dafe2e0d0f98e063b270e6a12dcb75034768e57a8e48", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0116", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x319770588c1982f1dcf64ed2a13268504ad41601da6d63cf6bc6b5efc188f625", - "s": "0x09fd49a1d0ccee1be9ccf43f625f612e88ae6f2217b2d76b50ac55fcc8c5030b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0117", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x44a7c934520ee6b9c3ff6b0b7fdd31ee61b088137fff90320af4f400ca21749d", - "s": "0x466da0ece39f6fbc335e8bd64d62aa1ae0e78c1f72dc2864a26cd77316c82c97", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0118", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6c65fd8511538f0caf51993234815d62faf21f695a2881705f233f9dc52aa481", - "s": "0x60b4a403c64b5d6d7c3b00163bdbbc72bb7a0c9a2e4e80198b86fa54a96c22a7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0119", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8ed32800f903b3378539d5fd9554866dd2486e2f711fbd2cac64125850186fd2", - "s": "0x0e652857f4ce69a24ebd537d25c41495a288c728218f6b1e5a51689b1ebec1a5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x011a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x97a0236cf4734221e9ce24031d5a2837b7f3849ab92e7f0a46ab158f940c8c6c", - "s": "0x2e95f529e090eb1306f8cdc738cbc95ff4bcf9635dbc27cb4d0f2f95407bfd5f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x011b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7aa224a6b3a2c8df8d212562c6b26eb081e6604e3f6eb164306af38a69579de0", - "s": "0x5133defb87d1633ff4813452c3bbcd6fa7e2a481be1f057a4586a1ec707576e1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x011c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd85a652c3193e37efe893c63eb8498a905ea7174734443c6596c7e61258b9e4e", - "s": "0x4157b4d13f5adc75fafe62b27cf02cf720b30b27c0de9e34dea0d8c144c21024", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x011d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x806a4ebf08e6b138044f0cadefa06b451b7da7716c22f1992c0087f8ee24bdb6", - "s": "0x411cc5ca160d2c10d751c3225eca398c9ded6afba8bbfca4a1613fd42d294937", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x011e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9a92f3c3a1bc878d9a38d21ebc1b86b55d4dfa06c34b951e07b106f0ed37d789", - "s": "0x31516ddb7362c7daf85d71849f23589ff81818a700f5af94b0ba1882340c6f44", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x011f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x176929242b9b873a5f75064c14267b0873cb838254c6c374a7b9feaec38421d1", - "s": "0x43c093add86e7984e7f56ad07f507d81ea71f3a9d02bf3a438b406f9e56d5444", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0120", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x84615e20c753ec008314bf94af0eb09165944c50efc8a961d620cbeddbd16c4f", - "s": "0x43249217e26bb41f74d9b83d212ca3a9460a335dc572e7bedab8338e228b630c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0121", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd4ce5b6319d6595968524dca6eed69985eb1df8f877d672a0f7371d67c9f846f", - "s": "0x2d7a5c5db3fcd51d6153504af4d0baac3609112cefdb02fadc69e0a5ab5cad11", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0122", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbb3ee55a8254f77a95399dbb92833d2b9ae285bac1134dea65e27955cd042c60", - "s": "0x0b34ef451e502a619f902be50259b7b65caa9b84a688bf9c80fe40c70c3707b2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0123", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x65e8ff087230a2494771a736b090d3cde65ba876a84351bbb72125fb5274bf0c", - "s": "0x6b29d750ef7307769527e4dcec5c079f672a1fa1042ad71f359b80abf89c9235", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0124", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x798194f44825902beef18aba0142d69db9d52e585f7d12124cd161d801a03cd5", - "s": "0x74041a6f31420f8b1c2c0721fcc74e2b8923014a44eba0a7ffffc23838af22c6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0125", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0d90ad0afd4163f5190dcec00bfb3224f6d20ad5085f225906cf04319dc05c39", - "s": "0x211fa48e5ef188f15a71ea5e2b926db9627e93154af5c72f47be2e80024eccce", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0126", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3b844d9526e97be780306874c8138a3cf8811b3a3eefa97f5b45ed1578dd0f00", - "s": "0x1a61b3920a44afdf88f996a2f03a633ce792ef14848d2351b068ee29e8a06d8a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0127", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbfc4a77b7b4b89bd775fddbcd9a262034d541a3a91b722b20af2a1955a506221", - "s": "0x33bff1a51ed6b3f36c0222160695fef83220ab49789fbe54db53ebf80cff93c4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0128", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb2eb401b2e7a756ab9ace428346e3b2c3a6c34f6b89ee68600a171a1c2998804", - "s": "0x7f2b68d01611f1863aac323b5594d8ceb11f5f6471ddeaaff488da60beea8620", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0129", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x18adce731efaaaee4ce0a274d857510b53d34ca21bbca238328131f694910115", - "s": "0x379c40e5dc8011deb1007f26593a9e0f637946c262ad660a473ab0088e71afb8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x012a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x743c60f65197f182718c15d20dfe9f750e5168d05cae76e9d66520fa0ca8510f", - "s": "0x52be4af852ec5694a68799aa3e6871a6644cee02b8a17789098e658adf2936f4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x012b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2e5b09be3cb383f5e6dc083a41ba18fdecaf877fe57da56abed55816bdd1429a", - "s": "0x216188955f59e5e1923fc7547b8c44cffe725a112cd1471f7f11246f82badbb3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x012c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x61c6754255131027bc90fef6cc63a332d43225fe0ba4eed89a0463c860f8c2d2", - "s": "0x3c02cf812052e5c55d9b1b0ea78037bcc96d21e767cf8c3fe7ec83dcd287c4fa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x012d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd92e741b16aec6e3876427078360200134fe2b1488415c5bf74b9e58fa43c5b1", - "s": "0x6dd2d08560ce5ba32d5509c899ed53a125c638de3a67c91dca3d3ba8d6d20726", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x012e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4a63d348a4cee7edcfe7f90f613e12eec254b7921ebe7c5585457ab2c04b645a", - "s": "0x6d7ae67e22db02f9e8a671994cb11a1555131079bd902d69c4e8951ac789cc2f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x012f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x24a3416d3a9cf2b8eff283bf1ad741fffbd0f47c8ea5040d793b4ef7723a03e6", - "s": "0x55572962c9eafed269fe9ffbe7f43efdd4dc5e2b7ab71fa55027e6f2a51440c7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0130", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1e724b4b2f062f6030aa624706efb412547a48f8ae1c5f8533a820bd179850e2", - "s": "0x790fd22de982c04b7ea7b4cc102a29190c26fe5630489068d0437becd7d35c2b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0131", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x404a91fc6749b2ddb6b02879f041986ce0a04700ab151310704c8ac768595853", - "s": "0x3db68ab058d75b32bc69aec84923a681e6813d3b624141cb2d0e9e7b5988a561", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0132", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x210052f0e29e62ade71bd41944d7ed5db6bbc4884b3a3b8d7b11e4b5b2015462", - "s": "0x53bf812633d5230b228bc1b5f4cba27554d0f5d537d34c73d5585ec2b886ca05", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0133", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6c0ed46102fd3b40aa475ef45af4e1d53f2c4e08fac2a0b97d50d34456b3adbc", - "s": "0x41d31d142d6b2c3ecce16a10d7a659f2dc5824514b94113a01b5ff2fbf31e05e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0134", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x80987011bd04c7f94a21d6cbb965aa3df4ced5cf89aa5639625cfb385b3fae14", - "s": "0x5f9e0a54c85700e134f2b190801b8d8e817dc5aafb6ce12ad10b14f768c12097", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0135", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x08ba8b960fad5dae297a34edd2620987ccf74a6566f3b4d6bbf9dd255d35ece1", - "s": "0x1f89e259027a1577bd373407697d6526ab6fbbd8e514d63b484e29fe1a9715db", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0136", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb6ca8cd4a562b48d12022f3c7f3d82d818846de414bccccc65f468e11cfc729d", - "s": "0x7d9693fcdf1d5507f208c3c12a317171e58566f9273d11fdfa5459435488c602", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0137", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9677b77a8ba15f56638b075fc883930c53bfff5e295424b65a051f0179ce4782", - "s": "0x0c5a1a009a4f927138ac6757872ba850f134cbe8cc9921d5d4e37251884cb1dc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0138", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x579b30905718c2882736772a9807da4cf5d7083681a2ba9569011f2c6248ee81", - "s": "0x62b10255640b5a72310ec26a80c86d05c7de06f63f69200700c099da7889e9ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0139", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x663cb3d459be66b7e94f9228cdc8a90fd577ee62429da54244a510d860a9e5b6", - "s": "0x2cad6b0847eb5206f1360615a3bde14fd2695fa616d6a26a8c88d21f2f7ddedd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x013a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5184ab850fe3413a45a6b2d5c734261bf5b51b6572051c5615e60caa25df9625", - "s": "0x15838d21fa4b2ee49f81e2eb4330325e374eacae503a9887d638278d90d9b92a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x013b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x722b4b5fd421bf5add2820cf3aeb1ebc4c44378658647ffaa56fff78cc666085", - "s": "0x229861665a043dc7e3acda736fef57372101fb4ee2f8fbb0db211d5bd74b6496", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x013c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd93462a33b920a52346a292825b68f6ee3c9a9a8f76e7507873761c6ee9e9398", - "s": "0x52b08e5c484c11567abbeedee2082483eedb5c3f89a900a5ff408252676e92d0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x013d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb1e492b10550c5634fc4d3293dbced33a778379c3524ceacf8fd6f2d873d0bba", - "s": "0x6c14bc8b0bd033bfac7b348e79dc3627fad52d562c049446d623081d1fa413f8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x013e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6736916805ce2daa098c8476c820cda0b194c054a00f8ef43e0349cd022af124", - "s": "0x27b58a084f0e3dd9f0b2f82d0c8449a5772f26cec4848d14813d27d7748fa2ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x013f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3365405c19710fc70050c862ef9c192553734294c08b9141765b78c3f24a3bdf", - "s": "0x5b2c7791bf192744f46cad44cbb1012cfa3de85a3d73e4abe18ec3d6104d74a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0140", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1964692083e3a418cf70322c39f2b36d2ef534859581d34538e0426fc5116c7d", - "s": "0x0f43d3d2d69a2e9330508d89f39e830ae9c54637aafa7e461ce777da745fe1ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0141", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7f0f31b1b7e576ebcb03e611fdbe87819bd54ff71da21ba18f390727390a4f1d", - "s": "0x083627b44237c6a46fe1179ea570203721de9a42dc2d76a90b2427bfe8c1bc45", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0142", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x038546b4756909df0bb93c5f24145c52839123a117d5d3859729775042b1c37e", - "s": "0x19a70636f3b9c95fcd0633f2e8edf9849ef4b5cfc2327e5b7172c577fecdd5f1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0143", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xef974df5d42f514ae5603d1c9e96de467cc0108cc7ce339e016cb099758eb581", - "s": "0x502d77d1185b56957f0dbfdb7d43573ba89ca8ffbf388f6ffd2c5aa20e08e9bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0144", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb973136c192d55967e4f58e7c196fd4e2a584a8edecfe6eed37147115bb40656", - "s": "0x615b7eae8273886ed33195c132b594494b1a88a4aa92354305321b8464b56f6e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0145", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc53959a8361f368fbc9c8bbdb6f2876c180092ad4d19b2b74f834bdbb711c2d4", - "s": "0x7072c34db8885149e7d8e11e2b2ac8c78a672e9c66553c91e58b31744254861f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0146", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x28843eaaf8ff461139d298af83e2f163f508ce7da95fc566ddfff53bcb76564d", - "s": "0x6a726d2529678adfbaffe24191f15f40fc0ecb0100332cb9067d7d0c1e089a0b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0147", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x941018b5c302955e5bc539497e08d0c9d9aa53fffa9177263cb7e11048d256b3", - "s": "0x744a6e3c9b116f6d6b20c678e2f65118627f7698081371072437e7fa9a340f96", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0148", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2f5bce14891fbedbc34d1132affa4f717c88c90d0d8013f414bc07d70b307846", - "s": "0x3a70f36f407ba2686d9bb033088d7c64e6605fa17bc527f3ecbec9fb8688b39c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0149", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbe96b478474a8e00ca54284c077838e3ce558108fba5d8dcbb9fdf483c216670", - "s": "0x17040675cee703d9fa64248e5b4378c45366339b2abbc99170fac58e2bc0235c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x014a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcdaea9e14b6695b9d1fff44faf01da692cf097637df322c0e54d2a27325c0e9e", - "s": "0x0c19a9d79ce92bd17da7015247cd3f5f9cc9c578f03a66ba9e745460e78c01c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x014b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4d71b9e8e09ce9132f58dc4e115c26fbe9e2917ab3e3b736a9cd896a968b2145", - "s": "0x66b5ccaa70e9643c6a0b596a7fd094420d1bb164ad32194dc6e44333060f78e0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x014c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7a50d44ebc68bf463f85bcc08dd1e96c33dc1e090743771c9bf93ccbecc8d4bf", - "s": "0x484e745f715f4ba51d649c852fca92149037678427ea87f73506cdb5d9c63fee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x014d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x67fbba13a37fc21981bc51690bd287fcd1853769ca0b04fd4f3b8a6f19808c87", - "s": "0x79e094d556bf175153eb16fcbf9cc96ec3901491f16ab1fb5df0f207a88b0fc2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x014e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7fcccae44be940daa99653e0be7b256c74f5628f0dc7fb9dd299dc3edcf86b8b", - "s": "0x3e61c39041fa8d3d7370da62512d3913bb1ca5a67a61624857b17e94a1bf21f2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x014f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5c675e6c8103991cf086d60e3bea925fffc68a3f84f8b7c40a797ed3ae96b991", - "s": "0x7d2aa04543f111cb88b80f2825424ec891a23ba1ee22b555e7e3e8b426008751", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0150", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfb17a76a8362d083cb5538b5cda5b2552afe6c83b041a5f5ce69886d91ba920d", - "s": "0x60dd9870efeeb76416545e87dce7f35ae8bc5ff060f671d75b60ed19c0b993ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0151", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xaebe3c67ee8da8d113b4ab67c7fd572b32ece055c70039df9bbf9f761e65df06", - "s": "0x7aa97bba9dd0a2a742cf82a302be8a269edcabd08cbdb3b1b29557ee1dc0eb1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0152", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc698eab6f7ccacc3877d8a73abf56f5f4d2a13b95295fdf1be7d2faa5fc7cc92", - "s": "0x7a49853d8810327a166e7a38b18b39930097e1bacd94fe400c296573b159fa35", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0153", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xed3d5463f4f361daeccbe18c63c45cd6bd89b02462df9bf38d94d99d05652cea", - "s": "0x2e71320eb49fd180eb43833a5a13019945f4a1ff87ed7163c1e2eaa82117b31c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0154", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcd9dea02738b8d40f309070875498780b7f7770d50b3bed9d43e64c7f69c065c", - "s": "0x3d7b563c8e59c50844ed839e231e164b0aeee545f1929f11cfa674dfa7198e23", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0155", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfb7ff87688ff19784bbc7d2139b1f51130d05d3b3c503b01f917e4de45f763dd", - "s": "0x32d0d7c436b6ff2ecac91983bfcee3421a3dbf0405a9ff11ad2692ae1e5894f3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0156", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1fac7f38f22fd39f8148c1ee3b8ad37e7cac8ba4e3a839a5d7d166c96a9fe6bd", - "s": "0x46a900300007fb9759b01c5103bc731e9b1d47cd6d29bd4085d22690ad3f8b8f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0157", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9547537284386ea20ab137d52330be7136953b56ea650c3f2983fe0d2987bb58", - "s": "0x1b5cd06ad8605515f42d7af572500bffa7b4fa7d513fcd7461c38b9655dcb1c4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0158", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcfba2cf294fefa61a2ae5aeaa8c0410a9de1842539a5efdfb7d2b12b2fc45891", - "s": "0x30ff2d77179162cd10f583bf79cc79a2a4d767538e82f990d7a597665b4c486e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0159", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa0a2b9e8bfd79bfc5165a4777250fc305bf3ba8a9041cce6940348b9d53f4af6", - "s": "0x47e148ba7e7ab247c86a5ef1bf6e4252f6ebf9b8904fc1031320f1f97441288a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x015a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6be60e5081e635abe27b699dd113fe85ce221c6ba86eb3ab7c3dab357897cfcc", - "s": "0x0dcdf3bb8020371a16ea00d39860a400a1188340c22260dd990bb57a04f8f3ee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x015b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9c2152ec973575bd850e2ffceaf8569f066c0ad910829796747ea3c5e69badbf", - "s": "0x30ce4d1d12ff57b7abfbecbef78204203b1fcabcedecab32e8ab074da6ee4516", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x015c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2cccc906d7aef4f6040d0437cae8de7a24d4ce3720d313a30f2193e334f91a00", - "s": "0x77e626006cf1ff9bb20d4d0eb8942432ffa1ad111c91deb87ced1845efaba851", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x015d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe9ab8ade860a5b110c97b22bff384b24c4078cbb512ec533d975eec10b057e49", - "s": "0x199f6b9041958202bbb0557962cfe2b12b317112bc21c58f6a487d3428f65c19", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x015e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8115fdd06340262b942d372ba8de61839c9b691b92ea058c1358aad240b9c4cb", - "s": "0x466fb313e668e9a75a4300694c236cf3b24f4d4c28a6c75366ce7d19bbbd7446", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x015f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6ca0106e4c5805c0a2f755745714350c665ba40d3002a47494c1a5c363f8f64c", - "s": "0x7805fe347c294821362c16e3d1d4dc71736fe542a8c651d996267b2a843734b4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0160", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe1cd7b3bd0bf6f1fb323c81c2c6406baece022ac1e815a41ca9038ebbe56c531", - "s": "0x6c86e999de5aaf549d515351955f8c0a3116c2a87eca52e9aede98ccdf39477f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0161", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1eb709d4cacd7f27b5869e503679f94a0ee04dd9a932cae5bf821332eef4c740", - "s": "0x692f51062d4651ac495f203c668f6573bc525b853fa2ffbe0982c6f0a336915a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0162", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x227f106348f83959dab2be4a53d97e19193b50ceaa61023cd37bc66050e898b1", - "s": "0x41c2ae87967b7f034e0bf5e5d84ef27776cb0d0d587a6fe59380a90b634203b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0163", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb8c9f23d91fef4ed913f90da7f7ec56e008cb1197c746da10aa63335f7cedd7e", - "s": "0x796a47e30fea0e02d1203e1c7d28daa93906f47fbfcb01b1d2f77a91af50f7ba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0164", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa81fe4d49555e2f417015b6793a6db4b86ffeb580f25b2b29fcdad7413d38db7", - "s": "0x068eeb51fc3b15253313e0be21ed440365178ea838df616546b29882dd9715a7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0165", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd2ef532e9f290c16eb08f897ae9b9a14ab66584b625d8781387274838a2b14c5", - "s": "0x513f1d3fc007e31e7d0b70be7e468136da23ea3d0e02fe1d64f26cb297e4131a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0166", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x664ba96bdd42d38e0ada0e639d9747d33668fa038ba1903591b7aec46527dca3", - "s": "0x2d2b1df796a6704cc898ffa4d4235e241afa5d9095883a1856fc14044def7c67", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0167", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1dd55232e0cdfa97d71d879e1164b891582c34f73e57ac81b93d3ec75ffb6e66", - "s": "0x6eb4a70efc1b441c09e821254e66480340894d3eaf0c0dea417ad73e3d079567", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0168", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x62d8132052f2143209147471aed3ef1dd1c3d0d5647b7bf03c8709f738b16e80", - "s": "0x6e30e197c5d2a3f105f2718b1032fb49c028ee96d3efc949941e5819a39eebdb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0169", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe61025f5dc5051a9b64003e44e2ffa1a25086abae74193430720a2b1ce8184d2", - "s": "0x76ab34c9757923f1b98f4b45a0be0bf7766e204c08fcc0d8a5e2ca7d4a570131", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x016a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2695c8827322cccacc630ba73ad261db5fb9bd471904fb1760d243c4677ee7f8", - "s": "0x4fd5b007722321c832fc4974d942c63441242fa4a6260fa544fade8dd57ed992", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x016b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe0f86f2a4192f77d4e080fb48bd8fba69f65057414513b175db29afe39080c8c", - "s": "0x36af1084a72a5dc522d65f2130930671b7d8c7181ac6b3f6290e63be43a2956c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x016c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf26b8e17d8d58c2895e2618b4c0bd241e9bfa7a2be82d690b51a5243f164d41d", - "s": "0x7ca94ff1ec67f476442c7dc2a7b44610eeea724e85fb5e2752d933f5f9ec06a9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x016d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdbe64371c0b9099400d887aaaf0f8bc3314198df73016bf9f0044f1e25aa049e", - "s": "0x135d9a2eed7466a849d9f4204e07488a37646cd146335bb5965f363803017d5a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x016e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xac24345299315a91149b3d52c0cd3c0b963de5e01d6598c8a75f8a1deefaba44", - "s": "0x76cc25537aa68c7a04b3d6f0a4f9c39086634666544f89443134792079ac7e03", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x016f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfb5497a9f608154aaab5999066558bbc99ae72f54b775155fe8d2b64f52f753d", - "s": "0x46ac745bb69cdea882b3c1787a48a799624550bf2fb24f89bfa5daced689814f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0170", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe9bc79e121d4c270b22a4480f6b32a0bbd970c246881f60a17b6b984b164e51d", - "s": "0x640a55d0b1de60db78f1a600c768a83f21c3934714d5ace9a17c46eb7656788f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0171", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x44b96fd3d9d6fd723b8d419b86f74259c465cd08d82649c98a7bf9c315b07c80", - "s": "0x47637e739b6bffeaa4f8845df5ba39849514621d3ed4bb89ad9f8b61a9a7d973", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0172", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4b29ba5d5c39466fa774b76dffb822a9542718e57a2b68ee21243f0c958a0dc1", - "s": "0x495766fe8982b855f99a0a99793f995c741f226e1ce3934589d330eaea97944b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0173", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x23d1b3e13bcbe81aacdd7580772ec2e1b97b63dfb83c234d2164e44f479437a0", - "s": "0x5d15ada878686e7041a5faaa350a7c97be9f65885b735f241e8b4d5fd3a868df", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0174", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf081b613e4c4baca569b72902515354e7dbc46c2ec3d18d26fa039f8eb301b48", - "s": "0x214da576c2ab0072c800f507cb4a3adff83c2dc39064e58faec2639c9796079e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0175", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2baf609f9273b4b712a23864f9e9d8e9494d99f64efd64b2e54abd40bae7ddb7", - "s": "0x4230ce99c05cb1148eb7ef4c326068311c51ce80e4e4f58f4890dc46ef9b45bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0176", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7aea3574c4a9fa09381dcea3e6585a725858275396b321885c579e96e9f91af1", - "s": "0x6e45fd6517efb0919b08c1c820af4b40e115dd1d9d8f3e740c1fce383d473606", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0177", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2acaf22450af15ecd1cc69945a93605ddabd7e935767e2f5b7a15e045f5635", - "s": "0x755be7b3a8da9b692bdda6cb2e891306f849f34bd706e79cf2a536bf7c005e98", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0178", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2e3b19c669902968f732febbf1c4366b52acb6778023eda6380c982b854a8735", - "s": "0x27d2552c85fa57fea74811573fe6d2e5020fe5a2d0955f67cba84e2677709d49", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0179", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x078f770012afdcc7c0dab1615a96d64fa74341976cc485a8c5bbac653df01807", - "s": "0x787393653f1f6aba56ce2cd9c96d8f16f13ef4c212e0bba17c74b8572a89105f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x017a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb7634839f4a3d7a17a5297df3184b5cf9c0ef3d77fca480ea38e42783c0a1a36", - "s": "0x6a89a31553d961a4e5c92d283afeb048ebdd3376ebbcdf316c7b6f8277994c9f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x017b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0e60cbd5e8d759856d7dec0bcba479144237a223cf3db3c8d80da27d53b37bf4", - "s": "0x0f6cb9a97983824635ef7aa02b4c3d686df12b1e2dc585a3f21d64c17f9de02a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x017c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0470f467d0d2027054702a9851c6e119cd6f714dcab82f654ebfb285419f3d83", - "s": "0x166c19233334e596cddd3b6baf00dd45837c6896d1b529580ae1c327d3d70b8c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x017d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6ef2a52a964e160e0d8777bf772c3c7863287a25bfecfa1bba4901bd2039eee0", - "s": "0x489e6693ccf1dd6aea520494ed29077ba454d8826a07b6b8e7103b42d30c994b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x017e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x90ae58fbcc8f7305acc925fb413c7b9c9f9495106b5cebbb9d05370e280556a6", - "s": "0x7dd655f52a0823c5c835c3e7f32cec32bd0ccb94b27fec433cc6ed465299cd6e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x017f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2bcbdc6bb393ec2d7b816c904cfc2a7119748414e688b0c01a3680a5f9284e1f", - "s": "0x2c621158a5b1a62a6fecf6cead4100ff65cd04cd2388ee1ac1682da1bb104737", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0180", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4c8d5b2e64f6900e114b5062d4c1481d583a3a5078a7fa800d29c25f11a1fcb4", - "s": "0x4e5f71c0b25c39a1d5e6a6f42f4fe9e13fdca87a0308589a6a6d6a246e6ff26d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0181", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x52da37a96872569daee542d729d4fb72664d1ba21c56c7e761590500f2da1058", - "s": "0x7131c78999b43a8708d6337c7bcd3bb52f0e9ac40a3d8da1393d18a686c6bb83", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0182", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6aaafb11761bf74a538e2414e013b492e6068e71fb6f5013e0f8420fba0943ba", - "s": "0x2ac1a25d14b0608534f3290d4e912724bb4dde3ef9987eaa689b65200a4c1728", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0183", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xff0bc25d7aa59a201f2b6e1db5f6c5e7060bbd39a88cc0eba6b528dca0b50178", - "s": "0x7bc1db008b69283b0b8b517415f5470d114da1db65f00e8c63929c193381703b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0184", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd2635b21e2e1693c549a0d74c979cda0cdddd6642a765aa8c6c29ef734493170", - "s": "0x0ec89ae1e2f32cb3c9e2d377bc870b1fe3139135350e25c74ae2268ef16c342b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0185", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0a3dc75eaf041c2ea40588b1cd2822a133f97d276888e3905f903e6de920355f", - "s": "0x374460d50877c1ca5abe2abc72ca8882e9d5f273dd2b0091db3ad8813f4971eb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0186", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1a3c8d1dfccf60a638506bf636f7dc63c81586088ea0f82ce202b0e4aa505b46", - "s": "0x1550acdc061f1f0d9efd5fec91cbe567a23aed67d9aead98713f3307aa2e9b13", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0187", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7d5e3257affb334a0f29edc4be16c581ffa4c6eccaf2fcd91a98d4fd2b3b97f2", - "s": "0x3f640a1f62e646824f5a928ad6a3b1bd45d8044aa045375aa15f05bf4cd21811", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0188", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x210a33af9f9505450a5ee0fbc4e298f766868d12d62beb108648b6f5cab76045", - "s": "0x1950d4937959407e94084a73431af393537a5aab005ea531e406850ed2b05591", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0189", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x402d5aeddb5b892b67bd1b3698babc8ce3b670211d137aefbbd56a29218ef6b1", - "s": "0x5f9287c0ef0b2249b8acdedf5c513bae917af1bedb16360909dccb31c63d1c17", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x018a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3083549a416f4af0237ab241bca18a62368b4e7ba12bf78968b022549e25b328", - "s": "0x75fe76d299c67d84bcfaae568999c338a7423b2a7c339b8c18042f6c04428c11", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x018b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x922c4f2c61ed4dfbded6cf3b7332bc48487f94b01be80a6493c476a1990ddca4", - "s": "0x432c513c7d75e8a1a0e729ee99d6dfb1ff2b6719e16ec4a364546456e1876129", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x018c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7b3507f082a37c6314c70aa7e32d3f96f4536ac728265075650954859e61c30e", - "s": "0x47ff0e956ebe36008ffcd1cb78e647cc1a7567354f408e2c8d792c95c8babdba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x018d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6e0024cc3aece13e45d7b16ef6dac66770fcd3aea41e3949cfb7beeac4c3600d", - "s": "0x164e25d7afcdfc2be6d8f7ee9ed4762f0e3f0dfbf310aa8c8a4370338619560c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x018e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe6f976c3e4659f6ba76f6468e21f12779e6bb3e45cd3c7322a8ead23ffd672ed", - "s": "0x4a3c5ec6fdbdcd7d5aafa965184d67eb88200a60f2d174e98c66c7512cd34baa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x018f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2b84f7aaba039031c580af65f251188fc86b92721449ec22797a12a8773704b5", - "s": "0x36fbb18c75aba9b014f7ae82743c19eae64c8573a041f68a8d04f6f5d012dbeb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0190", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7b6634cdfc7f90c7bf96abe281cf18bdd92fc18abb358b77f331a4b59cd36364", - "s": "0x6b3e302369932add1bb278e47ba91b5c84b0185e78693cd8e2ff426722ed4a44", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0191", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5d00b750e5f57636854bacd99ed2dc248150f692a6e6482b673a1baa636caf72", - "s": "0x604aa8cbdea9c4f107c9e6953e67aca9c682bd988fc0170467db80bd6bfe610b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0192", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfb553d316eced3e2ad5f2024c5962ef94dce62fa57513471bb9ba5cb6b905b83", - "s": "0x4139ab8014597d9003059252ddc82f83bd766b4e977866ed05f538472b60ca8a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0193", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x34187edfd78b4609480d84874b6bb8b63747ef159217fbd7d78c89fb5cb31d16", - "s": "0x49e70fa6cd395e20ec4db2957fb487d3b7faf40bb84235219e894de602484778", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0194", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe12a6a335cb7f15613767a9bbf82f6c0a8962ac114631cb363ddc138828258b6", - "s": "0x51c37cab995dca6fdadbb5a7ae5016ffb52eaefbf51008d043c8dfa6a9dd9b83", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0195", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x84d093735515350bdca3ed2a2b84c6eeca9f7d1d68248ec2be60f24cb8e7a105", - "s": "0x34c83e7eb9419bd6a1739f9a8e00b0b9ccc7cb65c347915390c315827fa61b63", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0196", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe43ad6e94ca60a9eabb3a6472fc14c08f38bd720d811d13bb6bf7ee4c7ca3f6a", - "s": "0x4d235a473c019a21f8d9464b2d5040461e51259bad5fe5a28faff3e411744112", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0197", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdbd1f1eaa92a6f162928d701da5b36d7d0e0548c2f636538d7149f6cfe8226b4", - "s": "0x4ae2c0cbea1eda9b3a3a107fdce500692e0dc062ac84e8382e64d72c7ac9f8c7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0198", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4bf2dc20a258d2a85a42ad4432d44695c97d69880d967b947801398d22252cc7", - "s": "0x63ed2aadcc8c0de939ba35ca0e428f5deb1edbc8417b31ac872fc21c6feb69bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0199", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xab31a5141a31d6347dfba8f5e3e5c74b166f795703b11202f68a730745d3d800", - "s": "0x42b98950dcb1576f106ad2665b5b530fe9765d05baa216a73385c676b944a39d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x019a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x51a508186f1d6ff9ed31457fe1500d2ae4dfed401f86e8866b168d8cd89a3b32", - "s": "0x1e0f2217191899a9cbf0a142209fa4e3de2ed87955b09d94a3fa009848c1d886", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x019b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd49ff29cc8d9e602fcc419c707d5d678e72797942b45c47b7a5b51ccb2a72e1a", - "s": "0x73690ee90ee46f65590e06b7676cc86a14c11a237a27fcf5bc2eb3c1a38f53a2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x019c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1bade0d043fd0c7b761a1d644679716d90883d7dc046c277bebec52e0ffb37bd", - "s": "0x18e1d8b79d80aff9ae6face3c4d96c46821de6cdc090e6e430d701019b2f51c8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x019d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe6a4c51449393b3e043ca6276a15021d58d25d52ddacd3a473d561f6e1776b30", - "s": "0x785fbcf71aa14dc980c44c2b5a643ac8dfcc28e399680b7b517d7ce17b528ab3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x019e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8c8fc66a443dcc6c9af145b29cff1a04aa37c5b56d6eacc67d00471776434a21", - "s": "0x31b0c8bfb93961d15385df58af67c2928d3e91e83079dc6dca9ef8c436afdec6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x019f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x733dccdacf26362321278866149d48a1ecdb331b81717063022ed70abcd73059", - "s": "0x2b0e1d4c89e656ad3e74de60a5521aa4340c4f31dcc888fd20209e1d26c03cff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01a0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3db81b07f1668f953510255f4e51ba666666e371eb5171932b49d3f482dbd8ae", - "s": "0x3cfaea803167fb8a952715da4e9d71982706d41fa2b3ef6eb4cb9af62ec926d8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01a1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1eafde7221c64499d4c1dd60222ddc6e0b809a8d4a8e3704d8504546b9b7335d", - "s": "0x6211a8fad1ab1b0521e74e0713edb42927d5a5fa7f20295c8934cb986977391c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01a2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2850983f99ed11e1bd4df47cefcb57a31c83a53c5daff78949bf738326c2528c", - "s": "0x3bcc64526cbc456332fe5621bfc08b34ce65b88e531c6581c882966630a65a13", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01a3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x73e8d2f734dfd6ac7496039a98f07c1f8fe63290bf27e546be8e82b3ec975858", - "s": "0x0de771231eea87e8768c9d7dedef710cb31b38bd40ce18449d202124d98ffa98", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01a4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0741697f3062f035d5be9ae72c6a66ddad843e466c29f15295f3ac269c17d8eb", - "s": "0x90b34e65e1ea429b174c2a94f908dc79120749917a67dbe29849e534bcd40d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01a5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x534008ef8f910f0a6c1575d98ef3627913b05db329c0af3bce0f134c89f35722", - "s": "0x76adbb6ad475f5c3954289f0109d4a595cefe564b06ad707005b40c590b52f48", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01a6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x59d24233a6c6801c1b62cb038fa28321aa8bf3408b79ab0990be637089d63881", - "s": "0x072089d1e3c7ee0e0556052eb3f2e913c579e0241d5aa1086037569e276e3f06", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01a7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x30a58375d24e6708b31138a71a5017f3e3d872725b9a79863b48c72f822534d0", - "s": "0x3e66a030b48fb7c5e6e73c29d04b3bbb3d4adedf8561e6faf3c559e21ef91c8e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01a8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd2c75a35660cf40b303cb7bd9f5bb3a19e3addc3717b8dba45739a3710c7770d", - "s": "0x1a2611db4a68174168a321cd33124123e035b28166e8f04805e9d07b4d117c21", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01a9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x61bc175be6159bcfed6afe5ceb306c254d9ad816ca0b81cc052c29a321661d8a", - "s": "0x0257175a60b96947322b88db9db884c4e1eea64a27ddb40bce4fb5dd981864", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01aa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb65accb83ea5721c954b68678378d520d572da529d895e95ef4923a5215e51bd", - "s": "0x4e879174f9879ef67a9d757a44b33a1b399315ac0c4761a6f2433c90958218f1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ab", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x432f2f41d513a78f942cb81c54064a0596d6eece90ba1fac6b228c8fa4c51637", - "s": "0x74e74baff0a5840c78ee848632e37a438f4b6f8a7c1e2c42dabea7d8ad2c6f62", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ac", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb869e8b4d8b70b479437fce9ab72205ed0685a3c8faa81f88aa86092837e71f5", - "s": "0x7a018d3c2a35a367ec96b0ac5abb58301c9fd8ae53babe1ad1bc3a4178c9a0fa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ad", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x65beb7e567a0af87f706181207ca4b942c5ddc2f1ecfd6cdc86c3c395e5e7ccf", - "s": "0x32403fd2982c43444e2a8c4b81c0849dfad044dce831327e50336f563a62db09", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ae", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xffa086a2a72b0781ffee37b5b61084070c0bf9f08da770eaf8773fa874edf121", - "s": "0x724629e50a7c67a771a72d4e3a866298af194a8fd8af3ea814a73eb85ebf2d7a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01af", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc8ddf9b5431f7ceb410773d51e1315b8b587bf6eb9f561413da48dc94b30dec0", - "s": "0x1fe1cbefd8d62bb6d9c90a44f24e5864070f47e8d62bbb9cf3fbfb0b753a0396", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01b0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xff2c33e8aefc276fb12d8b2e333184ea10cb4ecfe0425f9a0f27286d205d4df7", - "s": "0x6e9cb5a34ba3941faef8fb28bd355ac7531c5631f2d355c086f78b897373e878", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01b1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5f446fc98c2d866eca082ac7562fe2aa299284b7240aa1d26be5fbc9eb46aec7", - "s": "0x777d7913c07d38b889640796fabd2c6fe5232c7230688d7b3e2f369774363f7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01b2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc4c1b18dcc18626ef003e8f8a09e89c9c3a865938513a9b052772b5012e8aecd", - "s": "0x363830efe697a959816670720d086f7b877656fc5d51ce315c69d5c304272e71", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01b3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xff947ca6a3d946013869cd8817d7f7a93d7950257576b01d58ca12458ba94103", - "s": "0x5ef5307ff511812b48cc6347f67ba7288c64a63be5ae60872ba3ab5137896dd1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01b4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xae6f3f3ab5c67904e86348c6dcf6d54b8d74198334cc60b0e93932b0f60fc541", - "s": "0x09c51a848387fee3fabf85928d5ea1c1672027f0fddba01ec507ee3b681d5f04", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01b5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf5c523bb44c7c9b2a16018e4068339262af4ab62cf40d808722f581c6d137d47", - "s": "0x470c7942ae1c24514d915eb470a778e6988964c14ce2a76209e32aa6e3694466", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01b6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x08fcfcdc8989a1c1d15067a6441899021b9ff37a9f4035e96f43e4208418ccb4", - "s": "0x1f45043873b387f7b3677b0f41cdc9039cb8bdc69611f67a46d426f4c8c03eba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01b7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x07b7a67038246f6a24c1f1e9661c535f0a556be17af39c3b0feadbefbdd944ca", - "s": "0x279ef06dc0c92dc404d2d4448f5e8bb9e1d083db203a3b2e647ab29f32d57707", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01b8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1f64ca2e312ed6d9aea702a093ec8307ee41604cd0efd865da988b832bb7fedc", - "s": "0x586a0aeb730d38c8d2dce7d576ca376c4695c9a65c237f436a29a4fed4a9d705", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01b9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd5be24030f0c8ed5ca4bba22b6c73ef19cf1b3cee4d93619f132f062da57ebcf", - "s": "0x12b45ffc3f4a73e45f9bdeafc8b404524fa3289e7f9edd3486a73e971f90e3dc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ba", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4ce37999fb9da7de9968a34221458513d3ea8f558daecd68dac2eb2be90506bd", - "s": "0x22fd0c2acacd345090864f50ae81d2bfe99bb003def1478a4e2c4d058961d033", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01bb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf47dfe440a0d9933c2d9efb2d9baec974e4188a149de44ea8b996bc601c1845c", - "s": "0x5a2f733e82f988610acd1fbf28cc9b29842c1d363f8958193febe34ecd1a561b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01bc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xabcf172e2a4f34de759705d11b039c83eb506e6e3fe4e20b34eb76c26352ea58", - "s": "0x02d39ed7bf92ddff7bd5f916c5ff490e10ce7722e18a6f7e4b10ad619cf2ea51", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01bd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb7409570e30aa7158869a08e1baf9ed3ef93b376e38f3ffd5052bb842c54edd5", - "s": "0x776da8d05e33596e5e160bb75d312d5d4f412a6be485ce327400e58b778cb7b1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01be", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5160f4fc77fbdddd740c3a338fee9b99a3ebe70382015402b1101b1abf00c973", - "s": "0x37479852f6d973749bd6134cdb93ba0b2863be784331c2f5821511159d63bd6d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01bf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x26b28761c51b2a37847b0a48d76a5dc184f4056cfb33d02cec724a343c9c6c91", - "s": "0x06031753adf0748c9e9b008ce3fc4cf397bbb321f8150035d0c22fc24c8a181c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01c0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x12eff96f6d27bc3b157775a4c2a5d5155309b608738a4a584f67bd97a8440788", - "s": "0x6d8e5a1e1b1eac9955445bd31c7d1c611d27be840391309bb516ad41a99761c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01c1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0d4245f14cf14c1bc74f0d52fccbcd3fa082c69a73dce33057413530250c9325", - "s": "0x0fa36fdbcd6e768bc62d06923c664322481b3adcc88bf3a93d8fcfb0d73cbeec", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01c2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x22da7926fbf9f3e1f5be79790517379bfd2605269ea8c980ef9d707a5b730252", - "s": "0x36f029520ff03da4578355975b7d13c924d79379ccda5fd644b95036acadb6cb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01c3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd1b113b81a443daa1198ff00089f790cdffc62dcf13e15a75e74bc67bc3e3cbd", - "s": "0x5fdbe09347b26af3efbcdbc0b813d1925fba04efbe08d68f3d5a88a827eb3072", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01c4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7c669aef279b4087f9ea942235c419bad40a831a985f443104996fbaf80db890", - "s": "0x7a8169b5a5e69be7c0c46bc71b41e0cfaa7e305cf8b3f19f945385bfc0cd8818", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01c5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x07fd7c904da9a3061363eca5e2bf3272d3780349d66069dcc9c80460c4b3ce94", - "s": "0x5734aada5260f8463fc792315268eddd818d38ae29b297265515d1eca73b72a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01c6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8ff26ec254c9ccab24605bc55cf9fb297ce8959affd6096060a8645881e9b078", - "s": "0x53c3b0cc1af24bf36d786057863fc9e2a11e088411f867bcdcdd141e64d958a3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01c7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfea2a5c5e100ee0ee6c6363d6e5c4abb57892a29ccb715a4dd89e51f73c93d35", - "s": "0x5cf893964abcad356f7833a078bc6e3503f892d592c01681d316ae6cf0e8363d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01c8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeac212f8fcf1011bb0b6ad6e52d63d967a84eb12d8f2b3062b7bc2fa8abdb9b4", - "s": "0x5e81ce74390bb574dd31407e611d74ad93f039731dc704903584e0e5c123bf63", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01c9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8e327ae515e3ed258782f279fbe198272b9e00493b60e885c4584b50881f89cd", - "s": "0x2f2409e38d93f95b7af4a0cd777732b3d17232769b218fc21199b57edc8d759b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ca", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9d079029492ccb4cd5526438200c05c339cb48073ff70d9169a1642a5ba0b9b2", - "s": "0x76732b16f4260157ba78f2c8ba8d0095163ceed575313364053ebe6e69be3962", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01cb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe6f6fc772e7738833828c8d6cdc2b18191f315a3642c7ac68f0eb9ef1d0d84d5", - "s": "0x06c4c1158622f7d9b75f1bafb786631c79c3ae60494a0459d508b200b6e9c169", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01cc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4e95defbfbfea6457bfb3da316147d07fb95484a43c7ac7161b8d2aff0bcb3dc", - "s": "0x0321c30c0660b9f404b2cfdfa40e638e15c50b12a330bb4e19e7d6054afa211b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01cd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x089c9ee88edcd973836f50e7c857ce3cb830a8dd50a1dcf59ba6f97349611dd7", - "s": "0x7b9a2d7f9509679ebbd3e90d8498b7659c490c8ab757484ad089e3d0e1d8f4c0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ce", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4a6fab5073772d872ce9c6cfbfd13e27d4114888a525c5352298add3e1f544ec", - "s": "0x2abab7ba90b26d0a7db3cc3dc499abccb575e60105724bf6b09b6ef47b951395", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01cf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4f878850164f78caff9a449d91bb3767e45812930852c820a0489962a8baed7d", - "s": "0x5b083d332215603de89125ef5fe76cd22910fabafde5db1dc5a65233bdd157a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01d0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9a16ee482501c470c250a14a1624e02c54777758b063b3c203d8da6eb23ecaa3", - "s": "0x79ec17ccc988eacbeb5d5337821f4d4b997ec755f0bc7a55fb685cf5bb6cc458", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01d1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x73e1dfdf3fd076a3f5c8a4e65fbd2fa59b97e503c4f0ebca2d4101d2bf84490f", - "s": "0x25c598d5eb8af6c06829003c22229dbcaaf9b13d90ac4928c040707ebb895852", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01d2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x931abe2ecff45d782fad4193681ec759ea11594a76aaa81360ddd58e64f13032", - "s": "0x5715275cf6ed81d1ac6e105e4c84fc7f0c0e29959f531b6ff22bd4a11c156cf5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01d3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf65f700895b2f92f4b8d19129aa098b00c99164b1daa4ac66749e4cddde0a40a", - "s": "0x593d0275a11e8f709b1b70d5f9dfe3bc5107868ba105052ea7c544eacf645bd3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01d4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xea62afc19e8656bfa322c7731d8c0d5b1aa1a7cb86979bc22eccd4726f882c60", - "s": "0x4e124ba7e3e72f10d18fae5adef04eca5ecdaed8369a79d34786b39660e046ac", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01d5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf17a885382aab95865db4c4e0c0df60aaec6a98ce4ea3dcf180105f8c3e21f0c", - "s": "0x5f60331dfbdfbdb2303a33964a58b059fcadab09808ba3f1e0bc0878176fa616", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01d6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8f9e7e0863895b94df5a8710595c8469d001f118b5b1e5b1c3facf2bc9b49dac", - "s": "0x1ba9edf52f6d97fc7564e2685a15377f1169d17f5b772046cd30ac12de405cfe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01d7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa4a47631da7c70a872f0c71536fc4acf8401af877fea4a9d865699e6f4af4423", - "s": "0x61b17d30f4ad4211fcec428b3cc4c9bcdea168bee0e3f8d964b67a89f081ae37", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01d8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x408417736d29618c65dc5c9c999a6d1ff3071947ee9ebc43d0f3b721d55b2f56", - "s": "0x06e20e9392bd70d8051da8c0b5cc897a4126d9a6b3a49542890fbd78e2880ed0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01d9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x80156783afd34c36166f1fc7b6dfd530bca86f7756c0e3e25cc9cde247cd1fad", - "s": "0x4736fabf4ac2c71b3e6915b904ba383d936700b3d5709da91a9235f80feed4ba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01da", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1a7b98f591b21134477bbc29a808c6786f25e191f3b655c571e456f1b795fcdc", - "s": "0x2efb194d65e24f1e5124c42c5d6f0575073f53324707b012c7986fb1cc8c861d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01db", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9bc633cdb8986412b168b7722df87e83eee0186aeccdbccf4d9c72139e37b343", - "s": "0x73b426dc34dc8cbd85dc4f242d2adf0a4112a50389a6395ff481f16789315c09", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01dc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1bac0546b410159a0a8cb7b3c8e3cd8e27d0af285ac379c0ab67200574cc12bb", - "s": "0x283993633af3aa401d5557aa71ff9f5c750bee2df4ae41a4c7c51f3a015c1745", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01dd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x387240ce850b7908792af98d27d101f7e6dc76bc896bc21a6c47807f1ccb7576", - "s": "0x527f245d0af2e85b9e55bebba81e885c95e1f4352570a71a9e5b33f52013bdef", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01de", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2cb7a14aebb81bae713a8d255ec64e228e19783e976e7052198fb6e338bb430a", - "s": "0x2b367e5bf49514ba4e28f2220762edbae2ae4708d0a0e3eaacb0954ae098d166", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01df", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd5ed3057e1feb3746f3d7cd1f701f3a17794552733c01297b3bf38a55c17d48c", - "s": "0x1ecae3fa77a8c7f201445aec5613de847cb1de26789f4881ec88cde4e3f5a5bc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01e0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x07741af779f452129e6ba89723b59dbfbc6e2f914c88b17816e5333be218dbfa", - "s": "0x6bf7f39ddf05f1040ffeb6e51c548b73a858c8e3036433aa4e718f8e7f925724", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01e1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6782550d5b3b50b2581bfe88aee4a87cc0c79c8be09a0d8e9f9b82096286e433", - "s": "0x38458e3558d2dbf579082fee4a752dc7303f5e62b51f886ca7be3fbc746e0bda", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01e2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa7a05a30ba10171210f783ac640e7494daaf09188c0a902540206d689b7195c6", - "s": "0x5889b36980e0c29c57e1df2bec5ea0db1ad756fc291769a4afc9b9945f571f71", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01e3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9f1456fb2459fb978a672b8ada02acc64f9c3110a1397667a8783c8ce0ef87c4", - "s": "0x1852f192c9c804fedbb24b2348dcc12d0397a4adce5087c5c57c156ab620db85", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01e4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe315165cde1198716ab4a0633a1d1d7b1c90d4be2b20442c5a7c2ccfbb473bf6", - "s": "0x76e60658c7edde0e3112742aeca589622f5814cbc3975e51a7559fe1c0e7a5de", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01e5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x656c9e1c8622a2779ff5138b3b9f43d16fc63b503da6b5f75ee327c7655abb28", - "s": "0x312cf985ed295f0bbe6f6bea42a81fd55cb9391fc7a94b041a67f99ae8acdee5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01e6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7752988a62b3b79b24011f252fbadf5c0b176f13aa8bde50ee71ee8354b4794a", - "s": "0x32d5004e00c6a2278e55df7d805d541f1de78ab5ca354ae9488de990128cf77e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01e7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xab0a4266fd18d9af1f3608afae1629fb23146aaf5a5c6b89e06d3a6769702698", - "s": "0x668ad580e9148ba80ffa13d8a1ffac90c23600483361bf215b54c9164f4e28c9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01e8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb2ce8101292f68d0f1bd582f78a8cd8e0d2639c0ae4c7326b90cf8058951a5c2", - "s": "0x2b3179c5fd0141991ee63dfcea2ec57103537d68f0f2b744cbb2840a0194cfc6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01e9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x40ef88ea5230c2defb5617ba034bbc09c65604ce2df28e2dc2851858e4344db2", - "s": "0x46dee52994e7ffc22ad1be938b531e3be1e8f36d4a88c62b3b14abff6bb8d567", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ea", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x878572ff0ab073a59956e9bcd8bb3c4673d532595be4151f7e97978c157c1918", - "s": "0x567603e36639733921b0b5d742a2ada3aafc8b5d6263ddf50f22d6bc2f36c83d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01eb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9b627f0e1f8b0cd1fdbf4058a2bdad78e0c8f88beb8bfb84c3f593c33ccb80a2", - "s": "0x56773c64577a4724fb5c6d1c3a1ce9941365aef6f297a851ccc4e2b3921c3124", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ec", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x80307beb0a52c1f26c6af25c0c40998c959c3fa3a017cbd2d60682410000d3b4", - "s": "0x4cd142ad3fd4de5adf4d6748fe34366a4ec53ebd043b257c7303b8adadfc9824", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ed", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7f61c9a1db3527a152c5e05c219a185d3dbcf823b707871969f4098ee20ccf2c", - "s": "0x42048d7fa46c9e75bf017994e1ab0eff26e546770c7b8fc0dbff784c948b6093", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ee", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3c80256c71dac9bedf87b7e21fd655a6505221b5774e24b2ea9bb05b6f4aef46", - "s": "0x07c0ca4a87c364a0da0401bf0343870358713fb10dcb91a67ba0fa176944d685", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ef", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9476c40d1acc0a6fd2cd29f31583ecfdbdba9cc38ab575cfb8fdcc031e15de88", - "s": "0x1445d81f005aa1a8625ca56d11cde819ec50e1ffdd8125d1df1f0bf888db7735", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01f0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9f05e0d962a501cf88b4be361c03cdfa11908a9cdf023919769bc54f0c2bd5ad", - "s": "0x621c4d632d79b5ca8cc2cf66ed108c2b721eda00ef4312edec4d21714d89b4de", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01f1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x403779ddbe4c20a875389643c53c9ae765fa278d755d18d1b23fad43c1c95c3b", - "s": "0x0656fdf66401b4e489febf7ef6c0bf1f437f04ebe48eb5e92171deebe0329c9f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01f2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x651cc8ef3e8cd38ef35221372e132c01f489033112f42ba7b87ed94329996cb3", - "s": "0x6889900d7891ca9d11582cc9bf5d035f5560fdb4e2d7b86ef0b644835683016c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01f3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc409f64350ea425ece225ddf5f1f971faa767e2abe5c4206f691a538ed1fcbe3", - "s": "0x5e23e3a6f0bf07ec7391fa5f6160a25a22569178014a73dc8979f09a412d2e5c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01f4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x843736747cfa175817b752908488cb94ae55caf95808b0ad8df17fa72ee47ccc", - "s": "0x1e09b2783cfd1561d693320c5357c3f6028efc4556838ebd2d61c63ba39d733f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01f5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x63de63ed85eff68f61007b77e201f193193626d05333a90fa8bd1d1e82af69fd", - "s": "0x1e7753ee7dd6e358b7b1e86e324c2d049127c6430b687ddc5f440158e99f7ccf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01f6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x960e87c545a07ddc9f7d42f546b79a530d2aef05cf77c40f16a9c46e965e3457", - "s": "0x7daa59c34832beb5fd3be19fbf7abc1dbc0e91228bf6e01cab8bf905e5d63109", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01f7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x67a5bd42ce71e6dec5203dc8b2fb61dbbdc4592ea5d1563505ae8be3c2727eaf", - "s": "0x5ada67c90e19152de520e1d8a17777bedb1f5554776dcdea7bbc05b11c690986", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01f8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x68a52cd2f858432c718ff6dd81abcff42c350964f7d9ce286eb0dd9c3d4f414c", - "s": "0x27b116fd4951689fdb8e8c3edbb60c8ae47f091f3694f672defb4de746eb8f26", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01f9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9c3501acda3aee84707a53d909e9d23c87796cd5fa746cd1d74fdd9bbb7b3261", - "s": "0x30c608a5cd91e832e62bdc08d991dbdb7a7a496400137cff5963f42eae0d5c6f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01fa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x29570c47df2f6a97da24b03f2baaf4e4397717e74a7efe3c0a9282b54f6637e2", - "s": "0x67f3cc63d3d3c2af28b27c80ddf3b3b83488ca758907b55be11f97ffde792e88", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01fb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x745f86346c73470c73a6b8b97f605b5f1c98484f737f67ef7153e9cde1d23476", - "s": "0x0d7a8334456c68b83d436fd1b7aa479fac08a8767275be059908682ca0575393", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01fc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9714ad60a27091cd58e12379c326e95de593ef60a7952c7937902270c66a15b3", - "s": "0x03e004ea5585909cbb9f1e5271d07cd596fd8f8936557010e2a3f60930a801b1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01fd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7dbef83eaf6a6441c000305e6c121ade88d429c3689d4064e3623cd412bca185", - "s": "0x75adc0c42fa2f04e8de3c76d4d4fbb1ea916a3630308911aeaa6983f077d9141", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01fe", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x53d4fa8b6f4867dd979fe0601061bebe105838d568a77948e37291d843643a58", - "s": "0x2797c769137ac67abb1d0c2212c5d9614a5b02e462139d771a825181777e6419", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01ff", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x01a16a08c7034ae3906eb19c641ebfed7c505837e312fc2449eeb08c13670d03", - "s": "0x6fcc5e2db346c27802f245bd5d64f02be3d5fb61fece0a218702abb20d2184cf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0200", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4c712968fd0d73beabc3540556a5a817f8caf61201b6a0a8fadb4bd745144437", - "s": "0x21201c71ad1fe4162de4d84502aa58473aac7f4ff7073b2e69ccb71489bed057", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0201", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xad4ccca0d7ad0c8799de7fe093479290dc7004577d23d7da290a2af0df8da339", - "s": "0x5f39dabf48f416a3b1981b9398838a26a4d2d1e9adfc9152bb856c311e7d0748", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0202", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3c4dd198567bac32556c530260060dc29a2a5e72fe3396bc00016460d30e71ed", - "s": "0x220ad27075e5438cf1f697d1231de8e780680b0210696abe9fc1212eaaa701b4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0203", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0b809e8717f94e9a25d271f88fe2872fc23deee420b0055e10f7fce21b2894c8", - "s": "0x0c1b8e17e0ae36ff64b65793ddbcbf3a858adc34dfa45aa60f2e9655109d2501", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0204", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x579768bd9c1be2a5028699f089193fa90bba0b1c63ee1430dd57a5f5ae2e5574", - "s": "0x685f3e8e9201a927bec769cc430804ca180468321f4fcc73cb35e16ae0d5233d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0205", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfd2adcfefe6c71e8d279e7743219f889a2355a0f49a31e5636988740fccf7cbb", - "s": "0x1951dc67a2133cb5e6b60d96577f2ea1af8037c64bc4bb254e6a43d6e3cce0dd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0206", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x52ce49321eb6432a713ac2521f6092dc6ea42a651ae1efabb8f7eaa7e9db174f", - "s": "0x481200197d4cc485384af6dd703764ae21af0ae11e23b04c9e870f0ffb2f811d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0207", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2dcd3bc05efe6f5dc7e9aa1c45a0890b612b9ffa914d2ac8664313022f3a331e", - "s": "0x4fe9f1833100f88cfd791a89d402ffb355aeb1b9e255629e693d8bbae8ba4136", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0208", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x20dcd7c43eb82193ecc63c8f74e522502440a13624050931b1e1c36389b0ccc5", - "s": "0x7c697abf6560cf35eb139292fccaeb8cca0ae8f33a840ef7b11510a340fcbaa0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0209", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdb1f69d43cda1649371436012dad6e111808a0ddf0d610ea652ab824ef0f019b", - "s": "0x7f047f09e3635644d86797ffa31fe5c8a8dbd952da8c0c30b1fb8decb69857d0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x020a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x22e80c634ee709edac7bcbf4063883771fb7e8627b6fe0e6601f318489f5037e", - "s": "0x032c31c542edf9247170a2ccba0d46383c83135705eceff6575c1095661104ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x020b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x95e33cb23d0499aa32c32e18b42763ddd54eae9acea78100c5c187558387e47b", - "s": "0x418acb63b1b7710dbf561af5214a3368b4b00bd3c6fdf0532385bf138941524f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x020c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbbd79605b3fbc951874de7b948ef47e7b1cdfaf0bf412de760c29b028ad38f7e", - "s": "0x2ea4e0e1105b208e07e1b9e610a244b9dbaae689e1017eba438811c8c317a9b1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x020d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf05539ea7bdaa8ae393ad051f6bd53896f2126559079c1747ad67cea7f8a575a", - "s": "0x6e6209d40ccfbcff9405c9a41b0d6e8707249d7680ec0895dc5beb3cd6defa06", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x020e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa0e815d53811a82d2d4ca9bd5a77919bb1c7732fd2e94ffe35e9ba8497c7b35a", - "s": "0x20b949b37705ee223f112f3e9d8df8ae83cd327102ab8c8d5584728795f55a10", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x020f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa8ea06905372418bb739ecc7f8aad4ec497f5e6bf6f8652871a5cb0d0d7bad6f", - "s": "0x0ade044d241250f4a68a02e5b840eb639def87ecaa21eedb7a06a52eeae30870", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0210", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x35016f882b0006aacdcb6ca89bd3ecd53c44404128b598e13ed4478da5b06b12", - "s": "0x78084b4db9f3eaa09ee934fdb7bc857798b8b85a7f22c81ce940f2472d85f97f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0211", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd2b3c66221fb37d05f1acdaec1edb4ea2d842da7d6c976ee7bcce43d2b142a9d", - "s": "0x1b6207cada71964661c67d385d3c5ee923aa94f02f74f847545df68dd1fff91a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0212", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x921c6e58324f9a254ebada1cbc0b78f2298aeef5b64ee6c5d335fa351415b19c", - "s": "0x65b17129527f997d445187e300e12dc9f863c6846ee70f1a6695c56d2abb5fe7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0213", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xefe4f57cb483face4a7c47e673c0d4b4e1f3b9178fb196075f64db339c4f04f6", - "s": "0x7be279f3a39be0f1341d5358ae23712030a86c991196c0365e21637e8bae9e7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0214", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x30aff1fffc65282d38e9735f3741a952337ac932f59623339e59d48c228b674a", - "s": "0x10e8c6c902ea85273cf1f75843171cba5ad24082e60169f851a00b3bda439a1e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0215", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8859733ad102dabe865d44df2505bf1f19d456882d2a27d61d9764fbfdab7e3a", - "s": "0x5772fda185d59ff4c5b57f2a9a1506b21a442ced21cdae6b9d91cc691afd71cf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0216", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x26dbec41d6851dff16c47b2b25e7b68febc6a6532faabd2c5f43e20a73d94bbe", - "s": "0x7b15afe16750cc5323a24dd8cb0ca9f8ea3f9f2092c2322102542d1bdaae5a15", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0217", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x129129f541b783872a67159ae90e1e7bd74dde573b054477fa8365cdb6e18e9a", - "s": "0x6247d9d254ef17a1d6c4cde4e025cc2aaaaeb76b2c4cb89505e2a195868a53af", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0218", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x530ed192fdaed4a6be000a57cb427c3fb84f361cc171a041369ce3ddbcbc8ef3", - "s": "0x56cdba5901fd012b35b5fe6b2e2ceeaae927834ec639d9f5910af835cb80b309", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0219", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x95c5055c45b3beaed815f520d71e64157822f98f050b0644a105d940f0206f02", - "s": "0x22cb53e2e4b711fee54e0985f41dafe04ca7a6a415979c57c8cd3e402b32ef7c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x021a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3db59da6a30bade5634d418936cb2f64458fca5a8df019aca8ac7b085b03539f", - "s": "0x19044e7ad17355aa8c20bc53e0c6d87fb8ce14eafcf2aacf2794856925862815", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x021b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8ac54273a15c9d6892ed661e0896c105f55f84475dde74cf6abc36db3b2b08f2", - "s": "0x5d94f4fda7866b9f0b63356e7816dcb15b79d09d8e96e7f311ce788eb3f1217e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x021c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd776562e5afecabefb4ff3b346ebbaf1f6b7cafa4503cc71fea42e4047fad71d", - "s": "0x46a0c5d57ca7e8356c8520d670d967b55533ab4442c5146e198f8b3f7a586b28", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x021d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xad76ffc4c0d126da6c733f1c56d7a0666a6b95bf0c6c7348bc6f1a2caa46302f", - "s": "0x3b1541b5d09cd8164eb4fea196285c9d247416e2a60bd7bbebc73decc8da0933", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x021e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc843acc66ec76594ed4c3b7f3d8f43f24f760522566d962f8a9d96a7a7e2f4c7", - "s": "0x1a9459b683983097f834909c8213bbf47bdc0975dd0e7c962d36aefdf4147e0a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x021f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9c90a5f5cf61bae6a80a041a317eff85ea0ce8ffdae47dd28078face09e558cf", - "s": "0x263f96a4eae67f901582cdb5e74015300c23b6fe8e036234dc5b0c129cc46715", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0220", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa7db5a0084fc56ad22c4cc34e7e474737d37603c678dafd8bbd6e797175bef2f", - "s": "0x5536b92089b4c1601c4d8d9e986b61e9b002f79c6a5bcf74d7be4f040f500b01", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0221", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x482f5f942bb24e1a90471bee7dd550b1b5b3e7ef3aac3de6603bf082db5c34ed", - "s": "0x342026170229ef588ce4de9050d06d57206e21b50722462f419b570718a3df", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0222", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x25261e1e0172c086cb1eee49ee97ce9fb5af64a5038e98dd07099d3f59e93209", - "s": "0x3215aae832ebce135c3c724c091efc60186f7ac106c1ab41dfe9473eefec1ad5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0223", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe14a7bd174ecf8e536e5f85cec1cc778765752dd6e7a34f387045a5c8008bd4b", - "s": "0x055b48c4f83e4370b0f5825f42607fc700238bce66eb9d06255aec7b6e9b65ac", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0224", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x14949db823ab22b1cc000df12c035b0ee7336260266dfc04a13b3e2a482d5e76", - "s": "0x670b4cc2ed08aff61d9229093a481dd1eb9bd0f74e18d3d5823b135c4318b607", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0225", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2ca2549cd98f75860b9fe15529b9216a72166a7f6c9d1e4ca3ae29d4fa75f746", - "s": "0x245e197ab1e76bb0d4365d5bfc738c46561332a440229cd35b672acbcb3e9008", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0226", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdee0a17890490282a8aa5f7507cbdbe4d702a0a4786fae871158235e2a5c26be", - "s": "0x7ab6e7a5aba582c84ecb51bfe31e5ae2e5aa24f55cdd7898d6330e144b686260", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0227", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x25798513fea402e3a4d01261e708b75920c483edbaf108849f30b0d4c3eb08ba", - "s": "0x1d2fb00fe3cff1d5c5eefe1129541faa1070d086f6b049047c74657500ffe495", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0228", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x399e7eb2679c471b3b6af0896d9e919383186a7a3108d9ac6715f1a1aaedca72", - "s": "0x0a5525a58347e7b0093519a7661ca94f3a3f785a5775d18f6955fb7c2facc736", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0229", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7fb1fec09e9e171bd7dc879b8b46ab529994fe175e6a135baeb8ca5d01101394", - "s": "0x59ecd18a7c246f3897c1837f16a7aba97f8664e93eee1ef5cc907fbbf3005bc7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x022a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x79dedbc77bdebc2ee87126be716f3478dc187ac5fc7bbea7db6702bea916d0f4", - "s": "0x70f4db16f64ee951f459268979738a5ad79a714aadf88f2470d6e3591d9c6577", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x022b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9d6385d54e452aff056f0aaa3b801788d15ee27c61ee2e06686dfaac16c59dfa", - "s": "0x34eca52dbae8216088bc07fae6d64ecda8ee96c8510247e76b57313a1dd0835d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x022c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb8b12045184d551409cbf6d5f3f22a50c5245b885ab7dce8b31c0f0b62b9c65b", - "s": "0x78af3a73b143a2a600a48db7918874a79093ba435c43b570864140dffd2d98c9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x022d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa408fb31756fbc7a48c193d8dabd094d3b55759ad8431d7383221d2cf4f987ca", - "s": "0x6697f96b43f4faa97e1c02dc23ec4400446de184e41064a7e2c9d678496ab10c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x022e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x50d878035bac49eba996d80148bff8eb48f52f2f656ce13628d0d615de017283", - "s": "0x588106522bbfb90cb9783058d1dcc16e6d673c2587ea439bfce9d1e45dadb70d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x022f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc3b9d2625d2463a42a4ebb64190482a690f33f6343f44065a70703e6637d7544", - "s": "0x4c56f90c975c35872d3f350624d4a9a9284fea15c50c52450777111b6f86f5fe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0230", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x14f24982635959e43a06a1ac4d226826a60f84e460eebd150384e2817a088db2", - "s": "0x62d85b8987da52a8f1b94da2f8c505be75ef52ec88b6d1b0801edf94786027ec", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0231", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb3ef9a0b7a18323e08e2f94f444a8503c03cf9708e0ce89a69efc5b874291a2f", - "s": "0x41a6bb9974fea5b124b4217f2bfc32e9e5b2d08f4b15e60b85d00d1d1074e2b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0232", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9b4df6da0b87d099b47313e2aaf6f7027afded84b42abd76afe00b68bd3f37df", - "s": "0x34d977f61242aadc2048f157d4584a82b7b0761bfbdd905bbd96edb30a2e1d42", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0233", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x701d02b18ca81f8ded3cbaa44ca33831906ac7559ab44bf7dd8412f8661f1339", - "s": "0x2dfdb138f7a7715ce09f3154990534dd9ce17ae7d15138336e4d64448ffc34c2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0234", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x53f988af6de7a9afbd6970ada80eaf280c1c351ebcb7e2b6f7674101c536b568", - "s": "0x67616a9b81f9358d2eecd82a766c98a264631ef8045dc997e17b140d0053c11d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0235", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc4e6c52578d4957a3fa191ba32050c730a08d84df4329df04dcc4eb0cba4ede6", - "s": "0x51e0e1c006a7c50b56b519b7c219da07381ed5eb33713a27b5329edf8e0aa966", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0236", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x198fd2a29f70f3bde9d83c7b36ec8298af550a1d7ddb339c72b4923288181284", - "s": "0x23d72eb69251e12de471fac1ee66a6621a566df936d303fafea46198407adb2d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0237", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x51623093d591cce725792f08e976f7a5eabfd13a40f6df628b3424d374f8c3be", - "s": "0x59b24236a7abeafa931800788bdaefef39eabe9b0c59f5712e6c70a32acd629f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0238", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x081d07c216daa06c6a6e9c4ed12d7e03c49251f5e6fff9432a7648cab131f1", - "s": "0x6f011e8f13b99e298c7eb2fd1df1b4812ecf2658013f51f8f9699dafe9720bdf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0239", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcea589ed1c5f7547a4537d6ce363aaede1ee16412bd2f87b45a6bb3dce242716", - "s": "0x506b7a55c9eb8a811c43e5c2fd427da50f87b4c90bc26266336daace506a7a6b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x023a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfe75b06e480aff615d7738258b72f98fc7e28f8e2f13c4c8a8900869ab5242ed", - "s": "0x3ee55239cf68ea3a9b62daac50307fc3f45e3a233dbd8ae0da30e4edb85b7c01", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x023b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6a46cd0bf6bdd224ca2b4fceb1af612c137672df8f197ea380b3492635b2a41c", - "s": "0x707aef193dafe55bdb6f54fc5d5e9b5f70b7db0b729304e2f93ae2e2880ea86a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x023c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xafd6e8cf6784b31ce0d1b8e61f4adcc83c308eee2f34a738db0cc5cc2362ed4d", - "s": "0x4507e6b3300cfb4a84149512f6a4bfe9142169506521e6fbdc2095a35f1bca5f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x023d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcded5f16dde9f18d4cf07a189f7c95fcb7e44a6656f8516b17c98c1e9dfad597", - "s": "0x7afb377b629de89d56d5d2b550e95f37efe267be000226ad100ab6bb728ce703", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x023e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x05ab7b6c5d7ced4b0ab32039b2ac44d031e02afbc5c9df8bf138ec5729f11128", - "s": "0x032a53b49d5a52c59f82137e7a0a210dc59846f168671a9e5ce6f267ab8a48b2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x023f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x40999d56399835b4875a5201581a3958f6d341adcd147c000332766b90bcad00", - "s": "0x6364742dcf9d3caa5624a2f2b49cd6e90d3c2ef099442e06d1f1b8bc09ef8e2e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0240", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa3ee2b94f16c4d2d0a84322b6121b0a77ea03fbd98f111d2076015a0754aa1e0", - "s": "0x1f7dd5a5f11b78a6679e5d5949648b5c68c3daf5f6b18230cea4f231997a58de", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0241", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x34f4cf5c22c94f87424c0545b90c373ea2fad8dd08e8217ef4908b2fdfca079d", - "s": "0x2a20213a770748a6a6ca1cabda7d77fd018ffce408ffc160ac0150b7de700150", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0242", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdc890fc31231f0ec57aee6472061d78248b9d84dba545a442a445c1626ce5dc4", - "s": "0x40d582ca077a412138612a7c717500652332b27387f5e352eb2f9c69b971a4aa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0243", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7ef248b4a2a6166456312a3e4294dcffc90a5fda830ae1026a1fc528395a746b", - "s": "0x1d9b645445b86d447e8956e0fa33cc232f872c2290e62c7af29cfc684e08f2f4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0244", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcfc8bf2658e996045ae3ba4b9787ec1246cd1189953432d368b220dd75a2d0c1", - "s": "0x19976f8d7ba43956f933fb4c19a4dbe61a5a7716feb909a6979c7a4c4b9276de", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0245", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb857332c472610bdce6f4b75f77ee9083534e9b49f339dcc11c55c5b6ae70e30", - "s": "0x75dc421c3a8315f280c68380abed0966fd34c641526b49f34ec82764936c6e03", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0246", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x637c2a0ae06934a733fccf6a22c64606d90dd5fd56003c0a32b362ccb1d863dc", - "s": "0x7788389227308264dd7c8081150de551c1ca4318248e6b49c958a05045ae7a0f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0247", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x02e2d2533c109d2986431d544006b2f9cb49d732eb6241d2f4c5915852a100a9", - "s": "0x092d31ba26113245c355e038c2afdd11597b8b981f2c87d994cf41be53d65dff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0248", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2b5ea26df2332f750bc86458e6c69a8f4937b0459fb226343d0ea54af23fb3ce", - "s": "0x271b9ff945e187dc08ba3298fe53a91f4ee79f7778dc50689e721ad9251fe5a5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0249", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6d4b720c9139aba5fadf415157ba0b8f8707b1339301eae4d56906f3892f3294", - "s": "0x3b7e5b451e0ebac619ac5558445996a8e31ef8702b1ada88a6c75d7dce48d882", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x024a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x036326aff562171685d59fee804104cf491d510b792c5a25743953e82b491e72", - "s": "0x7fe5ed89813db17702e7e44611ae2e1cf30ee5e512a166205bdc07df95238d5c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x024b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7ec6fb2fbe35aff9574050693e9a0569dfe40c3b884896c107f1e65fc50ba1dd", - "s": "0x149691d73831084a5de790282197f1f90702383156f829367cd01b33a1fb5418", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x024c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0514eb0d58fb1496931e1a3068c34d52a34f15764165c6e66c1930c1e3c79a68", - "s": "0x05b3359a430f639b94b11f370e42f1dbc9a93e21e738a935c4ad3e8aff720e45", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x024d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa8077cd66c95413a27da58611086a9193f44c1aedaa513d2a4859895b40dfadc", - "s": "0x72e24743ee1d10ac472faf274d688f41e2e5795caf39f788b051a81863de5926", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x024e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6d7099e8ed16dd59c528de5af37e9c4b9bb11d1ad76929d27d97aa09ea4c6be3", - "s": "0x4b5402cc1e35592cd976df1a4e1799ce18bad45104acf6938d54fed68e5a4b53", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x024f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4b2de8017b111adbef2850fd2eb60e84362cf44ed8b00ba9a2edb65172d19e73", - "s": "0x60f500b15e6dc5103ce64fc719f1990b875171c0f4a708c5ab724ffda4284453", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0250", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x32aff2da0dfef1fac485f40f18e72ece820c39b3a15a83bf5f37d6799b33fa35", - "s": "0x0ae9831702063ce30dd90abd1bc85d19828e0a5476f9adfd6947d2b1c6f8a8ea", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0251", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb0dd08012b480e8953be77aae6db9ba2645ba7473f46b092545abc9843f11aa0", - "s": "0x3bd88d9d66abd35eb945f5652ae50f2ea9d1be637a73929b1d5eb157fb29d53b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0252", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x266dcd211a3e7af9d29659ddb88ba739d9a92ff1fd692d653fafa3b87cbc3d1d", - "s": "0x36f08ddf662d3949c7aa63b21ec41f08f31540fb67941c8cc4dcc83ed3820128", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0253", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd48d7f610b540c25bda8753a1b2259c7abf2011ae7d67b36b66b9b2ce25a66e3", - "s": "0x688ba5228e1d1758883d7bc89af99bb726cb4e34e375909e4e3a339b9bf87d66", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0254", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x40bb44db15b53cd849a80be0da896cb12ddda457e7fb7de22be59d7de968efa6", - "s": "0x2913c32692a92ebde775252eb5c678bfc5a105248100a46726a7229d90702a08", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0255", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf4a200e60e19261c28412e5b815ec8b2e0614e4efe49892b16ab38700573b050", - "s": "0x4d0640556dbe2850bb9d1474d23f748973b678bbfb9774282ccee11c09a21252", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0256", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x46042bf9f8e623a917d8c6cf6970f43074b17eac0f34b835c16714b3d061e275", - "s": "0x73b05adc5c4e1bce54dd6ce3261eac7f7641dd94dbc689e1dbd8838dd173ab5d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0257", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x13bdbc641d4271411d3e319394fa5293c0cb3a1a8248b149523cb388eb8ff31f", - "s": "0x6ce925b3a7de132a4f639e4bfdd817a66462693b4fd540cd0f63b34d98e5971d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0258", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x48286fde3d43c13a40af84bdaff9773587922f8a75cbeeb9ed2b888a4c5525ad", - "s": "0x185553553d1a9ca12b309ecac410af788ec5aaed220be8aee04fbae4b79416d1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0259", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb4e6a59c829fb68cf7128fa0488ee2251f5ed9fef2fdde856082010558261305", - "s": "0x590e87fce5723f5303690abed0b47f0ef55ed757e669156257336964558d4b06", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x025a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeb541b8eacef68be7ae979e7ea99223725d58965339ff60cfb6c2ad6cb5fed4c", - "s": "0x7dd473bd0690fa425d8f8bed60d58f8db605c286eb8068748198ae56df3e8ad5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x025b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcbfa885c1ba3b04f06e9e3df56f528a8518e9e4424536e88f085eae4a8a46046", - "s": "0x25893f9c690590fa0df9cf6c161ddcb4dfc24daac0d3f7196b7ab05931505e62", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x025c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x43e22cca7759f399a18bcda9ba6e28b085aac422591530bcea3f13d48ccdc6b6", - "s": "0x4cf31d47839b65c8372a3405e41fe7cb3de8226e205ad06d23719a0cf5181219", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x025d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x075d01eec8bd179bba521986ad674f1b410f2eaf0ad59e4b68cd0880c9b17803", - "s": "0x46c7116fceecc4b1783d5b3901d05fab00ea0014ba49cc85b96ad2b3b3af0dff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x025e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdc6a264f11fe085bd07a543d5ceaeafdd17652bdbab9530b5aa0981befc464a0", - "s": "0x7293728f88a881b4e2a6ff0b94f7747e277d864410b05972ab97dc7b53d8e95a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x025f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xeee2bf43e998e5bd21b0131b44c2bf6fd54648969ea6979ccf1e9580ed3994da", - "s": "0x7053de4906a5dd910273c3321e84d77a04facde63fd7c16d5634542423718278", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0260", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x847b6f5a92f3464691dfe17983a1e5165e210c72767aa8021b5c9e0ffc3a8b07", - "s": "0x163e9f376d906b9db49e2f3f43d5975b7e0f1c9e2ce6d30a16c57512368546a4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0261", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcba0cd5b68414c29c71d785567e6ec7f4d2b006c691f2c7279f7c263c7f2db29", - "s": "0x60fd91883a3903d5dbd4e9b9b113c3fbd89d99b9a59a8ab49f1d9e8709dde2a8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0262", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa19c0739d2e9ba0226c7674c3baf3e1164acac497fbb27491ac2c4be8fe9daa4", - "s": "0x7d755182f1b179625aefa9df43566df168ecbb1b7cbc0ebd3a145878276946ba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0263", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5ba26afbb599b4781d6cce34c1de60afcf8e4c8ce542355469a3ab50b83ed3ac", - "s": "0x2bc5bbe5f4913aaf83085005567afea14a7e79d887ab5577205dc6ff2747e1d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0264", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5494ff8e5aefc8adc798c012b4948fcb6c24aee382cca9ef32d311201597a6ff", - "s": "0x0b97ad7399ae46db835c122df6e6f660b333cb16318931018f48179f7265a69e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0265", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6a184e038374d0da312e0bb4fe03ad6b688970e551783388f8ac61bf6c81778b", - "s": "0x144a78902e0eac4e7eba11a1a8c8abfd92358741389ec0f9f83600d439eae653", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0266", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb7e11cfcb24b2a1285b061b6f8ff90fb75a04a10d74f2915f58922f01baa0cc2", - "s": "0x5642903bfa15ce6c7955c28cfbca823dd30415661647d6f34e87b63192acbebe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0267", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x35b30b04a6432c57ac64aeaabc117bdf34c166a3aed2b6d69621728af611e711", - "s": "0x0fb070edc532c6616eb31bd943af6bd74124d48c1690800f1173ebd676f656d3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0268", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa0a0f16741dd2fa8aae7708ee9b7ee9b53c6efd11c6498c232bad0210c887f1f", - "s": "0x3e33c81d8873c3b36c4b66e987699bbbf07f25668e0a04967c6d64867b71d80b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0269", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x40533f3185e6a2f5482fa1bb08e8087ef6e07dc5d5804e5bee4dd25c998a332e", - "s": "0x0c3e8378d174f4bfbf5196222d71b8cb4277e91c365a98d60f9cdb4c11fa5dff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x026a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xabcfe2b1afd585c429ab2287023ac5ee643f21d267a54cbebdd71164d8aa34d6", - "s": "0x1b6bffd5fd5c17e0eb9e6160ca4dd2b8e9e082d1e6ad47d5381c24a072548ed8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x026b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf17add457d9d79ea9a294da4ccd6aefbdc9cd69d578473925dd652702f6c7650", - "s": "0x779dbe12d256836215c46db3fce8eea62917f296e4fa31711c4ad1a9a7bf64bb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x026c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x12d8e99628d370bfdc2d6aac0c55c5fbb50876976610f62ecc63c3abe3ddc2ec", - "s": "0x405753bddb4bf7fc61bd7d58499a7b78c1dc52dc20699043bb5a44e7931b13a3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x026d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc78a37deb538ea264539d3128b7889224eb442f023196ee408a4710b9eb37426", - "s": "0x4617a2f65e1711c88d3fc05dac225928b53772d72cc449fbce076d566e77448c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x026e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb9147aceb6b008e59957426b2754f9221a7a8d5065157ea445773f31026af877", - "s": "0x48cc2c8e824a906e75bc2e35d612c06c1e1375cf96627aeb8b7611bf61c1ebbd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x026f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x457fa371cbc81bc41a42f33f39e0fc1b3f5fe2ab4811e8b77c103e21c52e42e7", - "s": "0x1bb3a86519749b0e67b4b97454e9ce835f5e1330a29fb6bcf06937a1233141c0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0270", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x836515c53f7ade4e81c9c7e8f003c64b32d2ce65d231368494d10ba5d718c203", - "s": "0x5bb6381a92a071962d1803827a00496336e1504206d83093f09f17be688d9d84", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0271", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x60f4ace7d970e732790cbb07c04431d913dd28d76caac40be7527676f8bada4c", - "s": "0x74a693e4fd1a2c1694b26908eb0256ff913315f0c9d435eb6269a693e8169d1e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0272", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa2f1ccd6cb4912e2b20a04ae123b2fc897c931abe63ee522b5e065a59cc1f9c9", - "s": "0x508ecf015dd66ca6f6dee817a80fb937271a2b84f6b9e6b2c074185a26ef1c6b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0273", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xac1f7e1b7afce10d7b7451baf40b34d44089a260747489c0ebfcfd5d41941d0c", - "s": "0x3bb4adc0c8c687da1273af53207b2185a6cbe178a0f4811eac850fbfd591081b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0274", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd484c33c4425fe087fdb5671706528bf008fc72536c34cd1da13cec61edc3c3f", - "s": "0x09de8b72f0a5da06d8f89e5cf26480cdb8bd56535fa09ebfd13e1acfc7302ec1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0275", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcd521606fc7388f2905a02d9d8f4881ede29658ca3d3b87d2ea75a2dbbe02028", - "s": "0x032525c1d6c9e0b7ca038dd816a9d503db9c54b573ae81499d9cf2b17f9875c2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0276", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdfffc0de08224fb1de7366a377b6bf6ff770eda5193904a15757f9e5d3a78ecf", - "s": "0x097eeb9888977f65a4a2e673e123844c6486072090ca16f33e370941885801d7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0277", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdf3fbc45457ff895cd0ab847f154c9459cf8bfbe48f3efa3fb18f4c8583ea217", - "s": "0x1fbbe3a5b138b4654d6a77da453fb8f851e5feb3da9463e4edfbe9fca5403584", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0278", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x30c90a2ea55b466cf3f4c91efa461d445190a2b55881572572773914a594555f", - "s": "0x06f7f279fc54414d95e0479bc1cff769b67c2fb4c810d65a42b2fb427031ed94", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0279", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa87d13a391893dac13cdba7fcb545e1dd899ddf3d9faad2abb53257ed589a1c4", - "s": "0x062a16ec0de8f40e72fc96859b3cb74543b27ef03804d4d80a4c57afe0228c40", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x027a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x37915dc0583aa9d5b9f580bc75eaf877e632c8a908c31530d46679a8633354f3", - "s": "0x0f61fc9cb41cfbbab5402d2faaac180b57fc1fcd7a3ece902d4041b5bf5c18c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x027b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x38d8b2c171d8723862a05de486569e24d6365a4c1cfe7ad2dd9e7b9fdc447d56", - "s": "0x57efa2dceb2256ea22f963361a7fc43a381d0552e41ab51ff7e3a405341275f9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x027c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe2b445b107c686d09cdbcd01bb16b8d9b1913a6c7ee33a086b8c0f9fe73b4bbf", - "s": "0x77d337a88eee95386f2b1f8b087a8f320ceb2fc6a6789ad30cb183833e9a7d5a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x027d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc3942f4ef4e801f4f95c3b816986836d71e98e71e281b66eeb483404ecc56e6d", - "s": "0x3b05bf49f633b2ca3f856877e33e31cdcc27d095b65b22ca4663579e9247ea06", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x027e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7c2d611a0abfb9518bb198d9db7ef9be2d7d9cf98be52ca1347802c0d2e996ae", - "s": "0x37826c7c37d4f5087263bcc6a945c6b118b1926703c4899c8e528e164f8e7cff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x027f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x742683f5317524169368be5e995f35311448627ae80398e174c60c117230ae3c", - "s": "0x6ecb6943549659baf22d08dfa5ee07bc8ef2719522c57ef78fc1ced22f05d2cb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0280", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9c0a4c01a8219409eb9e494f9aa5481f13326880a88b97ef8983c3bc239865e5", - "s": "0x039e59b7f7b23eb59191d008140fb07a7ae487b45f7754592afb08b7f836da95", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0281", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa46a15fd6aaf09081c1b0a42c6dee9f9734d54e87054adb1e7daf68903e2d2b7", - "s": "0x3318671bbb82fc0f674e831222e8af52687cbb7d0820860d6e3b6e2b82d0c6c4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0282", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x751ae0d91d299e6690a33eb07391c65371267af93c5c42729c0e0f4b490773ba", - "s": "0x2945e471a7723539ab8aa02f9964c7062deb75626aed56fd8d1d859bf0c5e0bd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0283", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x799f2b5b532d3ed7e4e80afbd7ba922cc547cb49007cf9d5a607d91636e8963b", - "s": "0x4f389c07b1815ac2e9375820ce30e778dab4cec4cca5a21d4ee1ecd77d9b34a5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0284", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcab698ba7a009245ffc6b500fde17b9695a2759b2e935f68cc8481d5cd2801c3", - "s": "0x37da1c448e0829dfc8339a5dff27b53be32054249e9e143db23dc4b2994f0d56", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0285", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf2c684f632df07d60d563651713b50fe1284b2cadb5955999f27a904e1e44c76", - "s": "0x3b9d303ab4142376dc8761c5a4b9b7f67c1986ee4337f10386a5167c06ee011e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0286", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf5fe7461870ee3c2133d10763a23d1cc55744d9e52ecf6962134beed7328719e", - "s": "0x361a52a788b5ad473be6516bb67ab0df86c8556e4d007802c279557b347bdf90", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0287", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7915719c73872884374922c286efd6109f4210f9b860c91c440f9e0354c9acce", - "s": "0x7d5d33726b52b237d83d19f8447cbd298fe7472c795f0309417bd893c4596e51", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0288", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfb9e1bd91188eb52f898bc80759b1ad67b9165839e387d50da8754a9970883b3", - "s": "0x542cfda7575ed79d0bb5c04b32218a334aeb32584096292c4242c5cd7485ddae", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0289", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x088264b302493e5ad50f0a8407a5842a23647b7c0239bf5b8ec4b1666475e02d", - "s": "0x1029064d2c67437caa6dce3540863ed9e3c0beb75f6099b00e9031a99a624d53", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x028a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6de7761fb19c7df8975f3befc3677b93fff2d16669aa0e92d023c7aa2d908ca1", - "s": "0x116f5ad2c4218731b5f60db1f1e457ff781765dadab1e620064444fff5963dd1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x028b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x29584ec499c83f7c380f4d42ab3c854fd882cb3e3dae5fee2eea005fea348f8d", - "s": "0x1e88e6e6c6b3335ead7a579f7c6074a490a304b6cde43bffc908c6ab43534d6b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x028c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8420061a8480b74895dd0649ff15214c6aafd6cf3f07a950ea0e05bd6085ce01", - "s": "0x0aa8f33fe8bb64908f927e92acc8d386f4332aba9c57606895d4977c219e60b8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x028d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf537d169d62619a37ab04525b5f5e96c063aa71b3b24934ba29ffad41e23012c", - "s": "0x1cee0da99e0a6dc39a862d7e331446367de8c36e4c43098d66b230b818f0f8dd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x028e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x453d3fff3972d366b6cd94bd14fdca3e233f8a8156d26474dcd9b22e256b1dd5", - "s": "0x3fc2cce14d97331773f963e81b0f74a19ff7dbec055373e93e0c528c8eda1f98", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x028f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4ddf6d1d76f2ac1841f944ef0a88f259067b6c67348c1b7743b419037f2bb836", - "s": "0x558c30f5a959d17afc7187b43c61b45f2e826b5f72b36e06bc3db91da817a2e2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0290", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x218495bec550a2b0ce615651039e7eab4200ae63b2dbd02f308e688ead163488", - "s": "0x67470292730a807cb2b3b7b82b5288e135f2fdc6539e7738478aa8ff73cca0d6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0291", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbe93b7eda235e85166745f0d0c536b0176413832284ae33481baf713be8e6ea6", - "s": "0x6d93bf20408395f8b2ffe06b13062780e1c4a31deed9cd4c915b4c3011f1f0cb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0292", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf7c8b865d5ac8cd738c5b530453a2aa3167c9f99f430eef8fc261a91b5dd0460", - "s": "0x529e6458d9cd71849b7afc0e1c197365727d1f7dbaec47ec3a2dae61edfbe024", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0293", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9a990c5edf8fac8f4b70a836f453b80d9bf0a4d9796c3d51860180923e050261", - "s": "0x3ae0a0df319a5863dc86ac1d32e2d3b20ca2d2c35ca5750cd220213192ef82ea", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0294", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcff5d5c6d740ed1162870a81672af8afd70815bf58ad5a4d79aa6b9a709436d1", - "s": "0x53e2231f5f86252a6b0e8a86246ae5775150c656919b12000eefa43cc6c8e101", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0295", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6925eacd050543612e037a4869643d6264824e40c4b8d2b6fc55d9941996ccab", - "s": "0x52cf9c3675991cfdf4f1fcfba17ddcf4c123a2af92507d7f78bf4b1234c77948", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0296", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa09b09ff8509083483b8fce71a2a1593462140f8812bb7a0949f3563a850b249", - "s": "0x288341aecb90d8699a5deb1753d304fa829b40455d9aa461a2204011a54d7805", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0297", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd04fb9af6eaa7c3d9cd96e4032298d4721cecba9e1c9aa1beec5cae9a839256c", - "s": "0x4ce9ab38debc5476e9682f17f1d5c28c022b6c3b69866dae461479fb51e12d4d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0298", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8e5571ed4341e7c43bc2dd61bf72b4e4906126d40b913074bea9f70442c4d73d", - "s": "0x5e40210db2d8e319e43f3d5b86467e7b3c2282bedc7a5b3d2040c8687c043998", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0299", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8f7ae6739ce9d7df2c873203a8eb2f4806ce31802ba214c6a846c1f2a4f3d000", - "s": "0x5ecff5832e6da2f31576f1812dcfd311bc4ad536cf736f90c519be6373ba7641", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x029a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0bdcba32761b0d3df8b69327dfadc8df0740bd85664732b1128cc8dd4ed6e609", - "s": "0x7c7005ec6c84af35dcddd417d38c468a8fc6634224dbc2b0dbb450a561537e65", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x029b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x18abf6de8f7e64e73841e87612ac4851a20eb5be30f8f420a0a8935eade82a4c", - "s": "0x544e60b1089526b95e43f645aaefa3358331c220fbfa741f62468032ce8e9a3b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x029c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb470233fb1b05fd736d12675bd826fd689e55eaee1893095b34d75e53e969d77", - "s": "0x2cd24e1d5106b9a07466f378611b86af751ce04515e2bb90a3752296460af70a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x029d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd2def137b20679ed06970c0d26df97556912aae847608eb852e7423bb83a6f54", - "s": "0x599196c792120e227bba614b10557cb7a5e32535c18156e40a5a38ee54f57c1d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x029e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x583768dce3933d0d1ddf8492f8ed7ec95b2f7d4970d58f9c934402d382b50db8", - "s": "0x74a265b45d5f8d33b2709cebb82bfacea37a04746e60fb3751cd29e7057d2ada", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x029f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x49641c3c4e430485ffc658f766acddd7646d8d3fb88d2e24dfa182217b77d53d", - "s": "0x45a0882e66bd69ede398566a8e379b372d9e2afeafcc9bc935c5365df6b5d650", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02a0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf9e19a6a6f5a8c48180fd2d781888ecba0c3bb2f49d2fc24c6bfdf917264fcb6", - "s": "0x3881d1ca7250a48c0662d8dde8ec61beb2121b519a43cfad9683b5375a9d9d55", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02a1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x57da74c2fe6b1a9406b278ef16d3fd2048cafc7e3922ade27f31db58a9d1301f", - "s": "0x1d7d64f0aaa3c300e7cdf018098427866edbdd374820e4c0b1ca91efaf8aa4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02a2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa1218f5dd9a298e07b371988801a96c42b5d30b7a1cb040c6124113f75ed7acf", - "s": "0x49488125da78d69f38283295e7c23eda5c8f9bd68736ac9b1cbe5bf54a47071b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02a3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x70f676ecc4e80eb7201615183aad4a891f417bf727d09042f6b33e47fc56560a", - "s": "0x2434f6fa6c57bfcf2709893a1cb7632c7c653f6aed3da68053b195a58c676260", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02a4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4c0d30edf61aa1d8cf22aacd7d187ee436bfd21f86b2a4db0b039fa2d83b1923", - "s": "0x134c29f21a3e7b04631591f3da7d7331ae4213891232e5b060e64623dac65a06", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02a5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf7d53859afa64b85772a0158bc4db08d417881f4320d14ba7136b85e77ed75d7", - "s": "0x069a954c0dd53d86be579f7a3f28ad6ef6f1cb42297db50cb95085878bb01dfe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02a6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf93af5b1e4eeee4d648573550eb135cfafc7fc099c9cc1f9e5d6c090ca0b0d35", - "s": "0x73bd70b8bf2a951f0c4c1a4018e955231950de89a6289f5b160add334cc95cd1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02a7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x989e480d04c0791c82dde5b5ce17a5df965a10b289a1133edb02730012390e6b", - "s": "0x466dbe50d54d1c7baef6a1fa276b96f2740a045ce2d9b08c2ed35024e1b8e55b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02a8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2a3fe0b4dce5b1a8f86e01742151ab5787e717be7c0bb5ccdbd79f3dcb59ced8", - "s": "0x2bc8f36242797a1e29152087a13f306870f60cd24fdb8a57ce93529e9721ad8e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02a9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe4c297e4ba3fbc04c86c137ead1814d11f37e72cd08e124526c9b46ecc5d4c3e", - "s": "0x193f6e05663643aecf7a79b4501dc672ee5ac0087d223565bb028985e152b5ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02aa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6c5eeac1984eaa94dc49c22051d9e5c494063feb10f00dee4447f5fa932199d0", - "s": "0x555bda3cfb7316b57e0846951ce083402cd25703132914da5c4b4f6e62b6f570", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ab", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0236828cfdc0eb4da0e3deb46c213cf4d4522acd217f5e7095f00839aec3fa0f", - "s": "0x1f83a8ab17b62fc08f1bfefb30fc28bea9611f2eb4ecd9bb76f56329a5052684", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ac", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x46994e76b10603a4afae08b633fffb9617800fb4166b43580507b87c32468581", - "s": "0x752f335330cf9405ef5ba4db1fc44563c5ad8508c5ec4929d7e313093036e593", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ad", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x729ea9681de70ac8b94d168acdefe8847e6cf8c883ec9a39858937b630894449", - "s": "0x7eae229a21cc470a57765965262a0a0c19605f221aab4c1c85ead66e823c5234", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ae", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x72470007204531e7ff24b97d1cf94bea41b21af1eeb3855d61bc8e71a9955de4", - "s": "0x60650f5a7796c68abea471bbf85163b4f792a89543fd8273ba92b7cd070eaff6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02af", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x646b2cdeaf857ae9ccc7a922521ff5b4f4eed403d62f29a23de1c2bef486e511", - "s": "0x11bce5c3815cd506b10bfd4b17f11c92204763dfab554ecc0b19b396c0a47f69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02b0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9a009e8f3dbdf759867164a83e3f2071e9e7fb023675af2777f9f4a2b6b536dd", - "s": "0x7263b0ea53dad073f3204f8e8ebc4895f52c26dd8790c5036d6ff39eea1320c0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02b1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa24e18c2cc4f3b57df8d5e1655bb1cd7d53dec4fd15ac558f14b23f548aa66f0", - "s": "0x5203ae0f68dec98ce5b12814b2c7d7d96dfad5e02ebe8ef30c25cc9da33cc63d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02b2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x642ec2a76972272ae21a4a83fc81b9153f9e08da825221a7ca034cc69f196990", - "s": "0x55630142fd3f242e281e937ce12d797922a91bed23c876990238668d8db14715", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02b3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x733eef98b99bdf184f4124030a2d1b48b296bfb493d204853fba90bdd44d51c6", - "s": "0x057abbb49449be076c076c5b05324e0dfa45953818525c0969888e379c5ef2de", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02b4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x15eed1f055753b548eab60efc569ba3db5d63254f2cd23a37c25596d96a62f48", - "s": "0x546c8ce6d0051c94a52c3e115b9dfc6890eaa205d042c8b4a738c1159fd85f8b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02b5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xca58e97d6c42233451d58dc6d32c45ede6fdff333a33e0dd3e64795d5d614d9d", - "s": "0x6a077ea9b4f957c65da140d30c177234ee8c7a5b88288ca7395ad8d4b7a6afbb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02b6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0550201cdddc79912f5be32ca9e477a0a213d08732e13f6bcec6f6edd9e4519b", - "s": "0x4264833beb92b994361d6d5f758ee869513cb0b10f44ff2f908c0debb7892de8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02b7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe79b61d9ce001cfd1c46ea3f009b43f43950e81fc639f2a73cb8e36946f43150", - "s": "0x4d7098b903f081d130073eeb4498fe95f9382f8cd652f1422278682946d68642", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02b8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5ec22c52419e01fe8c7ef8ac6f3f461a2cf5dff4bda9c07e5a8128c8f9f49f02", - "s": "0x6ec907ce14620886d49df8490779ba7b753204c68f1d334bdf39a618ccea045d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02b9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8b0a2d6bb604bb19a98dbb4ca016d2bad1f861b7ab9343bfef7da1108847c8d7", - "s": "0x11f4bbf6ef971883691ffa39bdccc97557fd10352e7a54fe932e18b7e630969a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ba", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc2416ff970aada1ed3e85f1dbfa5804006ba3834857b47e99306c4863195c544", - "s": "0x5b494456007f73940be947d85b98eedfbb64c670a1742e3bb73f40d93dccb251", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02bb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd47ebd1fbb71c224a2cdaa269b4df4a219ace58742c2660739e1b7d6fa06488a", - "s": "0x335834d7868efe5d911e651a35ff3f926eb3861ab6b8c94f07c1f47e6d41d815", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02bc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9cec329097de55d639a171c034058d73c4522a2deae04d43cf815040614030ec", - "s": "0x699c54193ed142f072604237a2aa78fc7c91ce88de63f963e37660bde42ff30b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02bd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x72e0b412e2466734213fcfd28d6add92e962632ff9c8fba07c66065d74804910", - "s": "0x6d1e8ae8dd40e148ad4f2b152221aa1c7d4b25ef2a4e79e58aec49151f9c1fed", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02be", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7932162c0e9627e7f9fd24b25ba18810749bc4e704b18a0ec556d4a900fb122d", - "s": "0x228774ef654c281eb07288a503601ecfd5a552126709b0363b61831320763e57", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02bf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x608fe845144b8d2dbfc48c36681a5480d3676aac8e9afdccbc86de191ddc52ee", - "s": "0x6eed04fe73317107f74718f088bf81164aa85721c380eb86eef865e240505260", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02c0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdea15456db71d8ed630d047028ed438b83bf2ff84c4aabfbd65867c1547cd1d1", - "s": "0x63bebe4a3ecd6f244b3a082c17a6212cb2146b6cd1a74f19d73b28d43b1fabf2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02c1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x57d5cb40262e75a3611ed471d62013ee308a18dac2ae6cb753ad4ca140be7449", - "s": "0x34d015491e4cdca74e5f78a9c7d500f9b9938292933d8d2bcc4cb23d70369cca", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02c2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x517df2ee20ec386a67a5d5f593199db219fecd19d38d697835cb0ebffdd8e57d", - "s": "0x7bbf4f14d8b6a3e5aa44afc1ce01408b2e577507494cba40c45790ae9fd53f24", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02c3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb864001b2565f232a85f6a73af08e2eeb28bc8f0715acce2f459141c974768ed", - "s": "0x3b0d8d1b9f97d78cf19632c69ceeefc794937d0d9fbb553e5333f271657708f9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02c4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5f2fcf354c7dea49f2f5df2be271f361b31750c0cf243d387511580d0f61ad7d", - "s": "0x08556976fe5edaf31f488a3a65db75bfa0edef616b8259e9aa3b479761a0d2bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02c5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb55ac55e7aa7f5d40a456d42293405023375d9030d63b601f819d2d24e941064", - "s": "0x50708806d4d971ab8dad647fc821bdd9366c88f079639fd07302323956431472", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02c6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x31711a7f479ae5b5f83b8aedfab649360c51a08884b43e1d514e988dae1bff94", - "s": "0x3dce9dbbabd0492614e6a8cbe65536eb30cc08fe63239d8e18fccc41570c2d75", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02c7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6a5d775e776c02851abed5ca582e42446697a7a4fefbc6666fefef055419f8f4", - "s": "0x5f34ed9d0dee0538bc81c20e07143e1e6ac142f195f961f4df51868230ed7b13", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02c8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9705fc20ca255f9b037ca495c4729e98bab994871844a28b9a2d0066cd7b7995", - "s": "0x5aed8e62435a8b03a0e95188f98ab84b56bccf6c8a9664cd260a3c520859ac33", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02c9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3a9dd306cf8d00c0c047ad039e92c791425b5ef9f5b38f7cb2649eb2142431e9", - "s": "0x6486e9970d10cb9bb5ef5584570df9217ab8619bd162d177e366c702fa8bb2b1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ca", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa3d4c9bdbd6deb5589a38a839536c30624c2fdae224acd5697a48de76131c8a8", - "s": "0x7ea5e54c382413322ff8160596b1048e3e55143a6ee90540526965760e506564", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02cb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1b3861bc0d0a8ad4e3ddefa0c5a71d8e27d8acf2402060d36c54890d69faffd5", - "s": "0x6f6c0779431d575e16755113c5923942e010eb67a3598b44e888eb03d74d92a0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02cc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfa2f22c66f136b174d1d1251c0d79f85b862651cdf99cf9e975f11faf25946fb", - "s": "0x614038381daaf89ef53740b731a3435a3e3ed202d1c43082c90bc02ed49086ed", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02cd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x56991ff282741591cf4a491cb2e11185ae27911aeed45b00906085d3fe59b97b", - "s": "0x49f3c7f039aac5b105a143985055002df66977d95fccaa0696b3ab00cf5c8b04", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ce", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb54475d98c5ddade5f49fd2cc82ec8643838456463d25437433b9dc51a464152", - "s": "0x5cf7a5b64a597459a543f337c2fd93bf699d993085404a22d9619fe8bb2de400", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02cf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8107287a10744686aa374a120749d098dfcd1c3cba97bca20a2e6225364c14e9", - "s": "0x29eac5e64e7083fc1b106a6873cb4e4d3d3d6a5183f6491614fc839ee2f721a9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02d0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb2520c1d84ed055e621a2255c1012abb6da4c609d8ced742ac0b7c9902c86ae7", - "s": "0x30d29e717788d0549366fe6853ab56d427273a24a546fe12cc2173508e8b096d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02d1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd9359f63f7c4d9770bc9ecfc709c45b1406996a1fafbe04a30d2ea09d8685943", - "s": "0x6fd81ce89dc28d9b17ab8b564d4310fb380a758a423cc93cae0226cec8ee4a38", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02d2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcf5657c6d0af7c6673ce7127cf7e2ae47e82e8ebfc30eff0b63ef0e832aa1e23", - "s": "0x4f17c293a4f7bda9c86fd8959487bb0ce5abb930c8f5518c057ef538f54d7ac1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02d3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x47c121ada1836b60aa96b3ddbeeb708869f685103f2bf1ac8645420384c12159", - "s": "0x2c70e9d75be5679ec56f01d3602d5c82ed0d31b302d1f3c86ecafc2777c47576", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02d4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1c9282981101892d7c8209ec753b65423ad1c102446ebef460eb58a8a9f3d5c4", - "s": "0x69d8dd49097ba781cf2d2c4f533ad6ec32594a44a0d8ebb614561c01771183f1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02d5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbd5436cbd0e1ea508132dbe017f098cca9703856e67abd5fff6f30468bfcb415", - "s": "0x772c41508857c28dc607c8ab9e76165c20d2e79dc2aebb2de6975adc08aeeacc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02d6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x170dd67bbf9a837c80a1a1883d14e965f0a60de349fae697e06a2fd0511efa7a", - "s": "0x5dbc2a93d55d80b29644fe28eb75498c6a29b255bd99653c9c9af0848cc612a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02d7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x58610947565a135d3a1bc4cacc5982e750092f61662d41e149200329f47494da", - "s": "0x0ab2fce95a911ec47b2c1124e30a7e6c10ea7e193161b8bbc40ace9558f444e1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02d8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe4448ae163fe1b54ed7fe4934c949dbff2ed2a933b5956398f02a6a6df0006fa", - "s": "0x6168047cf75b9dab21c4b51d6aae1eaf56394bc5ffdcd3759da9953d6f211c07", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02d9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2043187d388677679d03d51e87202a7a32feb0f4150346aca63fe89e1862400b", - "s": "0x5abddc12ff086490dc68adc83903d90af3561e42219b0f40f4a2f390afe40648", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02da", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x66e3b2fe5f22ad2a966a2dd5e282c7fe73887d7d0b1944e0319ce4a35dbdd748", - "s": "0x71216497f9b64a64361b35aa0e7afdab4f7b10417c6e154f7cbfd0d56564de89", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02db", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf8c8bb54c4c3c560a5841bea3e48439a6f81f271a05cb74d3dcfcbe74a5dec3d", - "s": "0x2d6f47702da496832f1afc71b927ae8395a4f1a4974d8072c51be5ce806e672e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02dc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9f466e4271c5ec0ca09087c8d75f74048bdc8db721882084007f097ca6e19604", - "s": "0x462822480e8c07c4c2b1e9dc84296f451c6e88d4e199baba0e45dac20b93b2b5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02dd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x58cfede45a0f7bb8b300adfa5b2572eca6e42d16a96456bec252f5c4aa2a8a33", - "s": "0x18705e965bf65c53def9a32690756508ebf63c3b33a62ca4727ad50f982ae60e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02de", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x72a4eea6b141fed167ce321536d1b02b38aaefbf94e54cf0a847815141fa51b7", - "s": "0x1db75b60eab78bd185dcfcaad4e50e6fa12931b33d7fb2599f4d3dbd09b06365", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02df", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3f7091223bc6df7593aadfc42dbe925f8713e3ecee141d7579bef9e574f31291", - "s": "0x788d8db7a6bc76fdbb7d1af1e09865744690bc61d4d44d2591de5efd39665e72", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02e0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x24c4434f806f3f01522d6b50b30ff9192d55ccd1dab5745fe6e04cff90d34941", - "s": "0x4b5459c37f757e2dcd0b5dc3bbd24bb79ed0aabe2e0195289a540acf7ad99b51", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02e1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa72381ac9f7d3909342cab17ab65cc588b626c1a6227c49e03d5e827a336d3d9", - "s": "0x3e7f8293cab24e72531a0f34d24eb459ba673835e031eaa5869cab1592451aa4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02e2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xaa32aa404134a8efaff1806149321273a32e515aeed98f05d65c0ac2b4b7beb5", - "s": "0x03d3f0949801d3d5bac24d2175d4c23f4ef19d5000bfb7b754f8b21ae92a86c8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02e3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x73b6e01d7380318ab923bc955b2cda0665707d7def3d0302a51d835216ae15a7", - "s": "0x3b9e16d541c5e786458c92f023f7df911c593ab27308f6026985d213ae3dbbd7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02e4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa91cbc23b1e72fbaa5467519e471353c8570f184a2f36880ba5c62ccbf226fa0", - "s": "0x064fe7928f96e39f7cd2ea30f33204a34b99ff18dea18ba96e5317e27357faa2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02e5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x54cb6fa5602e38526e26f985b55c687996eb392e132d97001ca9622266442a45", - "s": "0x703f451f059a5b1d18980207c45b410616c1ab351448fbd8c74ce2e6b43a1875", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02e6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x28a1a52168a36ae525998bccd81ad7314302cacaaafa8fcb8f89cb7d065003b0", - "s": "0x0c87971d2417910b2ee5c9b42240e597d018e8dad30a57e71a93d40ed6014e0f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02e7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x407cec6a625f8639f8d0e4e21d8d35b99961e7a9c6ef62f19c78eba62de4cbc3", - "s": "0x40a0b8a6aead5e9b27bc917938ec7b03b266853188caecc0e52422012c880205", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02e8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc1306b63ed50376b52e1f324e1bd50fb053ad98f01deaddcabaaf91d0322ae37", - "s": "0x411070dd5c25a1ff57dffd4f48df49bb309631f9e79fb3d298da8360449b8d7b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02e9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x604fc6dabc1829749cbcadca906e3442537072c2a783059238602ee74af055fc", - "s": "0x01f0bf64252fdf10e1be9059f289690f4c78b93b3359ca0d739feb6a60baabf2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ea", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x94fa6a7611cdef494d66c14cc5052791dfa98b589a095ad6226590a7b48f1c78", - "s": "0x165651e6a7240441714f752b68f2bd6921037fb11ced50acaa20b1e75edd3c3e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02eb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x90bb5fc999a58277ecb197afc850c1c1336d2df35d2f3acdc5f57e6f33270bfc", - "s": "0x139d86a2371c4a13982885269a9388475aa37ca3e6ede52df7ca1fd88d04b1b2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ec", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1f8c7b698dc8ff8b1a52cd6463d1053049470ad8337fdb18f904da6ffe7e89b9", - "s": "0x2fe80474c9275336a796a3e8fe74d3c1ab44ed9f9473f5eb9f62a6b80775b6c2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ed", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeac981c2a45a83348ce0afb9009913d4ba25526f61729df967cf32b8e0b5869f", - "s": "0x43eafef87c8214918cd1caea2e7cbd06bb71ea0917bd7680c91e4428f208b3eb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ee", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd471233eede9562ee441736ea0f10cb706ab13395c2bc7f6880a95f35534b6e6", - "s": "0x02d03f5908a9962046fbf1e0a19f2170d26dc42634ef4d58bde2efd5bf92a54b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ef", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x286fe27019927f61bd6370155a479b2db7c711039cb664d9ded116bc61b8a156", - "s": "0x0883b43c8e511e5988a1af8d216c470214a0d327fc94eea473ee5a0289a2bd67", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02f0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6e2b17a952ad55793e24f1863006a99ac136f62ecc01679234130a1eacb5279f", - "s": "0x6f4c7f8bb8276a45945dc3a0d5e2c4fab0ebd49f661371482df2de6d13b31e06", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02f1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x97f52c3911205acac8350a3b706bfe51b4f623bc3800f39d2eeaef856d515ea1", - "s": "0x2fe802d7edef14b8c0238d377ef284c14e2db146c039db456306fb5b6c2a5e43", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02f2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x857f128b9f3c621b9d3dcdf5e7813c73d5be5fea310b8619b51dd7d035a79be7", - "s": "0x726413bd22c029cd20f228e5ebc4cdeffe7f2fe217457c2dd3d5267294ff92be", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02f3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x349a2a758cd65e0d62cdf992be14f5f9b65344a49170c8253d426039b86dbc7c", - "s": "0x51c944a6f8b774638121e88d4197164c8088608dcda013c505c08dbbc61a6963", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02f4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6f74a51def9d7c9c2226621c738f6ebb5be4a6aa78e1a5ab8059c190c791c9fc", - "s": "0x4b68f6538cd4064c97bc95307b95899b4e06e371601a24ce04e57d06b1e2d335", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02f5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa6125344e9d932a08ca8a68354e60b0c0dc5363a60f97646676bc9f392bcf1b4", - "s": "0x07e5b7f0843f48e1d197d1832d98474bacc5c4a312bd4617f4d5eda1b6375b56", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02f6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x94c333b6b01f7c9ec7ec6c102a798f06da731aad6bf058f66eea31887275ee3b", - "s": "0x3a066c6f9ceb7de4c2ab386bc9eefe1504ec137f8a8603a10cee4886d3eb637d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02f7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb7e2d99c2a0c4a797ec33f5dfd0dfde281357b29c9b3f54774b53f840e692f2f", - "s": "0x5046cb61cd67036646edcd69323bfa9d5c92f0269722166a9a833da9ed0e712b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02f8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xae26de7a08cf0381a6bc028b0c8ad2023856b752b7f42589a0c2f53998bdd053", - "s": "0x39facd5f949e0ed6621e02654dfcabf307a6877be7be03496a51b9b14a06c8df", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02f9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2ebfda7d1ce035ae11f5cd07fa49fe2338aad18f895a1c7d278fb6f6a6f955de", - "s": "0x544ad3be1b8f0ad76ba407e9df3fb6c6afdeec2b16b2d0b270f6ca50e413b556", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02fa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x28df357a30cba17e53744482af6759ecf0b3dbcdf92b2abbcfeb5a1de0aadc2b", - "s": "0x0264a9b8c65cdfcce964758d81d6c649e45e180f56c2bb489ef50cdb46d69ef3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02fb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x658b442e120b82e2fc44d3d976124cf212097dff555f8a973d2888d52bb95af0", - "s": "0x73a77ad0cc6004f61c2f249032b404dd030524b95b4cb5d1dc33319ca8e73c2f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02fc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb678b9bb8652460cd8c119e9fe35f26ba8616138aa9fa43c48c4f92806283314", - "s": "0x0d4ff0e6bf029c24433c9355598452e37e82c5dc6ab47cf32f7ec94a8703c879", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02fd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe0da762cc555b2b5d541d37fcec932853c7d12f2cab6261a2b4a36ec4a1bfe94", - "s": "0x5629e4e7177dcef01902db2ff44673b7057cef5868497e2e278c607e4b243443", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02fe", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf9e758c2cccb355841679d81b79ca7e081e0ccdb0d7a3e0a7bc7291a7dc2578f", - "s": "0x11a0c03373ae9a36cfe3157589942dce2f1ae3077ff108888733d0108080f6c6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02ff", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x151f3b459d710ad5e3faf76d6659c55da50502ed398a29aea2e467c596d6fd3c", - "s": "0x236c317cffd2abb956c88d894aed4f2bbedca924fcffb69ea56d654b95cc6799", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0300", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x687fbecf498d14621849ad7fc244da4fdd4f6418978bccc19eefdd73be3678f6", - "s": "0x5639c8a41d7218db8de6dcd76e125564f181e8ce6377b4e89604e3db5c07aa17", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0301", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6f615d8d5b99c330f22ce54550b2f8e556a3fb535b62ae11eeae8eb5d419d421", - "s": "0x1a771bc53e0e08b8ee839b8a25b20e9ab26dd22a5529d1d419bd7faf6554b1ac", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0302", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd79e774c6c6fab43a4fdd27b3096d6230d6f2311b47b886351fbcd69e5c179b5", - "s": "0x667d21a34f8102f368e042fadaa68d3a17ca8baa208bbeb24f9fe7b494d927aa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0303", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x170285312e6d6f694a7414d0055b6368cb4f4721d9dccefe415a036794313e72", - "s": "0x61748fa60ca57ad1d0d956b92194a65c18fc511a304b956f9dea5c49d7b2eac0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0304", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa8cb1f1602f321493e0f1d90ab3a939e32a5cc765739609746c64ea660864394", - "s": "0x5be1490901216e5f858cbc64beae2994161a251d04698b308dd20c81c82eddb5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0305", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9050f7801510f638ece4c37934069b93c50b234912bc2c0335b2b90895d86a7c", - "s": "0x624407755c61268c24695b0bea99b597c2b55d6c7079d6b9d04ad2208fe3451b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0306", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc4fc56c03a0f7e76657d2c18122adeaa6b8f8aa5db5997555207f25f22856c49", - "s": "0x235cec6b5bef61c3bd22c59ff9bf2dd7b2acdf556e9e2f06d603d78a97164073", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0307", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7ff106054cecd39a27c3e21b7e4e604db70b38ae9e9f63495891cb236a20a2bc", - "s": "0x09771734e3f96c78f5c61bd8940724698132061fc9760027355322212d033f4c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0308", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbf8dc2864b010a3f1ab0bff50b187cf1b037373bbb9f1ccc8da35c52f194440a", - "s": "0x0d38b632b5af43ef66a55be7e5a6ef94c0e9320918aafe5afd26281e31bbe558", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0309", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xda0cfed77fe19b281e0a511acca9438a9808171a03f7c64c682120b7e5353b76", - "s": "0x4e8410e1ce057d06c8541057f3f247cfb3406dddbaad3184e2cd96204cf94eff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x030a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0bdf9bc0fd26943d0c30bddb74a93068aa22064e1fb8dc1fe2e016ccd11c827e", - "s": "0x41cbcec15545f5a396db18370b5e34f637a630a26f4a0f5d2fd9998c77662291", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x030b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5be3c5856f1d3f15b2e08da42642d5c5caf944acc4cdfcb7781564c7877ca1a5", - "s": "0x545ef0d3e9b6e6ee377166bc97e0988caa951562d02adcc3a14fd78cca081e62", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x030c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5ea1db7afb770629e59aa5b22f365086afc35531a64a003c4bf769fd8dd9ae17", - "s": "0x50019352552a29fe3d42631248ced33b35d8035d6150b89db6933f4e0733c6a9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x030d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xce24be2a63ad09d35ebbf7a58587ef0fdb987db806b84064bbc81d1a18353fc9", - "s": "0x07a1d1b27f7fc9f08cb6332e3c5c9e1349a925248a8980b40f5853377d18ab2f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x030e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x13cfb39c990a21d68a582382f52786754e79e3b936ec2bb9a26d6b59e5ac0763", - "s": "0x1fc3ffffb73d2df8012390b9d44599e74edb877895449b57e3aab1f037182f86", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x030f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x646afdd432f2652b6c57f4307a7b96707c2ed9820991e992e2554fb6169576f3", - "s": "0x0addc33ff5cc20b37b901f5995bd1b964ca1a6ef497701488a2491a66c425385", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0310", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x986d5152e49b0198678d17b8a474de252f1ffa7438e02b144df869fe7154f656", - "s": "0x0d1f121a1a9eab04b95a4558a92a317de4c31616e69fd48b771e504c7fffa240", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0311", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5bce2461e6fb8b3b22bb2a0117947a5cee6bcf33dbd681fd23895facce40d2f1", - "s": "0x6606b1b2f87532cfd20d0f0d1419f9e69db53790156b804c1aacf1d3b262be42", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0312", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa3a40325e0e7b97242a5eab0b7605e48dd78cc7f7878fcc109b8433ab8c08bac", - "s": "0x603e32c62c8a1ea1b348cb973165aee32728037d53952a659526fe2b3f1ea4c0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0313", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7d1ac7b0fe569b9a99be539531ea606e2c3de394967701dfc5541cc0c734e91b", - "s": "0x44f52c3bde8ca7580c4418f42e52312d0e24d46d1dc697a9c57ce653e2432c61", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0314", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcf2605608bf91b7023cd5d7eeeaded83b8e635be0b46c8f7b28802d998588ed8", - "s": "0x23e73ecb962e773b615141aeb20a75ee08f42cc699ded2b599d22e339de1655b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0315", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcaf4d1613de80d78a596bdce7d7eec15535cf7772da56f11827677d2fa3c4cc6", - "s": "0x6635d51d57cc79f5b934a65d779673c6e11881d28ca15708fb24160e05b43562", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0316", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x221c4a6b3a6462a21c486c8d83f7d637e2dc66da50a60bdac4a20dbea7459cb7", - "s": "0x5a79a075bb676de2ba6bb47a6c7bee83c5ec17bb14c56e9bd073beb9a4b1cc11", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0317", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf67058684f0c0432fd351c5ef039218fcd581a3c86ffe473837260d72141b43a", - "s": "0x103cc1959f307b392f6e2b9d97eb0d7d7b05b3015033b84c177c0f75022379ee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0318", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x64e70c60991aa014a3708259fe9951088094da5e24cf9bf3c7fd80fdadaebc22", - "s": "0x7bb9363ac3981bc2c83d78746684ec6d3ea6027916ced83f71c85284810f4d0d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0319", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb39f50ffd99fb0303e4a3980156772cb8a7ea303c4d3a23ab7725aae78fdaabb", - "s": "0x7cea7d95a054c8f0950221e675e107f35b0a964a8a64f48a195c67ce33ae763d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x031a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc8ecfc46ad46ebf2dbe3a97943a7114ecf33e79f3508689d0d60afcf3fa7b119", - "s": "0x347ac6fdf7704417c0389b61769060fea1fb17e44ce780f5b38bdb9daf21fcf2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x031b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6da1a3820619fe9249972e04802e0bd229c1b2569e9e1d33e5865558889225c2", - "s": "0x2a580afc610e701a4a4fee01f189b5fc3f010a375ce1c62725a722d43f87d564", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x031c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xab96ab4ebeb224bb73897c7a864080d7c566103565985e50756ab3d87ee8a5cd", - "s": "0x175647d55c335386c79823deb19058b07dfae96654d1010abb680edace55ea38", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x031d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x88c44e2ae8429f023c81ddc669e6ab3b845869e54190be883c46b830e911f691", - "s": "0x37a786dd5edf3e59c987366c362ec716c7da99311f27da13b42472c2bc785a1b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x031e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5b5088c2f7ce960f94efb613c8a936d1833ba64b4a6f22300fe9889d456329bc", - "s": "0x6709e0cd4e3707ddd36ede58caae9c89b4127b854a6d28096b679f328f856ede", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x031f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0caf7c04de2a7da17a4497f896749d89e7ec88d77c4a9432f3c561a551a6cd8c", - "s": "0x0646adee790fe92a067054201c5786a71aab3e0c4102c253893d7929e40504a5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0320", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x953acdb065d80d08eb7997e3af1199439f10f67f9305eba468d58d41c1e668aa", - "s": "0x5a3d9599fde000f1420f3c9669046a25a637898351b10f1afa7bbe28feb62a75", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0321", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x94e1186ce6fb51e233d26c0a67585e4800461d6e942dd5c072eb66ce79372bc3", - "s": "0x1c149f04a3431d9c8428913c2e35714a9526037873ee9293ec3293b9e682df6f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0322", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6953e5066ff54dc085e332b406a67d0b6443b39609c945b48e63c34cd07213ac", - "s": "0x2859ff2425178a5c33b95b6eb4564c2cd16cc7fdda7da2d81456b5c9ffcf78d6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0323", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3f6f52e08ad9ba1493fd7a9e75f86bfae1cfa8d0f4f862495ed5a6bf80b74908", - "s": "0x6ce5be7c9a46a6993f521a35784dafecaad49004cb7c3285c2085d873766ed50", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0324", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd195c5a95af11790e20fc6ea4b0be28c4088ca02fd016971e1980f2186ae7b6e", - "s": "0x2455d48442ff7f3e70d91277c152f37bc786ddbb423702215a945c66f7af039b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0325", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0646dfa262f8419a75db767526d28c97de4b04140e59939eed98efde7a41e258", - "s": "0x5a0e87e4d93369fe24a138df4986f27917793ffd6659188bf16f7f5f7b7a51f5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0326", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6b5b18123a1f997fe4a87be63de67aa4ae9f01fbbe7887443b057846d07546a8", - "s": "0x58b1ad60a1460985480ed6534107a93e21c87176946e9d19bafea5f827e31fa3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0327", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xaa055e14c3fad2e1f7f53e937a24f1233c0045696b0e23aea3c96f77038d04b1", - "s": "0x48e85bfba54f9ded8089f61e76651de8db38c7287c50896c861f900e5fd20cfb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0328", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xab389cf696315b6b38968ba323717dcc875e571dfba9cf1b67045270fa947139", - "s": "0x49f4f7e140f61bd1bc21c806b0ead3cee04e3d4b8a26ff2bc525e9af9d247ecc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0329", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x225b893623f41daf7782732a776587f05eaacdc02fd60c03e2ef10f010cd040a", - "s": "0x1c0054f13c28093b04482ef2519bb9de33a328d56c9c6b09f2b206482e0e2cf0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x032a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x83d9676f472e460d0c600d803a1019835f77995cb3951e64ca5881390c84d2be", - "s": "0x6e49ba04d20b236609612f40f07d4e77590dbe45929d492175a68570c88bd5a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x032b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbe7be391daa08af854357f9d55556751d283b3d6504433d235fda0eb2f78990b", - "s": "0x115a5395a8d452e73ed8ab98368501c1387c9a1feb41b156d79f5a3cd7c2de71", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x032c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x81906151b5a52dd966862409cc4775b35f810012224c31034cf183a0c3f0263a", - "s": "0x7c9e7b0039f422c93897d778883f70dd8b59b408313f686646b92cf329f420f4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x032d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5f9a2c6114f6f6b8ac06f1e83852cb7c0ea7da5236945ea32bf535eaeeffac6c", - "s": "0x5d6a48c022dfc44952a6f402d1e0e33f82014e2e9c61b4a12e035b8a03f7a5e0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x032e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xddbc945c51c827159bffc27a6c07878af77f1fb930560ea920ec62f9fb06838d", - "s": "0x54c4efa59f7daa134d3375d64fddadc8f408124bf6ef581549b255eea2b8252f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x032f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x01ce8a921b74266164bb0040c7e32312d32aa812405209cdd4c5f5ea309a779a", - "s": "0x705ef966f43624226b946c5cf40ab5ae389337e91a85da08196c258af4706fd4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0330", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xda0de250fbb855ac86873abeb232b2ff78a457b4e6eb6c0f8c0a3dbfdfd5ed90", - "s": "0x35951cf80ea4e5e13ce949d69ad069c87021debc40d8c174cc9dccfbd53bcb09", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0331", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9046aa1c05e893730c2a7edcfdc0794c20a639866082a6fd828d485d1917e118", - "s": "0x207d7a5ecf28b8fc986cfcd2fb4e361af8ad8a0e4d6d1772d38aef43b05d3a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0332", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xae44dc30a1551a3f885015c7430bdb29deccf75a1cf3c366f1c19488bfab8429", - "s": "0x71c3652be3731337e92f3cd36da2f80aae2b8c5e40a03388f003cec10274e726", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0333", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb5c7e92430590811bc7eed28b60ba964716389c0b7dc624ec9a9d6f56f4a97ec", - "s": "0x22060f20b53ae1b249a6c9e2608372bf83fb650e97c4de5a127cf15633197cbd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0334", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc6413688bb2c30b19a73968eeddb7ebfda1af1b5a8692ce92f65ac5cdae038d5", - "s": "0x7ce12488af24b78cce18c184cac6b0ff39f41ef03451b55538dff997385b32b0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0335", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x21a1f28cd6a4ca52a81a6149568adc3610421620d343d446b50066819389faf7", - "s": "0x1e456b1baffd6888aed631f7c90bc935ec3aaff96a4841c2c97d2115be426482", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0336", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xeeea9391c77f9c40d84015546ea52ba7bb35dfb1789b6232956846c231663d02", - "s": "0x54d90ecdfbf156483db9142430b821ad0d812fd83a1cdb7d8f07104811193a52", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0337", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x22a2caf27ac12f632f4eae0c6aec4f6a98e06e16486d64ed4b6e413befb81769", - "s": "0x0ffc1a410654b401acb20c2e6e2deb7d2c7ddd6ea02519cc9dc1b5a8c33ac08b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0338", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x327cda15eec96dd76dd8eb76a790b8630e0e389e89d0e2ba247699ab9f143fd4", - "s": "0x38884c127f00cb476d19e5c76f31cf12207b8574b88bdbdbdb5f9167e73cacf2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0339", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x44822a8842ae8c394583e08e333b87c2048630a9bf13bc2162599d1041faf931", - "s": "0x1a1719d69ea8f1d99c830f3d530d215d46593693723b297b4bb7ea22e17c180b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x033a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x25a2d321a6f11783e5e902575de72124ad6a48415a92868603476f8372bf678c", - "s": "0x76f1cd872d86bfd5eb3ba9dedb80cc5ba2a6aa2001f8fd311d1feb1dc5a8fed8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x033b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x07118208601c2a5b88b99edcfe180e1e311bb20970a071e3a94e2fa11be303ec", - "s": "0x5e1584e4ef1e2ae581f4d015468ef7f5f649be1ff524f7f09765963b5db096f5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x033c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7ecf36c6c9b1bcef5d9c4bb6abf1dd427d5560c774d3c0350f8dfed12621fed9", - "s": "0x332912af23f9025faeb2e02c46db3b55cec0e190c71cc1fbb51d88140d969173", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x033d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x74f35fcdf73fadeeb4613b22c9c6f05e6f8cddd62ae690a8582140c5f718ced0", - "s": "0x0b1817d882712c8f625d15b3fd7e0224cd7cb5401456e4229fdcc2b2f136ff75", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x033e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x22c29735a641ead3690c77058613c6575682ab8de89fd30ff457fee535dbee47", - "s": "0x06b2aafc90ea661c78d8a0bd0273c745e70c705be0be42d2b1fa6806a0a42086", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x033f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5919a7bcb1fe862858d5937c2d6dbd8d9b94f515d231a910ea8830d00596974a", - "s": "0x7dc09a502b57be5135083b17d1004519437eaa3cd49a503a15ea081cab887bce", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0340", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x366076a956fdc88c21fc6bc0de8b47bb6422069483d8f7b831d4ba08bf383ef4", - "s": "0x1712b46c9e0ce900887d09317db4b7e2e4f922986970cb95156c6e53f440234a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0341", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe3464629bcfeb565aa6de37c5dac5a91aef7a4bb473c8d2bda710397bdda2167", - "s": "0x4b17bcafec032fdfb9434afc58eb15a8a38ae6a5637bb3f109d20231718312d9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0342", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5c6f446397ae23a1c3b71da01fa28ebdab5a752a92b56fe6677a617651c0beac", - "s": "0x53e28ef44a28f19796fe3c7a78a51a3714fa5942d940643f7f7d4dd14caa4915", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0343", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x886fb52bd6e4dbde75a79938f0ffee27a4865dc7576d658b1f0bdcf466d22017", - "s": "0x3df4c9b2e8733b4b1e219a250bc398a4969256897267511c67275d16e3b7aab0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0344", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa3b2a69055439d5abb56f585300d2a3b10bfa8f4df6d3928858dbfcd8f867531", - "s": "0x70bf70e6447a9c794c94e0c996c7afd1fd819c4458680b02a697b8d65d934e7a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0345", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf7f16312fef46e2a54022bae54a249cea9bf68444905d6f5c169713f17c85ac9", - "s": "0x0ebef2917a24414a80bc18a3e674f0e297b66f64f93edb5c0c62e57610c9a8b2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0346", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x80936a2c04af5825ecbf6e756d61fe278807b9f609bee3118c79413105394fd9", - "s": "0x7dd7ca111b6fadf67eff49ae2e1facd17f0b31144623b6ca595d3a51d1fd4a35", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0347", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfd06963bb51405ba0376ba38ef5c02abb8b3f516e69fe24c7376b40115f24b3a", - "s": "0x620d0bfc9295ac93438a98a4d58468e9f12371df20d8434ab8a98de5c7aa7b52", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0348", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe218b6f335c02daafab4b9facaf135364221a9250d2260d8cea5330b2de33016", - "s": "0x2b1fbd57f9985c942ebaf61374f74e64151d7683e36ff891aa700abc888232ec", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0349", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x41d29ab33cd41dcb2ef56486caaa488c90306fbb33c081a28a2a5e5cc17f0fff", - "s": "0x690483722d7033d3fdb5ef9bd2afca9ae1152ee6e3aa8b3465588756d2f6671f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x034a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x85edbb4c7a651729a7be1084f4b018d8ac774e668fde2c30ba60bb9dfac61311", - "s": "0x3719d78e4f5f05ba7874315319b5d38beaefd62738653e4ff7de91ec3f361326", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x034b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x54f08c0c5a8da56961bd0977443b6176ab6677a9ad576dd6260de2206580a77f", - "s": "0x029a0bb85ece446ef69e8b8f5e1ea907d82241dce0617ddef8a00dcaa73de07c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x034c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcf1fd5447c525edfd9631a756fb52977bfca00516ef23d6ed5bbf6b55695dbd7", - "s": "0x0cd3ad8cf4f8660559b74a587ea80022f7ba026d74b2e18029a2c8fca94ad362", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x034d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x97287e90cc5e0b598d4603772977f38c6fccbec9355585e5e0af36ef016ad2fa", - "s": "0x3151e3c7829c920edaf9a8a0b6011d512cb1248658300cc61b405b46524d0e91", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x034e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xaf2355b0560294035fa12887696b8f08292a73ee5a7b573b177beaa1c595fcb0", - "s": "0x1097feaea572de92e98fa2fb7790df325171f47fc426548556819f8bf4624604", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x034f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x51fe6a2c45c2a732b8a4706ec5d07c95ce0a21f598d4720ee3edbac38be1250c", - "s": "0x2f345d13526edbe0a514250c4d35afa85c1c22605ece54f9520d93f8b9f5f360", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0350", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4ef4fddd824c0dde6a0aac2896f30c08f3ca04018ecbad1fa1cde2032833aa8b", - "s": "0x5f66a874f1059f240568244dc19d6313905c8d670ab030e6521bf45111808a81", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0351", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x109f5e8dd896ac82385952c39daa814c8105b30e3541f3095dac5c6e2cf00fea", - "s": "0x153a04f1ccee6a97cce6204f1a543e4d4478451128627c22dadef90d813c8458", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0352", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xffb23145f46b61d31df07533aedaacee4e9ae9443442233ebca2002074ba2574", - "s": "0x39916927421ff2cd80d96b058d53046ca5474be298a96d41445bc4bcaeee5b4d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0353", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xac6311f1b8c8b8e0f806e8ffefb7412b4924045278b868db1e1a4c7b798b0064", - "s": "0x05ee741bdb89cd466343389b2bb922c82b2bc1a3064e4244612ed3ddeb22cd21", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0354", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4c0648aae33ded1544036c43c53095861011391511c0fab4f5080168f5c7a3fd", - "s": "0x6b99491231f7c849d257d05fe11eb998260a57e404b1bb54b176cbafcb566143", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0355", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6db0786690ad6b7d6f7c05abfc27aeab5bc23112c3159d16cbd5725122418a8c", - "s": "0x380135b7a4d3c35623de49c207100f0d1f6420362f968b19665434c39e54d5e4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0356", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4cb42cc76e02cfa3f0ba756da8fe2580d023c739c2c25fa5e32a7f25f2236805", - "s": "0x173768f36b733216d8d02db998da31f4b97d813591760e216726201a9546647c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0357", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb32adbaa62574e685e426aea971722ffb5b823796c9b002050d3d3479be55311", - "s": "0x750bd75d1f3556f9d7adafb4c0310ccac30dcdc25e9a0d87d7da380c79aa1157", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0358", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7ecbfb7d7b2ab641a7e6a942c6e4efa06a852f0f63cd26bcc80394f3ce63ac84", - "s": "0x280308476854e4632ec2a7e20556b8a3a707b9a4d02ef9b65bfd232ac9ca2e46", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0359", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xef23ab06841c958ad9fa4d02d35b4d4d629ad009f630074fb0f8847394735afd", - "s": "0x124a1f17f73b0b5df6e2473f2ba79c73f02fd9f9147587690b19a864b3c9312f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x035a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xff628ab656da32769cb0328bfaafaea552555dad9871ca7d52fec7a43dafb5fe", - "s": "0x28a24b4967792dbcf7103c515320ffd0465cf4f774311a958a28d2aa2a7a65ee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x035b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2a0dc9b51314cfe50f8722342f4d9f855dba49003aca9456ce0dea031185d735", - "s": "0x7ddcd1df659a8694301e82d8f6165966e482f3f68fccd1a111b6709e1673e3b1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x035c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xecb5792d31e3c1ff367d72a84d23161ac26afbf56793789f8489dec7cd949a89", - "s": "0x5fd4e075c9128c8ad8883e7628e8cb96d130fbec769a310f3f9889c147a6128b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x035d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdfc4fa0ffe4f1649d840cfd85b6e094e1025fb66a0a71056fc909b45fa6bea2e", - "s": "0x385f17cb6705f04e4246459981d0569a0f8edd49ea278ba74824be2b22e60dc5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x035e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0d61a03c5a4b0814b2df3772a08889bf22ae03e958824a64368e3a48e3b04b94", - "s": "0x386a5550763c9be5e1d0d15abca1078c82d2e0e664f29a0594228b4226b22233", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x035f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd43821f7821b76d9fdc08ba87d7db41a449400264bc8665de96a82d23fafedc3", - "s": "0x3595050952d21a83e739f2b37732f99015215b087ed6929c6d67a675320b2e80", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0360", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcf19dc7a3b2d7536739e0886e66625adebcaa5dbf13895b67af63a5e4aeadf74", - "s": "0x125bb35ef4c0335fa1b336ff13389103cd60d7a175775132d37fba56177c3100", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0361", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeeaddf7b115e49b6002eb63cad5a4cdc16c32456e2d9fe3560dfb9bca86ae349", - "s": "0x2e1b0aae5891748a6da11ea475ad180f04272d87cc1516db4d04112a29d38b95", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0362", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x488bd50f932d0b92e8da1e4caae361c1eb6448a6c8000feea474dfaec7b43131", - "s": "0x5c4c6b3f5cbacbbf148acb8e6807b1e72813073703c551629b9bf0cf5a2e7f2d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0363", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4d016dd2b7f3cd0f83f131652028deec089cb12805f214c6ec8007fdf4f7193b", - "s": "0x6690e188bbb291fbd2536fb7e3fe2a0237170d5310e429e373324d2041e78bda", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0364", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x97aabda9cb66064d8e442ac3b867c989cccb0c5a4422726f4b7635d34d34ee0c", - "s": "0x3feeaa5a755feff699f468d494ddef55a0fd3973b259a08c733f8275328a64e1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0365", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa8140848d2b9e343767de528e94009d1f10ae079212bf71836c22814bcbcbb65", - "s": "0x751d57af1f2e5249d17b875d724dd8d42fc94d0d2eac52bdf301c46a6a88e53b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0366", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6183ed319daa9f3d5b1fd664a7f218aa2bfa223f1d20bb6c3c705ebe74d533f2", - "s": "0x467e5516c8b616341653e2d12fbcda2c75894795198624329c20f47cff0eca0f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0367", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6818f615118f821b8ec5b380001b3981bc2c8c2ac5b1575b7ee35abaf7d7fca0", - "s": "0x6aaabdb271e54f7c8b586eb9204ccf9640748b11dc8cbfb6f85318b81e8a0eba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0368", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8fdaa361ae584a917ca782c2d44eca94d71e8ea9164e651bb0e6fdb2246adc88", - "s": "0x1ac78bffd554c1562f7b508c33c72e6c699661a8fe93eefa5b2195ee30868d1d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0369", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0bcdabd4316c63a29ba84ef956567b5fe9978d41a89bf4a088248ed0302103e2", - "s": "0x569efb3d35c5dd95be0d91e3066a6cb0f2be165bc3348dc328bca7574d966abd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x036a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc92a472a1e306f7b3653a87b599d7f90cb14476d1b5d0aaae9575597351b61a3", - "s": "0x60c752ca01d84932d2aed8fa45f429c357e5911045b72b16663e7b1ed0b8bd70", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x036b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x753b665e96ad8b2132570edf5dfae47c056b165ab15198474e90a8db42c5e684", - "s": "0x6dc6ebccc93ae5dd400387bcb7a78a606997ede966d641e9468f96fe4065a349", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x036c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0937309216e3c20e0ac93f49bc5aaf7661704b864b9d003434acbc7af7503e3f", - "s": "0x4e91f49dcceb36305b76353256dc06c29c916603f4f1cb1ad9ad036263d689aa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x036d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x40e0848a8990f57f478b975a06ad4f613e2dc42bed1e5a504d0282078ba2e41a", - "s": "0x3fe8526742aa7ff8a8419dd9e20ab96e7d496df0143742a5f3ac5572532b67c9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x036e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x40e85bc86e883ae62d842a89cfbed1bfa863152b0c5404327d3e53a530bfa9ac", - "s": "0x16512fb4898deb5855fd1ee81990327bea9a273da49ee8cc9d8681c7e5c5cf0f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x036f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc01df4e0a21ab3909ca7cf3c3ebbe6b8a13e898b4996330922837d364e668702", - "s": "0x596432454ddde3615ff61bcc64fe5e4c74889514322ccaf871c6257830fdcd24", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0370", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x447882f66709c68d8c675a1bcea5922637d51e2c5424f9d04d44775dd32279cd", - "s": "0x7af9fb7a210915535fec327bd6aeeb25e44794ed82c919ede28464007d9632bb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0371", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7f0ed2d1ba427cb66ca01c1ac76248fb0d019b52120e85070dc48101f1a64745", - "s": "0x1fccdac31c026121223f78dd7e564e1a8e6ba57a1e5e7187ff90055e932cdf16", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0372", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe75017a918824065045f66a82b9f8d6b6579185e84f3296d28532751bfdbbf0d", - "s": "0x52c525a2d17dc35b93a9d6a62e8af2c89202f34a0f7b42bda18a5c4b3f657eaa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0373", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfbb2fd387ac74bf45b96fa9e5cc53b25e3cfc5a6760750d5cd7b41a6d2da4d79", - "s": "0x0639483d352e50eb75603191b6bc28bdd5486fbf0fed0a0d8c7257d4d2600900", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0374", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3ddbec3c28c2c7a4a7049bd9335f35fce2921021e42cd567a461d94643e522e0", - "s": "0x43359d72797797679922f92ff35d4088d195cdcf885236269f1e94838b0b0417", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0375", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd12c9c86895098629d64cc0ff6225fae9fb8f53083192e5b537975a2d9607ea1", - "s": "0x259761cd4885f1ea93bb869f4b0dcb262d6a1fb6e4e90e3922377076d5f9c67f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0376", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x727c3e5442add4bd8c14018602097a32f2499cd60efc1d19d826bc101358f084", - "s": "0x06a9b9081b9aeccc0a1d1c7af39399e64a4e6d7faee4c164e5fbeab1b7ca3cb6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0377", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x677d7008bdd040ff17d58712bd36556cf57b64a4773fe85860ba031920601710", - "s": "0x227768fffdbdce219c6cfa7e5339e66d14e829e0e73c1066c95860f18bc1f0be", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0378", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbaecd3755331d404ea91fe4f53bcf5a71b0a643d1495892b6cd4ba342c7d2c66", - "s": "0x1b1d9342e5dd5f6899367a40483906e7f549b5ddfc530f0837ed023f37b7802a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0379", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1f62fc5b931245a66d38251b5c606a139f4f5a8de55a251a62f5265c608470fc", - "s": "0x6acb80bbbf7a56227ee75a6ca8c71a02d489844d403bc5b39e11b94e02af0cd6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x037a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x44fb14ded24ba0ea7a3260b5efd6e512652fb4593b3b498715fda35f17b64de5", - "s": "0x5ceaefcddd7392c8787d097f4b702f5a3c0333bab5546f292d16ba1c4fd5e1ce", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x037b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x33398397f52588ba94d983d640de1173d098953b4345ea70ab8c63783de9fbb1", - "s": "0x281b0920886290f461a70c53deb02a0f63e52efe127420c107974ecb6cc64893", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x037c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4053702947b9c616d1eeb1e97b616fb30fcb5285e7138274b5c1d81f75d473da", - "s": "0x64fe182a0f977b186ac1b372fe056bc6c20882d5bf6ba238aa765003874b25c4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x037d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa87ce28bbac23b438c18d7bb9eebf84e40c62e5eaf10e09b3fa31748bda4500a", - "s": "0x28907630f9f05089c422c88472b47429efe7edfbb57ae13229351cfed6309746", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x037e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x87af83209a7a73d072dd894feef833fb1895c5618fc6a4d6a864dd54a79fafce", - "s": "0x2b69a185890d56ea9861e8d8f754092c3292bba8401db0caaed6fa91b19b8063", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x037f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9945b5ac46e4c185ed3a4bd38a1918ddb7492cc3db8b24c9d1b759c07f5f4a15", - "s": "0x395a8c566c3798ed24cec91aace350b7e96fead8528b5de7ebe5d36600e50259", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0380", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x93ba10ef53dbc916bc48d93a44ef7e391b6c910d82144efad6c69cdd49a02d9d", - "s": "0x7337b3faa1aa0b30e64d8e04c75e16e7bd849cd6c331e10c90b079107fff0162", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0381", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4e06b57bebe2050d5eda073a3f9710c23d33ebd98afe47665dce1960031d912f", - "s": "0x0848cc7d899f75a96609c27cd65ccbe653311d950da82581ebb74049da33116e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0382", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x50f5f2d6c66b2c7252414d098b473f7022a58071a8ce6dcf4a4da2c27787b9eb", - "s": "0x667140f69f400530749de2b3bd1cbde9297e52ba45e4f2dd719038ab5b8d1fde", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0383", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcd13903742291f4b85d32b5ed32aee0b467f6d026a38669bb1ed340cebcf1c0d", - "s": "0x3337bfd04439c87a299c9775c2d270bae283aa22b8c51b71a56b1eb8393655fc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0384", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x249c872d28c26dde372e0d9bc85307b65514d4a610d686f3c629f2a582b9e495", - "s": "0x4c4e21c323ab29eee88b11f79fe97f78f8412fc9cf42860cb8093f0a18027f33", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0385", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x739f446343788763ea8bf9522d982607032b50cf190a528d8cd483cece9fe619", - "s": "0x0ed29ac76855e43fbb2ceb6e15b0aff1dd4daf514a127cfa9757bdafe5f3caa0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0386", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2b68c6b19a60e4335b3671c7a85eb97b2a9616c0daafecf92e8f3049dc6df5ab", - "s": "0x248edf0761c0e69b03417fcf048df8ea0f1edda7a3e5ab88b74df9911fd749f5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0387", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7403e9aa4326a1bf768dca72d313920d03c70f26ca6ce137e1acb93fd3327c4e", - "s": "0x6c498f3ec189931b7f1a17fa009fbc141264be6fa8ff686674b3eaf43fc85991", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0388", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd6e63e388f4c75a0c48a5d4f5ead5587314b967d5b452fb93793a5b92ae8a5da", - "s": "0x0724beb8d03f5b8271ebfcce2f43050bee63b07f24cbf71b07283aacd9aba5e3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0389", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8a7f62ec7bb06023bd23fe2206d11aeb7c71e44987caa4845e3215ce1e570aec", - "s": "0x19c8f8a6721818897594277b1d859811d5cb154ade291a4aaf7514029c2b31d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x038a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x70442c2faa06a7a3084cc1799cc1bc9d7f2a77755c5bffa415319f08547e06d8", - "s": "0x7a8f2b21e0276f996c38e2356e9073d23ce6dc114937eafc278a905b1f4b6463", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x038b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x36f53e9b9fae4f046af832b06b753ba9baf408742977e140b2b73669c237138d", - "s": "0x16075d7b91562ce0747aea3e6c45b139e0ff2d6dd0ea37acd519a812134d84bd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x038c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfb3c44a7f1a2d016a20e6de043f7893c91bf90fb6304375483485300f14d0ed7", - "s": "0x05f5795dac1f7a941349eceb15a0a9bc6dc04535e4dc75b80aef681b6c5ec7eb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x038d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb9e9f65347747cd837fa0384710063ea29fe124c2f5e276bbaee5e659f73f7e8", - "s": "0x0f0a48725e6ec7f55b0c50b28787a05cc7741763c49da67b1a3b19192ac46bd1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x038e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa36c783e5a739b05df99ecdd9883ebebaae2b9f9479365d0abac6d0b3b3906e6", - "s": "0x225a0237801308f4ab43cbd3a7030931da10b1b7670c8e7eca132ff753b9107a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x038f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1df868668a96d83b96fa416d0558e7d3d80cac67a722b4cf53d32fc67eb66231", - "s": "0x32b494d1cb3e9cdc619bf8cba3f66fa609f138dc158cb46406318913f1e0b3da", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0390", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfd6f5ab64238a5ed1ec33be7e0b5c027830ba3475f52ea8c8fbc87943e930329", - "s": "0x49258636ffc06a4bb0f2963a98ab4ec2972b9c613d69f43780147a74795270d8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0391", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x74fcd1fb12cab9791a1ee6075f983cc79085d792b40df274a14e3d94bb6b4a8b", - "s": "0x212e567d321a882bffaf583d6dca62b63e4928a637fc360521a78c3fbbf2aa17", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0392", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd59b2b1c99bd2c67b49c17b908c7e6e2fb6fb11af129c49e8749999faf932638", - "s": "0x79c8b018d30288e4700c9f4894353d19742c488db32d1bb15d387c695446f5a2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0393", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5759c888ae35ce5573fabfbf8b30f549259aee62916c88c13b060a8691420d97", - "s": "0x516dfc5a9b81d6ed479d0dbf4bd6675443782507da405d576d28fa03c19c2ec3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0394", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x75d3948ed0821d74144bcb85e5f13772837dda08d4ca81afd1fce0efd0724f6d", - "s": "0x01c91961159b1ed197ae7d5abde3a1539f2432b7daa69d189b1324eb018f89e0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0395", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1b9c4ea8226668b75932ce82f128639de6fa751769afe4a3eae01f429c54bab7", - "s": "0x583827a5c6e40187f53d8e7114635390024148306cb37b1281a03a1dc70b26ce", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0396", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1076eae29ba00b477a97d501a53fb6a068ea52673d78019f7d2968436dedda57", - "s": "0x6ec109221d1ed503c30aa2b99f11110fcabe6b89559f7e9cf341f47a10c623d8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0397", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x98325fb7419a550d879b1a0e2b442443470eeb1099d579b70b1bad2896b774e0", - "s": "0x08a965910ba076ecb55e8b25dd0202504d9beea6eadb0f0e2af491e499fa8946", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0398", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xaaefcc2de5952d4456e847ebb9a14b7afb3085cf04b6e3f5f1ef918e95d2f8e6", - "s": "0x115b1d43afa194c32c3f60612e8d1580e2e9eebd26d6366052a975874635a7c6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0399", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe1801d92679e9da35e671bc98e04addaabc38f194001b25cab6d3d5afd55881a", - "s": "0x619b5da2830c00c72df7c1695fa2b4ce790b1bc5e7bc40afafcea23a62970060", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x039a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x68eb53ea1dbd916a796d552914e3cb7f8a3e93584c0a25baa2a521681ce7806a", - "s": "0x3b94a70d0e6396b6a047266ca203c26e72e869c068424398f1a195b5b3b25be7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x039b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1e08d0de89813477c4d3dee412e5e392ffd6436a7c85b221f095e43fad5936d3", - "s": "0x1b22b33987c1340e5bff7b0c383ac06dbf833c9c0d801aae8ebe09d4839a9acf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x039c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x227cbfed9206a7e19a675e7968ab2731103b30a8ee02f8b71f821e40caf3cc08", - "s": "0x355e85330da01223cb65521fd6edf5c9eac05f244722242c4871ea58be8425a8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x039d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6c5920a04004ef5ed045de184e859ba593d6ff255ca62c747caaca69445e0e", - "s": "0x6a6fa4e46d6b7d2840ee202885721fcb26071f8bfbcd19f81ead792d7e72943f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x039e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd588cb780f47a3bd4babb093ce099034f9d9b8eed4738fbdd14650b036e3659b", - "s": "0x080223f0bab5fdca3e7c0357b3e4c86d030ff911ed32cc6e14d092ac1fdee663", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x039f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb3382d477ad00be8e2f251eccfb12d3a6a23a7d0d100f308507c80e23d1adc50", - "s": "0x2cb0b430ae33e724c25bdad9f387a0e7c3eea912f93ec33384cb2f728dd3d6ef", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03a0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9d9cb4e4f2741f1b7c7d917813031ab0f49a3b546778884847ab54279b6378e8", - "s": "0x7e5b26f6fd497d154031095395157d5cd1b44b51a326d429297b2431d9ddfa73", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03a1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe02fe63585c5df106673d3529d0f1a541491bc54c3f7deaaf1d6731f385755c0", - "s": "0x1c37653bce0b1ea0a35819d4d8a518cf7eaf7b5eebd4d7770b88c1555501cdb8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03a2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcc528dd5a0725c9c93bdff07dd4a7911c107f6c7bf4a65704072b7361a9331f3", - "s": "0x1e798f43469df8da8b36687ca2866f8bf492283b8772184f19da42aec7ae3693", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03a3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6985eefe1076936c78c3b388f2657444f510f4a1665bd64d1bcd0c94f440592a", - "s": "0x1ee6830914fef83ca991845a0910078da5bca5911cfe3f951145e16ede487d1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03a4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbd1c02fb1fb09c052a762576443d7ada196539cfdd770f5795464b259869d1cf", - "s": "0x78d7111927e9adb81706ee0acc2d85ed332ae3e57cbb5afc89f80edead21f53d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03a5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x72d613af58b5a5ce38836f416bccf7d5765d6d90af6d868e319439e336387556", - "s": "0x46f1dde03adb6d400183fb8212ab530a18e2a0a1c89b2dc3ea51aed4d28c1744", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03a6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x701d78f1b7023c8f3400d6d7aa65240d0fff7fe68a7dd1f4944f1e45ba896959", - "s": "0x10efa10c1b7f598ccf11c21b72a266b8f295b64d12ce56474925c89096e6305e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03a7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x41a6c9b9e841c37afcf7c318d9b941bc563d48ed11f39eb9da48f5b4e7d9ff36", - "s": "0x7239d79b639f044501b214c9dfb15e2f0631ccf82987e53c7484037502d93b71", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03a8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9c393d00457684d6e886b81d7633e414443b2a6bac3160b74bc2f923f7440a94", - "s": "0x0ffbd50345093a17ceab1c2ba700a957b0bdc05434499e3353ce3d9659ce3287", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03a9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1715168cea8ca29d7100d4c65e6780a5470fea6f56eef194fd7f4e3fdfc4d537", - "s": "0x47d6872913806ddb8ef627ab3770197479488117cc0b467218328ee9cc768173", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03aa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeb719b998d977e83ac8491871dd4b61d7860d7245523bfffa0b7e8d7d0938377", - "s": "0x555b5fbb0ffd1b56f2b66ec86ad926b9ca7c2c634ace78f3eddb89aaef7bd75d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ab", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x06a19685c9e9cca1f13d2461c956fcd903df0a765662ba21984139bb4c9fc7f5", - "s": "0x3f4675d26d1cd0025ef09b290f328b20f775e6290275ed59ecafe9ee98eee091", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ac", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe3f68607598d9efecadff0064c4f5cdabdec66a03f719488cb25986e96c65d8a", - "s": "0x289b30be02b16b32db2bfec07c810ffa8a82f37940a5de1e991c8464798acde2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ad", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x104ec351cfbabb42fc190b7339cd56197c191a051300c308e00b5e2e98d3991a", - "s": "0x559742638777927284817c7c7c89fca5952a2da753f7c70c288a4bf588cca3ac", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ae", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x239789ff943b0ab18952484d66d1850c0d5e5f72d0e205eac72981d6d5bb9ba8", - "s": "0x574b61c803ef00eb8b5ecb46f65bba646853fd8221e2b43906f9e3eb02bfdda8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03af", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x27986cc2465c907cdbe47ad04b4b3c1c8579388fc51e06291e2df32ba8c47589", - "s": "0x535a1ee0445c03399073a396bd27ea78c7f305e0f4c1d4575c14be171930324a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03b0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x98df876881eeb804886d2688df1133b36acfb19c2de1dbf86414d90ab656535a", - "s": "0x6b6c57385e25a7287b4fce8fab6822f7a9d43f27317fca7430f5eb97b6b74ed8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03b1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x668f20d5e49731cddc798d8cbb3c66942898b72bee20378f5781287e2d917e05", - "s": "0x44b9505d8bcadb774f057f35db800641530a53bae47f2fade142523a889b46da", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03b2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x026fb0df57b50ca14842f1b819115d0ffc4e0b0cb5ef4b9a533e3d32a70a92ba", - "s": "0x2b476cdc4b9ac2e10d2fcd5dfee04cb5fe53a10bccba856b5f464ea0e86ebd4f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03b3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xeadbd7df406ac5cb47270379408fcfdef1b63a5b0afba1e20dda3ac49907b417", - "s": "0x1e1bd46959ac309e55e451de428919dbcc82a6b5743d78e25d189a5b201c20c5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03b4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa2e9002980b5ec8676f724ba8b038ebd17d00ca147be73d48b0a5f463b5a41f8", - "s": "0x19e29f276746a52eaad0bbf1616d671d3bce8cec9273fcced348783d1f445c37", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03b5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5b63261c7996cee0ff27b2c56373db9f60ec7bd81fd82cb56d981aa10ea40442", - "s": "0x54d4930787bfbaf402a0ea8542e4fef36e5d7c29cc9a4601273e03e450fe11fe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03b6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xea5f8096249c4f5ef1a787c44d2f40e6b6c8d98b2bc95c4e53771a3522de8e6c", - "s": "0x37bbfdf3d5cc583a1fa92db5ae25bd0c40c96f379c9879be83edde13d8647cd5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03b7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4d3c61c3a7d2bba751217ccf22834bf81add13726de93710fe054e690189a052", - "s": "0x793dcb95545e9d756bbe7db439a78606d5b6797a9aea324e9000ec6df319547b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03b8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7988a8d13d48d2059ce5174cea2dd8d6d2f4150e275659a0a154008bc143c3e8", - "s": "0x5d5d1d0a4c8edb5b9881f7239d4abc14daeb30a3cf720ea2ae2406c5a837e272", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03b9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x194270394b93d0e4225673abc283848dcde7b6edc9554b93ed0ab351f61694f3", - "s": "0x4c6dcda990dc0e8a8a883cf6633ac36e16f3ac3eb0bedd1ec11a2b3247fdbde5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ba", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x29f982473489c6849727fc9bd4c1f3923d5d7145f069347789e03b2e7d9438d4", - "s": "0x7ebbddbb929b4e7e294dc9afde4cecea2d2d398c8b39e29a06760bf241328446", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03bb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7dbf74e1841dfdf68b629781201e0369917e2aaecb274861a3aaedf4083ba7f9", - "s": "0x6fc25f85dd0a432f925069c2c403035890af4ef0eda8eb8e3e4d19ff13fb05b8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03bc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xde2fb76a2335ce042007a273bcc8807f009e70b13f805f1bd9dcda3cbca06d8c", - "s": "0x12e3f7a22104f3e17d8bf19bfe69393d6a77b65e5c5c0e6bbd9da23c76daf50a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03bd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcf32d3267233bb64f4acd35d289acbb2432229102590d38930142169dc9e2c50", - "s": "0x571ab5b0febcb01cdead3bdef0068c5bed79a73824ba3056c6815e88fe92e30f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03be", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe1c627c7b0f5e1d72f850aea36d4be7f02203faecd759f5c42960ce9dc0a0e32", - "s": "0x4aff87adee896b730cc15190acfcdb855ac17b4d5b3e8eb36858a90fbc1c96a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03bf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7201ecb26f5317a01ab3718abfd0f7133325bab39d5b696a7fb93e51fb3205b2", - "s": "0x6f740bccee361e68eb949b706a95d40988f755c661fe27383998594b5c9a1f41", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03c0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x31bccc5963795eea499f35709bea61080c3e0d7dccbbf98cfc0d769433da53fd", - "s": "0x1b4c0453b0b2b438bbe495c2432ee91d437ebe965aa3aca7ca28f8f4284b5030", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03c1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8f0b2856efff5241fa1c3aaa8d9164fe4b45f96fb1584fc3aad762fdde7aff7b", - "s": "0x648d93050c001cae6e0e7feb240bb1af22eafe65938d85da9cfb7f1f88556ad0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03c2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x83522f2d2ba48444f20a3e0f24b3b55ccb05cc726d9627b1807b5e6a8b2481d8", - "s": "0x0a9035ddbd2826c1b118142bc014a8e99464b02f42d208c00fe9b31d8e4f4aea", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03c3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x84fc6fc7be168b6419ce7b23c1e975ed793addad41207014cf4f420881419c74", - "s": "0x2ea1f8e28ef177d4cb693b05865d95942265cdf9f9246860d271eaacfe34bcec", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03c4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x165b4816c0b29bf882144e28ee54838714c44cf2489254b787757a3f6f2d77e1", - "s": "0x1f6d22c09d1ef42db621efba63ce49e70f5ce250c4a1d963610ba4921fc30255", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03c5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc0ef78da4bf73429958644c3774bfccb55316cb369fa0dc80da93305c011b169", - "s": "0x358fd049ad5b3dd9aa605215df2ade31c7132e01a794837e3874ff1eab224304", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03c6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x253170ec8261ba4ff328c244dee2325972ed2744107ece15aa5e73af6cd8ba11", - "s": "0x033141449aee68fc8d9fb1a03f7119f945478977549ee684b78db26811823459", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03c7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x99cb0cca593f0dbf29d559d94a0f200bcb63ba247d3fc749eda90c4a7b136a8c", - "s": "0x50ed1f3cc178d3a6850cc9839a2ca81243c4233d666363521f75c3b5503d4bf4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03c8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xaecd0116f8bf5c437868ecd35171204eaeca94551e07e5d5ce4c75e57a34a379", - "s": "0x388bec8de2a8b6c30cfc0014362bd2be336d3e09e4cb8a04659f21da445ca675", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03c9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeb3f592c1e49ce2759bc0ac2a715f60cc2fc247708ed7c1cd3deace617e56b8e", - "s": "0x2a974e684306f1c0ff89cf3debb1cfcf1c7ecc9589acd6819c2f999f00be8068", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ca", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x73b72f997a20959fbc409c46ecaa32643f661c879345eb6c891bd55b4a666015", - "s": "0x3cf356e806a277005e1bce0562ed2b84bb9737fbdb85e7b09c200a39ceb54df3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03cb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xabf9e2104fa524d69672f8583fd25eecd817bdee78769d955953f8fea49da3c2", - "s": "0x18623483151e335a07d13c7726a0881cea9ddd9dd42c679ef46a91d67171ec5f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03cc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4e5c714dc3715646efa88c788a16da5840d563bffe96f8365323905f28b33ecc", - "s": "0x4739fc9252412a8da8ba5d485c48a9f99115d6fef03a7cee308c68a46ecd2083", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03cd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4c6c14be20fbb01a2de4ef2521523248207f0ae86b92bab37f8859b8309b3000", - "s": "0x34ecb762d61e860230f0f6aeca8888c42804a7ec5feb6cca6dd7aba59cd0c786", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ce", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x90ae026e14be1a2a806782305eb7ca9c1e7216b2f40334724999dbefb7cbdd7b", - "s": "0x44bf624b6b28a38d1ea84f858f5b758016fe3b46e456f37699d0f058c039b84e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03cf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc9a336b2f37dc8fd193aa7381f13922f2d5d070b9bbf0e6d6ce9cf6ed93df827", - "s": "0x04000bdbd5ec44bd0a056ae386503a431b8af133692294539074d96f076032e5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03d0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x65af49f5e1dc049a419d044f76b92cb33c363a10bb25568cc8e8404a7aa800f5", - "s": "0x74d8449465e87364f5ab83b3fe77f53a95bc028c64dc0548f336ff1c3a86ca06", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03d1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8518b86f3dd99c7b04c275923d62ee117142828b881fd7455f68212d469b876a", - "s": "0x331135126f9e3ad93c8c5b42dcf7a0c0a9895807c13681eabfbc147d2b0122af", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03d2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe3fbc7669b2f601ee261644acc3e788da66a697cfa54538bab50782d94c30042", - "s": "0x4032b44d66f2470dc1972ddd789f7a7fd710d66a78f2987c56b3e3e05c8a7904", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03d3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2b33ed97cee0dffcf69e83f61dd20eb9b597e9eb4a69a379a34dd0e9edfd72d2", - "s": "0x53f30c94d8fd5e8bed0e7b4cd865a939f0063184dc6ebdd70e01b4f44c277979", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03d4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x43e0aaddcb03e14e7bdc608821cdd08762aac2256ad430094cd6cc2e43513ed3", - "s": "0x397e475e3a4a66b33d5fd23c32c895b6194405123f93697368942f8af1a40d10", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03d5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1c979f15af3ad5b0eec126e050437c53beb1c6519f36e64072a0a742aa783e59", - "s": "0x5e5398cd7119ec46cb06127824ffa28d3f87ca39bc9348611886fbe5466eb1e3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03d6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa7f3cefca7ca56a3e3893b2672faeb901d415c641eae67ab512f9eeba019b67a", - "s": "0x5b89586abf791f2f5c2fb6b8deffc46610a971a16524139cd3d23bf1b5c5174e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03d7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5f9a4dfdfa301d86b66f05e387e84021867efea07f5f56051fc6c90cef8305af", - "s": "0x4b7a2617b69a46f7164cffa3fc78321f7e91bba4bb2d375b07ff3c4ca4738093", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03d8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2c81670dd687c860a1c946fa93c87d33d8b98958172edb0b49e8f5e97d85297b", - "s": "0x522dbfd6a6d8c1759b60f06854a3ca6d5bedf76b683bf79f50890325f10a2fd3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03d9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xddbfb4d12707957bb96c4ade0ecc4815cf44fe8d752f3a9e4428bad775330651", - "s": "0x5ac209d941443c9786729f766dd6ae5484237cc1cf525306d8e7957f75eff153", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03da", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x90349c9333f16207fb76e1c3cf72ef1722fa3e601bff63942f98f98f12ff74bb", - "s": "0x70998e169d7c1690753f1b6726733f41f1283e7c5f6ea6bd7f87b68fb7bd9431", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03db", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x57c9a967942d0a985e263dd00afcd049fe729a2b5e61922de58eac143d114ed3", - "s": "0x5ee50502be8a802164f35e304415937ff00d33a584b1edd19b7ec260899a4460", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03dc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf4ffeb3a0aa04ed70cb75899d0da9d16caf30989f11cb8299e666f7764bdac04", - "s": "0x59ec3487e9ffa9d6b20c80ca4e0d6a01f8eb55fbcc53c04732983a23dde7ff21", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03dd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xae241993216460fe0bfaa3342ea7214439ed914d44ccb18540abb8bb421b32fb", - "s": "0x49ea9f06c492ed09899694fb3ee8a0f0849e027e97b2fad479ea183f094cd730", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03de", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x26fa1a5f861066bdf3c4bb471c7ad4e670d3c1b4ef29df959b0364b06becca26", - "s": "0x5cda18e2dd0b892bf6d72cb92e1d110cf5a94178b668109bb227ae5e9337fd85", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03df", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9e3140350627ca0fa87ee199a45d291c0081740f5382ce4c8692a7e002c886e0", - "s": "0x498a26a0cf9e9eaa4d694b0fb1b9104d915ae96e0accc6a797a7ec6dd65b5ed8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03e0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6e7b99786ce0251f967f67e6bebe7960478a7d1c733716742eed201d9337ae48", - "s": "0x1923a45519481c8c36f569e50efe9c5814a27604121848169dde47630f741c18", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03e1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8f843aeda2958e7e4143d187968edbb293ab0fd616605c62f8fdf4163ef4191f", - "s": "0x0d0bc6203fd051ecbdd5f4d4c3dca9769bd531a3f397e931416e478a525f3cf4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03e2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcbe6aac92db30b2f25923f35d32c1ad290dc6d8b92adffe7a2a4c5e0052539c8", - "s": "0x41c17a20929b500dea0c691a372d212e216877deec15bc52ae65c2a4d6882cd2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03e3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x665aa270ab15b467fa429999a9a256bbabaceafc614e93195da7e9a680f236c1", - "s": "0x632c727462d78181d0769c5fcbd128408cf3908167a01381b4338887dcb469ba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03e4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x73ff436ea35def919253eaa52de2798ac4e69b5a3b966b2b024e37cdd4282db8", - "s": "0x092bc98aad0a984ef9f7bbcb6951659c6de9cbf070422f933d99a8a9e133aeb8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03e5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x96949201ccd93e477d5a891522cee3ce44356d991befbe5274b2d503b8d1ddef", - "s": "0x478ced0c00ee8fd09ac9d79c709c2737a673ab8cdcf219620dcd525e3ca34122", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03e6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa3bee9fad2ca19eaaf16c6be2bb3f5893b9f2608dd1f3da470baddf47c3edbbd", - "s": "0x26a3f3d826e52bbee44aa83681e9ee990477b7e7b10c36a87e615fe85ab8f0b1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03e7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xba0274738a5298ff614af004f472e200cc1aba73fd10d2cda923f8c5147ac5e9", - "s": "0x79c451363bc8af428f43d43ebebf67873fe06240de7045dd4dcc64b2a682a714", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03e8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xca0ee5d093c232264d0b23ab100aefbd1a50f56dfc248fbdcf57c7c8d3c53a10", - "s": "0x09300167c9ca40ee33f38aaefe37c362f069edee10b314905438024843bf4c76", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03e9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc4df028dfe9506ff1406632cd5260de2762ef95b8b17e28c44285799dadf7c77", - "s": "0x546e088de1636b228d099d09423e62b2d6e06f62d7890863430d5d83d686959d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ea", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe353cc831f9829fa746a1ff153d4991e89618690f56d16d6b50d3040abeb9c9d", - "s": "0x6d44a51197d37814810ee0a295d8ccef81a0e12f1468eb6b43e5496aaf183a56", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03eb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb7eb662613afb9b166d3efde37ac1831de7eb6111c385932193aa3f5103255cc", - "s": "0x5fce21c0f62886f5c71ab7ef35a1a59eb8fd48c573b86972e283a6d1e72ff5f3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ec", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3d49792a68b8b1dbe40cff64290fa23705d7b085883c56f5b4449826cedb7583", - "s": "0x06009978b9a6c918627a0f5105b2f032689b1d9f797ff38a074ceb1258b61272", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ed", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8854a635339056fb80769f229cc4297c583d2388e38eefa13c2584d9181a0f6a", - "s": "0x61d93e9f58fa09958c9ec70a1c725ea32cfd75566a367cee2eb85dbfd0ced438", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ee", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbc73172155e7f92492ad40eed0e9862876afaa1e81b70fd5e6ba235bdc7aa9c5", - "s": "0x733aa777804bcb8f5619e3898d3ba779640923d3a74b62ac4b5456a007d9486b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ef", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xad578e1dc19d85772ea43b46ee5cb1f7fbaa507af68c5b6d9280ef6af1376518", - "s": "0x57d39fcea5af4ae7dbe1b195e7fd51f54adad2a52064afae0cb195950c4f6645", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03f0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa6dafbca589213bb87dca7aff004503ce089495c283d6120793d96564bac8090", - "s": "0x66fb92c13b82ccc5282ce59ea43fc595fce297268bd6fe2e59d7871d9c5a1116", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03f1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeda8cc7ef002dfd289ccc2bfa04f4e336a41ea9a5eb1eebffe2acf81b6e298e8", - "s": "0x7551441504391a9181210bc0dee8dd95f1d45625c376957749616adb3f0f424f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03f2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3354a96c1bf5a23be895fea33c5c2bee53ac5083d667c875244594d8ae7e1d7c", - "s": "0x3ec5dc774eaa96278be0b0c8f54c1cbc9514e9f0c5266c0958f1c4693030dd99", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03f3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd4886203c3454143aea54d63670f5ac60a8e05f740a8d5c9aeb250f948e841d8", - "s": "0x67c309dc654fe6d81055cae02526a0eca32d8d4da574cb6c9835ff238a3bc2ae", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03f4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1986f529194df80705148282de7b82fe1b35213c4347a9de2111daf4d533dbdc", - "s": "0x73154b519b8b4a22e5018fd7e6c0180bdb1ce6e4ee5c4569c7d2f1cd89f791c4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03f5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8a0b65255f6a414e2def13e14fdb4e463b653ef9aab4fd6e3ba09fabe269f017", - "s": "0x19fa295650d72559a6e69442fc97c6107fc610010f214ea5f6dc7fb370338b80", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03f6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7f12aac702cb2c5b0cf302891ac0554a0500b144a17df7b9522a9f5baf55aa3d", - "s": "0x7500f48a2743a7f85ecf06143f66f3f59b189ff2e55a751e923b0a3d782ec628", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03f7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5305619350ec6d2ee9df49ab452bb6112e9b191c4da281f483905f6bce20edf1", - "s": "0x03f77cbc3d6d02ad9d2f7a0421bb9f61096eb1f004dc8825b81ce7c2f3f9d82c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03f8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb17e95e03ee46a81ea491e7f8461b74514c859de4925a7e044f39ea456541bad", - "s": "0x674efa931297e21377e835daef9053325fa7de575067cc1f26617d82352de78f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03f9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x182006e7df41edfd06ca882eedf59bb97e7f99879a2e38446efac7b9bca12cd5", - "s": "0x05a1e643dce4e7e3dfbfeff8db020f9483a0305a21eacb6202069a391fd3ff55", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03fa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb006fb1a8e4076d828d508430bc54c17ccf797ffd5fa11e1034b23c11581b519", - "s": "0x059986a224689584ba022d8ff9e14c8665d0dcae7cbec7bb08fe2e2322d239b1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03fb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x445626e120c605faa5b2fbd877b76e3ec0a8b4c50488d53fda22a1b4c87820ca", - "s": "0x6ed6b56cba3ae4051344bebaef23dcab12483d10619102d86a1f37d39e081200", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03fc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdf7213314630b947ef30f5eff3fa016b45b5a3599b76193a2b910a200ff8ac8e", - "s": "0x7a89c11006115d2cddd79adcbd8f1fd05ab83804d5e4500d0fd0458da38fe68f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03fd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x976954719f17f0e0026b4b02b71a8919387e377fb09990dcb347e9bebf93b312", - "s": "0x7bc9450b59221111985580cd8e058e43dd836825a816994f179639f714bffd42", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03fe", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8eec2ff888c3e478a480d257169047048b186488c82b25d78ea13c963de5f900", - "s": "0x4f46a8170c7a70b6cd2193db068ad8b24c2c76755d0ac101769bf0913ea75615", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03ff", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x76eb106e5a7fa9ca27adbdb62859859f15bba4e97485cec74d8cb159ef5102fb", - "s": "0x1458c77aedc4b8a8b2c2ae7f2e124aa8237a4abc8f710cf92244f98234c613f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0400", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x66b7935e08bd51e327461d9edcbc774b740725d617c10e27c0b30e7061f1e963", - "s": "0x41087e83cea215bf25d10e168ed643d991ef7bb545dee1b2c3673ba3ec13a135", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0401", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfd81b8143ac9ecee162e031020f28f3a018523686169fa424f1afebcf380080a", - "s": "0x59f2d219d323dd15197cb7b0c461cd1dbabf091b76e6cff5eb45d0a96db39e9a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0402", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5be10392633b9f1a86b5005811c10e3ecb4f55d833892b9ee7d6c1a1e9d5e38f", - "s": "0x07b1ffb0f3d9aa2680b277fe2a083fa1e086da5588daaf5204b8662dee925d0b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0403", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xea2b51596cad5ddbabbfb971e35905ce006fe04a6c2bd2e30bd82a1c1cad62da", - "s": "0x6e0675e4722ee51fdeec1e075c9a1f0ab6dd3cfb853a1d24d8c3ba563a7950df", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0404", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1d1173939181de868baa9be2469f3b62b1bc9a31dd14b4ab95764f83102982ce", - "s": "0x0e696d1da4c595b1e387558df996be85f156eb61774f50ed279c74168ddc31fd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0405", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcc3a49969fc7e1d48f4904d5005c7f78f32a09df835c0d6505ffd19b320474b3", - "s": "0x2e77eab8a79d025876e85d1fc1e19ae03d7c140d57ece0d96c37cc2f0bd78902", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0406", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd8f6eb85ed3181559ed5373b61d559153751b80a15a8ae623bea474990c72ebd", - "s": "0x2d2166b0787980f2aeeefd2eaa7f221e19fe3a97b0c88086fa638194f2dc92ce", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0407", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x13801a19df0370fa3ba98f0fa2555f1db41cf2dfc5dddbd33488e250bfa666aa", - "s": "0x3749e3a5756051d8c8c0bbd267202bcbc209e0c5ebe101f8e72b09ba2aec601c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0408", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x08740eb0b33761d882ad55ef726477f8edf53dcfe757a3aacf38469d78fcc47f", - "s": "0x2e8059011340cc5c9d178610b39e9cb4547bb00174e59340cd5d992301de6a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0409", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x06e37582ecc8d021ac343523513e534fc87efa3c5128597a825ce313c22ebb12", - "s": "0x0c79133f0382dfda37df46961fae1d179294b46f706d96eb9c247b4f7b8abbff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x040a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa146f2be5c60e7ea2e585327dbc37e25075da3c3919752f5fb8411d9c2be0e53", - "s": "0x5bd7f9a0f079d07820fbf9f8d51b5bec295749dcbadd544ffa0f5754e5dd5279", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x040b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5493e48aec9a01f8a88f84d8454ab5b76d664218283ef014846c8a7c5e28546d", - "s": "0x1727edfa696503696e41dfeb73433bf76f6a26c063e6d240cfba916242bc10db", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x040c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe6e0bcd73f26c0249a5e75fe78cf05143a6178e2008753793030dd91da02dfe1", - "s": "0x366674fa484c64cf18f709e06c66422785bbeeb8f228ed7b738982bbe9518b2c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x040d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x474d57b9ba78c736e3bc7812332ba3596f8ca1210f5879be1223271431be918a", - "s": "0x224446c56a04a3ed2f4aecf0ab72707104b16d82516c0d7858a7109d160b3249", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x040e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4a11af1c549ec772da7aff3ba54d091337272810e66f76e6786bdb2814fa7a84", - "s": "0x7e1993d4e757613b648cd780ca317f3e6a9f1458c396dff9cdc4cf2b2988504e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x040f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x462636e56b8f95c51d8e064fbd6183199c7fb2ace73e9b932ced761527b35e7b", - "s": "0x3cc152593d4eb937b27e616438c887f659f01e72ddce63ab2692d3d1e459376e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0410", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb0986871ac94e85f10b52cc4244177a25964298abe817a62a99616e8a4283c56", - "s": "0x719ac4ea073aff3729ca1ec933f4018d36b424167a447c7d61d5b3ce81ac16a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0411", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd0f1dad156fd4812e98aa1d3a699e000addfabeac07f3df48ed059567b91ef91", - "s": "0xd5bb6b7f819e411a895e79a1dd691fd79ba62a3d6bf21586f09a0565e6c3a2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0412", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x26e4ae85e507d2cbed6fff85be41e05bdd7887e2d2375973fed77576d4862840", - "s": "0x59645343cda2e66f5b2436190291980164bbd81ef4c1add0057b2b29b0fb5b40", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0413", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf38d78e7ad9a0096be3793490824fb66f5e6439c4e3699be5ba20be4f63b615c", - "s": "0x376d21370e7cff621714188ea8d4623a712c56f6cb10ac16bfe52c52354fcc24", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0414", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd40f615cc9014cf29bc182c6d33ad53c24a18567903ecb21ef69c5329df87ea9", - "s": "0x5e1baafec7299b164d0529741caf056128604135be1902f97b1cfbe2c976ff9d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0415", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe62b5c060425e2710c6baf5b4a2ffbd4ef799afd4c7ff1db08d5382563412760", - "s": "0x7136d616da12f8dae2228d0ef022985f30798564a949d508ccfa010d5466141e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0416", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x832d2d414e867657216485019230445dd94f401188bc7d9dd730ab1bbcff3586", - "s": "0x1bf62105c8bce1651af77cf66bc28a9d07d19901203253c1655f4a59102a499e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0417", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x39749ac989717407ec83f61a575aa22663829b44f8cc82d8f140570dc3eee8d2", - "s": "0x73189b91f55654f7ce3028ddc445b336aabf4725df526c70fcc138dfbf4d2c7b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0418", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb42569e54fd99b720abcebf72212501e77ed81044e90186ef5cb0e5030b8a95d", - "s": "0x285c2b268deb7a1220377b307e43b2031d7504de9aabc720bf09943c2cc52d29", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0419", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x050a34a5e5c251a2f931a47c1ad35aa95d9428868c64e1391ca692f5be499f25", - "s": "0x4d1099b04d3d3f089f443d546d4e78c4f67466a3b3dbeaeaf5b684015513a255", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x041a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7a41ba7d7d2741eca2a63a3aa0e07cfa177a5a49f3aeb84ee7e41859df4daee4", - "s": "0x4580304d7c818deaae1fced0e5d1acc5ec480228c4fee08382a7653dd50252ea", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x041b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6870ca8533038b71e1aa27a38125e5c5d07feff6e1dce24a1f1e357c2cca74ca", - "s": "0x52be9fa1c74e3152df7a48103d9aa2170389aaed10b2e903ebe1e7ad60c37aa7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x041c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfb2069b0af6e58b34c9cd61ec88f765105c3b3c3b250a14c24ab113fd6ad8423", - "s": "0x48c1e3f793bc7a4ae2d5caa5878ee42a7c1c102b3dbc0179d56cd3877e3c07ba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x041d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4f141f6fb368255056e5646d5d1a80a69523b0b9bb0e88a5ddc0d4e1b1b5562d", - "s": "0x648d2ace1b378bc7c1e1d6a32c8fa1605cb3f7a3e9018a1bd16e14be60da6b99", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x041e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfc4d03165f2aba2d9ccfb1f60435b246028d8f0c2fb8bd8e62de557d84664897", - "s": "0x7897ba7dd6d0df6778e57baad1dccf3ea6437145903abd26565acc75f56690e0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x041f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc0bf71961c671e0e613b72e78341d9644e4b75bb5fa566d39923a45df2d066a9", - "s": "0x394bb46d89ed2c8bdc9f0877a2b4a2ef965c35ec0abcc220696ae01306f69aeb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0420", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9184d16a338afd247d6c03dba68d78a05b259fa7d23def4892279cbd9a457cab", - "s": "0x6e2059a343aa188523b532b6ae51d32e7fc16c5fdf5321dee506b65298393f6f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0421", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x219e5d7ef2893671bbc3617fb48b1b33f2c008f8c5aef0847636c2d19d307d81", - "s": "0x7093dc466743a5dd98509ae27abf4bbc563d4d99f269749b0b4577b55d017f21", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0422", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5be968d84414ad32eaba311de5c6a3c39f3d24cbac5dc57359de976f4b51b887", - "s": "0x34f21c4fc2d740a5d7d53f686da26823cbd6ae9dca1c27ae4899273dca4ecad7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0423", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x850fee46a01188815c356f47e8223cab207801c3f50fee5f51618e73a6ba1c52", - "s": "0x630f91caa8bb60a4089b1e558f5d1d5b7e634731cd5116bd876aa44157f7ad63", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0424", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xccc9250ee0c8bd457bb01f22ef195f043e990ab228f9c08ab701dbbe48fae572", - "s": "0x0618dff62570a9a859408cab924f8f05d87b070e1b268fac6c33062163e27600", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0425", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb841be541f5342545421922ec02f137d41250943b1e9e475aac4434369a859ff", - "s": "0x4ec3931b38c6093ded96cc649856535ede36e1478422197f105270ba812440f8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0426", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x58e85c9262d44c7cde0bde6446550677cc6d00c80e277d5ca1e66667493a32d2", - "s": "0x04d132b86877d5884c93703f14f033422619478562e67ad462d2d0f06bccb1ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0427", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xda317b121cce2fed1015659267be053e17570cbd827f785131ef49b43fe5bae0", - "s": "0x7c9ea09d920bc429908d1d6886b2e9e8e7815d0c0f9ffad5fbd39d98571b8d8c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0428", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x553e57482c0efd570bd119ed03e75adbb33cb2ffe151710e11fbbb86fabaa454", - "s": "0x326c2f0b420044b6bbf95a4da71387994f96e25c9da30d8720853183100a9e25", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0429", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcf646a8865b7bccc71bc1c71ecee405217ad1b9304275eaacbdc1e7e2609039c", - "s": "0x37ea131399f105544ad925edb81b9b21646e55ed48c25790c07371f57d5a5efe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x042a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf1bf32a0571f089db7138ab3c1978bceacd79e4d8557853370f782af8f3ebe9e", - "s": "0x5f6b57039491f279baff4af8fc3cc149ede235efd14c5bb4439b26c3acfab1f8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x042b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x03c871d01046860a577017067faa0d57d2143679d179f6d24921f925400cbc27", - "s": "0x3ef060e4cab56f6f3ff786f2b961afc93f6f1b7b6ca673a8d099d5e61f66f08a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x042c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x555f5ee1543f6e3171f85f9e854f5d51e17956aa4b8723d443662dbcb6ff54ba", - "s": "0x6be946bbf7b8766b754d39c3d8795fc889b4728f5579989df7a602eba839e61c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x042d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xafd979a240e0cec76d6e33d705d40a68160392cf46880275798a5c601d44261b", - "s": "0x72f46c2743dac2da6b169834c38e361f261b83ee85461a78ad0875f240561eee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x042e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7622b29040b2de6282f511b7e6dc2f21b254f0f8f2e9f5340800b597426b155f", - "s": "0x711418d975d5d7c1b9a99f92b91a664a9a5986bfa26d8b5c52031dc1b1db3476", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x042f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x89caec0c783fb413bbf5097e8fba20ee15614c04496f44e79da84395a8717cb8", - "s": "0x295f7fba781208f9f68d92917a7f6e1a18db04c48d82200f18c300c8a70bb655", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0430", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x310f57bf34668ab8cb803e9d8037e931714fcdac5c1204530ebc2ba4d4f59193", - "s": "0x63cb2a18e0bae9b1ba0b49086ae9700dace21bacf09192fdc8b0a76da010ab46", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0431", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb6ae36267c243ab190c1d91b1f08abeb242f37121d5569a6e07508e8f64e3dac", - "s": "0x231c6cb018521d27d725aed126ff398bdc297d7e758201c83ce8fe280259c402", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0432", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf65d8fc08d9a38412ca4f02823477d150c264790f1da650c548950a050887b7b", - "s": "0x189e594c3e447725f4c0ada87ce1aa09936e0e06243fea2af9a7a7d9eaf222bd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0433", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4840846964d167647ce817aebf3e9f4ed9f634792d0af20ae7972e38eb2ac2df", - "s": "0x170b171c48c83ca87d27dd9aacf2a47c57a3a100bfc57fae4d589f0f24d930fa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0434", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0dd2b0e64a42c2dcc30dd7869750ab5ee6a23be1f3b34bf24abddb2d3531c823", - "s": "0x7a9f7cbde05f099139834cb2900c57e13d740c02d71a0d79dd80a71447720d10", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0435", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x62084f7fa81f245caf7ea1df45e2286132805427e5e798d4d2b9a0644873ab4d", - "s": "0x5245fcb272942795abc10fc677618c51ed6614bf297caa15a567d03083619d73", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0436", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xec151c424220a3258b379e656dacb6f486a854910c378c32a11f43135037f68d", - "s": "0x541befd36d1654022715b66ba5b2e13ad6dd0257a04ff278a32a5b36650ffc9d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0437", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xeb18063ebb451f9385f0669612726031823ded651b127496974a69a409da015f", - "s": "0x4ee4a8bc1e1f69802597e92d4a0fd4d6cc2826b50c7c30b2d2b4163853b266de", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0438", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x27b95f7be167773798111c20db098fa1872b99ff7e2db9aa006821fe763b8133", - "s": "0x29567ddef33aae07f1808ed8a77d476188f9d46ea9f0a5e0cd64ad72065c2a24", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0439", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf58a1e802d9b5aef08dc0e5215da460d8497bfa70f58d9fb2e56f0660115502e", - "s": "0x26b4e5ba64a401221da397736cb7d6699e5aaf7cf5e094b8492941e9dd31a30f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x043a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x240807dff3066162b4d3f7f1b603703a77640e0d019e75f3c44bac64becad051", - "s": "0x4e3c7118c5545bde2914b4f0550f92d4a1ef609c4e38ffca1f501373cc59093f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x043b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x888a37ed98e16d28b3a9e33c5ee02d92546557373da5d9b2f721a987824d384c", - "s": "0x0e9592b6f07048a841b849faa3b9710366c5e237f4aa7e1dcdcf94e6ca1ca551", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x043c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1cbbb2a0609d9a72d69e8685581e6d3ec59045b2fecf6d8f773760c2d55d2386", - "s": "0x20a7508d05bf526f47a77e9a2520835e59292e071a37a7aa0ea644d12c6af2fa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x043d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7b11e302bcbc88b1e96b22acab9c609d9714baf0247a1415062814b59bec788f", - "s": "0x59a4a756e2c9f37fc29c7f16a2e47eed2c1014be0b3c8099fbaa8d23b15b7049", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x043e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe1aa81be39aa518c0774ebcd51ac3d89bbb21ee722cb0170c3f9aa15ccf04755", - "s": "0x77dd29286cef916e97b5cb7b0c4f3d8025eb1b6c5212ee9704a287f58da3e2a9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x043f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0cf98e33828396fcffcc923fc859049412905b5fb69bbd4415140bd0471ac95b", - "s": "0x618acc1a8c9fc9a58664294ec1f61e8ec844d0fd7182c292e672f22656c15a9f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0440", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x858caa5e5abc947d0f394cc4a1d4344342acba3c6834496e549104ddcf870697", - "s": "0x7d0f4e6ee074de14ce1cb5b584399ccf1709afb43fefe2ddbe2c5196185e63f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0441", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9d5dc66f8ce591cb7de0cb53c82dd693df3e434c6fd12e6b857d15424c24b641", - "s": "0x39a05fd30cc35c1418bbd8f6001d4ab15a5f0b811da75f695d516b20862ed107", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0442", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xda897adbec2d630020296ace94124c147fa4b95b883fc4707f5e8064f76f960b", - "s": "0x02b1c8c2d9d0a3800b24c837feb76ee4f069c53dc86d528e16d2f17a2b087db2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0443", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfd3690923875789befd7a9b1011e1b2e5f7233ae8083d85dbafb7561a68bbe2b", - "s": "0x5e0719b2777435e430739a5c021c5cccf9486b2cf7ebf2dda97da6d77dc542fe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0444", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x68829af0380f266673eba8518afd83b19361b68e96294ec9f1d057c03d35d9ad", - "s": "0x68008308975d303a9691a9c4257bea696909cddf540995cdac78283b719ce876", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0445", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa4c83087203b55c2a7771a354441bbd8523ed2011ca6539b0279a676771b5321", - "s": "0x3d25897c496fda7c9c29c57b6d38faa4d004a0c480f8feaf040b017ea56d6345", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0446", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x84c4f92c627c206a4e2a2bc5a5d9ee5471505927100d3b6eef69b0e208918150", - "s": "0x6a489c43e03d4f88c6f4b2b45226b568411c9677d4a04c7b1b951d532c1dcaa6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0447", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x43fb4bedd8a8c70a1f78591a1b59aeb24fd0cf0d17ffd22e5ef75d5fc129e42a", - "s": "0x22f029edfdcc35585dc436c660818e4674fd627ea44806c0ba92ce2db4981cf8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0448", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5a05b1c00cb9a517d6cfb654c9cedb42ae923a75b4ac8d9608a66517b1264044", - "s": "0x70790562b326f822f4b6dcd7674b3b2b28b4bd25b14e1d94bbfb61b621c0b150", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0449", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x35a7f9ddddbf9cbf43ddb149cd0574b3944be6055c7f6933c879effd2d84bd99", - "s": "0x79675dc53987e2a9a97a60d777d9ff087f1bc64e06c5b67333036c5b6a54bef5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x044a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9bf63c8b4f971bf575c5f05767bf89299698f05ebbebd4fa7b148210570efacf", - "s": "0x63392ce6a4ee54aee4b71f290393dc569ec1d923155b1165f933fc6ad79b3593", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x044b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfa4f2b7b07120a2a1a683982358220a113b49b2ae54ca92107f3e0e0b80dac8f", - "s": "0x2a39217978835b65ae9a06ef29d89c64ee38216b78a0afa206f528dcffd05bcf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x044c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa72f827e76a1eef4b8f0b860116061921c81d4cf63663b04defbac224e306082", - "s": "0x7af74c85f35885dc0e156e803745447462b04b803ec8644634b2f4030b817fb7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x044d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9bef898d79b86d7ecc051d70241c9d103ed2d2df37c8393fede68feb8c3c9e2e", - "s": "0x529433d98e888abe19959355504573c813c3dc1b003bcb51b604020ad9b2779b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x044e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa0a598ab73006bfe94baf791adac912d00648f6e5fb4a7b859d4fcf6ca16e451", - "s": "0x702173f98570acfe15d0860880f4b59f5ce5873732be61e174a6edacd55dd744", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x044f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfb6619242147fffce361c2c4581e9794cde6f51cfac24e6022439c44ee4b9463", - "s": "0x794919f1513f692f28068cf88a2241de38558647b033caec9bbe9f9558360feb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0450", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa58bb95fe14503978860812b486fe97d5cc2fd7623a69f5813e581d2f25b1908", - "s": "0x3022960f82c0de1e77e5fba0ad12f57b416293f7276122d959b228d47c064c92", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0451", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x67708a18f41b5908facab1ebf964ed0d237c60db4aa032a2ca9caf03da68a918", - "s": "0x201f168ba834a69ea737e3f7d965870a92121bbb5b8ee91249c6a9e3b2f7eaeb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0452", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x452f7a4f7b1831edc08f9d1543e515605791be37f27a38a5c0a57fe23d0627de", - "s": "0x5373b75ccdc453d09237017410121a5114685312412ac7c9a8962d6b4b8a7e3b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0453", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xccd1560db75450bd89693ee1cc5ae5e4036b8602f9a1b76fe45be25fc04e7658", - "s": "0x54495eab641ead9f86f02bc747b71a23722b16aa825be08bb8c8772bb6f57e8e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0454", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6dd30bac6ad1a141041851d9c3142c565f13c83900b4ff4463218271c1f72a86", - "s": "0x1e1ca78a16fcc038fcf551c1fd6f4e2b9bab7b2d38157fbcbfad8e3a455a0bd9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0455", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x06fab50c7ddf907f284fe6dd22b590090fc5bd5d8c4d6b32e7892f4b8f467582", - "s": "0x74223087bca4cdc8b820b77d53799ac6cbdbb1ea503b6a5cb679f0f9e1555c04", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0456", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1eacb8659e156c82d1bb009ffade5615ca6933bdff8a303fb09991cced4adeaa", - "s": "0x0fbe527de9bf84c04098fb88ab149a9ce1eb60cb34455aa7acc2546d84d82cca", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0457", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x08c604d7dc1ad46f7360457e2284056595ec440f9e6089003182a72c11eb8d7f", - "s": "0x0aaf8050c6c31c6a6ffcb7ed65d63054d3c527d3f52d068d173b139f112b466b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0458", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x034a5911aa5144d443a38b2dc0317973ed5685ee611e6378c3d3f7122f49cbee", - "s": "0x4ce35e6b72c54d52deee04cdcb4d47ae0196cbb333766e463abab7e215bea512", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0459", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x228ff38b1333f3736e574ae469a25fba11b5a48ac101c88d1c341bf8dabb8c7f", - "s": "0x2d87f3ac9f12a4129325dd6529a4018c18139fed9a03c1ca2eb424b0d26db504", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x045a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x217ffb6b0040c9c4067b0674980399a8e5e344f82067a7668857a989005b330a", - "s": "0x79813762e2db6d0b6e26a4255c8de2532e0468b9b43cecdd4fe0182c72315675", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x045b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3a29ba32761b07c262181dbc9ed333f37862c865302b1fad0ba786c7796cf2ee", - "s": "0x23604271df1dbb85a4de1e7413a6e85bfa7b78f205d11c0731a35b3cb2f32e65", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x045c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5a0ffeb138bedbe34e0882d56457c08bddb4e747b857fc141a1444f149c6df3b", - "s": "0x57089c488bbc970d3d9148534da9edc5f361234705b78022fc4b947327a3e41f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x045d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4159e16e01ab4d8b9c256730fd18587ad72889028fce307acdf54945d94da2ce", - "s": "0x3569c457a08cca17553fb2484b46eacb5462acb44b73bb457c846ba72c1f33f3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x045e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa1a2ca336727735a6407dfc4d3589d7075e110bbe7d3f1f948df82e6b5d66921", - "s": "0x5b96050e8c66262125b109ffdc19f5b4cf557c94a396f2cd653d169cf5c8db28", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x045f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8e6e73fd4ec4d05b42089de6e167ef692ca5fb9ca8fe9a643562dfaeb1594c71", - "s": "0x3a4ed45807dd1a2382543331c59f9b464acdd3ecbe07da9ab87e3749cc8a05fa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0460", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8cf22b6a8a5cd62e01199db9210de7154dc2522334d9ab3b40d288eb578d93ff", - "s": "0x0a8c69c3e40e546cd6b878625d506a1f739c1cdf31e0cd085383e75a88fafb91", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0461", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x050ecb5b82fd588390e6c9fed5010b1593e074d58b5f08d20832ceedd1c61d85", - "s": "0x21f3301cb74aea864643d5578fb855a599b2c7dd022a33652199d2db1ba3e01f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0462", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3d036ea92f207a66d24ea7f3dd0f27fbf7298203c7fc64035a1d2d16bee3963c", - "s": "0x586bd1d0c2f821a553ec742fee76c157d3d142bb5ad6da22cf84ba8f8990f8d3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0463", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x662acb6de18cfb87194b2fc1dd51134715efaaf8d8b227c670f4be94afbf276a", - "s": "0x5f63ac07306eee07856bd8da7321bf3172dcb9a81bebd5a0d92c8dbb7b48a5c8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0464", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe7e6f852b8d44d68207696efb227a0bf7fe29590c5c6f150d4dfde52a2a1045a", - "s": "0x46f7efac8a77647da1149f597f961e2a50350252a7a2e0d52ea6490176b99a53", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0465", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5cf67bc7b57e5e7bdcc4a8b3b8a1d8e8e22ba1d7794907aca13876d0002e5f3d", - "s": "0x0e6767ef641ae807d1243cf070a8bc4bb90197302aaf25de490ab691c91ebb69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0466", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb13d944949a70737d2e9a2df669048bb9c2f258e81e38de13d1abe8897ca9ed4", - "s": "0x2607cf0b4960e02794f90c4630f2847056164029013514913062e8ccbb03fcbd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0467", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x21383765616f89089edf605ae170f625c70ecdc7999987934a775d0514a62e5c", - "s": "0x7e9b0dc1a6fc8a0cef12a0aa95a6c99cb47d96d8ed242b2407d86ff37bd0724c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0468", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8f4d05c5b966bdb724e46274bdcd1b0dfa1965a58c25374dca558e1dc108d80a", - "s": "0x13e84c3b240b040bd305926a0cd20dab081bfe8bb54fec8ec477066ef6134ac7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0469", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6f93b005fdd7360cc6d2b3f2fbfe9717fb74b67a5724718470e56946e4b6629d", - "s": "0x7a0fe52ff2cda0861c0fb77644c72844619d1bd442efadc726e8fb4b0759020f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x046a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe63d38def247d38ab9c75579bc8ff709f124825b5c61abd462c32a3d981c3d74", - "s": "0x034659f1ee9d84e08bd773f990abc776f4cf9396a93c7b607b9cf012ff0be104", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x046b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2992595ac795c76400973968847e7bff55c22159ccdb347ba4fe94c409d3a5ca", - "s": "0x513b3c2cdeb88e9694eb4fb8653a17cd550190ebec639d5f9e2a0eafbc31ff51", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x046c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb237d2d09a1ac902678ea3cb9dc9a23c36ceb35d1098104d7602caeff8df66c2", - "s": "0x18e6be64dc17221f4d7233e767ae909238730645a9b360a3e3e987d7ca057e9d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x046d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5a1ec8b4f0769e1fcb639b2914c69ccbbb41fe393794e3277d3de8d3d3e40793", - "s": "0x4e4dc4427bc572d226f1675c16342bdd379c803fb06794db0c056173279008dc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x046e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6968f4d946a9a77c07b9b2a364e636184f36415062ec3e5ad840ee069e1837cb", - "s": "0x77e6443463831981490a31f020a1be23bca097c409528f7a0ee60550703c118b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x046f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdc8c170729ec563ebee711ba6894e8f449c25506e8b58618276cb0e2d12bf5e9", - "s": "0x27ac3a28abaffc8ce10a5f9902d45be326b66ff72b5dd5bfebc19bb12cbc6a1f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0470", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfd922b694048f6e604c91aca4ddc93b153d7c840f7bf33308e591017fe01e13c", - "s": "0x2c0a1bfc044a187038ce7eb54bae961edc0666d8cf5ace4b020897df1198a32c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0471", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x074108b1e3106540b594abb96ec6bb9953f60158f3cc56b541aa0ab2b4d6c62c", - "s": "0x7c0b69c6ac7d467909c36dc61687a3bbedaed0f42ad435cfee00539105f11515", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0472", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x349962295821381e486b15000687b7ad40f59a3eccd13f93938318fd74ece7e5", - "s": "0x5b4abdc991f07de2e264c55d67144cb341326aa7310da97ba53aeaac3ac70b34", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0473", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x542e87e24707e2129793e5024bf43914cab949493b9c506ee83d9bddd2c23d3e", - "s": "0x532f08cb5e51ffcbb7e0d7c7d39a7a4ec3d95bbf086047eb09dfd52f42405950", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0474", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6a3d8d02cbe316e3e38d6cf25550b9b73df5dae45831d964ff9bb28ae7089acf", - "s": "0x5e9a000ce52fd058c97383a0ee0cd64c5212aec90096eb326213acfa52e2d7de", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0475", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd8877e393868e86b78250d54bad01e9c36d361f4dc806acceb98d23eb056fed5", - "s": "0x0f413ba89bf5d0176a165d2f7033c88e756bb1ee13ebe072f48985a38917dff3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0476", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8d5fa69698216906a359130f12dbdea64290c63d812994d9386c62de9e3ddedb", - "s": "0x769c989b0c80cfba2c4487984c6971f1036630ab367979c3f8c23181d4049d5f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0477", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x320e186b62d565a29b720cd189598f549464ac5571207c6867deefdff0576721", - "s": "0x38706fee9b031b465c46957c58166e18ae38a412e11c024850fc6d9b094e68b3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0478", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc13be93e55c91d715d3e969959708e2b86873082f68d8516630f64222378a7e6", - "s": "0x414f0d0b720561f28c41cfcedb3fd828b31ac949e5b6d2c66102d54105fd7e01", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0479", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x27ef123bef8d7b4828c7d06de67cc3ebfefd673392303c6b5319797e40accfa8", - "s": "0x745e8509eddf3662ea5e8b181f246cf04f98ea99efa34f4148ce46648ea1b540", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x047a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5cb48c2dbcdae79ba081f692b01a5cef45f39b3ba34b6f49ca1769e377a4e7a8", - "s": "0x027b9222249a87c54b6d7910dfa1e55f2a5db02e86fb9fba038f7ae316b2d432", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x047b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0e50437d88bd25ecfe67ba14bb09b634df1b53ab231701c4be95db7d0c701aef", - "s": "0x6fe6dc67239695b0cff33051f06a30006a4188a9996fc334b22009086decfc76", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x047c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2a1d570ed74b8729cf2599f55f826ec5a9ae3686c5da87e0df3e90f8b067fbdd", - "s": "0x6bcfc41cac22e9748bc5c3b98a7e2a4b7145e3410a63c7b9b3993ea3309223bd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x047d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x293a0ef942de83b50c8b9693a3d31f5c6cd843079a46d4c42606a2691e605a64", - "s": "0x28397d85531e66eb833cddb35329dac5a6356e9609030c5f8d4ec7c19745fe29", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x047e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7ff4038dda83b4a71f21c0435b50b0993e41b649b0cb37ce9e8b5a63d4d0aadd", - "s": "0x2f9b7a446dd91a50b3b65a6adeb244b794fe7c4d8194d5386f43e96b803677fd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x047f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8d182434300a9977278ee76bcbb2aa0818115a829961d97c5b34bafde4508b54", - "s": "0x3b7ecdcd196d3702b0190788c4893c2b4392c57589dfcb5516e91edcac533d30", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0480", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0655c348412b1bb281ae213749a473871064da8eaeee1d8b285bc23d71fe590f", - "s": "0x4572cfa373d0e7bad608d90a67a4b35af74ebe20369f6b2d437adf02d679d23b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0481", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x458f66c8be1b839e942f874bc6bbe8100adca2babe339d32d478dc4e55c3a899", - "s": "0x752bd00097e0f5baab30acc2c0e62f71c860822cd8987d045f33c0065c395256", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0482", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc98f8a766f335bbf33439387d4c535250f41955e08e10b1faeaa7347823052f7", - "s": "0x7f7793bdfe08835584b6ccec45159f949e936321978a3d2a7b67d969e89126e1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0483", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf7bf20017f3ad4ef07a2669d72684d6c4fed6847f1d787e50ac2ffa54c655cab", - "s": "0x105ff4dfb864ce2cfeeec0c766b47238502033fb6db6cf14226ef7bc9fc48f27", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0484", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb38b853c799ba5870c1dc5fb4b3859a9b188866182a3d321ed6f90e03fdb4b69", - "s": "0x481c1c031178850a12714e574d876180f8e36a537d6489589130d3ad5b5085e2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0485", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5f916dd17284ccf1b31c5e9ba91e15286233efae6c6bc61f0edfb8afe77fe69a", - "s": "0x3058fa3238ecfa4cd0b460b291f59eaa3bf9c6e361eadb763b2b122adeaa8603", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0486", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6bf5b7b8792a55d6001327c40dba28537bd736287b403b08b3b49905e3c92a27", - "s": "0x7907f79cb8c228f0dee1c7cc0e881c01d9641e5d38c669582851a69f0c3663ee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0487", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3589ceec93d69967de04e361da236f4c9313fdd05809d461d9e45d7438bb83c1", - "s": "0x6b07d6df78ba1e2810a551458dfeded5c68f4a858f7a3b53f51ad1beaa8d20de", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0488", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x48c00dc7d9ccbc35106749c73071a62163d567aad238aa214ef304cae851f86f", - "s": "0x3a3e30857e7c5c9601a6053223f01f0ce554cb356bd85fbf5e4f3ac04b7aeba8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0489", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8de83d2cca51dc4a3b1c544e251c083a9374e36ef0d0148932981e4a3cbd1f19", - "s": "0x32685047593dd687c435453b040b492bf4a5b0226691320923cc6ed81f24064f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x048a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0c055e619bfdcf164a2c7a0cdce0b758da2011db0a45be391ceab30070e22b03", - "s": "0x12b8db5fe9b299df805fa66fe867a3a9d86ddc1c583ef515e94de9d1fb272fd8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x048b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfc8cb9c7473ba108d3c350e7fd3e525ec13eed34d4c664fc036572d807281ab3", - "s": "0x3f118828fdf3718c21268e57355513b8d80351b0686073fbf8cbb4b5e121ff7a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x048c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf7476f7663cb23ff072532dfa19c29df6ffcff79575db884914269130310a432", - "s": "0x5c5251b0899223ef288e8ce3c48444c408b277d62d52469787a6d037b578a659", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x048d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4b4cd53fdb19fe73e250a6aa79de0198c10a9430b0fc0db0a740cf5f85b65a00", - "s": "0x79ca109b3b2426266e68936127740b41a0c7a8ec0e0eeaccf40f281e87094daf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x048e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd90aae126bc346462109dc1f9d3ab988a35b1896c1bc56c54f306b4213063642", - "s": "0x097a4a5946337241dd2f8f7f618da175c2a3560253dd3a4a71bc3ae99851dfb1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x048f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7503a6e925884f45a027a73086a6dedf16150d77f4b76e250fd0a415a903cbd8", - "s": "0x26798308f3638fb2269977a4908d907f6a67568785f06488f95a90b28215d885", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0490", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7a300633c9413c1c38572d8194baa51f065b04b4fe644cdaecc7cac2e611c445", - "s": "0x2fc77c17dedfdf4b6a91a0204ef493d8713038abfd84178fb997af5e7ff4c26d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0491", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc07637cdc1032eada07f1a5dcc35e084360ae35946dbceb6a5a07054d5b221c2", - "s": "0x54ae9aa030919c122816022bd0eb91ab0279c500ef8918ca7092006fa5de8582", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0492", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2b060f796379fa34090973cf48d51263d889dbf9c9064ac245f90a1f3a60d9", - "s": "0x448062399c041b5ab48afd8496120665b0404d76539e6b18db34493a3e8244ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0493", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xaad473c963d0baf6f1c9645722ac4eed30043f3c5096b7a7fb6d340989cc3cf5", - "s": "0x338af091e5435e44dc983cb6e18de4d69b74b12f6a0d49c26a6548b0dbaf52ec", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0494", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf947740b7862177aac891faefa06d6cc5327241d8aff01a2cad0a2daf22f2077", - "s": "0x05ab5ab69ca5e22e426dcd72cc72a76f7d3c0f95c5853a94bf7ad160ae68c38f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0495", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd2d3c5ee43d9263150c50e1822a56c2e02691d7ed605522f32732a5c666c7510", - "s": "0x6315f671e2ce505626bf17da48ca269d290289bd6a69284e396eb586897f8a8f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0496", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x874478f6d1b227b73c5422412c549f98f90471ccfeaf6c52f1c5f1e7491519fd", - "s": "0x62a97f7542b7e9094fcaffecaaf510db9dce2d844e80d5892103dce8915e8195", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0497", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xaecc5b3867577dce1b96b41cafe76e8bed9de54b6e2d985673bf11ea6ce29d3e", - "s": "0x4d9c4dee660baf0b18fc1206984bbbe5dac67b6daa9658042b070fb618517216", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0498", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6108d865c882fb09f205070c71184b6a415a9ce9430eb12fb112cb2287ceadcb", - "s": "0x17d8dc2d5141917d4d0fdae8a0ca5e36389e62075d8defb14eeb750faeaced49", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0499", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x29fde128f61304990d3beb8382c1a5dca4a3dda04e80d90f0b09e574db09d28a", - "s": "0x252462ab8d93894e3f97118e1853889461c6e8698722a29110f9f7c1ac5477b7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x049a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5e7861ab3915d802e89c87c608ffb334f2802426d4c2321b2c1007d54e30f868", - "s": "0x4dc5665ba6ea699f1691b6659a4a7f62032a74fc0ff0f41f06abf493517b9b77", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x049b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x390b9895378aa4e98ae3beaa6b50ac1d60bc5ee81fb857526a9b3508aeb9bea0", - "s": "0x534349739c150e1c41a722b164b4a50bcd1d5aedf4966c00ca18afad20da872c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x049c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf7d4fe978d63df2e5d402a4ba4c951a2083401d2b05ff6078fd2e176cc695bc7", - "s": "0x240e7d3cd22932ed2018af7ad4f014cb0ce7fc89eeb649b7e2d78457bad6cc06", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x049d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbc1744b858087bfb6110eb859a779120f0b3721eab7f23a3d2038ae421623a61", - "s": "0x4ebecfbef3dd66bd6b8cd9761c1cc89d7e96990030c931b39ec181ec7a024583", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x049e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9d5ff3d053638092a292bf441864870f595844ddd7e2bf650e6b991627cb26cc", - "s": "0x51ff988ed53e0726fcc5ae4c2e684fb977940dd2e4e1c693ac8e44164543c5e0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x049f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xba4c6b1906ce5980a94829ce23b92383b6ec4e9cc65cf50aeb2ba7787993e299", - "s": "0x1f33ecbce8c55f6ae04dbc750dccb0a4ae4822c9ff5b34dac31531219845dc76", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04a0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6a9e484586ebccd52be1c6186e8200076a60a2de2e73d088c8a1f3cbd045a539", - "s": "0x670d58b7290b8999a3055b6f3e567b899ad0772823f6a2246b2ba17bff605a0e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04a1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe9846ef2b71c8cfd4f84bba35466881fcb39df8b5a6ff4cbefa672ec52e7b3ad", - "s": "0x2e77b1fd7d27fe395155088595f88bbaa18342934c31d83274adc6879b04f931", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04a2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x229a45e4608df72587ecf05142129edea75d174d2cd21c2feabb80e769db731e", - "s": "0x613f8cebe4df5045efd85521b9f38c3aa43d8a5621acc4ea1d78b0e902d6c6d7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04a3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9da86d45299f734ae43c31f515df8846524c4027ff877fc2251c20858226be4f", - "s": "0x055fb772e434c5034a1f37e462f4dcd1605baa7d11a54dbe1f994d2fb7bed0f7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04a4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6fd8666f30a7ddc3652f14ee3e4d70a00f88360f3e98b2e0c2081e16062f1c83", - "s": "0x500b4cc6f53e95fd8ccd621ae3f9389a18902c87db127dc2f3482ee48312a1dc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04a5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x03ef3e6302164e8421be577f626f439a86f129ff04973c34e51abb5d1bd11858", - "s": "0x66166493ac3894285550ad63c16a8762e3d75400b3155b6d859ed270ede9c299", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04a6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa530095619e20681dfd8d1268b08c33beffd0f70d5c5bb0530340bc04d74d9e3", - "s": "0x5a5a8cfec6ca37ca6ecfe3f8514a5cc6a22756848f413a222164d4d37e44fa60", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04a7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa22547817703207f6d706c5a7201a6620127d4a1ebbba67844518907e3f18482", - "s": "0x7d5d9a3d951e00702b938dfbbb4c5b9a8f031d3a85356eb8093968a7eb480225", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04a8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5a7e149b54b4bd8d82c3a30faf24b478df422430f2311167baadec3e291a8722", - "s": "0x3007db5265621ee848fdc27b344ed852725a1b72f14e7e285dbc876f014028f4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04a9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1b6ac9f1e781b0ff015917d53de474f98a9da49001b77ee1fd2322bbd20861a1", - "s": "0x1dbf17f57ac9ce45ebb74d30e2bafb9a081a3215134b4e3ccd88b8e2c0f6c01b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04aa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x628e13aa0e435c06ecfaa7c82cf7e8dbb1744fc7c255e0c62c635f6f5e201976", - "s": "0x0996065769465429dc306b592e7b313d937350282f82a18f56054207219e20e8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ab", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5fa7e38e6b3e3ed16e7cca8ae11faca1ba558fc4886e83ca0fbc251f3c02b2e8", - "s": "0x569cc8c2569a2c94c285da643d47386041f59a765eadeb7e0a45c4e0bbb55131", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ac", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf3b427a85f7d7409b3660751c5d9db8a4d42f6f5fd1a93275a328f07fa9b108b", - "s": "0x769021923072877d8258d78a911657f886827846e6b0f2f7d872907adef14cbd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ad", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x07c0570b94d46d3bc858624cf337c5fc8a0a8c0930e3dd62e227f840fafec919", - "s": "0x0d3c55a22725a0d9742643984ccda08cef8826d8adfb72e6a9f45adaf283339d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ae", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf08fac1936887846a373ec5b98b61f33cd249fc40e10e30a8e93f3499da61290", - "s": "0x76a8451573c17e1709ddede31255549b8994e78f058f1f98c035f4739b6c715d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04af", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc46367369fa29c6ddb5a436fd02634df094d1cc762494d720e47f9b2275c189f", - "s": "0x556169ecfbe54a422141c3f3d6e63f406f79b226344b401d68733cb0ad5fef95", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04b0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x111c87468cc01c68e4b3ff787167e57d92ee613136d33ba29d0a67f8e4db57fa", - "s": "0x75c005483ad241fd08ecbd187d19b8a94702d481cb9b11ccbba6568ac34fd750", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04b1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x958caab6f50017f2aaeaefbe7ae7176173b8ad1c9fca8716c7d6911cd7385ed5", - "s": "0x58e009d154f24612e8a593a912de375f2f479397100b2440e16e8f6c0a2c5a3d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04b2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf96707484f6553f04b55af1a2babdb6ee0ee0fbf94e07fa7e8e4be906cd27ff1", - "s": "0x46f0d4566ffb25625ac15f305fd1dc59234909fad0c1b0c84ac274c4ad079696", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04b3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1f1b1ae3a898f1e13c5072905dfd2f815a35a56112102d0d664ca3647a5f461c", - "s": "0x4c622f99ae193522ba71369c25cac21e773cea7867a85ed693c6eabddbccbfae", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04b4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa82f4fd5f0d8174b0a7ba97e6bb6b99d8299b808f7fb7b2320ee58520dbb2720", - "s": "0x45e9e303bbc8ece79dec5299fcc4d4084195ae50f36318ec6beed3501a5b41fd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04b5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa687318adac225a963b8773509215a164d55a59702c1fde81f7ef92ae870a8d3", - "s": "0x2f286fc5833a2089e3ba748964f8afc7689536e80de72d8c5bb34b886926272c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04b6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeef822430be5b9da8ec9b1a49d907d4f02b65eda90a966835b0582e6d9d8d5f9", - "s": "0x09f69e14b47c6c1b5f4cddc7a211f983725bbab483504a46f9e77dbbebab8b71", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04b7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe01ad24ccc16ef50daa41e5eaf2fbfc12b26404975d3efafb4d541c688274371", - "s": "0x1c0ba022bb740f1cb2aba09763d42ffffe3967b69c1f554968d6c4d8e1c83060", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04b8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2a5cc6edf995ec47ec760c32fbc185c20ae58c8d527e90921f534e26443e5a45", - "s": "0x39ece9d32ac4496de0de542c57181d7f232d47a894280901d398d07e0cc05c62", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04b9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x82a38bfd18ae51b6f2f124d84647f80aa3cd051c22a049fc3684d07137d9ce7c", - "s": "0x640f92afeaaead948b84cb6a6ac34b3889e261955606c6e9fe3b9460bebec3e3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ba", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbd3227f4026dd4b561bbb5d8b818e7793726922c08c95e7a7bbdbc6d380bb1b4", - "s": "0x26f278361ada67531d1b33b9e4adcab007d68a0d8512a2ed77a06233b9d2918f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04bb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5120581a72c00e72d55dbfc7a9e0db93182333112d7d147a9a30e0f0cab01e23", - "s": "0x096b9fb237f69c40ccc3b33bd8b419a2d28fe26c433b7edcefcc6e031357650d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04bc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdf877e0960edfd8bd03f7176aa773e0f76be1fb510d09bf87949528163509436", - "s": "0x10439dff431718a15dafb03b836c493c370eaeaabca19b240b9bca0744955e09", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04bd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd9432deede08c7432f15c15656dfc91386514fc1bd914e6fefa5fd158f14da65", - "s": "0x092c43a6bd1b1465b6b1a84a0a68799bd85eaf94989e795fc11f52403eaf2b08", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04be", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x17cf5e9283d1a61970945b6a0fb0280ac4da93e1b642abd76a8e30f0d0200657", - "s": "0x53a3b0cecf1d98e452f63d7f5b202b3318b41bbcdb0d9f856ab37f3f6d5d0003", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04bf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbf7df9b5f89d9e46e150a976766d4d56f0479ee5cb712a7c962872a2c411cb1d", - "s": "0x38ded036c6655e5071af9b02f89dfb25125108d1f552366ebf1858e91da47f90", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04c0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x678032fa526c6d78145ee48b1798ff678809357c049417c88fdca10cc6a34a7a", - "s": "0x6feeeeff3c3589102aa53022b42661f7306391cca920f749449d39a180cca8b7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04c1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xabf7f428073635a1f073b393fc4e192949c71ff590ec5b6208e08f311b789e56", - "s": "0x511b340e155f832540662fab8ab98766308cfc45781c2013f5476d6e7a96fedd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04c2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x670bc151cb05d97ed543a745f69bf194c91313b3e67c8004718b2b75c19ce062", - "s": "0x1e0c44d9a2b271cf850a1a1b5d5c441c15b740fee83b7d6e39536c24bff10995", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04c3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfb6a0b351958490b389c6d5f7aa6c0626cf5ab8365f4acb6704adab5072ad41e", - "s": "0x425f892dfd1aa4d9e22640fb37de43925d4a66c02ef92092a7990d53266267fd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04c4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbbd37f719c85128b28aa4f0a25ffa00ea1e8de59b610d0525220d1d04efe77fe", - "s": "0x32853f6f50ca6dcf17ab7d2a4fced168e124434eaef43a39b3a1bd1de28d1a0b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04c5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdd02b847f54fd37fe61272ad1c3fa9443d033e2ca720107534bf19f4420151b7", - "s": "0x4b58ecca3bb86f98e626cc5466bfc7d525050bde61aa6cef14614c429ac33838", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04c6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x36bab01957e293e2d2ed4661ad8fa1aafd99e11873369b0e64fee8e0679b58eb", - "s": "0x69d8046d82bed4e657699e92a846b60640ac6733940d4de8e4b5facf79ae1605", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04c7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd760d4aec0554c8a951c3bcc270269fb62f0c27e31a6d2ae84f371deb3cb7c3a", - "s": "0x0dc29b643a2a69c49ffefd4d0ccaf74e18ddbd8025cdc914a2c083ae510f2e16", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04c8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9dc9276d230e685ed0dcff0e6b86c4342f45295af6c3bc9b80dbebce1e49e1bf", - "s": "0x52e494894413954a5650c81e4c2c4ce5c696fffcdfe6eb1266c8f68b288f87b5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04c9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc82891fa2ebf9a3b2d6ca9c5ce222445188ba7449ce445958993fbb5dc55d0a1", - "s": "0x60d8a90e57636dee6b05b29e134352362f217eba6e95be4e8e7de208e1f0a0c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ca", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x847cd4cc812a2da9ff60ecaef39555dc8ae41967cab0f7f694b37d71d14963b8", - "s": "0x373ce12dfb10acf84263148ed46d1bc59226a56fe64d973e0a754a14099ecc67", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04cb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8c5500c12632f25acbfd7f845abb9033158375162b8b2915f28372adfd447284", - "s": "0x3df68d1193c1490b2df30fb929ebef088328f5d71e0efaabc33769da84db72bc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04cc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x062cb54d9e091333a2cab9cbfde10940d7ccf0b785d1e9ee5eb07cb0f924e00c", - "s": "0x38a6c5373fcd4b25b49ad59307b811b05f512975350085617e7f93873b218639", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04cd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9eabc4f7ff8ebea5bb8c6453bcb961c6ad77a8ccc2264635697a94326ccb0ddb", - "s": "0x2922473615c483980c03d7b64f12787172e3efaca2ef5afeed4947c848d801eb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ce", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x541145737232122dd74c2d395ac59b20dda6b71ce441f1c5b3b22ca6f2bfecf4", - "s": "0x21c586dad72ef0a94dfd20a726886616b6759d909cb999037b8f59fdc8925898", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04cf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf34f45ce451dc268654f610058e4981697cd9fbafb3e85655c9dfa0a75ef72e6", - "s": "0x0189501b8bc7eaa2316851682d67b6f9c7684e2ea1f79b4b923e2b8f2ceeddc8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04d0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1fd7490bfd466f6edb3a571a5edc7b55520fbd518486b8a608f06147fd96e118", - "s": "0x76c784a7660a2a48e8ef8516abe894d33a62b2fc70239bb0e766967b6d00fe22", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04d1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdf8bb48d5a97c2b132e68adeace0ae7fae9e160deaf82d539638b94266d37c1d", - "s": "0x531d1429b18b1f8eff02705806a94573c76344ffcab051c4886fe6126e0573d3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04d2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9bd9cf1c72354ef622c8509d20dca775932c52a135742d4e690c29fc96105e8c", - "s": "0x4392ec29e8a86b2e2a70aadb7e01a35d805c73335775f27d64e25aa4b85fe3f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04d3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdae0c9f74b4b9801c0cc2583078138d42f3487d615bffe1b3b09af32e1035334", - "s": "0x1f8677a03b98e0ab1d0cc4488f5dd74d0c2266aa6e474f0f96ef11e0f6b33a1a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04d4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3ad1f790bb9e726678549e3ac1da1e9d3a646a3775d030d715f3c25fa8b94337", - "s": "0x3423fe2a75caad32bfb2a2a99b0efc81fe993cff3d6c7cfdc77ce9a89bf6f04c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04d5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0356bf1498dd4041b84996f8159131e2cc2aa68e102cd84d18614771b8315429", - "s": "0x5d791cb1b7aef40cd0b84ac628a5512cd012ef8df88d25e3c1d11c76821628fd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04d6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x57c1abcddfd20e2e9e0943cc2378378604a800ebff76f3bb5f378971b1f1e575", - "s": "0x6313a432d3887d27da825fdd6f9315fab04125e257664a7383b76fe51bbf05eb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04d7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x774092c070f3f8764bdc77b62700370973d14330ec4e45a9d6f567031ffcee7b", - "s": "0x75ee28196ac593636fa83ec0ad0058184f97d3c8e8577f6bcc95e75549049380", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04d8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf78008bfa7766dd66fa26d438e04a639db36e62fb620a7b5509133a2167fb224", - "s": "0x2c6dcac1227b87a2337c22a46e55c02b6a550f5bed593aa485c34dfac8f601ea", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04d9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x50465ae34ac622a0785fa5c5cc621fffd211ab443ff92bc94ff1498e6f47dd7b", - "s": "0x7cc186e7bb31bbef4dffaf410e290048f5957d44c81662bcb972e0a6ba12a5ed", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04da", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xaf6f27dc44e9c1129b6a24d9223cf5a107f613ba3e3dd43abe2ffc0366f87aa5", - "s": "0x6b4a23350ac379225247b2e9b9988067d616eeee7f3d285dd2e861f416bc8589", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04db", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x296a3de45f71836214a36745daf80bdac4f50801d353f934d272fbad5f1b3a34", - "s": "0x4d6082cb7842ef7e2de8f3c1b271c64ee2a2e6b58eb875cd11ad7837d8226795", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04dc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9d40734a7c5f4fde22252a5e76a3d4057a2f7209e35b5399b18f29ad9cc5fe11", - "s": "0x5ae4767d5b23df5b86189303da0fe5767c2253b745001d48d2a822cb2c6d959d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04dd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf6ff161f1576c6637e874f2c7c07b0ba0a61b3b78b419a32bfc8b7b1057146b2", - "s": "0x0be6181a011d869710b26389345f688d0a7e0b3bbfd6795034afff5150c140a3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04de", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x48a45eda192df09e3482ffe9e596ff1bfda3d61fd7cae243d55722bf58dd526f", - "s": "0x6452a06d2c51350dc398771848fccf46ceb66b77e79c8f8fe728d094649dd0c8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04df", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf49b32b37cf28e54b6fc82288e8b4df9b2759a33b99fcc51e009b16a5c7c7017", - "s": "0x389c46233509a1efd23b7fe47de5f16b0fbc27f66720beb427421c4c6520020e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04e0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd6cd09de6609c9dc2bfbc9c73206094e1bfbf7cfa765da8ba7f76e576f38f4a2", - "s": "0x24332bde05f3e5eae8234993100d4b0d3b60133f68e93fb57e2f819df4c37017", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04e1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x991149b6e46a40ed21f6091850c635a88a7d616926d44149449ca206bf411977", - "s": "0x408f774cb613ca3f1f2febf682f0a64e1ebc05816a3dc8704020574e8e20b669", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04e2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x89e28e7c44e66aec9b915348d3da296d4e58e64c4023955aa3642c9b63c875fb", - "s": "0x2e5e2353d81c8fd0a354f0862bedfec62ef56639bcec452be15d95811bce8cb7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04e3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4ec114a0643cb71d2ddef00b8ecee26ae0ad0fe025717b0b328b6b552f1c50ef", - "s": "0x0acb6ec0dd791a33b57d4c6cccc99c1a32c72363cddfcb71c91c4d5f4be6fbb9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04e4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdaeb8a8d022a10ae2ff8a3d64851aef9b868d5f5646698e2d1d45378bd29dfae", - "s": "0x22b07bebcfbae0a61b14121c8e37933ca02ca6dd361a7de87acc65e1380557b9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04e5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x61fcce74d0408f1d4d1b3e8797e2715ce61065aa433df942892ff6c67e5b58d8", - "s": "0x209599ca7a69a7fe98a1234a62ed32f0b42a170522dd877fbef5e11b2ee87a76", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04e6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x123988d1ad7c0bdb1e98c2c89ae9d89e4e49b7ec5ea146288ceb54c9260a5760", - "s": "0x0d56752ac00d5e90db86e1c77a947cec4e81cc53d88dd710842e5d641098fbdb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04e7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xaa2b75276689e951f6e08d8406fab8f1f182069db34e4926435eea6fd7997bd0", - "s": "0x3afd9351faf1fbe11877d9e04dc6b1ca8589585c747aede7f611a7281df306bc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04e8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc07bd40bd84f15144eb99c2ff107390b46f77282bb1d8e517a12bba63c66c21b", - "s": "0x1f337fd2b58c963563c745ed9bcfe112cb7bb12bd87ca55fdf726372890486ee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04e9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x029011c68f67acc9ca45ea95c1b509adf83ccccde89d36baf17cb3fcd5a78096", - "s": "0x383ce4d89cd8559afa97e470aee9226d1ac2ca0a91cbd3f3d6ca8da507688a9c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ea", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf8e4412c1c7945c7a4219e01964bfb6bb32722f8e1f91761c7dc510a10676b08", - "s": "0x43267cd7ea9d034878248f281bbc476957360795da9e1f4ce274789ec8fee1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04eb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x122486b936436e139dd73225f1d186aabc5a992c465e58050c617cc0138fd36d", - "s": "0x7d60de0b64b3438d2eb116b7487ef6a4e656e6b3f3cdc18d7aaa5510cae697e9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ec", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe5cc7fdb6e34180daf2094d2c490dd722d09eb7509f6cfbc185cefb56574f13e", - "s": "0x1830cc88b3a94e92c7dce5542c564976593e5ce0b65eae90db2bfe1d5083fd5b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ed", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf484f9efda2e464c16d16817e7703ca19f7b6563d683a241d12b55001cd02261", - "s": "0x0b8ede135ef1974a8582315719cb9abe584dc337efa6494fbb4724faffeab71a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ee", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdde9a5b7b1aae233228230331ddfa674244a7df19ef7bd55219743efd5cfefe1", - "s": "0x07e8a1985e75ea3c25d5b1d475561f543f63c6882c6d34fdff70c7992091b513", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ef", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4e7587c98aab6b07a64e0fe59d33310022d06ce6f82d8fd389bdabf8aae7ac90", - "s": "0x7a3324b2f0391fb21b6667a1efab88d0c531f3c35416a900421b561a295fae63", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04f0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6f8aec35de7fb55e1728b33331ac5ff2b8bc38b6ce808dcb31831c91be1dcd5d", - "s": "0x1286fa4fcb65d88fb4af0cb47eaced4aca23c20798d8330a65a2fa1d756b6e91", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04f1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x033fc63d7f1401b67738419749d7c8f2d22ea587e2810051d2c60749877faf34", - "s": "0x51b5a3f96e8d5cd1b29a663ee7b9d099bd418d9baa174deeafd2c917d49b174f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04f2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x343b551be39d9111e544d5ba7119a08f13bd6bece8f73afff21e36aae365360e", - "s": "0x4cd083887a0bec35fdc21a27347beeb48ed2b4e3961ba38ddd02ce60c7ba8b35", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04f3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xded2aa0b260a6228c62ad11d01c064bf606f97feec63fadb5ef223ea301b4259", - "s": "0x70d3440c059e199b89b6530e9b02f925e80b3f3cdfc45e0ecede236aef28480c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04f4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x39b8587347df1b8e7b71b4243e8b23ceff3b5afd5c1419acecd79efcf8adf301", - "s": "0x5c67c295c5ecce8cb6922c198f3071116851740a2fc2160dad5b96aafe40944f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04f5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4f368db21dda6bb12951cea2a2d79c50fd0a22e6bef85501e3625f3d2f47f6e5", - "s": "0x79f641f7ad521e64b7b68aab591da07984dc734f4daf9257d8c8c3a26ca4fe47", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04f6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x48fa00f9573369b3260be0aa2ebfcfd2f9a23e7e56a8d7888d0fb3b385a3d168", - "s": "0x1b2b014178a2cdc6a9b22adc8c225fab8fa7bbee8b48431192c163b3b776a68e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04f7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3dd5aec65cf6eaddf0e7f49c833d212c67032b78b0f20d492235b789390b822e", - "s": "0x1bca4a367dd6444264fb09c642f437d7ce4b5151162238f0d0958e997de28734", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04f8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2b54bd02ea534f5bc09dac6feb15b9ad1d9a7b631b276a387bf9ef0c7590f3f1", - "s": "0x0abad2dd1f4218901bdb0fcf51fc37d222638f518d6c05e5ed5cffcecf33d7a0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04f9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa90edeb53c0a88333ba962f025a2a5422c49d1add41dc476be47bcadf0bd1a47", - "s": "0x6d34f536f841787d490d5f7a2e24768c26f9613958649ae2d62d8fd491ce9c6c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04fa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3c2e3e207dc93f3f7cb4a1ad9d2642db6d74002224d66a23d5c234faa186aa45", - "s": "0x69fc52c10dc259c24b5f44a9b2ca6fd801306ed718837a55c31f98722631fc73", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04fb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3a0dc31fba76924fb295995f3bc5c86ebe54567f9a8562d67971773915bf8053", - "s": "0x36d034c9f7d7a7a11549b1de97ce650d6f160ebbb9b486c2873f483561557c8d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04fc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3264e21132af681a782f22846f484523421f75ccb165f130ef448be9df4ad6c5", - "s": "0x2dd888edd1ff3f2ecf36c033e0211453d70b5fefc066a2165ffb89dbe8d84a89", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04fd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcbfa545586e503e364a51c3bb5d5e80745ff827c4efb7a99efb75a33ab2bd3b1", - "s": "0x15cfc6e9c3972898e9d3cc5201a673a9905d0b7809e3367b6494a8a43fe5f956", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04fe", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5e72e7bad851af8261a86930cc75a744c47bb55e6d82493c8a4fe60268458756", - "s": "0x4516cb41a7f1b7fa960e2a0d43e17b90320262b3f46030c3469c5c6fa41c6f3d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04ff", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2d8aebc89dca195fe8a1e5a0b6bbd475145ca28e8308f6b19826b2f4c1dbc0ba", - "s": "0x06d7d4ef595a5b079994e2f0d4e09ad1880ccd051d4e44fa69d44c2ac694782b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0500", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe30224849371b051c4151d2d7f7e21104b26e8cf7903efe59ce2bf6d285c0f46", - "s": "0x4f656f810a9005da8b6362e4becb010c3b2754ef3f1f34e0a8fb3b91490f7ed2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0501", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb90da6c7ad4d0b28fe58d4a2737ff397cae8e02980c453232193a2ce0ff84d09", - "s": "0x5db386c71105a364c236d66450baa8e2b26e937c053892767c7b8d8f73ba4f28", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0502", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf91bb7956572b97cf345779ed18115c7286b05045351ac998b1bdd02594b15d3", - "s": "0x59dcbb444ec279b4de383c1f176c3ef38114aae0237aa3246ea31ada97a59ee9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0503", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa279a6377837c1f9eac69521e19e59f02dea418c3b8405cbf6f54a8a8726e8e9", - "s": "0x7f40b336edd7b794529277e164455418bc838e0db93dd8de40d307e658de8951", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0504", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf57888b52612e14b3d471c07e9ca24852086799d9b1bc639af2192b863facf8a", - "s": "0x32d4682d4bd4de139d8edeb378ce57386bdfb18687aa235a905a3ec4e5db55b1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0505", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdb334e6034c8fccdfe6a20bef393968f163d3bb3e95547bf3b4a2ba58a5f7865", - "s": "0x42eb994e5215d747cf8ee8fd832f226351b42635d3f1cba644906acfb34bf319", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0506", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb9f7e8e69cd1816744f030c757ea301ba8dac7fee888d40809d23c1985481c93", - "s": "0x378ec1bcc9c5bc67fb93476966f4b2a4c79c25083bf61f87bbf3a391c884475a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0507", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0b4b595634e4590a251b2ec2797aa6684f1e5107d670645f5d1085c360579047", - "s": "0x2b72858f6be53942ef4a035e1a8f99aafa4c88dfb8eb9c0bac80318940a15355", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0508", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x04221981b2db3f3eddaab3dc090016ce8454bf36b5596388659fce7dd10f43d1", - "s": "0x18ae3dc8976e86cf3582306b7752271e356d0b274c23c0191d5fef1efe1b8cef", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0509", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2569ba58bee0e7edd5bfebda1987bfcce97590f367607683a0ee3d5d02730ed9", - "s": "0x4a9fbe09fa4704c673e2829be2bba769969df4eae19735a96956948b650de28e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x050a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2454d1d3625c49208ce6420876efa4ca1ca9c1c06812eaae8eec4551f863c062", - "s": "0x0a2b3ac6d54890108175282ea1936b4ac15de4e93296e67620a1a119c43d7cdb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x050b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa5550b85a0981b5808086fd58adc18a8d9e94305aed653621ad8aca03e07b8e1", - "s": "0x6d0c37b92b9de1e07dddd0908b39c0862a3b189e7ffa9a0dcf0bc091951b5816", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x050c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2602d3d7db61b167bc454127bd2e781b50e4a0c00a0ed11e3228654864eb4535", - "s": "0x53f2db269acbf2f4b7f59fd5fd21fc15b6e3625866996fc171d42ac3b47da5a7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x050d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc73862b4ddd5b420b35baa45f8b8ed2b52fd619dd2c1e121f7a2f5acb5758c14", - "s": "0x0f4bbb8050aa4b072855f5811b6723d8745f328020c55402df53d45159ea4cad", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x050e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8fa419934d3f8aef81e7e7f7897923ff50e95d5204e4f96e9b5a9cb56cb0dc3a", - "s": "0x58374b79609d4d8292916eb9ffa12aa69fe9a398edc490d2ade19db6f7c94831", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x050f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x61301200001006841da7b08f42f4a9f9297a91a2a9041431f2bfef6265cec92d", - "s": "0x4ab8400ee5cfcba62e61c803d29b52abb32a2ec11cc77561a89a7a5ddd9d330e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0510", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x48c2956af65a9a0bfa6dfed38cad230d5083b856f82395debaf36654859db78d", - "s": "0x2624841f9c958ee5ed89778f5cbed8b882258fab1cc240f9599f6461e0e4cd4d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0511", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xee4c8b728f1bfdff0623386ff29c82d7b428349208c1f815f2804fb604f10607", - "s": "0x650b2cd2ab4d991b514e83e539466915414b46fae75cf2620b3c504c239b1cfc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0512", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8443c3d7e839c1f9857c634a583ca3e8df61dff6267b17c8eaf1347d5481dfb6", - "s": "0x3a2e506ba6b3c1b5804ce0176700efd4b221b4405525293cbdce7a744c40c0a2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0513", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x253d24a0e18df1d37e9a6177cb5e79906c9af1422339f97e392fec3c0f634f2c", - "s": "0x1e1b3703a397ca243a50af4d00db9cbb330b7b3bf2784dd8e7be05d3cf90eb39", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0514", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0fa95c4eda88c8b5dda2c82943edf357b9232e13176026b2f325c8d9c1c0f2e2", - "s": "0x6fad11b48425ff2c0f7df782322c33df31820422ceaa9a6454c63dbdab88bdb4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0515", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7eae600f3fb2c7e11803591fe2a86772c56f98c5500b9f55b5e3f8adf85fe36a", - "s": "0x411f5a9f1a4035dacd9834ac9b76d89cb319c8b3a2f8880024db010306ac3d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0516", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9d6038463e788bc6be3cf44b5098d117ed7e6c0e898adb774401ce36e89464ca", - "s": "0x41a961df8334754228f72f0a960f09fe829a670f2a7f9f427648d87a14eae15e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0517", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2761d6d469ae83678a84ac1795fef41f3937ac39d8b5390e865eb28ca95f8ccc", - "s": "0x062a895c0a4d068c67020b0b5c94f223615918ad926fb3933889575144b532fb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0518", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x32768c99e480f7eb47cefcbd749221555c6803262bf4563dccf27314048dcbbf", - "s": "0x7b8298376c92878ae872bb2aacbbc3f8d852fd94683a32737fc8816a23dcd330", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0519", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc404b3a22bd7d6e661b45a8dcfeac130f524ab6b13d97b42a8e0b3ba9a57ed8b", - "s": "0x768eb9d808091645ec8efa2763580f279d74fb024047db11a79b0e745dbf1c37", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x051a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9da0b6423e33a7c0695c0c72c1a1694b644470b71d8607fa823c1b057b07f4b3", - "s": "0x73eae8b516757efc512459967d8603b08257099cef79e26658e23d56c0b23807", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x051b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa412ac3c4f3d2681fd61c2865ca244ad0481bcd4df0a58f6d5bd7ad4ead16f1b", - "s": "0x0c6c65de22cfc287f0241c8cb77b4968e11c2da3dbdd9848a6c3693922b9dd80", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x051c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8f8e8fcfb01eaf09cd9d3bc28a80363b0519e3b178555d66f2f01ce278bfad1a", - "s": "0x62e07fb09f052fee226a2c6290f7735b65beaee1fe09ff14aa4cfb880d0645eb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x051d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x13fe01fa4e14c8edb95604b3593fa29fb0fc342f42533687498e0451865888c2", - "s": "0x1f68d34b21f114e6f073171b2242aa53e442a9cead5b8c938c4b3541111665b4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x051e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x51285ce9864e355ea4921d748ac04c013ddbefb8123374b7c4e52187f8c2c92d", - "s": "0x1d6cd27f8fef6575a8a673efcf209fd6feddd019ca1f3b7f2307ad44c6cae62d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x051f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x89091cc20d35b577133ea4e6f271fa64bb37bb370a66a54a8fc4a846a949305a", - "s": "0x21de00c43d87595f0c3dbb2837785bf8b89806997b2ea91815ed1534ba8b1cce", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0520", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1eae9d966307d350e8560130f4ecf09484d0674dae176925ed5fb67a0f4ff810", - "s": "0x7a44f67e3864924fd985aea4753241200b8163814eb33c1263ff76c82cb71254", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0521", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8c2fda7f9dbb1155ec9e1803ca471cbf944b6e56f21a2474b982baecf570113b", - "s": "0x4143c42fcdbac11300d145e15c41ada9adc1a2c7a16152cf6a32c2cca63ca642", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0522", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb4614ce18c22fcd6fdc796c8e75546ae4197c7fc20394024a7f4637744a63697", - "s": "0x25b7c0e85a5c2230404f05155b537fb4b3ae788076c8ff8998ec876c2c1d2d5a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0523", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa372f097b56d03c9be4868ebd828ae80789534b91cd8357e9c6b493fa2fb6cc5", - "s": "0x41b95b52f46473be81e3b7c6bb45b9db5b0a224d253064d37e0c56a4c474955d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0524", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0d2806664a4d5601af2a907fcd8ced449c337523fbc092c25d029ae4a7aac24f", - "s": "0x5a0fa81ba408ef3cbe3ef16a5bc081d92a40737964aa4734d73899afa8936a87", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0525", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xda9ff6b1384aed064faf0fe66858c92d8840e78d51e49c197e0c4de01ab6e177", - "s": "0x29b76f2c3983f9df13428df2a61c8fbdb2d921fce4c53c2dcaa27e43376d435a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0526", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa61a87bb93a34c65ff2c7c3a7021cfb3bc0d93f0ae48f3d8a40ed2ab826a95dc", - "s": "0x6695acf8a48c3dacbc43cdf44c0c434f58a262264cfb7ad65a115570ab57a1a3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0527", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x189d88fedb432da8a7eaea99ebb8f4dd715e7598c0800e6e65f7d93e330deaca", - "s": "0x53be09c1ecf12cd5bc0760347239c4c891ace2c9504293e349eaca18e8029ecc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0528", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3b25b22b2b07b832ddbdd29ac8a8b4d6f10d068e50036ea16b64b5a78ecfb854", - "s": "0x7db1608e91ab443483584ed7aa1bf4b5a4bea911c07074f8659617e8b142fd6d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0529", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2d2e2b256d0796285bc5fe6c3d561034133057c51887b7baa375ae815ccc0f69", - "s": "0x70f08110a2ddce34da2f2af188a5505ee1e942ba184b767b403d2981ce415752", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x052a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeff2fa3e6a0976f0cac76cb2ac3bfa7eabc5365f8277096b04cf3c649c1df832", - "s": "0x3d0403c82a99ccbdc3b17797dcb60d9f80905e472a4141cc15470046296be3a8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x052b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xca3b72403b8db6ea079c0fafb4393b2e6f489154f9e4ca4b50f293d6f20469bb", - "s": "0x21c72d4f7d0537b175f3e888cae4a0b2a768912aa97961a9f105b8b71934ef2c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x052c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xabecbb8e88d17a38afad6e7c9ca058f7a00e1d4a6861706b44ac97796b14b4dc", - "s": "0x7444b86d83f9eee879ce3539031eaa80a07f21c6f6d2016882d8f5481fecf1d0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x052d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x48fad529ad4ab85571795297127b2bbe9eb6ea27e8cbc2b528e599841d042dc9", - "s": "0x7a23b85d336918445acd4556e1e0915b676e44b58b855b14664bf0faee10d17a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x052e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0232432f0ac36844c9d2dd4945adbe13c259cd8228e5cdd9c504e25ff73fca4f", - "s": "0x43d071b7dba82eccb32d503707f9a90c29c302eeaf66f49a93791efd4810e1d1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x052f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xff4112517fab0410923e311476085b58792b08afe0db0fe82e23dab642b8c98a", - "s": "0x76e7064483082136b650b8d594aa6390341bfa63c851f65f2fbed2e9a2f05d4b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0530", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6de528008bae6d92976bc72c6aec43505f71747c5524f76c19583a477dc0b76c", - "s": "0x5783605ee885bcc7580ebb5a1e0c0e6228bd32828c868979bb8da050400b6bd0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0531", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3631060c8cc9892eca741e2f211d5ca160eee22da35611260d2acde7fc601eee", - "s": "0x1dd01a4971cf2f30edf9cdaca23589137cee67418ea907d1b4021db4ab4131a4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0532", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc606e05f6898e55f0cc1b8565c2554a8b07995a35ebbccca9b1303ead4726444", - "s": "0x31bb1b7d23d9ac7293f1dbfd8cd642d42927a4a2d408bceae0b8dad2086bc198", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0533", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf26ba80efce01e975f86db7f5d832ffa11d2dec697ed9743405beebacf4461de", - "s": "0x34ac05f8d8b50ec0cf04333176d6c5403d979124e171a41c1a852951db6c5567", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0534", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3540fef6c618204b87fe41ad64755175d75c22c3344855ab11b06c1e739c11cb", - "s": "0x7f5d9dc26455e8d695d460fa159283f3f2ea0b96506fd4a201c9770ee5b4b928", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0535", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xff0cab014d1252803049eac472517166b73eae2efad5295354a09165b0e12ff3", - "s": "0x626c787e06335eab52aaa0fa058252328f57d90830876abd5df2a413774213dc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0536", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xca9a997773430f21cfdd9ea59f1d3b329cd1955bb5e32a90a314fecfe9cc33d7", - "s": "0x53a96ce9c3e260052482cd2a1b3971cba528b668c5daaa0ddb21e1040a38ef11", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0537", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x15192a98d74dd1caa615f03399c1d747e0dbefab665de39d47ac519596660dae", - "s": "0x525dd7da88757a6819282bfa5ac4c5b4b4fd19b4dd8f5dae5bd9a3f3a7e9c0cb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0538", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x21724a5450f4bdde6287a1aca4967bf5d4fdd9ade3a8e87eaf1c26df1d2ccb8a", - "s": "0x7349e7f3bab5c5c7168f4edbb5a56049bc49c0d844339cf547f01f36c3862808", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0539", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe71ed6591ab9fd33d7db273e79c78484f68256df6ee04b56c424dcbcab012354", - "s": "0x26a9843950505bcdee096a8c20788a38f5766e248bd879dfc40dadc27ce3ffd0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x053a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbdb70f234f6e7a7b649075f6a4dd4d83d042814732693ff4b63b3cd71781f7ea", - "s": "0x62c56775fb8c31bfbb6f8c85357286eeb94a65a19d0a1e35c4c8467c7dd9b632", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x053b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x29b75c3ec35670e67b81d52a2e6f6e79983453e1c1c3316e4d65bafc434608b1", - "s": "0x545e2ee13274884b067a15c529bdc865373741f65e9127d9367dd61f8f78ed39", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x053c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe9de6d6f4013b7cdfacb3cd7434ebb88472877249997fd802f9579393770f23d", - "s": "0x234a711b618ac1a291a2e502d745c8c513474e6b5b807af6b56ff2f5a0c9c10c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x053d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x60c660b64daf4ddce233635f83cc61b1f7bb1567da9e2e18b16ed0a63cd9f528", - "s": "0x4b189928e7d1d80f67f42fbcc161d5d72f6a76832934aed211708b7f2336bb1b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x053e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1d5eda102f3793a74cd044fd75dade5e4296acbb61016607673a48452ad02e05", - "s": "0x0a9fd94649a9f1aff88df4092448f8530d5aa3cf66c95fe23c6cde6e7ac36a4c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x053f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x71ca64b4187dab9c2d593ccc3ce985b03def014da9049f337cc3b0a5aee8a75c", - "s": "0x3a0fc1bfcb25ea62e237ddccf7cda183f64c5e3032fc1095e9ff8c7cb8e5b4ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0540", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x01169891c9650c3b02974b16f43c8d63ef7e65a3f28b22d5f2c0814d7ac2d9af", - "s": "0x5babfb6eb1bf7374866b0d31deffcbea72282ab8cf001b2fa79bccfcf2a8b393", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0541", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfdb7e0b96fbf2c28cfbb72343f8090f97921860138e0b02b36c18654499145ae", - "s": "0x55d4b1f1734abccd6d93bd7afbd4878ab63e70d73b2fb1f110b9ba2c0dc46992", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0542", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xafe6f89a7f4090be8c1d80291753efd6ff9930345e2dfdc66eec34f3e8a82109", - "s": "0x5e848060a90ece88522bb02fea028e3d160605592c1b2af7862bd0c546585dc0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0543", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xba8683e4fb81c08c3ce563cdb2124d1f863f3fc6b93a65cefd6e0bf197ccd206", - "s": "0x079db3c23a7069a302d8cd009fa761787c4e5d2e5e985dd4de28625a9323b658", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0544", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xaa225eb580e4fc61cf56a19300fd7393c9be288df897b2aebf96d5416553317e", - "s": "0x19bc17068866d2be9d8ff3833425018bb3d90e0af3deb91516e6f7bcebdce95b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0545", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6d6667fe368465e13044935d5d328827a39fa8ef20da335dbc23ba866146ba13", - "s": "0x437e272bc8bbb6c6c066d454f40aaa9646a3bcc232cf861ad9bba64e97d81d42", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0546", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x494af7cae50d49fb2542592c1160e5aeafddbb9634b298bdcd89d0e2144448da", - "s": "0x25ba52e96cca44fb9332ba369b0bece3f5935b1b92d8b62bc5460f58586db603", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0547", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xedffd83ace7322a61ee4ab6abe1868080967751d4be0bf60874b33bc39ddcbb3", - "s": "0x08b4a1e0e44ef3d80db26fa8cf537366b68307031a2ab0d8443f537e8dfb8b5a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0548", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc2457366413b2916813d3e5be5ff283db4e7b898457b234e6efa47ca398bc06d", - "s": "0x683b4382aa6596c3fc9c2029808415d22b7d13f79368339ff510ea72c81e247b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0549", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe0b051b3d603c57e16bde938a0e3870543b7921ede03d0b22d3eb380c3e72f24", - "s": "0x06bb7369a2b86b37420fa5fb80ace56f989c2080ff247217635f7cc48e060794", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x054a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2d764bf6ddc284a0965850a9fc81a9f96f7ce6e7b56b9c52ccc1db4288989799", - "s": "0x63fe3f09904072a1db459005f3f0e0ceee8514387e16fbfe0ff331ebdb214168", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x054b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf0b52ebfd0f619929bc0034be0e411c95f518518b53becff6ea6823299917ade", - "s": "0x70c6c83af39dff511ca4dc088aff0f7e58669eeca00496b35f18254a4f24ba9c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x054c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x92361d48767df7fee08b1f45b7b9871482a4873acdd91c905229a33a260cec12", - "s": "0x3ebd876440bcb5998e4df266c8eb49c524a2b34867c41bb97f940b46393cb7b8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x054d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x650910153a867f16edf20b4fe33747cfb4e0dc08b2f2df471d9a0a7aac389463", - "s": "0x4f9d28299ad50e5175bdbad709bb6c38fc728ce2d3d9c25482715b7c15f7f7ef", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x054e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0682177f3d4c89a461f2463f7ffc98d6528b598d7c27b8b906ad46ca7c91a711", - "s": "0x01e2d6c6002240fa90053a602109ff5eaf38fd003faa056a06cbe5d89018a532", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x054f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6c15462388d66ccfa67a29e00540d5d7d437358e5cbf778fd654593334d5ce7f", - "s": "0x1cbf6a1ac56bb663647df6100487d64e94eead36386aad594b574b6b323567d3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0550", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9b3e9348e0c3a606cf7db9da4201e1672ba8e7e8d038ace5c9329bc99650fb0c", - "s": "0x49748cc5742f3157145e595cb1ba18ba057affab6305cc600ca34e2e6717ba38", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0551", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xef0f1a58e4afa16dc3c46c79b6362ac8b5ee95c2f3eb96bf0f90069203763c35", - "s": "0x6dd4d36d14f8613a18ebfacc4b8f575ac808538a34adc0aeb001f4caaaf84eb6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0552", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x02635c286b66efda4d7f4eead96b02b955db4d40c48d914d4b3df331e9b85426", - "s": "0x11085225c6bba28b24598da1edefcb6ae6e7b5e98f48338b917dbb9498b5b2f2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0553", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3b3aaeaae9241acb70e8b30ecb59d6b4eff933fcce6d7ed998f28a320a4caefd", - "s": "0x519a25e36ab9ada3ea9edaeb70a11a3986c17df6b700c681b221f3f30cb7077c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0554", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7f9634cc5c85e9148e01352e184bce6ed25d64e3de3c3277313ce33b12f57d23", - "s": "0x700818ca28c5e42bcc7c8521dcc5492962e5cc3b4bc68fef462dae382b9a3caa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0555", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xab8d0a8488604bce18f641ac9cb3d26d39d007b477e375cf88023f1393c9376e", - "s": "0x24fd1dfde1da5d2763cb24b30f83c7d56d4857dc10afc999824d4fc497df8935", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0556", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x644894df9b091002b5c655b222c24efbd10b318334dd8300929cd324b5fbe71a", - "s": "0x1a24c4eaf6e8cbf13f20529b314fbb5f76be22ca4d4f7e0281dfc6c0c9c38da1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0557", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd5ec1d28a03af324cf2cfefd3d8b5e43762c102a19e8684da35fdf9b3ba09da6", - "s": "0x3bb023c9580db85d50ef969b3bb0b488dc7b4be87058068c83890ad29dbd5574", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0558", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdcb4178a1f46f6ac474684209466fb7a8a26361d2e6cbf9d8c54ea8eaf637f6c", - "s": "0x6ebc23b6f0b461c4a497f597348665e27ac064935bcdce58a4e50cf1ca3f758e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0559", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4e73f2fb486c4e10ad6be2687b3c4ce2d9623a8cc573a37f0f0dae56df813965", - "s": "0x1afbe59a5c9b57075685fe3a2b669e6c3c7503aebc9ab3215805d641a9319d5e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x055a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x241926c1e29c29d50cd2e8375d21c50ffec9e180adf66a0905073b0554ea7ecc", - "s": "0x1e8da5951ea9bf21648a7b4afda6047adaa1911496231032e3f3fa2de76914fa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x055b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x79d700a77c284dde35fcf49984a67e442c5c54fe35e17030573ceed68e96b41a", - "s": "0x363734c89d17524eba2f7abab93212f47ca9c0aa3398ba654046c7e47903b638", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x055c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8c244a01b793a29316347c5bb248c87bc59aff74e02f7b8ac24981b7bbf12f1a", - "s": "0x516309a0407e1c567be908ed1a0d778ca78fd5ccfaa70c440642b06e2157ccf2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x055d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3e7324f1fff0a38b27ec758836cc787017b9242e6cb6329540f587bb83bd9f39", - "s": "0x7afdd64e690afbe74dec73c99bf47b1d6b6c8424bca1671a35f4e94694fd5289", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x055e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd6f42d4361520a0bcb3b3ea3ebefe5a52418ee7a37bd1d81f47d9fdcc81aaf41", - "s": "0x5df08175afad66d1e40e8019488c704be3b624518df6e04a77bf35f9accf47c5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x055f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcf10300c2edd727f54118fef49b99732f9afc9429db016f3b81c81ab48c01032", - "s": "0x572c8d470356d720086b7b12de73a63382aae03ea1eecffd853c916d7920b275", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0560", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x404e8afa51117ac2f5ceb3b65d843e0aeea8b325f67f32b9263e37dbb3aaca36", - "s": "0x221935466d87d972e54de2033dba588de3a02e11bd61263dd4b4c94c4cb7afe8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0561", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x24f821d0258cd4a83c66cfaaac36a0f2a7f1bfd95a996f352853826a79742eac", - "s": "0x69a5d60eb941672f97fd1aea7a7e1d2ed7d800a47045ce5b38dea1ad79d04518", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0562", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x425a8b057c2f421f1f33456ea972671e36941ae5e2c51be1a388cab74a7a6321", - "s": "0x2ca14cdd0740d32ad468098e9bf8edb80f27a77778e6e85f2e813faa5af53759", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0563", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd993847037f00d4667b0ffb3c089c7699590484e0f873c7fc59318faa597c03b", - "s": "0x1afea0d1218506b7aff6fa603a52775956f2842ae1c02fb0a2502285163409e9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0564", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7db19f7116ddf6a94a036a9b046ef8d4f47313627eca20f0fa578fe603a6c74a", - "s": "0x23a2511e4189d8fbd30ac2ecc0293493ca94c7e4375d251b1d1df93ff96a30f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0565", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x12370cf57c0747e6cbdeba9c78d3342638e05b1a3219841c864e16d690ef54ec", - "s": "0x41a8d7d8a11a02c11eac4b8f2d9589a3732ea4bf32ba9442c7b05da6a078c9eb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0566", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc4dcda32fe0675faed68b628cded7423dec7a9bba9d37f2a6846eeba04f3ce29", - "s": "0x4bba425b0d131ddacea79c55a7537d852d2a4a77156b01548d9f58ecd298db21", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0567", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd4ba1b5f07a1ff0be5d3b034da8e931f17ad1b58939e2f08a788f94681f16811", - "s": "0x45c7e4d91f362470e792e3e84560467157e8da80645f8ff3790c2f8be9d0a93d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0568", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6631e98e477133329b42e5d66e1c7f33e4d6770226b93900295ebc7cd1719493", - "s": "0x280de25446b84bc9cb19127f301b6788dae770e93d6960ec1859f56b39812a50", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0569", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3ce59723ba1346ae60b048aaec7d8c137a2c2c9b56aefbd39e7e38b2d73b8c4c", - "s": "0x10d90e703245763284cee3b5e752f205a01bea61ca735212ad575c946f654ae9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x056a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1d93b6bbd02915e4edbc7d23018d52363414d5df467c35d4302eb464568d1fcc", - "s": "0x7047dac869d2c7e6c21686d01b85f1cee3ef68c96a7ab17be72ab679872775d8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x056b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3614cdd557549dd39b7009672ff966f2fbee1a9e7bdf3495a26def538f201317", - "s": "0x569d12e26fa027c2a18e263bf575fcd32b4d0841854591a68efa6f6e7333b631", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x056c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0e3c4b02d563eea32d8b42b411571e1a16eebde582f6becfc0b6b8663b095d89", - "s": "0x39b52d7893b45dadf704168d651e4e9777d02e14c8b768ef80292dd9946b1bd2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x056d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x39cb9f3907a744d2af62fc16d8afdb0d9e62490b4a278eb07c3558e750671c3f", - "s": "0x25bc2fa9028dd7955bb0205c8756718f56cb67ebe59e21296612bc7219a7551b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x056e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5f26693912fc46e3e64d51eb87ae71d6194e7f4b5676325ac5d9eb4fbd1bd63a", - "s": "0x671d59fe5066f2d6d450d9d024b25cbcbf7c859ce48580bee64905c747b00193", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x056f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5d7b58d0c1a9da1f81538b1e44c969d034d887394ecfb73e2b28550f67abf3ad", - "s": "0x42b94815d1a2e949edd2a27daa7bc2c6fe69edad611936893801796b28408569", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0570", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x24ca4634de9ac6fb0ca74e6e4ae3d963507096c66aa38c6fca03cc6fcca56d8c", - "s": "0x12e1723196beb1d3d978b59e48f49a8ea4fad4300b1c43df5b5812bacb8758e2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0571", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xeed2433ae867b16f7a87c6d78388f28a0f96323fec60fd87c2f6a62cfde332d6", - "s": "0x65320bf7afe6ace842baa23f7898f66d9effebf550bf4b058b1980d8dcddca5e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0572", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x54bc998dce920f65b9da10259c37139f172e54c3e53ac328530b733a5bcb726e", - "s": "0x5e28564f5471fa79233b1785c48039c18f59c712ce4ef9691e880232c4e62b6e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0573", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1bfaaa58b934b3785830205e806238d9a4d953f5e4d42626105dd0f24018367d", - "s": "0x488f06e2a897003e630031194dbf1f2b94947873059dcaab7c3c6a8afc2db733", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0574", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x934a03ab5183146b1497b132e2bcbf689dd7578cf9de7785bf779e78f3facaa4", - "s": "0x6786a25bc456ef4a04a5c686304dac6d94d3cf4e4860a68789cde1ad397bc4e1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0575", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9c41aede6b856539fdfc78cec41e9774893b4e512f53d1f1c1dbe583ca69b2b3", - "s": "0x7e510c401e54b024f4dccf73bc3f6d216b830b8bae6f8b39c1439839cf7bacc9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0576", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2efc570f1875d16c97a29844f8a6db04b456cff8c96bc25bc92f5d6a77a43d87", - "s": "0x10b169f5768cd75abc58c8987586ad77a959bf4180a64b6a8fb44dba771b818b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0577", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9d2a2168fb89511544b140f9682d01599e1a53d5e5b09cc72e7d100c5cddfbaa", - "s": "0x5c0624aa1c80f2a6f844b507d62455bf9bc395aca7a464b32b3119c0ffb4f992", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0578", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5bf90d198a9dc791a7451fea7679050b8bdf11c35aa37a3713be7b590b0d8af6", - "s": "0x275b0365a06e569a71a95ff3d24b47a4b599d906fc3d676ae51ba8c2cf0983d9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0579", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x72eadad644eff6fd747aaa4c24114c8f44d483903a9eeef5d5a2e728f56c8fc4", - "s": "0x3be180d690fb648e6f5f7fe736af888df54924e6392aecc548b35feaeba7dbae", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x057a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdc823b7d6d55a50690eb78320c7c9296946d1e5e2796613ad9366d479074eb09", - "s": "0x6e2c247032cdc207f66c2eed95507be243fbff330933f9d4fdb0fef6ec3a49d7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x057b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x41abbce89187c7d02c7fbd86ae0a5cc2736dee1dc21c69c39cc410f461edaefa", - "s": "0x3a36890d43f35d6ce14a11ae6133d66eed6332d9f429e941ad728b61cf7c1585", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x057c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0ba121fffacb5e97b5293694e009ae438244b7e605d17418923a79dd4c89fe91", - "s": "0x2fccaf71cb40d28adc44aafbc84be9760e33f453e949ae0fff68eaa646f0eed8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x057d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3dac6550b4fc9ce78dab83db6ef22289149e32b3f554605cfe1add704925338b", - "s": "0x751c6e7490f75108acc7323f58c908bd7da3c5ec44d0a438605d72f0b1f8148f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x057e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf5a34c498c8c5562920c03fffbd93099f3c8887f91bf365939720a00777d140a", - "s": "0x42db7ac88361ea17fff36559868521641266dc844c37764de25d04486a1c006b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x057f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8b0252c32e6336b45a2b48c6f15c00b596665f3cf1439c380f29ca074dc8de64", - "s": "0x20e3280a283aae70a109b64049aaa232dd260e0cb311b21147cb1cf1befe286e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0580", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9b55d31e56ac156fa3630a656abb75a26f0ea9f350c4ad44fa114a347418c158", - "s": "0x0a574d2b8b88df139d04d59b4e51faf78e00411bfe2a1cd29d4da7295c0505be", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0581", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xceac1394db4edfc1d8bdb9c5e81ee3d248f28542631970be14081de03f0c5309", - "s": "0x5fef224235cdcc4f6dee778ac51e35fe6c579d7f6e6ee887b99a30b147522200", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0582", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x96a991783f508e0e1353858d418323bd8f42c7e48a4767b185d81c751318f3b5", - "s": "0x2ba327f0c1f4eaa313473126962c39835ac452899bfe97e00abda17f7a8429ea", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0583", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7f8a04e75c163f7bbeef03d0c62c15be52384a9187b16fbd60fcf95f3aa0c2d1", - "s": "0x526c0c7e063bf7530bb71c39895fed6e5430b5d2c376f9ff105a160d452bcb2a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0584", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfe6fb0afe443235c1a561e267f3b089567eb1c4431fd535450ea5c1e9cdb2f42", - "s": "0x1b35312465e0a330ac0778fe27506a93c2345b9d84ce5fd33ff584c575ed8c54", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0585", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc346774e8ff67b9db059f0b75b940de8a13649602d8d3b5e1389b1784745de7d", - "s": "0x620a97224e90bed0f431fa0f9ff3ac9a94fa0f682595d388f9c4f359b51208d9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0586", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd23f5d604c1f241dc7e21d2421bfe42b0266252a3d58754df8d6e9dea9b65518", - "s": "0x373e54837e1ab1d24272a811fbf1afba574ada5757fe7caabe0afd3414f88a5f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0587", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x08e6f3352c3a915b194f6bfefd0d14f9ec34ed3179c4b32e144813feb9d96b2e", - "s": "0x05a0650a786962677957a2105aedadff28a9e95b754b1d4465213bf34611c699", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0588", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6d83138341580727b9d31e1fb2911ebb59fea474166542ffff5cc88a6ba05eed", - "s": "0x3b9a5e6bd86ed9e5370c124b362a47db688669af5533bd8eb9a8ef3cb4323027", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0589", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x08cb9639c70819e4a17ac7a8274fb140ff54a6aa1317b5600fde7ee05f1eba76", - "s": "0x697e1c02ef3624938d151fa672d4ab73eb0291ff90071ff37ff32e82a0fc5ef4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x058a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4a6b27180c2931027229bd42317eacb9f476dacf525884e1a8a0cfecaabcd19f", - "s": "0x581a685d12d640b86fdbb94259cca008da3d3a4dc69629bfa4e82f6c45cf652b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x058b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x92fed6780050f27c4e45a403eebfdce30ffb37eff3dc825675a375a9b7ee7eff", - "s": "0x3930c3e7264f786623e0d34e2ed646126b984d09fa724d1bf5b54080d1ba028c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x058c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8c65e1b3be5df409d07c7ab92f659588d0b01649544b036c70d5672c65c53f09", - "s": "0x29892283c3d14a2bd548e972c51294741c602f610e6b30dc73fc1fe4a1616719", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x058d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa0214a1ceb053b0b47e4e93838b52b2cb97644fb7b70c31e810ca6017382d7b1", - "s": "0x2faf2358b813491354c9de4fc348344f1ad6ddf60338d63f937a54bae146b455", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x058e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x856893598dbee8186e4ca4c71f74475fdff25128686d6e771df296ec6bde8831", - "s": "0x16f57145423b52444747ba02247be1865b568fd4f11554dce4707673223951d1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x058f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xba885a4c6a08371534ac15ecf2b58769a225f07addb1217db8d4f488dee9e85f", - "s": "0x47ba1fd2b47510c2d5bc1ddab967291d9a9025d3f5e5c9edd6f3da84feef4da7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0590", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa333fdafb450317486ad7d8043ec182ff169475e3c78d1bc6c1c04146f710a0a", - "s": "0x6d6ab7863e0f144d54065905ffbad43194781e25a84d0d86eb0b9e427bb3bf52", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0591", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc1413260fdaa1ee8142cb949f061fe73d41847c6bd8ca8bdbd021012c0b2b7a0", - "s": "0x53daec90c758275664a73bbb06f4e1b44caac908ed8fdb7d6da7ea5c1e655255", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0592", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x623065a05755169170fe1a623b31bd45b99b71bdcc394e5fa2e5662f397f96f6", - "s": "0x165a7eb39cddb571aa1547eae2c25ac88709737ad98a44093c642d2b277f60b2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0593", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb698e963b7c782c04f72714dc85389031a6b478db1c4e8665dfa844525cf453d", - "s": "0x1404ea28fb687b4acef8ef5927f939c7ddbd3a6fc8a11421197e4a220c561b78", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0594", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2a10f7ec4efa44206f81f183fc4df4183566c912bbea4ba2e17efa489d6f4607", - "s": "0x6a5bc1d6e098c93870b2e0d1c15a7f69ef783dabcf3cd80817981d5ae262e680", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0595", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x90ddb95ae6c16c4f8151ee0af5133dbb04a53da3ff1653d73fd2f1305f833344", - "s": "0x63f61e952134c1724e764898a36c693dd3437a0106f33b8d84df22efc44fe0ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0596", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x063e1da5f0c409ced750b001815a10610bfc61c1790e9440b517610a4ac460a2", - "s": "0x72b8decb824742643a09db4d2142f26920e49814fae49f20990f97819d9aa67d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0597", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5304f56c4407c4a62d4045054bc8690c48264fa1c1c4053d8fddd7c99690c541", - "s": "0x6e17c279dc221ed1ac1fd8d284c5b478ff8f6525fdbcfe0769378db74a9ff5af", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0598", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8d1def2cbaafd0d623e3bfd2d4f6e5c5a54e1905cfdcdced15a458c6622c55", - "s": "0x2917ac530694bb7193756e5cb7acc9c9402ce756af612ecb2358c3e94d9afb9f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0599", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6e44ddbd8f0bac6bb6fa23ff6409f68e057166675053f8759165933385b27495", - "s": "0x79ddd2f83e7f8002ab623907b9ef987a1ddc7491620febb2f9678c78c0c735e3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x059a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x76e7a4d11f45bd73f4a37343f45bd6071ba0eae7a28b4971b3463c42f9570bd2", - "s": "0x45babc052409f64a4d364d858ff235703a5f0f1097cb72a214a48107783dd0b9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x059b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd8280ceea400fa798a07fe0a3d77b0ae2ee76d0533fc967632da1843a2445a96", - "s": "0x733e837d09697006a6565bc8bc100730ed7da1f78d92d28ae490c4228bb1ac55", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x059c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa7af9aaed201af63849d73cf1dc666f33418df121cd37bac126866025a22f965", - "s": "0x60c9ea919bca54d2b5e0dd40c6cad1f951bfe98abb39590be5342a04aafeaf13", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x059d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf1c33db0a2d37eeb660f29053c43c9745d04e22374c18b2e69c623bae8e47b70", - "s": "0x517c3f667bed6818b3d840cf4a835e480e24fc6e14b7e79359a955314c806bd3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x059e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x97e6033f891e29a01e1fa04f2f3feebb0a238e9dbe7b8e9834dbaed4d5c951ab", - "s": "0x3f66b74c23b48b106d7f26d44142e9bf15813e3f5a05006899ccc9b06ea36b3c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x059f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5f3ba013b059dad52a4307c1e958f485959c0c757c496bca1873e2de7b0f662a", - "s": "0x52db931bdd4c357963fc148ea7af8af451bbb21cd7d99104d262c11ed7013efa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05a0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x34707753e269d7c1ee2b9c881a86e40df960611763cbebc478ad97655a2240d8", - "s": "0x0d55dad95ec6d6011771b575ccb0114ef10f36cc34b8b9de37c4d0779d01d3e0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05a1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x15df90e0e7c9eaab1a5f395323609979a5a9860e1995b55e1539ef496e097d21", - "s": "0x36cc9d9478f6e55e8867ec8f5dd3d0742d240113b942e123a98b8ee7de096ba0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05a2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x593deaa169f7816c576a68cf15052f6231d40e6b265c855c2058810391c9b21b", - "s": "0x5e89b7c1af76143b66e4ebf1b7abccb2ba58b14d3b81411126a6ed8bf7a48ce5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05a3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5a6f941242c3436278e0d3ee3af9d652e738ebff56a2aff9055b510fb0723f2b", - "s": "0x0f3002ff4297e270427fa04665b321e91ea44682fdf3fe166044a26b17cdb752", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05a4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9a71ae5bd0c873b00c27a844d5bd6581f605cf1813851a6df87120e60274a759", - "s": "0x28d570e85f1ad9509f68e1bf8746edd47f1ef7359830d5b31c262ff0ce83450c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05a5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x18d13943c59c174cd2abb45713065666f7781e6aec4aae361028d332a20f6ef2", - "s": "0x5019faf8dfa4d4a13d9f69f228626728bb7e3e295ef8d32f83c3065ed1b27aec", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05a6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x231b0d5a3e4e897b176f5bce29a5ed4c3f4f1e01d8dac9716382cc8b99c6faf0", - "s": "0x2c0cfccdc3a02af9815d724f65896a397ce5444af433a52e6317554a62d16c65", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05a7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x989e9887dfc4461dc0a61d5f17d83ae76253c19364e8438eae6a444d37ef90fe", - "s": "0x3ad6c00e3d750c878c37dd6bf8f389bb6e84dd09966b3be84b81f51aac299529", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05a8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x44fcc4ee212645b6aa5e216c880cad0404d52a25057078faaefd4a13b7ab81bf", - "s": "0x0848147714b1e604bb017cb705a4a4d16582d9eaeabdf313a8a57c99d752d679", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05a9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa248d0e15be4a54391d013d7d21966842176f4d0024db95fc91f47f8712b1307", - "s": "0x144f9e196fafbbccdb3e4b547af07d9bd283166c63b0ccc065f8aba222fde363", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05aa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x049739b06a17e3e55348661e955d4a11b4ce8a6bcd7e193ae2bdb5fbc7d07e07", - "s": "0x313c8dbd00e08a9e7eb1d5ed982332ec29598467e9d4cdd7fe6370252aaf9692", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ab", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xebe2d37a6f3af7aa235982f8832ae31484a1eb85fec2ffe8a4ebc0dfe543ee9d", - "s": "0x7225f8237b866a7386296d85dffa6ac5d4dbfb490dc68ba34ec408d9beac263f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ac", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7988bbebe1950b7b04ccfdb8bb278d881bffa97c033326a135a334bcc0b6b994", - "s": "0x1758ee3c394dcd4db0b3e26862d8a7dbfc85cf8f886b3e88e8999928dac1ad1f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ad", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x333dfbc79d6ecb387291ad2fc28ce1706f596b9dace3a2eff70889031084118d", - "s": "0x0ee161cb62764d4fdffab6cd30df40bf490d97cc87fc1be7e95ec40018640f38", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ae", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc8c3b7a5b24a238edbd1cc35c4cd56a99dbc70c06c72d9b14432d7fa8972f18e", - "s": "0x0bddb72d90125899d05d73ae83645c0654772c890119e205aaddb4c9cd8f50b1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05af", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbc1131784771d60d5fad29fd0b579d419dcbefbd698b01f36b8a1ae400a9c14d", - "s": "0x2e7940de61f31d723ca7c87d91ebc5a2b7fb56174a068f15a86da3050e49258d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05b0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcb747543cd059f8f48a0041f1b5437b5b08ea2e52b87b283a582feb9b65e41f2", - "s": "0x16974ede7fd6e0aeaa0a2319bc8178d8f42e804f780e6e3255f1bf157e4b98bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05b1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb5038646a8aceb9d36fe82e67e7dd8d2f52750270b04a55673972341cc41c566", - "s": "0x238e0cb4632fd6835335f7e4599b4019cb3668d2317bdf57cfbbcd5990606a43", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05b2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x818666bf5fb037d55ce8e76f8f941510ef06e17ed41aeef198b79252d69dfc97", - "s": "0x043988cbe1a32a2424a8eb6a09548b100531f6d7af0800fef9b73a5a487a0470", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05b3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8d530a07c34ac477bd10779aaf3a1709002a407374e892b8c726f6a2e9cb5016", - "s": "0x63199d97f2b1182290e78eecd42437e2922b3d62bd9892f659aa547317a74d02", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05b4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x999272265e16658d737e7bda82812df27cee125fdc56df584141cce48b407478", - "s": "0x7f91972b8e898a53487f7104431a44534f4ec78bf7f95d430873bd1b8aac10c8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05b5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa1d14e901f6a8e0bb2db37d7a50dafc23a0a740be61dc998bad4adf67908bbd8", - "s": "0x5c6f48b50b37e9f109e18c328a31b148b245e727ad451b327e8ac13da7ae348a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05b6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x44fd9ce8d8345afe957e6e22fbe814925bef9accd5f01c8fe76f2b62e554b039", - "s": "0x03ef7f1119fe2dc326895e624c938bfc59f87ec7b592931a73cab56f7b721a70", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05b7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x89e92f6555a3cd7b03d3dfef741c5d1989a6517739705afe7dcb2ca09ecac794", - "s": "0x39a4820140a6e187f7d3fda12787d82db1ee01d033b1364b5a2d717d355caea7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05b8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xadb92c20b1e5c80ddbb99976bba1daa4b8d318b5e3d99830ed33035a99c4f6ff", - "s": "0x337e75500d9906d9b2c6e4b09a45ef79ab6f85b1dd69f119225ee76c1b363ede", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05b9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdca06ce4cea35add203694370a08c768edcb38fe6c492c1126cd625b2c66488e", - "s": "0x5f5fe8ea1395441c95bda4084bd6d92930486ebe8635776243ee1a09c1234166", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ba", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x037380f42e5a97217aa56cbd20e847521a1a2b3038648dccbc97d9597bf97088", - "s": "0x7db93b707e9c52bc456b80f59a6fa758df971301d2f07a419ae3bea769ad31f3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05bb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcb49c38a8a446441d824a4e59ce5cb254008384d61e7cddcc8e9075b394894da", - "s": "0x629354ccfb918e69ef243ce77421784e24b7a5611866372e77675725185d45a2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05bc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe93e3999770973f6c79064b09b4c3ad77789bdded1c3dc03240eaca76618d6ff", - "s": "0x22aa0cc2ce5df2afd94be6efbc49a734dcfa15fef39fe359377900c9bcac01b4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05bd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa0019aab8a69fb2290fede8b11b7add59acfec6f4f3ef1c635682c5a948cc0d0", - "s": "0x5ff85727a7c9591b91f9a800dd8f221ff6df3d99678b9c1e11bde5b0220e7a74", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05be", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x873bac0184be305dc74c17b8f8e348ae3d5fef33133eb17e5f1e05f2da1cf8d0", - "s": "0x5131f9bd9d441975465aed9edc6bfd02c07e7857ef4f156622ea3e205b0b8fed", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05bf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0ef3e7d71799210f713801c0a6ad9b3988a88c8fbb3d7fc28a3d6356854fe7e0", - "s": "0x55df668d1f3ff2d3a5b8585b8622241729b0c4f7bba04d1d2debfe050b884572", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05c0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0f017ca0ed87cbcefa96ea7bf8dabd49039b3d4310958a9090717313957347bd", - "s": "0x5f07593314e8b206ff652ec8cfa57ade41ddece38778de7a5e883cc9660ad795", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05c1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x055e9cedef178c9044ecf6d0035b55a96df0253964d6462213e1d1384876b127", - "s": "0x3f122b9e4de52dc54fea4306da0fdcec568456d003dd8ed4fc3e81628f7470ca", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05c2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0c76a2bcbc3676aedd4982eb8bc19644e6666dbde04fd7ceafeec79322d6e013", - "s": "0x12d8555c002023f06e47dc478a298b8ebe903a6ef01a93689e64d0a3951fda39", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05c3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2133b976f01286c0604108cc7219eeb3502a54ee09af8590567de0dea7fd1fdc", - "s": "0x3d66efad614334a2f0ca887f5c118d6542d3b4a63a19a8bf55bc05dd2a9a5736", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05c4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x04e6cc33736d8905c19381e6cdb16e8abfaedd66f09729438f91a32801e6e684", - "s": "0x1a412f74f6b0aa3c23bfac1d7842f8157a6f4bcb364ead66b4ae091e08f90a4c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05c5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4ac81d42e8bcd90cd1410217d5b7737eded3effaf9caf6fd55f8efd581b2da89", - "s": "0x412016983e064917ebc85627150796c7c2061d1fa8fc1e1d9cbc47caa44b3781", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05c6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x66a5c7db22d2b5a614ebbcea87ec412d4b2916bff634b426ca7484811da472df", - "s": "0x1bfa48f2ab9c3bdf7db3c784aba8668a0d69287be5bd4e07a1b7164b36e876b2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05c7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x154734e2a21e19d2df6bef5d3afcf1d7928aaff70d99fe3a1e32809aa5a874b3", - "s": "0x5efeac94c67e0b48f6bd2b3fc35671896a93d495e1fcce9fe6da6feb65f2b0f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05c8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x445be77906d0151c2b09dd76d783653b40553bd79795c6a625d85649b1d300e2", - "s": "0x46f40bfa1fa9441b8a92776a3ed20d291234e715a74d8db79da3216eaf99f8d2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05c9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x665f67a2acbc03ff06e49db57311b99f1172c295d291b7b6723b752086cd80dc", - "s": "0x04c0c050d3134f4fbbc49172cefc5eb761e189930ea482ce99d668b5f991f32f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ca", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcbfd1fcbd5daa1fc77df9d58ff76b411ea075f0ce35d4719141a5ee1a65f4f93", - "s": "0x0fc54c9eaeef136f5dc063de561ee5a820f44b42c816e6d837ff458f5eecd4de", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05cb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7b3395135fb9b4c0421631e1940d45aa196f633a9abf82ba18810e18e6d1d122", - "s": "0x637910a2285d09799b640dd1e69998676a73ed5e54dec42393ee6460e82dc492", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05cc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb5a14f47290ace8cc3bee37c0b2ffa7f7b5e8547dd6b3d6a4e0cc8a8342e7005", - "s": "0x773f9049e4ac8a5f9cd967631a78d4e53fed5a84d235d73479983d25276f8780", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05cd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5e7b5d50c284d9fb5c9464b087fd4c29d5539739ebe56028076e1c0fa1121b02", - "s": "0x2b000b62a5a37802064d3741a466bd752407a2be91c4cf9667ca934ed36112f3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ce", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4308b1896eab0c25f710b4f91cb3cd7bae669afa03dd0e7360dd01ebba4f38c9", - "s": "0x7abdb2df4d9b24a50b7f8a56b57a0a48ccdca7c02922c455482ab179526ecfa2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05cf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1d540f5c08bcebdd9d69e37d7a2df365414dbae0ac5a1fb898d3c681f25f725b", - "s": "0x1beba7c0a9b4053cc07bf9c20b2078338d19d5119811e4d660e72a7d11fadd69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05d0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x355eec195d1493121947a112a17a5406f4f7b00c5b3fd8944c21ab1d2b6debd9", - "s": "0x46893bd28d3b22a0f47bb76ddaabe3ea1245cc29c53a4771f179185face4025a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05d1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2c314a994a7141242856cb941400db273af347926dbec550e9473dbe74aef095", - "s": "0x07b26a820e84d0c5a625267f119dc21b57261d2fb63bcbc8bcddf0d4450e8756", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05d2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa37ce18bc0ad3ae4eecd01940ee2807fe4672affc6a5ac75fea4e2e733427467", - "s": "0x391b4d96a3fdd44318f9ea9d62bf183ce1e26eae00509d730310b8ebcf7920b0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05d3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe95dbc4649c7a5cd08073c74418febf86e1336e1978a0d3993e7b43e64542ec8", - "s": "0x2674f29f384a8d09b684b2a73f688ef3829a15b5ef3a0ed6e488c65db6bd3fef", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05d4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x280748209c0df422eb955fe08ce0c39465b8227dca1ec84776e4212bf89b0bfc", - "s": "0x0882c6cfbd4a9f87f6065dbe005c7cee8e1b7517a99e7a1bc89edfcbd510929c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05d5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc51169ae803da5e5f2bbc625b1de6edbbf8b5d65fc0ca4304d06e051e51de569", - "s": "0x109a2ed0f7fa415984b31e39cdc7dc6961c5e85fa1cc524c501eedd62e671a5f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05d6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x98d19445042a65f88b4b77d5e21cf427c68ea4220f59f2f8f6c041643ae9f628", - "s": "0x7e97bfabd055c9288cdc987b96f7dc971ebcf6744d3e20cce4a95bddb82462ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05d7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1015331b08e4459c8d3e6e13103f96c4884745df2aaeefc8cc6d787f976d15ab", - "s": "0x5ffe123f7360be7f4c99bbec884c83cf31c448cdb76805004fb2a4124e7f907b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05d8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc167932334c2b0be7981bb751c959dab2a41d583385eab0c50b2995ce4bc6515", - "s": "0x7fdf151f82fd936f093b900e206d62cd78edb8336186735c5d52451c278bc76e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05d9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x196cf7794ed3e70e37daf3a8067f4b04edf00f004eaa56ae83f2eef79448d05d", - "s": "0x6fd01577dedf28826cec8a17902d0b517eabf85d96312c55870389b73720f375", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05da", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x21a41122d7897098cdbea0755389ebdd245ab0ad6e356de1b04def75e66b84f2", - "s": "0x15e601885798cbe1c0eb644a693e57c8b557e5ca41480b24e59d141f05fd1a5d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05db", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfbd962448762059aa7036e61b61a02fffa2f0b24e527fe82d04807b2fe8beb4b", - "s": "0x3afe60760ce8fd2ae24f0781fb9776d023a5bb25b4fa66604d72bb781ebeecb0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05dc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x34c0d85515dd2c0273af0cd3c727af6f3888800443f6dfa0938a32af25d1aa75", - "s": "0x6452e524aa9a5a57320f07e3869560c3c60a1dbdd728b37cb78760a03208591f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05dd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd291dafb3a2ba56daf01fc370632450951d8e46940792806e205c1a7f4fda56c", - "s": "0x79d2d031efb2a9fd950696c0836447d7c079bc760317f20ca21e27369770f0a0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05de", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x86c1f5306a0c3159258ca3456cd652d72d61dc6a158855445fdab6c615e572ee", - "s": "0x49a658a3c1225176d71676d6e3a3d0a8df4da4b413bd8497904e7b305dbe2159", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05df", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x14989cf20a179c51d24a4bbe851203ae1af5b1e301af7ac3c92a6d298581ff98", - "s": "0x4597b724297f808c4bc657c5df4635c3c542123808c2a35f1287663061b62664", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05e0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x07846b7b63568dffa545e9f1ae734b29de8f67c6ed2d46356bd827d6cd9d9f03", - "s": "0x3cdd8238c241382c5d23962c77b10327cb6e88275ce2f5e7dbf1778078981886", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05e1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x097e0e7ed597d85729314f6ecc07dd9ff5af680437d1289a1592cf5966414344", - "s": "0x1458abff2f5d85a256baedda3ecaa038fc5f5a9ef347d881712a3be9d1fc2503", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05e2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc5bd8dd1bef1d1133c582a7c322d626dc1971a44c4620e0a4ee9633d17b08d2f", - "s": "0x7de1a34ce280e3df3715f734eeb6d63acf0c846b621409b254beb0ff47b54360", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05e3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9630120902f222deff0d99e3c50280b522339eba6d3f6d86c61a1ac3adb4d363", - "s": "0x0520763b93b8df41dfce6c31045622ee09f4f0bcd2cd96fcdf69d4ee5beddf01", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05e4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb78325e1c43da7c12d6fa728cbabe424b2a15e964f6de4acb0244f9ba61ed9f6", - "s": "0x75055f1162d3090308401f2780706b76bf76ae2c0b38755c57e3233ba6c1251e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05e5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x15edb31ac9ed092708737918f565c154acc2a2b6a0aa052ff6d4652f0740d3fa", - "s": "0x7784e41cc8cc6b48582a405399dd9204184da23f7e006e68ea1342eb737f5811", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05e6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5e80a0dd2884576269e086f90601ef7f74cf38ab1dd18aec3b6cb30e116ee0c2", - "s": "0x6cd302c1d6822711ea6116ef51bb04ca7f3616f061ac62e8da721f3373587652", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05e7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb0e3c62f3c542406e6712049ecc0e41128a14a78cf0fa93c503e02c33b774bf0", - "s": "0x1f9f29b8a45e07edd584c7ddc7b3765ac717804894987e4c69d474257a18dd3c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05e8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8f00857df45ead1592fad456a3b10e365533be8a623cc698be67fe6079b23db9", - "s": "0x7e65bc69dda24f7d6629f5b963393f87194e258195b933e19cbfdac7336eb96c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05e9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x695784a3d7f342c1c0794b888e901755bd410c9fd20e70252775b8ce7134d32c", - "s": "0x26f377a9ec408d230193f72fada41c7ce1f276282767501a292531a937b7da60", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ea", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4600c7a120fcf3e686e8fc45daa75d2fc30784467fcc6d99381dd703b0a0524a", - "s": "0x6b22076aa82b0fb3d46baff97a311be8e752865f443b6486d07b95e70c320d91", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05eb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb3380b534499bf6bd62c4bd3524fb8af4062289dcd552e27bca9d213800e6c52", - "s": "0x5c06510e822a1afca28c90465373b8c08543902eb230891dfc2b0c531a8d2ffd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ec", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe3b713b0ad25d2e70268b43a6837d681ef859287d1aaaf4ca2a142d75e20d7d5", - "s": "0x2bedc2bc7f23b9d02542cebae53ccd4f26c4f805afdf617f87a791eacdd5fbee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ed", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe912350c9f5c5d203642900686b5ea36ad5ce0118e4c5508b076a7dc3cec0f8a", - "s": "0x574496a59a1c373c41ca2a1b439df1088f007331776a323b8e9eb1f716431777", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ee", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd52a943af819a3d6a3b673e34d62390c129f21ea997e1f88608a4a590c30bcfa", - "s": "0x1f58052c8175156f06bc3cf34fb8f17f3f137c1adbdd867f84c6c3022db08ff6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ef", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9ef299099f8b7951e7a4ef0bef1330cc14f4aaa278219c4189e75c66919bb39c", - "s": "0x4da1aaa286805b40150e37c55fca59439e3b2338264a934d45d1ea54b605bb64", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05f0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x73a084d7e7578c3f23af534a2d790a478ec63a881537d07d54ca4045103d17d3", - "s": "0x680dff98219686dccc09977a0f82d83b6d03bb00faf0a38e45a0f9abc44e6732", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05f1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xaf841b8c1733b6f9d14185edef98f7b12fc76abf1788c657927156e44db0cd50", - "s": "0x157e424b3dd40af321344fdaca23747c2510fa9e4ffc00b6f3e8188edc06a354", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05f2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc37794372f0f02bf95e741aacea93b105f6153aa301040662202848d9bb477a8", - "s": "0x7939fc67fa05ea5a6cca788286922582b68ea8e75c442c484d598af0bc06471d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05f3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4e362b4da4299757ba8bbe136e9358032ef211057e7ee7c143dda3d0fb232c12", - "s": "0x4e9c5b7c17057517f96f44e520e6780962317d6b3099ee02f5c704bdcb8a8e6c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05f4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf511f72bacabcb8ac68f586648614da870bdac615a36424a7fd890e14ee93971", - "s": "0x6bc74b92169896226deb3ee3fcfb60e6750be869c9344dd391347bd623c6fee9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05f5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf4d3b8b9ccac0add68f3f285b088eb14ae1b68bd69811598dd103f58e7076134", - "s": "0x19cd40df03e5eb8eba33980736093b65e0130a376c3eb2e0215c42ed6abd7cd1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05f6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf4b77c7c72d00d31b377f55f4e64192932678a3c175ec16f0a92452f9b595ce5", - "s": "0x39216781182aa01885de4d665bd8d61ab85f2e8bb0f0e91ffaf2434638b0aa52", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05f7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6498ce770eab2ce12203c78fe1ea380ad610f3a65fca783ffc83b07bed98d717", - "s": "0x7d17de1092e0bbac120734261bd1dfec4a5a339243a4eb9d10cb98d90bba3532", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05f8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9cd889c6a62444ce6505de65806168931cda136d7d538bf95b9e0bb00ae2e041", - "s": "0x68e1d3f221846bab5961ae584e725c34ed08bed60a49b2c467480b56e1350181", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05f9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe4f7640742fda2d98b886450ccacc25dd13b87a8f3b7c8b7669a372bd58476fd", - "s": "0x1124506f46461f4a430234c70571f9ae4116e541b9827a9e361273b62b9cfa01", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05fa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x61232f5ccb058ed211043aa046ce87876618b9db960760fbf302644020753b63", - "s": "0x09b5801bb6a2db5d9a2184a746675eb14e45e86ce278d1d752d755eba0b946c0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05fb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd419476a92229e325968c95f295088ae786d6fe471782c476739e1966862665e", - "s": "0x7ff979f14406393c9ac8ebbb1b2124cb981855086abcfe7a7ea7520222da416c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05fc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3d98ddf89bdae11331e4bd556d48e91877582b1dab2ef511bbefdae3858f733e", - "s": "0x6e7be8e4cf3f90af1646a0b597e6bcf5f98bf07059dd5e411544edbf1e6eb547", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05fd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6468df42fb6538fcb4e35b8e6ec7ace8a44be7110e1bd23b8d57886e27994b91", - "s": "0x3da2aba01fcb4aab91f98303fd066f21322f0df72b275f22941fb4efa3bdf179", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05fe", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6749961b373d0385feeb3c6355b5e10950fd4fd33b24e24c7093530f1f0f7a29", - "s": "0x3f6cffaae756f1e2f59a8a6d4ddcc6618987375d9ce32045680d1f8522611d70", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05ff", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8d86205b3104052973dcb15bb3a9ea6cab7f6716d836a519fb298b06e6d485d6", - "s": "0x47be8d9be1a8d218efb230544fbe1a56aab8477539cad26ea97c8f7f5a794caf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0600", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xca633c64435000aa1b52c387dd0508d3d338f842fbbb657a8fd0986c40614e10", - "s": "0x04f8cf7a6759c608a9ef5b57090cbcb937cd78763630f29053cccf8e092d4071", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0601", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8b1a8d450330900082c807f8bc4b9c5ca5fd3d50f1803eccfdbd169c89ed6924", - "s": "0x17abbd2c24e7bf82b4f4c50d1d9249aa91aee9f9676135ab3f18be969e7a7684", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0602", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4adc27afbce2aca550f3f4e6d7305e2bf9bdd77b689cc4b1d50026bbaf3c209d", - "s": "0x19deb29b19a2622ddb9e04b05bfa628d507adea594c2102f6b78e6262445bb20", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0603", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x42e053ce21d30477e665d20e6d0ba3c4e22754e865da12bd5abfaaf606f16cf5", - "s": "0x27faeeb2a4f37ff571dc8cfdc6c3121576d0e9baf4e390e531e0947a6e23e2db", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0604", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x163123453055707fa9c792b68351c94f48b7f73e7424c562b6e9c083becf7a99", - "s": "0x79824c977e82ffe9768af8d0fecafd3d6bb28c9ce6526c2b377f70a09d640f28", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0605", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x94ed9ff2f4b49758107a1237663139ab0e535f2d6f09d45c9ddac5a279dc50ab", - "s": "0x5cbabf9d54906702205a3dab69a441896f95e5e0b3e3c7ab5a8bc5963c2c6d7d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0606", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x47f1ed0295f7ef4b6dd6da69922ae47bba364a419fd37f378980fea2d95c48ed", - "s": "0x53114b834158e73b3395f4726e259ca460e887b5005ef4b9a64870cb082f4ae4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0607", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9da3445a077799f760f7a9644911b55f2896e5e490f1cba667abac25b232bb7f", - "s": "0x6d982e01816b870567faddfcf80e849160990aa224b55ba0626029e2fcbb10d1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0608", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x49021cd57a3d4b2c412b4f92434b2ffad1bebd0f74c90b70fbd2eb2820e6f349", - "s": "0x781b78b6e22dd54cdcec541b0facfb65e2325f9faa425c03d11845b5c77f2d2b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0609", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1a4063b01dedc06714be0ed90648b8752c8ded0e770f3430e0d143589d64f4cd", - "s": "0x0c930481c3666b8f8a9456d4764875c8295b4f1dea4eb3a3907083e448b31827", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x060a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x43585a5d27d5e26ab3f0e65f7bd471cd0d77067ca16c76f0c5adb4669535fc4c", - "s": "0x2d92c28d38e8b6d37ec5c7a1248d162a71ce8f5406d16b52bd00afeecef6bb69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x060b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd91d22837c064ef8fdb927fbae4d47ae15867064d2727a18902b8f64c23bef0d", - "s": "0x7f397e10d07a97f70c6329ea01ea27962cad7c6622b2efb078b579de01cf3c18", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x060c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc27a4058203ecc193a3c5e19e65d8f1bbd2528a1808b40d9343457e31abf06c0", - "s": "0x27324ce80d6048019c28f9e8c93ffa057f742c5cb05ae4b12c96e588bf215598", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x060d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x31056658e03ddfd45caa85b936eafc1c15cf7cf90e01d255fb123ff509e06f0c", - "s": "0x29c5f9572263de26b5a2671e1b7ab051105a6f987f494182abc8689b1e1e2c9b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x060e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x805fab6ce0f88d556726bec55f0a8de7eec8d18aaabf153c1123d699b9ea32fe", - "s": "0x6605c3e6c9d0d8cffa6aec83aa28890f2a5528a0c73e12ffd00ec940410057eb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x060f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6c65a5e4e8f5054900736151523b97bb18157cb589de5c9f0ea622ec68f44697", - "s": "0x3bedf264abf6f35ba7501fec53e835b51827113a46c88fbd7d913f3ce21de74d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0610", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x59f19316a6a5761c993ca4a181d6a614c9c9b0add55271b84998d643ecc1cf90", - "s": "0x23306fc70d09d4c4eaab23a0032ac64a9c2c8b63800a911298bc83d0c72c83b3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0611", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcde2e846c2cebf278612a844c388d94de69a55e050b06615cc4a51a420fc3282", - "s": "0x54a9f5fa93de6dc9b41c474e663c8fe7d91c4768e3b75e7651aedaa2d0f0cd3a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0612", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf21ab6ce96c11ba079c2aeb2a045a4b47e4b449193ff556cc829574ffc1662b5", - "s": "0x29746f5df63bc8d52649d57d484ae9f54d82810a03d5d7fcf0d595c1250d94b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0613", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf916b6552afce6d62f1422fd084dc4f6bfb05f656b831e13b57e0125c8e767a0", - "s": "0x4fd8a81f7665dc422ee53d7bf49d81d4940a54c4bfbe6d33bc4a7ec656121cad", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0614", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x14b5a43da607076ba3540e21733c409bc825defc6bd58b0a87c9fe70c7702c7e", - "s": "0x1cb401fe35f29f279b71329ae4d972bdec5e000334db0373abdb8f31cd8ecca4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0615", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8d71e63fc19ec9fb249eeb0a6f72a4e18e30187d55585191b6d00be1ca1f4c82", - "s": "0x2cc36f869045c272ba8e646e8eab6ff6839bc8d653f3d54381a0fa607c4d0716", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0616", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9191270ee2a23f0603dda32c495a53c757f0a3ecc1b8aec829c86f43af8934e9", - "s": "0x2f375d4ada597c4d6413442089590cea592922fdd7b3f0c495d61bf174e50b65", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0617", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x36e568a2f6c5c97fa7096801dc8c4d039c806642d54c7d8edce8557f18ebd52f", - "s": "0x4773fba3a6466fa4bb60e4594a763526c915f07671faf7f22e20f105d3441159", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0618", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd74f12e69ec83502b32e54521955e2be4b38bb184e3066fb2aaf202b76ea6fdb", - "s": "0x7edd1df47e6309798f0d8e3e0441a54c611affc12d244300a3a4291a3a2f14ed", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0619", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0da8c02f196ce89055af2033bfed4bb495c6bbc11ca754db4c5989dec1558b7e", - "s": "0x6efa543ad1d661f120187e4af51dc89e8679862dec823a88cdddbb4e959b8c56", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x061a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x758b7ffbed537703847e87f891f14334e0d37f36af5ab10082ba5d3e6d4048a3", - "s": "0x789d9ea80503ed106be2a08a8be6eacbf5e5ecb15054c3c1d68d0fca135730c9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x061b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5648a131390be46b6bf056a5bd241181f8a8c16e941d7222be3fd0c2813ef1e4", - "s": "0x4a43535755c881707be76181dcc1ab4cc087603ea6ab2a4b190ca0d3f934fdf9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x061c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x728c5f97c97b8e85df5896a35bb4a05d0db59800fb5aca42df23bd451e1c6fc0", - "s": "0x5f4f812566241b36f5d60a5dda3bf1a37f47ea73a45070bcb00aba3aac2f6c1d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x061d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x858a08f9915246ebac55cd2680f630291d1a342cb9cabde17591accb2fd3b5f6", - "s": "0x753eb208e728c1125748faecdeaefc119baf05f35b76dec65b81a173bb6e9f73", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x061e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x575938836ba80703ac38f1540d093649bad2353bc0dfd7f9eeeb99fedaa5c229", - "s": "0x45c0c31b1ee7255b59a2b2e33bc75131c0924aade6c4f5d694a5ee403b27381c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x061f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xae45757e3bc0ed8db3815ee8d364810774794fd630b8010035a7b70f15fc50c9", - "s": "0x6f85756a2e004351aae2c0d2733ed763aadee8fdabde8b22b7461571a1d48545", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0620", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xba627ff31e2bbc086b1396c7bf2a76b4675579e69acbfc5b5d0884cd8fc742fa", - "s": "0x01d6ea63fa34c600b1ad3d9780f0d5269ca856a45c45f8dc487aec41dc6fd595", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0621", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe0bdae2e6102078def62aa483d972967dcd307c52a754704caaf94662489cc1b", - "s": "0x3387cb6649855f49a53771c8c0effb96f8999683bb8d256eefe4cbe7e72d0153", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0622", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb27ebbf9204d5d2b7f2e878e4c1326251b4afbd66a6ce41a2f3dc0a672abbc34", - "s": "0x5bb9d303f62a85be30a9f434c3692e6b7feb9938f726bd9d382795ff65474a10", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0623", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xee3a05d15a86347c8092555eb18f49d77793d8f98d317ef0ecef0ab3790d7bb3", - "s": "0x3c686b79f8f6b90e11941a67eb37aa068a143aeaddadf02b21ca826e33ab7aa8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0624", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xceb014b7e3f7ea1fb34f6a5098895d17a905ccdcab2b40a26330848ab440a520", - "s": "0x6e7ab62c7abb16c9967c72503ee204e2bb9b7e417972886441ef69a4bceb6c1d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0625", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc318f04c8b186db5d4177758c7be4a0ecbc10b0d864f567218c21e0c5c66e3bc", - "s": "0x0c7e776a4d0949d4ff7af0d1b55939302f4aa556167fbf7903c645f28dd6ca54", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0626", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0605169e831de477aacbd2ee9ae969b6e849736ecac1818e85f2ed79c760f676", - "s": "0x37fd1eeb20d88c9cdc002d9cc5dcbe66a740195e8243d6be876ba51b7943a7dc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0627", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x43d8d2169620e914d3a4fec40cc6853313dcf3a7a4a6b4f69d2c8669561143c4", - "s": "0x092f466f6c44dd9e0eb4f3a2defce72ff5f273435d3820e9f5d27bf6098ea4f3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0628", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2d09b7855f1b032d16223f4975765adacb1e9203fe949264e2b93860713409b5", - "s": "0x5afe66597b6d3d616f5c10c809f3dce2fb284024d1feca7317e06a1a3abc592f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0629", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x066862c486f8c2843b7ad3d414bfa03b1830369e53793fbfd2862f2bc774a73b", - "s": "0x2b9514f9ac35c49afb3fc7048b6e0b4ce89e0dd29bffa3088dc7407115bfadc9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x062a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2587675f24251b2553aa3fb9d42db964d0560c752f0aa934f0ad632e45c242af", - "s": "0x40dc019e4ee455d71f6a493c36027945775da52638cba339fea158f53ec00dc1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x062b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf02626c73bd7369c355b844aac2ba94ecbd1dd7f4fbc3b2dc72dd65f29e50b0e", - "s": "0x4dd71693d884aa43b5048091df10f2dc9dff05aac18176f896402e6f6a3333f8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x062c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4b87c14c7a57d3bac7fdfcd84573f7ecb3b0da4d6af41390d9d825f1136ef7fc", - "s": "0x2116d526a5a966a258f3451cbb55389f488eab1a5a0b2615d163e0768d662acc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x062d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x95cd704fa30576a6d12b50b33b9ea539185a26dc5f2aa9ca1b4af42f3bf4fa46", - "s": "0x20c8500f67c313b557031e870d703f5956b66a96369b6e0d216e97e3c5b0c16a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x062e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa7ccc35a47661ba854979dc4018d93889b724a9876d51aaafce9520d318275c2", - "s": "0x14e7ab0d5236826c02420a231f6e22cb5fc4d7fe99fb073c44d57474fcb0409d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x062f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x901da90f94c08eefbef851a6c1c4367c5e5e753fa86483f992b8d1589f796754", - "s": "0x0ddddef3f98c9afe6e19a66fd8db1e8041b814c4ca121dff8280b483164ee149", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0630", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xeef65cf0ffc1ccffd5bf97d374d60e098ff2a497c602da285543c268b14fc2ea", - "s": "0x7294efa500b547878c74b8a09c3690b0b5eaae47c72a5c7c9073e2cc1031bad5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0631", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6521b4ad46dc1b9c7026feb026554c07a4ca617763c906998a3533e47d624d26", - "s": "0x0ee10de16180b30c9b82ad354d10046ed29a833951e10d4d8497b69bb682c6a8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0632", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc022a4d7f15c568e29650deac402e9871fa1a3dd88318019e74945aa10a22d95", - "s": "0x22fe88a30c903d52727fe4ed4255f656393a2f1bf0c33065927c35b2931c37e1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0633", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xae5467a1df505386c7fa55ff0b69d3fc26f5bb78635c9717736bc7cc4f5d3adc", - "s": "0x17bb851966b45d80d2a034de1351781797c4206eac1788a2351109c8700c3589", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0634", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7cd65e505c7f9124599dc2a3bbcc2ddae235cca9c55909f8913e7a47a410155a", - "s": "0x3a2a9f16aa0424f6857679a10c50745f4fb9d0121ce329d71389f72fe5e8f56f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0635", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc1de1092aaba4a1a61d9302a33282ccb67583157659b5c436b109d657c67b8a9", - "s": "0x4c3c640f69eb85ce05fe574db8f53e5c97f2004519fdb2423907dfaa046ab9d2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0636", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0f2f60d29712a8f5e9b055c5263fb4784d37763875712f77d36e72d602a379b0", - "s": "0x17c6257c3e03407bd1a527e54be52a74d49eea2666cce335591bd6e88fda311f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0637", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x856dccd4c95df3d9ae6e9fd9a8d73bac58fb3373d8c581dd693d9dd6bab73a9b", - "s": "0x5800ed6974c92bba03c6634cad3d7726715b21cb555a5f6fabfa9c39fe2b8e5b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0638", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xaf69a11803065bd4a460f3532abf613fa68f7db05b80696b25fe608113505db9", - "s": "0x4040761a295716d12128d9dd4d4f5b32b0c541bf3bacc45b6dbd27658fbf560f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0639", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xec438f97982125d4acac890c165cf9d589e0d38e54f6aef9b9e5518c4a35d66e", - "s": "0x59173d0f4ea535b7bb69111ad8a7a5300a6347b4f36e31108eb822240ba9ea48", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x063a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x715b1022e9e4248550c1a271cc2c478c065b06d70236344bb18c9fc0033d97fe", - "s": "0x139189e265f872c900e58e55661e868ab6f8557bb26cac1c4029f8ab34e0ec07", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x063b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7cb94667f58694c8d5b3aad2548ebde532719c98e6e7e40e1610523128324ef2", - "s": "0x22513beeee7dd4a94b752d2986aa09a411ab95b89c129ca0bcb8b89d7a6c7c5e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x063c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1f2bda49434a8cff59a7402954ec6d34778c4e80ccc1915de5e38513e5cc8332", - "s": "0x24d6194e1a50d511ed7995f442190589f88aa2898c315aad44c156283ec82d67", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x063d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7eb5f09c9e2cf3fd5900f6212b040edf0f35a0210e88db42203b67eb057226df", - "s": "0x0cd4c079690737da4409306664a9e715a09b1baf0346de025dd68e8398fa6ea0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x063e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdabc73bb843bd746400fae643e92045b0ac632ec9964401eabded07b3c2f28f8", - "s": "0x493dc3b1ea2be72116c2a8a72cb7e3f593df9755b93ef7bce6eb869dc0c17916", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x063f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xdeba30fb76ecd3db0be868d7efc18ee3cfa0fc5eb973aa522424b585c5ca8833", - "s": "0x5e56c25fe073138516062146a9e09595d5bb2d4f321e6025c7add440cc65107b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0640", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8d80b246294a9856b4b9b423df8b2262c4f3ac5349e9060536e5e7e124326062", - "s": "0x4929dacf4f87faaa73860c4aaa0bdf9e06db47b958bdaba3ed87f2a023a5b06c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0641", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6d4176c8f67c870b86ef11098a15519caa51009f530f7d31f53e46b0382ed3a6", - "s": "0x2edd1626b1b8c45138588dd322675d3291cb24bbcaa34e0b58f7f9a00a89cd00", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0642", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4e5aee31d8b83848b19c70274a509277e0ccfb3170647fe500cb142162b92a82", - "s": "0x3d48b3924acf5412f3974208f8efdb12e9d5446bb72c3a3acf972acb78eaaf79", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0643", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xde27eb99eb107f87cba7f2cd54b7eb71d5e25ec99bd72ec3c7b8755b53fbc74b", - "s": "0x40f84dfa731e3eb1eecd86cf71afe1118ee4138879b54cf4dec2f49ce76c7831", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0644", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x03d35a5c66b5a9eff3a12f82839526093a5008fb57eee929f11a880141042755", - "s": "0x65711f337280b70813676b282db1f8f154629726b7ea40f5e980af6f1f942426", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0645", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x79a4d401f538f7d0aca9056e51983c69bf2164e1171d8e8490d29d95c6712b6f", - "s": "0x41a76e1c31700b70d134a05309d2a48d7104de95d7fe9c618a2d9e65612c86d3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0646", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd841234a0df56ef1b15876d50d1731aff50e11826688140605ef0c7df6f6ac93", - "s": "0x5549b2d1f06d7d5d7087e1fa8e74bed2f5192de362638c44847e806d902f6d46", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0647", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x123cbb732c3772e679fdfb17240a3818be85c04eaed844a5414653564bb46e9d", - "s": "0x6acf8d67adc86fd0fee8b55839cac13367365ac509fe5dcd0b34265a35650ee0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0648", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x65e45abda59c2afd7371624d58fd81aacec60518b9a593647801b86d582c28c7", - "s": "0x78aec8a153565368120a02308d6b106824ae4ff006c8344dbf750a9b9bace018", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0649", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf1975256c01a662ad8b6a3734edfae7a3377b00593825423726110e607ef64e3", - "s": "0x2c77b23d13be95bcc7053fc62803df88c06ad9c350be20cd58ba04d749551440", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x064a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x70c2243acfa7fcdd726e53bf2518e11b634160fa00612bb46882c956a9bdf51f", - "s": "0x47c0c27f2325911d4e9e5fcdf3a7309e3a07b48b6e229a0b49f64bd29d661dba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x064b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x96f979dd0a55bcaf28f39c7db8ca0527196db98bf262930a8c407981fb45dccb", - "s": "0x333d55bcc441f5496aa93f0ba642359fbd3e6c169566982b7313d7c0aee04f1f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x064c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x07371de47a6bbcdd64abbb321c7966f7c99ec1c75f686ff7b3f111671354ca1d", - "s": "0x2885014eeab02eadfe74c712b4b6029cdbca60a27192681529f56f66a29e9d7b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x064d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2a77d78c6c015104ff1ca42b0bb81b2dce843ae9862f5681f41a5b8a09b7b671", - "s": "0x73233e447b74a1fa02b8616b9042bfa304c4f01d00097e80ba4e522de0e63029", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x064e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf10e51f7c737f33555966894bf34cec0cd74d7ab93245917e513fb8e9b2bfe2e", - "s": "0x538840d0aa9868ece0d45a1cbf8fe84345c455efa06a1afb7bc94e971ded1a27", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x064f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x03f3b2819e62b80d5fc894348ae423cd48814471d7dcd7bdab5b531b1dc6d303", - "s": "0x5cda17ceefaa907072612269ac9b6091b0c7ad8f9c0058ea6950cf30cd63d5f5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0650", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3c1111e7fcddcac50d5874ab3826ad32b69a2b53523b147d6e8f697c5982d24f", - "s": "0x038f356c8f78a2acc88be9308edfcb189e2ec78e3e932420483f714d06d760cf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0651", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7ab9a18c9b0fd42e465a671c97a9ba5f07165feaa9bf76438332f94aa10561d9", - "s": "0x151f96818df57f84f22289336735dfc5b93c4267195a264bec5de33b2ac3d7ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0652", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfec2f387eb0b35718dce4382bb7f4f87ebd3d8d66b8863ff4d16fa40ca4faeef", - "s": "0x3915e0daca8cfe40f5efb0e595c9be99bb925d1c55d789b219b7d784dff2bf35", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0653", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf2d655bad5cb4fcd1970dbe4158b873b1d13c04482b9f1f4586c4e34d7c55d1a", - "s": "0x494bc108a8ee701bfdb8716558766f27f0fe6982c315325d05af873293f7338c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0654", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf4b5f1952701649fab7171a47fa86cf85eb6539f475711a0afac444b65c59193", - "s": "0x0499f529ff56e68e6eec6104f2aa15bcb012803a6362aac9e64b3449ad35a701", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0655", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfc8239f333dc166b23c558d09e1f7f395cd109645d13d0f3a24322dfd8996f35", - "s": "0x40f7688eb831f710b2fe60207fe12b8e01a9e51577c179acd32b4bc0b90fd4eb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0656", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x46c12cb0558456879ba1b6618d437c17a11d10e28438da1233c4d0ad0a7fa50c", - "s": "0x0986f338ac284be24b0e4b1f1c91f1770d8ee44b1d437cd615b8443f52befdd4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0657", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x72599c374bb24795d8e8677a9e0c151958366204741d582d209ea5d58562b83c", - "s": "0x3cc23fbff5f6e6f7287666c13df42722b8a68b957846dd503c845c7535bd859c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0658", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd285848634eff279c9993184e469bd76a3e2c5f579bcdca2ebd042ee95798c8a", - "s": "0x4afcacf64456a5f14b3965eb2eee3bf0b20a48d5510b8827b2e4cb3741d22273", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0659", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1220817cc4d49bcc7616e9eab1ec6dd478edf4bedddd6b371a6ba18c5e20a678", - "s": "0x47b913ce489dbc785fcee68fbee1b53c59f4e2e911d27a988c43a819adf890d8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x065a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x60d8163ea305d6f2aaa66ad0370ff2e00dca024f731264a88bfd3110c61347a3", - "s": "0x2a40bc7913244b83af6eee2a012491aee5c0ffce259300fc01be3e9bef755b02", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x065b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xccd31c4ba5aa24b2e1a3b78b1fcb53a3b14d08351dfcb6dee813b957eb3982a9", - "s": "0x1376c2a148aae04c5be10d39bce63dc5ca91bb018b49d25d882ddc596e4afa7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x065c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4db5b4d71b324dcfd6ccba96280efc145b7e9f05ea808679c714bec3dc62e54e", - "s": "0x3df9dbfa7888171de845c030e97926d25072e33b52a8346228b8ba4ede376edb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x065d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4f4f9ec742a2a1dfbf296ace6957547a74941d87965db07af686f7dccf3df75f", - "s": "0x6ccf082a4a7fb1c41937023e5d768c16bce907e547d73a8c9f6f934f72612f3d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x065e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x15624899bf657458b900adfc3614e42ad367f202d20739dfc2a3944179a2a0f0", - "s": "0x7b0269cf15595b15fea1441e7724459435e8279bd96e040088a81b505bb55fc9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x065f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc3db80a38c45405822149d05a024f4824adb1c1614b0313b1741ee63b55424b8", - "s": "0x28d946d81ff56c0c08e7a0959203c6b36f97312106cfd7f3e9a5e36aa1a2d3a5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0660", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe02e23fb6fd26330779a78bd166be16774d5e33d43bdadef341f2cb8cd47d35e", - "s": "0x019e0f5a4b7bf7ef2bcce960aaa3f6e1404ad084743f317867b1e7c894bc7194", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0661", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x49e1e53bb3802e6c1ef8430a7988ae8c73122adb5b7058ed1bd45e36695842fa", - "s": "0x3ae6c4cc6963455a3a9874bac1da1be5af2113df465b1d4ab4971bae50e0e867", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0662", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xea87f0cb84a837977bc1b3b6d25d219afdb4003410d4f30e7ab434976ca1e7d4", - "s": "0x7489047117041dc901b00cb49ff35d9236b77e1f745a9bfa0a719e1fab78544e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0663", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd8312e73786c25ddae476edf1aeb2e5902b73e9135c03bccb6e1f0c5fe0e5e0a", - "s": "0x53e2a28769090da696553de4aae95393174d2b7ac4772e6f5547292db2919a11", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0664", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf5da98c719ffd3aa3a09155c7834eb0b92798f2e7c1a616e48c9d34c489a64be", - "s": "0x05b7967300cab829091bcdaf22b99edbcc0854c26d1e451fe0ec2046c50c79e1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0665", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x30515cacc2e597431bc938836435d02d80613c36f62c31f4248e3d3b95631d38", - "s": "0x41366ffea29b9b190d4d153c2f3dea25b3afa4466f4f8ca675663b03199413b3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0666", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x067e64845ac7f1cbc28a753dec913200bbb99c85a631d716731572fc1c8ee412", - "s": "0x1c7fdf1719ce3ae8cf9f5807e171d340943ef28227f047a2a3cf1b6a859d4ea1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0667", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x49805f079945d17545656a8fa543160a7e3cd1c26af7011b12360d6da403d114", - "s": "0x77f018f23af4192344350e67068d2b2cb67e99c8bfa51bcfb85e0c9fb0915358", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0668", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcd5b4844c8111d4aa0b8cfc27a98ca6c68dd00197f30caba9e25ab6fdf0fcd8a", - "s": "0x303fa7c6ff9dc10972e34c0e3b371fb3d57f580c39c5f581bffe6a0b8a98fa0b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0669", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x88a408ce1f8961b42035396c7bf40b928d72aff799625dc48db1350bbd1e497d", - "s": "0x2ba4e53a868371e18c2f699cb2644d901599352f17e330cdc1d0800e03b4c14f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x066a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7e6aea831dc7bd2ee31d249300608c859eb643ac8e06ea998842028f40048bff", - "s": "0x716f21cea9ab146446e845b78b093827b291852b78aedf020e0a7b6ce57c112b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x066b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb8dbc8f2d447c49a8eb2a03b3a3aab76e359f5ad9d5d6144a930ac76e6bbbe20", - "s": "0x65eafbff6cfc6a9747c1dc0ca34b0bacad0332be31ad4fe2f978ffa6d1299e09", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x066c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x77b2fe1faa3234b885a127a46161ed33f9996df7f5875fa91e5bdd724f3065c7", - "s": "0x4ade76188a37f1381048ac1a3aa9fc3478f3e0b157c785f7b9eeeae0458666be", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x066d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x434706588578b85e7a1210ec2400d85e91cfd221e72a1d2eacd039c2107d94a8", - "s": "0x7e5010ffe186b1bff8786dea9c66751df604aabbff44bfd7e6f5dab8b46785d0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x066e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcf9c7a3dc7de407fedec28eedb3e583a7ca1584d8a77e897498fdbce3d71ee82", - "s": "0x281bb79ebdc131624008ad800d602788cc36a44528425708e3ed577e2ac0311d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x066f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0759d5b00fc3eba9e67d704be6537e5c9bc28b715c95e1ebd0529de9b9ae8b83", - "s": "0x4947fab5f9fea6b79179bd9882066f071bd01b164f916a05c2fc783d76f871d2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0670", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5433992e43d2e1aea2d90714fdbffab236704dba01b39e82a629aa2d4a0c78db", - "s": "0x133ab35114d78cc8a02be3366adad56cf46948e3730760abd9edd75d4dadfa70", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0671", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3615aea7ce703a94bf615381fbe3d57dd34a4689c41c2c3c1315534d75d6f7b0", - "s": "0x54ba9ac6318f4cdd0c08b6a3390258a34d7b57a1ae8efa55ad258b0a2efc4a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0672", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc7e4b842bdb5de2abec90cf215cb0255d260ef2aa772bcb71d0cf21bcdc454df", - "s": "0x08fb778d04976db4ff994f77ffcf7f382026406d6e34d7fe01a786a44e34c430", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0673", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3fd9f491bdd3a9d02f91c03a9b29670d9ec818de32c374d35702935aeeb2ef7f", - "s": "0x2c6413f56027b1e47bb4f048c44b5f2c19a001adfe9df03405f7a7b46dae1a7d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0674", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc30551c188c20f74093a5c24c9c0c02b47bdc51831167f1a9607b9a865c5f267", - "s": "0x3870442128536459b9356b30b440c74b01aa276a3f30cecb65d31d12e62dda4d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0675", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1fb4325c7649ce84d90b8f4477505df5b2db724385d1ee16d245d337ebc8e0a7", - "s": "0x513f0f3c1b6f2a7c5b888b52e4e2e98a03b2243eb122d14a4b5637d611c189a4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0676", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9a41aeab58a99e80df4f52c1d6a948b4aa4f7a05cf3d01408c0e686b5f9acf3b", - "s": "0x1353581bf1eb24c2ced2474943ed82a7d26bdca398162043aa3638f111e3ba02", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0677", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc75c5f88ec8962a27fa91e2057bba7efc8f0769eae42b292e01d12585225559f", - "s": "0x349f6f2e3ab0ffe21d723eb3e39fa361e7c14873cd0a2f731a792618db6fc04e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0678", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xecaeabffb29f96c7aec5374afbddb8df715d2980b2e27804232d2a4373e3f366", - "s": "0x43eb7910e075e3d826dab2396a6b286fbdec55367c7c55ad35f32009e1300540", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0679", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa37d0383aa9bf34d7de4ed6efe03b7a353ef5b31b9dc79beac511ac9906e7325", - "s": "0x4b3ae3fa0afd0f1ed5ea4785d927efe392e48dd1bb18eebb2a3588fcdb4f938d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x067a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe6afbb9adc4ff8001d31e55bb933d7a181c0d0edec4f8a0291c4855cb5bd9ef1", - "s": "0x2690d7fc76cdb6a0c6b5aa662282c6cff1bacebf88011ece56d72e100bfa2f34", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x067b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7324b5831e291f001f1c8d09de2e9f0af5d20ee6fadeaa811b236b9c5cac58b4", - "s": "0x21db0691d4e6887274ae8f100f913f309a8fd9af8ebb2f857c417e5b372652c8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x067c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x397996c80b2182cf7f7186c68eb3db82a4873a8de9ecc6a2c4f541fbd4a64ade", - "s": "0x25a06f4cdaf5377d1003ed892deb8e9f99947b8a8054aee076c5c21d44e31ea4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x067d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x28d1222f0d865b8b9abf6a3fb8cb75749b6cbeefdf5c8cd00e51bc6f1306e85f", - "s": "0x55c7ddabd900cfc2c018cf5519dc301afd74217b8c2335c9a3ec68d3a6dda0c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x067e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeadfa64545e46da483c6883928af5d2859b6b2b0ae75ae9e2a35534935e21c3b", - "s": "0x3b96895e4b36a9bda81ca179a61c83de4ea18dc86bf306e211f2cb2951ac440f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x067f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4bcfc38062acae52a3064daba29f87635615f616a2e3171a934fd6061195e0e8", - "s": "0x71f7f8723e2cc8eac37e8cae958404dedfa296c7fcc8365a9ef2ca7942fb334a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0680", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf7c37d81bcfd3f4905d33773d26beab78444f71467d4e7d2b98c55622760c543", - "s": "0x621edb20d1ec580090a4f7e16569ab1925b00b15e58f536843d35f19ee038255", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0681", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa8c7319bb946526667c14ddf4cc84ca6c18bb2b4556a136d04716b142b8b5366", - "s": "0x24a07ad5158fe87c0fd06c362b88031cb4c67cddd7e9235a0b73aab8558c01d8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0682", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe44aeac777a06c74f4200348a9d28e209a75f411db9c7296a84d1a27eb59ccff", - "s": "0x37343e4bc25b013f43b2219cf6b3297f09950cd726dfc0e597d1ec5c23f4e7c0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0683", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc2504a880b2a90a9c7c2c0c98c2042c0eb529e6b5a81fc441de37219a16c19ec", - "s": "0x4617813ce7fc1e908cbf5ed39b08cff9dbbe9eb5a3e08d939c04e35ff6d24988", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0684", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7b3a9de0e321cae73a5904d667cd7b82b04011cb95a3815bd288d226b8de5df5", - "s": "0x08c236c88053891f323a8911ed16848972501ca621cac08acf20e82af62bef23", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0685", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc48e5fe9de6c396d730f14d7943c07783aac1662322cead8b370b125a73d8e11", - "s": "0x64510760c380a1237e1095c09594ebd5562c2911a10d0890686e9aab0a166249", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0686", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x41038db9c2c8aa77cea70d85e7f27f80af540c4c4716f2b7a0c79961d4a0704d", - "s": "0x200d2a814042b1ab1208061861299422b9b6262b105eca6c578ea2d0f24e23fc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0687", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3baa221e00337f6ce3663dc981b0bc7c410fc13a6f98beff7f28a6076ff8baeb", - "s": "0x752eae6cdc4483fa18d464d9c716f4feda0efc235ad65027cc22f999156408b7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0688", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x64c75bfcc378e9cbff4d96134e8e5894f6deff5c63cb93845b3e07df68ecf7f7", - "s": "0x52931e7e792eb1ec982ff09cf5962dcf6cbf0906db20dff8906022b45b0a6daa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0689", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9eab7155a5c17ba3a7fa65972e73a71f80a427ac263553df663479cd96006ef7", - "s": "0x28b5343c5b8542d19e5bdd3a087531161d5319f9969ef4a34d0ef02e25c7285c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x068a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9d0cf956b493ca08d7dccfe978dbbe270babe91c6d5ad69dd2779ff414f3636d", - "s": "0x68d9e47bfd6f12ea08303f9cb5f45302aeec2d4d2d5e952e232c93a3b018a5e5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x068b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x977d7c4a527965af46f375bb4c65f3269aea192bb7e90bd81f9e8621b95c3820", - "s": "0x7d1e416a79b5fac1a60aee1f8191070f0ea851359c6f5321e87b17d5da7d7a57", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x068c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa18588e88716730ce6d7882df5a703fa7da9493a5a4234c5ff2eca2652eb93fa", - "s": "0x2c938e239226ea1fe779f34fd9b4a21304f2aa220e3d28a7367e70837964e716", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x068d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa1113349d636fb3b1408dadb36cadc774ccdfbefa9ab0fc530c58250f0c8e007", - "s": "0x119e4106bea4c7b436030c914101d270dbca921f9fc21868f321397cf65dee9e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x068e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x18663f454b3e147f7f0add68a4e26524ce33c95fc4d326c7db1014d04153a824", - "s": "0x73e3be41ded96691e55b5c658e40dbea785742dfaf00f1b15709f70544b60438", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x068f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5ad683b9921e565897e523af83e22f93692837ba9a97d10bcd0da4cf592a7f92", - "s": "0x7f548c7d54920cd71644ac6de62a59c2b96fde2bd1c572f3ea996d3a20b11394", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0690", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb77dc22e066837233f4ff63747477455044a44a9a56ee3b1dcf2017d0a466fb0", - "s": "0x0cbcca1ec2f802ffcd65a8ddbb3aab20efba651f84ca794dee70af11613e6651", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0691", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5259affd3b81ef4601b3ecf6c369ed24674ea21c11603b5233be46dd3984f589", - "s": "0x4c0f282bc49e8fe79f4f7d3118cd025b4ecfd15f82477c2d58d6d1caa5a463e9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0692", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2419a0bf1a00376d63f6c042a34b4d5fcbf43579170d4e618ebc3bac36614767", - "s": "0x2cd025a416084d459c5f576eed025344fcf241c74ae1a2d4410b88091e3bc78f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0693", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x67050c2fbe367a633357dce0840679924a2a186327d1382607cf730adc66fead", - "s": "0x7f9a9dba5f143183dc660cd71823b0e99c685570352d21ac6ac9c96b6e1fc577", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0694", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x64745448fe9cd1bc4208b59d570a0c6f5ba9503be6fa3f9a6a937c7a43b206b7", - "s": "0x1cc32c05a9f837b859a1c13d9cfb84e6999020b470c034bf0751ff8181a1b4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0695", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x70a93f418a789c34ae278be171ae2cf1ee4af05944c9b53b6df8b9d44fee47d2", - "s": "0x579ca7201f3326d714e668df1f113e06c01ac17227bfe4c7ec8ba72ddae21424", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0696", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x47c1294b02b2c83410cb83790b8863d5725e430bcd129bbf0a30ba0a4841fc2e", - "s": "0x1f90b3f60d3ff6452a83f5c30722492fadd3c4260cfa0d520f20219625d8e073", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0697", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xed6fb6309e38ab8b7c03238bdcd1a5cea4a46fcba97ce3b7f0b994893a4db1b7", - "s": "0x2794fa90db30370617c2b242df00671c880b9422892cc8bc954f3cf82844779b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0698", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x14310e77e5902059f89f3de4c10205408e1d63357990250e6782e58708dd7b1c", - "s": "0x1b8bdeff9023e3e886fbc89807454335f1ed91cb833ee0f76f27a9abdce39dee", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0699", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x52756c00ce331380d6ca899530c35150da6051015962c62f5b48f5f38ed9e4e0", - "s": "0x248256889cbf2269c45d6130c378089d57cc207439371f830d6c6fb97c7b176e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x069a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb1c58a20b1b838f9e6df3254624423d44f837df59befc4999bd1e664628dca06", - "s": "0x1dc0728efd709b8720ea34b5e2a83d8846d5e767276340f7e999abb2a217fb64", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x069b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb169156f19714466ef5dfab18c57006432fe722db2a124c7c9e251b140153c44", - "s": "0x58e767d8faf347254b246290ee7cd678d114d21b6465d442946537e941cdd411", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x069c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3d4c5fc46a787f019282e499fe44d49c9b8e3fbc7586204868b49ef93d665d46", - "s": "0x5e4406fc0706ff4607dadd6991932352a18fbf26cc7aa683959d756be85029cb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x069d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8741e1a0940aaf76c4748abec09ca0a49f294a957cbe248615b7c02bd4e3bd61", - "s": "0x7ed47b358971db55e8a4840234a06de8966a4de191021816724ba8d42e8d0cc9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x069e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1543801811e0978649e95d9872209299164dea955b146d78edf3e84b9ce48334", - "s": "0x2020a278e694af46c3a8f0917af4720058f1342a0664adaa61b708a4e69765f7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x069f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9c194818f864db2136fc0b80697f26f6e12b294e10c184c0573109c7087d1fca", - "s": "0x59b8fe7a72798ac81b1e5b4f32ccf719041980e92df8c5c1b79b1ad1bc12b203", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06a0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7da4417652bd1ce68847a392976a0ddb5f2da7203d8006a09e1085fc963396b5", - "s": "0x11dae7a8881c8650a3642fab332cf86bb3619c9dbed95968c4fdf509d8453f34", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06a1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd5b1dbf2ca7e1555a152a417586c039e2e679fb53259bdea7027d0401f79822b", - "s": "0x524f7a63a8458272dea7e6f84f7e689668b5993a383bc10f20111d3472b0da67", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06a2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x194bcdf381bed461976bdd76113364370ad6549e436b5e2cd4db5bb811d4e8de", - "s": "0x5a1a4e87a4d8ceae545c32abfc29e508abb1acd4d89e8e6358304853e4b81832", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06a3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbf2f8cc97e43eb134e06038a5a78b0139562376f9aec8e6eb892b616ca5f16c4", - "s": "0x250de0cdec25624f32a461676dded863a131efba450435ae88d437dcbc6cf507", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06a4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x588f5427ef3d57660a21fa6685fafcd3d09bebf3af8f714a806eca21a6b3755b", - "s": "0x45bd9ba5e2c12a8d95dcb5dfb00130073c6fc5b60c8895c51e8f9cbd5191c087", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06a5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x96fd2ebd5927d02e664e4e91e4c705549b874b407771f153006cf336a8de4a62", - "s": "0x126ecce66f0b5afdcbda5fa4e2ec4f5f38e64f12ba22e346636197a32f8d4e05", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06a6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb4bde08deb9cf7d887442138551c5e43432206ade4c33e433caccd15901fd255", - "s": "0x5ad4f306f69a2f6f4c4874534698baa72812d63bb409e6356d3ac0a3440c2aa9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06a7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9e7afd04f444b482912d75cc2cecbb172bd28fc181efebb018ef44eb8ac47173", - "s": "0x76c9c478777c30387253bb0971188f39823741ba8d648fa071bde9de118b80ed", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06a8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x46d60765b8a748d5e9413efe5527c24573bde15d4d715393ed7708eef0c2922c", - "s": "0x24977c95bb0c0b627d1cf5221cfa15d2fa38dce80b00d45b744c8f7c77c2928e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06a9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9c94a854f42edd7e4d98dd93fed2dde91f607bbd52c69bf411d7b84716eaf6aa", - "s": "0x7b35416aa530b0a345bba555154719f2db71a5279a94d0091063327e8e58847c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06aa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb2cbc657098a78d8ddd837ae8ac1029922b2f1639aecf962a3ce457d810f14be", - "s": "0x08a3d385e75d6c6e1feb6b3bd0108ea4cea33f5bb7fa395f206cb560158aeacf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ab", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf1e130e2dade821edbe0b77fffb47eafe8cc39f2af62e248a79558dd668c62ac", - "s": "0x475811597886a7636c414703afd2d74caafccb4e9ac840b54c54eaa8689f513c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ac", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9fa9103b465d6ab281bca8946d1802265211022dd5314bec43a000b05551e5fe", - "s": "0x6c53da392718ab50785528df4ca06400cf0ea5422c5c7b68c1774f98cd8f73a5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ad", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x08930319fa16a4ad82b9654ccf0e06f736f6eedbc436566bb45d883c9cc02226", - "s": "0x3a7d969c828271f9f6ef559ba861cda94943020bc2391a6f6c25cb56ed63bacf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ae", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4d4c4be5618c0d7b271575e69fbc8d1eaee0a67a41ada99a63d14337ca1e420b", - "s": "0x0e0fa99a28f8dced949c42add8849e34536fb4b47c0217c32990822de2f5a705", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06af", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcf5b0204e137286cf6c77246bc444ca32b3a74b5326685c66f003b756c8e3e58", - "s": "0x57672f0e5d3eb58ffab4af0934504d149f15ac6caeebe9a0f92c8a3b32ca7508", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06b0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5749be21d8f3827a0806059193cafa97570bf66f7389f03eb02ff8861802e8cf", - "s": "0x2ed1e3bb1ab7737150552ba501475c71aa10eb823982d93801a44349726689bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06b1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe0a6e9d82e689debdc551af7b42612bfaa84e4aeeb5a6c3dffd2e2553cef1a56", - "s": "0x0e59bee3c9fb93e2e409e16e058d83d56b31263703584990a2fc6e847184c112", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06b2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6fca8d50dd5e6d2428dfca742b6988026da98237d8e70701c701d50b393cf61d", - "s": "0x0ecc41220962cfea76cd340c2867381865726292c79ef590585e51aaded3a3bc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06b3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9199309eaf77b658680ca4b066dc06d286c64a0e3ee8110f7348582356aed375", - "s": "0x527df078d9ffcaa67881010269fa27855c7eb520077bd740ecd0b14090b79b93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06b4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3fe0826991a6fe7a714bd51f4142e0b7c5e90f2b0fe4e476dcba0e73e982061d", - "s": "0x4396873788bec4aeadf3012f19c2b8bb29ba3a25fc952a416e3e886f190123aa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06b5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8084aa5b828a9dc41c78c6c8dfbfddad195494c788efcd083502d349c5735aa1", - "s": "0x4a9d21970f01ca9b21d56de8a099fdd247f336adcfc2acf10884c6c7fb16d5a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06b6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5e94aabee2fc5c268016610acd4bf1395ec3d4dccd8400c449b132943bf25a06", - "s": "0x0750374e47e426921f865609df08c1f09271fca7907bcfb55182c1c33da8386a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06b7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x416543ec227a57e76f089893de7adbeb255c61581b64410302a2d284eb2c0796", - "s": "0x6ac3c6eb9b3ccc90a18cf2b33a2e9e88e7235a7f4472ccb7aa6db28bbb889a74", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06b8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd2cf716ad1b1d164dad4435d826139b0c6f545adc49fe808d88dd8eec2edcf78", - "s": "0x493b8d61240bb38705a2ff53b50005134b78a0a0b0b0a88ab1f22403317a64d1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06b9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9ace9ea7f887ae6abd7eff270c3a6ac38b581621567067559e8fe5fc5611cc53", - "s": "0x6a8ae7c63453b9eb63e41c5274cba5c9b66803241f5ce73b6e5ee01f70aaf707", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ba", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x76ae2e5064114368812a5dea75941690ae642c752b1836f751bfa1dc8e72cfcc", - "s": "0x5ca5e67c84a3db282adc7d6e70c5335f423ecd447bba1780317ab8f36110c2b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06bb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xca11d85f98f4f8b95ec48ea19d414a34e95a0c3a420ab0948e288d93a93c769c", - "s": "0x1f98fb8f20f369ed262faa11daa6551b5242839b51302e8b4f55e443ef1bcd4f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06bc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5a327b0b52da797b6fe89f491c1850596a8c2c50453f326eaaf04435e04bcb85", - "s": "0x424328e521dbee2fe40050174ad8965a2e5c2a8b1d8ad9bcb775a5a090fa1b49", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06bd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe8b741a56c195b95098899aa470a96fe0046a02a74b76d1455d9b7f5af4036c0", - "s": "0x45c6a15b72f4e3a32d93bb5d7a8879b1751e790366b6821bdca2f503348ade49", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06be", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcb1a1da5e427ad6aa93daacba373efd16f134b1529fa980e08de2ec2e85231a0", - "s": "0x338774c389148ee81947b6b685d0543ecc9b4a00608f4d5df7b73a3f0e97b865", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06bf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfa7e0dc7445469e8d75adc68091b686b773fc015c4ef0f0742c8a055a0c6ce2e", - "s": "0x33cb0b427bbe8aeb4c9a6dc2fd65a4bc1b38d268fbe80f9039f613ef811a08e1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06c0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9ed7786438c445eda207120efcf74f38be64e5606389b2effc37c09960c97b23", - "s": "0x6b4266d010aae162e3e3d44d33a6d781e59ec11a1f4e24a7232da60ec83ad610", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06c1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd44c10fe87da4ae4ff44969532b1aa1eb1439067808b363825ce0732d98aa86d", - "s": "0x45bed7c00f2ca1db2146ead427377f4af7cf0dea346cee1b779cba4192b889b7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06c2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbcefa85ac01f8cf1cf0a957b71007b2ac5cc0e8bf223055c299da3f62faa20f6", - "s": "0x7e16678c41eee2a979ac32f540411f95cec9229a489aa9f0576704366f441afb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06c3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x89c87f244e5b8bd0a8c7ab057ed4a8fd683326681d31b939d5f7df7e7daf3875", - "s": "0x6c81914f4d9da0efa424b55f94eaf0ca978ccafcdedc20fc43a478482769cd42", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06c4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf3ff352877d79f145991a4322752e84b64610a81681f296953ec6f28e486e3f1", - "s": "0x483146bf0940e759c8d968f407a011c9a995d96905f15d4729357cd5881f382c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06c5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe75bdeb803ae54d2065edfd011b36783cd06af473b8084ad25d9eb29930bf4", - "s": "0x0de23a66caea3ee96f2366cf4775a98d088b1b480e87840d56e567f17d69dd3b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06c6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2df993029b08eb0cb2e2e414c1c59bcfdfd2fedd96927d14f7b0117c816832c2", - "s": "0x048557310bf81f7b0aa0b849ee6da2e4bbda68b61bad047b45d3715ce947b01f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06c7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0180a776b36a08df4487968c1ab81fae69d509b1c54399d28fff52e7d3cb91b9", - "s": "0x510de88762dcad8f05466c9c18f102bab6732feeb0c7b239d336d9075f415e9e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06c8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x191dd09dc4de738686e32a9d65d0aafe51d6b2f28a53dfc2ec4d745c4afd952d", - "s": "0x2c9d9367f44eb42c5e87a305bb3e491e7b0e71a0938d9fba869ec1d47397b7d8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06c9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbf8d22970df2df37aceb521e7813345ca799fc9cf210d821072da07bb5db61c3", - "s": "0x621fab8cfe1243faeb42a7d4a2d514bbec628d07b892b25704718dbe7c8d61ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ca", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa34203976d4d31e3b12eed623d31997b74c3dc47c6eac990baf1da6c9a11149e", - "s": "0x71b57cb97d9629ba4e401d4bcf9336fd9eb76bdbf927b5d351a9b24a099589cd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06cb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb24ba80ff38a28165b4dc77b35efec546c4cccf75f8aa951c8489364403406a5", - "s": "0x6b61f11efcf18cf65e8ddf2da38297e37f68fe6684e9d4479641f37dffdd9d19", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06cc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2bf8b14ff249a7718520d2365e3e2272639d4fcb2e854c4f483c70d63215c8ef", - "s": "0x5abd7a0b622d556e5de1dfc66c7eab503519eb96cafda4e8a4ec8fcfe57f3cbd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06cd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3b40a02f165f8cfb81f4b790c8906573dc66d4513b63fa67db483617841d77cb", - "s": "0x01d2b2b1293741ed94ba612dc3c5e86688b9473200234c20296f5eea71d5e897", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ce", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x91a48127894d0283ab2c0ec733938d437f4151bd9749670aa61d8a48b5fe5bfe", - "s": "0x15e9b9b7bf4742a977410549be393e697d1dd05d971c822f6b7a9897e6d5f64b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06cf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x67a2fe8e275be3aa7ad5b11889d688280e362297f6450077df4b993d5db3098f", - "s": "0x5949bed87f647723d7c00c08c942ed9ebb6bd8a5aebb6bc4c6969beb0ee91cb5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06d0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd7091d0450103b4694ec6114395adef7d51ac3bb5ca95890aaabb7e83fe5c2c7", - "s": "0x20e776446174ee8471591362b3938c849b7d04ca66faf85fc2d4ec1c67b2bf2c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06d1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfab4b564410e54d493fb133b5892cacf26d6ee9a97b12c30c044e6ef0733d667", - "s": "0x37da1ad834d6a358ab1a8403b95a2ee83ea065934e22fbc8248e278a48643183", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06d2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd115b3204c442280b3f021ea8565b9544d8da28636f2b2533bf2e8dd19e9b527", - "s": "0x4ef92a65de4d8ccac3908eaf45e42cbfb96deac263f30c7279a792649af8b3bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06d3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x01cfb82429b2679cb2004880301173617b2f95a4fd1e32fe5aa0dee78cfb771a", - "s": "0x36b26660ece3868ae6fdfeab7f2bd75e72026fd7cd04a596387084293c2bc139", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06d4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x74b23ed7bb00005c0448b35203e1e51dbbd05ccdea9d87247fdc108e1a59df37", - "s": "0x1617a5b2ac4765938a857deda1c346904bcc392c6e2b52c31a26ce82552c2f78", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06d5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0fd62711851bfb888f9f8b1d84c36c5c374f095b666836308d6978a3192a462d", - "s": "0x71ca5ca26bf00dfe19cac4bdb813eb2fc00c2b71a5662f25c6bd7a8695e10ecf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06d6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2ab257133252141735aee2f3277535600efd5858b9ef9dd77e10b70c5abd41d7", - "s": "0x05af84e59348d0d430fb9f2b2fc1601dfc80d23bae6aeaf8d0724585589d99a4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06d7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa9024ffab26a9aae817de977bef907dc74f0c49566495bb1870ef490a0a8bc1f", - "s": "0x4a3161602a4ba9a8f0a9c644ab2d95f8c923bd0dad3a01926300f93115ae1dd4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06d8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5a20845e26b8be674f381aae39fa125f8e22517a199afc3c7dc6490a3ec640c6", - "s": "0x6ad3502b703f137fe9862075e898403653e82c642d528473d890b1199718afd2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06d9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0576ff1235e9925bc9def6696ca8140e656bb53a601985ab108a84e6660b0e83", - "s": "0x12b2db72f649b0d7b954ff40870b1b4e8cbfcc0e0111a7b7b4d0ecea80534d8a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06da", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9439e1cfa855eaebf9af95fcfce2776d64af96a84b463d0c9b526637eeb5f234", - "s": "0x2636e002c01398f1b736b444be48e201a9555856458eb149f55ea3aac08fc1cf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06db", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xefa1189c0147d1f826a734259d731abd4c577410235b691e655c8be2c7a45be3", - "s": "0x10c028bb9e05b157c2fd68428f77a71374e1569b9331479e5626f4d97f5ff267", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06dc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8f8ab540effe1f5657d85abea27b4d29d6d588f82fbd49bb08400cf8764e7ac9", - "s": "0x38b31810a3c2c51698adddba6aded7ce94ce93565f36094624b07eb49183ea92", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06dd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5e23e43965e562a8af6167d7507204873e5b33603c30d1bbeed4203a3c110273", - "s": "0x721829024ca9c4927ec3e9cc7483bb3bea9739dc2aa1b8a3b71ea9eb2e2a5e8d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06de", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x30dfc210849ab764bfb6a3206317a2c471ead7e20db575d3e502b383a7609664", - "s": "0x6d1a974e10ece068f83ba7332ab9302c1f7d57d0022a9d7d1560246b00dc7f9f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06df", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6935ae21d959cd71e38523f42365a6695b931cf5d11d88784b104bb8510f8681", - "s": "0x440210387a7329ff04856ee35bcdeb9260cd4acc6008c4f26d52010e6f015ae9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06e0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfd722e70388a2a84b424b9dd1236ed9a6cbe7aa42048636de7aa650d71daec16", - "s": "0x697a3d6bd498cff6a075a00838837e9f2363e1729eaba727f5b047ba545888ea", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06e1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9b7bea7b4e6a12600298f79205758d31dcf816e0b95ae840ffdec6e730eb91ed", - "s": "0x5fece7b19fb4c7e0a9ffb5338fc244332562b6171c723371ded16a6e186122ed", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06e2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9d1827fe8e4b9327168748f8452fc8502acf70c79d9522957d2400988d6542c8", - "s": "0x7f13d1bc523ef30f11acc517edefe91b48350aff4c3a48fea7e818246f92f049", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06e3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x58eb40ba989fba8d2492bcd4e0275fc1f1a8059025061c157b0ab3d6b3053c32", - "s": "0x0543b4da6ba25d4d87b319f17d5773457af5510c1daa66aa529b7a83de91f05e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06e4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x48da925fb8be0be9656dcb3522f9c68867c6212975b7d27acfde42460c1414fc", - "s": "0x1f6d9ad6f7572635399c28224a495431a4a80622f7a7b5a4182db4f999b995b8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06e5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe0be99cfacd193e61529b2a7cc0bbcaa9c71bf51fc29d084798f3d6b2391e34a", - "s": "0x1ba0cd299c867990fe1b4a13410701fb661e0b24064ced7364b8b975abb655ba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06e6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7d199ebcc017f804dde70fc8c563c96014d6a37f1424754d431d8ca29139a1e0", - "s": "0x29ddf33ca49475478ea11826a589acee49069e9994a58ea139f2766006971211", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06e7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4c84100707c553b4710fcc7dc6fa1414e9408300db73e33f11ef25837fc2d630", - "s": "0x2a1f346034356b666b05a4d61bd3e21b0aa678b42c0d90e0133350f3a955b9f5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06e8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xed6595ad31d7ac6e0b0cd2b674ff393536b4b43166401615647636ec4e463a0b", - "s": "0x6c0a4c5d9819a7b5e84115353be22520a04af1bf3ddfc6b2684b9fccceed51a6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06e9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd075b7d594dbe6a233d37ef85b98cca0692ff65dc4c6a1ca4b254e14203490fb", - "s": "0x1c596a992a8c9bf21b511c1d50d46297b42346d83489f384d7aa6aa8cb1fd37a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ea", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf79082f248e84fe0c8585accb7afebcfc555860c525e16b071c0cb992d4f6d44", - "s": "0x1f6324adf60e839f5623bffc4635b69dbbf7588d659275d47c8314adcacacc34", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06eb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcd85d003a9205779236ddc73c745b16602d48d6b891bdf85575686febb53789b", - "s": "0x4fb7df41298bf54826d4b26d9e309ee2f9d84c86b73a91a48a78fa26b58e1192", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ec", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9d61494c74d4078e0b751bd417e72238c7dd73e9e69b252cdf7242e4cc13e34d", - "s": "0x02ee337486c5cc4fe990482b201236f679b096801807cef73b8230fc7be2bce6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ed", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xafd2c8b32fb97b6a817ce6b76fcd858f9d45b3d820ea67d74261c88d3a0c1140", - "s": "0x40b5fafab976264b1ac9e1dcb5ebbb7a094b7a26590790c4dced97b592dc921f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ee", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa63fe1fb2914f9ee5c14601b1c3a00102b609592e6c0da782695f1918d187b6f", - "s": "0x6477c580d67b657809a5eab179c9608170a99018ef19631d5dfcd9435e5797fc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ef", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x73ce0b954992222910d1dccd313739dd3cf71daa306bd70ac604b89c9adff82b", - "s": "0x03d768b267e532a5221d6584e361cac6aa8bc7aeb375e2329f6731a806275f0a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06f0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x28a3d4b43662f6356d1358f5d2ae4bbb984306c689334b14e9ca77c8002238ac", - "s": "0x7665ad94c8466f8852b43c1b450d530567e6ff74a4559f0a53e4645db43bab41", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06f1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x11cd0df309da278bb6acbe58ea576ac3da0dd0ac8998f08ebacae3f190101582", - "s": "0x219aceafda63141369da2514897bcfbf057001bbd06ac94fbf0c211b470fb17d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06f2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6bac0ed381a7339f9893a22274f084cd5bb5755b4f1d771fcce8e73b2892d69c", - "s": "0x5895f343264fe577c24c69fece12790b454c9f5aa08b38d039991a40ed555f52", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06f3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8ae212e209d3921f26aadfbaf4ae13d1766f333e1aaf998605dd33566d997e", - "s": "0x60c1b82d6a94901c63dd4c600677e0df00db79165d7314848f463c8da7256b68", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06f4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xafabea30830f3a1201dad244c18a58969850821abc55f410fc65bc2bfdced053", - "s": "0x3e3a917a50b021cf0fbef013832afb28ca682fe5a51013eed17a5eda320c85e5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06f5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeb71cca59f5ccea97924dfc3bd36c1920e80616f9bda2d9c91dc5cba7e136074", - "s": "0x486cc5b26205b2f95b231cb5f4979fb64b8c7f8cd409ed949ddff9ad6b387e93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06f6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x91f42438e6800a0fd640f9690573548efbd38e4aca9ac58548246e8592450355", - "s": "0x37415c0502526bf79323271bc599c99ffc9bb63ab43bb88e8b435666e5d37779", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06f7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcf24a66e22b88f4a468d7dd12906cfba388cec82298c1dfd84aa9bf6d5f27c44", - "s": "0x31ee33db5a5872f3f162055b5786c6afd7e65a2d5b4710a47f529bf122418d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06f8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe8d218eeb8058d3c5e7f4bb01fc88ecec4afca01c057e2363bd39710aaf28461", - "s": "0x7b100e70294e9c167b5b99f1d0ea26df7c6e6bf48206a55a24526e8d7cac5d0e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06f9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0e83ad3394a78ae00b239d2c3d927721a9cc6272a20814ed7b9edcf8f6f65c1a", - "s": "0x3f3f7aa4e17a58c96103eb9773d67993213635852dd4b49a4918f7354d0e5869", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06fa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8d1075b2dc6aa3bca5403a1dcd0971e1aa33bd88edfa81ae53133b3b6d88aaac", - "s": "0x5fd5d79fd883c5d86a99071c7e0139e0623da7c8a9f68dc3a1f00fbcefb73905", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06fb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x29377e3d99a1a6044976766cb6ebf2037a42c1e7bb9c1074d3a3d1488ddbda84", - "s": "0x4caf782a338f80508e98feb146cbfd1718bc848e921f0b7d78f26ae048b8ae4e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06fc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0b3d5c2ffb520cf19427e3f19ba15dff2bbde648e425f7ef43b50f1142db37d6", - "s": "0x629d842adba009ff494bdbf11baef31aec08244203c04dad23bc5bebf98553c0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06fd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4c6406e28385ec3eaae5fe24b9866f6d69c7dec1d0f3872e52a6618ff0badf67", - "s": "0x227e5819f31c853bfe7040dc2bde033ff0049ba2a4570c7195b8e2c63920cede", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06fe", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1052581157d0d9415629d159a1fc4001a3ca6c95e66205cd0fef96dc65325f99", - "s": "0x63a84e433a49085c4dab9efedddede9eababd9d512a7697d6e829029e4f25f82", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06ff", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa40caabb73aba069c945cf4c43f078acf0088b40a236385c5a5f17270e8aaf91", - "s": "0x1adf5010628b26854166f83f153107adf090712ee38601262208e5e0c3ea960c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0700", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x628944f381a9a32efc474c25831e0ad012adf24b9504e0f435a58629d8a944b4", - "s": "0x4cd11aa333fa381fadb69f42337db66ca7132c5fd0d79b9b2ec71d7a224512a2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0701", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x281433fbceb155f0f6f5e1a39e03fce790cc0a57deedb965673f445bea0e8356", - "s": "0x12aa2e911ab163586894a7b01bd3c1b4e31c949d737fe60a459fa24358633e55", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0702", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc027520d6d80e5ba725267b5b685476142786962bb6747a8da5033b4d65ff11c", - "s": "0x5c3a062f7beaf6cc65141a643c240f32b3bde539c93985d1c0ee72013ac489ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0703", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2be074e9455d031ea2b2d10f7892fa07ed5b20a4936951d30384fa7e9f3f1d9a", - "s": "0x3c35791cd2f6a5ee48bdd2807bd84d41de962ba1adbc1acf293441cfd7dbce6b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0704", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x56710fbaacd8b19cdab82dfdd54cb60b589b295fe13655a9e95a5af89a8aa3d0", - "s": "0x280fc094231ccae9810608b24423e57eaa80050ee7ba37fca3ac145ccfebb7d7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0705", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x238903ef347714033f7fadaacdc1adf8ee7c566965474704537b48fc751ad3e6", - "s": "0x2a54bff125df1df2929d10e676f182ba80a8bf3f8af6953789ba6da3205fb409", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0706", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb73773b74dd4803cc84697a91b6b38a0a1becd37c6b6678dd46eaf8b3bfe6b35", - "s": "0x17c06e796b7d91286473603a42bd4c72b7cefe2eef5cd40ac67a4dfc5c08f788", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0707", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd9cfbed4e542b012d2d39855e8f5954396797f9170b4b4ef1bc51ba8869309a8", - "s": "0x7c92f9442128d2f35bda29bd0c8e4ed16015ad2e1aa9daeded7682cd5cf4c69e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0708", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2f914ac83d4bc00cbf9ac0b22bdd876cb2ae5998c03f51ca8207a1d7a44c7c1e", - "s": "0x3b746c2548741c6502b6d5ec1a0cd93d90edee59e13c83d2c09c5c467b2823da", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0709", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x96c9dfb9642ff121c4eff2eb184cb10765359ebb917a30f809e365f31b36d3e8", - "s": "0x631e95058f1c582a59bc09a1240842daa840770915638bc6139df6f633365141", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x070a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x459ec2d850cc0b0d6a68d91d4667d790ac34795bccee876c537fdfef357ae325", - "s": "0x020e6f83670f1e84c083215f63f77246517e0300a9e5e62d173c4c13b2cbf211", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x070b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x07b1a5c0aadbc662fb2713b5902c55d988632cf7965d4111855b4ac1c9b19a7e", - "s": "0x6d0e45b995ae4bddd2b38d9d6bb61b5fd75d0441861a9b768fa66636575de7ae", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x070c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5add52440020553a8248c64cbe6d69a0fbaa0e406ac82188a28cc50e590ed94a", - "s": "0x3a77faaaa1e0d6642a1f1d686d082b268364a8110f1473a053fc70a9012bba94", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x070d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf109159c1cc980d7149c57a4c195f1b0e80ce10d0bf263bc1a214d1f8db4bab0", - "s": "0x6cd5ec91263938a882bfdaa26e1f6b24eb2237e016eaed893fde15a1a6c29ba4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x070e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x68354308e2a02ef9667b43d7476c7551d7f3ccb57c5bac51e32bca0833c2d228", - "s": "0x7b9e771edb4eeab29c2a6b51c920df41c0fd1c285db52ce8456cb2e86a7a31c8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x070f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfe944bb53a38f1dad3874d2f51b33d1db9ad3e5fd35f9a5b2ea463d1c8088a67", - "s": "0x604f7d6a893e1bd708da38982b7af44145d48f4dcd5a0e39f8006c7309a3d228", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0710", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbc4c06e041d814de675a59c1b74c1cae3d263b49d88c28d27fbd1d15fa12e077", - "s": "0x269c121cad3abf0e8479bfc6bc86c54dbbe61ff466f83b5f9e5e40510af4c913", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0711", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9bd53826ac3cfd8d46730f1630e7a89869d14ef556f1cc31bbace066e719d55b", - "s": "0x75444b99b7066ce56a69da2003a2627ef905bb86c8277cdc9b56d887cdf8c012", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0712", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x98e7cfd48f1421d18d96ea699319101ce0683ae5615ed9232d8fd0cc4335edfc", - "s": "0x36f1f254770c1e6c5082f44fd31e6a6cc449f3620e8c338923223306679388a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0713", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0fe74745a827f62e5f80ae4d85db207b7fea454fb0f83515ce38299f7634593b", - "s": "0x53c409d4ef94102bb2f5580a593adf321fd72aa5bc3c83c5bac3508c27901046", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0714", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3a40b91d6bcac7acd8133c1e6975c95cff4ed666188cbb1c062f16cd0fa645ed", - "s": "0x01ccd914391b2a08d3486daa672f1190b7379e1e94d76f0905a104787fa9d0a8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0715", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3a517473e4f8df53b4778e54eb1fad9e33c83ce3eff5cbc851c695efbf116759", - "s": "0x030622e963e8a8bc00adb605b82605e2819b126f59a3d6b5ac584b49c23b1041", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0716", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbea64932ba64b7b33f01fb089cbdc0788091a448b9aa0137e0227a2036d6bc86", - "s": "0x4dc907af51f7f40a22d868c51b3b1b24061d8159f3e11d812f90db2096f277f7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0717", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x96eb06d2f03430919ae65b4938426bf3ac12ed2ab8967742d4492d5a8865ebf5", - "s": "0x55ddb9b6dedbc4afdab57d0de8cfdfaa1936b062d2515a02aaedc44e9b560c0e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0718", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd5504cf8069bc31b496793f441e15a251658d62d6b169a78fe83a5633749f67f", - "s": "0x2a70694ba755d87546974e9272d69335e6c9809f3a7710c706435d2d411186f7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0719", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf4ef89149f27e287324957f2966b7bcf6844c532d00caa56c17b0a948bf0d15b", - "s": "0x09ee12b9e515ec9e8c11786bf3c1fbdcb982f7f6c424e1cde40528bea46d4f4a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x071a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0c396e8f07517009ee9ecfa258b602b8a5cc919be804eb445d41b05f0a9580e0", - "s": "0x343fe9139dd1e80037214b60e8a9892c382bfd9c445075aefd4e0b59aaa04cec", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x071b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0c9d098e62b1edd0e1cbe90e312ae90e4fc14bedc6f1dc2ea48a8141e96818ae", - "s": "0x0cb7ab6552d9a516250acd54f6de1effa6039ec02d4b5ad39e91acc374fac0ca", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x071c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x06ecdad654b24259cddbed02bef865bfdd3000065029bff61520cf10516f4502", - "s": "0x6969c32f3f1bc8db9f008309faa3777b760b9f1486a2b5c0ecc9a55735dd8e79", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x071d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x30e2e35d5a01f120a5d10111b4902e856a581e45f08872d3f0f80e9488580dca", - "s": "0x605f7f97ef88b9359136a34f4e079bd1ee3f8182a4aa1c70604d460a0ad97b44", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x071e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2fb482f658922187245e21031f549bb87d1d9180ae52f825a62127f0ba8b235e", - "s": "0x712ba3e89cc8a730a27a8bfb1e85b550cdde9985d9053ccbe8612b429dd820c2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x071f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x18ce06f45b1f9aaf8cfd85113fc73ca561e9e89eddfd274312cae53d06d89e4b", - "s": "0x2a77ac9c0a4eae941d2e175bc46f78f5e61615b44fb0fd3d4971949bf0779c14", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0720", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x69f1598034b9fa991db980d7c0b96353f560ab45f75f63eac304386f8eb7e35d", - "s": "0x29fb55360313bab435df82b0f59f84df6de0e09e636e38345402cf5b1ef17b5a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0721", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x643182a7fa0d0abe70f311fd3ff859bc532edd80697f9776a1af6fbd17c3ed08", - "s": "0x2989a5c22a1822f98aa9815c013dd67d14d28f6810c052337b21571117280b76", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0722", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0401d176ecabc2275ba8bb0c83d8cff11132db4d1d480288a5ad3251cfb6bba1", - "s": "0x3808e47b0bd38470902990d7875d1fa0d1225f51aa4631ed96308438d06df2bb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0723", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa023d9b23d390a6219884c4b932319c43888ee47f1d2ca97a6f71eaa9a0475c2", - "s": "0x462479b725b3f1e74a892b32d166ba7c78ea20ef17d569860fb163cd282a12a8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0724", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8d1734e3955332cde053808348f506c036487cdeae945a975b67798c640f6ccf", - "s": "0x5d445c953b419f48579a87f60180bffd68149e6044257b11f15a817bb4fcafc1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0725", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5f89393f9496ceeefe81a709c8e4b81b8c3bea64ec2fbb6326a51df1adae45e6", - "s": "0x68dd257e27dddd6d481bcd2e7a90fe8d250c38ca721d1798922e6e36a0cea86f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0726", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0a74d28d2f882f862136a12dc2f91166d9031f64a2791e0f40da441d2cb5a828", - "s": "0x5046a00b882e7284e6dfc6fc6003659f1a5e464b40b71b82d80a56151bd4c8df", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0727", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xeb9a15df16d4aab095597cc0bdc32fa5dab5f443b5afe2651fd44eda8aa20ffb", - "s": "0x54bd3905efb08241f142292a9ffa048134718ba9a5886c0fa6181e6995840676", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0728", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa80afdfd13c7e83db7d0e0ff3da8518111b160687cc7925a64b6e795e4a3c268", - "s": "0x409c75b473383a15fa12d0cf56b8a76b3cdf07f6cb140e911e5ffa6b2a79db60", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0729", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2c993800854745ddd9258ea7ef013f09df2262c07630a437e439cb27c15663fd", - "s": "0x326a6f9c09c7a2f281762e2c1fa2427b3199150692bed17a9f965990518a460c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x072a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x0d1ef7fbcd87259a1e749ad3320920ae2b18052ce90871d232ef372daf6f5927", - "s": "0x707358ba3f104a4a9b359608d6666cc792dbe46aec13416f0bdd89d8c14fdf38", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x072b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcbaa06decf2439d71296f49da4767e274b3e5fe17ea7264be2f15818762af4e2", - "s": "0x76a92843eda671e1b4ca9db0fb2b27678c2a14cbdf8cd94755b1e91080afd3bd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x072c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x22959eee73b9199f758705bb2abe30add529b60e59a2dc6f100e199c1a4d02f6", - "s": "0x2c2df09e803c67e5680087946a461abbb59c99f9df32bcc0f5844a4d0ce1ebdd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x072d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb4a7c46d5bf4a204b9907bdde508d9921c8686dc2c52a7fe2f7408658822da2c", - "s": "0x5d2b5fe12225030d466dac433e0342df7d2da6438c63903be5c93916276e1f07", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x072e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x2187f2d53ba0b66503919b0381c93aa2564f84122cb7d78ae73be6845d51a648", - "s": "0x3f3b75c4a18d6899118aa14aca1760b988fc4d42265edc325830cafd5d58845c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x072f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x01b4248393d55960082278e385e08bf947e7fd6735eb78d31ab67f7ea4874d26", - "s": "0x40696de84f2feac0743a42c7cafaffd8d94757f1f4d2b5826d602d634c7a140a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0730", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x79251815ddc519ee977c7bee4246473d0b282d278961e61d4920987ecd1b187e", - "s": "0x6572e93862389f738fcf0222d50d9f0eb3f5a148c43556e693503de0426bd760", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0731", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6890d1fe827c5f02d6364ccbec5b4de12a7b5a0c34dc7f9c4f446cb9065a44c0", - "s": "0x06f647e8373d998e9cf4072033bb0f1b2b7e11b9bae9a642283e1d9fc044cf42", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0732", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd8df58bff93e218f5b635d7b36ba7032ef88bf6aa136cace2bd107ac856e5b7e", - "s": "0x34949056bfcc52eaab11784c7055f510cafe0a72a551bfcf8972f5c3714b8df1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0733", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4940b277b86dedccf7505dff55f0b4516c9187080e6af7983bc0b8af26724910", - "s": "0x4585a76e1fd1956c633185897c801fa868cc0e0a59fede73654f66b740148833", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0734", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x72f2280fad50316db7c88c1620b2d92c9853291c4253710bcbe8832e67da48ab", - "s": "0x599d8668f4677fa123be6c66a6f46ab80a0fd5c3720660cdf526cb41bc4774a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0735", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7717fa08b58611cfe944b9fc00449be7528a71c53e643f9975ae16452d3ab717", - "s": "0x41582fda914ee67a8bbf02204df561a4f751089a753a5087fbb2a33173e40e54", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0736", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd1be6a4b2ae2cbb38ea908b0308c4fb5655c540849d7b948180cc24dad9398ee", - "s": "0x0539127449676b03ea0e59e16cad5fea42972136144f9e62ba324e368ba16b0b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0737", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x64b6d787e15d95e61936196ab6257d1473311727a7740aa0cf1874e8f0bea187", - "s": "0x6e803d876ce713702a93e0ffbdd940503b76ba8da405bd6a0a72b1e4d934cd43", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0738", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc8992a2828f803d9db7c2030880107b8e37923bb93360e3a1ca6397699ab6ceb", - "s": "0x30c91151015b9af2707e601654459709c32245ea858109dc5b93e132e8ed25b9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0739", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x379aefd453848db352470ed67dd9344b10071a7bbc50fb7c54a074c2a620df1f", - "s": "0x594d5de1e56475d0484fc458898f268fdcf327a10775bbda045e32483de61377", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x073a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3c1c2abd4ff4236af28a68a03aae7b7e6bdbace7d52f5e6770dc4c132c633c7a", - "s": "0x1b13b5d7e5d5d85c33bca19b9a33da2408dd8403a62a6e403d12febf7d9cad55", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x073b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xdc3144eabca56e0717f30634fc21246ab94aa70488be96a09366cfa5215bf5e5", - "s": "0x312cea336bbf08f7ea57210b809ed88c5e9c26afe9c2c0d1905cef0e29e09100", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x073c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb22ad1ab7b96479e359bdeeae70d7051e38bdaf9dc7f1168173b31d735e2bb43", - "s": "0x242a5923680aaf539fb94f4c5ae636f1cbd4d8a5a7c5ce10f789e3eaaa65df8f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x073d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x065e8d76088561c5e23e3d8276bca456eded63ba83a261a4bf87f3d8b689c39e", - "s": "0x2035c9bf4ec875c8d424ac15192aab80116328edd5cb778391886263d878230f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x073e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x19d5e71de894f6788438b7fb6d7b6d54a11c44ccb0954ffae13902c9ba9869b5", - "s": "0x09ee1bcd2b97d6cb14d3d4f014d3566d5b3a98fd39e975ab4e2c8e48285f7166", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x073f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x10b402bb0aabd6b39708e9e54c7156cbfd7b4241ba418cd24f51e06fb548143c", - "s": "0x087b3ec8ee2fc1ed11098e3dd63271fd184d595afc83a8a9a30f7710a53da860", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0740", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x44883ec5d2b5289f47294e6adad6c3c8f79e39298c701628ab9d4483ae3e7b7a", - "s": "0x16e6cfc5e909bdd9d7589b611f175406c342a3135c3fef761462f8bdac4be9ac", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0741", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x19c55d9141731db97bc8daa53bf4c2598c7fca4c570cde1438301802f594a7b4", - "s": "0x708436639a44d77de83ae7c6b9fef8567c4e8bdc38b99895acbd92f04993e834", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0742", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4db3e6fd1f7766ac9b70b03d13a2eb6403c2670ab6770135016afa668d8fc410", - "s": "0x2008a4afaf80d84e963e2db7328e8b2f542405f5eaaa48240185a5dc842f81a9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0743", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7ca169f18872a4c716a29fd0df09b3ac333477f5f674fb8c45a6e6bf829aa120", - "s": "0x57a3fc1b88c4800eecb56f75ddd382abd21d670ff13251b4eea0b4b895e77f66", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0744", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x550ffd23e790b1852b9e98234b1e8f1a2c02f8a7c7cdc9c0823b21a59623c4c6", - "s": "0x4a250875b95a7fbf61a90174cb03a2686ecab1320cf42227b8526245a466a365", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0745", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x05719bd392972fddf03e8d0c329b6bc61c7cd2993f9359171017fc42c8bbcbc2", - "s": "0x44e9579b92568ab06b43466827ee5c52d5f176c7873f64dab795d17ac76fed7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0746", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x462049e213259aa3e5d24c079e6548b3dae05626f01aaaf4a6310d0755662bea", - "s": "0x16cfe656d36db95641fd870bf9ac6195b9b5117385158500ddefcad0f4741798", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0747", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb3227c13fe8452ac8d091e349632fb0bb7d318f4f3cf06576d3e82c1048bc742", - "s": "0x54f09e7de75d7cef0cbb23c9410856d6263baa578ae7db5d3c4ba2e5a782c789", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0748", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5cf84eb78bb8b1524bd72609b740c357dd36e762b77b5fd79a54898a051bb888", - "s": "0x29c4c1021f2be0117ab55d9ae7c5df338e4a8f96a7891f24294fdb654d855d99", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0749", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xac8a526734d1620796160580afb27eaf1492d8fdbf4ba1ac94197fab5fef96ea", - "s": "0x5ca5de73d40509eb5b0c0740107537c60990067b43f3b4f5cd9ae0df826259a8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x074a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa88ae0978999b29d62d5ec32a460a23a7b915bd9958e5b132484a2326ed1e617", - "s": "0x6c870f4baf665989f6a5fc7ea6b324a639d116b4a8fee7f8262bdd957dab5fc8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x074b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6239fc76ffebd01fe8300f1c76257535a898dccef94720516e86d9fc90884355", - "s": "0x1ffc30c7cd9c47bf773978fd32ea1010f2f0f316de288b1a854023e0438bcecb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x074c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8a70bb953765c5789a04126a9cbb12664c42a00d338a8d060a6d4cebe572f9f3", - "s": "0x5db7d478881038c923927cbca838f07f526d224f628c1eff4a4a52064aee0233", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x074d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x5bb97a65b367ceb30a7dbf2cf236b317c9829deb3dc1f991286e52773a9ab2f6", - "s": "0x2ea7300e5056d5685b90728846f3acc2e48e5fe4e7a56dc19e601a71468116a8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x074e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x45600976079bd02a91c47a89dc41afabcc6a8432f6f12fed185420d4a645199e", - "s": "0x3fbb58c316c42041a08cf81b260a0c737b2f9bfd86d5afe1decc7c1c63a8676d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x074f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc2a79441befb80c4b67c52fcc1723220ba8b3061c5b16b8ea55acce399515b8a", - "s": "0x05c4a2a6f62d1205612120c616d4feea3de488f76f943f9e436b39d77f52792c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0750", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd9af8f6695446e4bdb6150d89693e52b0e88fac7e26cc8340469b8089583edc6", - "s": "0x739683569b097f2f5d6c78cb50cc7e912f4bebfad8522886e40425a9ce2398e8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0751", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe3105aac1e331239f939cf2310e0772f6ea0bab3b9dca1105b119f15a49a611c", - "s": "0x6a7ef917de2539b0649bacc2ebbe945cdd5a1e7c64ebe2dd3b1abce1270eba09", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0752", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa085731dc274d26b60239b87b30d8b7a3a55526aae7a21095775ce8c0d1bf979", - "s": "0x35e934742adca8084bb6a67b21ce0997cdce11e6f69e656d3e9c671c92e96069", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0753", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfd9cf14f31a25437395f93342d300d74511a1ef391737495063507e032f159a7", - "s": "0x24c5c66c12e56bfb096456a01d598623255b77caa0b2416bed737795cd742dfe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0754", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x13bb3c63779cb50648e4373ac6cf262dad73b9744ede5a4dd40ed36453eebb69", - "s": "0x445894978f50ee55c4e9c6c5dc23cd8a90fa83263396418e2ee0f98eb0562572", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0755", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8ecfe28a98c1df0b98aa7a366efb6cbadafe1355db321f878c5c2702ff870539", - "s": "0x50658464c91b01fc444daf0c1b666c07a3e3893d45f8d639907ceae2337ca80f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0756", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4be028e4e532a517d9ee38000c48d2665b9c015212bf5821b03edc6032a9c463", - "s": "0x2d1f56de7cd182259cc3100472da1f6f6a4d1eecdc4500c73e581f8a2767d572", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0757", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x58c16e650c4533a11857a783832476d37a5193bda0843f8bffb1b26381a3c4e9", - "s": "0x0ee34c32cfd7a1a518106a6b50c71815760cfc2d9d4c1e4def23cd6ead66326a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0758", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbc97e3948b3db174c24eac3ea1fe7f67d42c38f8967811a61fa01ef19c734a8e", - "s": "0x6fa131c40435f74811e1bd273699f4f9d4a8739573f1296f88e83d5ec75d0a4d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0759", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2869206764422314409c6dc41a3d310c5b55c67556047df324ce81bce434899a", - "s": "0x53cd893353e7af5a08f834f2ecf4f652e43c1fdfea341b1b23469b5f71f705cf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x075a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x04f7ab7e3e04a2b320d4d92fd76dbdcea7f73af1160e1096735f461c8885bfec", - "s": "0x587b40297be407c4912950cbbe84d8ded46dade0eb2b926a99d33dc37f77ba5f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x075b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x89e1ec481b0435ea15ad08dc7a7099f82bff20899a96edd163a6d8005aecf5d5", - "s": "0x05752dff56e1e225ed292618919ee142233178372ad081ff64b627e607dd3110", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x075c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x73884e3ea66ebb73ddb2ae9b42c6edaf090bdfb11d229570f1cf340c48f100ab", - "s": "0x3ba586979caa0836520058ea216a265c84e669ab23d23591207373854525cfd5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x075d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2c3b03962a6c37a04133762bc64beb7c5a1555ba34f8c8a7fbeed68519b907b0", - "s": "0x03ffc75dafa096b602382f282b873118fc024bd347a276f89bd846b70d5b8a4f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x075e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc92fad10c9d393f12ed4d590f21be9a95388e749c6a40f1c728244aadcd9e3be", - "s": "0x3fab1d45b16a449108ab3b29a57e8d7f28ea9206d4991c3ff562efcb2ee9c5de", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x075f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8e175aab72c5d101de289d8b86ee232596bdff0d6dcb2b7290f0bba8d983d516", - "s": "0x0ed9f650644abc6dd2983df67e9374c523ecd5beb1708ff8baefd6f756a6f752", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0760", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb8536efd611ce4c6e828c5320d9d67759d5770420a5fceb44bfe766e85c737d8", - "s": "0x72b159275d49468da9c8336f994b8a5a0258f595340ad5f9f8cef24ea963e0c6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0761", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc077da52d0ea3eee104921274b6625a3cf2a2e42414557f33365a18ae2d840c6", - "s": "0x24e93d97cf2e7105ecc700ea9df87efbf2a009457b48a210bba151f17303b442", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0762", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8009878845adeea5b37f3d185164fc0902cea275e727284116e433ed78e21b03", - "s": "0x10e75d4929b027ce9ffd239fb6ca8f0b93c97a57795fe6a469885925334f9ec5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0763", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x137b6d2ce8b3bfe689eba9243df0d5e79bc1b548124c6665562efcac92e8b49e", - "s": "0x4cf3ac5990fc49e57d7fe97fed3c9c7354dc7f4e22673137884da51b368b18b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0764", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf1e9e8409a4f0aac6583663d070252aa88d9fc309da659eaa6a1fb714ae122a5", - "s": "0x59a5962442516c1dab70cfc18a18c9e933bba34ee796ca793f7a13a12334f5e2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0765", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8a3b5b9e84f384178099cda7d17f69a67244eb54f20ad5bd3f33dbb1caea7d36", - "s": "0x25adfeb033f0b25ce8f47a0c7aa8ff632bd1ab710c9641261d54769ec9f6d0ce", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0766", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x497cb5c964a21724d4f51b410b8b13b40d94548c25b28f883aa623f49bd95601", - "s": "0x35f642b42879c484545d5927a4730470071ac446630dce3845eca1e883942170", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0767", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3346a045016ea06bbee8a32cdf83e01c25c6ad4b18c7a0c738907558f9629f7b", - "s": "0x717b995ec417eefc6f671dc07b496159f233babc26c298238f7d7eaa5948f97f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0768", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x690f55d22484a70d413f4c243e8911edfa74ca485e85a360db03e096fbbc4e07", - "s": "0x1e7e6dc1723531ad79a329689aeca2c371b5466105b80b2744759fc00dc9d40d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0769", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x033a2316f8f5d9562187731eab16b4eaa6db2eec2ee9c851d173bfdbcfa0d136", - "s": "0x69753e843aedb1d9423e51b2d283bd93522872f63f25c7f949fd361b7a90de42", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x076a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x28bfff22bd341de51304445e14357d230f1124e3f6c050aa1c7952447a1d0939", - "s": "0x1b056ed673b00b4bcc4a5cdd5a324bdf51cd65101bf6ceaa1a4ec1c3541795bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x076b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc26a5b38e23a6e96bfd84a9cd8bdb176009c5a04da5cffc0b3e49f532f910761", - "s": "0x794114c9af5f21e2ad5204f8f53ca974b77ad8aaa35eacbb98381f7116d4c7ba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x076c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x58e0c6d3b7dc01c7eeb1ebd0e81f0c4dc0a8f0ecdce47468a3e6d1fc37d338cb", - "s": "0x414b498edb6c705aecb507cacb2f7e39ce50b4d40999b30a26908c772eb87a28", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x076d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xee98104ad3fe6beb21871f31114ec9cf4a4b03b89ad33f48ed61135c79bf376a", - "s": "0x6787af640a4ea51d307ea772fa208a54ad9542dbdb3cc6b3fce07ad56fef09d2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x076e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x657dac6c0c46720f666de228deed90770c54727f5803a66b84c34b3506aad292", - "s": "0x33f8626e3be0fe3ca8f6c69c328af274616bd25598ff7eeb5c20a115f69cbd58", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x076f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd9a33f705bc3b53faf3d0814e2030179a3dbbd1d7e1706202d36348ccb34f106", - "s": "0x64e9d1d46bea37a75b2b8622f7bf4d2b73d144e1aabbe43d8dccbe24c2ec1d5b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0770", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd0d3c858ddc60c21735240ba66852c1bab673ce587b4c8891b18b198713f8d89", - "s": "0x74af0e5ff44bfcbf07265dc2426bf7f9d7c0a6ee0ee968e1244baa9098c62228", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0771", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x64b2fd006a9f178e133bd0c5f822d1d6770024a6a3023d7bd256074f8a392590", - "s": "0x0d53b3ff298cf4bb5cdb4389128d640a896b163b78f58e54efbfe20a34e011f8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0772", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x970d1bd91781ab3138ca5772cf83f92d432bb2053fa9203df67d21234c3e06a8", - "s": "0x34093d97c572c0c5c9e7ca694e56c360af8a87ef168a3b8644eee521485bd273", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0773", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x53b288663e5c12d03a8cff7088c69746f1f291c835381c882a09f3c9e7fd7e26", - "s": "0x59759bb131d571604d9afddcafa0b0a9d3fc9c9f670e017f78cb95e7828e92fc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0774", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe238ff1649d30eee17490ac9398621cebd5c6f8b3fe7231a70584568f38acbbe", - "s": "0x4684fdb1f4dfb3df6e9506047b94e44e192d0beb253a98ef130ef89710150d9e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0775", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd88978166d2a74fa14b3728090aade8c038b4bdb943c95fb7198a07671ccc27f", - "s": "0x267c76aa2de70b43c0a579dbd0fa23a6eb97faa9c5599a1039906a833dd2aa21", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0776", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3d2ce4668a92e0a71c9bdf056cb2907c0454df0afd99e01316ef69cdac4316b0", - "s": "0x01d87e03e0d0c64e8326febf7247ed2660a854990ca9d85b2d6a0d9f465dd409", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0777", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6d737619709dd1679b9b2d3ab691f6f6f83e6e01447a4119f585751554a16bed", - "s": "0x507f4a61b766a37d9eb412085288f831afdc433a466212f5307765af01a43301", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0778", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcc4abcb0aabfea52b8d335a0e0643713c89015b9424d37c3d4955fd71932fb26", - "s": "0x7eb21e54045ef3fc3492988be30aec6619459e2168e7c0159cb4ac3433af1967", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0779", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xe1f5e37722c5ee48e049a4e08f449f1b09ebcf3008d32f2d90b073e8503a59a8", - "s": "0x1474fa2cbee7c47f9b2eecde6328f3eedd67d4a376e130722e11b36b45e85b3c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x077a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x38160ebd751eae42aa9ffedada0717a2b68440d17f918a5012fad7825b330756", - "s": "0x132bf2f5c602aa567540fcf2bf28534fa13bb710a3d8d8656e1167c3d05b99e2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x077b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x61acb7ec0ecf923a3520a31eb69444c5a3fea16843757d07eed84d002ba797ea", - "s": "0x133edd3c976e1ba52e78101598ecc54c4fbfc8d03dbed17a3765fa3ac04a45c6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x077c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x7abe2241ce7527c5246dacc4b55b25744d3c5d27a6d61a9e2c5d5781965007da", - "s": "0x673cb794757dba09b68c3b05bed115d19f08c27c405797d7db5d0b6503536da0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x077d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x960aa83219c55368ea31c84a9612bd3e015db1251a6fc2fa3e6525fb7d6c4a3c", - "s": "0x3605858a506415a4ec752283da845a7d2178144a2e96a6cd0d9e1c879c5c68ba", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x077e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x3ca2c607d8a03cf56388a7756d653472a8605b83856f70af6d1d8a95c7a435b1", - "s": "0x6c32dbfb3a8861257d9a9bc27c40b0ff743445358398d698fc339443e6119f06", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x077f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9cee6b544c4554808858565c8e0e7847024a69f884bc1a2cc6d0d8831d761b53", - "s": "0x3204a7b78715c4e5368441345a1c259289b70f1f1826f631fe68af3d052abee7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0780", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x53eabd5e674fd6dba80c9b43a7b0db7b7b3fa8659239d68bdbcaedd917c1623f", - "s": "0x5669eb96ac7d9fae76f914866bdc0902754409c173f67e031742ad59459f96e2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0781", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1fa08598041968ff5ce24d51af853cca6612978cb32f8a82ccef50981b62195c", - "s": "0x2e0fbff6d80d64cde550e3d2bb38eb99a7d8dcb22a7170a436a6aa3ca2f58f6f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0782", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2212569918f72361516451045ef091665fdc5eb481e8c6e768efd6826ff7015b", - "s": "0x5d184bc1634d1b2ec7b95f1ce7ba9ff6fc603ec9df22d89254d1b56fd7e1d34d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0783", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x76d386f9ab7d6c76dc8d33a9a6492d23cc820afae2e1ad2c7a001b4b25f366c0", - "s": "0x7ad2b78ecd1a3defbe33a53d4b4347962b2d6a8453ef9e66a473c885828ea0cd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0784", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb5754622da07c729853357da7a4411632c8e3ac483e66cf47ffa53f5a494f02c", - "s": "0x7733891bc4ac4fe85ddee35b1091f23a307444464b359e5ea49c0d313fd357f1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0785", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x923fcbcbf50c5677b845e8375a568ecec4c4f8ad1ca73ac47d997baef10ff9e3", - "s": "0x03db2c50d37a443e14b54af2ca713f43a3aa52a573390bf7360d60885613f8bb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0786", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3abca3893c3de473ae2bfe36337f604b99d125ad2c6f20056ce0228bfac85763", - "s": "0x12edc90c08c950ef9c23f7a5f6e93db5911e3e2c83d6e30773bdc18e42822ae6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0787", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x311b667bd4165e11877ec49ae02dccfccce4d11a98bb1819440c5b35fabdfa50", - "s": "0x77bb12fceceb609503df889bb935337058a7a7b367e1305d5726f3012fe0f0a8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0788", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4575b25f64a8dae041990436697dbed7e10b7134430c30476a01a6a2c7e62309", - "s": "0x33f78a95d54c9f2e709d7ddb208ed3204371ce0ae9afcd9e04b484972ce5e7df", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0789", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x7623f441be6da908ae7f180cc2ab07933149809e2436404531293b5ab0af0dbe", - "s": "0x76dd94255552c04e5f25b7d9c84ceb830a6ed39434c250be7a3ca77eb3c42eae", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x078a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9fe1b4ff370fa559b3b385022cb6affa4d4ba2c025fcebd506ede9823515c0c3", - "s": "0x59b8a18dd8a452451b7d0865ab561ae81e467b37f873d0b9e8288022807ac8b9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x078b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3cde2875ec84229e751ce92ff22693776c6e1e306f634d3f2c4be3f2758fd78a", - "s": "0x7fde0d86b6b81a870b2cf7f6527c7c369ca2c93b6159ac134161881c334652f8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x078c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x4a869973e69f716ddf1db76572d615b8c9ad5659bdf7459dad623f25e0d44014", - "s": "0x751a4903a025f168d30138dc2bc575455e76813697b095746d4f80f618524177", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x078d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x35b85becb6e9743598adc2a9fc3906495fe84aa9a09f8402a68763ec85793a18", - "s": "0x49cb1d22e600d6e520d75db75967bca35670f12de918863840c7ef04ed9f41ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x078e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1299cff99a2ccba7733ac65117dce9e8b73e19c5233297a394f4f13228ba3561", - "s": "0x72dec8448cd70e78770e7ac87b989688c2f8f7da6dcdba0da2ca3a201310098c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x078f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1837c4ec34df5a0565d153561b7e334bce78f686e47ad948a3d023e17e983822", - "s": "0x2b3bfbaad1d89db0440d7871460bf270faa3d8a49b693062938bca0e5912c76f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0790", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x9e8b5545448c0126bd4a4ae91c8045ec713e34093118fe5fdb443f975b02b80b", - "s": "0x4920a148dc53ea6f8255af7a72bdf0e237623f88c48cf16e5c16de5e0986f392", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0791", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4f305df49f238726a7dc18c7cceafd409fb29e327e315a333bdc5bf5cd964f92", - "s": "0x4df2c2966c176a9c445a468b677e25ace6b1afe1f9e87df2e021942a466f1270", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0792", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa0ed6d92719be48da4e8ff638080b9bd54af5a926b7f9ec927364adad3a80e41", - "s": "0x6c85620310c24a4cc283d29e475052ee8d1806e5f3441415cdb8305a8f63406d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0793", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x49f0788b279b5622317d87f57f7e87fadfe277f8b40ab7957218d5b4b60644ba", - "s": "0x50423d05757c2b07920736a23af08dfd1e56df5bba19374fde383f712e46520f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0794", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa6b3b2692cb5eb10e73d29b0bc7f63cb41563cda4e2aa332d1ee821809782db9", - "s": "0x38c9dcf96e6364d6a9f1a5f86a9b7d6aa6192246f63daa420549ef208a503d42", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0795", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x64a291993d6b6c531383538a24b2c9a4eb0690a5a9bc6a8e32dae7794f44574a", - "s": "0x43f5ff22dba43cd5223c8f3c988120b170798a09aba34ab5d79a974f22cc48df", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0796", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xf750d43e91054eeec62ebb5fd82978481c7f237fba2ec8b994dee37dcb31cb9d", - "s": "0x02c49b1cc33d3d393d3164f10c597a69d8b56ee7e0e54397bf0b2c392a8c5eda", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0797", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8d09c766f7a9b984098f295929350d8de9ec0ecc167410ddc2a78fd8e16f67d9", - "s": "0x6368cd82004847a07da47565debd586d2445569274f2afd6746db1a06aa5b7f8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0798", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb98429279fe87b445871afe25937e8698ac51acfbf49de70c66715e40da3f6b0", - "s": "0x409a3b850afeeeb16494450601258c41e12f298bf6c8b14ea8fc407e774d2aca", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0799", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa8825e14ffc098d87facbf9c24b659d06e4f5d8ae3b60e5aa814c663c5d7a3d3", - "s": "0x692aca803750dd0ed17a86f31a53a9884b1fc48774fa483673588c67dbbbb55d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x079a", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x96165d4eedcb1fab8a79cceaed9cc236a9791240a4668e700b024200020f54cf", - "s": "0x309bc94b308fe8d95ba837fa931b540cdae6aab7d9d4f0df7dfb0768745668a5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x079b", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xcab223fdcc7672656f5e317d2f963fa32c38a65d565fe19890d0e7caa0040781", - "s": "0x2ad346044f806ccf5f90a8aae6bef14a6702b38cd2f059655bc925647600b80d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x079c", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa09d0271e217b74126ae51382af1901cffbb860a2a49b8f2364bd25d801ce745", - "s": "0x5d0b899baf242a4042b925013859bed322573246d0310a807ea17f4e6dc9cf76", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x079d", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x8b71595df411abdc54556d20c56df98443f6583e1dfbac3714401b9deb7a2b92", - "s": "0x124066d5118a628195e38179ebacede9840e8a6079b99214a9ab0260aa43d534", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x079e", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8ee811ea974844a92ddf980463492b20c878a23e9194693d36b10928535b792c", - "s": "0x3fd8c837972eca905ad1171516a30ca444e59e7173c9dbb1015da19fc7704a8d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x079f", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcd68c7cd72b052d6942bec61e1c5389cc3b004a8712f9d4dbebfd3acf0eb9f9d", - "s": "0x66e21fb14706bdaeffd91bbb571b6fe18aa216e30aa1417dd94f87af273d4404", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07a0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6bc3ffb0a327bd828e1d8356f7fed7e63fc8d6ea3a667d44b5ee7187ee0a5f3a", - "s": "0x34818e47808018cd07af0306941776998a51d2ee7133a7de5f93d80c19c78da4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07a1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6b0c92035973d11f42717dbd8a9b23f68607736903f17dd07a8d0d007fbf5035", - "s": "0x753d68d3433a6ae3a8460d1cf279c5739f348b8d7b03f4a682ebbe8a129e5c9c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07a2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x94bb1139a83cf99731be08550600da5af67699066c7ab9d5e8e8e23fa1ab92d6", - "s": "0x5f0dbd3f983624527b3bc3308c71f834d5f02eb93148a96e5fad2087db2a3c2f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07a3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeb945e336561efb2529159e1a581203c27be13233aadf8956ed10c1db2cadb12", - "s": "0x5e9e688e71e55b99e42b97836de00589c8ca45767ebae88f62a5eaab56623d09", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07a4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe2b9504eb07ba3d264fab39a5a17f7c659f3ba6935484a38c6f0ebbbe561fd86", - "s": "0x7ffa0de3ca4e9ab0f19bebeedc702795f97375a9e46a843366948315399eb63c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07a5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x3ae1cdccd9ac0ff0be3341a1c7b25deac4043710e991b6f57ecd071bfb222af2", - "s": "0x1674c257ece942e4c817c5931a423c92c08a404f402c64391d76c6eef6ad06b7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07a6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xbb7a729c33f617e0c1f7f9464d0020c31d39544c64d98c387382b6c043a84152", - "s": "0x76b049bf318b8ea3214380155dee005f2b787e0545884cee9ef77da131020b15", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07a7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x1fc1d0c9b3f420b06ade7423f98451a5a5d362022d8e66684d628efcbb122667", - "s": "0x33ca67873f09c0e99a4f57ecc1d822b36bbddb8392535d2576cf8de50aacfcda", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07a8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xff37933e08275b7b9172f6b8e4db39616aab508d1000a55a7ea9a19df65adac6", - "s": "0x6159157084f78e4973cb6a1db7935dd75aca1464bfa8fa5190553c0c1a67e7dc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07a9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x34c3a85eec428d83b887b8b870b773f2b3d529eb9783b2ea91765639bd774906", - "s": "0x1805fe3a94d6d88ab04ff8bc57d15ce9621144de0338929a6d0852246a54d8dd", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07aa", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x40f6095a8e981a8a518336d97fe287a2ace0d2999d42de7fc3345c366261cb40", - "s": "0x4f620b99e45a4c44f06ae0ba161e1770a71d973d2fb019d36f5c4069d6da3fc0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07ab", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x1374c984afa4453455ae0288ed3b798e654545cd5fa2c629c21278c538b8ef13", - "s": "0x2eccd279194814b7d8acbc9d56f2734adba188a1b4641849ab8c1b0f097a2a96", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07ac", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb61559eac559e57671962a6bf915966409da612529f5c6b19673cef36abf0966", - "s": "0x1f70aaacedd16896c78dc9a8c0a3672fd82a287da65038865c6e7b9d1d14ff78", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07ad", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x66c6f885f08359b00e359a50c34926cd9cf6f68c652662abeb06daaa494d810f", - "s": "0x5d6bf8b93ae6a5d8fde01436c2caae428a0fd82c42c8b36ea1c52d3108a46298", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07ae", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xcce25b87107d9c4af8591fce3e1deb6f986683957f5937aa04d3b133b09084f4", - "s": "0x21bf2dcf528c0aa17e14c0c27b12a54b448ba09e7224314a1091a1a1949f7b21", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07af", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x6451f67f98f12b88134c33e37537df2e17572360ee44d19b333de808d9934615", - "s": "0x3686cb600debe0cd4beac5dcccdf335194bed87634cce9aa4695f556616f4c1d", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07b0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xeb8005be2567f1d27dc036ee7afac1587100a67515c7e6eaae16d46a4bd47784", - "s": "0x12c5639ad52c601c26cf41c320b767fac355191b731e2d65069f66acd000e923", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07b1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa21776484875f902d7aa5b50b384abd019d7ebc1f8fd3752a98bc3bfd83819c4", - "s": "0x247b642261cc9888e58307f33d0bee90a7ba357df97e179a79210b0f3b416d4c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07b2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8a5765500366f4542511cfda58e8bf3dafe7c11559a529c2e1b682ff1c04a283", - "s": "0x73ac4ee22e5f05daff618d89916fa822aa8bda76656fa61ce3bbb54a214770c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07b3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x045654154d43a5e17f45c1061d487dc0f9321441187ccdb890ff3453bbb0953f", - "s": "0x11b6fb8faaa77d1ae41b6815a32234f00636a7960557fd67262b5c1d78e669f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07b4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9d92aed327cf2ed0f94867a8af7864e3d7b09a3e9ec23d106eafbbcefd2c2250", - "s": "0x2d439c34222a3be59734080cc2000159c12e193d432e1dae9b2df8cccac2feaa", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07b5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6144485f64d35b5d0ff737706acbf791658ea18f6948c667de30a1b1f00b9654", - "s": "0x648e75fc26edbdfa61277105346fd2bf80ff7c54f75f23a4b4d3e8bdd5e0aa77", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07b6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xc74c7920ad6e8b3f479b33dbbefcf2d563dc30706cc0dec00a0bbead98660567", - "s": "0x2d99fb61c95ebc3f9ddc2093e89793fd70a6b1d982e92bf2ceb454efe356b61a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07b7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x63332fcb449074930ccf64e630d50f9a0e010d2d591a1d7a8369021aa413e0d4", - "s": "0x7041230d619d83a77d4ec7176de66c5e7f80b56ed447b2f2f032d82eadd98bb3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07b8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfe835e35aa2c0b3a55326260e4d95af1a0276c49b5511756a83ced73d8de95f3", - "s": "0x1e82a85bd3d93d3e731351e9dacb175ac5d7bef4f1bf5b115f31b5d197ca620a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07b9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x914348bd636762b2221b0dc110a4baae78b3a6732021b8924da6f6408bcb74f8", - "s": "0x206b2e15310578d795d3f684e202c8bbc2af44a5a3451637ac6d770fd2ebbb64", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07ba", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x680141af26e7889a7d5c48ef59f918459e58779ac3c325388c371b215a6625fe", - "s": "0x200770d0326dc265b36658242ebc6e1893f504627c89635b30693b7135843823", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07bb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x08e1af1ab96c83cf448114db0133700df67527d88842b4e8c8418a122ff64210", - "s": "0x02619bf5429588dac609ccd86391ff1c2126e975e5be0faad98a796bc04ac44e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07bc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xb50d4724dfe2f9c0a2fbcf930ed39617502179d7954c27765be3fb1c03124ed6", - "s": "0x6a2998e695307f806ce4cfa5f6794caa492392b361cd7de49414d9bd2ab651b2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07bd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xa5782736ba9b0003efe0d30af70f571adcd37f3848569c914714bf225cfb52b2", - "s": "0x2806e645f414fc7d8f1ed45953db1efc4bcc327635ca439e1bdc33faa4ade54f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07be", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf82d3088327532461e033e5c7063ad2e3254106a7a366e0ae8ab4a02596921f7", - "s": "0x241b5b065d705e583c11194dc1d4da2384b5e9c98a157bc7d973dcf4d9eabd83", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07bf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x4a57e5202f9e25a22d30f035254f0ce2e9c85b78acdbba77003123dd87fd9fc7", - "s": "0x6a6c8c573f852a2d471c2f0aa8532b1b4922423fb29e4b4ad89a2a24a11c83fe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07c0", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xfd617b319d7e5fe00c62fe0f9f2c5699d6784395d3688e6dafb7d0cfbbbfbdf8", - "s": "0x3c495a1b36765a595f166329a82cc1ca6a0b605a79c2e5ac31b57f707dfc3c7b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07c1", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8321650c6284a7909e2082eb77dcae6e06296d3aa08175f14795c4c4815cf6a6", - "s": "0x22ea42b66b036793358b39849898afd42d16799d05c908e8318806f1965a7b9c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07c2", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x760a57b4a5916bea18b8dd8c0f3a8589a3d935e509c3ee1d2e9013edcbb006c1", - "s": "0x1058dd033881668d15f5a6af3c08614c52144de03690d9693fcaeb4c2054df36", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07c3", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0f08c447a672d5f45ae780f2cf19e8486126b8d3004548103cf257772848d4b5", - "s": "0x720a4fd2598348ca073dfb8a24e0c800146fecb3562168d7738df45e88baca04", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07c4", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x9aacfcc04f966340e90dbeaad1d8163313a46d5b9a76a2d5232fbb273a430f1e", - "s": "0x743fb55a389db60df8f1fd1fe5f1e15fdfc0a162beb7b502a5af6918faa17a00", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07c5", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8d1566e03d2f0639ee0184cfec2bcb7997d33c66fe3955aa5c305b260928a4eb", - "s": "0x1bf35e68711e085acaa8b9cbf94cb38e927f1783ef20a05d3a9e677b80d9e158", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07c6", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x92ed47955d57306081454a78cdc22975faf09ca06265d999d3786fbb567a5272", - "s": "0x605982e2d7c01d7ead8b2246e3401570a09bd6dffcb5bed15157279df4d5a021", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07c7", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xd7e1528af59717daf1a8a51912619e9e097d9a31614944a7c4f53ad20808ee19", - "s": "0x1a5102c9a98d5ae81ba3ee5d9a251a0064cf6090a1a6ae3278caa669c75c21a9", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07c8", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xd284643502333bd2a510d3c367e286501712e23e404166a886defa025791637c", - "s": "0x75aeafa27ea2a9840a46dfc29c4ffc7a4077708f5780824366288cd6d74b250f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07c9", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x12b2b1d0b195354a7dff6809ca3abced2377814be027a961abcbf8fa215f4579", - "s": "0x78dd2b778f253d28512e32cd558e04796b2dc8eb2da43b09febe57d307fe8a21", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07ca", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xb0acd0971afcb68d1033d9ec3820f5e59443b43924f9b3fcf02b513da7893f26", - "s": "0x1dec20e01a6cff7eefe03d96263b1c2b0b22bac78529a68a2d22489639b1974f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07cb", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x52b37d00acf2fcf83f9f3233042c0baeffbb8f7bef1a6bad537ec1faa147a87f", - "s": "0x3fd3f083895e42144a034a18d4de0225d23942d7f2df5c8406ff829f8674bc02", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07cc", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xc9633ef784344e358eab69262fa811d820b52f5551b49f7154e0d46a0a804dd9", - "s": "0x6563f3760609b4d0d3db74868a2dc3d292379a45c117aa51a2789f8df656e0c2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07cd", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa49186bcb26e906d7826371921cf36c0e4c3eee7e34a8490453d4f64f9776db0", - "s": "0x182d56c313396c4fb261ed386be13724d1ae68f55bc1d7cae1aa7069b16300c4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07ce", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xa30a656625aa89d532ecdaa210f5f5f2b4ccbe125d92882cb882698ad6d27fd8", - "s": "0x0f0f22767517aade20c1f2f4c2f34e0f217f49f0af51f9595115655b679bff59", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07cf", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x0de0b6b3a7640000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe96be0581ea878e13e531b4a717761add2c1b5e27079dd3c874ab2a85e8a538b", - "s": "0x5fc6003ef7d21350b0b4ff6173fcb16d98948d982ec80395f35917f407213cdb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x08" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x09" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x10" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x11" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x12" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x13" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x14" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x15" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x16" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x17" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x18" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x19" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x1a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x1b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x1c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x1d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x1e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x1f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x20" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x21" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x22" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x23" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x24" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x25" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x26" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x27" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x28" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x29" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x2a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x2b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x2c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x2d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x2e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x2f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x30" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x31" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x32" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x33" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x34" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x35" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x36" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x37" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x38" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x39" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x3a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x3b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x3c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x3d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x3e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x3f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x40" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x41" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x42" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x43" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x44" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x45" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x46" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x47" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x48" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x49" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x4a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x4b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x4c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x4d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x4e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x4f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x50" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x51" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x52" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x53" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x54" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x55" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x56" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x57" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x58" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x59" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x5a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x5b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x5c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x5d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x5e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x5f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x60" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x61" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x62" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x63" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x64" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x65" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x66" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x67" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x68" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x69" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x6a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x6b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x6c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x6d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x6e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x6f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x70" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x71" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x72" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x73" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x74" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x75" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x76" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x77" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x78" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x79" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x7a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x7b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x7c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x7d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x7e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x7f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x80" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x81" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x82" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x83" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x84" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x85" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x86" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x87" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x88" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x89" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x8a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x8b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x8c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x8d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x8e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x8f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x90" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x91" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x92" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x93" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x94" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x95" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x96" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x97" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x98" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x99" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x9a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x9b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x9c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x9d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x9e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x9f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xa0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xa1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xa2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xa3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xa4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xa5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xa6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xa7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xa8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xa9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xaa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xab" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xac" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xad" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xae" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xaf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xb0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xb1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xb2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xb3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xb4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xb5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xb6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xb7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xb8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xb9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xba" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xbb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xbc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xbd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xbe" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xbf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xc0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xc1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xc2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xc3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xc4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xc5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xc6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xc7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xc8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xc9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xca" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xcb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xcc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xcd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xce" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xcf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xd0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xd1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xd2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xd3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xd4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xd5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xd6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xd7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xd8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xd9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xda" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xdb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xdc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xdd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xde" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xdf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xe0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xe1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xe2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xe3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xe4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xe5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xe6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xe7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xe8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xe9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xea" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xeb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xec" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xed" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xee" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xef" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xf0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xf1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xf2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xf3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xf4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xf5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xf6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xf7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xf8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xf9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xfa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xfb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xfc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xfd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xfe" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0xff" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0100" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0101" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0102" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0103" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0104" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0105" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0106" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0107" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0108" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0109" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x010a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x010b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x010c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x010d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x010e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x010f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0110" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0111" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0112" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0113" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0114" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0115" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0116" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0117" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0118" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0119" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x011a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x011b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x011c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x011d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x011e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x011f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0120" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0121" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0122" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0123" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0124" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0125" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0126" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0127" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0128" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0129" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x012a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x012b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x012c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x012d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x012e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x012f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0130" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0131" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0132" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0133" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0134" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0135" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0136" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0137" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0138" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0139" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x013a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x013b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x013c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x013d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x013e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x013f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0140" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0141" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0142" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0143" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0144" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0145" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0146" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0147" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0148" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0149" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x014a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x014b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x014c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x014d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x014e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x014f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0150" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0151" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0152" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0153" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0154" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0155" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0156" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0157" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0158" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0159" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x015a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x015b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x015c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x015d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x015e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x015f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0160" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0161" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0162" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0163" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0164" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0165" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0166" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0167" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0168" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0169" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x016a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x016b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x016c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x016d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x016e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x016f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0170" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0171" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0172" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0173" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0174" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0175" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0176" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0177" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0178" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0179" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x017a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x017b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x017c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x017d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x017e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x017f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0180" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0181" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0182" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0183" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0184" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0185" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0186" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0187" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0188" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0189" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x018a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x018b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x018c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x018d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x018e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x018f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0190" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0191" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0192" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0193" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0194" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0195" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0196" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0197" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0198" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0199" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x019a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x019b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x019c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x019d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x019e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x019f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01a0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01a1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01a2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01a3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01a4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01a5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01a6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01a7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01a8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01a9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01aa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ab" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ac" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ad" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ae" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01af" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01b0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01b1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01b2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01b3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01b4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01b5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01b6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01b7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01b8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01b9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ba" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01bb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01bc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01bd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01be" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01bf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01c0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01c1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01c2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01c3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01c4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01c5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01c6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01c7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01c8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01c9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ca" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01cb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01cc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01cd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ce" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01cf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01d0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01d1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01d2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01d3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01d4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01d5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01d6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01d7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01d8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01d9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01da" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01db" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01dc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01dd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01de" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01df" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01e0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01e1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01e2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01e3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01e4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01e5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01e6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01e7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01e8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01e9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ea" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01eb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ec" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ed" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ee" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ef" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01f0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01f1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01f2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01f3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01f4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01f5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01f6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01f7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01f8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01f9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01fa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01fb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01fc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01fd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01fe" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01ff" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0200" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0201" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0202" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0203" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0204" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0205" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0206" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0207" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0208" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0209" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x020a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x020b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x020c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x020d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x020e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x020f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0210" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0211" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0212" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0213" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0214" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0215" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0216" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0217" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0218" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0219" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x021a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x021b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x021c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x021d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x021e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x021f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0220" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0221" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0222" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0223" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0224" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0225" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0226" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0227" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0228" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0229" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x022a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x022b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x022c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x022d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x022e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x022f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0230" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0231" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0232" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0233" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0234" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0235" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0236" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0237" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0238" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0239" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x023a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x023b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x023c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x023d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x023e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x023f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0240" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0241" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0242" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0243" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0244" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0245" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0246" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0247" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0248" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0249" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x024a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x024b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x024c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x024d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x024e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x024f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0250" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0251" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0252" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0253" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0254" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0255" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0256" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0257" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0258" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0259" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x025a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x025b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x025c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x025d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x025e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x025f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0260" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0261" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0262" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0263" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0264" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0265" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0266" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0267" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0268" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0269" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x026a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x026b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x026c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x026d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x026e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x026f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0270" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0271" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0272" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0273" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0274" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0275" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0276" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0277" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0278" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0279" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x027a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x027b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x027c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x027d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x027e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x027f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0280" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0281" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0282" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0283" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0284" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0285" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0286" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0287" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0288" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0289" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x028a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x028b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x028c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x028d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x028e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x028f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0290" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0291" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0292" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0293" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0294" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0295" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0296" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0297" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0298" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0299" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x029a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x029b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x029c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x029d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x029e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x029f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02a0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02a1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02a2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02a3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02a4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02a5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02a6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02a7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02a8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02a9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02aa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ab" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ac" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ad" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ae" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02af" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02b0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02b1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02b2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02b3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02b4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02b5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02b6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02b7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02b8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02b9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ba" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02bb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02bc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02bd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02be" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02bf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02c0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02c1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02c2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02c3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02c4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02c5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02c6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02c7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02c8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02c9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ca" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02cb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02cc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02cd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ce" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02cf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02d0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02d1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02d2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02d3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02d4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02d5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02d6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02d7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02d8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02d9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02da" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02db" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02dc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02dd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02de" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02df" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02e0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02e1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02e2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02e3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02e4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02e5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02e6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02e7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02e8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02e9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ea" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02eb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ec" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ed" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ee" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ef" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02f0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02f1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02f2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02f3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02f4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02f5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02f6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02f7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02f8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02f9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02fa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02fb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02fc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02fd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02fe" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02ff" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0300" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0301" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0302" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0303" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0304" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0305" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0306" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0307" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0308" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0309" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x030a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x030b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x030c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x030d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x030e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x030f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0310" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0311" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0312" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0313" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0314" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0315" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0316" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0317" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0318" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0319" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x031a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x031b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x031c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x031d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x031e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x031f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0320" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0321" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0322" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0323" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0324" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0325" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0326" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0327" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0328" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0329" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x032a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x032b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x032c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x032d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x032e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x032f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0330" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0331" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0332" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0333" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0334" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0335" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0336" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0337" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0338" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0339" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x033a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x033b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x033c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x033d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x033e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x033f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0340" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0341" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0342" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0343" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0344" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0345" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0346" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0347" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0348" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0349" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x034a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x034b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x034c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x034d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x034e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x034f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0350" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0351" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0352" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0353" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0354" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0355" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0356" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0357" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0358" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0359" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x035a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x035b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x035c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x035d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x035e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x035f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0360" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0361" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0362" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0363" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0364" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0365" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0366" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0367" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0368" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0369" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x036a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x036b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x036c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x036d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x036e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x036f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0370" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0371" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0372" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0373" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0374" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0375" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0376" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0377" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0378" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0379" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x037a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x037b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x037c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x037d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x037e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x037f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0380" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0381" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0382" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0383" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0384" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0385" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0386" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0387" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0388" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0389" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x038a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x038b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x038c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x038d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x038e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x038f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0390" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0391" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0392" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0393" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0394" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0395" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0396" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0397" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0398" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0399" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x039a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x039b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x039c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x039d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x039e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x039f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03a0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03a1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03a2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03a3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03a4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03a5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03a6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03a7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03a8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03a9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03aa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ab" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ac" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ad" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ae" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03af" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03b0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03b1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03b2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03b3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03b4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03b5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03b6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03b7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03b8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03b9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ba" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03bb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03bc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03bd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03be" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03bf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03c0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03c1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03c2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03c3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03c4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03c5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03c6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03c7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03c8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03c9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ca" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03cb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03cc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03cd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ce" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03cf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03d0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03d1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03d2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03d3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03d4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03d5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03d6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03d7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03d8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03d9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03da" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03db" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03dc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03dd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03de" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03df" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03e0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03e1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03e2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03e3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03e4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03e5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03e6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03e7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03e8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03e9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ea" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03eb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ec" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ed" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ee" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ef" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03f0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03f1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03f2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03f3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03f4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03f5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03f6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03f7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03f8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03f9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03fa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03fb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03fc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03fd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03fe" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x03ff" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0400" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0401" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0402" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0403" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0404" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0405" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0406" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0407" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0408" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0409" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x040a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x040b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x040c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x040d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x040e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x040f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0410" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0411" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0412" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0413" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0414" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0415" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0416" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0417" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0418" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0419" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x041a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x041b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x041c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x041d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x041e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x041f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0420" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0421" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0422" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0423" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0424" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0425" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0426" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0427" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0428" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0429" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x042a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x042b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x042c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x042d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x042e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x042f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0430" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0431" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0432" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0433" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0434" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0435" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0436" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0437" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0438" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0439" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x043a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x043b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x043c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x043d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x043e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x043f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0440" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0441" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0442" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0443" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0444" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0445" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0446" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0447" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0448" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0449" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x044a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x044b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x044c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x044d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x044e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x044f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0450" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0451" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0452" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0453" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0454" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0455" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0456" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0457" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0458" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0459" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x045a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x045b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x045c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x045d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x045e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x045f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0460" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0461" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0462" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0463" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0464" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0465" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0466" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0467" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0468" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0469" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x046a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x046b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x046c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x046d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x046e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x046f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0470" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0471" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0472" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0473" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0474" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0475" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0476" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0477" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0478" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0479" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x047a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x047b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x047c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x047d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x047e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x047f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0480" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0481" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0482" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0483" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0484" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0485" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0486" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0487" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0488" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0489" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x048a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x048b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x048c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x048d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x048e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x048f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0490" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0491" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0492" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0493" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0494" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0495" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0496" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0497" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0498" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0499" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x049a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x049b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x049c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x049d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x049e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x049f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04a0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04a1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04a2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04a3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04a4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04a5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04a6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04a7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04a8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04a9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04aa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ab" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ac" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ad" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ae" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04af" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04b0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04b1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04b2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04b3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04b4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04b5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04b6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04b7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04b8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04b9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ba" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04bb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04bc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04bd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04be" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04bf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04c0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04c1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04c2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04c3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04c4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04c5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04c6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04c7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04c8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04c9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ca" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04cb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04cc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04cd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ce" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04cf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04d0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04d1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04d2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04d3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04d4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04d5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04d6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04d7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04d8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04d9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04da" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04db" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04dc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04dd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04de" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04df" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04e0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04e1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04e2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04e3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04e4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04e5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04e6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04e7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04e8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04e9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ea" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04eb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ec" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ed" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ee" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ef" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04f0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04f1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04f2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04f3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04f4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04f5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04f6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04f7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04f8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04f9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04fa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04fb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04fc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04fd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04fe" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x04ff" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0500" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0501" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0502" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0503" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0504" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0505" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0506" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0507" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0508" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0509" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x050a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x050b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x050c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x050d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x050e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x050f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0510" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0511" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0512" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0513" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0514" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0515" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0516" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0517" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0518" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0519" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x051a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x051b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x051c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x051d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x051e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x051f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0520" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0521" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0522" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0523" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0524" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0525" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0526" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0527" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0528" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0529" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x052a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x052b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x052c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x052d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x052e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x052f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0530" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0531" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0532" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0533" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0534" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0535" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0536" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0537" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0538" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0539" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x053a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x053b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x053c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x053d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x053e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x053f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0540" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0541" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0542" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0543" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0544" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0545" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0546" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0547" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0548" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0549" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x054a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x054b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x054c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x054d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x054e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x054f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0550" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0551" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0552" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0553" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0554" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0555" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0556" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0557" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0558" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0559" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x055a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x055b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x055c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x055d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x055e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x055f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0560" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0561" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0562" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0563" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0564" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0565" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0566" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0567" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0568" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0569" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x056a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x056b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x056c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x056d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x056e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x056f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0570" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0571" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0572" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0573" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0574" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0575" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0576" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0577" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0578" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0579" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x057a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x057b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x057c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x057d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x057e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x057f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0580" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0581" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0582" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0583" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0584" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0585" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0586" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0587" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0588" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0589" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x058a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x058b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x058c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x058d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x058e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x058f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0590" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0591" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0592" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0593" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0594" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0595" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0596" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0597" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0598" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0599" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x059a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x059b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x059c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x059d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x059e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x059f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05a0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05a1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05a2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05a3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05a4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05a5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05a6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05a7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05a8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05a9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05aa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ab" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ac" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ad" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ae" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05af" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05b0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05b1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05b2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05b3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05b4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05b5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05b6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05b7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05b8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05b9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ba" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05bb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05bc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05bd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05be" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05bf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05c0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05c1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05c2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05c3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05c4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05c5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05c6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05c7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05c8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05c9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ca" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05cb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05cc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05cd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ce" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05cf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05d0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05d1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05d2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05d3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05d4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05d5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05d6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05d7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05d8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05d9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05da" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05db" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05dc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05dd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05de" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05df" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05e0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05e1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05e2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05e3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05e4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05e5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05e6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05e7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05e8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05e9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ea" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05eb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ec" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ed" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ee" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ef" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05f0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05f1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05f2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05f3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05f4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05f5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05f6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05f7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05f8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05f9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05fa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05fb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05fc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05fd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05fe" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x05ff" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0600" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0601" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0602" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0603" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0604" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0605" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0606" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0607" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0608" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0609" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x060a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x060b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x060c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x060d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x060e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x060f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0610" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0611" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0612" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0613" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0614" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0615" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0616" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0617" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0618" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0619" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x061a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x061b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x061c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x061d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x061e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x061f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0620" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0621" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0622" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0623" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0624" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0625" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0626" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0627" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0628" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0629" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x062a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x062b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x062c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x062d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x062e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x062f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0630" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0631" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0632" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0633" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0634" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0635" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0636" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0637" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0638" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0639" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x063a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x063b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x063c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x063d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x063e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x063f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0640" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0641" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0642" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0643" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0644" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0645" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0646" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0647" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0648" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0649" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x064a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x064b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x064c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x064d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x064e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x064f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0650" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0651" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0652" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0653" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0654" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0655" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0656" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0657" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0658" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0659" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x065a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x065b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x065c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x065d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x065e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x065f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0660" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0661" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0662" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0663" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0664" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0665" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0666" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0667" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0668" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0669" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x066a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x066b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x066c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x066d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x066e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x066f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0670" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0671" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0672" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0673" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0674" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0675" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0676" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0677" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0678" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0679" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x067a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x067b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x067c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x067d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x067e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x067f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0680" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0681" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0682" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0683" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0684" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0685" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0686" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0687" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0688" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0689" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x068a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x068b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x068c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x068d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x068e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x068f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0690" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0691" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0692" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0693" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0694" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0695" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0696" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0697" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0698" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0699" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x069a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x069b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x069c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x069d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x069e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x069f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06a0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06a1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06a2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06a3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06a4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06a5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06a6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06a7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06a8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06a9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06aa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ab" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ac" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ad" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ae" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06af" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06b0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06b1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06b2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06b3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06b4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06b5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06b6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06b7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06b8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06b9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ba" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06bb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06bc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06bd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06be" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06bf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06c0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06c1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06c2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06c3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06c4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06c5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06c6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06c7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06c8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06c9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ca" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06cb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06cc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06cd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ce" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06cf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06d0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06d1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06d2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06d3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06d4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06d5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06d6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06d7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06d8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06d9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06da" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06db" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06dc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06dd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06de" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06df" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06e0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06e1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06e2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06e3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06e4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06e5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06e6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06e7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06e8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06e9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ea" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06eb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ec" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ed" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ee" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ef" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06f0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06f1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06f2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06f3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06f4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06f5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06f6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06f7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06f8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06f9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06fa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06fb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06fc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06fd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06fe" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x06ff" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0700" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0701" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0702" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0703" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0704" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0705" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0706" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0707" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0708" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0709" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x070a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x070b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x070c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x070d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x070e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x070f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0710" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0711" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0712" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0713" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0714" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0715" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0716" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0717" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0718" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0719" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x071a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x071b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x071c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x071d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x071e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x071f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0720" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0721" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0722" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0723" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0724" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0725" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0726" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0727" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0728" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0729" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x072a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x072b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x072c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x072d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x072e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x072f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0730" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0731" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0732" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0733" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0734" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0735" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0736" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0737" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0738" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0739" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x073a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x073b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x073c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x073d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x073e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x073f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0740" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0741" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0742" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0743" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0744" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0745" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0746" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0747" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0748" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0749" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x074a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x074b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x074c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x074d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x074e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x074f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0750" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0751" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0752" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0753" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0754" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0755" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0756" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0757" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0758" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0759" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x075a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x075b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x075c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x075d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x075e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x075f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0760" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0761" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0762" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0763" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0764" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0765" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0766" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0767" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0768" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0769" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x076a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x076b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x076c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x076d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x076e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x076f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0770" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0771" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0772" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0773" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0774" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0775" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0776" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0777" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0778" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0779" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x077a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x077b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x077c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x077d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x077e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x077f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0780" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0781" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0782" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0783" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0784" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0785" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0786" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0787" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0788" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0789" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x078a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x078b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x078c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x078d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x078e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x078f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0790" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0791" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0792" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0793" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0794" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0795" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0796" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0797" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0798" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x0799" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x079a" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x079b" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x079c" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x079d" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x079e" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x079f" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07a0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07a1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07a2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07a3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07a4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07a5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07a6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07a7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07a8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07a9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07aa" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07ab" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07ac" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07ad" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07ae" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07af" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07b0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07b1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07b2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07b3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07b4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07b5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07b6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07b7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07b8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07b9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07ba" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07bb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07bc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07bd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07be" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07bf" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07c0" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07c1" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07c2" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07c3" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07c4" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07c5" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07c6" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07c7" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07c8" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07c9" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07ca" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07cb" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07cc" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07cd" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07ce" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x07cf" - } - ], - "rlp": "0xfa159a99f9025fa09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa045b91a6de5e21daa74baa5ba69ae904a3decbf15e7211eaf845701e55efe5221a09832988f2e56130730b13372b8bb2b429f5faa477ab0f69dd95ac4be4601ed81a00a22918f5496d638dcf1c65c0205974e2288ba3ade03ff6b9b77b00906650f27b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008405d15b4f0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0ee1fdd8114b7c672f67093d83f01b7b042bbe744da6bf2ecc97d6e824101ada9fa0fb5ddf901fe8007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a030bfaadde922e07317ec3fa2976b8b705a5442fb9ee84eb6e0fd91a450be17b4a041257abd690f8ecb1197e00c3159cb16f5bd1318d60460260064eabcbfdf3006f901fe0107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01f953db14db7ac12dcfe4a3bf5673b2fefdd5f05536ec9714d5b2396afd7c01fa07bbed78cf0d3b6bf45962e3d33b7c58e0ad263b3c7168a618305cd690880a842f901fe0207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae7f6d2ff9f1396ca646269e917a7232e92287f74fca578160a9810d9ebcee84a0123e5b6ab498ff9bdda0abf2f11ac58c6bd69d36b7855db172faced230e38a14f901fe0307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048cace09a9d8b80ee1fce66547e192b15ee2b12fd6839d6d88a733f61e6dd325a0115fb47c4f8cab29186935eb325f8ad938b2ddbbe826ec01b650a809983534c7f901fe0407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0861c18c825531c9f4b77829cdfd30f65446b047f990da11249d3b1a67b4f9325a01bcc1ff2e73e35f44e9e9f1be76661fe73680632e503808f9a4be090e4e155e7f901fe0507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a050fbe885b2b502173c23180d9baff06c199199e84cb8fe901064ceeae581a8baa0249232d8309166719f796b490724758bc443aa20c2c267ad0850b77b1346af03f901fe0607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04fabbbbfedf60c926b84add1d41b172cb38cad9697e045638fd692b3288f0079a0405e713144b205d30ebae217330e39a08671f1f3039a19346eb3ee0758253de8f901fe0707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dae805ecef72558ed56432a303fae74f2a2cfd42cc700c3e030e77bab430370ea03855e4cdf81322864a298381e5f557f87e452e314638287e84d6c7dd87f26069f901fe0807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d15d3dbdcad0fa346c1c0acf70c373b4b19a959092a0f9ffeeb91395c8c0ac43a039b7820c18370e747dabe12a1f4aa3fa33f6ab461a97ffd44601ee4becefd18af901fe0907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06eff2f34b6821b345eaf7172308f07411d3ea86953270cc8d7d26dca4d0d180da018e91821c35f923cddb3b4b9f9e0b31ff0557a33a2802f99abed62b2d71a6b50f901fe0a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09eb91429146f87e966dfe5f0e680d614b90d445a7024f0d3147df824222e7cfda0381fd142e704c51ea4cf15c884884d3d3fb54468322712a935cbca147fdbb781f901fe0b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a081f2280555928874904cfc3f5fab5c174f8ee1b13ee9570753f9720df1c79b56a021357a1fdf2ad683fbcb4b629839e238cef8149dfc67263a736e2b77e93819d3f901fe0c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ba6a97889900794b405e9841710694a81cd2038fbf5e14b4a63f752ec0482049a01a2f7a08e9c8a066c968a60ce39fe0d0184dafe35f2d9a8a9acc237282d2f329f901fe0d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f44c4480b6910737b9422d6ad6ac5f92410433b9d1e24876588717e65b89b438a04855832825a190f7edbfd82694a0ae4a10cc79c3508775fdea3a645dc7e36b82f901fe0e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0910a78eb187da9330075c1cd560eb805e116ea34fc5ae5dc02fe3429fbab938aa040d85a615e70169a6f79c444e9a7d4f1f2568c7ba2563e8972647776ce0176e4f901fe0f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dc44ba25575ed7eecdaf772d37e071386f737a35a78ae0cc9c66ba852ae9cf6fa05110901d4e54deaa7f8322cfbeadb63eb3b984bd837fe500fb06671a2ad57133f901fe1007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08c4f8e06874b43512d0b150eaf9279e2f434684404df2317221006b9e7ed46d9a06005605cb5393654fc39e47ef7d93fd4f10a6de6b5bbcf2c80310f8377ccfc7bf901fe1107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ef27130e159c446f39f09268f342b91e36c30659b5cb526050b9440979bc4949a039b752a48abe9c89bdacda591b52b46306be7325bf10e7c9b46236fc7bc5ff73f901fe1207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01281f265da4c0c96221584fc99ef4eadcb04c26e4b3c17494a843e5796265c53a008ede8ba6f0ee70db3efbd6af7967e15f5b0a1a35f62e44da2dad602effa6746f901fe1307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01ff11ffab646cb92362b1630911b7692503786a331102ec1f1f7f71b708713f7a043257da3dd01fea90ff91a15b0e2b2bdbbef5469aa0b50d982e216a0e43e1ed2f901fe1407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0208d7d2c54a3416c00eea31f3f94cac01c3337688c6317fa697607406f08f5eea00df2927462f5eeda4be51e5b727339874ee7671a5f4dbb111b68ee42ee5fa5bef901fe1507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01475d86c913756348ef44bf0b9f1f4a2979dd13247eee5a70975392d0d4ec994a0431928daaf03cb384a3a059d338d1e290e96380a69363287fa5230acc1b6f3fbf901fe1607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c8de8d69b8026d35d3b4d73ec13300e5951f462d1a68f4be0c1c5b177346ad08a03d1353c74101b31f680a29f3d9d0e5614675fc535e8abf8439da9422301172bcf901fe1707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f9dda6a3fbf0ae965bc16564995cb506229655307ba01748313ad99da8eb6002a076e5da59ce108b2e249323ce8d8467219b2145dd192939fd45c4187e73fbc55cf901fe1807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01b5572ceb4c3a9631638a85dd3b9716753a96efe8287d5496615e35b5fbf77d6a0233aea4c3a49b3b4d5f862905001abb97adfbaf4fc2828df167e96b4ce0c1c0af901fe1907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a034716c28bfacd6d4246ff8873bbc19b7e6f467ce75c593fef158521e47ae7f67a078d92dab02ebd52feee2cec39e60522889c3d4efcac20fa0c0ef41c9f420ad7df901fe1a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eec4ea41e915d78772db83b8d6be6e1c3cb62381e87729ba030ed6b61f6e0b49a05f6a6b1b542989bbfd58ac4c7aef8ac5bff3a78edfad59fe4daf74de98acc457f901fe1b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02e9d1b4102901ac027bbe9991e22dd430243f3d2e715aa75f8f3f28865d6d285a0541f451a95cb8acd20ca9f7fc5b76270477a2c129d2e8277d3bed1e93181c687f901fe1c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09276aaccbc85591a59320f24730201eebc133a8a6a7d9ca40c5d69eb129e212ba04192679f083bf490597ea927f4408704e93efa4581ac8965ca796a1e78156ff7f901fe1d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d330644ac6751c59021bc5e8023558db4d7b42efd4bc33ecba07f5933b548b5ea0528cb047ea106522d6e46f131f77b51239327d8815c37d192144a6c2c533b343f901fe1e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08e17577df3e0fb222d82f5ff46e30e499b9cebb355a23e418fbdc7dedec9ba3aa05c5ccf205bf74abdf30c7ac3bd41448165e38ea7fd44e09e459db38c27222b62f901fe1f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09a65058f9873d0bdffa68727f95690244c566c1cc1b5936c1780f4883be3c1dca041bb9e33b19d87be35ca11d355bc2c8fb08306ec087acef79df19456b5e27972f901fe2007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a065cda48a49ad598966f48b94440a341626903fb83cfdcc1e4a40f9e564daf40aa01798ed01c0e15cd61808446583c8a61e4c0103022bd0082911c9d805a7b8be8df901fe2107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a082b649b6276650f574310f46c2abbcc9535db3f5f252f783421ab34273d79707a04d15552256b1a138ae4ab56f3968f1422ed0eee91cb35b0bf637cd769821ebb1f901fe2207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07c2566347ae0fa8ef37794665991d515b56dce1a324869932af91fbb1d7cae74a03e896ccb66800f64a2c89715ac70e19b63ef491f372eb5cd4604dcb32bf7621df901fe2307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03be58a124394e07120494ad8dbb8c8268c1bd06cd2a4222e2e7ea8c932e8e2b7a0153ad28a7fa3f83e162debfbadda76744f2ffefe854201469da6a8744814af88f901fe2407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0273fc782c3e041edfeadf2a2cad4935bbebcd2d99e6675ac658c4caa6bba80fda03aeebc4f7da199d77df180f010464ab1a499efbea12c895e76a84c8eb56586b4f901fe2507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bb26993c942d7285cff908d73fb767cb89684ec544a173f099e459074cac6d87a01fd7691b352eaf1d01ffc759e84d710c2c693a3089a1bb5e7e157ab1b879037ef901fe2607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0397b06d648e9ea1edafd4dba235d75c55ddc66c1cce4c7624a5985cf2cbeae63a07bb7ff29908b0dc7852c765bb3df7350ad4cb4deccd4c03086e924518784f789f901fe2707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dbe2a516534c4f4342998ac0ea8f3bfefddfb7585e1f02ae0a385dc2f0691a13a00fa8c4ea1a81485fcca654b57937e3393b62da22057d8b0c95cd70ec0d5e37dff901fe2807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c6e29c3f5551aff27dc7b17a408c7bf563e4a79166aa2637f1cab3bd80240976a06a8c76de1f8a6a7950fb332e9b472f792ac022cc8c44daa3cf46a1a445b9adf1f901fe2907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ee4521ea00ba95490e1486ee10866a449e5c0e73f373c193ca614c9ee758a9b7a001bd7e6f7b2dc1a48acf06a003fd09e7f2c24f132d9e0c97bb34cd62e08217edf901fe2a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00130cd73bf9df83763c71c78dc273dd42c3c284abd7b254e5d26807545c9f702a002aff1271c2f4141e299df7a88703f57a2f9a0f4d275e1dcc8c8c9dc40ca6fa7f901fe2b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01520e5a11b009ddda73027ae4fe4a0f125f9b04185233753a4d4b7fd7107d573a070c463552952026483b5ea493be4cc21608535ed1d952d000e0f2e10c395fda7f901fe2c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a098a7428c6f1a1f6bc2f346285fa81e019c081525c0f21879f3d131e1e52daa99a0745649c6ee07012431ee2b12d10140a94eb58fd95d6e27fb50ce64911af21f4af901fe2d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0be1e6dbe5d9ffd9bdee102647cfd94692ab2dad9943c7972643f3cf8b08ba09da063f6484303a5da3cdcc69690cfbd3eaaed60c5b32b05af922bfc086a2294be0df901fe2e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cb5c40d75a1a1dea6134a54f49cdfdae20b861b4992b984a3d4bb1f5beeee18ba01917ad58b085c1f33d704df9014619220632e8c2bc14c6dbaeb1be69c0b17532f901fe2f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0950134a11deeb34dabfdbe3ea21be3b4b2024ec04af8305ce02265a09c0a88d3a06d1fa6c9634c896a6f400a50b91de6778440d75327338decf6173b1dfec3cc96f901fe3007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0552d5c1f64ae8c02d56fe21f79e3ae02613ca7620a815fae01bf2a5dc454c419a079b88c7ea5f1cd8bb8ff343dc2e507cfdaaf3a16f55740ee9477f3465c103821f901fe3107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0872ffeee2b99c1caa2a6a25e8ccd8110261d503cb0284bea25322b52d701c3c1a02682a003f086a581783af1ff1dcbbe92723bd20195732d1dd1101ac7b3e13d25f901fe3207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b4e7d5aa82087cc385cd5415703d2b0a3609fe01930520c2ee6fcc2cc66b3200a0216c836d593e93fc574ff016271076c5c1177bd738830b17b0e17d5536adc1d2f901fe3307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f8ce12c6738b4d9093615e85a50dbd13dc4c49643a1a4f74b153328d4f6a7d80a047cb587232bd8b0f03e111d7905a8c8e1b49290de95fc55929ae54deb394fd3af901fe3407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00e6d4ba0d16a94cd5ba8e9163179803884d45f0d3b70beb76b0847f0db770bc2a00ca97524a7d002e8e6833c0594079ae6f43d9d35adf6307234c50da2d1e2249ff901fe3507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06c466ee1def939321f6a6f618ddf3c85946aaa8a6d1d1429623a43254871595fa0480bdb8c4167b8f68f5e71f5c9c3d7a44c243066386b1aa82b2bfbfbcab4ccd1f901fe3607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0309f9165ace59e83cb8592a44ecd1866fb611a9f85ca3af683d6cff66de60a37a046b8447395b35775c4c0dff87c38b79d85bceb04f962528e0f8268258e7b42b6f901fe3707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ff7d01ab7aa1a7a8638118019a10e39df1fd0c0699d5ab54cb0c081cc4b4635ea04269b7d775daff6c191e560dc95f32ee91de047c8130878645f2608201dc7590f901fe3807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04548d41641babf95019296ad1c546aa65ee89da85c2c7a95ab49b8a48ebb9efda00bbf7e8abd6320f53df01a54bc54cefbfdc6a068ce00366897fea9b5873968c1f901fe3907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fe68f675aac42272ad8f90b51a2877e6019a693f3310ec4891a52d942e4a42d5a0776b995e5fc15094ae13946a475a0646f7e4d0248699578f66a995d4b8799fcaf901fe3a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ee3d298c4b47bc795eb2eaca2334a352057bb0904a08b12502ef982290cb3293a04614e54a816d23fdfacf16cea9adff8eb07da95224080f17743ec0bc30051452f901fe3b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03c241f16dbe10f1207fa4f696680becdb5790dfabc19d49dc0091cf2eb66d033a02d7633c6c6b7c4b19b96b8344706e29e507c84eafc7623611637124abfd8222df901fe3c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0135300604bf871c099b002d1fc242e954b5cbc0c8febe0435dd9359eb3888159a02e25ac6d3c588724d3639f2632ccb1cb554bb3a1751b6d25f8d507e310c7ffc5f901fe3d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02ae4c7a84b8220a30ade7d5bb02416fb02b6315e8beb95b5e9e2180baadca2a0a051cd7493db288496edf44c0903b7748632fd10e900086fe91dd636f0eb9d7ef4f901fe3e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a9581826e1638e7060aac31848d72e8a94d549fa8dd52618b8b92846c67a5871a05a1dfb368ba242afdb36c55853ebb3795f59a4e1b6532d2dc4c296ec5fe597fef901fe3f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a050fd795d555d31153965fa1a540fe38e523711d8ee14071f5739421f0706dbbda0042d43642633825ed96a56c1896b520deb13990c2b52c68a9ca6fd14fc82bda8f901fe4007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bada34b96134980003b543ca853483918038a416ac6766757edffa1991cbe87ea0744fd1ce5f38af3138112cd92a7b2983d2ede6ad5dd91b81e5f679ab3ab469a6f901fe4107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ce5ba871c7364d8edb3f1af972b4a1a21851049251e466838a19a2d01e9310a8a04ff5187ddec6ca9f64ab64b8df8fbc0c90cf8081d30a0ca771eb1b4d00866454f901fe4207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0050fbb03140e0d8794907e619626b58ae8830b966517638b299b82df85303c8ca05e946f6e617da2286b37c6cae6ad22b2cba0a48ca2ead0c6aa32cb2f611f9cf8f901fe4307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02154375e0a448769b45846ee65e725a3a702425ae430f76e9b2e401dcd07d61ea00e80ff7821d8776d9c3a03d2e14a4f4c659210ae0f0e9a7dd3f8c2b7cb24e878f901fe4407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0546e6e53fae2fe954254ef5a4ac21127f564532cdcccef55206a40822f071e99a00b3fc0788e90b7e2c7ccf0e040dd2e9374dc70ed035fe1bf045a785f76e130eff901fe4507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02630a8a2b68ee0ab71de697a18d9f26245a32c523b1a416dd583ba044143391da07d757f9c0b9de9246a17a2c4bc5dfa61f9d69a24275e62b312a3557a4d217c8ef901fe4607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05d15f59071c7d289185e3b38d9e68d29c86eb95df0fdfe8276ab10af213c6ed8a06c89aa67f4531dc8cc378fc582f58d4758602e55f0f159b682049806ef7fee63f901fe4707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a086478ef013bc35b4fb23550c8969ef05271afd4ea2283d61ec1d63c17809e592a0587f9cca2f431d60dc22065c3d2d19c8c77ef0806f7c32b747a9ea8556845f1cf901fe4807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dd1d2223030a4636ec3b18d85915f09b2042c4cca3a110dc83812d33a807f001a050adb91f0bcbd64dc62a1344026abae36e99985e3f0e5d381976ce7543e6d8c5f901fe4907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0272422a872a113c4903847687b96a46fc7e903a59fdb7d52855231033d1e95daa063adb464d1f9cc270a91d726e5abb5c32a3d4c064aa9d14d46d20cf569ee6803f901fe4a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c37d9ec1fc7e0f50fadd2541381c84b680739184373154f3233eb8e60d432541a045de21c3c3d505d1f1e10a24d69a7cd927c0a158e9a810d490c0a469e2adb8f1f901fe4b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f6f56f5dd31e385bb84042a9fdc16790e08412a591d71ccda4a4cf5af966484fa037ad8a17459b384fae29edf7d8bd9400246db9b31c3c52d871cba85fa12ec63af901fe4c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e9925c901c51e760054f85a63f14bf55e2bb9770d4f2ee97f67a1339dba796e6a02959bd4a6b4c278076bcd90485d894d1508f727b8edd96aa6e5a91db5027f4e0f901fe4d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0619a1e0986aed678dd714362378d57e4d0d4560eec83c77401b122e6f06c32aea00b681c7d375aa8ad94d444443a5241236d8ee7178aa9d9e3b390152446272733f901fe4e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a9e2c27290c3eec8596b72e1abf0f2cbeaadf993b62519e8f2e8f5f7380b2869a04c6594ceb3766c1e9885229bcd6b39cb48163a12131f0d7ae41b5b366a841a55f901fe4f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ea64bc00ca0607d43673a547839df2f5f14071b68ccf4a1ffa97339b396f712da01618e30ec6b6d47631f2db134655511394a76cd80a36fbfd70b9ab4f341cc885f901fe5007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00ce5055f7222659247c31a8b7b42ae082d160d92a2f2ca9d5c0d7cdaf3eada69a00aee0fe3e92f75f2bcc8b1c1b9d5b1a08d54522ea2d11bc3aa416f06d727034ef901fe5107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e31a51c402796c6300692b7ff0c6423aec1122b985131df0193c7199341d8247a04bc9d1095cdbca7c78ae4d9bf9a91e36245faac41d63e1ca87e3dff12cbb7652f901fe5207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ce05d106e03df07e754f6395d9535ec3caddd40811a659020cc43205042fa632a034701a79953ee0f5120499f874094c872a66ae8fce1f4cff2fb09ecffe9bb1aaf901fe5307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a083d1165fcfc805cc3740f719fba2e88c814641bc62e7f99f9c5c398d9e446f07a015ccbde8864333e89b9909850754fac204d917d9ec4e9d2b8ac2ae824a7779adf901fe5407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a015829b6424b08dbd2fe09562d56c9492b1134426bbab7a2219e5405e9211f603a071a1573fb9da1f182e5b47bb9c5d22f3615ad2ad10d96003f484f4721a7a5b31f901fe5507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0163a52be64b02c1d10db54b312862a0ea0f53770deb41c39ba4d827620fa5e34a004d0ef4d5c3b0c2ab0489577bf573e95212c2e4cc113ca3aff7d4be87ad02227f901fe5607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dceaa112aafcbb854396b567ad21ddb8b9033db655d8491d47c89d5794281063a065ed7b789c1091ec1c9d16ee403b00d5c1a157af3c9f42b9d0606f55d77ffb5ef901fe5707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a016a13948231a380a405f3fd8153b5f880ebed457c669e49f3a5f48398f013d41a037276ffa0df8652ebe13d632916896ca6bdc73c745da9a49eb629949c70ab85ef901fe5807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f03b89f8d2340ea29af76e061f256fe1bc54ce24c000ee41921b7c010bfc177ba0339437a5e44ab885d3aeeb9746ddf0a43f683c56dc817c42180426e2cf2bf89cf901fe5907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a048f799349aefcb86cf805b25f35a749ccf58242a4e2b9420f0fbd27e6844ed02a0192673adb2d14c689497222a48bab997997e9ca14e2b00043feff29452887fa4f901fe5a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f5571c0f55a00bd418be5d44bb1cdb07441b12b0825b08e2f0bea7cefeadac67a03d27ba8f520482c213a7391cb00ed1b5e1a21f2e43b160e0da7f98f575abec06f901fe5b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a071f3161cf021abe2ec2d82f69f669eed1f66e7fc4c21b7255cd33707fd0ce520a07d9982cf3e01d5077c40ca0d0cea59810f456defb412b02d35ce955fe66c4009f901fe5c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02d24494c5e29711a1bc80f5c41e758778c05f3fae901d3c2537a095e32783a12a04a911abc5c6c4aef34c35257240172108a17cca7db691c2b765d4b5b34358c2ef901fe5d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a4754f155f3cb5c09814a80a1a0cfa36c495c6d79a6dbbe0eb1701b8c37f1561a04a93aa032d0e0dc7156e8af29d82ef4db53861bd606dd2e8bf12533640cb6543f901fe5e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a6925a12c2a9dd24c89c077656b3ff67934b96af1203417167fb19640566e152a01d841f3f83a7a52152bdc2aed332fa4edd29571bcdea933128bc8a7280086521f901fe5f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0713f5e5986bb6655c4548b0d9007a0f97f9c11e670501e28455ce47641e83905a07592d786224e2f9760a4aaf3cb65e2a638c54d3e03c40b884ab5d8fd575b867bf901fe6007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ca95946554942d4c991cef63ac30d58f794682b4a96ee0655d7460d3ac06adba025aedebb0dddf781829a85ba6fd42c063fa2a7aea3487b21a05f51135ed9c692f901fe6107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09143b5f4c15752cecf3746afd5f2064566f3c4fa373913f34629f4809f237238a0411e0eb56604ff9b361855942492e3227539c0347dfac1428936fdbcca132b97f901fe6207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b108494b53797d6afd359e154983fd20143b7051212dcfeb8564f5ebfce778dca01e4cbd01a9bc75af072f46584fe695541d6b0cddbb97d900561a0f327215eecdf901fe6307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7b7b6cb68738dc40921983d2b6b454a8fd7217890fee3f1ea68866847cd5740a0257b8b0ec1cb162457f30c919c063ba1797dfe29afa240e730342169bd4cec63f901fe6407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0666e5aaf0986ee1fda1b72ee4fe9a82311b0c809c266d5ab11d11022b9874b55a07e8438f1f45635f76db910dcd1099ddb91ef7bd72fa277164228f82f92bcae3df901fe6507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a082cbb2ef9c903d610d2534e40fb0cc2745062572a45608dc60f1ae28938d9240a03c6ad55e6b7857884a615cad98edf3c4868612f3a15692d28b9e35fb31ea22d0f901fe6607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a066db8cddf7f78dc98a85da50e1d5263a7518b573b1b95853548ebd3d12b8820da01139cac9c7b1082a6ed979271f2cd3b8cd23c4e342943f53b67a0d5d69da1dabf901fe6707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06ba13c11c6bd52a7f3cd6bfe57795db692ed4b8d60702800efec7c5d0f932e92a03cbf54ff26b456220537b11b78d60bf1b5c34a4bbc1aab9d88478cdea607324ff901fe6807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f4b6a4a73eae8a3cf63aa9e863adde2c890c64c8eee7fe286a7df6cd9ae199da00a3c305b9cae13983ec21784d3b52b2025c6456c753da9035d563604c8211da3f901fe6907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a078827fb1b93f095c13f442f340105e53fdc9f30df13fd69da74588b0e17571b9a0600162a652b3fab6525f1428f2f727eba40ceda6ac0ac85fb0f8023bfd5998b2f901fe6a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01cadb5d6845b63ee01b0a7848b54ca720b7b0b46decc67458240d8eeca827b58a0185809f31d9b4b33d2023c1ddfdf787f97bd156ddfacafabd550c182fb5626b6f901fe6b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05b7959086548f45a80e4337ccb93ea38c6224c2d3f6fda9437c9f87ea56aa071a00ebbb0f375fb043b2e7e729a81817aac272ea3342170b7284a9ffe04307f221bf901fe6c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0887ef8bd2a940f65b066bf672daa5c9da9ae3bef7ba3798e0b61e01c173b83f0a0537010836fd6e0a9e8d5bb34820f3b56430f448adcdc25e195a63757f6b2fc6cf901fe6d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05e356f0a2e98772d12ec22a5240ec47122dd882c7ef2a2f1843e77a1fef24f24a00ce9eadb09c5243628677ee6295778471b4ebec078fb6cacf6465caef1e7dcd6f901fe6e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06345be4691e50c7617559372ab0ff567e706998edffa9e5ea0255189898806c3a068f081f904212544c73cbb5b362115e231f09dafc014e3f29c800e43f0777af6f901fe6f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b251e3bbb5f090f41f9fc072906d1de70739fc007fc5a7618c77dda038c84c08a04efe5a210efbaeb82f2646a9f82258484a25b5cc74adf6dbf1d44610411c0f6ef901fe7007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0266a2bbdabfc48777555b7b3e07a70126717aa5bbd58d7d3d6a5ba2bff795d90a0208c4aeb4b8f18a1ffa148d07b646e9c0e8edbda9f606956da769e9e537f03ddf901fe7107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00a600d1b5369d6e9079b2720be2550df7177dcd4363a323303e1d120e324099fa00cf342e8e0633eb46452127f0b508fdf71a3fbddd7aede072fb076434c989a18f901fe7207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d6fd1c1f164d37376bf8bbbc9766f14a2f40269be5dfdc936da4b95be6622417a03c8f643c0be4f482e98bae8281544e6fd3bd07c8edc0ffbec2c73fd5f48a428df901fe7307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d0388287b5335fd022bbbcd39bbb06baa93c1879456e96993142b3d862e30ae1a0715a5f93a08ccf6470a3f6d670b2041c6d6a23236e6f722123b09e5e6e712e84f901fe7407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c15eef91a8b38b0202a32e1d10e35441db1a3c00e6c2e6123a4d400843379abea05e8a8b1b038bb6922c8b4e838a8b53b5fc9fc8842eaebc7bb592f409e5e79d47f901fe7507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c79106aa4021e2568f7462a8b943a10cf025a14d64e6f2e5a5d473e7800d5d0aa001f9da633896cfe6260cffbe40f4406d0257630f60c9afc4bf872021a5ee2707f901fe7607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05e015727be7663a16ded69f23d3097885b8a933707ff768e9745053b45f83e05a0310ee338e6420a76aeb280ab1a5c56f3e7810220c84e0214dde83bc68a0acdd6f901fe7707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e5c4b751a1759d9b70cf043349de77c214a7d469dbf6eefed83b6e94916b7704a0688c20aa890065a7f795080e297c50d5acb7804cf513042e89af1a930821666df901fe7807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06cf7abec00cc88de6e8b1e99eeabe20f76a1d6b1415a43ff3bf0314f74bba081a05726d3bdf5d92e61a3aa8a730fd35ed75b4e0727ec1520ecafb764f0eff2531ff901fe7907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f767bc4ac0d203a9390498d5348a5d24abdf1378f585ab461b1bc7b7c4980cf7a021208f773d5f8e349fa05a11823e4e51a7536500d41020312e26b4adfd894dfbf901fe7a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07b3aeb50d2ec3ac9b9371e84fad6d6e9687cbfeb3f1a3a4824e0bb7f84883569a02151414c999118c6cd1161d77e08c7f0de30efd58e28a1f925d9f435f5de0b8ef901fe7b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a061b8638a043589365deb454683448cd64e6d6910cf5b7d74e1780a003ca902efa03c2418ab68f700584316886ae4e226dd1146f80658013c9eddfab57c9633c3f1f901fe7c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d037a9c9cf5ad87a446f418ed91f9240d56b104ea52859a452a1897e68609eaca02c65fbc5f36f8d7c1a95799c1a64c25f87d4c8b124d92d989aa78c76ced5fa2ff901fe7d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09b39b10e7890b8855e3902c61f9481cb9dfcc9897028f4d84657e92b2e843fcba02f082451860cba8529312749c3cb770044196e2ad83e005316c259458f3d33a1f901fe7e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00e0c790f90d72b4403680ee1e7e54f0ce55fafe32f614db1da7a749729b48adda033d3bafa1b0bfc432c3f3079dc6662b35ca29e6298605fea554f45bc78779533f901fe7f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06f21803102b7d1f4355a36ab99c47053b2019e5af727dfce16758df8f7080a23a055b3e15ec9161b8e04e06c4271012a4664e260bca639cf8bd6f475935828b255f901ff818007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c23af0538111f2c20c8f058eeea58e6f4d180ca2e335bcb992cfa7b0060b2801a0065d4c8e1d95da282a6ef79895e509945928c577386af60c7e8404f7e68997e1f901ff818107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09dcf2c2f0833efe33028859c06bca3b9711fcb2577c32890b08c16595819c5d5a024e0616d04004371344b36a41d275ebf1ee997d54a7c5d98a0b11a6c60ad0dd2f901ff818207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05af33653a918764bf5b65d8a30d3effe63e00ee3ab6a594f288a50eb92524ae4a02b5449b3f5bcf5bd2d6f0849cc17495d64c748b95a1a164cc7373912fe252bd9f901ff818307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7d53bbb3ddea5b5ec51d0e71787bc733ee7d472de457a298c9b01de5cb55d34a05f871365aafaaf861154a8b7f6b6e6a4ab0f512d2cd55616a876f0b1b7cb3206f901ff818407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ed1390ce53c6362ed508ae53be09d784dca4418b772e93281da7d2cf21dd8855a022e327c73ffbc80f97bc6d67f2ab183b1aa15d371baea213c4eb8a6b36b21c19f901ff818507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04803b814b4b3b87ff97a7409165b1847947830442ca4638a68956e86663dff26a01ad6f4ab016a8dff98bd5a658f12fc14cd2ce8d420dc3ba92cc5388449224777f901ff818607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dcd576746d3fd3535568c9f00674cc733bfe214b63c88655989ff01baee09058a06cbe7ccc0e1366b81d48cac7c2010170a89f8c9f67ad91a632a46e7b0adef921f901ff818707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0579cb2976797939e0299e84a7be80fb1646b641a0a7517ede71875b8853b3ffda04d9ebc1d4fbef669950faafd4f6bd6557d55ff8b5b01097230ee88dc42abbb8cf901ff818807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b68b2fe588fc6514c97399bf95d34998ddef42c511dec10b2a13f800871795d8a070f74a4277c791168983709dbc0851c679eb504c534b9cf9d26c01f51378021ef901fe818907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003259f67e79cbc078202f1a0d611e1084bff3cf45136c02430dc58a460c283d05556a07460183162b1cfc0b3afc69986c63c9951f3562c5e23582a5d8dbd176237be24f901ff818a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d1781915c05dc2a9d58ea3ee9703235d5282d2d2fb783c57a5f2538e4117b1cda03d91d1a24a482dfa5e3d4def5a286cb74baddc17132d2b2fd1a9db4bae28a27df901ff818b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0056843123ac4bd31362b9dc620b8a29643b1174eb5202fa1b1ec5ff3951fca13a008d35201606ff48e78823d8468c0ecc38ebedaa4dd1cb1af23b0be04a05a8ed5f901ff818c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03c24f9276aa06d8e15f04d8268197c808baa2d72e14bab73d8bc0f6c40403256a02e639814b0d2dabae3661b15057f32e81d2e8992f75621f9ee132b16cc304c13f901ff818d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06aabbe9c006cc9a516e709f0481f23b4e0dcc4a9a01927eb7f13dbba070e758fa0497f38e035e7047956dcd017bbb993d116ff0adb441abdf221f1abcb86d95fe2f901ff818e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02f2fc81c0c6ee5f9a5de97459d92b8b37bcea5117f2e639de075eaffccef204da0202aa50e030622202e83d13cea4f16885a38ceec60f2b7fdb0425114a99eb163f901ff818f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02990b4577ce0ed732dec87637400cdeac01fbd4368f74f54c17927eecd429e7aa039ae23baecf98703a8203debdf658c7ec31c2e16844a506031b98daf2700f30ff901ff819007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ae7196fd8261d9cf5e7ec6c716e24c0daa3acc0556fb3a6c79d6b1b6c21dfe37a011e1548f3484e2525ea37e0a6cc5db4fcc3cc3fd2de1f55b6404bccb5c215999f901ff819107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aa2ceb6d0b530dd182e3581d8f26f9a0b21e9f1931d9a4cc16fa813f5abd99c8a0375a769efde2ae9bf86608fe8c84976ce148d89aa0631d4da0827c3a8c1ede75f901ff819207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03c328d4c78907793ab45e7e197bf324cf852a1b697f2708c52832c7050f5e345a07afe518b46684e62329e70e1c777dded91f13e2e673dbc3e98693b986d2bf42af901ff819307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a030fce07d857a21dc702416f025d7600d32da6070d1701c894a8fc4834d4075e7a0144775bad50d460fd5b2c28291e1d012c11b33b1e3f2fe9a1bb2d33f2ad9e5f9f901ff819407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0091ca73174e46b96c3ecf05656ebd980ccc86e3d10c1def697b582c939b886a5a031b789184ef8530ac0e00ae174872e3578d53f392492fd7c6209bbe13911d8daf901ff819507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044c2f6ac8e685e4b30452da15c3f67150b95ceebfb3456039387fc2e9ed63a29a00660d7a1449ba7fe15b70fddee5e70fd6de2b0ced278b3d683d8903e3e3b462af901ff819607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0363804a2e6360ced3b5cda784d62323949e53476b9c92f603fb66858d76883e0a02ab9dd354af169bf92b529dd125aae36b9ea78907b1403200311b571148038abf901ff819707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a86908d18a513cd0d817ee02d9bf29896d794ec42e33aa94bbbfa409eec68ae3a00ed16d62ad6e30d369be844cc0b3a597d2619676316732e4a6b5ae46959c4467f901ff819807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a01d04dc582736eb1237745bf6f99ce50f9882b04c35ea9ead79b475b8bbd4b7a04f1a6b7da65958b9c762a6882f48939ae85522c673ee4ebad77a3dbdae2fac69f901ff819907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0629bafb76b54e614028d6cf9ce3a27365750fc3cf9446071fd2687d0ab209817a00a5cdc8285070d9fac617fd074c7a0de9ef07358989f42f20d9b52c29e4664d7f901ff819a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b19c1ec71f6ac77691b7a0583627d4e22647a9c4e65a0338133441d68c99305fa03b68ee1e20dd37f50ed9bf84e7ac4faab08259679a49dcb55d721aa39d0cfee4f901ff819b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03ea25b8f969faaf752723afd48b7898f91d089cd1a8ccb9545dbcb80cc4896bda06967248057d75d9986a237ee114837c4c5f009bb9e3b202a5d0b79d71eb4de11f901ff819c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09eefd6a7c4ee355a067a0e1b52d697284c2a6f5016d13ce9d319ae6a934a1e77a0279bde03d38b1af816c3bd7d71b2cc7bc55de3c3edad89e78b587716af69789af901ff819d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e8b880fe4632b45aff98e3f48a4362e5ed2aad49444ef647c2587bcfee263575a01bd6d1bb2b067358aad339b091278d3aff80eccc2482a467804a690313ce3bf6f901ff819e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01995b12240fcfd8dd9540badc309afe1f269b5f2fdcc0024c9621aa089d8d21ca069f32c4143a79df510537f628cc1db538408ff1c617ee4330507f0c4bf648ce0f901ff819f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fa98d7dcffd59e7795ab3699d54c9e7b058982494c6079614a56deb45ce54354a04901dc4a6f63870ae9c281120900a4c1a4d0d880bd9f9bb21888c14951904a6df901ff81a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03138399804ee31267dcbcca1003082d4309bd76f84d805ba4265ccfee3742d74a028f6fe999243717f313c5ce2e81a185dd721356c368d7a8d09f65787b7471765f901ff81a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c85f49643c4a15a52c13b7404ff764244b843b6b72a068a3d7ee8a697a0ca840a050c10b2ff7315d05d8023a87fab2bcbda8866734c9075bbbc35bcc09d1fa4335f901ff81a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b8c5e906c437307ed3125c12cb9dd2a3a9ce90786de762280eab3dbaceee32a3a03ff54a9d73cc913e9c18b00c2e3822c72d7487cb6db0f7a4b81808ef66446820f901ff81a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00caa5b9445cfffce62b0f51fd3ac43a926d409b28490e6393ade554ef9b451f2a046dc0ea812b60691e3d0f751c5058f879f1559957e7f4b90cef3f583afe7b416f901ff81a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01ae6e9c67233d6bfeee87564c7f0a4314885d87965940ec87c3d73b0d0baa136a05f2bdba2111e70746440b34aadb31851f5cad47d0ba0126d7a43089d8c394cb1f901ff81a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c6b4ed5b12e7e00866b67fd068b44392ab620915a4709bd7b3c2b1304cebdabfa05c4fe543aa8a3f49bd877a2f9895fec207b9a56438e98e62938d07366d66e294f901ff81a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0090de1d6414ec3495df30395513c82c35f9ca5b4497d567443e2cbc386735caea04d166abadbf7cfeeaf1d0842b81d74e558ec94a210befafe617b2664dd02940cf901ff81a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08719dc204de497dcd7b0c68a1ffd9d8b3f9bde65fd9c3ccc1071dcfe67742630a060cef812a61dfda7c0257fe985b57c1888eeecf5277ea5b182feb515b8191bbdf901ff81a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01f00f03b44bf5b01e79364abc5fde215278f48ffa2a111d3486932a060715d74a026815332734bb5ec7c7f50a5ea936a7c848ce9780447e2d20693b1c4f10a2d2cf901ff81a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07c7c157f1d6aef37faac98094999f4f006d49ff0513dc4546909ff2c72558186a03b5f1e293a6d72bd3498217ed08ecde2207ab25bcdec978a6bd2e724d13b67eef901ff81aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a068d22775b78d38579e78f2ab5a98e63eaaeb40a17d4a7cb509c463fb28c790b3a069299799f72fbe791453a6c43b9d48156cbb370b5774c5a37aa4caf91da0beb6f901ff81ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f9c0ccb2b108b70a2af68057e8b288ce607c6f2b4c9108b2f13c2ddc34ffaffda05becb88b601988539df9871b2c3d7b7207a8e6d42e00d91be30f403112288511f901ff81ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a057e049ec8e2378ce8c29d2eccb007830447945e4fbed92b7645203729d21432ea05e47d3d2a6f57eee6a48e366b4ccc49de74073ca6afcd102e5d0b59467ddd644f901ff81ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a034b755cdc9a3fcb5d6bcc511ed0dca8925b50670ec8c09f3e01af86aab120e7fa06f61ad45b19c11af1482f3ae4dfc634037c0725e6209e40038619cc6e36823d9f901ff81ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09942e24535d0f61657064aa627b5fddc685adf2f2c8f2cb5a8954c0e5d6fcb31a055d6e41f70bdb833840be484d1efd2b282267fdeece5ab87f10fae586163f094f901ff81af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09afb0a177150dc8fc0d35b652a6d52c540caab3321fae47dbf9bf43a575ed645a06a6c0a4845d384294a16adf7c8207c314f0f50a89531e4c19325bd816789ab26f901ff81b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0834b1d740bc389ab6bfb7e96bbfceac3746b964d0e807318e63f1e1a0a7ef9b8a00dcaf3114ddef34639cda679e10700de0413c2f8814cec2dc827f1debd1b0ce3f901ff81b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e9a3de12edf04da8ba2c18a94eef01319b2e0c6a8f56817642cac38727f75cc9a04a45ad6ed5d2e808aa1b40497379690f301fba61b63af9b373288d95f44dd514f901ff81b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cd86739c675ce6cb9c53e6508b8baa18e01326fd8caea81a6915c1bdb50e41d7a025caa449b949dd9a7243fbfd78b2ea7275d97412096ec20959494d075606bd36f901ff81b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0312f947c920614ba0f12433bd192e3af13bcbfca665e16f5f20889e239c8a393a05e029290afee75cf81b5eb99f12c9f314b28d340ae9111ef1adf2d48c66a115ff901ff81b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0043959335ace01192a4285a555bf6336b07dc54dd7a3dce42539fdf5fd69baa4a03317c5f3047d035a03573947c2bea5143d87a5a9ddbd7d6f8583c00aeb78083ff901ff81b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a044f492a184b1c17960a85d65a7eea733e266f647c511f2fb0fd38330e2a8d519a04ac62ff3279678947719ca30eab1106b259d101299933eda4cf68655b39e3201f901ff81b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a008bc8e695b66f60842eadb8bb5e4b21fa7787bc418957693772c70c4b618c2c1a06d13a9a655acf95bed8a79dcadb35ab704b96dfe3fe28df18c8f2ae2d96d50d9f901ff81b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ed5c602466d5f8ad584b64f67f2a6d662b86bece09d63d3d3e9be60285af697ca0660d6f0afbe7f9cce5cf58588b3a6c57e9196d96b1ade00b39f5d8b44a1db24df901ff81b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09bdb37662d95250a9968ef2fff75f74a9419806881abd9423954f11c2ea2734fa0110dd03d6faaa2ae820443595aa9c2945fa74e341002adff464293ad92ea8596f901ff81b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044b7de1a9ba0d839160b42c7be0601d674b1dc22621c06ba45776aa010a614c9a04a6822bcb25214b75b4fad3873d281c03643fe1527de4a80abb6899053ebabaaf901ff81ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a465852de02fa7a4a7c6da9bf2604ca642d4ee50cd0f3a4c1c1bfddd8a59dc08a07cb7a660abdfd44b53e0c562efa2ae3726aafebd5149e0924711bd415f915d94f901ff81bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a027b05a5b5873c8148ca9669e1b21d0af919ac302ccdcac47922e5158457d9f53a0360d14f0259144d38a31297fcc145a71b6f03fdcea785935ce168074d9f16174f901ff81bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a006d80f58df5232cc0856c111f61f582f86d8c9fab60f8d4015e586af8bc0efa0a069583604e788eaba8e8f52f94366e55f29d423988904572f581f595f7ba4e0fcf901ff81bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a093d65fc49e7d19445af6da304b0f2994708992ad91c61511874456c4e9298132a0591e054012bcab96bf72e9fdbd4b0e52b4976f12bac723fd63d0106b4714ffccf901ff81be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a060a1a63de170f104e51fcc8a168151309a8ad27211537d59aeae83f4a85fc9ffa02802cc924eef0730f9572fedc53f3e531ad2cf5941a6c20ca349c13f42263bcef901ff81bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044ee795fd5bfe2676ba4d40f925af72c36e46734f1314a0d5d0a2fea71b745e5a01a02ab666ffe3b22fbab308eb4a82bd416e7530c113865d4ad23e9fcd6cbe502f901ff81c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c6b0933bb71d5d2ea1611d7f3b8580c8dfa0e4f411128aa5c0e23985ec2cb67ea016e9f443c9ce0825f337850a220d47b97b2e95534fca2e300ce10f7ec3784fcaf901ff81c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0807ea9cc6c7aa21c8ac6ba8f83603025c0e3a24162022e250756378cbee41a09a05ab1e13fa5002e343587701cfbdec876760980fb038b25a80842a9f729aea95df901ff81c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aadd090ee81d93e910ae2b6107f40b597ae2bd828dd17b651d2e90287035a74ea015fc42bbe099290281369b8f4f8c9a23520948e6fe7118412b604aa0eea253d8f901ff81c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f9e7b77f04886bf2bda53f2235e17de04e2ba88bb33de68677c3be5cee63fa4a0180b961d255ce79f6bbc41b3d7f1b1cf028f6e51aa62f1f7c49c304093530b3cf901ff81c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08c8774b5c6691c7bc7a069754b31721ed815f08fd2686dc6c778b026203341cea05a96c6abfd67e6165b1702e18dfd5dbf54279e6a14f9a24ef69570ca3fb0b5f5f901ff81c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d9c72f1e47ebbbfd4bf670f2cfd4174a6faa7a98886bf2d397a094757eaeb341a013f6cf01f8bc8165fb29032b68684f99779b1be3d3bfdfac71ea0e47f57a2148f901ff81c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0426569f6e25f13b1da4ed9aefa2a2922d41bfd96b2a25a04dd020ece12c4d3d2a0701f1ba3c0b06404a3694f733b59f6db41b38559a44c257c6256b30ba21e4206f901ff81c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0feb7ac09f057ec985e0fd4666fd4d47f79d25333ff67c375ae346ae4c86a0f16a071f94854f083d368a48c0b528d9eb6531523e887230124ecc7890500d56a5c7af901ff81c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b61257aabb3969a83936899ebd268e238b5978305027ea69dcf160ec8f74f743a05d60de636ba9df2edef3aa0e478971a025293552bb7560fd330b8514ee6aad86f901ff81c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e4bb49895017f42ab75361004d43ddf54b3ab021c588e0491c220e613d25b98ca03510d3630aa350498ab2020c0f92fe11683954000bdef90aabbe0e8d899f4eabf901ff81ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05f61ebff664e545ecfb9ac6d58fb757cea4a2249bb4ba847f6d4ff0e725b4bafa01ef671e1c71111dd5bcfddefaab9c3779cb02861bc17f9678da73c9f92671520f901ff81cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7f5a5b333421ea4f5470e85405668100fae760dc28bfe354b51f929ee54ff6ba0034651c73cbd36b625ec3d91e494d41e730d01c4a998da41559bd9d3d73f6556f901ff81cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0efaf12f33767f255793479cb3cf96d2eeba021c6b7429604832845a5d7aeca01a05d893125527316dd4a8f70abc5ee479c6ec7480518b78d67271acf15849cdcaaf901ff81cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01ae2abf2e74385879fed91706c7f10da41c6704c578ad63b1ee7b11f32c02f11a0488214aeac4e8a49a1b1936f646d10d67a4bd43e4e4739c0a9429a1ba5a8d062f901ff81ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a090e318a85fbd76aded4da5dd42743ff722914aa168784ca30c3512d737381512a012bf51cb43a06233f2f356694ec637e6aa8887dad693e236e99c868d1d9dbb14f901ff81cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a033e6361a5e7bcb6129d8ea2d56cadcddc05b1bbe833de7e087bc60ea24ab8c53a0680fdd41f87e899debf0243bb5c75c9a966bc8781d3f2579fdba5e84ab371ccdf901ff81d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cbbfafcc56318be63683ffc5a47a5bafdb8af5ea500c4da61ad3ddb55ccbe79ba05b08eec769030de5e50e99ec35a67637a2760376b7fbbab7b6e5b48ea25085d2f901ff81d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e48323c25573f2badd635cc469f1603c1ee788c7f9019f70e17e5b63929da762a03621cbd083966c0abd3e684feb56a081e6899841f2b5b10c771660ed6c4d9c1ff901ff81d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f00ae7cb02949b58db145c92c166325c62d9103f6ace3091f02a82993284c595a01941b742d124e2f8fd811fd96e8fd9b3356bb15e4163a6bb1749ac1b08aef0a2f901ff81d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0173979f7bbe8d6eccf2951a9ff22a96216815cb509cb38249c7b1b7ab1c48f2ba028f11027005fc49dd547a035c65049c482deadd6cf122dd54c733cdc4d87a1aaf901ff81d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08e62a12605bfdc5a111b6605003553c10eabf00743427fb9d9a8694e0a9224d1a01f52397a5a0cc9991cec77ccb858a63444580e101fdeb89f295c82caad899121f901ff81d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03bda62589cf3a7af7664ac0e55f820af7b8bc7c474d225d09d9cb5f8636df94ba02aa2fc175fcbdf53d405cc66927438016a1f27b0cacde56421b8260488728372f901ff81d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00cdbbf0d687b68b4cb24c4835d3959770ae30829c4ae3b0c6cd871a4becc2a9da059eb4d7b8b5369f5776fab4b216e7c28bba41558dc835aab5403d25117295f73f901ff81d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d0d9af6f81b78f26eecee62698ceb3972ffc264b9e664cdad6fa4002c97d496a0178e1df9ee081155c6299327a0e4635619910754cbc961d4953b8b8f6e68a5f2f901ff81d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a027704c4100acea131aac3e1a2c6a71c073c459b6c42a2e4530fd5ef332c05e55a043bd28687ac1637072bc0e2f88fcfb89db15ba9251ee2859dfbbad7f444bc308f901ff81d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae678e31408962956fbae28021d1a0ecf1ad5eee9caec171f91570fe9e8a25fba029a074f9aa790b0e18c02f5bec726bdaf8800be465da692f092625ed6ca4cc3ff901ff81da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0411f66e84e4187f5c4f9e00ba95e8f85894878ace6ff1553ac2804aaaf1bf860a016f9096c9a24076dbf480388500e240be9a3b0a10eec6edab9638e044704bf14f901fe81db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a84bfd0986450e2a1e3563da74a63372a564054b308247d7ddbdfd913eb069f29f6dbb389b36997ae2bd63f21120ffc51fbc730b24921865c05dce8bd0439e7df901ff81dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a067deb187e2eb7ae59d369a6819d8a1ebc8a20449c3402bc8374b74b048ad33c8a051db239737832764a7e7c1574580af215e8066397cc2232673a2e580634c3033f901ff81dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a083567ecf6965182249b6ad444319bab38adf6b5a566821d0eb5db3e51922fa05a024974184362365fd218ad4d7a88b4c17cf3ae792b374b2306309a7d1fa24e367f901ff81de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fa0dd7c213671eac235bafcea7e9299401b2f32ac4f6b39078867a317ef2546aa04e5e68d856907da297ac8c672b68d911cf40748c256d75a210c86000c2e76d37f901ff81df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a069d77d76d8ef4c9750dc47adddb64b14351fae3759a14b6772f33181ca7dfff2a02bd4c9ebca27bd2c84cc51893fe99193f2dd3f92b746f0d16a6fbd15ee00db4cf901ff81e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a033f1dfe2d3d01acc30ac971f9805f8aa3c60f144485b3c41377cb16e89935796a02da208e198554ce128e9ca8082545af330b66ea37d7efd0b3b51c93671fc694bf901ff81e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09be2ed33d07892e813902240c9935213ea01b3dfacd80ae5929abf504d6e2480a05b9b17fb42714ad957986909a59b18cb48154734bd35a7cf768c4a142a1e4bbaf901ff81e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a047a30dd5dc513a7d601eceda9d1dcfd5edd12946d82ee59648c1a30181af33b8a068f6185a35334dae3a29b62c8d1ad3ae7d63d7c85e66d2dbdc0591e641cf413bf901ff81e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ca41c60d684045b8daaed5f35dc852d07c91f63632a95ed2b93f911d23b1fd46a053cc0d433b7ce84550d29d640543ca6dcbb5c7ec95b66ab30d92e2107a4e969df901ff81e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a077dce9afdee2a8e6a83b0625a4c33c85051a08da3f52fd2bc788085c0846b9f8a01ec939e5fe7edcd031a1c1f9ed5aad26668c2092b276e863dbb1b241de926368f901ff81e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044feca4acb4895d5bc3fc91eeacba2291725d64cfbdef7311af0e11fb83b9322a01e50e842f5dfeca7efc102c8de99e533ca53de7769db638c9e8afdeb63321f9ef901ff81e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0817f05b085fe94f1b34d13fa30a6c2e31a52783fc37f7ac39a78d2486019dc62a027b25f5167e8a122e4cd9215b6ac81c5bf5c3c84c7672aefdafa85e682a4ab7ef901ff81e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0546e1b85104f87f13f5c1cb13cd608becf4196572ca9e5c1c398e829aa4838f9a06235516eeb507dfad0ec77805a12ffc2978866e97d7d64b92a92db76dd2b9688f901ff81e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dcbbfed177fea524d7fe2ec9137465686a602a17c7c2142e25677508a5c6afe2a07c16578d1546d7f00384eea0c6b53bea871e3909e6bcbb48bea04a997ec4704af901ff81e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a033ba3adc2ad4314f71de7cc8d84e6592e032d7efcb6d6ef04fbb3c42ee3c6278a0243f8f351396b96a28381f4f3ee4dcc550ea2aae23469a73984ddd2a32f60d6bf901ff81ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c1fe8224fe1c8a71b2ff0aebd414889e7a1406f0d9b5663692264f83b6bdf0f9a03188e35120f0f0170f2405c113ef7375c8a9feb0e7e853cabf6758a0ecdac27af901ff81eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01c0f795d459554ee8ea3c16dba5db585d5eabf8e7e8acac27ded7833cf4e5c8ea06ca7bb8dff880f8bdd9ac22b24797b06f705e912b4a33b8fa6042cd52f07804df901ff81ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a094db23414cbfffb1b22ecd110d37c6ab3615021d033067025b5a76cbc965c817a02d2d56d15c637b395ced1cf8f40b0a1cfd1fe40ada92decd9fce75447f62082af901ff81ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aabaa3becff4d5fa8096c35fb841d2569baa75de331e2c7a4a071430474b2687a075150c1bbc9537e098218389f844222afe52d65e4fb868eca19b57d635dba37ff901ff81ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09845b01aad1216922358cc7df77e65a99b89f99fc4b8f8762f6afc903fd23e0aa00eccc2c14a0e42e89a98cd3f225536e5cd1ae0ebe33f3c51e4dcb02a8c846487f901ff81ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d45f5d77ff64bcdfd8f5db0d662abd72a930f88d65eee67da9752e327667ee80a05f4a01707971e91da35d4562d76fee8d64e2baf7cae89a8e8ceeb2305576c1adf901ff81f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a075be17f05ce390e2c77680b65cad3ef9c21d78b1d3f476e6e2b8db68ded2e5cca043c2c1d7e8b51a54aed3cff542a85b10cc5ec157bdf301d3fe6c8f5bafa10a9af901ff81f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c8a46dff7b8dbaaadf4ee843f58961f5c38ba29a39ac6844d97470d81e1bec37a05dd49fb66753ce80f53c1b7b1afd8d98e39988a137678bb257c2c450be63e181f901ff81f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bc6658bc6f0249ddc29e16061d84f6daa03c7a2b8a849882c58008cbc3c548cca0618d9b729c13cd8e48b2ef5419be5a88ec2e3baf3a0dff897034a50aeff96623f901ff81f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09e20cb0bbe2303d7d1692b731bddee334f8cdcd71b3fe67dab31bc2f8f25ddcca01cb83e770771594fef0e855d75c892bf7c8c27c538d6773112652ac50c5cbf70f901ff81f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a008aa073ffaf02a9b9b425e5d98a2cd8952b4773bb25ee4fe9070977854febbc4a0477523b8f3747df296b463fbab6a5c920393d5f7e7ebe76a220b9d1775e48a04f901ff81f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c65f2281c7f9bda71350edd6484178f436ea993dd93a145014068ef1fe8fca46a014d7cb51c9cddeade2e67d71083bf5ac11884c7ef3e8cccbcf5ad4c9bab1d2d4f901ff81f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00c40f28e2ea4b66b7d14d7e0a56024120c53c1787be0fc820c310c2497aa7ed7a01593116b12848de117faf65bbad6f95693acada142cdb3fd37da8a2099bc4063f901ff81f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d1f32f74b33ecebcd36d950ee515342d064308748e8c6e10d5cb859cf9cf89e2a0115ea4ac1f9e6a5efabc1e2b77eecc2c38754cdf3ffa68e3e6c6806f3e2e87a9f901ff81f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0df3c515a2d8db3e223206b1748a5df67db1728c5e5407bfa6decaf56f0ea461aa02709643d166306c8577e80958b14980a3db7386cb81e2ee5d0bb51e46e2b9127f901ff81f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b4590d495482b5ffa35996ee041ba06949b140cd76039ab2efa32d78db4d0b14a06237f4d115861f991e175a85cd4aaad4d57619ccb8495d6ef67fdaa999e9f636f901ff81fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05787c7d1a2fc021850cfc428230797e0fca4f30579146ef6fb78dbf07955e27aa02603abb7e1659b40bb8ae045be6448d66e3592d28c8b9da92ea17776d3545129f901ff81fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a045c6bb5e0a5c1b8386df6b0ce60473f6a1e428df176dc7bbe0cdcec847325b48a039d2c96e7331382aec1e7ca17a5ed2e9bbf1fef5d1bfc7829e495e9f8ec5778ff901ff81fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e066a73a61e7e728872227639a64bb367254c6fb3f8bdf62b5a25667e1d1fa02a02c6a2e02de449a3ce39a3e43a694b71dcacc2455bd2bd0752385704811650ce4f901ff81fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08fdb702be8e8b12539ce9e06a92bd9fd225b37ef2c464a884840e0defdb38acaa0515afed1094093a7b8cd7b6a8d9cb87e4a2366ac8200735bc7fcd86421601233f901ff81fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eda1bf368991ccdea7bc126a11b1145af752469ee1efbc98b7a38a25500c400fa00936b57d5abd82a4fe2ed6c71dabe4280dc15e7ef3ca2beeaeadbc5d3bd7f798f901ff81ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a057184227d4d62113c168fdb2e31be53d8dde682bca4d02bfaee085487e3cdcd2a0115d2bb91ac9991ea4549012a941057de43f053fd1b4ae04fd03e65aa1b1a9c6f9020082010007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a067c026fbd3e0e690b2367e547994f4e8b8a865e6aba216a67ccaa80290cace92a0088a3e47143aa0ca8bcfd805464f64ddb30f38d62e5d9997f6bfef20155eee58f9020082010107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cb5bca3ec8a19dc452ef1b4a971b5a57b51bfc78ca80581a353a4547567d1000a02a9efc2a2e7f722a40139e4500479d6de50a9ab823a0f1d3c1824ddac632315bf9020082010207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01bf17085dac3227681594a95233cba0840e34606d570429bf506d9c4869537c0a073bbe95d1f048f7c791c5a0ab7962933f6d75f8125fa0606e0202c52dd82a833f9020082010307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a7bacaeb123b5756e1e60570bfc6d0b55a846632750a6ae3179d35c00744cd77a0768323fbc648a5230430fa8391e985adec9955ee46f5ccb34b98a88ade46d56af9020082010407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fee8132511097616d214a23a008c1a4272f7b2cd6765b0dfa69e5ae97dd64b95a06d718f433a80ca3249f76e31d3bce93c7a29584c0664f3468ecd40f2f32c08e4f9020082010507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05164d2eee3404cf84b890dbb17603332f161ebdb96fbf024938b1cb8b9fb72f3a071bfa35bd0802e01391411798da6b3fb7275c4799257033514572f1fcf5c9f1cf9020082010607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03e645d8e68916029982ee3159cdf389e6676f68ad2c4a3ae4318908b77b4ed91a07ab91128c0b4044d5ccef4683581e8162843b1eb9ba68ceda335534af5c16c99f9020082010707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a097fcd4a22abf0560aa6f313cced49e859a05cf0d15140ee331e5314277070fbda072420180b0821d57750236ca3d1ad78b32ef94b5e767f096572fe8d1a979162df9020082010807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a064597563517bd05c15a684aa016c1fd5c92626b6cce4d6b00f9a4033b6029be6a004fb256cce0c9fe1623dbddcde84c413fc0733760fb9778cac64262ea658740df9020082010907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b2cac9efb488c77600fd7f7f2ae058014801972170775f7add5afa215d86d126a067781c71870699ae0317e7c755214a84f04bf6490a3daa067cba325592e93210f9020082010a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00bf4a168cc3374de7b577a60b3558ab5e787f1d249672fa8675d7a100cf4d840a04da4ab787cb1aa2478455e3926a9c0d81adb70913e3910f141dc557a130a73d5f9020082010b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a003991116c5cc7c76c9f4a1b9b71cf16af67e74cb4a896085a23bb1381e4af88ca0673eb6ebaa9328058a425afce260d5a89eb4e9012eeab1f8048551c130e7c0bdf9020082010c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04ca81e7b817f6ef8378ca1cc10bdcf56513e3a2b7f666f507ecd285f135be368a01a3797e28b7300782da6a6e0c435047ecd2528c58ef4cddab595f06ec71074e2f9020082010d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a082b7a58f424f679a8594dac3347d0a86c4d0c4c30a805cfe1abae90888f9e0b5a025478085e350627df88fe73723cedd5ee99e8711c3da513777bf1578556817b3f9020082010e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d6829668c63f165d6f37818e242940e028b3b2ad1ed8c8cff7ce010d9795599fa028e25dd44489fb77ee6edc6e9820f6bfeb48cfb216f850225caa410e46edad82f9020082010f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0805a31feb9ced4784da02b6088568be222a4217f036da76e935b3e726ea9b8f4a05f2de180ad531159584a576d547ac2c32d0fc7df35b26430641f78b0cfe707f3f9020082011007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c3f4c397b2761461f3fdb28f7b7110b9397c260ef0dd9eaf42fe5b38727aadcca04238cb809269f6dce499f136b69e5db2e542f33a49c5c5d8f32bae12f3434440f9020082011107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07e0b318b8947b3eb33594fdc953449fdead85a705d3e9b430b59c2a206358ba1a0288490d99b12a36908756d177a2f6d5adb612af3aa3c0e5ca3017a67d134e9eef9020082011207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e51a798d58145e00e732a4d493e7851d668b45a67fb6e2e5e7c8053ae8758305a0280e146bb1b636fbd1131865af815d8d99eefc8ba90a4e440c5c73fbaaa476fcf9020082011307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c66059c9835598551b3d8cd60f7b55a55ccab280010af637b39ea4ae535dd301a00e7562f9a2f3eee70a0b55276a0c8c04faf959941073deaf1ca80e0a80e8615ef9020082011407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00d8d98bcbdd39e3299256c84d3b4915d1e41774536603301ba0ba913ed62fd73a046dcfbd76294c3a65ba484fe4b866ee3e855bbf805da8a0cd86b8decec04bf16f9020082011507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a045177bb85fe5dcc46e088e44a6fc3c9755096257d7ab4c64fbca5c5a818e1387a028b2d52a5d92a418cc35dafe2e0d0f98e063b270e6a12dcb75034768e57a8e48f9020082011607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0319770588c1982f1dcf64ed2a13268504ad41601da6d63cf6bc6b5efc188f625a009fd49a1d0ccee1be9ccf43f625f612e88ae6f2217b2d76b50ac55fcc8c5030bf9020082011707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044a7c934520ee6b9c3ff6b0b7fdd31ee61b088137fff90320af4f400ca21749da0466da0ece39f6fbc335e8bd64d62aa1ae0e78c1f72dc2864a26cd77316c82c97f9020082011807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c65fd8511538f0caf51993234815d62faf21f695a2881705f233f9dc52aa481a060b4a403c64b5d6d7c3b00163bdbbc72bb7a0c9a2e4e80198b86fa54a96c22a7f9020082011907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08ed32800f903b3378539d5fd9554866dd2486e2f711fbd2cac64125850186fd2a00e652857f4ce69a24ebd537d25c41495a288c728218f6b1e5a51689b1ebec1a5f9020082011a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a097a0236cf4734221e9ce24031d5a2837b7f3849ab92e7f0a46ab158f940c8c6ca02e95f529e090eb1306f8cdc738cbc95ff4bcf9635dbc27cb4d0f2f95407bfd5ff9020082011b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07aa224a6b3a2c8df8d212562c6b26eb081e6604e3f6eb164306af38a69579de0a05133defb87d1633ff4813452c3bbcd6fa7e2a481be1f057a4586a1ec707576e1f9020082011c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d85a652c3193e37efe893c63eb8498a905ea7174734443c6596c7e61258b9e4ea04157b4d13f5adc75fafe62b27cf02cf720b30b27c0de9e34dea0d8c144c21024f9020082011d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0806a4ebf08e6b138044f0cadefa06b451b7da7716c22f1992c0087f8ee24bdb6a0411cc5ca160d2c10d751c3225eca398c9ded6afba8bbfca4a1613fd42d294937f9020082011e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09a92f3c3a1bc878d9a38d21ebc1b86b55d4dfa06c34b951e07b106f0ed37d789a031516ddb7362c7daf85d71849f23589ff81818a700f5af94b0ba1882340c6f44f9020082011f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0176929242b9b873a5f75064c14267b0873cb838254c6c374a7b9feaec38421d1a043c093add86e7984e7f56ad07f507d81ea71f3a9d02bf3a438b406f9e56d5444f9020082012007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a084615e20c753ec008314bf94af0eb09165944c50efc8a961d620cbeddbd16c4fa043249217e26bb41f74d9b83d212ca3a9460a335dc572e7bedab8338e228b630cf9020082012107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d4ce5b6319d6595968524dca6eed69985eb1df8f877d672a0f7371d67c9f846fa02d7a5c5db3fcd51d6153504af4d0baac3609112cefdb02fadc69e0a5ab5cad11f9020082012207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bb3ee55a8254f77a95399dbb92833d2b9ae285bac1134dea65e27955cd042c60a00b34ef451e502a619f902be50259b7b65caa9b84a688bf9c80fe40c70c3707b2f9020082012307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a065e8ff087230a2494771a736b090d3cde65ba876a84351bbb72125fb5274bf0ca06b29d750ef7307769527e4dcec5c079f672a1fa1042ad71f359b80abf89c9235f9020082012407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0798194f44825902beef18aba0142d69db9d52e585f7d12124cd161d801a03cd5a074041a6f31420f8b1c2c0721fcc74e2b8923014a44eba0a7ffffc23838af22c6f9020082012507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00d90ad0afd4163f5190dcec00bfb3224f6d20ad5085f225906cf04319dc05c39a0211fa48e5ef188f15a71ea5e2b926db9627e93154af5c72f47be2e80024ecccef9020082012607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03b844d9526e97be780306874c8138a3cf8811b3a3eefa97f5b45ed1578dd0f00a01a61b3920a44afdf88f996a2f03a633ce792ef14848d2351b068ee29e8a06d8af9020082012707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bfc4a77b7b4b89bd775fddbcd9a262034d541a3a91b722b20af2a1955a506221a033bff1a51ed6b3f36c0222160695fef83220ab49789fbe54db53ebf80cff93c4f9020082012807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b2eb401b2e7a756ab9ace428346e3b2c3a6c34f6b89ee68600a171a1c2998804a07f2b68d01611f1863aac323b5594d8ceb11f5f6471ddeaaff488da60beea8620f9020082012907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a018adce731efaaaee4ce0a274d857510b53d34ca21bbca238328131f694910115a0379c40e5dc8011deb1007f26593a9e0f637946c262ad660a473ab0088e71afb8f9020082012a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0743c60f65197f182718c15d20dfe9f750e5168d05cae76e9d66520fa0ca8510fa052be4af852ec5694a68799aa3e6871a6644cee02b8a17789098e658adf2936f4f9020082012b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02e5b09be3cb383f5e6dc083a41ba18fdecaf877fe57da56abed55816bdd1429aa0216188955f59e5e1923fc7547b8c44cffe725a112cd1471f7f11246f82badbb3f9020082012c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a061c6754255131027bc90fef6cc63a332d43225fe0ba4eed89a0463c860f8c2d2a03c02cf812052e5c55d9b1b0ea78037bcc96d21e767cf8c3fe7ec83dcd287c4faf9020082012d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d92e741b16aec6e3876427078360200134fe2b1488415c5bf74b9e58fa43c5b1a06dd2d08560ce5ba32d5509c899ed53a125c638de3a67c91dca3d3ba8d6d20726f9020082012e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04a63d348a4cee7edcfe7f90f613e12eec254b7921ebe7c5585457ab2c04b645aa06d7ae67e22db02f9e8a671994cb11a1555131079bd902d69c4e8951ac789cc2ff9020082012f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a024a3416d3a9cf2b8eff283bf1ad741fffbd0f47c8ea5040d793b4ef7723a03e6a055572962c9eafed269fe9ffbe7f43efdd4dc5e2b7ab71fa55027e6f2a51440c7f9020082013007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01e724b4b2f062f6030aa624706efb412547a48f8ae1c5f8533a820bd179850e2a0790fd22de982c04b7ea7b4cc102a29190c26fe5630489068d0437becd7d35c2bf9020082013107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0404a91fc6749b2ddb6b02879f041986ce0a04700ab151310704c8ac768595853a03db68ab058d75b32bc69aec84923a681e6813d3b624141cb2d0e9e7b5988a561f9020082013207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0210052f0e29e62ade71bd41944d7ed5db6bbc4884b3a3b8d7b11e4b5b2015462a053bf812633d5230b228bc1b5f4cba27554d0f5d537d34c73d5585ec2b886ca05f9020082013307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06c0ed46102fd3b40aa475ef45af4e1d53f2c4e08fac2a0b97d50d34456b3adbca041d31d142d6b2c3ecce16a10d7a659f2dc5824514b94113a01b5ff2fbf31e05ef9020082013407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a080987011bd04c7f94a21d6cbb965aa3df4ced5cf89aa5639625cfb385b3fae14a05f9e0a54c85700e134f2b190801b8d8e817dc5aafb6ce12ad10b14f768c12097f9020082013507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a008ba8b960fad5dae297a34edd2620987ccf74a6566f3b4d6bbf9dd255d35ece1a01f89e259027a1577bd373407697d6526ab6fbbd8e514d63b484e29fe1a9715dbf9020082013607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b6ca8cd4a562b48d12022f3c7f3d82d818846de414bccccc65f468e11cfc729da07d9693fcdf1d5507f208c3c12a317171e58566f9273d11fdfa5459435488c602f9020082013707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09677b77a8ba15f56638b075fc883930c53bfff5e295424b65a051f0179ce4782a00c5a1a009a4f927138ac6757872ba850f134cbe8cc9921d5d4e37251884cb1dcf9020082013807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0579b30905718c2882736772a9807da4cf5d7083681a2ba9569011f2c6248ee81a062b10255640b5a72310ec26a80c86d05c7de06f63f69200700c099da7889e9abf9020082013907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0663cb3d459be66b7e94f9228cdc8a90fd577ee62429da54244a510d860a9e5b6a02cad6b0847eb5206f1360615a3bde14fd2695fa616d6a26a8c88d21f2f7ddeddf9020082013a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05184ab850fe3413a45a6b2d5c734261bf5b51b6572051c5615e60caa25df9625a015838d21fa4b2ee49f81e2eb4330325e374eacae503a9887d638278d90d9b92af9020082013b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0722b4b5fd421bf5add2820cf3aeb1ebc4c44378658647ffaa56fff78cc666085a0229861665a043dc7e3acda736fef57372101fb4ee2f8fbb0db211d5bd74b6496f9020082013c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d93462a33b920a52346a292825b68f6ee3c9a9a8f76e7507873761c6ee9e9398a052b08e5c484c11567abbeedee2082483eedb5c3f89a900a5ff408252676e92d0f9020082013d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b1e492b10550c5634fc4d3293dbced33a778379c3524ceacf8fd6f2d873d0bbaa06c14bc8b0bd033bfac7b348e79dc3627fad52d562c049446d623081d1fa413f8f9020082013e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06736916805ce2daa098c8476c820cda0b194c054a00f8ef43e0349cd022af124a027b58a084f0e3dd9f0b2f82d0c8449a5772f26cec4848d14813d27d7748fa2fff9020082013f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03365405c19710fc70050c862ef9c192553734294c08b9141765b78c3f24a3bdfa05b2c7791bf192744f46cad44cbb1012cfa3de85a3d73e4abe18ec3d6104d74a1f9020082014007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01964692083e3a418cf70322c39f2b36d2ef534859581d34538e0426fc5116c7da00f43d3d2d69a2e9330508d89f39e830ae9c54637aafa7e461ce777da745fe1fff9020082014107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f0f31b1b7e576ebcb03e611fdbe87819bd54ff71da21ba18f390727390a4f1da0083627b44237c6a46fe1179ea570203721de9a42dc2d76a90b2427bfe8c1bc45f9020082014207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0038546b4756909df0bb93c5f24145c52839123a117d5d3859729775042b1c37ea019a70636f3b9c95fcd0633f2e8edf9849ef4b5cfc2327e5b7172c577fecdd5f1f9020082014307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ef974df5d42f514ae5603d1c9e96de467cc0108cc7ce339e016cb099758eb581a0502d77d1185b56957f0dbfdb7d43573ba89ca8ffbf388f6ffd2c5aa20e08e9bff9020082014407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b973136c192d55967e4f58e7c196fd4e2a584a8edecfe6eed37147115bb40656a0615b7eae8273886ed33195c132b594494b1a88a4aa92354305321b8464b56f6ef9020082014507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c53959a8361f368fbc9c8bbdb6f2876c180092ad4d19b2b74f834bdbb711c2d4a07072c34db8885149e7d8e11e2b2ac8c78a672e9c66553c91e58b31744254861ff9020082014607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a028843eaaf8ff461139d298af83e2f163f508ce7da95fc566ddfff53bcb76564da06a726d2529678adfbaffe24191f15f40fc0ecb0100332cb9067d7d0c1e089a0bf9020082014707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0941018b5c302955e5bc539497e08d0c9d9aa53fffa9177263cb7e11048d256b3a0744a6e3c9b116f6d6b20c678e2f65118627f7698081371072437e7fa9a340f96f9020082014807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02f5bce14891fbedbc34d1132affa4f717c88c90d0d8013f414bc07d70b307846a03a70f36f407ba2686d9bb033088d7c64e6605fa17bc527f3ecbec9fb8688b39cf9020082014907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0be96b478474a8e00ca54284c077838e3ce558108fba5d8dcbb9fdf483c216670a017040675cee703d9fa64248e5b4378c45366339b2abbc99170fac58e2bc0235cf9020082014a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cdaea9e14b6695b9d1fff44faf01da692cf097637df322c0e54d2a27325c0e9ea00c19a9d79ce92bd17da7015247cd3f5f9cc9c578f03a66ba9e745460e78c01c3f9020082014b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04d71b9e8e09ce9132f58dc4e115c26fbe9e2917ab3e3b736a9cd896a968b2145a066b5ccaa70e9643c6a0b596a7fd094420d1bb164ad32194dc6e44333060f78e0f9020082014c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07a50d44ebc68bf463f85bcc08dd1e96c33dc1e090743771c9bf93ccbecc8d4bfa0484e745f715f4ba51d649c852fca92149037678427ea87f73506cdb5d9c63feef9020082014d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a067fbba13a37fc21981bc51690bd287fcd1853769ca0b04fd4f3b8a6f19808c87a079e094d556bf175153eb16fcbf9cc96ec3901491f16ab1fb5df0f207a88b0fc2f9020082014e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07fcccae44be940daa99653e0be7b256c74f5628f0dc7fb9dd299dc3edcf86b8ba03e61c39041fa8d3d7370da62512d3913bb1ca5a67a61624857b17e94a1bf21f2f9020082014f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05c675e6c8103991cf086d60e3bea925fffc68a3f84f8b7c40a797ed3ae96b991a07d2aa04543f111cb88b80f2825424ec891a23ba1ee22b555e7e3e8b426008751f9020082015007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb17a76a8362d083cb5538b5cda5b2552afe6c83b041a5f5ce69886d91ba920da060dd9870efeeb76416545e87dce7f35ae8bc5ff060f671d75b60ed19c0b993abf9020082015107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aebe3c67ee8da8d113b4ab67c7fd572b32ece055c70039df9bbf9f761e65df06a07aa97bba9dd0a2a742cf82a302be8a269edcabd08cbdb3b1b29557ee1dc0eb1cf9020082015207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c698eab6f7ccacc3877d8a73abf56f5f4d2a13b95295fdf1be7d2faa5fc7cc92a07a49853d8810327a166e7a38b18b39930097e1bacd94fe400c296573b159fa35f9020082015307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ed3d5463f4f361daeccbe18c63c45cd6bd89b02462df9bf38d94d99d05652ceaa02e71320eb49fd180eb43833a5a13019945f4a1ff87ed7163c1e2eaa82117b31cf9020082015407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cd9dea02738b8d40f309070875498780b7f7770d50b3bed9d43e64c7f69c065ca03d7b563c8e59c50844ed839e231e164b0aeee545f1929f11cfa674dfa7198e23f9020082015507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb7ff87688ff19784bbc7d2139b1f51130d05d3b3c503b01f917e4de45f763dda032d0d7c436b6ff2ecac91983bfcee3421a3dbf0405a9ff11ad2692ae1e5894f3f9020082015607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01fac7f38f22fd39f8148c1ee3b8ad37e7cac8ba4e3a839a5d7d166c96a9fe6bda046a900300007fb9759b01c5103bc731e9b1d47cd6d29bd4085d22690ad3f8b8ff9020082015707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09547537284386ea20ab137d52330be7136953b56ea650c3f2983fe0d2987bb58a01b5cd06ad8605515f42d7af572500bffa7b4fa7d513fcd7461c38b9655dcb1c4f9020082015807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cfba2cf294fefa61a2ae5aeaa8c0410a9de1842539a5efdfb7d2b12b2fc45891a030ff2d77179162cd10f583bf79cc79a2a4d767538e82f990d7a597665b4c486ef9020082015907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a0a2b9e8bfd79bfc5165a4777250fc305bf3ba8a9041cce6940348b9d53f4af6a047e148ba7e7ab247c86a5ef1bf6e4252f6ebf9b8904fc1031320f1f97441288af9020082015a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06be60e5081e635abe27b699dd113fe85ce221c6ba86eb3ab7c3dab357897cfcca00dcdf3bb8020371a16ea00d39860a400a1188340c22260dd990bb57a04f8f3eef9020082015b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09c2152ec973575bd850e2ffceaf8569f066c0ad910829796747ea3c5e69badbfa030ce4d1d12ff57b7abfbecbef78204203b1fcabcedecab32e8ab074da6ee4516f9020082015c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02cccc906d7aef4f6040d0437cae8de7a24d4ce3720d313a30f2193e334f91a00a077e626006cf1ff9bb20d4d0eb8942432ffa1ad111c91deb87ced1845efaba851f9020082015d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e9ab8ade860a5b110c97b22bff384b24c4078cbb512ec533d975eec10b057e49a0199f6b9041958202bbb0557962cfe2b12b317112bc21c58f6a487d3428f65c19f9020082015e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08115fdd06340262b942d372ba8de61839c9b691b92ea058c1358aad240b9c4cba0466fb313e668e9a75a4300694c236cf3b24f4d4c28a6c75366ce7d19bbbd7446f9020082015f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06ca0106e4c5805c0a2f755745714350c665ba40d3002a47494c1a5c363f8f64ca07805fe347c294821362c16e3d1d4dc71736fe542a8c651d996267b2a843734b4f9020082016007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e1cd7b3bd0bf6f1fb323c81c2c6406baece022ac1e815a41ca9038ebbe56c531a06c86e999de5aaf549d515351955f8c0a3116c2a87eca52e9aede98ccdf39477ff9020082016107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01eb709d4cacd7f27b5869e503679f94a0ee04dd9a932cae5bf821332eef4c740a0692f51062d4651ac495f203c668f6573bc525b853fa2ffbe0982c6f0a336915af9020082016207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0227f106348f83959dab2be4a53d97e19193b50ceaa61023cd37bc66050e898b1a041c2ae87967b7f034e0bf5e5d84ef27776cb0d0d587a6fe59380a90b634203b6f9020082016307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b8c9f23d91fef4ed913f90da7f7ec56e008cb1197c746da10aa63335f7cedd7ea0796a47e30fea0e02d1203e1c7d28daa93906f47fbfcb01b1d2f77a91af50f7baf9020082016407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a81fe4d49555e2f417015b6793a6db4b86ffeb580f25b2b29fcdad7413d38db7a0068eeb51fc3b15253313e0be21ed440365178ea838df616546b29882dd9715a7f9020082016507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d2ef532e9f290c16eb08f897ae9b9a14ab66584b625d8781387274838a2b14c5a0513f1d3fc007e31e7d0b70be7e468136da23ea3d0e02fe1d64f26cb297e4131af9020082016607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0664ba96bdd42d38e0ada0e639d9747d33668fa038ba1903591b7aec46527dca3a02d2b1df796a6704cc898ffa4d4235e241afa5d9095883a1856fc14044def7c67f9020082016707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01dd55232e0cdfa97d71d879e1164b891582c34f73e57ac81b93d3ec75ffb6e66a06eb4a70efc1b441c09e821254e66480340894d3eaf0c0dea417ad73e3d079567f9020082016807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a062d8132052f2143209147471aed3ef1dd1c3d0d5647b7bf03c8709f738b16e80a06e30e197c5d2a3f105f2718b1032fb49c028ee96d3efc949941e5819a39eebdbf9020082016907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e61025f5dc5051a9b64003e44e2ffa1a25086abae74193430720a2b1ce8184d2a076ab34c9757923f1b98f4b45a0be0bf7766e204c08fcc0d8a5e2ca7d4a570131f9020082016a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02695c8827322cccacc630ba73ad261db5fb9bd471904fb1760d243c4677ee7f8a04fd5b007722321c832fc4974d942c63441242fa4a6260fa544fade8dd57ed992f9020082016b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e0f86f2a4192f77d4e080fb48bd8fba69f65057414513b175db29afe39080c8ca036af1084a72a5dc522d65f2130930671b7d8c7181ac6b3f6290e63be43a2956cf9020082016c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f26b8e17d8d58c2895e2618b4c0bd241e9bfa7a2be82d690b51a5243f164d41da07ca94ff1ec67f476442c7dc2a7b44610eeea724e85fb5e2752d933f5f9ec06a9f9020082016d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dbe64371c0b9099400d887aaaf0f8bc3314198df73016bf9f0044f1e25aa049ea0135d9a2eed7466a849d9f4204e07488a37646cd146335bb5965f363803017d5af9020082016e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ac24345299315a91149b3d52c0cd3c0b963de5e01d6598c8a75f8a1deefaba44a076cc25537aa68c7a04b3d6f0a4f9c39086634666544f89443134792079ac7e03f9020082016f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb5497a9f608154aaab5999066558bbc99ae72f54b775155fe8d2b64f52f753da046ac745bb69cdea882b3c1787a48a799624550bf2fb24f89bfa5daced689814ff9020082017007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e9bc79e121d4c270b22a4480f6b32a0bbd970c246881f60a17b6b984b164e51da0640a55d0b1de60db78f1a600c768a83f21c3934714d5ace9a17c46eb7656788ff9020082017107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a044b96fd3d9d6fd723b8d419b86f74259c465cd08d82649c98a7bf9c315b07c80a047637e739b6bffeaa4f8845df5ba39849514621d3ed4bb89ad9f8b61a9a7d973f9020082017207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04b29ba5d5c39466fa774b76dffb822a9542718e57a2b68ee21243f0c958a0dc1a0495766fe8982b855f99a0a99793f995c741f226e1ce3934589d330eaea97944bf9020082017307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a023d1b3e13bcbe81aacdd7580772ec2e1b97b63dfb83c234d2164e44f479437a0a05d15ada878686e7041a5faaa350a7c97be9f65885b735f241e8b4d5fd3a868dff9020082017407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f081b613e4c4baca569b72902515354e7dbc46c2ec3d18d26fa039f8eb301b48a0214da576c2ab0072c800f507cb4a3adff83c2dc39064e58faec2639c9796079ef9020082017507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02baf609f9273b4b712a23864f9e9d8e9494d99f64efd64b2e54abd40bae7ddb7a04230ce99c05cb1148eb7ef4c326068311c51ce80e4e4f58f4890dc46ef9b45bff9020082017607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07aea3574c4a9fa09381dcea3e6585a725858275396b321885c579e96e9f91af1a06e45fd6517efb0919b08c1c820af4b40e115dd1d9d8f3e740c1fce383d473606f901ff82017707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003269f2acaf22450af15ecd1cc69945a93605ddabd7e935767e2f5b7a15e045f5635a0755be7b3a8da9b692bdda6cb2e891306f849f34bd706e79cf2a536bf7c005e98f9020082017807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02e3b19c669902968f732febbf1c4366b52acb6778023eda6380c982b854a8735a027d2552c85fa57fea74811573fe6d2e5020fe5a2d0955f67cba84e2677709d49f9020082017907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0078f770012afdcc7c0dab1615a96d64fa74341976cc485a8c5bbac653df01807a0787393653f1f6aba56ce2cd9c96d8f16f13ef4c212e0bba17c74b8572a89105ff9020082017a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7634839f4a3d7a17a5297df3184b5cf9c0ef3d77fca480ea38e42783c0a1a36a06a89a31553d961a4e5c92d283afeb048ebdd3376ebbcdf316c7b6f8277994c9ff9020082017b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00e60cbd5e8d759856d7dec0bcba479144237a223cf3db3c8d80da27d53b37bf4a00f6cb9a97983824635ef7aa02b4c3d686df12b1e2dc585a3f21d64c17f9de02af9020082017c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00470f467d0d2027054702a9851c6e119cd6f714dcab82f654ebfb285419f3d83a0166c19233334e596cddd3b6baf00dd45837c6896d1b529580ae1c327d3d70b8cf9020082017d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06ef2a52a964e160e0d8777bf772c3c7863287a25bfecfa1bba4901bd2039eee0a0489e6693ccf1dd6aea520494ed29077ba454d8826a07b6b8e7103b42d30c994bf9020082017e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a090ae58fbcc8f7305acc925fb413c7b9c9f9495106b5cebbb9d05370e280556a6a07dd655f52a0823c5c835c3e7f32cec32bd0ccb94b27fec433cc6ed465299cd6ef9020082017f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02bcbdc6bb393ec2d7b816c904cfc2a7119748414e688b0c01a3680a5f9284e1fa02c621158a5b1a62a6fecf6cead4100ff65cd04cd2388ee1ac1682da1bb104737f9020082018007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04c8d5b2e64f6900e114b5062d4c1481d583a3a5078a7fa800d29c25f11a1fcb4a04e5f71c0b25c39a1d5e6a6f42f4fe9e13fdca87a0308589a6a6d6a246e6ff26df9020082018107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a052da37a96872569daee542d729d4fb72664d1ba21c56c7e761590500f2da1058a07131c78999b43a8708d6337c7bcd3bb52f0e9ac40a3d8da1393d18a686c6bb83f9020082018207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06aaafb11761bf74a538e2414e013b492e6068e71fb6f5013e0f8420fba0943baa02ac1a25d14b0608534f3290d4e912724bb4dde3ef9987eaa689b65200a4c1728f9020082018307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ff0bc25d7aa59a201f2b6e1db5f6c5e7060bbd39a88cc0eba6b528dca0b50178a07bc1db008b69283b0b8b517415f5470d114da1db65f00e8c63929c193381703bf9020082018407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d2635b21e2e1693c549a0d74c979cda0cdddd6642a765aa8c6c29ef734493170a00ec89ae1e2f32cb3c9e2d377bc870b1fe3139135350e25c74ae2268ef16c342bf9020082018507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00a3dc75eaf041c2ea40588b1cd2822a133f97d276888e3905f903e6de920355fa0374460d50877c1ca5abe2abc72ca8882e9d5f273dd2b0091db3ad8813f4971ebf9020082018607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01a3c8d1dfccf60a638506bf636f7dc63c81586088ea0f82ce202b0e4aa505b46a01550acdc061f1f0d9efd5fec91cbe567a23aed67d9aead98713f3307aa2e9b13f9020082018707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07d5e3257affb334a0f29edc4be16c581ffa4c6eccaf2fcd91a98d4fd2b3b97f2a03f640a1f62e646824f5a928ad6a3b1bd45d8044aa045375aa15f05bf4cd21811f9020082018807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0210a33af9f9505450a5ee0fbc4e298f766868d12d62beb108648b6f5cab76045a01950d4937959407e94084a73431af393537a5aab005ea531e406850ed2b05591f9020082018907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0402d5aeddb5b892b67bd1b3698babc8ce3b670211d137aefbbd56a29218ef6b1a05f9287c0ef0b2249b8acdedf5c513bae917af1bedb16360909dccb31c63d1c17f9020082018a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03083549a416f4af0237ab241bca18a62368b4e7ba12bf78968b022549e25b328a075fe76d299c67d84bcfaae568999c338a7423b2a7c339b8c18042f6c04428c11f9020082018b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0922c4f2c61ed4dfbded6cf3b7332bc48487f94b01be80a6493c476a1990ddca4a0432c513c7d75e8a1a0e729ee99d6dfb1ff2b6719e16ec4a364546456e1876129f9020082018c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07b3507f082a37c6314c70aa7e32d3f96f4536ac728265075650954859e61c30ea047ff0e956ebe36008ffcd1cb78e647cc1a7567354f408e2c8d792c95c8babdbaf9020082018d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06e0024cc3aece13e45d7b16ef6dac66770fcd3aea41e3949cfb7beeac4c3600da0164e25d7afcdfc2be6d8f7ee9ed4762f0e3f0dfbf310aa8c8a4370338619560cf9020082018e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e6f976c3e4659f6ba76f6468e21f12779e6bb3e45cd3c7322a8ead23ffd672eda04a3c5ec6fdbdcd7d5aafa965184d67eb88200a60f2d174e98c66c7512cd34baaf9020082018f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02b84f7aaba039031c580af65f251188fc86b92721449ec22797a12a8773704b5a036fbb18c75aba9b014f7ae82743c19eae64c8573a041f68a8d04f6f5d012dbebf9020082019007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07b6634cdfc7f90c7bf96abe281cf18bdd92fc18abb358b77f331a4b59cd36364a06b3e302369932add1bb278e47ba91b5c84b0185e78693cd8e2ff426722ed4a44f9020082019107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05d00b750e5f57636854bacd99ed2dc248150f692a6e6482b673a1baa636caf72a0604aa8cbdea9c4f107c9e6953e67aca9c682bd988fc0170467db80bd6bfe610bf9020082019207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb553d316eced3e2ad5f2024c5962ef94dce62fa57513471bb9ba5cb6b905b83a04139ab8014597d9003059252ddc82f83bd766b4e977866ed05f538472b60ca8af9020082019307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a034187edfd78b4609480d84874b6bb8b63747ef159217fbd7d78c89fb5cb31d16a049e70fa6cd395e20ec4db2957fb487d3b7faf40bb84235219e894de602484778f9020082019407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e12a6a335cb7f15613767a9bbf82f6c0a8962ac114631cb363ddc138828258b6a051c37cab995dca6fdadbb5a7ae5016ffb52eaefbf51008d043c8dfa6a9dd9b83f9020082019507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a084d093735515350bdca3ed2a2b84c6eeca9f7d1d68248ec2be60f24cb8e7a105a034c83e7eb9419bd6a1739f9a8e00b0b9ccc7cb65c347915390c315827fa61b63f9020082019607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e43ad6e94ca60a9eabb3a6472fc14c08f38bd720d811d13bb6bf7ee4c7ca3f6aa04d235a473c019a21f8d9464b2d5040461e51259bad5fe5a28faff3e411744112f9020082019707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dbd1f1eaa92a6f162928d701da5b36d7d0e0548c2f636538d7149f6cfe8226b4a04ae2c0cbea1eda9b3a3a107fdce500692e0dc062ac84e8382e64d72c7ac9f8c7f9020082019807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04bf2dc20a258d2a85a42ad4432d44695c97d69880d967b947801398d22252cc7a063ed2aadcc8c0de939ba35ca0e428f5deb1edbc8417b31ac872fc21c6feb69bff9020082019907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ab31a5141a31d6347dfba8f5e3e5c74b166f795703b11202f68a730745d3d800a042b98950dcb1576f106ad2665b5b530fe9765d05baa216a73385c676b944a39df9020082019a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a051a508186f1d6ff9ed31457fe1500d2ae4dfed401f86e8866b168d8cd89a3b32a01e0f2217191899a9cbf0a142209fa4e3de2ed87955b09d94a3fa009848c1d886f9020082019b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d49ff29cc8d9e602fcc419c707d5d678e72797942b45c47b7a5b51ccb2a72e1aa073690ee90ee46f65590e06b7676cc86a14c11a237a27fcf5bc2eb3c1a38f53a2f9020082019c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01bade0d043fd0c7b761a1d644679716d90883d7dc046c277bebec52e0ffb37bda018e1d8b79d80aff9ae6face3c4d96c46821de6cdc090e6e430d701019b2f51c8f9020082019d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e6a4c51449393b3e043ca6276a15021d58d25d52ddacd3a473d561f6e1776b30a0785fbcf71aa14dc980c44c2b5a643ac8dfcc28e399680b7b517d7ce17b528ab3f9020082019e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08c8fc66a443dcc6c9af145b29cff1a04aa37c5b56d6eacc67d00471776434a21a031b0c8bfb93961d15385df58af67c2928d3e91e83079dc6dca9ef8c436afdec6f9020082019f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0733dccdacf26362321278866149d48a1ecdb331b81717063022ed70abcd73059a02b0e1d4c89e656ad3e74de60a5521aa4340c4f31dcc888fd20209e1d26c03cfff902008201a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03db81b07f1668f953510255f4e51ba666666e371eb5171932b49d3f482dbd8aea03cfaea803167fb8a952715da4e9d71982706d41fa2b3ef6eb4cb9af62ec926d8f902008201a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01eafde7221c64499d4c1dd60222ddc6e0b809a8d4a8e3704d8504546b9b7335da06211a8fad1ab1b0521e74e0713edb42927d5a5fa7f20295c8934cb986977391cf902008201a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02850983f99ed11e1bd4df47cefcb57a31c83a53c5daff78949bf738326c2528ca03bcc64526cbc456332fe5621bfc08b34ce65b88e531c6581c882966630a65a13f902008201a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a073e8d2f734dfd6ac7496039a98f07c1f8fe63290bf27e546be8e82b3ec975858a00de771231eea87e8768c9d7dedef710cb31b38bd40ce18449d202124d98ffa98f901ff8201a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00741697f3062f035d5be9ae72c6a66ddad843e466c29f15295f3ac269c17d8eb9f90b34e65e1ea429b174c2a94f908dc79120749917a67dbe29849e534bcd40df902008201a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0534008ef8f910f0a6c1575d98ef3627913b05db329c0af3bce0f134c89f35722a076adbb6ad475f5c3954289f0109d4a595cefe564b06ad707005b40c590b52f48f902008201a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a059d24233a6c6801c1b62cb038fa28321aa8bf3408b79ab0990be637089d63881a0072089d1e3c7ee0e0556052eb3f2e913c579e0241d5aa1086037569e276e3f06f902008201a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a030a58375d24e6708b31138a71a5017f3e3d872725b9a79863b48c72f822534d0a03e66a030b48fb7c5e6e73c29d04b3bbb3d4adedf8561e6faf3c559e21ef91c8ef902008201a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d2c75a35660cf40b303cb7bd9f5bb3a19e3addc3717b8dba45739a3710c7770da01a2611db4a68174168a321cd33124123e035b28166e8f04805e9d07b4d117c21f901ff8201a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a061bc175be6159bcfed6afe5ceb306c254d9ad816ca0b81cc052c29a321661d8a9f0257175a60b96947322b88db9db884c4e1eea64a27ddb40bce4fb5dd981864f902008201aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b65accb83ea5721c954b68678378d520d572da529d895e95ef4923a5215e51bda04e879174f9879ef67a9d757a44b33a1b399315ac0c4761a6f2433c90958218f1f902008201ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0432f2f41d513a78f942cb81c54064a0596d6eece90ba1fac6b228c8fa4c51637a074e74baff0a5840c78ee848632e37a438f4b6f8a7c1e2c42dabea7d8ad2c6f62f902008201ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b869e8b4d8b70b479437fce9ab72205ed0685a3c8faa81f88aa86092837e71f5a07a018d3c2a35a367ec96b0ac5abb58301c9fd8ae53babe1ad1bc3a4178c9a0faf902008201ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a065beb7e567a0af87f706181207ca4b942c5ddc2f1ecfd6cdc86c3c395e5e7ccfa032403fd2982c43444e2a8c4b81c0849dfad044dce831327e50336f563a62db09f902008201ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffa086a2a72b0781ffee37b5b61084070c0bf9f08da770eaf8773fa874edf121a0724629e50a7c67a771a72d4e3a866298af194a8fd8af3ea814a73eb85ebf2d7af902008201af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c8ddf9b5431f7ceb410773d51e1315b8b587bf6eb9f561413da48dc94b30dec0a01fe1cbefd8d62bb6d9c90a44f24e5864070f47e8d62bbb9cf3fbfb0b753a0396f902008201b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ff2c33e8aefc276fb12d8b2e333184ea10cb4ecfe0425f9a0f27286d205d4df7a06e9cb5a34ba3941faef8fb28bd355ac7531c5631f2d355c086f78b897373e878f902008201b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05f446fc98c2d866eca082ac7562fe2aa299284b7240aa1d26be5fbc9eb46aec7a0777d7913c07d38b889640796fabd2c6fe5232c7230688d7b3e2f369774363f7ff902008201b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c4c1b18dcc18626ef003e8f8a09e89c9c3a865938513a9b052772b5012e8aecda0363830efe697a959816670720d086f7b877656fc5d51ce315c69d5c304272e71f902008201b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ff947ca6a3d946013869cd8817d7f7a93d7950257576b01d58ca12458ba94103a05ef5307ff511812b48cc6347f67ba7288c64a63be5ae60872ba3ab5137896dd1f902008201b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae6f3f3ab5c67904e86348c6dcf6d54b8d74198334cc60b0e93932b0f60fc541a009c51a848387fee3fabf85928d5ea1c1672027f0fddba01ec507ee3b681d5f04f902008201b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f5c523bb44c7c9b2a16018e4068339262af4ab62cf40d808722f581c6d137d47a0470c7942ae1c24514d915eb470a778e6988964c14ce2a76209e32aa6e3694466f902008201b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a008fcfcdc8989a1c1d15067a6441899021b9ff37a9f4035e96f43e4208418ccb4a01f45043873b387f7b3677b0f41cdc9039cb8bdc69611f67a46d426f4c8c03ebaf902008201b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a007b7a67038246f6a24c1f1e9661c535f0a556be17af39c3b0feadbefbdd944caa0279ef06dc0c92dc404d2d4448f5e8bb9e1d083db203a3b2e647ab29f32d57707f902008201b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01f64ca2e312ed6d9aea702a093ec8307ee41604cd0efd865da988b832bb7fedca0586a0aeb730d38c8d2dce7d576ca376c4695c9a65c237f436a29a4fed4a9d705f902008201b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d5be24030f0c8ed5ca4bba22b6c73ef19cf1b3cee4d93619f132f062da57ebcfa012b45ffc3f4a73e45f9bdeafc8b404524fa3289e7f9edd3486a73e971f90e3dcf902008201ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04ce37999fb9da7de9968a34221458513d3ea8f558daecd68dac2eb2be90506bda022fd0c2acacd345090864f50ae81d2bfe99bb003def1478a4e2c4d058961d033f902008201bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f47dfe440a0d9933c2d9efb2d9baec974e4188a149de44ea8b996bc601c1845ca05a2f733e82f988610acd1fbf28cc9b29842c1d363f8958193febe34ecd1a561bf902008201bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0abcf172e2a4f34de759705d11b039c83eb506e6e3fe4e20b34eb76c26352ea58a002d39ed7bf92ddff7bd5f916c5ff490e10ce7722e18a6f7e4b10ad619cf2ea51f902008201bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7409570e30aa7158869a08e1baf9ed3ef93b376e38f3ffd5052bb842c54edd5a0776da8d05e33596e5e160bb75d312d5d4f412a6be485ce327400e58b778cb7b1f902008201be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05160f4fc77fbdddd740c3a338fee9b99a3ebe70382015402b1101b1abf00c973a037479852f6d973749bd6134cdb93ba0b2863be784331c2f5821511159d63bd6df902008201bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a026b28761c51b2a37847b0a48d76a5dc184f4056cfb33d02cec724a343c9c6c91a006031753adf0748c9e9b008ce3fc4cf397bbb321f8150035d0c22fc24c8a181cf902008201c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a012eff96f6d27bc3b157775a4c2a5d5155309b608738a4a584f67bd97a8440788a06d8e5a1e1b1eac9955445bd31c7d1c611d27be840391309bb516ad41a99761c3f902008201c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00d4245f14cf14c1bc74f0d52fccbcd3fa082c69a73dce33057413530250c9325a00fa36fdbcd6e768bc62d06923c664322481b3adcc88bf3a93d8fcfb0d73cbeecf902008201c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a022da7926fbf9f3e1f5be79790517379bfd2605269ea8c980ef9d707a5b730252a036f029520ff03da4578355975b7d13c924d79379ccda5fd644b95036acadb6cbf902008201c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d1b113b81a443daa1198ff00089f790cdffc62dcf13e15a75e74bc67bc3e3cbda05fdbe09347b26af3efbcdbc0b813d1925fba04efbe08d68f3d5a88a827eb3072f902008201c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07c669aef279b4087f9ea942235c419bad40a831a985f443104996fbaf80db890a07a8169b5a5e69be7c0c46bc71b41e0cfaa7e305cf8b3f19f945385bfc0cd8818f902008201c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a007fd7c904da9a3061363eca5e2bf3272d3780349d66069dcc9c80460c4b3ce94a05734aada5260f8463fc792315268eddd818d38ae29b297265515d1eca73b72a1f902008201c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08ff26ec254c9ccab24605bc55cf9fb297ce8959affd6096060a8645881e9b078a053c3b0cc1af24bf36d786057863fc9e2a11e088411f867bcdcdd141e64d958a3f902008201c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fea2a5c5e100ee0ee6c6363d6e5c4abb57892a29ccb715a4dd89e51f73c93d35a05cf893964abcad356f7833a078bc6e3503f892d592c01681d316ae6cf0e8363df902008201c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eac212f8fcf1011bb0b6ad6e52d63d967a84eb12d8f2b3062b7bc2fa8abdb9b4a05e81ce74390bb574dd31407e611d74ad93f039731dc704903584e0e5c123bf63f902008201c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08e327ae515e3ed258782f279fbe198272b9e00493b60e885c4584b50881f89cda02f2409e38d93f95b7af4a0cd777732b3d17232769b218fc21199b57edc8d759bf902008201ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d079029492ccb4cd5526438200c05c339cb48073ff70d9169a1642a5ba0b9b2a076732b16f4260157ba78f2c8ba8d0095163ceed575313364053ebe6e69be3962f902008201cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e6f6fc772e7738833828c8d6cdc2b18191f315a3642c7ac68f0eb9ef1d0d84d5a006c4c1158622f7d9b75f1bafb786631c79c3ae60494a0459d508b200b6e9c169f902008201cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04e95defbfbfea6457bfb3da316147d07fb95484a43c7ac7161b8d2aff0bcb3dca00321c30c0660b9f404b2cfdfa40e638e15c50b12a330bb4e19e7d6054afa211bf902008201cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0089c9ee88edcd973836f50e7c857ce3cb830a8dd50a1dcf59ba6f97349611dd7a07b9a2d7f9509679ebbd3e90d8498b7659c490c8ab757484ad089e3d0e1d8f4c0f902008201ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04a6fab5073772d872ce9c6cfbfd13e27d4114888a525c5352298add3e1f544eca02abab7ba90b26d0a7db3cc3dc499abccb575e60105724bf6b09b6ef47b951395f902008201cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04f878850164f78caff9a449d91bb3767e45812930852c820a0489962a8baed7da05b083d332215603de89125ef5fe76cd22910fabafde5db1dc5a65233bdd157a1f902008201d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09a16ee482501c470c250a14a1624e02c54777758b063b3c203d8da6eb23ecaa3a079ec17ccc988eacbeb5d5337821f4d4b997ec755f0bc7a55fb685cf5bb6cc458f902008201d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a073e1dfdf3fd076a3f5c8a4e65fbd2fa59b97e503c4f0ebca2d4101d2bf84490fa025c598d5eb8af6c06829003c22229dbcaaf9b13d90ac4928c040707ebb895852f902008201d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0931abe2ecff45d782fad4193681ec759ea11594a76aaa81360ddd58e64f13032a05715275cf6ed81d1ac6e105e4c84fc7f0c0e29959f531b6ff22bd4a11c156cf5f902008201d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f65f700895b2f92f4b8d19129aa098b00c99164b1daa4ac66749e4cddde0a40aa0593d0275a11e8f709b1b70d5f9dfe3bc5107868ba105052ea7c544eacf645bd3f902008201d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ea62afc19e8656bfa322c7731d8c0d5b1aa1a7cb86979bc22eccd4726f882c60a04e124ba7e3e72f10d18fae5adef04eca5ecdaed8369a79d34786b39660e046acf902008201d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f17a885382aab95865db4c4e0c0df60aaec6a98ce4ea3dcf180105f8c3e21f0ca05f60331dfbdfbdb2303a33964a58b059fcadab09808ba3f1e0bc0878176fa616f902008201d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08f9e7e0863895b94df5a8710595c8469d001f118b5b1e5b1c3facf2bc9b49daca01ba9edf52f6d97fc7564e2685a15377f1169d17f5b772046cd30ac12de405cfef902008201d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a4a47631da7c70a872f0c71536fc4acf8401af877fea4a9d865699e6f4af4423a061b17d30f4ad4211fcec428b3cc4c9bcdea168bee0e3f8d964b67a89f081ae37f902008201d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0408417736d29618c65dc5c9c999a6d1ff3071947ee9ebc43d0f3b721d55b2f56a006e20e9392bd70d8051da8c0b5cc897a4126d9a6b3a49542890fbd78e2880ed0f902008201d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a080156783afd34c36166f1fc7b6dfd530bca86f7756c0e3e25cc9cde247cd1fada04736fabf4ac2c71b3e6915b904ba383d936700b3d5709da91a9235f80feed4baf902008201da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01a7b98f591b21134477bbc29a808c6786f25e191f3b655c571e456f1b795fcdca02efb194d65e24f1e5124c42c5d6f0575073f53324707b012c7986fb1cc8c861df902008201db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09bc633cdb8986412b168b7722df87e83eee0186aeccdbccf4d9c72139e37b343a073b426dc34dc8cbd85dc4f242d2adf0a4112a50389a6395ff481f16789315c09f902008201dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01bac0546b410159a0a8cb7b3c8e3cd8e27d0af285ac379c0ab67200574cc12bba0283993633af3aa401d5557aa71ff9f5c750bee2df4ae41a4c7c51f3a015c1745f902008201dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0387240ce850b7908792af98d27d101f7e6dc76bc896bc21a6c47807f1ccb7576a0527f245d0af2e85b9e55bebba81e885c95e1f4352570a71a9e5b33f52013bdeff902008201de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02cb7a14aebb81bae713a8d255ec64e228e19783e976e7052198fb6e338bb430aa02b367e5bf49514ba4e28f2220762edbae2ae4708d0a0e3eaacb0954ae098d166f902008201df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d5ed3057e1feb3746f3d7cd1f701f3a17794552733c01297b3bf38a55c17d48ca01ecae3fa77a8c7f201445aec5613de847cb1de26789f4881ec88cde4e3f5a5bcf902008201e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a007741af779f452129e6ba89723b59dbfbc6e2f914c88b17816e5333be218dbfaa06bf7f39ddf05f1040ffeb6e51c548b73a858c8e3036433aa4e718f8e7f925724f902008201e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06782550d5b3b50b2581bfe88aee4a87cc0c79c8be09a0d8e9f9b82096286e433a038458e3558d2dbf579082fee4a752dc7303f5e62b51f886ca7be3fbc746e0bdaf902008201e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a7a05a30ba10171210f783ac640e7494daaf09188c0a902540206d689b7195c6a05889b36980e0c29c57e1df2bec5ea0db1ad756fc291769a4afc9b9945f571f71f902008201e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09f1456fb2459fb978a672b8ada02acc64f9c3110a1397667a8783c8ce0ef87c4a01852f192c9c804fedbb24b2348dcc12d0397a4adce5087c5c57c156ab620db85f902008201e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e315165cde1198716ab4a0633a1d1d7b1c90d4be2b20442c5a7c2ccfbb473bf6a076e60658c7edde0e3112742aeca589622f5814cbc3975e51a7559fe1c0e7a5def902008201e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0656c9e1c8622a2779ff5138b3b9f43d16fc63b503da6b5f75ee327c7655abb28a0312cf985ed295f0bbe6f6bea42a81fd55cb9391fc7a94b041a67f99ae8acdee5f902008201e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07752988a62b3b79b24011f252fbadf5c0b176f13aa8bde50ee71ee8354b4794aa032d5004e00c6a2278e55df7d805d541f1de78ab5ca354ae9488de990128cf77ef902008201e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ab0a4266fd18d9af1f3608afae1629fb23146aaf5a5c6b89e06d3a6769702698a0668ad580e9148ba80ffa13d8a1ffac90c23600483361bf215b54c9164f4e28c9f902008201e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b2ce8101292f68d0f1bd582f78a8cd8e0d2639c0ae4c7326b90cf8058951a5c2a02b3179c5fd0141991ee63dfcea2ec57103537d68f0f2b744cbb2840a0194cfc6f902008201e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a040ef88ea5230c2defb5617ba034bbc09c65604ce2df28e2dc2851858e4344db2a046dee52994e7ffc22ad1be938b531e3be1e8f36d4a88c62b3b14abff6bb8d567f902008201ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0878572ff0ab073a59956e9bcd8bb3c4673d532595be4151f7e97978c157c1918a0567603e36639733921b0b5d742a2ada3aafc8b5d6263ddf50f22d6bc2f36c83df902008201eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09b627f0e1f8b0cd1fdbf4058a2bdad78e0c8f88beb8bfb84c3f593c33ccb80a2a056773c64577a4724fb5c6d1c3a1ce9941365aef6f297a851ccc4e2b3921c3124f902008201ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a080307beb0a52c1f26c6af25c0c40998c959c3fa3a017cbd2d60682410000d3b4a04cd142ad3fd4de5adf4d6748fe34366a4ec53ebd043b257c7303b8adadfc9824f902008201ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07f61c9a1db3527a152c5e05c219a185d3dbcf823b707871969f4098ee20ccf2ca042048d7fa46c9e75bf017994e1ab0eff26e546770c7b8fc0dbff784c948b6093f902008201ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03c80256c71dac9bedf87b7e21fd655a6505221b5774e24b2ea9bb05b6f4aef46a007c0ca4a87c364a0da0401bf0343870358713fb10dcb91a67ba0fa176944d685f902008201ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09476c40d1acc0a6fd2cd29f31583ecfdbdba9cc38ab575cfb8fdcc031e15de88a01445d81f005aa1a8625ca56d11cde819ec50e1ffdd8125d1df1f0bf888db7735f902008201f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09f05e0d962a501cf88b4be361c03cdfa11908a9cdf023919769bc54f0c2bd5ada0621c4d632d79b5ca8cc2cf66ed108c2b721eda00ef4312edec4d21714d89b4def902008201f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0403779ddbe4c20a875389643c53c9ae765fa278d755d18d1b23fad43c1c95c3ba00656fdf66401b4e489febf7ef6c0bf1f437f04ebe48eb5e92171deebe0329c9ff902008201f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0651cc8ef3e8cd38ef35221372e132c01f489033112f42ba7b87ed94329996cb3a06889900d7891ca9d11582cc9bf5d035f5560fdb4e2d7b86ef0b644835683016cf902008201f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c409f64350ea425ece225ddf5f1f971faa767e2abe5c4206f691a538ed1fcbe3a05e23e3a6f0bf07ec7391fa5f6160a25a22569178014a73dc8979f09a412d2e5cf902008201f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0843736747cfa175817b752908488cb94ae55caf95808b0ad8df17fa72ee47ccca01e09b2783cfd1561d693320c5357c3f6028efc4556838ebd2d61c63ba39d733ff902008201f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a063de63ed85eff68f61007b77e201f193193626d05333a90fa8bd1d1e82af69fda01e7753ee7dd6e358b7b1e86e324c2d049127c6430b687ddc5f440158e99f7ccff902008201f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0960e87c545a07ddc9f7d42f546b79a530d2aef05cf77c40f16a9c46e965e3457a07daa59c34832beb5fd3be19fbf7abc1dbc0e91228bf6e01cab8bf905e5d63109f902008201f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a067a5bd42ce71e6dec5203dc8b2fb61dbbdc4592ea5d1563505ae8be3c2727eafa05ada67c90e19152de520e1d8a17777bedb1f5554776dcdea7bbc05b11c690986f902008201f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a068a52cd2f858432c718ff6dd81abcff42c350964f7d9ce286eb0dd9c3d4f414ca027b116fd4951689fdb8e8c3edbb60c8ae47f091f3694f672defb4de746eb8f26f902008201f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09c3501acda3aee84707a53d909e9d23c87796cd5fa746cd1d74fdd9bbb7b3261a030c608a5cd91e832e62bdc08d991dbdb7a7a496400137cff5963f42eae0d5c6ff902008201fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a029570c47df2f6a97da24b03f2baaf4e4397717e74a7efe3c0a9282b54f6637e2a067f3cc63d3d3c2af28b27c80ddf3b3b83488ca758907b55be11f97ffde792e88f902008201fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0745f86346c73470c73a6b8b97f605b5f1c98484f737f67ef7153e9cde1d23476a00d7a8334456c68b83d436fd1b7aa479fac08a8767275be059908682ca0575393f902008201fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09714ad60a27091cd58e12379c326e95de593ef60a7952c7937902270c66a15b3a003e004ea5585909cbb9f1e5271d07cd596fd8f8936557010e2a3f60930a801b1f902008201fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07dbef83eaf6a6441c000305e6c121ade88d429c3689d4064e3623cd412bca185a075adc0c42fa2f04e8de3c76d4d4fbb1ea916a3630308911aeaa6983f077d9141f902008201fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a053d4fa8b6f4867dd979fe0601061bebe105838d568a77948e37291d843643a58a02797c769137ac67abb1d0c2212c5d9614a5b02e462139d771a825181777e6419f902008201ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a001a16a08c7034ae3906eb19c641ebfed7c505837e312fc2449eeb08c13670d03a06fcc5e2db346c27802f245bd5d64f02be3d5fb61fece0a218702abb20d2184cff9020082020007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04c712968fd0d73beabc3540556a5a817f8caf61201b6a0a8fadb4bd745144437a021201c71ad1fe4162de4d84502aa58473aac7f4ff7073b2e69ccb71489bed057f9020082020107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ad4ccca0d7ad0c8799de7fe093479290dc7004577d23d7da290a2af0df8da339a05f39dabf48f416a3b1981b9398838a26a4d2d1e9adfc9152bb856c311e7d0748f9020082020207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03c4dd198567bac32556c530260060dc29a2a5e72fe3396bc00016460d30e71eda0220ad27075e5438cf1f697d1231de8e780680b0210696abe9fc1212eaaa701b4f9020082020307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00b809e8717f94e9a25d271f88fe2872fc23deee420b0055e10f7fce21b2894c8a00c1b8e17e0ae36ff64b65793ddbcbf3a858adc34dfa45aa60f2e9655109d2501f9020082020407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0579768bd9c1be2a5028699f089193fa90bba0b1c63ee1430dd57a5f5ae2e5574a0685f3e8e9201a927bec769cc430804ca180468321f4fcc73cb35e16ae0d5233df9020082020507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd2adcfefe6c71e8d279e7743219f889a2355a0f49a31e5636988740fccf7cbba01951dc67a2133cb5e6b60d96577f2ea1af8037c64bc4bb254e6a43d6e3cce0ddf9020082020607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a052ce49321eb6432a713ac2521f6092dc6ea42a651ae1efabb8f7eaa7e9db174fa0481200197d4cc485384af6dd703764ae21af0ae11e23b04c9e870f0ffb2f811df9020082020707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02dcd3bc05efe6f5dc7e9aa1c45a0890b612b9ffa914d2ac8664313022f3a331ea04fe9f1833100f88cfd791a89d402ffb355aeb1b9e255629e693d8bbae8ba4136f9020082020807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a020dcd7c43eb82193ecc63c8f74e522502440a13624050931b1e1c36389b0ccc5a07c697abf6560cf35eb139292fccaeb8cca0ae8f33a840ef7b11510a340fcbaa0f9020082020907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0db1f69d43cda1649371436012dad6e111808a0ddf0d610ea652ab824ef0f019ba07f047f09e3635644d86797ffa31fe5c8a8dbd952da8c0c30b1fb8decb69857d0f9020082020a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a022e80c634ee709edac7bcbf4063883771fb7e8627b6fe0e6601f318489f5037ea0032c31c542edf9247170a2ccba0d46383c83135705eceff6575c1095661104fff9020082020b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a095e33cb23d0499aa32c32e18b42763ddd54eae9acea78100c5c187558387e47ba0418acb63b1b7710dbf561af5214a3368b4b00bd3c6fdf0532385bf138941524ff9020082020c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bbd79605b3fbc951874de7b948ef47e7b1cdfaf0bf412de760c29b028ad38f7ea02ea4e0e1105b208e07e1b9e610a244b9dbaae689e1017eba438811c8c317a9b1f9020082020d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f05539ea7bdaa8ae393ad051f6bd53896f2126559079c1747ad67cea7f8a575aa06e6209d40ccfbcff9405c9a41b0d6e8707249d7680ec0895dc5beb3cd6defa06f9020082020e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a0e815d53811a82d2d4ca9bd5a77919bb1c7732fd2e94ffe35e9ba8497c7b35aa020b949b37705ee223f112f3e9d8df8ae83cd327102ab8c8d5584728795f55a10f9020082020f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a8ea06905372418bb739ecc7f8aad4ec497f5e6bf6f8652871a5cb0d0d7bad6fa00ade044d241250f4a68a02e5b840eb639def87ecaa21eedb7a06a52eeae30870f9020082021007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a035016f882b0006aacdcb6ca89bd3ecd53c44404128b598e13ed4478da5b06b12a078084b4db9f3eaa09ee934fdb7bc857798b8b85a7f22c81ce940f2472d85f97ff9020082021107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d2b3c66221fb37d05f1acdaec1edb4ea2d842da7d6c976ee7bcce43d2b142a9da01b6207cada71964661c67d385d3c5ee923aa94f02f74f847545df68dd1fff91af9020082021207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0921c6e58324f9a254ebada1cbc0b78f2298aeef5b64ee6c5d335fa351415b19ca065b17129527f997d445187e300e12dc9f863c6846ee70f1a6695c56d2abb5fe7f9020082021307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0efe4f57cb483face4a7c47e673c0d4b4e1f3b9178fb196075f64db339c4f04f6a07be279f3a39be0f1341d5358ae23712030a86c991196c0365e21637e8bae9e7ff9020082021407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a030aff1fffc65282d38e9735f3741a952337ac932f59623339e59d48c228b674aa010e8c6c902ea85273cf1f75843171cba5ad24082e60169f851a00b3bda439a1ef9020082021507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08859733ad102dabe865d44df2505bf1f19d456882d2a27d61d9764fbfdab7e3aa05772fda185d59ff4c5b57f2a9a1506b21a442ced21cdae6b9d91cc691afd71cff9020082021607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a026dbec41d6851dff16c47b2b25e7b68febc6a6532faabd2c5f43e20a73d94bbea07b15afe16750cc5323a24dd8cb0ca9f8ea3f9f2092c2322102542d1bdaae5a15f9020082021707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0129129f541b783872a67159ae90e1e7bd74dde573b054477fa8365cdb6e18e9aa06247d9d254ef17a1d6c4cde4e025cc2aaaaeb76b2c4cb89505e2a195868a53aff9020082021807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0530ed192fdaed4a6be000a57cb427c3fb84f361cc171a041369ce3ddbcbc8ef3a056cdba5901fd012b35b5fe6b2e2ceeaae927834ec639d9f5910af835cb80b309f9020082021907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a095c5055c45b3beaed815f520d71e64157822f98f050b0644a105d940f0206f02a022cb53e2e4b711fee54e0985f41dafe04ca7a6a415979c57c8cd3e402b32ef7cf9020082021a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03db59da6a30bade5634d418936cb2f64458fca5a8df019aca8ac7b085b03539fa019044e7ad17355aa8c20bc53e0c6d87fb8ce14eafcf2aacf2794856925862815f9020082021b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08ac54273a15c9d6892ed661e0896c105f55f84475dde74cf6abc36db3b2b08f2a05d94f4fda7866b9f0b63356e7816dcb15b79d09d8e96e7f311ce788eb3f1217ef9020082021c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d776562e5afecabefb4ff3b346ebbaf1f6b7cafa4503cc71fea42e4047fad71da046a0c5d57ca7e8356c8520d670d967b55533ab4442c5146e198f8b3f7a586b28f9020082021d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ad76ffc4c0d126da6c733f1c56d7a0666a6b95bf0c6c7348bc6f1a2caa46302fa03b1541b5d09cd8164eb4fea196285c9d247416e2a60bd7bbebc73decc8da0933f9020082021e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c843acc66ec76594ed4c3b7f3d8f43f24f760522566d962f8a9d96a7a7e2f4c7a01a9459b683983097f834909c8213bbf47bdc0975dd0e7c962d36aefdf4147e0af9020082021f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09c90a5f5cf61bae6a80a041a317eff85ea0ce8ffdae47dd28078face09e558cfa0263f96a4eae67f901582cdb5e74015300c23b6fe8e036234dc5b0c129cc46715f9020082022007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a7db5a0084fc56ad22c4cc34e7e474737d37603c678dafd8bbd6e797175bef2fa05536b92089b4c1601c4d8d9e986b61e9b002f79c6a5bcf74d7be4f040f500b01f901ff82022107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0482f5f942bb24e1a90471bee7dd550b1b5b3e7ef3aac3de6603bf082db5c34ed9f342026170229ef588ce4de9050d06d57206e21b50722462f419b570718a3dff9020082022207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a025261e1e0172c086cb1eee49ee97ce9fb5af64a5038e98dd07099d3f59e93209a03215aae832ebce135c3c724c091efc60186f7ac106c1ab41dfe9473eefec1ad5f9020082022307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e14a7bd174ecf8e536e5f85cec1cc778765752dd6e7a34f387045a5c8008bd4ba0055b48c4f83e4370b0f5825f42607fc700238bce66eb9d06255aec7b6e9b65acf9020082022407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a014949db823ab22b1cc000df12c035b0ee7336260266dfc04a13b3e2a482d5e76a0670b4cc2ed08aff61d9229093a481dd1eb9bd0f74e18d3d5823b135c4318b607f9020082022507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02ca2549cd98f75860b9fe15529b9216a72166a7f6c9d1e4ca3ae29d4fa75f746a0245e197ab1e76bb0d4365d5bfc738c46561332a440229cd35b672acbcb3e9008f9020082022607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dee0a17890490282a8aa5f7507cbdbe4d702a0a4786fae871158235e2a5c26bea07ab6e7a5aba582c84ecb51bfe31e5ae2e5aa24f55cdd7898d6330e144b686260f9020082022707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a025798513fea402e3a4d01261e708b75920c483edbaf108849f30b0d4c3eb08baa01d2fb00fe3cff1d5c5eefe1129541faa1070d086f6b049047c74657500ffe495f9020082022807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0399e7eb2679c471b3b6af0896d9e919383186a7a3108d9ac6715f1a1aaedca72a00a5525a58347e7b0093519a7661ca94f3a3f785a5775d18f6955fb7c2facc736f9020082022907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07fb1fec09e9e171bd7dc879b8b46ab529994fe175e6a135baeb8ca5d01101394a059ecd18a7c246f3897c1837f16a7aba97f8664e93eee1ef5cc907fbbf3005bc7f9020082022a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a079dedbc77bdebc2ee87126be716f3478dc187ac5fc7bbea7db6702bea916d0f4a070f4db16f64ee951f459268979738a5ad79a714aadf88f2470d6e3591d9c6577f9020082022b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d6385d54e452aff056f0aaa3b801788d15ee27c61ee2e06686dfaac16c59dfaa034eca52dbae8216088bc07fae6d64ecda8ee96c8510247e76b57313a1dd0835df9020082022c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b8b12045184d551409cbf6d5f3f22a50c5245b885ab7dce8b31c0f0b62b9c65ba078af3a73b143a2a600a48db7918874a79093ba435c43b570864140dffd2d98c9f9020082022d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a408fb31756fbc7a48c193d8dabd094d3b55759ad8431d7383221d2cf4f987caa06697f96b43f4faa97e1c02dc23ec4400446de184e41064a7e2c9d678496ab10cf9020082022e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a050d878035bac49eba996d80148bff8eb48f52f2f656ce13628d0d615de017283a0588106522bbfb90cb9783058d1dcc16e6d673c2587ea439bfce9d1e45dadb70df9020082022f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c3b9d2625d2463a42a4ebb64190482a690f33f6343f44065a70703e6637d7544a04c56f90c975c35872d3f350624d4a9a9284fea15c50c52450777111b6f86f5fef9020082023007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a014f24982635959e43a06a1ac4d226826a60f84e460eebd150384e2817a088db2a062d85b8987da52a8f1b94da2f8c505be75ef52ec88b6d1b0801edf94786027ecf9020082023107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b3ef9a0b7a18323e08e2f94f444a8503c03cf9708e0ce89a69efc5b874291a2fa041a6bb9974fea5b124b4217f2bfc32e9e5b2d08f4b15e60b85d00d1d1074e2b6f9020082023207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09b4df6da0b87d099b47313e2aaf6f7027afded84b42abd76afe00b68bd3f37dfa034d977f61242aadc2048f157d4584a82b7b0761bfbdd905bbd96edb30a2e1d42f9020082023307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0701d02b18ca81f8ded3cbaa44ca33831906ac7559ab44bf7dd8412f8661f1339a02dfdb138f7a7715ce09f3154990534dd9ce17ae7d15138336e4d64448ffc34c2f9020082023407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a053f988af6de7a9afbd6970ada80eaf280c1c351ebcb7e2b6f7674101c536b568a067616a9b81f9358d2eecd82a766c98a264631ef8045dc997e17b140d0053c11df9020082023507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c4e6c52578d4957a3fa191ba32050c730a08d84df4329df04dcc4eb0cba4ede6a051e0e1c006a7c50b56b519b7c219da07381ed5eb33713a27b5329edf8e0aa966f9020082023607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0198fd2a29f70f3bde9d83c7b36ec8298af550a1d7ddb339c72b4923288181284a023d72eb69251e12de471fac1ee66a6621a566df936d303fafea46198407adb2df9020082023707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a051623093d591cce725792f08e976f7a5eabfd13a40f6df628b3424d374f8c3bea059b24236a7abeafa931800788bdaefef39eabe9b0c59f5712e6c70a32acd629ff901ff82023807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003269f081d07c216daa06c6a6e9c4ed12d7e03c49251f5e6fff9432a7648cab131f1a06f011e8f13b99e298c7eb2fd1df1b4812ecf2658013f51f8f9699dafe9720bdff9020082023907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cea589ed1c5f7547a4537d6ce363aaede1ee16412bd2f87b45a6bb3dce242716a0506b7a55c9eb8a811c43e5c2fd427da50f87b4c90bc26266336daace506a7a6bf9020082023a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fe75b06e480aff615d7738258b72f98fc7e28f8e2f13c4c8a8900869ab5242eda03ee55239cf68ea3a9b62daac50307fc3f45e3a233dbd8ae0da30e4edb85b7c01f9020082023b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06a46cd0bf6bdd224ca2b4fceb1af612c137672df8f197ea380b3492635b2a41ca0707aef193dafe55bdb6f54fc5d5e9b5f70b7db0b729304e2f93ae2e2880ea86af9020082023c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0afd6e8cf6784b31ce0d1b8e61f4adcc83c308eee2f34a738db0cc5cc2362ed4da04507e6b3300cfb4a84149512f6a4bfe9142169506521e6fbdc2095a35f1bca5ff9020082023d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cded5f16dde9f18d4cf07a189f7c95fcb7e44a6656f8516b17c98c1e9dfad597a07afb377b629de89d56d5d2b550e95f37efe267be000226ad100ab6bb728ce703f9020082023e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a005ab7b6c5d7ced4b0ab32039b2ac44d031e02afbc5c9df8bf138ec5729f11128a0032a53b49d5a52c59f82137e7a0a210dc59846f168671a9e5ce6f267ab8a48b2f9020082023f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a040999d56399835b4875a5201581a3958f6d341adcd147c000332766b90bcad00a06364742dcf9d3caa5624a2f2b49cd6e90d3c2ef099442e06d1f1b8bc09ef8e2ef9020082024007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a3ee2b94f16c4d2d0a84322b6121b0a77ea03fbd98f111d2076015a0754aa1e0a01f7dd5a5f11b78a6679e5d5949648b5c68c3daf5f6b18230cea4f231997a58def9020082024107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a034f4cf5c22c94f87424c0545b90c373ea2fad8dd08e8217ef4908b2fdfca079da02a20213a770748a6a6ca1cabda7d77fd018ffce408ffc160ac0150b7de700150f9020082024207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dc890fc31231f0ec57aee6472061d78248b9d84dba545a442a445c1626ce5dc4a040d582ca077a412138612a7c717500652332b27387f5e352eb2f9c69b971a4aaf9020082024307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ef248b4a2a6166456312a3e4294dcffc90a5fda830ae1026a1fc528395a746ba01d9b645445b86d447e8956e0fa33cc232f872c2290e62c7af29cfc684e08f2f4f9020082024407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cfc8bf2658e996045ae3ba4b9787ec1246cd1189953432d368b220dd75a2d0c1a019976f8d7ba43956f933fb4c19a4dbe61a5a7716feb909a6979c7a4c4b9276def9020082024507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b857332c472610bdce6f4b75f77ee9083534e9b49f339dcc11c55c5b6ae70e30a075dc421c3a8315f280c68380abed0966fd34c641526b49f34ec82764936c6e03f9020082024607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0637c2a0ae06934a733fccf6a22c64606d90dd5fd56003c0a32b362ccb1d863dca07788389227308264dd7c8081150de551c1ca4318248e6b49c958a05045ae7a0ff9020082024707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a002e2d2533c109d2986431d544006b2f9cb49d732eb6241d2f4c5915852a100a9a0092d31ba26113245c355e038c2afdd11597b8b981f2c87d994cf41be53d65dfff9020082024807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02b5ea26df2332f750bc86458e6c69a8f4937b0459fb226343d0ea54af23fb3cea0271b9ff945e187dc08ba3298fe53a91f4ee79f7778dc50689e721ad9251fe5a5f9020082024907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06d4b720c9139aba5fadf415157ba0b8f8707b1339301eae4d56906f3892f3294a03b7e5b451e0ebac619ac5558445996a8e31ef8702b1ada88a6c75d7dce48d882f9020082024a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0036326aff562171685d59fee804104cf491d510b792c5a25743953e82b491e72a07fe5ed89813db17702e7e44611ae2e1cf30ee5e512a166205bdc07df95238d5cf9020082024b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ec6fb2fbe35aff9574050693e9a0569dfe40c3b884896c107f1e65fc50ba1dda0149691d73831084a5de790282197f1f90702383156f829367cd01b33a1fb5418f9020082024c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00514eb0d58fb1496931e1a3068c34d52a34f15764165c6e66c1930c1e3c79a68a005b3359a430f639b94b11f370e42f1dbc9a93e21e738a935c4ad3e8aff720e45f9020082024d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a8077cd66c95413a27da58611086a9193f44c1aedaa513d2a4859895b40dfadca072e24743ee1d10ac472faf274d688f41e2e5795caf39f788b051a81863de5926f9020082024e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06d7099e8ed16dd59c528de5af37e9c4b9bb11d1ad76929d27d97aa09ea4c6be3a04b5402cc1e35592cd976df1a4e1799ce18bad45104acf6938d54fed68e5a4b53f9020082024f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04b2de8017b111adbef2850fd2eb60e84362cf44ed8b00ba9a2edb65172d19e73a060f500b15e6dc5103ce64fc719f1990b875171c0f4a708c5ab724ffda4284453f9020082025007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a032aff2da0dfef1fac485f40f18e72ece820c39b3a15a83bf5f37d6799b33fa35a00ae9831702063ce30dd90abd1bc85d19828e0a5476f9adfd6947d2b1c6f8a8eaf9020082025107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b0dd08012b480e8953be77aae6db9ba2645ba7473f46b092545abc9843f11aa0a03bd88d9d66abd35eb945f5652ae50f2ea9d1be637a73929b1d5eb157fb29d53bf9020082025207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0266dcd211a3e7af9d29659ddb88ba739d9a92ff1fd692d653fafa3b87cbc3d1da036f08ddf662d3949c7aa63b21ec41f08f31540fb67941c8cc4dcc83ed3820128f9020082025307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d48d7f610b540c25bda8753a1b2259c7abf2011ae7d67b36b66b9b2ce25a66e3a0688ba5228e1d1758883d7bc89af99bb726cb4e34e375909e4e3a339b9bf87d66f9020082025407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a040bb44db15b53cd849a80be0da896cb12ddda457e7fb7de22be59d7de968efa6a02913c32692a92ebde775252eb5c678bfc5a105248100a46726a7229d90702a08f9020082025507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f4a200e60e19261c28412e5b815ec8b2e0614e4efe49892b16ab38700573b050a04d0640556dbe2850bb9d1474d23f748973b678bbfb9774282ccee11c09a21252f9020082025607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a046042bf9f8e623a917d8c6cf6970f43074b17eac0f34b835c16714b3d061e275a073b05adc5c4e1bce54dd6ce3261eac7f7641dd94dbc689e1dbd8838dd173ab5df9020082025707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a013bdbc641d4271411d3e319394fa5293c0cb3a1a8248b149523cb388eb8ff31fa06ce925b3a7de132a4f639e4bfdd817a66462693b4fd540cd0f63b34d98e5971df9020082025807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048286fde3d43c13a40af84bdaff9773587922f8a75cbeeb9ed2b888a4c5525ada0185553553d1a9ca12b309ecac410af788ec5aaed220be8aee04fbae4b79416d1f9020082025907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b4e6a59c829fb68cf7128fa0488ee2251f5ed9fef2fdde856082010558261305a0590e87fce5723f5303690abed0b47f0ef55ed757e669156257336964558d4b06f9020082025a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb541b8eacef68be7ae979e7ea99223725d58965339ff60cfb6c2ad6cb5fed4ca07dd473bd0690fa425d8f8bed60d58f8db605c286eb8068748198ae56df3e8ad5f9020082025b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cbfa885c1ba3b04f06e9e3df56f528a8518e9e4424536e88f085eae4a8a46046a025893f9c690590fa0df9cf6c161ddcb4dfc24daac0d3f7196b7ab05931505e62f9020082025c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a043e22cca7759f399a18bcda9ba6e28b085aac422591530bcea3f13d48ccdc6b6a04cf31d47839b65c8372a3405e41fe7cb3de8226e205ad06d23719a0cf5181219f9020082025d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0075d01eec8bd179bba521986ad674f1b410f2eaf0ad59e4b68cd0880c9b17803a046c7116fceecc4b1783d5b3901d05fab00ea0014ba49cc85b96ad2b3b3af0dfff9020082025e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dc6a264f11fe085bd07a543d5ceaeafdd17652bdbab9530b5aa0981befc464a0a07293728f88a881b4e2a6ff0b94f7747e277d864410b05972ab97dc7b53d8e95af9020082025f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eee2bf43e998e5bd21b0131b44c2bf6fd54648969ea6979ccf1e9580ed3994daa07053de4906a5dd910273c3321e84d77a04facde63fd7c16d5634542423718278f9020082026007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0847b6f5a92f3464691dfe17983a1e5165e210c72767aa8021b5c9e0ffc3a8b07a0163e9f376d906b9db49e2f3f43d5975b7e0f1c9e2ce6d30a16c57512368546a4f9020082026107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cba0cd5b68414c29c71d785567e6ec7f4d2b006c691f2c7279f7c263c7f2db29a060fd91883a3903d5dbd4e9b9b113c3fbd89d99b9a59a8ab49f1d9e8709dde2a8f9020082026207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a19c0739d2e9ba0226c7674c3baf3e1164acac497fbb27491ac2c4be8fe9daa4a07d755182f1b179625aefa9df43566df168ecbb1b7cbc0ebd3a145878276946baf9020082026307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05ba26afbb599b4781d6cce34c1de60afcf8e4c8ce542355469a3ab50b83ed3aca02bc5bbe5f4913aaf83085005567afea14a7e79d887ab5577205dc6ff2747e1d5f9020082026407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05494ff8e5aefc8adc798c012b4948fcb6c24aee382cca9ef32d311201597a6ffa00b97ad7399ae46db835c122df6e6f660b333cb16318931018f48179f7265a69ef9020082026507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06a184e038374d0da312e0bb4fe03ad6b688970e551783388f8ac61bf6c81778ba0144a78902e0eac4e7eba11a1a8c8abfd92358741389ec0f9f83600d439eae653f9020082026607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b7e11cfcb24b2a1285b061b6f8ff90fb75a04a10d74f2915f58922f01baa0cc2a05642903bfa15ce6c7955c28cfbca823dd30415661647d6f34e87b63192acbebef9020082026707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a035b30b04a6432c57ac64aeaabc117bdf34c166a3aed2b6d69621728af611e711a00fb070edc532c6616eb31bd943af6bd74124d48c1690800f1173ebd676f656d3f9020082026807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a0a0f16741dd2fa8aae7708ee9b7ee9b53c6efd11c6498c232bad0210c887f1fa03e33c81d8873c3b36c4b66e987699bbbf07f25668e0a04967c6d64867b71d80bf9020082026907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a040533f3185e6a2f5482fa1bb08e8087ef6e07dc5d5804e5bee4dd25c998a332ea00c3e8378d174f4bfbf5196222d71b8cb4277e91c365a98d60f9cdb4c11fa5dfff9020082026a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0abcfe2b1afd585c429ab2287023ac5ee643f21d267a54cbebdd71164d8aa34d6a01b6bffd5fd5c17e0eb9e6160ca4dd2b8e9e082d1e6ad47d5381c24a072548ed8f9020082026b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f17add457d9d79ea9a294da4ccd6aefbdc9cd69d578473925dd652702f6c7650a0779dbe12d256836215c46db3fce8eea62917f296e4fa31711c4ad1a9a7bf64bbf9020082026c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a012d8e99628d370bfdc2d6aac0c55c5fbb50876976610f62ecc63c3abe3ddc2eca0405753bddb4bf7fc61bd7d58499a7b78c1dc52dc20699043bb5a44e7931b13a3f9020082026d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c78a37deb538ea264539d3128b7889224eb442f023196ee408a4710b9eb37426a04617a2f65e1711c88d3fc05dac225928b53772d72cc449fbce076d566e77448cf9020082026e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b9147aceb6b008e59957426b2754f9221a7a8d5065157ea445773f31026af877a048cc2c8e824a906e75bc2e35d612c06c1e1375cf96627aeb8b7611bf61c1ebbdf9020082026f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0457fa371cbc81bc41a42f33f39e0fc1b3f5fe2ab4811e8b77c103e21c52e42e7a01bb3a86519749b0e67b4b97454e9ce835f5e1330a29fb6bcf06937a1233141c0f9020082027007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0836515c53f7ade4e81c9c7e8f003c64b32d2ce65d231368494d10ba5d718c203a05bb6381a92a071962d1803827a00496336e1504206d83093f09f17be688d9d84f9020082027107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a060f4ace7d970e732790cbb07c04431d913dd28d76caac40be7527676f8bada4ca074a693e4fd1a2c1694b26908eb0256ff913315f0c9d435eb6269a693e8169d1ef9020082027207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a2f1ccd6cb4912e2b20a04ae123b2fc897c931abe63ee522b5e065a59cc1f9c9a0508ecf015dd66ca6f6dee817a80fb937271a2b84f6b9e6b2c074185a26ef1c6bf9020082027307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ac1f7e1b7afce10d7b7451baf40b34d44089a260747489c0ebfcfd5d41941d0ca03bb4adc0c8c687da1273af53207b2185a6cbe178a0f4811eac850fbfd591081bf9020082027407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d484c33c4425fe087fdb5671706528bf008fc72536c34cd1da13cec61edc3c3fa009de8b72f0a5da06d8f89e5cf26480cdb8bd56535fa09ebfd13e1acfc7302ec1f9020082027507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cd521606fc7388f2905a02d9d8f4881ede29658ca3d3b87d2ea75a2dbbe02028a0032525c1d6c9e0b7ca038dd816a9d503db9c54b573ae81499d9cf2b17f9875c2f9020082027607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dfffc0de08224fb1de7366a377b6bf6ff770eda5193904a15757f9e5d3a78ecfa0097eeb9888977f65a4a2e673e123844c6486072090ca16f33e370941885801d7f9020082027707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0df3fbc45457ff895cd0ab847f154c9459cf8bfbe48f3efa3fb18f4c8583ea217a01fbbe3a5b138b4654d6a77da453fb8f851e5feb3da9463e4edfbe9fca5403584f9020082027807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a030c90a2ea55b466cf3f4c91efa461d445190a2b55881572572773914a594555fa006f7f279fc54414d95e0479bc1cff769b67c2fb4c810d65a42b2fb427031ed94f9020082027907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a87d13a391893dac13cdba7fcb545e1dd899ddf3d9faad2abb53257ed589a1c4a0062a16ec0de8f40e72fc96859b3cb74543b27ef03804d4d80a4c57afe0228c40f9020082027a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a037915dc0583aa9d5b9f580bc75eaf877e632c8a908c31530d46679a8633354f3a00f61fc9cb41cfbbab5402d2faaac180b57fc1fcd7a3ece902d4041b5bf5c18c3f9020082027b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a038d8b2c171d8723862a05de486569e24d6365a4c1cfe7ad2dd9e7b9fdc447d56a057efa2dceb2256ea22f963361a7fc43a381d0552e41ab51ff7e3a405341275f9f9020082027c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e2b445b107c686d09cdbcd01bb16b8d9b1913a6c7ee33a086b8c0f9fe73b4bbfa077d337a88eee95386f2b1f8b087a8f320ceb2fc6a6789ad30cb183833e9a7d5af9020082027d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c3942f4ef4e801f4f95c3b816986836d71e98e71e281b66eeb483404ecc56e6da03b05bf49f633b2ca3f856877e33e31cdcc27d095b65b22ca4663579e9247ea06f9020082027e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07c2d611a0abfb9518bb198d9db7ef9be2d7d9cf98be52ca1347802c0d2e996aea037826c7c37d4f5087263bcc6a945c6b118b1926703c4899c8e528e164f8e7cfff9020082027f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0742683f5317524169368be5e995f35311448627ae80398e174c60c117230ae3ca06ecb6943549659baf22d08dfa5ee07bc8ef2719522c57ef78fc1ced22f05d2cbf9020082028007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09c0a4c01a8219409eb9e494f9aa5481f13326880a88b97ef8983c3bc239865e5a0039e59b7f7b23eb59191d008140fb07a7ae487b45f7754592afb08b7f836da95f9020082028107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a46a15fd6aaf09081c1b0a42c6dee9f9734d54e87054adb1e7daf68903e2d2b7a03318671bbb82fc0f674e831222e8af52687cbb7d0820860d6e3b6e2b82d0c6c4f9020082028207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0751ae0d91d299e6690a33eb07391c65371267af93c5c42729c0e0f4b490773baa02945e471a7723539ab8aa02f9964c7062deb75626aed56fd8d1d859bf0c5e0bdf9020082028307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0799f2b5b532d3ed7e4e80afbd7ba922cc547cb49007cf9d5a607d91636e8963ba04f389c07b1815ac2e9375820ce30e778dab4cec4cca5a21d4ee1ecd77d9b34a5f9020082028407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cab698ba7a009245ffc6b500fde17b9695a2759b2e935f68cc8481d5cd2801c3a037da1c448e0829dfc8339a5dff27b53be32054249e9e143db23dc4b2994f0d56f9020082028507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f2c684f632df07d60d563651713b50fe1284b2cadb5955999f27a904e1e44c76a03b9d303ab4142376dc8761c5a4b9b7f67c1986ee4337f10386a5167c06ee011ef9020082028607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f5fe7461870ee3c2133d10763a23d1cc55744d9e52ecf6962134beed7328719ea0361a52a788b5ad473be6516bb67ab0df86c8556e4d007802c279557b347bdf90f9020082028707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07915719c73872884374922c286efd6109f4210f9b860c91c440f9e0354c9accea07d5d33726b52b237d83d19f8447cbd298fe7472c795f0309417bd893c4596e51f9020082028807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fb9e1bd91188eb52f898bc80759b1ad67b9165839e387d50da8754a9970883b3a0542cfda7575ed79d0bb5c04b32218a334aeb32584096292c4242c5cd7485ddaef9020082028907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0088264b302493e5ad50f0a8407a5842a23647b7c0239bf5b8ec4b1666475e02da01029064d2c67437caa6dce3540863ed9e3c0beb75f6099b00e9031a99a624d53f9020082028a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06de7761fb19c7df8975f3befc3677b93fff2d16669aa0e92d023c7aa2d908ca1a0116f5ad2c4218731b5f60db1f1e457ff781765dadab1e620064444fff5963dd1f9020082028b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a029584ec499c83f7c380f4d42ab3c854fd882cb3e3dae5fee2eea005fea348f8da01e88e6e6c6b3335ead7a579f7c6074a490a304b6cde43bffc908c6ab43534d6bf9020082028c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08420061a8480b74895dd0649ff15214c6aafd6cf3f07a950ea0e05bd6085ce01a00aa8f33fe8bb64908f927e92acc8d386f4332aba9c57606895d4977c219e60b8f9020082028d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f537d169d62619a37ab04525b5f5e96c063aa71b3b24934ba29ffad41e23012ca01cee0da99e0a6dc39a862d7e331446367de8c36e4c43098d66b230b818f0f8ddf9020082028e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0453d3fff3972d366b6cd94bd14fdca3e233f8a8156d26474dcd9b22e256b1dd5a03fc2cce14d97331773f963e81b0f74a19ff7dbec055373e93e0c528c8eda1f98f9020082028f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04ddf6d1d76f2ac1841f944ef0a88f259067b6c67348c1b7743b419037f2bb836a0558c30f5a959d17afc7187b43c61b45f2e826b5f72b36e06bc3db91da817a2e2f9020082029007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0218495bec550a2b0ce615651039e7eab4200ae63b2dbd02f308e688ead163488a067470292730a807cb2b3b7b82b5288e135f2fdc6539e7738478aa8ff73cca0d6f9020082029107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0be93b7eda235e85166745f0d0c536b0176413832284ae33481baf713be8e6ea6a06d93bf20408395f8b2ffe06b13062780e1c4a31deed9cd4c915b4c3011f1f0cbf9020082029207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7c8b865d5ac8cd738c5b530453a2aa3167c9f99f430eef8fc261a91b5dd0460a0529e6458d9cd71849b7afc0e1c197365727d1f7dbaec47ec3a2dae61edfbe024f9020082029307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09a990c5edf8fac8f4b70a836f453b80d9bf0a4d9796c3d51860180923e050261a03ae0a0df319a5863dc86ac1d32e2d3b20ca2d2c35ca5750cd220213192ef82eaf9020082029407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cff5d5c6d740ed1162870a81672af8afd70815bf58ad5a4d79aa6b9a709436d1a053e2231f5f86252a6b0e8a86246ae5775150c656919b12000eefa43cc6c8e101f9020082029507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06925eacd050543612e037a4869643d6264824e40c4b8d2b6fc55d9941996ccaba052cf9c3675991cfdf4f1fcfba17ddcf4c123a2af92507d7f78bf4b1234c77948f9020082029607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a09b09ff8509083483b8fce71a2a1593462140f8812bb7a0949f3563a850b249a0288341aecb90d8699a5deb1753d304fa829b40455d9aa461a2204011a54d7805f9020082029707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d04fb9af6eaa7c3d9cd96e4032298d4721cecba9e1c9aa1beec5cae9a839256ca04ce9ab38debc5476e9682f17f1d5c28c022b6c3b69866dae461479fb51e12d4df9020082029807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08e5571ed4341e7c43bc2dd61bf72b4e4906126d40b913074bea9f70442c4d73da05e40210db2d8e319e43f3d5b86467e7b3c2282bedc7a5b3d2040c8687c043998f9020082029907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08f7ae6739ce9d7df2c873203a8eb2f4806ce31802ba214c6a846c1f2a4f3d000a05ecff5832e6da2f31576f1812dcfd311bc4ad536cf736f90c519be6373ba7641f9020082029a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00bdcba32761b0d3df8b69327dfadc8df0740bd85664732b1128cc8dd4ed6e609a07c7005ec6c84af35dcddd417d38c468a8fc6634224dbc2b0dbb450a561537e65f9020082029b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a018abf6de8f7e64e73841e87612ac4851a20eb5be30f8f420a0a8935eade82a4ca0544e60b1089526b95e43f645aaefa3358331c220fbfa741f62468032ce8e9a3bf9020082029c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b470233fb1b05fd736d12675bd826fd689e55eaee1893095b34d75e53e969d77a02cd24e1d5106b9a07466f378611b86af751ce04515e2bb90a3752296460af70af9020082029d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d2def137b20679ed06970c0d26df97556912aae847608eb852e7423bb83a6f54a0599196c792120e227bba614b10557cb7a5e32535c18156e40a5a38ee54f57c1df9020082029e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0583768dce3933d0d1ddf8492f8ed7ec95b2f7d4970d58f9c934402d382b50db8a074a265b45d5f8d33b2709cebb82bfacea37a04746e60fb3751cd29e7057d2adaf9020082029f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a049641c3c4e430485ffc658f766acddd7646d8d3fb88d2e24dfa182217b77d53da045a0882e66bd69ede398566a8e379b372d9e2afeafcc9bc935c5365df6b5d650f902008202a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f9e19a6a6f5a8c48180fd2d781888ecba0c3bb2f49d2fc24c6bfdf917264fcb6a03881d1ca7250a48c0662d8dde8ec61beb2121b519a43cfad9683b5375a9d9d55f901ff8202a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a057da74c2fe6b1a9406b278ef16d3fd2048cafc7e3922ade27f31db58a9d1301f9f1d7d64f0aaa3c300e7cdf018098427866edbdd374820e4c0b1ca91efaf8aa4f902008202a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a1218f5dd9a298e07b371988801a96c42b5d30b7a1cb040c6124113f75ed7acfa049488125da78d69f38283295e7c23eda5c8f9bd68736ac9b1cbe5bf54a47071bf902008202a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a070f676ecc4e80eb7201615183aad4a891f417bf727d09042f6b33e47fc56560aa02434f6fa6c57bfcf2709893a1cb7632c7c653f6aed3da68053b195a58c676260f902008202a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04c0d30edf61aa1d8cf22aacd7d187ee436bfd21f86b2a4db0b039fa2d83b1923a0134c29f21a3e7b04631591f3da7d7331ae4213891232e5b060e64623dac65a06f902008202a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7d53859afa64b85772a0158bc4db08d417881f4320d14ba7136b85e77ed75d7a0069a954c0dd53d86be579f7a3f28ad6ef6f1cb42297db50cb95085878bb01dfef902008202a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f93af5b1e4eeee4d648573550eb135cfafc7fc099c9cc1f9e5d6c090ca0b0d35a073bd70b8bf2a951f0c4c1a4018e955231950de89a6289f5b160add334cc95cd1f902008202a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0989e480d04c0791c82dde5b5ce17a5df965a10b289a1133edb02730012390e6ba0466dbe50d54d1c7baef6a1fa276b96f2740a045ce2d9b08c2ed35024e1b8e55bf902008202a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02a3fe0b4dce5b1a8f86e01742151ab5787e717be7c0bb5ccdbd79f3dcb59ced8a02bc8f36242797a1e29152087a13f306870f60cd24fdb8a57ce93529e9721ad8ef902008202a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e4c297e4ba3fbc04c86c137ead1814d11f37e72cd08e124526c9b46ecc5d4c3ea0193f6e05663643aecf7a79b4501dc672ee5ac0087d223565bb028985e152b5fff902008202aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06c5eeac1984eaa94dc49c22051d9e5c494063feb10f00dee4447f5fa932199d0a0555bda3cfb7316b57e0846951ce083402cd25703132914da5c4b4f6e62b6f570f902008202ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00236828cfdc0eb4da0e3deb46c213cf4d4522acd217f5e7095f00839aec3fa0fa01f83a8ab17b62fc08f1bfefb30fc28bea9611f2eb4ecd9bb76f56329a5052684f902008202ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a046994e76b10603a4afae08b633fffb9617800fb4166b43580507b87c32468581a0752f335330cf9405ef5ba4db1fc44563c5ad8508c5ec4929d7e313093036e593f902008202ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0729ea9681de70ac8b94d168acdefe8847e6cf8c883ec9a39858937b630894449a07eae229a21cc470a57765965262a0a0c19605f221aab4c1c85ead66e823c5234f902008202ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072470007204531e7ff24b97d1cf94bea41b21af1eeb3855d61bc8e71a9955de4a060650f5a7796c68abea471bbf85163b4f792a89543fd8273ba92b7cd070eaff6f902008202af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0646b2cdeaf857ae9ccc7a922521ff5b4f4eed403d62f29a23de1c2bef486e511a011bce5c3815cd506b10bfd4b17f11c92204763dfab554ecc0b19b396c0a47f69f902008202b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09a009e8f3dbdf759867164a83e3f2071e9e7fb023675af2777f9f4a2b6b536dda07263b0ea53dad073f3204f8e8ebc4895f52c26dd8790c5036d6ff39eea1320c0f902008202b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a24e18c2cc4f3b57df8d5e1655bb1cd7d53dec4fd15ac558f14b23f548aa66f0a05203ae0f68dec98ce5b12814b2c7d7d96dfad5e02ebe8ef30c25cc9da33cc63df902008202b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0642ec2a76972272ae21a4a83fc81b9153f9e08da825221a7ca034cc69f196990a055630142fd3f242e281e937ce12d797922a91bed23c876990238668d8db14715f902008202b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0733eef98b99bdf184f4124030a2d1b48b296bfb493d204853fba90bdd44d51c6a0057abbb49449be076c076c5b05324e0dfa45953818525c0969888e379c5ef2def902008202b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a015eed1f055753b548eab60efc569ba3db5d63254f2cd23a37c25596d96a62f48a0546c8ce6d0051c94a52c3e115b9dfc6890eaa205d042c8b4a738c1159fd85f8bf902008202b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ca58e97d6c42233451d58dc6d32c45ede6fdff333a33e0dd3e64795d5d614d9da06a077ea9b4f957c65da140d30c177234ee8c7a5b88288ca7395ad8d4b7a6afbbf902008202b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00550201cdddc79912f5be32ca9e477a0a213d08732e13f6bcec6f6edd9e4519ba04264833beb92b994361d6d5f758ee869513cb0b10f44ff2f908c0debb7892de8f902008202b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e79b61d9ce001cfd1c46ea3f009b43f43950e81fc639f2a73cb8e36946f43150a04d7098b903f081d130073eeb4498fe95f9382f8cd652f1422278682946d68642f902008202b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05ec22c52419e01fe8c7ef8ac6f3f461a2cf5dff4bda9c07e5a8128c8f9f49f02a06ec907ce14620886d49df8490779ba7b753204c68f1d334bdf39a618ccea045df902008202b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08b0a2d6bb604bb19a98dbb4ca016d2bad1f861b7ab9343bfef7da1108847c8d7a011f4bbf6ef971883691ffa39bdccc97557fd10352e7a54fe932e18b7e630969af902008202ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c2416ff970aada1ed3e85f1dbfa5804006ba3834857b47e99306c4863195c544a05b494456007f73940be947d85b98eedfbb64c670a1742e3bb73f40d93dccb251f902008202bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d47ebd1fbb71c224a2cdaa269b4df4a219ace58742c2660739e1b7d6fa06488aa0335834d7868efe5d911e651a35ff3f926eb3861ab6b8c94f07c1f47e6d41d815f902008202bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09cec329097de55d639a171c034058d73c4522a2deae04d43cf815040614030eca0699c54193ed142f072604237a2aa78fc7c91ce88de63f963e37660bde42ff30bf902008202bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072e0b412e2466734213fcfd28d6add92e962632ff9c8fba07c66065d74804910a06d1e8ae8dd40e148ad4f2b152221aa1c7d4b25ef2a4e79e58aec49151f9c1fedf902008202be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07932162c0e9627e7f9fd24b25ba18810749bc4e704b18a0ec556d4a900fb122da0228774ef654c281eb07288a503601ecfd5a552126709b0363b61831320763e57f902008202bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0608fe845144b8d2dbfc48c36681a5480d3676aac8e9afdccbc86de191ddc52eea06eed04fe73317107f74718f088bf81164aa85721c380eb86eef865e240505260f902008202c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dea15456db71d8ed630d047028ed438b83bf2ff84c4aabfbd65867c1547cd1d1a063bebe4a3ecd6f244b3a082c17a6212cb2146b6cd1a74f19d73b28d43b1fabf2f902008202c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a057d5cb40262e75a3611ed471d62013ee308a18dac2ae6cb753ad4ca140be7449a034d015491e4cdca74e5f78a9c7d500f9b9938292933d8d2bcc4cb23d70369ccaf902008202c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0517df2ee20ec386a67a5d5f593199db219fecd19d38d697835cb0ebffdd8e57da07bbf4f14d8b6a3e5aa44afc1ce01408b2e577507494cba40c45790ae9fd53f24f902008202c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b864001b2565f232a85f6a73af08e2eeb28bc8f0715acce2f459141c974768eda03b0d8d1b9f97d78cf19632c69ceeefc794937d0d9fbb553e5333f271657708f9f902008202c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05f2fcf354c7dea49f2f5df2be271f361b31750c0cf243d387511580d0f61ad7da008556976fe5edaf31f488a3a65db75bfa0edef616b8259e9aa3b479761a0d2bff902008202c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b55ac55e7aa7f5d40a456d42293405023375d9030d63b601f819d2d24e941064a050708806d4d971ab8dad647fc821bdd9366c88f079639fd07302323956431472f902008202c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a031711a7f479ae5b5f83b8aedfab649360c51a08884b43e1d514e988dae1bff94a03dce9dbbabd0492614e6a8cbe65536eb30cc08fe63239d8e18fccc41570c2d75f902008202c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06a5d775e776c02851abed5ca582e42446697a7a4fefbc6666fefef055419f8f4a05f34ed9d0dee0538bc81c20e07143e1e6ac142f195f961f4df51868230ed7b13f902008202c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09705fc20ca255f9b037ca495c4729e98bab994871844a28b9a2d0066cd7b7995a05aed8e62435a8b03a0e95188f98ab84b56bccf6c8a9664cd260a3c520859ac33f902008202c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03a9dd306cf8d00c0c047ad039e92c791425b5ef9f5b38f7cb2649eb2142431e9a06486e9970d10cb9bb5ef5584570df9217ab8619bd162d177e366c702fa8bb2b1f902008202ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a3d4c9bdbd6deb5589a38a839536c30624c2fdae224acd5697a48de76131c8a8a07ea5e54c382413322ff8160596b1048e3e55143a6ee90540526965760e506564f902008202cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01b3861bc0d0a8ad4e3ddefa0c5a71d8e27d8acf2402060d36c54890d69faffd5a06f6c0779431d575e16755113c5923942e010eb67a3598b44e888eb03d74d92a0f902008202cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fa2f22c66f136b174d1d1251c0d79f85b862651cdf99cf9e975f11faf25946fba0614038381daaf89ef53740b731a3435a3e3ed202d1c43082c90bc02ed49086edf902008202cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a056991ff282741591cf4a491cb2e11185ae27911aeed45b00906085d3fe59b97ba049f3c7f039aac5b105a143985055002df66977d95fccaa0696b3ab00cf5c8b04f902008202ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b54475d98c5ddade5f49fd2cc82ec8643838456463d25437433b9dc51a464152a05cf7a5b64a597459a543f337c2fd93bf699d993085404a22d9619fe8bb2de400f902008202cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08107287a10744686aa374a120749d098dfcd1c3cba97bca20a2e6225364c14e9a029eac5e64e7083fc1b106a6873cb4e4d3d3d6a5183f6491614fc839ee2f721a9f902008202d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b2520c1d84ed055e621a2255c1012abb6da4c609d8ced742ac0b7c9902c86ae7a030d29e717788d0549366fe6853ab56d427273a24a546fe12cc2173508e8b096df902008202d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d9359f63f7c4d9770bc9ecfc709c45b1406996a1fafbe04a30d2ea09d8685943a06fd81ce89dc28d9b17ab8b564d4310fb380a758a423cc93cae0226cec8ee4a38f902008202d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf5657c6d0af7c6673ce7127cf7e2ae47e82e8ebfc30eff0b63ef0e832aa1e23a04f17c293a4f7bda9c86fd8959487bb0ce5abb930c8f5518c057ef538f54d7ac1f902008202d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a047c121ada1836b60aa96b3ddbeeb708869f685103f2bf1ac8645420384c12159a02c70e9d75be5679ec56f01d3602d5c82ed0d31b302d1f3c86ecafc2777c47576f902008202d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01c9282981101892d7c8209ec753b65423ad1c102446ebef460eb58a8a9f3d5c4a069d8dd49097ba781cf2d2c4f533ad6ec32594a44a0d8ebb614561c01771183f1f902008202d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bd5436cbd0e1ea508132dbe017f098cca9703856e67abd5fff6f30468bfcb415a0772c41508857c28dc607c8ab9e76165c20d2e79dc2aebb2de6975adc08aeeaccf902008202d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0170dd67bbf9a837c80a1a1883d14e965f0a60de349fae697e06a2fd0511efa7aa05dbc2a93d55d80b29644fe28eb75498c6a29b255bd99653c9c9af0848cc612a1f902008202d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a058610947565a135d3a1bc4cacc5982e750092f61662d41e149200329f47494daa00ab2fce95a911ec47b2c1124e30a7e6c10ea7e193161b8bbc40ace9558f444e1f902008202d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e4448ae163fe1b54ed7fe4934c949dbff2ed2a933b5956398f02a6a6df0006faa06168047cf75b9dab21c4b51d6aae1eaf56394bc5ffdcd3759da9953d6f211c07f902008202d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02043187d388677679d03d51e87202a7a32feb0f4150346aca63fe89e1862400ba05abddc12ff086490dc68adc83903d90af3561e42219b0f40f4a2f390afe40648f902008202da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a066e3b2fe5f22ad2a966a2dd5e282c7fe73887d7d0b1944e0319ce4a35dbdd748a071216497f9b64a64361b35aa0e7afdab4f7b10417c6e154f7cbfd0d56564de89f902008202db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f8c8bb54c4c3c560a5841bea3e48439a6f81f271a05cb74d3dcfcbe74a5dec3da02d6f47702da496832f1afc71b927ae8395a4f1a4974d8072c51be5ce806e672ef902008202dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09f466e4271c5ec0ca09087c8d75f74048bdc8db721882084007f097ca6e19604a0462822480e8c07c4c2b1e9dc84296f451c6e88d4e199baba0e45dac20b93b2b5f902008202dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a058cfede45a0f7bb8b300adfa5b2572eca6e42d16a96456bec252f5c4aa2a8a33a018705e965bf65c53def9a32690756508ebf63c3b33a62ca4727ad50f982ae60ef902008202de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072a4eea6b141fed167ce321536d1b02b38aaefbf94e54cf0a847815141fa51b7a01db75b60eab78bd185dcfcaad4e50e6fa12931b33d7fb2599f4d3dbd09b06365f902008202df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03f7091223bc6df7593aadfc42dbe925f8713e3ecee141d7579bef9e574f31291a0788d8db7a6bc76fdbb7d1af1e09865744690bc61d4d44d2591de5efd39665e72f902008202e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a024c4434f806f3f01522d6b50b30ff9192d55ccd1dab5745fe6e04cff90d34941a04b5459c37f757e2dcd0b5dc3bbd24bb79ed0aabe2e0195289a540acf7ad99b51f902008202e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a72381ac9f7d3909342cab17ab65cc588b626c1a6227c49e03d5e827a336d3d9a03e7f8293cab24e72531a0f34d24eb459ba673835e031eaa5869cab1592451aa4f902008202e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aa32aa404134a8efaff1806149321273a32e515aeed98f05d65c0ac2b4b7beb5a003d3f0949801d3d5bac24d2175d4c23f4ef19d5000bfb7b754f8b21ae92a86c8f902008202e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a073b6e01d7380318ab923bc955b2cda0665707d7def3d0302a51d835216ae15a7a03b9e16d541c5e786458c92f023f7df911c593ab27308f6026985d213ae3dbbd7f902008202e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a91cbc23b1e72fbaa5467519e471353c8570f184a2f36880ba5c62ccbf226fa0a0064fe7928f96e39f7cd2ea30f33204a34b99ff18dea18ba96e5317e27357faa2f902008202e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a054cb6fa5602e38526e26f985b55c687996eb392e132d97001ca9622266442a45a0703f451f059a5b1d18980207c45b410616c1ab351448fbd8c74ce2e6b43a1875f902008202e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a028a1a52168a36ae525998bccd81ad7314302cacaaafa8fcb8f89cb7d065003b0a00c87971d2417910b2ee5c9b42240e597d018e8dad30a57e71a93d40ed6014e0ff902008202e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0407cec6a625f8639f8d0e4e21d8d35b99961e7a9c6ef62f19c78eba62de4cbc3a040a0b8a6aead5e9b27bc917938ec7b03b266853188caecc0e52422012c880205f902008202e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c1306b63ed50376b52e1f324e1bd50fb053ad98f01deaddcabaaf91d0322ae37a0411070dd5c25a1ff57dffd4f48df49bb309631f9e79fb3d298da8360449b8d7bf902008202e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0604fc6dabc1829749cbcadca906e3442537072c2a783059238602ee74af055fca001f0bf64252fdf10e1be9059f289690f4c78b93b3359ca0d739feb6a60baabf2f902008202ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a094fa6a7611cdef494d66c14cc5052791dfa98b589a095ad6226590a7b48f1c78a0165651e6a7240441714f752b68f2bd6921037fb11ced50acaa20b1e75edd3c3ef902008202eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a090bb5fc999a58277ecb197afc850c1c1336d2df35d2f3acdc5f57e6f33270bfca0139d86a2371c4a13982885269a9388475aa37ca3e6ede52df7ca1fd88d04b1b2f902008202ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01f8c7b698dc8ff8b1a52cd6463d1053049470ad8337fdb18f904da6ffe7e89b9a02fe80474c9275336a796a3e8fe74d3c1ab44ed9f9473f5eb9f62a6b80775b6c2f902008202ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eac981c2a45a83348ce0afb9009913d4ba25526f61729df967cf32b8e0b5869fa043eafef87c8214918cd1caea2e7cbd06bb71ea0917bd7680c91e4428f208b3ebf902008202ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d471233eede9562ee441736ea0f10cb706ab13395c2bc7f6880a95f35534b6e6a002d03f5908a9962046fbf1e0a19f2170d26dc42634ef4d58bde2efd5bf92a54bf902008202ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0286fe27019927f61bd6370155a479b2db7c711039cb664d9ded116bc61b8a156a00883b43c8e511e5988a1af8d216c470214a0d327fc94eea473ee5a0289a2bd67f902008202f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06e2b17a952ad55793e24f1863006a99ac136f62ecc01679234130a1eacb5279fa06f4c7f8bb8276a45945dc3a0d5e2c4fab0ebd49f661371482df2de6d13b31e06f902008202f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a097f52c3911205acac8350a3b706bfe51b4f623bc3800f39d2eeaef856d515ea1a02fe802d7edef14b8c0238d377ef284c14e2db146c039db456306fb5b6c2a5e43f902008202f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0857f128b9f3c621b9d3dcdf5e7813c73d5be5fea310b8619b51dd7d035a79be7a0726413bd22c029cd20f228e5ebc4cdeffe7f2fe217457c2dd3d5267294ff92bef902008202f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0349a2a758cd65e0d62cdf992be14f5f9b65344a49170c8253d426039b86dbc7ca051c944a6f8b774638121e88d4197164c8088608dcda013c505c08dbbc61a6963f902008202f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06f74a51def9d7c9c2226621c738f6ebb5be4a6aa78e1a5ab8059c190c791c9fca04b68f6538cd4064c97bc95307b95899b4e06e371601a24ce04e57d06b1e2d335f902008202f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a6125344e9d932a08ca8a68354e60b0c0dc5363a60f97646676bc9f392bcf1b4a007e5b7f0843f48e1d197d1832d98474bacc5c4a312bd4617f4d5eda1b6375b56f902008202f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a094c333b6b01f7c9ec7ec6c102a798f06da731aad6bf058f66eea31887275ee3ba03a066c6f9ceb7de4c2ab386bc9eefe1504ec137f8a8603a10cee4886d3eb637df902008202f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7e2d99c2a0c4a797ec33f5dfd0dfde281357b29c9b3f54774b53f840e692f2fa05046cb61cd67036646edcd69323bfa9d5c92f0269722166a9a833da9ed0e712bf902008202f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ae26de7a08cf0381a6bc028b0c8ad2023856b752b7f42589a0c2f53998bdd053a039facd5f949e0ed6621e02654dfcabf307a6877be7be03496a51b9b14a06c8dff902008202f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02ebfda7d1ce035ae11f5cd07fa49fe2338aad18f895a1c7d278fb6f6a6f955dea0544ad3be1b8f0ad76ba407e9df3fb6c6afdeec2b16b2d0b270f6ca50e413b556f902008202fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a028df357a30cba17e53744482af6759ecf0b3dbcdf92b2abbcfeb5a1de0aadc2ba00264a9b8c65cdfcce964758d81d6c649e45e180f56c2bb489ef50cdb46d69ef3f902008202fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0658b442e120b82e2fc44d3d976124cf212097dff555f8a973d2888d52bb95af0a073a77ad0cc6004f61c2f249032b404dd030524b95b4cb5d1dc33319ca8e73c2ff902008202fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b678b9bb8652460cd8c119e9fe35f26ba8616138aa9fa43c48c4f92806283314a00d4ff0e6bf029c24433c9355598452e37e82c5dc6ab47cf32f7ec94a8703c879f902008202fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e0da762cc555b2b5d541d37fcec932853c7d12f2cab6261a2b4a36ec4a1bfe94a05629e4e7177dcef01902db2ff44673b7057cef5868497e2e278c607e4b243443f902008202fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f9e758c2cccb355841679d81b79ca7e081e0ccdb0d7a3e0a7bc7291a7dc2578fa011a0c03373ae9a36cfe3157589942dce2f1ae3077ff108888733d0108080f6c6f902008202ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0151f3b459d710ad5e3faf76d6659c55da50502ed398a29aea2e467c596d6fd3ca0236c317cffd2abb956c88d894aed4f2bbedca924fcffb69ea56d654b95cc6799f9020082030007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0687fbecf498d14621849ad7fc244da4fdd4f6418978bccc19eefdd73be3678f6a05639c8a41d7218db8de6dcd76e125564f181e8ce6377b4e89604e3db5c07aa17f9020082030107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06f615d8d5b99c330f22ce54550b2f8e556a3fb535b62ae11eeae8eb5d419d421a01a771bc53e0e08b8ee839b8a25b20e9ab26dd22a5529d1d419bd7faf6554b1acf9020082030207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d79e774c6c6fab43a4fdd27b3096d6230d6f2311b47b886351fbcd69e5c179b5a0667d21a34f8102f368e042fadaa68d3a17ca8baa208bbeb24f9fe7b494d927aaf9020082030307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0170285312e6d6f694a7414d0055b6368cb4f4721d9dccefe415a036794313e72a061748fa60ca57ad1d0d956b92194a65c18fc511a304b956f9dea5c49d7b2eac0f9020082030407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a8cb1f1602f321493e0f1d90ab3a939e32a5cc765739609746c64ea660864394a05be1490901216e5f858cbc64beae2994161a251d04698b308dd20c81c82eddb5f9020082030507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09050f7801510f638ece4c37934069b93c50b234912bc2c0335b2b90895d86a7ca0624407755c61268c24695b0bea99b597c2b55d6c7079d6b9d04ad2208fe3451bf9020082030607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c4fc56c03a0f7e76657d2c18122adeaa6b8f8aa5db5997555207f25f22856c49a0235cec6b5bef61c3bd22c59ff9bf2dd7b2acdf556e9e2f06d603d78a97164073f9020082030707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ff106054cecd39a27c3e21b7e4e604db70b38ae9e9f63495891cb236a20a2bca009771734e3f96c78f5c61bd8940724698132061fc9760027355322212d033f4cf9020082030807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bf8dc2864b010a3f1ab0bff50b187cf1b037373bbb9f1ccc8da35c52f194440aa00d38b632b5af43ef66a55be7e5a6ef94c0e9320918aafe5afd26281e31bbe558f9020082030907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0da0cfed77fe19b281e0a511acca9438a9808171a03f7c64c682120b7e5353b76a04e8410e1ce057d06c8541057f3f247cfb3406dddbaad3184e2cd96204cf94efff9020082030a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00bdf9bc0fd26943d0c30bddb74a93068aa22064e1fb8dc1fe2e016ccd11c827ea041cbcec15545f5a396db18370b5e34f637a630a26f4a0f5d2fd9998c77662291f9020082030b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05be3c5856f1d3f15b2e08da42642d5c5caf944acc4cdfcb7781564c7877ca1a5a0545ef0d3e9b6e6ee377166bc97e0988caa951562d02adcc3a14fd78cca081e62f9020082030c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05ea1db7afb770629e59aa5b22f365086afc35531a64a003c4bf769fd8dd9ae17a050019352552a29fe3d42631248ced33b35d8035d6150b89db6933f4e0733c6a9f9020082030d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ce24be2a63ad09d35ebbf7a58587ef0fdb987db806b84064bbc81d1a18353fc9a007a1d1b27f7fc9f08cb6332e3c5c9e1349a925248a8980b40f5853377d18ab2ff9020082030e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a013cfb39c990a21d68a582382f52786754e79e3b936ec2bb9a26d6b59e5ac0763a01fc3ffffb73d2df8012390b9d44599e74edb877895449b57e3aab1f037182f86f9020082030f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0646afdd432f2652b6c57f4307a7b96707c2ed9820991e992e2554fb6169576f3a00addc33ff5cc20b37b901f5995bd1b964ca1a6ef497701488a2491a66c425385f9020082031007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0986d5152e49b0198678d17b8a474de252f1ffa7438e02b144df869fe7154f656a00d1f121a1a9eab04b95a4558a92a317de4c31616e69fd48b771e504c7fffa240f9020082031107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bce2461e6fb8b3b22bb2a0117947a5cee6bcf33dbd681fd23895facce40d2f1a06606b1b2f87532cfd20d0f0d1419f9e69db53790156b804c1aacf1d3b262be42f9020082031207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a3a40325e0e7b97242a5eab0b7605e48dd78cc7f7878fcc109b8433ab8c08baca0603e32c62c8a1ea1b348cb973165aee32728037d53952a659526fe2b3f1ea4c0f9020082031307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07d1ac7b0fe569b9a99be539531ea606e2c3de394967701dfc5541cc0c734e91ba044f52c3bde8ca7580c4418f42e52312d0e24d46d1dc697a9c57ce653e2432c61f9020082031407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cf2605608bf91b7023cd5d7eeeaded83b8e635be0b46c8f7b28802d998588ed8a023e73ecb962e773b615141aeb20a75ee08f42cc699ded2b599d22e339de1655bf9020082031507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0caf4d1613de80d78a596bdce7d7eec15535cf7772da56f11827677d2fa3c4cc6a06635d51d57cc79f5b934a65d779673c6e11881d28ca15708fb24160e05b43562f9020082031607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0221c4a6b3a6462a21c486c8d83f7d637e2dc66da50a60bdac4a20dbea7459cb7a05a79a075bb676de2ba6bb47a6c7bee83c5ec17bb14c56e9bd073beb9a4b1cc11f9020082031707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f67058684f0c0432fd351c5ef039218fcd581a3c86ffe473837260d72141b43aa0103cc1959f307b392f6e2b9d97eb0d7d7b05b3015033b84c177c0f75022379eef9020082031807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a064e70c60991aa014a3708259fe9951088094da5e24cf9bf3c7fd80fdadaebc22a07bb9363ac3981bc2c83d78746684ec6d3ea6027916ced83f71c85284810f4d0df9020082031907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b39f50ffd99fb0303e4a3980156772cb8a7ea303c4d3a23ab7725aae78fdaabba07cea7d95a054c8f0950221e675e107f35b0a964a8a64f48a195c67ce33ae763df9020082031a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c8ecfc46ad46ebf2dbe3a97943a7114ecf33e79f3508689d0d60afcf3fa7b119a0347ac6fdf7704417c0389b61769060fea1fb17e44ce780f5b38bdb9daf21fcf2f9020082031b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06da1a3820619fe9249972e04802e0bd229c1b2569e9e1d33e5865558889225c2a02a580afc610e701a4a4fee01f189b5fc3f010a375ce1c62725a722d43f87d564f9020082031c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ab96ab4ebeb224bb73897c7a864080d7c566103565985e50756ab3d87ee8a5cda0175647d55c335386c79823deb19058b07dfae96654d1010abb680edace55ea38f9020082031d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a088c44e2ae8429f023c81ddc669e6ab3b845869e54190be883c46b830e911f691a037a786dd5edf3e59c987366c362ec716c7da99311f27da13b42472c2bc785a1bf9020082031e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05b5088c2f7ce960f94efb613c8a936d1833ba64b4a6f22300fe9889d456329bca06709e0cd4e3707ddd36ede58caae9c89b4127b854a6d28096b679f328f856edef9020082031f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00caf7c04de2a7da17a4497f896749d89e7ec88d77c4a9432f3c561a551a6cd8ca00646adee790fe92a067054201c5786a71aab3e0c4102c253893d7929e40504a5f9020082032007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0953acdb065d80d08eb7997e3af1199439f10f67f9305eba468d58d41c1e668aaa05a3d9599fde000f1420f3c9669046a25a637898351b10f1afa7bbe28feb62a75f9020082032107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a094e1186ce6fb51e233d26c0a67585e4800461d6e942dd5c072eb66ce79372bc3a01c149f04a3431d9c8428913c2e35714a9526037873ee9293ec3293b9e682df6ff9020082032207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06953e5066ff54dc085e332b406a67d0b6443b39609c945b48e63c34cd07213aca02859ff2425178a5c33b95b6eb4564c2cd16cc7fdda7da2d81456b5c9ffcf78d6f9020082032307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03f6f52e08ad9ba1493fd7a9e75f86bfae1cfa8d0f4f862495ed5a6bf80b74908a06ce5be7c9a46a6993f521a35784dafecaad49004cb7c3285c2085d873766ed50f9020082032407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d195c5a95af11790e20fc6ea4b0be28c4088ca02fd016971e1980f2186ae7b6ea02455d48442ff7f3e70d91277c152f37bc786ddbb423702215a945c66f7af039bf9020082032507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00646dfa262f8419a75db767526d28c97de4b04140e59939eed98efde7a41e258a05a0e87e4d93369fe24a138df4986f27917793ffd6659188bf16f7f5f7b7a51f5f9020082032607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06b5b18123a1f997fe4a87be63de67aa4ae9f01fbbe7887443b057846d07546a8a058b1ad60a1460985480ed6534107a93e21c87176946e9d19bafea5f827e31fa3f9020082032707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aa055e14c3fad2e1f7f53e937a24f1233c0045696b0e23aea3c96f77038d04b1a048e85bfba54f9ded8089f61e76651de8db38c7287c50896c861f900e5fd20cfbf9020082032807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ab389cf696315b6b38968ba323717dcc875e571dfba9cf1b67045270fa947139a049f4f7e140f61bd1bc21c806b0ead3cee04e3d4b8a26ff2bc525e9af9d247eccf9020082032907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0225b893623f41daf7782732a776587f05eaacdc02fd60c03e2ef10f010cd040aa01c0054f13c28093b04482ef2519bb9de33a328d56c9c6b09f2b206482e0e2cf0f9020082032a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a083d9676f472e460d0c600d803a1019835f77995cb3951e64ca5881390c84d2bea06e49ba04d20b236609612f40f07d4e77590dbe45929d492175a68570c88bd5a1f9020082032b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0be7be391daa08af854357f9d55556751d283b3d6504433d235fda0eb2f78990ba0115a5395a8d452e73ed8ab98368501c1387c9a1feb41b156d79f5a3cd7c2de71f9020082032c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a081906151b5a52dd966862409cc4775b35f810012224c31034cf183a0c3f0263aa07c9e7b0039f422c93897d778883f70dd8b59b408313f686646b92cf329f420f4f9020082032d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05f9a2c6114f6f6b8ac06f1e83852cb7c0ea7da5236945ea32bf535eaeeffac6ca05d6a48c022dfc44952a6f402d1e0e33f82014e2e9c61b4a12e035b8a03f7a5e0f9020082032e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ddbc945c51c827159bffc27a6c07878af77f1fb930560ea920ec62f9fb06838da054c4efa59f7daa134d3375d64fddadc8f408124bf6ef581549b255eea2b8252ff9020082032f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a001ce8a921b74266164bb0040c7e32312d32aa812405209cdd4c5f5ea309a779aa0705ef966f43624226b946c5cf40ab5ae389337e91a85da08196c258af4706fd4f9020082033007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0da0de250fbb855ac86873abeb232b2ff78a457b4e6eb6c0f8c0a3dbfdfd5ed90a035951cf80ea4e5e13ce949d69ad069c87021debc40d8c174cc9dccfbd53bcb09f9020082033107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09046aa1c05e893730c2a7edcfdc0794c20a639866082a6fd828d485d1917e118a0207d7a5ecf28b8fc986cfcd2fb4e361af8ad8a0e4d6d1772d38aef43b05d3a7ff9020082033207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae44dc30a1551a3f885015c7430bdb29deccf75a1cf3c366f1c19488bfab8429a071c3652be3731337e92f3cd36da2f80aae2b8c5e40a03388f003cec10274e726f9020082033307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b5c7e92430590811bc7eed28b60ba964716389c0b7dc624ec9a9d6f56f4a97eca022060f20b53ae1b249a6c9e2608372bf83fb650e97c4de5a127cf15633197cbdf9020082033407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c6413688bb2c30b19a73968eeddb7ebfda1af1b5a8692ce92f65ac5cdae038d5a07ce12488af24b78cce18c184cac6b0ff39f41ef03451b55538dff997385b32b0f9020082033507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a021a1f28cd6a4ca52a81a6149568adc3610421620d343d446b50066819389faf7a01e456b1baffd6888aed631f7c90bc935ec3aaff96a4841c2c97d2115be426482f9020082033607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eeea9391c77f9c40d84015546ea52ba7bb35dfb1789b6232956846c231663d02a054d90ecdfbf156483db9142430b821ad0d812fd83a1cdb7d8f07104811193a52f9020082033707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a022a2caf27ac12f632f4eae0c6aec4f6a98e06e16486d64ed4b6e413befb81769a00ffc1a410654b401acb20c2e6e2deb7d2c7ddd6ea02519cc9dc1b5a8c33ac08bf9020082033807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0327cda15eec96dd76dd8eb76a790b8630e0e389e89d0e2ba247699ab9f143fd4a038884c127f00cb476d19e5c76f31cf12207b8574b88bdbdbdb5f9167e73cacf2f9020082033907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a044822a8842ae8c394583e08e333b87c2048630a9bf13bc2162599d1041faf931a01a1719d69ea8f1d99c830f3d530d215d46593693723b297b4bb7ea22e17c180bf9020082033a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a025a2d321a6f11783e5e902575de72124ad6a48415a92868603476f8372bf678ca076f1cd872d86bfd5eb3ba9dedb80cc5ba2a6aa2001f8fd311d1feb1dc5a8fed8f9020082033b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a007118208601c2a5b88b99edcfe180e1e311bb20970a071e3a94e2fa11be303eca05e1584e4ef1e2ae581f4d015468ef7f5f649be1ff524f7f09765963b5db096f5f9020082033c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07ecf36c6c9b1bcef5d9c4bb6abf1dd427d5560c774d3c0350f8dfed12621fed9a0332912af23f9025faeb2e02c46db3b55cec0e190c71cc1fbb51d88140d969173f9020082033d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a074f35fcdf73fadeeb4613b22c9c6f05e6f8cddd62ae690a8582140c5f718ced0a00b1817d882712c8f625d15b3fd7e0224cd7cb5401456e4229fdcc2b2f136ff75f9020082033e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a022c29735a641ead3690c77058613c6575682ab8de89fd30ff457fee535dbee47a006b2aafc90ea661c78d8a0bd0273c745e70c705be0be42d2b1fa6806a0a42086f9020082033f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05919a7bcb1fe862858d5937c2d6dbd8d9b94f515d231a910ea8830d00596974aa07dc09a502b57be5135083b17d1004519437eaa3cd49a503a15ea081cab887bcef9020082034007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0366076a956fdc88c21fc6bc0de8b47bb6422069483d8f7b831d4ba08bf383ef4a01712b46c9e0ce900887d09317db4b7e2e4f922986970cb95156c6e53f440234af9020082034107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e3464629bcfeb565aa6de37c5dac5a91aef7a4bb473c8d2bda710397bdda2167a04b17bcafec032fdfb9434afc58eb15a8a38ae6a5637bb3f109d20231718312d9f9020082034207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05c6f446397ae23a1c3b71da01fa28ebdab5a752a92b56fe6677a617651c0beaca053e28ef44a28f19796fe3c7a78a51a3714fa5942d940643f7f7d4dd14caa4915f9020082034307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0886fb52bd6e4dbde75a79938f0ffee27a4865dc7576d658b1f0bdcf466d22017a03df4c9b2e8733b4b1e219a250bc398a4969256897267511c67275d16e3b7aab0f9020082034407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a3b2a69055439d5abb56f585300d2a3b10bfa8f4df6d3928858dbfcd8f867531a070bf70e6447a9c794c94e0c996c7afd1fd819c4458680b02a697b8d65d934e7af9020082034507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7f16312fef46e2a54022bae54a249cea9bf68444905d6f5c169713f17c85ac9a00ebef2917a24414a80bc18a3e674f0e297b66f64f93edb5c0c62e57610c9a8b2f9020082034607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a080936a2c04af5825ecbf6e756d61fe278807b9f609bee3118c79413105394fd9a07dd7ca111b6fadf67eff49ae2e1facd17f0b31144623b6ca595d3a51d1fd4a35f9020082034707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd06963bb51405ba0376ba38ef5c02abb8b3f516e69fe24c7376b40115f24b3aa0620d0bfc9295ac93438a98a4d58468e9f12371df20d8434ab8a98de5c7aa7b52f9020082034807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e218b6f335c02daafab4b9facaf135364221a9250d2260d8cea5330b2de33016a02b1fbd57f9985c942ebaf61374f74e64151d7683e36ff891aa700abc888232ecf9020082034907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a041d29ab33cd41dcb2ef56486caaa488c90306fbb33c081a28a2a5e5cc17f0fffa0690483722d7033d3fdb5ef9bd2afca9ae1152ee6e3aa8b3465588756d2f6671ff9020082034a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a085edbb4c7a651729a7be1084f4b018d8ac774e668fde2c30ba60bb9dfac61311a03719d78e4f5f05ba7874315319b5d38beaefd62738653e4ff7de91ec3f361326f9020082034b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a054f08c0c5a8da56961bd0977443b6176ab6677a9ad576dd6260de2206580a77fa0029a0bb85ece446ef69e8b8f5e1ea907d82241dce0617ddef8a00dcaa73de07cf9020082034c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf1fd5447c525edfd9631a756fb52977bfca00516ef23d6ed5bbf6b55695dbd7a00cd3ad8cf4f8660559b74a587ea80022f7ba026d74b2e18029a2c8fca94ad362f9020082034d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a097287e90cc5e0b598d4603772977f38c6fccbec9355585e5e0af36ef016ad2faa03151e3c7829c920edaf9a8a0b6011d512cb1248658300cc61b405b46524d0e91f9020082034e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0af2355b0560294035fa12887696b8f08292a73ee5a7b573b177beaa1c595fcb0a01097feaea572de92e98fa2fb7790df325171f47fc426548556819f8bf4624604f9020082034f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a051fe6a2c45c2a732b8a4706ec5d07c95ce0a21f598d4720ee3edbac38be1250ca02f345d13526edbe0a514250c4d35afa85c1c22605ece54f9520d93f8b9f5f360f9020082035007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04ef4fddd824c0dde6a0aac2896f30c08f3ca04018ecbad1fa1cde2032833aa8ba05f66a874f1059f240568244dc19d6313905c8d670ab030e6521bf45111808a81f9020082035107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0109f5e8dd896ac82385952c39daa814c8105b30e3541f3095dac5c6e2cf00feaa0153a04f1ccee6a97cce6204f1a543e4d4478451128627c22dadef90d813c8458f9020082035207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ffb23145f46b61d31df07533aedaacee4e9ae9443442233ebca2002074ba2574a039916927421ff2cd80d96b058d53046ca5474be298a96d41445bc4bcaeee5b4df9020082035307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ac6311f1b8c8b8e0f806e8ffefb7412b4924045278b868db1e1a4c7b798b0064a005ee741bdb89cd466343389b2bb922c82b2bc1a3064e4244612ed3ddeb22cd21f9020082035407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04c0648aae33ded1544036c43c53095861011391511c0fab4f5080168f5c7a3fda06b99491231f7c849d257d05fe11eb998260a57e404b1bb54b176cbafcb566143f9020082035507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06db0786690ad6b7d6f7c05abfc27aeab5bc23112c3159d16cbd5725122418a8ca0380135b7a4d3c35623de49c207100f0d1f6420362f968b19665434c39e54d5e4f9020082035607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04cb42cc76e02cfa3f0ba756da8fe2580d023c739c2c25fa5e32a7f25f2236805a0173768f36b733216d8d02db998da31f4b97d813591760e216726201a9546647cf9020082035707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b32adbaa62574e685e426aea971722ffb5b823796c9b002050d3d3479be55311a0750bd75d1f3556f9d7adafb4c0310ccac30dcdc25e9a0d87d7da380c79aa1157f9020082035807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07ecbfb7d7b2ab641a7e6a942c6e4efa06a852f0f63cd26bcc80394f3ce63ac84a0280308476854e4632ec2a7e20556b8a3a707b9a4d02ef9b65bfd232ac9ca2e46f9020082035907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ef23ab06841c958ad9fa4d02d35b4d4d629ad009f630074fb0f8847394735afda0124a1f17f73b0b5df6e2473f2ba79c73f02fd9f9147587690b19a864b3c9312ff9020082035a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ff628ab656da32769cb0328bfaafaea552555dad9871ca7d52fec7a43dafb5fea028a24b4967792dbcf7103c515320ffd0465cf4f774311a958a28d2aa2a7a65eef9020082035b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02a0dc9b51314cfe50f8722342f4d9f855dba49003aca9456ce0dea031185d735a07ddcd1df659a8694301e82d8f6165966e482f3f68fccd1a111b6709e1673e3b1f9020082035c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ecb5792d31e3c1ff367d72a84d23161ac26afbf56793789f8489dec7cd949a89a05fd4e075c9128c8ad8883e7628e8cb96d130fbec769a310f3f9889c147a6128bf9020082035d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dfc4fa0ffe4f1649d840cfd85b6e094e1025fb66a0a71056fc909b45fa6bea2ea0385f17cb6705f04e4246459981d0569a0f8edd49ea278ba74824be2b22e60dc5f9020082035e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00d61a03c5a4b0814b2df3772a08889bf22ae03e958824a64368e3a48e3b04b94a0386a5550763c9be5e1d0d15abca1078c82d2e0e664f29a0594228b4226b22233f9020082035f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d43821f7821b76d9fdc08ba87d7db41a449400264bc8665de96a82d23fafedc3a03595050952d21a83e739f2b37732f99015215b087ed6929c6d67a675320b2e80f9020082036007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf19dc7a3b2d7536739e0886e66625adebcaa5dbf13895b67af63a5e4aeadf74a0125bb35ef4c0335fa1b336ff13389103cd60d7a175775132d37fba56177c3100f9020082036107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eeaddf7b115e49b6002eb63cad5a4cdc16c32456e2d9fe3560dfb9bca86ae349a02e1b0aae5891748a6da11ea475ad180f04272d87cc1516db4d04112a29d38b95f9020082036207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0488bd50f932d0b92e8da1e4caae361c1eb6448a6c8000feea474dfaec7b43131a05c4c6b3f5cbacbbf148acb8e6807b1e72813073703c551629b9bf0cf5a2e7f2df9020082036307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04d016dd2b7f3cd0f83f131652028deec089cb12805f214c6ec8007fdf4f7193ba06690e188bbb291fbd2536fb7e3fe2a0237170d5310e429e373324d2041e78bdaf9020082036407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a097aabda9cb66064d8e442ac3b867c989cccb0c5a4422726f4b7635d34d34ee0ca03feeaa5a755feff699f468d494ddef55a0fd3973b259a08c733f8275328a64e1f9020082036507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a8140848d2b9e343767de528e94009d1f10ae079212bf71836c22814bcbcbb65a0751d57af1f2e5249d17b875d724dd8d42fc94d0d2eac52bdf301c46a6a88e53bf9020082036607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06183ed319daa9f3d5b1fd664a7f218aa2bfa223f1d20bb6c3c705ebe74d533f2a0467e5516c8b616341653e2d12fbcda2c75894795198624329c20f47cff0eca0ff9020082036707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06818f615118f821b8ec5b380001b3981bc2c8c2ac5b1575b7ee35abaf7d7fca0a06aaabdb271e54f7c8b586eb9204ccf9640748b11dc8cbfb6f85318b81e8a0ebaf9020082036807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08fdaa361ae584a917ca782c2d44eca94d71e8ea9164e651bb0e6fdb2246adc88a01ac78bffd554c1562f7b508c33c72e6c699661a8fe93eefa5b2195ee30868d1df9020082036907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00bcdabd4316c63a29ba84ef956567b5fe9978d41a89bf4a088248ed0302103e2a0569efb3d35c5dd95be0d91e3066a6cb0f2be165bc3348dc328bca7574d966abdf9020082036a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c92a472a1e306f7b3653a87b599d7f90cb14476d1b5d0aaae9575597351b61a3a060c752ca01d84932d2aed8fa45f429c357e5911045b72b16663e7b1ed0b8bd70f9020082036b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0753b665e96ad8b2132570edf5dfae47c056b165ab15198474e90a8db42c5e684a06dc6ebccc93ae5dd400387bcb7a78a606997ede966d641e9468f96fe4065a349f9020082036c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00937309216e3c20e0ac93f49bc5aaf7661704b864b9d003434acbc7af7503e3fa04e91f49dcceb36305b76353256dc06c29c916603f4f1cb1ad9ad036263d689aaf9020082036d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a040e0848a8990f57f478b975a06ad4f613e2dc42bed1e5a504d0282078ba2e41aa03fe8526742aa7ff8a8419dd9e20ab96e7d496df0143742a5f3ac5572532b67c9f9020082036e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a040e85bc86e883ae62d842a89cfbed1bfa863152b0c5404327d3e53a530bfa9aca016512fb4898deb5855fd1ee81990327bea9a273da49ee8cc9d8681c7e5c5cf0ff9020082036f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c01df4e0a21ab3909ca7cf3c3ebbe6b8a13e898b4996330922837d364e668702a0596432454ddde3615ff61bcc64fe5e4c74889514322ccaf871c6257830fdcd24f9020082037007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0447882f66709c68d8c675a1bcea5922637d51e2c5424f9d04d44775dd32279cda07af9fb7a210915535fec327bd6aeeb25e44794ed82c919ede28464007d9632bbf9020082037107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f0ed2d1ba427cb66ca01c1ac76248fb0d019b52120e85070dc48101f1a64745a01fccdac31c026121223f78dd7e564e1a8e6ba57a1e5e7187ff90055e932cdf16f9020082037207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e75017a918824065045f66a82b9f8d6b6579185e84f3296d28532751bfdbbf0da052c525a2d17dc35b93a9d6a62e8af2c89202f34a0f7b42bda18a5c4b3f657eaaf9020082037307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fbb2fd387ac74bf45b96fa9e5cc53b25e3cfc5a6760750d5cd7b41a6d2da4d79a00639483d352e50eb75603191b6bc28bdd5486fbf0fed0a0d8c7257d4d2600900f9020082037407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03ddbec3c28c2c7a4a7049bd9335f35fce2921021e42cd567a461d94643e522e0a043359d72797797679922f92ff35d4088d195cdcf885236269f1e94838b0b0417f9020082037507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d12c9c86895098629d64cc0ff6225fae9fb8f53083192e5b537975a2d9607ea1a0259761cd4885f1ea93bb869f4b0dcb262d6a1fb6e4e90e3922377076d5f9c67ff9020082037607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0727c3e5442add4bd8c14018602097a32f2499cd60efc1d19d826bc101358f084a006a9b9081b9aeccc0a1d1c7af39399e64a4e6d7faee4c164e5fbeab1b7ca3cb6f9020082037707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0677d7008bdd040ff17d58712bd36556cf57b64a4773fe85860ba031920601710a0227768fffdbdce219c6cfa7e5339e66d14e829e0e73c1066c95860f18bc1f0bef9020082037807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0baecd3755331d404ea91fe4f53bcf5a71b0a643d1495892b6cd4ba342c7d2c66a01b1d9342e5dd5f6899367a40483906e7f549b5ddfc530f0837ed023f37b7802af9020082037907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01f62fc5b931245a66d38251b5c606a139f4f5a8de55a251a62f5265c608470fca06acb80bbbf7a56227ee75a6ca8c71a02d489844d403bc5b39e11b94e02af0cd6f9020082037a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a044fb14ded24ba0ea7a3260b5efd6e512652fb4593b3b498715fda35f17b64de5a05ceaefcddd7392c8787d097f4b702f5a3c0333bab5546f292d16ba1c4fd5e1cef9020082037b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a033398397f52588ba94d983d640de1173d098953b4345ea70ab8c63783de9fbb1a0281b0920886290f461a70c53deb02a0f63e52efe127420c107974ecb6cc64893f9020082037c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04053702947b9c616d1eeb1e97b616fb30fcb5285e7138274b5c1d81f75d473daa064fe182a0f977b186ac1b372fe056bc6c20882d5bf6ba238aa765003874b25c4f9020082037d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a87ce28bbac23b438c18d7bb9eebf84e40c62e5eaf10e09b3fa31748bda4500aa028907630f9f05089c422c88472b47429efe7edfbb57ae13229351cfed6309746f9020082037e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a087af83209a7a73d072dd894feef833fb1895c5618fc6a4d6a864dd54a79fafcea02b69a185890d56ea9861e8d8f754092c3292bba8401db0caaed6fa91b19b8063f9020082037f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09945b5ac46e4c185ed3a4bd38a1918ddb7492cc3db8b24c9d1b759c07f5f4a15a0395a8c566c3798ed24cec91aace350b7e96fead8528b5de7ebe5d36600e50259f9020082038007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a093ba10ef53dbc916bc48d93a44ef7e391b6c910d82144efad6c69cdd49a02d9da07337b3faa1aa0b30e64d8e04c75e16e7bd849cd6c331e10c90b079107fff0162f9020082038107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04e06b57bebe2050d5eda073a3f9710c23d33ebd98afe47665dce1960031d912fa00848cc7d899f75a96609c27cd65ccbe653311d950da82581ebb74049da33116ef9020082038207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a050f5f2d6c66b2c7252414d098b473f7022a58071a8ce6dcf4a4da2c27787b9eba0667140f69f400530749de2b3bd1cbde9297e52ba45e4f2dd719038ab5b8d1fdef9020082038307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cd13903742291f4b85d32b5ed32aee0b467f6d026a38669bb1ed340cebcf1c0da03337bfd04439c87a299c9775c2d270bae283aa22b8c51b71a56b1eb8393655fcf9020082038407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0249c872d28c26dde372e0d9bc85307b65514d4a610d686f3c629f2a582b9e495a04c4e21c323ab29eee88b11f79fe97f78f8412fc9cf42860cb8093f0a18027f33f9020082038507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0739f446343788763ea8bf9522d982607032b50cf190a528d8cd483cece9fe619a00ed29ac76855e43fbb2ceb6e15b0aff1dd4daf514a127cfa9757bdafe5f3caa0f9020082038607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02b68c6b19a60e4335b3671c7a85eb97b2a9616c0daafecf92e8f3049dc6df5aba0248edf0761c0e69b03417fcf048df8ea0f1edda7a3e5ab88b74df9911fd749f5f9020082038707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07403e9aa4326a1bf768dca72d313920d03c70f26ca6ce137e1acb93fd3327c4ea06c498f3ec189931b7f1a17fa009fbc141264be6fa8ff686674b3eaf43fc85991f9020082038807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d6e63e388f4c75a0c48a5d4f5ead5587314b967d5b452fb93793a5b92ae8a5daa00724beb8d03f5b8271ebfcce2f43050bee63b07f24cbf71b07283aacd9aba5e3f9020082038907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08a7f62ec7bb06023bd23fe2206d11aeb7c71e44987caa4845e3215ce1e570aeca019c8f8a6721818897594277b1d859811d5cb154ade291a4aaf7514029c2b31d5f9020082038a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a070442c2faa06a7a3084cc1799cc1bc9d7f2a77755c5bffa415319f08547e06d8a07a8f2b21e0276f996c38e2356e9073d23ce6dc114937eafc278a905b1f4b6463f9020082038b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a036f53e9b9fae4f046af832b06b753ba9baf408742977e140b2b73669c237138da016075d7b91562ce0747aea3e6c45b139e0ff2d6dd0ea37acd519a812134d84bdf9020082038c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fb3c44a7f1a2d016a20e6de043f7893c91bf90fb6304375483485300f14d0ed7a005f5795dac1f7a941349eceb15a0a9bc6dc04535e4dc75b80aef681b6c5ec7ebf9020082038d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b9e9f65347747cd837fa0384710063ea29fe124c2f5e276bbaee5e659f73f7e8a00f0a48725e6ec7f55b0c50b28787a05cc7741763c49da67b1a3b19192ac46bd1f9020082038e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a36c783e5a739b05df99ecdd9883ebebaae2b9f9479365d0abac6d0b3b3906e6a0225a0237801308f4ab43cbd3a7030931da10b1b7670c8e7eca132ff753b9107af9020082038f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01df868668a96d83b96fa416d0558e7d3d80cac67a722b4cf53d32fc67eb66231a032b494d1cb3e9cdc619bf8cba3f66fa609f138dc158cb46406318913f1e0b3daf9020082039007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fd6f5ab64238a5ed1ec33be7e0b5c027830ba3475f52ea8c8fbc87943e930329a049258636ffc06a4bb0f2963a98ab4ec2972b9c613d69f43780147a74795270d8f9020082039107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a074fcd1fb12cab9791a1ee6075f983cc79085d792b40df274a14e3d94bb6b4a8ba0212e567d321a882bffaf583d6dca62b63e4928a637fc360521a78c3fbbf2aa17f9020082039207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d59b2b1c99bd2c67b49c17b908c7e6e2fb6fb11af129c49e8749999faf932638a079c8b018d30288e4700c9f4894353d19742c488db32d1bb15d387c695446f5a2f9020082039307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05759c888ae35ce5573fabfbf8b30f549259aee62916c88c13b060a8691420d97a0516dfc5a9b81d6ed479d0dbf4bd6675443782507da405d576d28fa03c19c2ec3f9020082039407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a075d3948ed0821d74144bcb85e5f13772837dda08d4ca81afd1fce0efd0724f6da001c91961159b1ed197ae7d5abde3a1539f2432b7daa69d189b1324eb018f89e0f9020082039507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01b9c4ea8226668b75932ce82f128639de6fa751769afe4a3eae01f429c54bab7a0583827a5c6e40187f53d8e7114635390024148306cb37b1281a03a1dc70b26cef9020082039607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01076eae29ba00b477a97d501a53fb6a068ea52673d78019f7d2968436dedda57a06ec109221d1ed503c30aa2b99f11110fcabe6b89559f7e9cf341f47a10c623d8f9020082039707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a098325fb7419a550d879b1a0e2b442443470eeb1099d579b70b1bad2896b774e0a008a965910ba076ecb55e8b25dd0202504d9beea6eadb0f0e2af491e499fa8946f9020082039807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aaefcc2de5952d4456e847ebb9a14b7afb3085cf04b6e3f5f1ef918e95d2f8e6a0115b1d43afa194c32c3f60612e8d1580e2e9eebd26d6366052a975874635a7c6f9020082039907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e1801d92679e9da35e671bc98e04addaabc38f194001b25cab6d3d5afd55881aa0619b5da2830c00c72df7c1695fa2b4ce790b1bc5e7bc40afafcea23a62970060f9020082039a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a068eb53ea1dbd916a796d552914e3cb7f8a3e93584c0a25baa2a521681ce7806aa03b94a70d0e6396b6a047266ca203c26e72e869c068424398f1a195b5b3b25be7f9020082039b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01e08d0de89813477c4d3dee412e5e392ffd6436a7c85b221f095e43fad5936d3a01b22b33987c1340e5bff7b0c383ac06dbf833c9c0d801aae8ebe09d4839a9acff9020082039c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0227cbfed9206a7e19a675e7968ab2731103b30a8ee02f8b71f821e40caf3cc08a0355e85330da01223cb65521fd6edf5c9eac05f244722242c4871ea58be8425a8f901ff82039d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003259f6c5920a04004ef5ed045de184e859ba593d6ff255ca62c747caaca69445e0ea06a6fa4e46d6b7d2840ee202885721fcb26071f8bfbcd19f81ead792d7e72943ff9020082039e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d588cb780f47a3bd4babb093ce099034f9d9b8eed4738fbdd14650b036e3659ba0080223f0bab5fdca3e7c0357b3e4c86d030ff911ed32cc6e14d092ac1fdee663f9020082039f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b3382d477ad00be8e2f251eccfb12d3a6a23a7d0d100f308507c80e23d1adc50a02cb0b430ae33e724c25bdad9f387a0e7c3eea912f93ec33384cb2f728dd3d6eff902008203a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d9cb4e4f2741f1b7c7d917813031ab0f49a3b546778884847ab54279b6378e8a07e5b26f6fd497d154031095395157d5cd1b44b51a326d429297b2431d9ddfa73f902008203a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e02fe63585c5df106673d3529d0f1a541491bc54c3f7deaaf1d6731f385755c0a01c37653bce0b1ea0a35819d4d8a518cf7eaf7b5eebd4d7770b88c1555501cdb8f902008203a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cc528dd5a0725c9c93bdff07dd4a7911c107f6c7bf4a65704072b7361a9331f3a01e798f43469df8da8b36687ca2866f8bf492283b8772184f19da42aec7ae3693f902008203a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06985eefe1076936c78c3b388f2657444f510f4a1665bd64d1bcd0c94f440592aa01ee6830914fef83ca991845a0910078da5bca5911cfe3f951145e16ede487d1cf902008203a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bd1c02fb1fb09c052a762576443d7ada196539cfdd770f5795464b259869d1cfa078d7111927e9adb81706ee0acc2d85ed332ae3e57cbb5afc89f80edead21f53df902008203a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072d613af58b5a5ce38836f416bccf7d5765d6d90af6d868e319439e336387556a046f1dde03adb6d400183fb8212ab530a18e2a0a1c89b2dc3ea51aed4d28c1744f902008203a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0701d78f1b7023c8f3400d6d7aa65240d0fff7fe68a7dd1f4944f1e45ba896959a010efa10c1b7f598ccf11c21b72a266b8f295b64d12ce56474925c89096e6305ef902008203a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a041a6c9b9e841c37afcf7c318d9b941bc563d48ed11f39eb9da48f5b4e7d9ff36a07239d79b639f044501b214c9dfb15e2f0631ccf82987e53c7484037502d93b71f902008203a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09c393d00457684d6e886b81d7633e414443b2a6bac3160b74bc2f923f7440a94a00ffbd50345093a17ceab1c2ba700a957b0bdc05434499e3353ce3d9659ce3287f902008203a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01715168cea8ca29d7100d4c65e6780a5470fea6f56eef194fd7f4e3fdfc4d537a047d6872913806ddb8ef627ab3770197479488117cc0b467218328ee9cc768173f902008203aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb719b998d977e83ac8491871dd4b61d7860d7245523bfffa0b7e8d7d0938377a0555b5fbb0ffd1b56f2b66ec86ad926b9ca7c2c634ace78f3eddb89aaef7bd75df902008203ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a006a19685c9e9cca1f13d2461c956fcd903df0a765662ba21984139bb4c9fc7f5a03f4675d26d1cd0025ef09b290f328b20f775e6290275ed59ecafe9ee98eee091f902008203ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e3f68607598d9efecadff0064c4f5cdabdec66a03f719488cb25986e96c65d8aa0289b30be02b16b32db2bfec07c810ffa8a82f37940a5de1e991c8464798acde2f902008203ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0104ec351cfbabb42fc190b7339cd56197c191a051300c308e00b5e2e98d3991aa0559742638777927284817c7c7c89fca5952a2da753f7c70c288a4bf588cca3acf902008203ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0239789ff943b0ab18952484d66d1850c0d5e5f72d0e205eac72981d6d5bb9ba8a0574b61c803ef00eb8b5ecb46f65bba646853fd8221e2b43906f9e3eb02bfdda8f902008203af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a027986cc2465c907cdbe47ad04b4b3c1c8579388fc51e06291e2df32ba8c47589a0535a1ee0445c03399073a396bd27ea78c7f305e0f4c1d4575c14be171930324af902008203b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a098df876881eeb804886d2688df1133b36acfb19c2de1dbf86414d90ab656535aa06b6c57385e25a7287b4fce8fab6822f7a9d43f27317fca7430f5eb97b6b74ed8f902008203b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0668f20d5e49731cddc798d8cbb3c66942898b72bee20378f5781287e2d917e05a044b9505d8bcadb774f057f35db800641530a53bae47f2fade142523a889b46daf902008203b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0026fb0df57b50ca14842f1b819115d0ffc4e0b0cb5ef4b9a533e3d32a70a92baa02b476cdc4b9ac2e10d2fcd5dfee04cb5fe53a10bccba856b5f464ea0e86ebd4ff902008203b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eadbd7df406ac5cb47270379408fcfdef1b63a5b0afba1e20dda3ac49907b417a01e1bd46959ac309e55e451de428919dbcc82a6b5743d78e25d189a5b201c20c5f902008203b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a2e9002980b5ec8676f724ba8b038ebd17d00ca147be73d48b0a5f463b5a41f8a019e29f276746a52eaad0bbf1616d671d3bce8cec9273fcced348783d1f445c37f902008203b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05b63261c7996cee0ff27b2c56373db9f60ec7bd81fd82cb56d981aa10ea40442a054d4930787bfbaf402a0ea8542e4fef36e5d7c29cc9a4601273e03e450fe11fef902008203b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ea5f8096249c4f5ef1a787c44d2f40e6b6c8d98b2bc95c4e53771a3522de8e6ca037bbfdf3d5cc583a1fa92db5ae25bd0c40c96f379c9879be83edde13d8647cd5f902008203b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04d3c61c3a7d2bba751217ccf22834bf81add13726de93710fe054e690189a052a0793dcb95545e9d756bbe7db439a78606d5b6797a9aea324e9000ec6df319547bf902008203b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07988a8d13d48d2059ce5174cea2dd8d6d2f4150e275659a0a154008bc143c3e8a05d5d1d0a4c8edb5b9881f7239d4abc14daeb30a3cf720ea2ae2406c5a837e272f902008203b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0194270394b93d0e4225673abc283848dcde7b6edc9554b93ed0ab351f61694f3a04c6dcda990dc0e8a8a883cf6633ac36e16f3ac3eb0bedd1ec11a2b3247fdbde5f902008203ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a029f982473489c6849727fc9bd4c1f3923d5d7145f069347789e03b2e7d9438d4a07ebbddbb929b4e7e294dc9afde4cecea2d2d398c8b39e29a06760bf241328446f902008203bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07dbf74e1841dfdf68b629781201e0369917e2aaecb274861a3aaedf4083ba7f9a06fc25f85dd0a432f925069c2c403035890af4ef0eda8eb8e3e4d19ff13fb05b8f902008203bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0de2fb76a2335ce042007a273bcc8807f009e70b13f805f1bd9dcda3cbca06d8ca012e3f7a22104f3e17d8bf19bfe69393d6a77b65e5c5c0e6bbd9da23c76daf50af902008203bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cf32d3267233bb64f4acd35d289acbb2432229102590d38930142169dc9e2c50a0571ab5b0febcb01cdead3bdef0068c5bed79a73824ba3056c6815e88fe92e30ff902008203be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e1c627c7b0f5e1d72f850aea36d4be7f02203faecd759f5c42960ce9dc0a0e32a04aff87adee896b730cc15190acfcdb855ac17b4d5b3e8eb36858a90fbc1c96a1f902008203bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07201ecb26f5317a01ab3718abfd0f7133325bab39d5b696a7fb93e51fb3205b2a06f740bccee361e68eb949b706a95d40988f755c661fe27383998594b5c9a1f41f902008203c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a031bccc5963795eea499f35709bea61080c3e0d7dccbbf98cfc0d769433da53fda01b4c0453b0b2b438bbe495c2432ee91d437ebe965aa3aca7ca28f8f4284b5030f902008203c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08f0b2856efff5241fa1c3aaa8d9164fe4b45f96fb1584fc3aad762fdde7aff7ba0648d93050c001cae6e0e7feb240bb1af22eafe65938d85da9cfb7f1f88556ad0f902008203c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a083522f2d2ba48444f20a3e0f24b3b55ccb05cc726d9627b1807b5e6a8b2481d8a00a9035ddbd2826c1b118142bc014a8e99464b02f42d208c00fe9b31d8e4f4aeaf902008203c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a084fc6fc7be168b6419ce7b23c1e975ed793addad41207014cf4f420881419c74a02ea1f8e28ef177d4cb693b05865d95942265cdf9f9246860d271eaacfe34bcecf902008203c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0165b4816c0b29bf882144e28ee54838714c44cf2489254b787757a3f6f2d77e1a01f6d22c09d1ef42db621efba63ce49e70f5ce250c4a1d963610ba4921fc30255f902008203c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c0ef78da4bf73429958644c3774bfccb55316cb369fa0dc80da93305c011b169a0358fd049ad5b3dd9aa605215df2ade31c7132e01a794837e3874ff1eab224304f902008203c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0253170ec8261ba4ff328c244dee2325972ed2744107ece15aa5e73af6cd8ba11a0033141449aee68fc8d9fb1a03f7119f945478977549ee684b78db26811823459f902008203c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a099cb0cca593f0dbf29d559d94a0f200bcb63ba247d3fc749eda90c4a7b136a8ca050ed1f3cc178d3a6850cc9839a2ca81243c4233d666363521f75c3b5503d4bf4f902008203c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aecd0116f8bf5c437868ecd35171204eaeca94551e07e5d5ce4c75e57a34a379a0388bec8de2a8b6c30cfc0014362bd2be336d3e09e4cb8a04659f21da445ca675f902008203c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb3f592c1e49ce2759bc0ac2a715f60cc2fc247708ed7c1cd3deace617e56b8ea02a974e684306f1c0ff89cf3debb1cfcf1c7ecc9589acd6819c2f999f00be8068f902008203ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a073b72f997a20959fbc409c46ecaa32643f661c879345eb6c891bd55b4a666015a03cf356e806a277005e1bce0562ed2b84bb9737fbdb85e7b09c200a39ceb54df3f902008203cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0abf9e2104fa524d69672f8583fd25eecd817bdee78769d955953f8fea49da3c2a018623483151e335a07d13c7726a0881cea9ddd9dd42c679ef46a91d67171ec5ff902008203cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04e5c714dc3715646efa88c788a16da5840d563bffe96f8365323905f28b33ecca04739fc9252412a8da8ba5d485c48a9f99115d6fef03a7cee308c68a46ecd2083f902008203cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04c6c14be20fbb01a2de4ef2521523248207f0ae86b92bab37f8859b8309b3000a034ecb762d61e860230f0f6aeca8888c42804a7ec5feb6cca6dd7aba59cd0c786f902008203ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a090ae026e14be1a2a806782305eb7ca9c1e7216b2f40334724999dbefb7cbdd7ba044bf624b6b28a38d1ea84f858f5b758016fe3b46e456f37699d0f058c039b84ef902008203cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c9a336b2f37dc8fd193aa7381f13922f2d5d070b9bbf0e6d6ce9cf6ed93df827a004000bdbd5ec44bd0a056ae386503a431b8af133692294539074d96f076032e5f902008203d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a065af49f5e1dc049a419d044f76b92cb33c363a10bb25568cc8e8404a7aa800f5a074d8449465e87364f5ab83b3fe77f53a95bc028c64dc0548f336ff1c3a86ca06f902008203d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08518b86f3dd99c7b04c275923d62ee117142828b881fd7455f68212d469b876aa0331135126f9e3ad93c8c5b42dcf7a0c0a9895807c13681eabfbc147d2b0122aff902008203d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e3fbc7669b2f601ee261644acc3e788da66a697cfa54538bab50782d94c30042a04032b44d66f2470dc1972ddd789f7a7fd710d66a78f2987c56b3e3e05c8a7904f902008203d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02b33ed97cee0dffcf69e83f61dd20eb9b597e9eb4a69a379a34dd0e9edfd72d2a053f30c94d8fd5e8bed0e7b4cd865a939f0063184dc6ebdd70e01b4f44c277979f902008203d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a043e0aaddcb03e14e7bdc608821cdd08762aac2256ad430094cd6cc2e43513ed3a0397e475e3a4a66b33d5fd23c32c895b6194405123f93697368942f8af1a40d10f902008203d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01c979f15af3ad5b0eec126e050437c53beb1c6519f36e64072a0a742aa783e59a05e5398cd7119ec46cb06127824ffa28d3f87ca39bc9348611886fbe5466eb1e3f902008203d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a7f3cefca7ca56a3e3893b2672faeb901d415c641eae67ab512f9eeba019b67aa05b89586abf791f2f5c2fb6b8deffc46610a971a16524139cd3d23bf1b5c5174ef902008203d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05f9a4dfdfa301d86b66f05e387e84021867efea07f5f56051fc6c90cef8305afa04b7a2617b69a46f7164cffa3fc78321f7e91bba4bb2d375b07ff3c4ca4738093f902008203d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02c81670dd687c860a1c946fa93c87d33d8b98958172edb0b49e8f5e97d85297ba0522dbfd6a6d8c1759b60f06854a3ca6d5bedf76b683bf79f50890325f10a2fd3f902008203d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ddbfb4d12707957bb96c4ade0ecc4815cf44fe8d752f3a9e4428bad775330651a05ac209d941443c9786729f766dd6ae5484237cc1cf525306d8e7957f75eff153f902008203da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a090349c9333f16207fb76e1c3cf72ef1722fa3e601bff63942f98f98f12ff74bba070998e169d7c1690753f1b6726733f41f1283e7c5f6ea6bd7f87b68fb7bd9431f902008203db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a057c9a967942d0a985e263dd00afcd049fe729a2b5e61922de58eac143d114ed3a05ee50502be8a802164f35e304415937ff00d33a584b1edd19b7ec260899a4460f902008203dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f4ffeb3a0aa04ed70cb75899d0da9d16caf30989f11cb8299e666f7764bdac04a059ec3487e9ffa9d6b20c80ca4e0d6a01f8eb55fbcc53c04732983a23dde7ff21f902008203dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae241993216460fe0bfaa3342ea7214439ed914d44ccb18540abb8bb421b32fba049ea9f06c492ed09899694fb3ee8a0f0849e027e97b2fad479ea183f094cd730f902008203de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a026fa1a5f861066bdf3c4bb471c7ad4e670d3c1b4ef29df959b0364b06becca26a05cda18e2dd0b892bf6d72cb92e1d110cf5a94178b668109bb227ae5e9337fd85f902008203df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09e3140350627ca0fa87ee199a45d291c0081740f5382ce4c8692a7e002c886e0a0498a26a0cf9e9eaa4d694b0fb1b9104d915ae96e0accc6a797a7ec6dd65b5ed8f902008203e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06e7b99786ce0251f967f67e6bebe7960478a7d1c733716742eed201d9337ae48a01923a45519481c8c36f569e50efe9c5814a27604121848169dde47630f741c18f902008203e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08f843aeda2958e7e4143d187968edbb293ab0fd616605c62f8fdf4163ef4191fa00d0bc6203fd051ecbdd5f4d4c3dca9769bd531a3f397e931416e478a525f3cf4f902008203e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cbe6aac92db30b2f25923f35d32c1ad290dc6d8b92adffe7a2a4c5e0052539c8a041c17a20929b500dea0c691a372d212e216877deec15bc52ae65c2a4d6882cd2f902008203e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0665aa270ab15b467fa429999a9a256bbabaceafc614e93195da7e9a680f236c1a0632c727462d78181d0769c5fcbd128408cf3908167a01381b4338887dcb469baf902008203e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a073ff436ea35def919253eaa52de2798ac4e69b5a3b966b2b024e37cdd4282db8a0092bc98aad0a984ef9f7bbcb6951659c6de9cbf070422f933d99a8a9e133aeb8f902008203e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a096949201ccd93e477d5a891522cee3ce44356d991befbe5274b2d503b8d1ddefa0478ced0c00ee8fd09ac9d79c709c2737a673ab8cdcf219620dcd525e3ca34122f902008203e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a3bee9fad2ca19eaaf16c6be2bb3f5893b9f2608dd1f3da470baddf47c3edbbda026a3f3d826e52bbee44aa83681e9ee990477b7e7b10c36a87e615fe85ab8f0b1f902008203e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ba0274738a5298ff614af004f472e200cc1aba73fd10d2cda923f8c5147ac5e9a079c451363bc8af428f43d43ebebf67873fe06240de7045dd4dcc64b2a682a714f902008203e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ca0ee5d093c232264d0b23ab100aefbd1a50f56dfc248fbdcf57c7c8d3c53a10a009300167c9ca40ee33f38aaefe37c362f069edee10b314905438024843bf4c76f902008203e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c4df028dfe9506ff1406632cd5260de2762ef95b8b17e28c44285799dadf7c77a0546e088de1636b228d099d09423e62b2d6e06f62d7890863430d5d83d686959df902008203ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e353cc831f9829fa746a1ff153d4991e89618690f56d16d6b50d3040abeb9c9da06d44a51197d37814810ee0a295d8ccef81a0e12f1468eb6b43e5496aaf183a56f902008203eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b7eb662613afb9b166d3efde37ac1831de7eb6111c385932193aa3f5103255cca05fce21c0f62886f5c71ab7ef35a1a59eb8fd48c573b86972e283a6d1e72ff5f3f902008203ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03d49792a68b8b1dbe40cff64290fa23705d7b085883c56f5b4449826cedb7583a006009978b9a6c918627a0f5105b2f032689b1d9f797ff38a074ceb1258b61272f902008203ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08854a635339056fb80769f229cc4297c583d2388e38eefa13c2584d9181a0f6aa061d93e9f58fa09958c9ec70a1c725ea32cfd75566a367cee2eb85dbfd0ced438f902008203ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bc73172155e7f92492ad40eed0e9862876afaa1e81b70fd5e6ba235bdc7aa9c5a0733aa777804bcb8f5619e3898d3ba779640923d3a74b62ac4b5456a007d9486bf902008203ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ad578e1dc19d85772ea43b46ee5cb1f7fbaa507af68c5b6d9280ef6af1376518a057d39fcea5af4ae7dbe1b195e7fd51f54adad2a52064afae0cb195950c4f6645f902008203f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a6dafbca589213bb87dca7aff004503ce089495c283d6120793d96564bac8090a066fb92c13b82ccc5282ce59ea43fc595fce297268bd6fe2e59d7871d9c5a1116f902008203f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eda8cc7ef002dfd289ccc2bfa04f4e336a41ea9a5eb1eebffe2acf81b6e298e8a07551441504391a9181210bc0dee8dd95f1d45625c376957749616adb3f0f424ff902008203f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03354a96c1bf5a23be895fea33c5c2bee53ac5083d667c875244594d8ae7e1d7ca03ec5dc774eaa96278be0b0c8f54c1cbc9514e9f0c5266c0958f1c4693030dd99f902008203f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d4886203c3454143aea54d63670f5ac60a8e05f740a8d5c9aeb250f948e841d8a067c309dc654fe6d81055cae02526a0eca32d8d4da574cb6c9835ff238a3bc2aef902008203f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01986f529194df80705148282de7b82fe1b35213c4347a9de2111daf4d533dbdca073154b519b8b4a22e5018fd7e6c0180bdb1ce6e4ee5c4569c7d2f1cd89f791c4f902008203f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08a0b65255f6a414e2def13e14fdb4e463b653ef9aab4fd6e3ba09fabe269f017a019fa295650d72559a6e69442fc97c6107fc610010f214ea5f6dc7fb370338b80f902008203f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07f12aac702cb2c5b0cf302891ac0554a0500b144a17df7b9522a9f5baf55aa3da07500f48a2743a7f85ecf06143f66f3f59b189ff2e55a751e923b0a3d782ec628f902008203f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05305619350ec6d2ee9df49ab452bb6112e9b191c4da281f483905f6bce20edf1a003f77cbc3d6d02ad9d2f7a0421bb9f61096eb1f004dc8825b81ce7c2f3f9d82cf902008203f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b17e95e03ee46a81ea491e7f8461b74514c859de4925a7e044f39ea456541bada0674efa931297e21377e835daef9053325fa7de575067cc1f26617d82352de78ff902008203f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0182006e7df41edfd06ca882eedf59bb97e7f99879a2e38446efac7b9bca12cd5a005a1e643dce4e7e3dfbfeff8db020f9483a0305a21eacb6202069a391fd3ff55f902008203fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b006fb1a8e4076d828d508430bc54c17ccf797ffd5fa11e1034b23c11581b519a0059986a224689584ba022d8ff9e14c8665d0dcae7cbec7bb08fe2e2322d239b1f902008203fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0445626e120c605faa5b2fbd877b76e3ec0a8b4c50488d53fda22a1b4c87820caa06ed6b56cba3ae4051344bebaef23dcab12483d10619102d86a1f37d39e081200f902008203fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0df7213314630b947ef30f5eff3fa016b45b5a3599b76193a2b910a200ff8ac8ea07a89c11006115d2cddd79adcbd8f1fd05ab83804d5e4500d0fd0458da38fe68ff902008203fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0976954719f17f0e0026b4b02b71a8919387e377fb09990dcb347e9bebf93b312a07bc9450b59221111985580cd8e058e43dd836825a816994f179639f714bffd42f902008203fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08eec2ff888c3e478a480d257169047048b186488c82b25d78ea13c963de5f900a04f46a8170c7a70b6cd2193db068ad8b24c2c76755d0ac101769bf0913ea75615f902008203ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a076eb106e5a7fa9ca27adbdb62859859f15bba4e97485cec74d8cb159ef5102fba01458c77aedc4b8a8b2c2ae7f2e124aa8237a4abc8f710cf92244f98234c613f0f9020082040007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a066b7935e08bd51e327461d9edcbc774b740725d617c10e27c0b30e7061f1e963a041087e83cea215bf25d10e168ed643d991ef7bb545dee1b2c3673ba3ec13a135f9020082040107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd81b8143ac9ecee162e031020f28f3a018523686169fa424f1afebcf380080aa059f2d219d323dd15197cb7b0c461cd1dbabf091b76e6cff5eb45d0a96db39e9af9020082040207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05be10392633b9f1a86b5005811c10e3ecb4f55d833892b9ee7d6c1a1e9d5e38fa007b1ffb0f3d9aa2680b277fe2a083fa1e086da5588daaf5204b8662dee925d0bf9020082040307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ea2b51596cad5ddbabbfb971e35905ce006fe04a6c2bd2e30bd82a1c1cad62daa06e0675e4722ee51fdeec1e075c9a1f0ab6dd3cfb853a1d24d8c3ba563a7950dff9020082040407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01d1173939181de868baa9be2469f3b62b1bc9a31dd14b4ab95764f83102982cea00e696d1da4c595b1e387558df996be85f156eb61774f50ed279c74168ddc31fdf9020082040507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cc3a49969fc7e1d48f4904d5005c7f78f32a09df835c0d6505ffd19b320474b3a02e77eab8a79d025876e85d1fc1e19ae03d7c140d57ece0d96c37cc2f0bd78902f9020082040607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d8f6eb85ed3181559ed5373b61d559153751b80a15a8ae623bea474990c72ebda02d2166b0787980f2aeeefd2eaa7f221e19fe3a97b0c88086fa638194f2dc92cef9020082040707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a013801a19df0370fa3ba98f0fa2555f1db41cf2dfc5dddbd33488e250bfa666aaa03749e3a5756051d8c8c0bbd267202bcbc209e0c5ebe101f8e72b09ba2aec601cf9020082040807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a008740eb0b33761d882ad55ef726477f8edf53dcfe757a3aacf38469d78fcc47fa02e8059011340cc5c9d178610b39e9cb4547bb00174e59340cd5d992301de6a7ff9020082040907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a006e37582ecc8d021ac343523513e534fc87efa3c5128597a825ce313c22ebb12a00c79133f0382dfda37df46961fae1d179294b46f706d96eb9c247b4f7b8abbfff9020082040a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a146f2be5c60e7ea2e585327dbc37e25075da3c3919752f5fb8411d9c2be0e53a05bd7f9a0f079d07820fbf9f8d51b5bec295749dcbadd544ffa0f5754e5dd5279f9020082040b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05493e48aec9a01f8a88f84d8454ab5b76d664218283ef014846c8a7c5e28546da01727edfa696503696e41dfeb73433bf76f6a26c063e6d240cfba916242bc10dbf9020082040c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e6e0bcd73f26c0249a5e75fe78cf05143a6178e2008753793030dd91da02dfe1a0366674fa484c64cf18f709e06c66422785bbeeb8f228ed7b738982bbe9518b2cf9020082040d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0474d57b9ba78c736e3bc7812332ba3596f8ca1210f5879be1223271431be918aa0224446c56a04a3ed2f4aecf0ab72707104b16d82516c0d7858a7109d160b3249f9020082040e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04a11af1c549ec772da7aff3ba54d091337272810e66f76e6786bdb2814fa7a84a07e1993d4e757613b648cd780ca317f3e6a9f1458c396dff9cdc4cf2b2988504ef9020082040f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0462636e56b8f95c51d8e064fbd6183199c7fb2ace73e9b932ced761527b35e7ba03cc152593d4eb937b27e616438c887f659f01e72ddce63ab2692d3d1e459376ef9020082041007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b0986871ac94e85f10b52cc4244177a25964298abe817a62a99616e8a4283c56a0719ac4ea073aff3729ca1ec933f4018d36b424167a447c7d61d5b3ce81ac16a1f901ff82041107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d0f1dad156fd4812e98aa1d3a699e000addfabeac07f3df48ed059567b91ef919fd5bb6b7f819e411a895e79a1dd691fd79ba62a3d6bf21586f09a0565e6c3a2f9020082041207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a026e4ae85e507d2cbed6fff85be41e05bdd7887e2d2375973fed77576d4862840a059645343cda2e66f5b2436190291980164bbd81ef4c1add0057b2b29b0fb5b40f9020082041307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f38d78e7ad9a0096be3793490824fb66f5e6439c4e3699be5ba20be4f63b615ca0376d21370e7cff621714188ea8d4623a712c56f6cb10ac16bfe52c52354fcc24f9020082041407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d40f615cc9014cf29bc182c6d33ad53c24a18567903ecb21ef69c5329df87ea9a05e1baafec7299b164d0529741caf056128604135be1902f97b1cfbe2c976ff9df9020082041507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e62b5c060425e2710c6baf5b4a2ffbd4ef799afd4c7ff1db08d5382563412760a07136d616da12f8dae2228d0ef022985f30798564a949d508ccfa010d5466141ef9020082041607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0832d2d414e867657216485019230445dd94f401188bc7d9dd730ab1bbcff3586a01bf62105c8bce1651af77cf66bc28a9d07d19901203253c1655f4a59102a499ef9020082041707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a039749ac989717407ec83f61a575aa22663829b44f8cc82d8f140570dc3eee8d2a073189b91f55654f7ce3028ddc445b336aabf4725df526c70fcc138dfbf4d2c7bf9020082041807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b42569e54fd99b720abcebf72212501e77ed81044e90186ef5cb0e5030b8a95da0285c2b268deb7a1220377b307e43b2031d7504de9aabc720bf09943c2cc52d29f9020082041907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0050a34a5e5c251a2f931a47c1ad35aa95d9428868c64e1391ca692f5be499f25a04d1099b04d3d3f089f443d546d4e78c4f67466a3b3dbeaeaf5b684015513a255f9020082041a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07a41ba7d7d2741eca2a63a3aa0e07cfa177a5a49f3aeb84ee7e41859df4daee4a04580304d7c818deaae1fced0e5d1acc5ec480228c4fee08382a7653dd50252eaf9020082041b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06870ca8533038b71e1aa27a38125e5c5d07feff6e1dce24a1f1e357c2cca74caa052be9fa1c74e3152df7a48103d9aa2170389aaed10b2e903ebe1e7ad60c37aa7f9020082041c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb2069b0af6e58b34c9cd61ec88f765105c3b3c3b250a14c24ab113fd6ad8423a048c1e3f793bc7a4ae2d5caa5878ee42a7c1c102b3dbc0179d56cd3877e3c07baf9020082041d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04f141f6fb368255056e5646d5d1a80a69523b0b9bb0e88a5ddc0d4e1b1b5562da0648d2ace1b378bc7c1e1d6a32c8fa1605cb3f7a3e9018a1bd16e14be60da6b99f9020082041e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fc4d03165f2aba2d9ccfb1f60435b246028d8f0c2fb8bd8e62de557d84664897a07897ba7dd6d0df6778e57baad1dccf3ea6437145903abd26565acc75f56690e0f9020082041f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c0bf71961c671e0e613b72e78341d9644e4b75bb5fa566d39923a45df2d066a9a0394bb46d89ed2c8bdc9f0877a2b4a2ef965c35ec0abcc220696ae01306f69aebf9020082042007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09184d16a338afd247d6c03dba68d78a05b259fa7d23def4892279cbd9a457caba06e2059a343aa188523b532b6ae51d32e7fc16c5fdf5321dee506b65298393f6ff9020082042107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0219e5d7ef2893671bbc3617fb48b1b33f2c008f8c5aef0847636c2d19d307d81a07093dc466743a5dd98509ae27abf4bbc563d4d99f269749b0b4577b55d017f21f9020082042207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05be968d84414ad32eaba311de5c6a3c39f3d24cbac5dc57359de976f4b51b887a034f21c4fc2d740a5d7d53f686da26823cbd6ae9dca1c27ae4899273dca4ecad7f9020082042307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0850fee46a01188815c356f47e8223cab207801c3f50fee5f51618e73a6ba1c52a0630f91caa8bb60a4089b1e558f5d1d5b7e634731cd5116bd876aa44157f7ad63f9020082042407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ccc9250ee0c8bd457bb01f22ef195f043e990ab228f9c08ab701dbbe48fae572a00618dff62570a9a859408cab924f8f05d87b070e1b268fac6c33062163e27600f9020082042507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b841be541f5342545421922ec02f137d41250943b1e9e475aac4434369a859ffa04ec3931b38c6093ded96cc649856535ede36e1478422197f105270ba812440f8f9020082042607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a058e85c9262d44c7cde0bde6446550677cc6d00c80e277d5ca1e66667493a32d2a004d132b86877d5884c93703f14f033422619478562e67ad462d2d0f06bccb1fff9020082042707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0da317b121cce2fed1015659267be053e17570cbd827f785131ef49b43fe5bae0a07c9ea09d920bc429908d1d6886b2e9e8e7815d0c0f9ffad5fbd39d98571b8d8cf9020082042807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0553e57482c0efd570bd119ed03e75adbb33cb2ffe151710e11fbbb86fabaa454a0326c2f0b420044b6bbf95a4da71387994f96e25c9da30d8720853183100a9e25f9020082042907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf646a8865b7bccc71bc1c71ecee405217ad1b9304275eaacbdc1e7e2609039ca037ea131399f105544ad925edb81b9b21646e55ed48c25790c07371f57d5a5efef9020082042a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f1bf32a0571f089db7138ab3c1978bceacd79e4d8557853370f782af8f3ebe9ea05f6b57039491f279baff4af8fc3cc149ede235efd14c5bb4439b26c3acfab1f8f9020082042b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a003c871d01046860a577017067faa0d57d2143679d179f6d24921f925400cbc27a03ef060e4cab56f6f3ff786f2b961afc93f6f1b7b6ca673a8d099d5e61f66f08af9020082042c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0555f5ee1543f6e3171f85f9e854f5d51e17956aa4b8723d443662dbcb6ff54baa06be946bbf7b8766b754d39c3d8795fc889b4728f5579989df7a602eba839e61cf9020082042d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0afd979a240e0cec76d6e33d705d40a68160392cf46880275798a5c601d44261ba072f46c2743dac2da6b169834c38e361f261b83ee85461a78ad0875f240561eeef9020082042e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07622b29040b2de6282f511b7e6dc2f21b254f0f8f2e9f5340800b597426b155fa0711418d975d5d7c1b9a99f92b91a664a9a5986bfa26d8b5c52031dc1b1db3476f9020082042f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a089caec0c783fb413bbf5097e8fba20ee15614c04496f44e79da84395a8717cb8a0295f7fba781208f9f68d92917a7f6e1a18db04c48d82200f18c300c8a70bb655f9020082043007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0310f57bf34668ab8cb803e9d8037e931714fcdac5c1204530ebc2ba4d4f59193a063cb2a18e0bae9b1ba0b49086ae9700dace21bacf09192fdc8b0a76da010ab46f9020082043107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b6ae36267c243ab190c1d91b1f08abeb242f37121d5569a6e07508e8f64e3daca0231c6cb018521d27d725aed126ff398bdc297d7e758201c83ce8fe280259c402f9020082043207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f65d8fc08d9a38412ca4f02823477d150c264790f1da650c548950a050887b7ba0189e594c3e447725f4c0ada87ce1aa09936e0e06243fea2af9a7a7d9eaf222bdf9020082043307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04840846964d167647ce817aebf3e9f4ed9f634792d0af20ae7972e38eb2ac2dfa0170b171c48c83ca87d27dd9aacf2a47c57a3a100bfc57fae4d589f0f24d930faf9020082043407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00dd2b0e64a42c2dcc30dd7869750ab5ee6a23be1f3b34bf24abddb2d3531c823a07a9f7cbde05f099139834cb2900c57e13d740c02d71a0d79dd80a71447720d10f9020082043507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a062084f7fa81f245caf7ea1df45e2286132805427e5e798d4d2b9a0644873ab4da05245fcb272942795abc10fc677618c51ed6614bf297caa15a567d03083619d73f9020082043607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ec151c424220a3258b379e656dacb6f486a854910c378c32a11f43135037f68da0541befd36d1654022715b66ba5b2e13ad6dd0257a04ff278a32a5b36650ffc9df9020082043707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eb18063ebb451f9385f0669612726031823ded651b127496974a69a409da015fa04ee4a8bc1e1f69802597e92d4a0fd4d6cc2826b50c7c30b2d2b4163853b266def9020082043807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a027b95f7be167773798111c20db098fa1872b99ff7e2db9aa006821fe763b8133a029567ddef33aae07f1808ed8a77d476188f9d46ea9f0a5e0cd64ad72065c2a24f9020082043907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f58a1e802d9b5aef08dc0e5215da460d8497bfa70f58d9fb2e56f0660115502ea026b4e5ba64a401221da397736cb7d6699e5aaf7cf5e094b8492941e9dd31a30ff9020082043a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0240807dff3066162b4d3f7f1b603703a77640e0d019e75f3c44bac64becad051a04e3c7118c5545bde2914b4f0550f92d4a1ef609c4e38ffca1f501373cc59093ff9020082043b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0888a37ed98e16d28b3a9e33c5ee02d92546557373da5d9b2f721a987824d384ca00e9592b6f07048a841b849faa3b9710366c5e237f4aa7e1dcdcf94e6ca1ca551f9020082043c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01cbbb2a0609d9a72d69e8685581e6d3ec59045b2fecf6d8f773760c2d55d2386a020a7508d05bf526f47a77e9a2520835e59292e071a37a7aa0ea644d12c6af2faf9020082043d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07b11e302bcbc88b1e96b22acab9c609d9714baf0247a1415062814b59bec788fa059a4a756e2c9f37fc29c7f16a2e47eed2c1014be0b3c8099fbaa8d23b15b7049f9020082043e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e1aa81be39aa518c0774ebcd51ac3d89bbb21ee722cb0170c3f9aa15ccf04755a077dd29286cef916e97b5cb7b0c4f3d8025eb1b6c5212ee9704a287f58da3e2a9f9020082043f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00cf98e33828396fcffcc923fc859049412905b5fb69bbd4415140bd0471ac95ba0618acc1a8c9fc9a58664294ec1f61e8ec844d0fd7182c292e672f22656c15a9ff9020082044007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0858caa5e5abc947d0f394cc4a1d4344342acba3c6834496e549104ddcf870697a07d0f4e6ee074de14ce1cb5b584399ccf1709afb43fefe2ddbe2c5196185e63f0f9020082044107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d5dc66f8ce591cb7de0cb53c82dd693df3e434c6fd12e6b857d15424c24b641a039a05fd30cc35c1418bbd8f6001d4ab15a5f0b811da75f695d516b20862ed107f9020082044207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0da897adbec2d630020296ace94124c147fa4b95b883fc4707f5e8064f76f960ba002b1c8c2d9d0a3800b24c837feb76ee4f069c53dc86d528e16d2f17a2b087db2f9020082044307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd3690923875789befd7a9b1011e1b2e5f7233ae8083d85dbafb7561a68bbe2ba05e0719b2777435e430739a5c021c5cccf9486b2cf7ebf2dda97da6d77dc542fef9020082044407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a068829af0380f266673eba8518afd83b19361b68e96294ec9f1d057c03d35d9ada068008308975d303a9691a9c4257bea696909cddf540995cdac78283b719ce876f9020082044507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a4c83087203b55c2a7771a354441bbd8523ed2011ca6539b0279a676771b5321a03d25897c496fda7c9c29c57b6d38faa4d004a0c480f8feaf040b017ea56d6345f9020082044607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a084c4f92c627c206a4e2a2bc5a5d9ee5471505927100d3b6eef69b0e208918150a06a489c43e03d4f88c6f4b2b45226b568411c9677d4a04c7b1b951d532c1dcaa6f9020082044707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a043fb4bedd8a8c70a1f78591a1b59aeb24fd0cf0d17ffd22e5ef75d5fc129e42aa022f029edfdcc35585dc436c660818e4674fd627ea44806c0ba92ce2db4981cf8f9020082044807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05a05b1c00cb9a517d6cfb654c9cedb42ae923a75b4ac8d9608a66517b1264044a070790562b326f822f4b6dcd7674b3b2b28b4bd25b14e1d94bbfb61b621c0b150f9020082044907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a035a7f9ddddbf9cbf43ddb149cd0574b3944be6055c7f6933c879effd2d84bd99a079675dc53987e2a9a97a60d777d9ff087f1bc64e06c5b67333036c5b6a54bef5f9020082044a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09bf63c8b4f971bf575c5f05767bf89299698f05ebbebd4fa7b148210570efacfa063392ce6a4ee54aee4b71f290393dc569ec1d923155b1165f933fc6ad79b3593f9020082044b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fa4f2b7b07120a2a1a683982358220a113b49b2ae54ca92107f3e0e0b80dac8fa02a39217978835b65ae9a06ef29d89c64ee38216b78a0afa206f528dcffd05bcff9020082044c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a72f827e76a1eef4b8f0b860116061921c81d4cf63663b04defbac224e306082a07af74c85f35885dc0e156e803745447462b04b803ec8644634b2f4030b817fb7f9020082044d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09bef898d79b86d7ecc051d70241c9d103ed2d2df37c8393fede68feb8c3c9e2ea0529433d98e888abe19959355504573c813c3dc1b003bcb51b604020ad9b2779bf9020082044e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a0a598ab73006bfe94baf791adac912d00648f6e5fb4a7b859d4fcf6ca16e451a0702173f98570acfe15d0860880f4b59f5ce5873732be61e174a6edacd55dd744f9020082044f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb6619242147fffce361c2c4581e9794cde6f51cfac24e6022439c44ee4b9463a0794919f1513f692f28068cf88a2241de38558647b033caec9bbe9f9558360febf9020082045007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a58bb95fe14503978860812b486fe97d5cc2fd7623a69f5813e581d2f25b1908a03022960f82c0de1e77e5fba0ad12f57b416293f7276122d959b228d47c064c92f9020082045107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a067708a18f41b5908facab1ebf964ed0d237c60db4aa032a2ca9caf03da68a918a0201f168ba834a69ea737e3f7d965870a92121bbb5b8ee91249c6a9e3b2f7eaebf9020082045207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0452f7a4f7b1831edc08f9d1543e515605791be37f27a38a5c0a57fe23d0627dea05373b75ccdc453d09237017410121a5114685312412ac7c9a8962d6b4b8a7e3bf9020082045307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ccd1560db75450bd89693ee1cc5ae5e4036b8602f9a1b76fe45be25fc04e7658a054495eab641ead9f86f02bc747b71a23722b16aa825be08bb8c8772bb6f57e8ef9020082045407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06dd30bac6ad1a141041851d9c3142c565f13c83900b4ff4463218271c1f72a86a01e1ca78a16fcc038fcf551c1fd6f4e2b9bab7b2d38157fbcbfad8e3a455a0bd9f9020082045507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a006fab50c7ddf907f284fe6dd22b590090fc5bd5d8c4d6b32e7892f4b8f467582a074223087bca4cdc8b820b77d53799ac6cbdbb1ea503b6a5cb679f0f9e1555c04f9020082045607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01eacb8659e156c82d1bb009ffade5615ca6933bdff8a303fb09991cced4adeaaa00fbe527de9bf84c04098fb88ab149a9ce1eb60cb34455aa7acc2546d84d82ccaf9020082045707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a008c604d7dc1ad46f7360457e2284056595ec440f9e6089003182a72c11eb8d7fa00aaf8050c6c31c6a6ffcb7ed65d63054d3c527d3f52d068d173b139f112b466bf9020082045807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0034a5911aa5144d443a38b2dc0317973ed5685ee611e6378c3d3f7122f49cbeea04ce35e6b72c54d52deee04cdcb4d47ae0196cbb333766e463abab7e215bea512f9020082045907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0228ff38b1333f3736e574ae469a25fba11b5a48ac101c88d1c341bf8dabb8c7fa02d87f3ac9f12a4129325dd6529a4018c18139fed9a03c1ca2eb424b0d26db504f9020082045a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0217ffb6b0040c9c4067b0674980399a8e5e344f82067a7668857a989005b330aa079813762e2db6d0b6e26a4255c8de2532e0468b9b43cecdd4fe0182c72315675f9020082045b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03a29ba32761b07c262181dbc9ed333f37862c865302b1fad0ba786c7796cf2eea023604271df1dbb85a4de1e7413a6e85bfa7b78f205d11c0731a35b3cb2f32e65f9020082045c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05a0ffeb138bedbe34e0882d56457c08bddb4e747b857fc141a1444f149c6df3ba057089c488bbc970d3d9148534da9edc5f361234705b78022fc4b947327a3e41ff9020082045d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04159e16e01ab4d8b9c256730fd18587ad72889028fce307acdf54945d94da2cea03569c457a08cca17553fb2484b46eacb5462acb44b73bb457c846ba72c1f33f3f9020082045e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a1a2ca336727735a6407dfc4d3589d7075e110bbe7d3f1f948df82e6b5d66921a05b96050e8c66262125b109ffdc19f5b4cf557c94a396f2cd653d169cf5c8db28f9020082045f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08e6e73fd4ec4d05b42089de6e167ef692ca5fb9ca8fe9a643562dfaeb1594c71a03a4ed45807dd1a2382543331c59f9b464acdd3ecbe07da9ab87e3749cc8a05faf9020082046007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08cf22b6a8a5cd62e01199db9210de7154dc2522334d9ab3b40d288eb578d93ffa00a8c69c3e40e546cd6b878625d506a1f739c1cdf31e0cd085383e75a88fafb91f9020082046107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0050ecb5b82fd588390e6c9fed5010b1593e074d58b5f08d20832ceedd1c61d85a021f3301cb74aea864643d5578fb855a599b2c7dd022a33652199d2db1ba3e01ff9020082046207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03d036ea92f207a66d24ea7f3dd0f27fbf7298203c7fc64035a1d2d16bee3963ca0586bd1d0c2f821a553ec742fee76c157d3d142bb5ad6da22cf84ba8f8990f8d3f9020082046307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0662acb6de18cfb87194b2fc1dd51134715efaaf8d8b227c670f4be94afbf276aa05f63ac07306eee07856bd8da7321bf3172dcb9a81bebd5a0d92c8dbb7b48a5c8f9020082046407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e7e6f852b8d44d68207696efb227a0bf7fe29590c5c6f150d4dfde52a2a1045aa046f7efac8a77647da1149f597f961e2a50350252a7a2e0d52ea6490176b99a53f9020082046507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05cf67bc7b57e5e7bdcc4a8b3b8a1d8e8e22ba1d7794907aca13876d0002e5f3da00e6767ef641ae807d1243cf070a8bc4bb90197302aaf25de490ab691c91ebb69f9020082046607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b13d944949a70737d2e9a2df669048bb9c2f258e81e38de13d1abe8897ca9ed4a02607cf0b4960e02794f90c4630f2847056164029013514913062e8ccbb03fcbdf9020082046707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a021383765616f89089edf605ae170f625c70ecdc7999987934a775d0514a62e5ca07e9b0dc1a6fc8a0cef12a0aa95a6c99cb47d96d8ed242b2407d86ff37bd0724cf9020082046807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08f4d05c5b966bdb724e46274bdcd1b0dfa1965a58c25374dca558e1dc108d80aa013e84c3b240b040bd305926a0cd20dab081bfe8bb54fec8ec477066ef6134ac7f9020082046907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06f93b005fdd7360cc6d2b3f2fbfe9717fb74b67a5724718470e56946e4b6629da07a0fe52ff2cda0861c0fb77644c72844619d1bd442efadc726e8fb4b0759020ff9020082046a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e63d38def247d38ab9c75579bc8ff709f124825b5c61abd462c32a3d981c3d74a0034659f1ee9d84e08bd773f990abc776f4cf9396a93c7b607b9cf012ff0be104f9020082046b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02992595ac795c76400973968847e7bff55c22159ccdb347ba4fe94c409d3a5caa0513b3c2cdeb88e9694eb4fb8653a17cd550190ebec639d5f9e2a0eafbc31ff51f9020082046c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b237d2d09a1ac902678ea3cb9dc9a23c36ceb35d1098104d7602caeff8df66c2a018e6be64dc17221f4d7233e767ae909238730645a9b360a3e3e987d7ca057e9df9020082046d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05a1ec8b4f0769e1fcb639b2914c69ccbbb41fe393794e3277d3de8d3d3e40793a04e4dc4427bc572d226f1675c16342bdd379c803fb06794db0c056173279008dcf9020082046e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06968f4d946a9a77c07b9b2a364e636184f36415062ec3e5ad840ee069e1837cba077e6443463831981490a31f020a1be23bca097c409528f7a0ee60550703c118bf9020082046f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dc8c170729ec563ebee711ba6894e8f449c25506e8b58618276cb0e2d12bf5e9a027ac3a28abaffc8ce10a5f9902d45be326b66ff72b5dd5bfebc19bb12cbc6a1ff9020082047007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fd922b694048f6e604c91aca4ddc93b153d7c840f7bf33308e591017fe01e13ca02c0a1bfc044a187038ce7eb54bae961edc0666d8cf5ace4b020897df1198a32cf9020082047107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0074108b1e3106540b594abb96ec6bb9953f60158f3cc56b541aa0ab2b4d6c62ca07c0b69c6ac7d467909c36dc61687a3bbedaed0f42ad435cfee00539105f11515f9020082047207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0349962295821381e486b15000687b7ad40f59a3eccd13f93938318fd74ece7e5a05b4abdc991f07de2e264c55d67144cb341326aa7310da97ba53aeaac3ac70b34f9020082047307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0542e87e24707e2129793e5024bf43914cab949493b9c506ee83d9bddd2c23d3ea0532f08cb5e51ffcbb7e0d7c7d39a7a4ec3d95bbf086047eb09dfd52f42405950f9020082047407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06a3d8d02cbe316e3e38d6cf25550b9b73df5dae45831d964ff9bb28ae7089acfa05e9a000ce52fd058c97383a0ee0cd64c5212aec90096eb326213acfa52e2d7def9020082047507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d8877e393868e86b78250d54bad01e9c36d361f4dc806acceb98d23eb056fed5a00f413ba89bf5d0176a165d2f7033c88e756bb1ee13ebe072f48985a38917dff3f9020082047607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d5fa69698216906a359130f12dbdea64290c63d812994d9386c62de9e3ddedba0769c989b0c80cfba2c4487984c6971f1036630ab367979c3f8c23181d4049d5ff9020082047707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0320e186b62d565a29b720cd189598f549464ac5571207c6867deefdff0576721a038706fee9b031b465c46957c58166e18ae38a412e11c024850fc6d9b094e68b3f9020082047807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c13be93e55c91d715d3e969959708e2b86873082f68d8516630f64222378a7e6a0414f0d0b720561f28c41cfcedb3fd828b31ac949e5b6d2c66102d54105fd7e01f9020082047907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a027ef123bef8d7b4828c7d06de67cc3ebfefd673392303c6b5319797e40accfa8a0745e8509eddf3662ea5e8b181f246cf04f98ea99efa34f4148ce46648ea1b540f9020082047a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05cb48c2dbcdae79ba081f692b01a5cef45f39b3ba34b6f49ca1769e377a4e7a8a0027b9222249a87c54b6d7910dfa1e55f2a5db02e86fb9fba038f7ae316b2d432f9020082047b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00e50437d88bd25ecfe67ba14bb09b634df1b53ab231701c4be95db7d0c701aefa06fe6dc67239695b0cff33051f06a30006a4188a9996fc334b22009086decfc76f9020082047c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02a1d570ed74b8729cf2599f55f826ec5a9ae3686c5da87e0df3e90f8b067fbdda06bcfc41cac22e9748bc5c3b98a7e2a4b7145e3410a63c7b9b3993ea3309223bdf9020082047d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0293a0ef942de83b50c8b9693a3d31f5c6cd843079a46d4c42606a2691e605a64a028397d85531e66eb833cddb35329dac5a6356e9609030c5f8d4ec7c19745fe29f9020082047e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ff4038dda83b4a71f21c0435b50b0993e41b649b0cb37ce9e8b5a63d4d0aadda02f9b7a446dd91a50b3b65a6adeb244b794fe7c4d8194d5386f43e96b803677fdf9020082047f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d182434300a9977278ee76bcbb2aa0818115a829961d97c5b34bafde4508b54a03b7ecdcd196d3702b0190788c4893c2b4392c57589dfcb5516e91edcac533d30f9020082048007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00655c348412b1bb281ae213749a473871064da8eaeee1d8b285bc23d71fe590fa04572cfa373d0e7bad608d90a67a4b35af74ebe20369f6b2d437adf02d679d23bf9020082048107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0458f66c8be1b839e942f874bc6bbe8100adca2babe339d32d478dc4e55c3a899a0752bd00097e0f5baab30acc2c0e62f71c860822cd8987d045f33c0065c395256f9020082048207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c98f8a766f335bbf33439387d4c535250f41955e08e10b1faeaa7347823052f7a07f7793bdfe08835584b6ccec45159f949e936321978a3d2a7b67d969e89126e1f9020082048307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f7bf20017f3ad4ef07a2669d72684d6c4fed6847f1d787e50ac2ffa54c655caba0105ff4dfb864ce2cfeeec0c766b47238502033fb6db6cf14226ef7bc9fc48f27f9020082048407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b38b853c799ba5870c1dc5fb4b3859a9b188866182a3d321ed6f90e03fdb4b69a0481c1c031178850a12714e574d876180f8e36a537d6489589130d3ad5b5085e2f9020082048507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05f916dd17284ccf1b31c5e9ba91e15286233efae6c6bc61f0edfb8afe77fe69aa03058fa3238ecfa4cd0b460b291f59eaa3bf9c6e361eadb763b2b122adeaa8603f9020082048607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06bf5b7b8792a55d6001327c40dba28537bd736287b403b08b3b49905e3c92a27a07907f79cb8c228f0dee1c7cc0e881c01d9641e5d38c669582851a69f0c3663eef9020082048707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03589ceec93d69967de04e361da236f4c9313fdd05809d461d9e45d7438bb83c1a06b07d6df78ba1e2810a551458dfeded5c68f4a858f7a3b53f51ad1beaa8d20def9020082048807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048c00dc7d9ccbc35106749c73071a62163d567aad238aa214ef304cae851f86fa03a3e30857e7c5c9601a6053223f01f0ce554cb356bd85fbf5e4f3ac04b7aeba8f9020082048907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08de83d2cca51dc4a3b1c544e251c083a9374e36ef0d0148932981e4a3cbd1f19a032685047593dd687c435453b040b492bf4a5b0226691320923cc6ed81f24064ff9020082048a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00c055e619bfdcf164a2c7a0cdce0b758da2011db0a45be391ceab30070e22b03a012b8db5fe9b299df805fa66fe867a3a9d86ddc1c583ef515e94de9d1fb272fd8f9020082048b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fc8cb9c7473ba108d3c350e7fd3e525ec13eed34d4c664fc036572d807281ab3a03f118828fdf3718c21268e57355513b8d80351b0686073fbf8cbb4b5e121ff7af9020082048c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7476f7663cb23ff072532dfa19c29df6ffcff79575db884914269130310a432a05c5251b0899223ef288e8ce3c48444c408b277d62d52469787a6d037b578a659f9020082048d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04b4cd53fdb19fe73e250a6aa79de0198c10a9430b0fc0db0a740cf5f85b65a00a079ca109b3b2426266e68936127740b41a0c7a8ec0e0eeaccf40f281e87094daff9020082048e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d90aae126bc346462109dc1f9d3ab988a35b1896c1bc56c54f306b4213063642a0097a4a5946337241dd2f8f7f618da175c2a3560253dd3a4a71bc3ae99851dfb1f9020082048f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07503a6e925884f45a027a73086a6dedf16150d77f4b76e250fd0a415a903cbd8a026798308f3638fb2269977a4908d907f6a67568785f06488f95a90b28215d885f9020082049007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07a300633c9413c1c38572d8194baa51f065b04b4fe644cdaecc7cac2e611c445a02fc77c17dedfdf4b6a91a0204ef493d8713038abfd84178fb997af5e7ff4c26df9020082049107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c07637cdc1032eada07f1a5dcc35e084360ae35946dbceb6a5a07054d5b221c2a054ae9aa030919c122816022bd0eb91ab0279c500ef8918ca7092006fa5de8582f901ff82049207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003269f2b060f796379fa34090973cf48d51263d889dbf9c9064ac245f90a1f3a60d9a0448062399c041b5ab48afd8496120665b0404d76539e6b18db34493a3e8244fff9020082049307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aad473c963d0baf6f1c9645722ac4eed30043f3c5096b7a7fb6d340989cc3cf5a0338af091e5435e44dc983cb6e18de4d69b74b12f6a0d49c26a6548b0dbaf52ecf9020082049407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f947740b7862177aac891faefa06d6cc5327241d8aff01a2cad0a2daf22f2077a005ab5ab69ca5e22e426dcd72cc72a76f7d3c0f95c5853a94bf7ad160ae68c38ff9020082049507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d2d3c5ee43d9263150c50e1822a56c2e02691d7ed605522f32732a5c666c7510a06315f671e2ce505626bf17da48ca269d290289bd6a69284e396eb586897f8a8ff9020082049607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0874478f6d1b227b73c5422412c549f98f90471ccfeaf6c52f1c5f1e7491519fda062a97f7542b7e9094fcaffecaaf510db9dce2d844e80d5892103dce8915e8195f9020082049707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0aecc5b3867577dce1b96b41cafe76e8bed9de54b6e2d985673bf11ea6ce29d3ea04d9c4dee660baf0b18fc1206984bbbe5dac67b6daa9658042b070fb618517216f9020082049807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06108d865c882fb09f205070c71184b6a415a9ce9430eb12fb112cb2287ceadcba017d8dc2d5141917d4d0fdae8a0ca5e36389e62075d8defb14eeb750faeaced49f9020082049907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a029fde128f61304990d3beb8382c1a5dca4a3dda04e80d90f0b09e574db09d28aa0252462ab8d93894e3f97118e1853889461c6e8698722a29110f9f7c1ac5477b7f9020082049a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05e7861ab3915d802e89c87c608ffb334f2802426d4c2321b2c1007d54e30f868a04dc5665ba6ea699f1691b6659a4a7f62032a74fc0ff0f41f06abf493517b9b77f9020082049b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0390b9895378aa4e98ae3beaa6b50ac1d60bc5ee81fb857526a9b3508aeb9bea0a0534349739c150e1c41a722b164b4a50bcd1d5aedf4966c00ca18afad20da872cf9020082049c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f7d4fe978d63df2e5d402a4ba4c951a2083401d2b05ff6078fd2e176cc695bc7a0240e7d3cd22932ed2018af7ad4f014cb0ce7fc89eeb649b7e2d78457bad6cc06f9020082049d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bc1744b858087bfb6110eb859a779120f0b3721eab7f23a3d2038ae421623a61a04ebecfbef3dd66bd6b8cd9761c1cc89d7e96990030c931b39ec181ec7a024583f9020082049e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d5ff3d053638092a292bf441864870f595844ddd7e2bf650e6b991627cb26cca051ff988ed53e0726fcc5ae4c2e684fb977940dd2e4e1c693ac8e44164543c5e0f9020082049f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ba4c6b1906ce5980a94829ce23b92383b6ec4e9cc65cf50aeb2ba7787993e299a01f33ecbce8c55f6ae04dbc750dccb0a4ae4822c9ff5b34dac31531219845dc76f902008204a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06a9e484586ebccd52be1c6186e8200076a60a2de2e73d088c8a1f3cbd045a539a0670d58b7290b8999a3055b6f3e567b899ad0772823f6a2246b2ba17bff605a0ef902008204a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e9846ef2b71c8cfd4f84bba35466881fcb39df8b5a6ff4cbefa672ec52e7b3ada02e77b1fd7d27fe395155088595f88bbaa18342934c31d83274adc6879b04f931f902008204a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0229a45e4608df72587ecf05142129edea75d174d2cd21c2feabb80e769db731ea0613f8cebe4df5045efd85521b9f38c3aa43d8a5621acc4ea1d78b0e902d6c6d7f902008204a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09da86d45299f734ae43c31f515df8846524c4027ff877fc2251c20858226be4fa0055fb772e434c5034a1f37e462f4dcd1605baa7d11a54dbe1f994d2fb7bed0f7f902008204a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06fd8666f30a7ddc3652f14ee3e4d70a00f88360f3e98b2e0c2081e16062f1c83a0500b4cc6f53e95fd8ccd621ae3f9389a18902c87db127dc2f3482ee48312a1dcf902008204a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a003ef3e6302164e8421be577f626f439a86f129ff04973c34e51abb5d1bd11858a066166493ac3894285550ad63c16a8762e3d75400b3155b6d859ed270ede9c299f902008204a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a530095619e20681dfd8d1268b08c33beffd0f70d5c5bb0530340bc04d74d9e3a05a5a8cfec6ca37ca6ecfe3f8514a5cc6a22756848f413a222164d4d37e44fa60f902008204a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a22547817703207f6d706c5a7201a6620127d4a1ebbba67844518907e3f18482a07d5d9a3d951e00702b938dfbbb4c5b9a8f031d3a85356eb8093968a7eb480225f902008204a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05a7e149b54b4bd8d82c3a30faf24b478df422430f2311167baadec3e291a8722a03007db5265621ee848fdc27b344ed852725a1b72f14e7e285dbc876f014028f4f902008204a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01b6ac9f1e781b0ff015917d53de474f98a9da49001b77ee1fd2322bbd20861a1a01dbf17f57ac9ce45ebb74d30e2bafb9a081a3215134b4e3ccd88b8e2c0f6c01bf902008204aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0628e13aa0e435c06ecfaa7c82cf7e8dbb1744fc7c255e0c62c635f6f5e201976a00996065769465429dc306b592e7b313d937350282f82a18f56054207219e20e8f902008204ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05fa7e38e6b3e3ed16e7cca8ae11faca1ba558fc4886e83ca0fbc251f3c02b2e8a0569cc8c2569a2c94c285da643d47386041f59a765eadeb7e0a45c4e0bbb55131f902008204ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f3b427a85f7d7409b3660751c5d9db8a4d42f6f5fd1a93275a328f07fa9b108ba0769021923072877d8258d78a911657f886827846e6b0f2f7d872907adef14cbdf902008204ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a007c0570b94d46d3bc858624cf337c5fc8a0a8c0930e3dd62e227f840fafec919a00d3c55a22725a0d9742643984ccda08cef8826d8adfb72e6a9f45adaf283339df902008204ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f08fac1936887846a373ec5b98b61f33cd249fc40e10e30a8e93f3499da61290a076a8451573c17e1709ddede31255549b8994e78f058f1f98c035f4739b6c715df902008204af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c46367369fa29c6ddb5a436fd02634df094d1cc762494d720e47f9b2275c189fa0556169ecfbe54a422141c3f3d6e63f406f79b226344b401d68733cb0ad5fef95f902008204b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0111c87468cc01c68e4b3ff787167e57d92ee613136d33ba29d0a67f8e4db57faa075c005483ad241fd08ecbd187d19b8a94702d481cb9b11ccbba6568ac34fd750f902008204b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0958caab6f50017f2aaeaefbe7ae7176173b8ad1c9fca8716c7d6911cd7385ed5a058e009d154f24612e8a593a912de375f2f479397100b2440e16e8f6c0a2c5a3df902008204b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f96707484f6553f04b55af1a2babdb6ee0ee0fbf94e07fa7e8e4be906cd27ff1a046f0d4566ffb25625ac15f305fd1dc59234909fad0c1b0c84ac274c4ad079696f902008204b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01f1b1ae3a898f1e13c5072905dfd2f815a35a56112102d0d664ca3647a5f461ca04c622f99ae193522ba71369c25cac21e773cea7867a85ed693c6eabddbccbfaef902008204b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a82f4fd5f0d8174b0a7ba97e6bb6b99d8299b808f7fb7b2320ee58520dbb2720a045e9e303bbc8ece79dec5299fcc4d4084195ae50f36318ec6beed3501a5b41fdf902008204b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a687318adac225a963b8773509215a164d55a59702c1fde81f7ef92ae870a8d3a02f286fc5833a2089e3ba748964f8afc7689536e80de72d8c5bb34b886926272cf902008204b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eef822430be5b9da8ec9b1a49d907d4f02b65eda90a966835b0582e6d9d8d5f9a009f69e14b47c6c1b5f4cddc7a211f983725bbab483504a46f9e77dbbebab8b71f902008204b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e01ad24ccc16ef50daa41e5eaf2fbfc12b26404975d3efafb4d541c688274371a01c0ba022bb740f1cb2aba09763d42ffffe3967b69c1f554968d6c4d8e1c83060f902008204b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02a5cc6edf995ec47ec760c32fbc185c20ae58c8d527e90921f534e26443e5a45a039ece9d32ac4496de0de542c57181d7f232d47a894280901d398d07e0cc05c62f902008204b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a082a38bfd18ae51b6f2f124d84647f80aa3cd051c22a049fc3684d07137d9ce7ca0640f92afeaaead948b84cb6a6ac34b3889e261955606c6e9fe3b9460bebec3e3f902008204ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bd3227f4026dd4b561bbb5d8b818e7793726922c08c95e7a7bbdbc6d380bb1b4a026f278361ada67531d1b33b9e4adcab007d68a0d8512a2ed77a06233b9d2918ff902008204bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05120581a72c00e72d55dbfc7a9e0db93182333112d7d147a9a30e0f0cab01e23a0096b9fb237f69c40ccc3b33bd8b419a2d28fe26c433b7edcefcc6e031357650df902008204bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0df877e0960edfd8bd03f7176aa773e0f76be1fb510d09bf87949528163509436a010439dff431718a15dafb03b836c493c370eaeaabca19b240b9bca0744955e09f902008204bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d9432deede08c7432f15c15656dfc91386514fc1bd914e6fefa5fd158f14da65a0092c43a6bd1b1465b6b1a84a0a68799bd85eaf94989e795fc11f52403eaf2b08f902008204be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a017cf5e9283d1a61970945b6a0fb0280ac4da93e1b642abd76a8e30f0d0200657a053a3b0cecf1d98e452f63d7f5b202b3318b41bbcdb0d9f856ab37f3f6d5d0003f902008204bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bf7df9b5f89d9e46e150a976766d4d56f0479ee5cb712a7c962872a2c411cb1da038ded036c6655e5071af9b02f89dfb25125108d1f552366ebf1858e91da47f90f902008204c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0678032fa526c6d78145ee48b1798ff678809357c049417c88fdca10cc6a34a7aa06feeeeff3c3589102aa53022b42661f7306391cca920f749449d39a180cca8b7f902008204c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0abf7f428073635a1f073b393fc4e192949c71ff590ec5b6208e08f311b789e56a0511b340e155f832540662fab8ab98766308cfc45781c2013f5476d6e7a96feddf902008204c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0670bc151cb05d97ed543a745f69bf194c91313b3e67c8004718b2b75c19ce062a01e0c44d9a2b271cf850a1a1b5d5c441c15b740fee83b7d6e39536c24bff10995f902008204c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fb6a0b351958490b389c6d5f7aa6c0626cf5ab8365f4acb6704adab5072ad41ea0425f892dfd1aa4d9e22640fb37de43925d4a66c02ef92092a7990d53266267fdf902008204c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bbd37f719c85128b28aa4f0a25ffa00ea1e8de59b610d0525220d1d04efe77fea032853f6f50ca6dcf17ab7d2a4fced168e124434eaef43a39b3a1bd1de28d1a0bf902008204c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dd02b847f54fd37fe61272ad1c3fa9443d033e2ca720107534bf19f4420151b7a04b58ecca3bb86f98e626cc5466bfc7d525050bde61aa6cef14614c429ac33838f902008204c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a036bab01957e293e2d2ed4661ad8fa1aafd99e11873369b0e64fee8e0679b58eba069d8046d82bed4e657699e92a846b60640ac6733940d4de8e4b5facf79ae1605f902008204c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d760d4aec0554c8a951c3bcc270269fb62f0c27e31a6d2ae84f371deb3cb7c3aa00dc29b643a2a69c49ffefd4d0ccaf74e18ddbd8025cdc914a2c083ae510f2e16f902008204c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09dc9276d230e685ed0dcff0e6b86c4342f45295af6c3bc9b80dbebce1e49e1bfa052e494894413954a5650c81e4c2c4ce5c696fffcdfe6eb1266c8f68b288f87b5f902008204c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c82891fa2ebf9a3b2d6ca9c5ce222445188ba7449ce445958993fbb5dc55d0a1a060d8a90e57636dee6b05b29e134352362f217eba6e95be4e8e7de208e1f0a0c3f902008204ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0847cd4cc812a2da9ff60ecaef39555dc8ae41967cab0f7f694b37d71d14963b8a0373ce12dfb10acf84263148ed46d1bc59226a56fe64d973e0a754a14099ecc67f902008204cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08c5500c12632f25acbfd7f845abb9033158375162b8b2915f28372adfd447284a03df68d1193c1490b2df30fb929ebef088328f5d71e0efaabc33769da84db72bcf902008204cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0062cb54d9e091333a2cab9cbfde10940d7ccf0b785d1e9ee5eb07cb0f924e00ca038a6c5373fcd4b25b49ad59307b811b05f512975350085617e7f93873b218639f902008204cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09eabc4f7ff8ebea5bb8c6453bcb961c6ad77a8ccc2264635697a94326ccb0ddba02922473615c483980c03d7b64f12787172e3efaca2ef5afeed4947c848d801ebf902008204ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0541145737232122dd74c2d395ac59b20dda6b71ce441f1c5b3b22ca6f2bfecf4a021c586dad72ef0a94dfd20a726886616b6759d909cb999037b8f59fdc8925898f902008204cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f34f45ce451dc268654f610058e4981697cd9fbafb3e85655c9dfa0a75ef72e6a00189501b8bc7eaa2316851682d67b6f9c7684e2ea1f79b4b923e2b8f2ceeddc8f902008204d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01fd7490bfd466f6edb3a571a5edc7b55520fbd518486b8a608f06147fd96e118a076c784a7660a2a48e8ef8516abe894d33a62b2fc70239bb0e766967b6d00fe22f902008204d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0df8bb48d5a97c2b132e68adeace0ae7fae9e160deaf82d539638b94266d37c1da0531d1429b18b1f8eff02705806a94573c76344ffcab051c4886fe6126e0573d3f902008204d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09bd9cf1c72354ef622c8509d20dca775932c52a135742d4e690c29fc96105e8ca04392ec29e8a86b2e2a70aadb7e01a35d805c73335775f27d64e25aa4b85fe3f0f902008204d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dae0c9f74b4b9801c0cc2583078138d42f3487d615bffe1b3b09af32e1035334a01f8677a03b98e0ab1d0cc4488f5dd74d0c2266aa6e474f0f96ef11e0f6b33a1af902008204d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03ad1f790bb9e726678549e3ac1da1e9d3a646a3775d030d715f3c25fa8b94337a03423fe2a75caad32bfb2a2a99b0efc81fe993cff3d6c7cfdc77ce9a89bf6f04cf902008204d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00356bf1498dd4041b84996f8159131e2cc2aa68e102cd84d18614771b8315429a05d791cb1b7aef40cd0b84ac628a5512cd012ef8df88d25e3c1d11c76821628fdf902008204d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a057c1abcddfd20e2e9e0943cc2378378604a800ebff76f3bb5f378971b1f1e575a06313a432d3887d27da825fdd6f9315fab04125e257664a7383b76fe51bbf05ebf902008204d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0774092c070f3f8764bdc77b62700370973d14330ec4e45a9d6f567031ffcee7ba075ee28196ac593636fa83ec0ad0058184f97d3c8e8577f6bcc95e75549049380f902008204d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f78008bfa7766dd66fa26d438e04a639db36e62fb620a7b5509133a2167fb224a02c6dcac1227b87a2337c22a46e55c02b6a550f5bed593aa485c34dfac8f601eaf902008204d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a050465ae34ac622a0785fa5c5cc621fffd211ab443ff92bc94ff1498e6f47dd7ba07cc186e7bb31bbef4dffaf410e290048f5957d44c81662bcb972e0a6ba12a5edf902008204da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0af6f27dc44e9c1129b6a24d9223cf5a107f613ba3e3dd43abe2ffc0366f87aa5a06b4a23350ac379225247b2e9b9988067d616eeee7f3d285dd2e861f416bc8589f902008204db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0296a3de45f71836214a36745daf80bdac4f50801d353f934d272fbad5f1b3a34a04d6082cb7842ef7e2de8f3c1b271c64ee2a2e6b58eb875cd11ad7837d8226795f902008204dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d40734a7c5f4fde22252a5e76a3d4057a2f7209e35b5399b18f29ad9cc5fe11a05ae4767d5b23df5b86189303da0fe5767c2253b745001d48d2a822cb2c6d959df902008204dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f6ff161f1576c6637e874f2c7c07b0ba0a61b3b78b419a32bfc8b7b1057146b2a00be6181a011d869710b26389345f688d0a7e0b3bbfd6795034afff5150c140a3f902008204de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048a45eda192df09e3482ffe9e596ff1bfda3d61fd7cae243d55722bf58dd526fa06452a06d2c51350dc398771848fccf46ceb66b77e79c8f8fe728d094649dd0c8f902008204df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f49b32b37cf28e54b6fc82288e8b4df9b2759a33b99fcc51e009b16a5c7c7017a0389c46233509a1efd23b7fe47de5f16b0fbc27f66720beb427421c4c6520020ef902008204e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d6cd09de6609c9dc2bfbc9c73206094e1bfbf7cfa765da8ba7f76e576f38f4a2a024332bde05f3e5eae8234993100d4b0d3b60133f68e93fb57e2f819df4c37017f902008204e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0991149b6e46a40ed21f6091850c635a88a7d616926d44149449ca206bf411977a0408f774cb613ca3f1f2febf682f0a64e1ebc05816a3dc8704020574e8e20b669f902008204e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a089e28e7c44e66aec9b915348d3da296d4e58e64c4023955aa3642c9b63c875fba02e5e2353d81c8fd0a354f0862bedfec62ef56639bcec452be15d95811bce8cb7f902008204e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04ec114a0643cb71d2ddef00b8ecee26ae0ad0fe025717b0b328b6b552f1c50efa00acb6ec0dd791a33b57d4c6cccc99c1a32c72363cddfcb71c91c4d5f4be6fbb9f902008204e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0daeb8a8d022a10ae2ff8a3d64851aef9b868d5f5646698e2d1d45378bd29dfaea022b07bebcfbae0a61b14121c8e37933ca02ca6dd361a7de87acc65e1380557b9f902008204e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a061fcce74d0408f1d4d1b3e8797e2715ce61065aa433df942892ff6c67e5b58d8a0209599ca7a69a7fe98a1234a62ed32f0b42a170522dd877fbef5e11b2ee87a76f902008204e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0123988d1ad7c0bdb1e98c2c89ae9d89e4e49b7ec5ea146288ceb54c9260a5760a00d56752ac00d5e90db86e1c77a947cec4e81cc53d88dd710842e5d641098fbdbf902008204e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aa2b75276689e951f6e08d8406fab8f1f182069db34e4926435eea6fd7997bd0a03afd9351faf1fbe11877d9e04dc6b1ca8589585c747aede7f611a7281df306bcf902008204e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c07bd40bd84f15144eb99c2ff107390b46f77282bb1d8e517a12bba63c66c21ba01f337fd2b58c963563c745ed9bcfe112cb7bb12bd87ca55fdf726372890486eef902008204e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0029011c68f67acc9ca45ea95c1b509adf83ccccde89d36baf17cb3fcd5a78096a0383ce4d89cd8559afa97e470aee9226d1ac2ca0a91cbd3f3d6ca8da507688a9cf901ff8204ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f8e4412c1c7945c7a4219e01964bfb6bb32722f8e1f91761c7dc510a10676b089f43267cd7ea9d034878248f281bbc476957360795da9e1f4ce274789ec8fee1f902008204eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0122486b936436e139dd73225f1d186aabc5a992c465e58050c617cc0138fd36da07d60de0b64b3438d2eb116b7487ef6a4e656e6b3f3cdc18d7aaa5510cae697e9f902008204ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e5cc7fdb6e34180daf2094d2c490dd722d09eb7509f6cfbc185cefb56574f13ea01830cc88b3a94e92c7dce5542c564976593e5ce0b65eae90db2bfe1d5083fd5bf902008204ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f484f9efda2e464c16d16817e7703ca19f7b6563d683a241d12b55001cd02261a00b8ede135ef1974a8582315719cb9abe584dc337efa6494fbb4724faffeab71af902008204ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dde9a5b7b1aae233228230331ddfa674244a7df19ef7bd55219743efd5cfefe1a007e8a1985e75ea3c25d5b1d475561f543f63c6882c6d34fdff70c7992091b513f902008204ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04e7587c98aab6b07a64e0fe59d33310022d06ce6f82d8fd389bdabf8aae7ac90a07a3324b2f0391fb21b6667a1efab88d0c531f3c35416a900421b561a295fae63f902008204f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06f8aec35de7fb55e1728b33331ac5ff2b8bc38b6ce808dcb31831c91be1dcd5da01286fa4fcb65d88fb4af0cb47eaced4aca23c20798d8330a65a2fa1d756b6e91f902008204f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0033fc63d7f1401b67738419749d7c8f2d22ea587e2810051d2c60749877faf34a051b5a3f96e8d5cd1b29a663ee7b9d099bd418d9baa174deeafd2c917d49b174ff902008204f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0343b551be39d9111e544d5ba7119a08f13bd6bece8f73afff21e36aae365360ea04cd083887a0bec35fdc21a27347beeb48ed2b4e3961ba38ddd02ce60c7ba8b35f902008204f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ded2aa0b260a6228c62ad11d01c064bf606f97feec63fadb5ef223ea301b4259a070d3440c059e199b89b6530e9b02f925e80b3f3cdfc45e0ecede236aef28480cf902008204f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a039b8587347df1b8e7b71b4243e8b23ceff3b5afd5c1419acecd79efcf8adf301a05c67c295c5ecce8cb6922c198f3071116851740a2fc2160dad5b96aafe40944ff902008204f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04f368db21dda6bb12951cea2a2d79c50fd0a22e6bef85501e3625f3d2f47f6e5a079f641f7ad521e64b7b68aab591da07984dc734f4daf9257d8c8c3a26ca4fe47f902008204f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048fa00f9573369b3260be0aa2ebfcfd2f9a23e7e56a8d7888d0fb3b385a3d168a01b2b014178a2cdc6a9b22adc8c225fab8fa7bbee8b48431192c163b3b776a68ef902008204f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03dd5aec65cf6eaddf0e7f49c833d212c67032b78b0f20d492235b789390b822ea01bca4a367dd6444264fb09c642f437d7ce4b5151162238f0d0958e997de28734f902008204f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02b54bd02ea534f5bc09dac6feb15b9ad1d9a7b631b276a387bf9ef0c7590f3f1a00abad2dd1f4218901bdb0fcf51fc37d222638f518d6c05e5ed5cffcecf33d7a0f902008204f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a90edeb53c0a88333ba962f025a2a5422c49d1add41dc476be47bcadf0bd1a47a06d34f536f841787d490d5f7a2e24768c26f9613958649ae2d62d8fd491ce9c6cf902008204fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03c2e3e207dc93f3f7cb4a1ad9d2642db6d74002224d66a23d5c234faa186aa45a069fc52c10dc259c24b5f44a9b2ca6fd801306ed718837a55c31f98722631fc73f902008204fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03a0dc31fba76924fb295995f3bc5c86ebe54567f9a8562d67971773915bf8053a036d034c9f7d7a7a11549b1de97ce650d6f160ebbb9b486c2873f483561557c8df902008204fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03264e21132af681a782f22846f484523421f75ccb165f130ef448be9df4ad6c5a02dd888edd1ff3f2ecf36c033e0211453d70b5fefc066a2165ffb89dbe8d84a89f902008204fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cbfa545586e503e364a51c3bb5d5e80745ff827c4efb7a99efb75a33ab2bd3b1a015cfc6e9c3972898e9d3cc5201a673a9905d0b7809e3367b6494a8a43fe5f956f902008204fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05e72e7bad851af8261a86930cc75a744c47bb55e6d82493c8a4fe60268458756a04516cb41a7f1b7fa960e2a0d43e17b90320262b3f46030c3469c5c6fa41c6f3df902008204ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02d8aebc89dca195fe8a1e5a0b6bbd475145ca28e8308f6b19826b2f4c1dbc0baa006d7d4ef595a5b079994e2f0d4e09ad1880ccd051d4e44fa69d44c2ac694782bf9020082050007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e30224849371b051c4151d2d7f7e21104b26e8cf7903efe59ce2bf6d285c0f46a04f656f810a9005da8b6362e4becb010c3b2754ef3f1f34e0a8fb3b91490f7ed2f9020082050107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b90da6c7ad4d0b28fe58d4a2737ff397cae8e02980c453232193a2ce0ff84d09a05db386c71105a364c236d66450baa8e2b26e937c053892767c7b8d8f73ba4f28f9020082050207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f91bb7956572b97cf345779ed18115c7286b05045351ac998b1bdd02594b15d3a059dcbb444ec279b4de383c1f176c3ef38114aae0237aa3246ea31ada97a59ee9f9020082050307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a279a6377837c1f9eac69521e19e59f02dea418c3b8405cbf6f54a8a8726e8e9a07f40b336edd7b794529277e164455418bc838e0db93dd8de40d307e658de8951f9020082050407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f57888b52612e14b3d471c07e9ca24852086799d9b1bc639af2192b863facf8aa032d4682d4bd4de139d8edeb378ce57386bdfb18687aa235a905a3ec4e5db55b1f9020082050507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0db334e6034c8fccdfe6a20bef393968f163d3bb3e95547bf3b4a2ba58a5f7865a042eb994e5215d747cf8ee8fd832f226351b42635d3f1cba644906acfb34bf319f9020082050607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b9f7e8e69cd1816744f030c757ea301ba8dac7fee888d40809d23c1985481c93a0378ec1bcc9c5bc67fb93476966f4b2a4c79c25083bf61f87bbf3a391c884475af9020082050707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00b4b595634e4590a251b2ec2797aa6684f1e5107d670645f5d1085c360579047a02b72858f6be53942ef4a035e1a8f99aafa4c88dfb8eb9c0bac80318940a15355f9020082050807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a004221981b2db3f3eddaab3dc090016ce8454bf36b5596388659fce7dd10f43d1a018ae3dc8976e86cf3582306b7752271e356d0b274c23c0191d5fef1efe1b8ceff9020082050907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02569ba58bee0e7edd5bfebda1987bfcce97590f367607683a0ee3d5d02730ed9a04a9fbe09fa4704c673e2829be2bba769969df4eae19735a96956948b650de28ef9020082050a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02454d1d3625c49208ce6420876efa4ca1ca9c1c06812eaae8eec4551f863c062a00a2b3ac6d54890108175282ea1936b4ac15de4e93296e67620a1a119c43d7cdbf9020082050b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a5550b85a0981b5808086fd58adc18a8d9e94305aed653621ad8aca03e07b8e1a06d0c37b92b9de1e07dddd0908b39c0862a3b189e7ffa9a0dcf0bc091951b5816f9020082050c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02602d3d7db61b167bc454127bd2e781b50e4a0c00a0ed11e3228654864eb4535a053f2db269acbf2f4b7f59fd5fd21fc15b6e3625866996fc171d42ac3b47da5a7f9020082050d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c73862b4ddd5b420b35baa45f8b8ed2b52fd619dd2c1e121f7a2f5acb5758c14a00f4bbb8050aa4b072855f5811b6723d8745f328020c55402df53d45159ea4cadf9020082050e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08fa419934d3f8aef81e7e7f7897923ff50e95d5204e4f96e9b5a9cb56cb0dc3aa058374b79609d4d8292916eb9ffa12aa69fe9a398edc490d2ade19db6f7c94831f9020082050f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a061301200001006841da7b08f42f4a9f9297a91a2a9041431f2bfef6265cec92da04ab8400ee5cfcba62e61c803d29b52abb32a2ec11cc77561a89a7a5ddd9d330ef9020082051007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048c2956af65a9a0bfa6dfed38cad230d5083b856f82395debaf36654859db78da02624841f9c958ee5ed89778f5cbed8b882258fab1cc240f9599f6461e0e4cd4df9020082051107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ee4c8b728f1bfdff0623386ff29c82d7b428349208c1f815f2804fb604f10607a0650b2cd2ab4d991b514e83e539466915414b46fae75cf2620b3c504c239b1cfcf9020082051207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08443c3d7e839c1f9857c634a583ca3e8df61dff6267b17c8eaf1347d5481dfb6a03a2e506ba6b3c1b5804ce0176700efd4b221b4405525293cbdce7a744c40c0a2f9020082051307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0253d24a0e18df1d37e9a6177cb5e79906c9af1422339f97e392fec3c0f634f2ca01e1b3703a397ca243a50af4d00db9cbb330b7b3bf2784dd8e7be05d3cf90eb39f9020082051407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00fa95c4eda88c8b5dda2c82943edf357b9232e13176026b2f325c8d9c1c0f2e2a06fad11b48425ff2c0f7df782322c33df31820422ceaa9a6454c63dbdab88bdb4f901ff82051507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07eae600f3fb2c7e11803591fe2a86772c56f98c5500b9f55b5e3f8adf85fe36a9f411f5a9f1a4035dacd9834ac9b76d89cb319c8b3a2f8880024db010306ac3df9020082051607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d6038463e788bc6be3cf44b5098d117ed7e6c0e898adb774401ce36e89464caa041a961df8334754228f72f0a960f09fe829a670f2a7f9f427648d87a14eae15ef9020082051707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02761d6d469ae83678a84ac1795fef41f3937ac39d8b5390e865eb28ca95f8ccca0062a895c0a4d068c67020b0b5c94f223615918ad926fb3933889575144b532fbf9020082051807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a032768c99e480f7eb47cefcbd749221555c6803262bf4563dccf27314048dcbbfa07b8298376c92878ae872bb2aacbbc3f8d852fd94683a32737fc8816a23dcd330f9020082051907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c404b3a22bd7d6e661b45a8dcfeac130f524ab6b13d97b42a8e0b3ba9a57ed8ba0768eb9d808091645ec8efa2763580f279d74fb024047db11a79b0e745dbf1c37f9020082051a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09da0b6423e33a7c0695c0c72c1a1694b644470b71d8607fa823c1b057b07f4b3a073eae8b516757efc512459967d8603b08257099cef79e26658e23d56c0b23807f9020082051b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a412ac3c4f3d2681fd61c2865ca244ad0481bcd4df0a58f6d5bd7ad4ead16f1ba00c6c65de22cfc287f0241c8cb77b4968e11c2da3dbdd9848a6c3693922b9dd80f9020082051c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08f8e8fcfb01eaf09cd9d3bc28a80363b0519e3b178555d66f2f01ce278bfad1aa062e07fb09f052fee226a2c6290f7735b65beaee1fe09ff14aa4cfb880d0645ebf9020082051d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a013fe01fa4e14c8edb95604b3593fa29fb0fc342f42533687498e0451865888c2a01f68d34b21f114e6f073171b2242aa53e442a9cead5b8c938c4b3541111665b4f9020082051e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a051285ce9864e355ea4921d748ac04c013ddbefb8123374b7c4e52187f8c2c92da01d6cd27f8fef6575a8a673efcf209fd6feddd019ca1f3b7f2307ad44c6cae62df9020082051f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a089091cc20d35b577133ea4e6f271fa64bb37bb370a66a54a8fc4a846a949305aa021de00c43d87595f0c3dbb2837785bf8b89806997b2ea91815ed1534ba8b1ccef9020082052007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01eae9d966307d350e8560130f4ecf09484d0674dae176925ed5fb67a0f4ff810a07a44f67e3864924fd985aea4753241200b8163814eb33c1263ff76c82cb71254f9020082052107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08c2fda7f9dbb1155ec9e1803ca471cbf944b6e56f21a2474b982baecf570113ba04143c42fcdbac11300d145e15c41ada9adc1a2c7a16152cf6a32c2cca63ca642f9020082052207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b4614ce18c22fcd6fdc796c8e75546ae4197c7fc20394024a7f4637744a63697a025b7c0e85a5c2230404f05155b537fb4b3ae788076c8ff8998ec876c2c1d2d5af9020082052307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a372f097b56d03c9be4868ebd828ae80789534b91cd8357e9c6b493fa2fb6cc5a041b95b52f46473be81e3b7c6bb45b9db5b0a224d253064d37e0c56a4c474955df9020082052407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00d2806664a4d5601af2a907fcd8ced449c337523fbc092c25d029ae4a7aac24fa05a0fa81ba408ef3cbe3ef16a5bc081d92a40737964aa4734d73899afa8936a87f9020082052507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0da9ff6b1384aed064faf0fe66858c92d8840e78d51e49c197e0c4de01ab6e177a029b76f2c3983f9df13428df2a61c8fbdb2d921fce4c53c2dcaa27e43376d435af9020082052607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a61a87bb93a34c65ff2c7c3a7021cfb3bc0d93f0ae48f3d8a40ed2ab826a95dca06695acf8a48c3dacbc43cdf44c0c434f58a262264cfb7ad65a115570ab57a1a3f9020082052707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0189d88fedb432da8a7eaea99ebb8f4dd715e7598c0800e6e65f7d93e330deacaa053be09c1ecf12cd5bc0760347239c4c891ace2c9504293e349eaca18e8029eccf9020082052807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03b25b22b2b07b832ddbdd29ac8a8b4d6f10d068e50036ea16b64b5a78ecfb854a07db1608e91ab443483584ed7aa1bf4b5a4bea911c07074f8659617e8b142fd6df9020082052907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02d2e2b256d0796285bc5fe6c3d561034133057c51887b7baa375ae815ccc0f69a070f08110a2ddce34da2f2af188a5505ee1e942ba184b767b403d2981ce415752f9020082052a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eff2fa3e6a0976f0cac76cb2ac3bfa7eabc5365f8277096b04cf3c649c1df832a03d0403c82a99ccbdc3b17797dcb60d9f80905e472a4141cc15470046296be3a8f9020082052b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ca3b72403b8db6ea079c0fafb4393b2e6f489154f9e4ca4b50f293d6f20469bba021c72d4f7d0537b175f3e888cae4a0b2a768912aa97961a9f105b8b71934ef2cf9020082052c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0abecbb8e88d17a38afad6e7c9ca058f7a00e1d4a6861706b44ac97796b14b4dca07444b86d83f9eee879ce3539031eaa80a07f21c6f6d2016882d8f5481fecf1d0f9020082052d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a048fad529ad4ab85571795297127b2bbe9eb6ea27e8cbc2b528e599841d042dc9a07a23b85d336918445acd4556e1e0915b676e44b58b855b14664bf0faee10d17af9020082052e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00232432f0ac36844c9d2dd4945adbe13c259cd8228e5cdd9c504e25ff73fca4fa043d071b7dba82eccb32d503707f9a90c29c302eeaf66f49a93791efd4810e1d1f9020082052f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ff4112517fab0410923e311476085b58792b08afe0db0fe82e23dab642b8c98aa076e7064483082136b650b8d594aa6390341bfa63c851f65f2fbed2e9a2f05d4bf9020082053007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06de528008bae6d92976bc72c6aec43505f71747c5524f76c19583a477dc0b76ca05783605ee885bcc7580ebb5a1e0c0e6228bd32828c868979bb8da050400b6bd0f9020082053107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03631060c8cc9892eca741e2f211d5ca160eee22da35611260d2acde7fc601eeea01dd01a4971cf2f30edf9cdaca23589137cee67418ea907d1b4021db4ab4131a4f9020082053207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c606e05f6898e55f0cc1b8565c2554a8b07995a35ebbccca9b1303ead4726444a031bb1b7d23d9ac7293f1dbfd8cd642d42927a4a2d408bceae0b8dad2086bc198f9020082053307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f26ba80efce01e975f86db7f5d832ffa11d2dec697ed9743405beebacf4461dea034ac05f8d8b50ec0cf04333176d6c5403d979124e171a41c1a852951db6c5567f9020082053407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03540fef6c618204b87fe41ad64755175d75c22c3344855ab11b06c1e739c11cba07f5d9dc26455e8d695d460fa159283f3f2ea0b96506fd4a201c9770ee5b4b928f9020082053507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ff0cab014d1252803049eac472517166b73eae2efad5295354a09165b0e12ff3a0626c787e06335eab52aaa0fa058252328f57d90830876abd5df2a413774213dcf9020082053607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ca9a997773430f21cfdd9ea59f1d3b329cd1955bb5e32a90a314fecfe9cc33d7a053a96ce9c3e260052482cd2a1b3971cba528b668c5daaa0ddb21e1040a38ef11f9020082053707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a015192a98d74dd1caa615f03399c1d747e0dbefab665de39d47ac519596660daea0525dd7da88757a6819282bfa5ac4c5b4b4fd19b4dd8f5dae5bd9a3f3a7e9c0cbf9020082053807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a021724a5450f4bdde6287a1aca4967bf5d4fdd9ade3a8e87eaf1c26df1d2ccb8aa07349e7f3bab5c5c7168f4edbb5a56049bc49c0d844339cf547f01f36c3862808f9020082053907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e71ed6591ab9fd33d7db273e79c78484f68256df6ee04b56c424dcbcab012354a026a9843950505bcdee096a8c20788a38f5766e248bd879dfc40dadc27ce3ffd0f9020082053a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bdb70f234f6e7a7b649075f6a4dd4d83d042814732693ff4b63b3cd71781f7eaa062c56775fb8c31bfbb6f8c85357286eeb94a65a19d0a1e35c4c8467c7dd9b632f9020082053b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a029b75c3ec35670e67b81d52a2e6f6e79983453e1c1c3316e4d65bafc434608b1a0545e2ee13274884b067a15c529bdc865373741f65e9127d9367dd61f8f78ed39f9020082053c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e9de6d6f4013b7cdfacb3cd7434ebb88472877249997fd802f9579393770f23da0234a711b618ac1a291a2e502d745c8c513474e6b5b807af6b56ff2f5a0c9c10cf9020082053d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a060c660b64daf4ddce233635f83cc61b1f7bb1567da9e2e18b16ed0a63cd9f528a04b189928e7d1d80f67f42fbcc161d5d72f6a76832934aed211708b7f2336bb1bf9020082053e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01d5eda102f3793a74cd044fd75dade5e4296acbb61016607673a48452ad02e05a00a9fd94649a9f1aff88df4092448f8530d5aa3cf66c95fe23c6cde6e7ac36a4cf9020082053f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a071ca64b4187dab9c2d593ccc3ce985b03def014da9049f337cc3b0a5aee8a75ca03a0fc1bfcb25ea62e237ddccf7cda183f64c5e3032fc1095e9ff8c7cb8e5b4abf9020082054007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a001169891c9650c3b02974b16f43c8d63ef7e65a3f28b22d5f2c0814d7ac2d9afa05babfb6eb1bf7374866b0d31deffcbea72282ab8cf001b2fa79bccfcf2a8b393f9020082054107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fdb7e0b96fbf2c28cfbb72343f8090f97921860138e0b02b36c18654499145aea055d4b1f1734abccd6d93bd7afbd4878ab63e70d73b2fb1f110b9ba2c0dc46992f9020082054207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0afe6f89a7f4090be8c1d80291753efd6ff9930345e2dfdc66eec34f3e8a82109a05e848060a90ece88522bb02fea028e3d160605592c1b2af7862bd0c546585dc0f9020082054307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ba8683e4fb81c08c3ce563cdb2124d1f863f3fc6b93a65cefd6e0bf197ccd206a0079db3c23a7069a302d8cd009fa761787c4e5d2e5e985dd4de28625a9323b658f9020082054407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0aa225eb580e4fc61cf56a19300fd7393c9be288df897b2aebf96d5416553317ea019bc17068866d2be9d8ff3833425018bb3d90e0af3deb91516e6f7bcebdce95bf9020082054507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06d6667fe368465e13044935d5d328827a39fa8ef20da335dbc23ba866146ba13a0437e272bc8bbb6c6c066d454f40aaa9646a3bcc232cf861ad9bba64e97d81d42f9020082054607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0494af7cae50d49fb2542592c1160e5aeafddbb9634b298bdcd89d0e2144448daa025ba52e96cca44fb9332ba369b0bece3f5935b1b92d8b62bc5460f58586db603f9020082054707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0edffd83ace7322a61ee4ab6abe1868080967751d4be0bf60874b33bc39ddcbb3a008b4a1e0e44ef3d80db26fa8cf537366b68307031a2ab0d8443f537e8dfb8b5af9020082054807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c2457366413b2916813d3e5be5ff283db4e7b898457b234e6efa47ca398bc06da0683b4382aa6596c3fc9c2029808415d22b7d13f79368339ff510ea72c81e247bf9020082054907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e0b051b3d603c57e16bde938a0e3870543b7921ede03d0b22d3eb380c3e72f24a006bb7369a2b86b37420fa5fb80ace56f989c2080ff247217635f7cc48e060794f9020082054a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02d764bf6ddc284a0965850a9fc81a9f96f7ce6e7b56b9c52ccc1db4288989799a063fe3f09904072a1db459005f3f0e0ceee8514387e16fbfe0ff331ebdb214168f9020082054b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f0b52ebfd0f619929bc0034be0e411c95f518518b53becff6ea6823299917adea070c6c83af39dff511ca4dc088aff0f7e58669eeca00496b35f18254a4f24ba9cf9020082054c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a092361d48767df7fee08b1f45b7b9871482a4873acdd91c905229a33a260cec12a03ebd876440bcb5998e4df266c8eb49c524a2b34867c41bb97f940b46393cb7b8f9020082054d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0650910153a867f16edf20b4fe33747cfb4e0dc08b2f2df471d9a0a7aac389463a04f9d28299ad50e5175bdbad709bb6c38fc728ce2d3d9c25482715b7c15f7f7eff9020082054e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00682177f3d4c89a461f2463f7ffc98d6528b598d7c27b8b906ad46ca7c91a711a001e2d6c6002240fa90053a602109ff5eaf38fd003faa056a06cbe5d89018a532f9020082054f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06c15462388d66ccfa67a29e00540d5d7d437358e5cbf778fd654593334d5ce7fa01cbf6a1ac56bb663647df6100487d64e94eead36386aad594b574b6b323567d3f9020082055007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09b3e9348e0c3a606cf7db9da4201e1672ba8e7e8d038ace5c9329bc99650fb0ca049748cc5742f3157145e595cb1ba18ba057affab6305cc600ca34e2e6717ba38f9020082055107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ef0f1a58e4afa16dc3c46c79b6362ac8b5ee95c2f3eb96bf0f90069203763c35a06dd4d36d14f8613a18ebfacc4b8f575ac808538a34adc0aeb001f4caaaf84eb6f9020082055207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a002635c286b66efda4d7f4eead96b02b955db4d40c48d914d4b3df331e9b85426a011085225c6bba28b24598da1edefcb6ae6e7b5e98f48338b917dbb9498b5b2f2f9020082055307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03b3aaeaae9241acb70e8b30ecb59d6b4eff933fcce6d7ed998f28a320a4caefda0519a25e36ab9ada3ea9edaeb70a11a3986c17df6b700c681b221f3f30cb7077cf9020082055407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f9634cc5c85e9148e01352e184bce6ed25d64e3de3c3277313ce33b12f57d23a0700818ca28c5e42bcc7c8521dcc5492962e5cc3b4bc68fef462dae382b9a3caaf9020082055507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ab8d0a8488604bce18f641ac9cb3d26d39d007b477e375cf88023f1393c9376ea024fd1dfde1da5d2763cb24b30f83c7d56d4857dc10afc999824d4fc497df8935f9020082055607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0644894df9b091002b5c655b222c24efbd10b318334dd8300929cd324b5fbe71aa01a24c4eaf6e8cbf13f20529b314fbb5f76be22ca4d4f7e0281dfc6c0c9c38da1f9020082055707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d5ec1d28a03af324cf2cfefd3d8b5e43762c102a19e8684da35fdf9b3ba09da6a03bb023c9580db85d50ef969b3bb0b488dc7b4be87058068c83890ad29dbd5574f9020082055807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dcb4178a1f46f6ac474684209466fb7a8a26361d2e6cbf9d8c54ea8eaf637f6ca06ebc23b6f0b461c4a497f597348665e27ac064935bcdce58a4e50cf1ca3f758ef9020082055907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04e73f2fb486c4e10ad6be2687b3c4ce2d9623a8cc573a37f0f0dae56df813965a01afbe59a5c9b57075685fe3a2b669e6c3c7503aebc9ab3215805d641a9319d5ef9020082055a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0241926c1e29c29d50cd2e8375d21c50ffec9e180adf66a0905073b0554ea7ecca01e8da5951ea9bf21648a7b4afda6047adaa1911496231032e3f3fa2de76914faf9020082055b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a079d700a77c284dde35fcf49984a67e442c5c54fe35e17030573ceed68e96b41aa0363734c89d17524eba2f7abab93212f47ca9c0aa3398ba654046c7e47903b638f9020082055c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08c244a01b793a29316347c5bb248c87bc59aff74e02f7b8ac24981b7bbf12f1aa0516309a0407e1c567be908ed1a0d778ca78fd5ccfaa70c440642b06e2157ccf2f9020082055d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03e7324f1fff0a38b27ec758836cc787017b9242e6cb6329540f587bb83bd9f39a07afdd64e690afbe74dec73c99bf47b1d6b6c8424bca1671a35f4e94694fd5289f9020082055e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d6f42d4361520a0bcb3b3ea3ebefe5a52418ee7a37bd1d81f47d9fdcc81aaf41a05df08175afad66d1e40e8019488c704be3b624518df6e04a77bf35f9accf47c5f9020082055f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf10300c2edd727f54118fef49b99732f9afc9429db016f3b81c81ab48c01032a0572c8d470356d720086b7b12de73a63382aae03ea1eecffd853c916d7920b275f9020082056007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0404e8afa51117ac2f5ceb3b65d843e0aeea8b325f67f32b9263e37dbb3aaca36a0221935466d87d972e54de2033dba588de3a02e11bd61263dd4b4c94c4cb7afe8f9020082056107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a024f821d0258cd4a83c66cfaaac36a0f2a7f1bfd95a996f352853826a79742eaca069a5d60eb941672f97fd1aea7a7e1d2ed7d800a47045ce5b38dea1ad79d04518f9020082056207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0425a8b057c2f421f1f33456ea972671e36941ae5e2c51be1a388cab74a7a6321a02ca14cdd0740d32ad468098e9bf8edb80f27a77778e6e85f2e813faa5af53759f9020082056307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d993847037f00d4667b0ffb3c089c7699590484e0f873c7fc59318faa597c03ba01afea0d1218506b7aff6fa603a52775956f2842ae1c02fb0a2502285163409e9f9020082056407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07db19f7116ddf6a94a036a9b046ef8d4f47313627eca20f0fa578fe603a6c74aa023a2511e4189d8fbd30ac2ecc0293493ca94c7e4375d251b1d1df93ff96a30f0f9020082056507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a012370cf57c0747e6cbdeba9c78d3342638e05b1a3219841c864e16d690ef54eca041a8d7d8a11a02c11eac4b8f2d9589a3732ea4bf32ba9442c7b05da6a078c9ebf9020082056607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c4dcda32fe0675faed68b628cded7423dec7a9bba9d37f2a6846eeba04f3ce29a04bba425b0d131ddacea79c55a7537d852d2a4a77156b01548d9f58ecd298db21f9020082056707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d4ba1b5f07a1ff0be5d3b034da8e931f17ad1b58939e2f08a788f94681f16811a045c7e4d91f362470e792e3e84560467157e8da80645f8ff3790c2f8be9d0a93df9020082056807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06631e98e477133329b42e5d66e1c7f33e4d6770226b93900295ebc7cd1719493a0280de25446b84bc9cb19127f301b6788dae770e93d6960ec1859f56b39812a50f9020082056907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03ce59723ba1346ae60b048aaec7d8c137a2c2c9b56aefbd39e7e38b2d73b8c4ca010d90e703245763284cee3b5e752f205a01bea61ca735212ad575c946f654ae9f9020082056a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01d93b6bbd02915e4edbc7d23018d52363414d5df467c35d4302eb464568d1fcca07047dac869d2c7e6c21686d01b85f1cee3ef68c96a7ab17be72ab679872775d8f9020082056b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03614cdd557549dd39b7009672ff966f2fbee1a9e7bdf3495a26def538f201317a0569d12e26fa027c2a18e263bf575fcd32b4d0841854591a68efa6f6e7333b631f9020082056c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00e3c4b02d563eea32d8b42b411571e1a16eebde582f6becfc0b6b8663b095d89a039b52d7893b45dadf704168d651e4e9777d02e14c8b768ef80292dd9946b1bd2f9020082056d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a039cb9f3907a744d2af62fc16d8afdb0d9e62490b4a278eb07c3558e750671c3fa025bc2fa9028dd7955bb0205c8756718f56cb67ebe59e21296612bc7219a7551bf9020082056e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05f26693912fc46e3e64d51eb87ae71d6194e7f4b5676325ac5d9eb4fbd1bd63aa0671d59fe5066f2d6d450d9d024b25cbcbf7c859ce48580bee64905c747b00193f9020082056f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05d7b58d0c1a9da1f81538b1e44c969d034d887394ecfb73e2b28550f67abf3ada042b94815d1a2e949edd2a27daa7bc2c6fe69edad611936893801796b28408569f9020082057007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a024ca4634de9ac6fb0ca74e6e4ae3d963507096c66aa38c6fca03cc6fcca56d8ca012e1723196beb1d3d978b59e48f49a8ea4fad4300b1c43df5b5812bacb8758e2f9020082057107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eed2433ae867b16f7a87c6d78388f28a0f96323fec60fd87c2f6a62cfde332d6a065320bf7afe6ace842baa23f7898f66d9effebf550bf4b058b1980d8dcddca5ef9020082057207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a054bc998dce920f65b9da10259c37139f172e54c3e53ac328530b733a5bcb726ea05e28564f5471fa79233b1785c48039c18f59c712ce4ef9691e880232c4e62b6ef9020082057307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01bfaaa58b934b3785830205e806238d9a4d953f5e4d42626105dd0f24018367da0488f06e2a897003e630031194dbf1f2b94947873059dcaab7c3c6a8afc2db733f9020082057407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0934a03ab5183146b1497b132e2bcbf689dd7578cf9de7785bf779e78f3facaa4a06786a25bc456ef4a04a5c686304dac6d94d3cf4e4860a68789cde1ad397bc4e1f9020082057507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09c41aede6b856539fdfc78cec41e9774893b4e512f53d1f1c1dbe583ca69b2b3a07e510c401e54b024f4dccf73bc3f6d216b830b8bae6f8b39c1439839cf7bacc9f9020082057607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02efc570f1875d16c97a29844f8a6db04b456cff8c96bc25bc92f5d6a77a43d87a010b169f5768cd75abc58c8987586ad77a959bf4180a64b6a8fb44dba771b818bf9020082057707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d2a2168fb89511544b140f9682d01599e1a53d5e5b09cc72e7d100c5cddfbaaa05c0624aa1c80f2a6f844b507d62455bf9bc395aca7a464b32b3119c0ffb4f992f9020082057807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05bf90d198a9dc791a7451fea7679050b8bdf11c35aa37a3713be7b590b0d8af6a0275b0365a06e569a71a95ff3d24b47a4b599d906fc3d676ae51ba8c2cf0983d9f9020082057907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a072eadad644eff6fd747aaa4c24114c8f44d483903a9eeef5d5a2e728f56c8fc4a03be180d690fb648e6f5f7fe736af888df54924e6392aecc548b35feaeba7dbaef9020082057a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dc823b7d6d55a50690eb78320c7c9296946d1e5e2796613ad9366d479074eb09a06e2c247032cdc207f66c2eed95507be243fbff330933f9d4fdb0fef6ec3a49d7f9020082057b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a041abbce89187c7d02c7fbd86ae0a5cc2736dee1dc21c69c39cc410f461edaefaa03a36890d43f35d6ce14a11ae6133d66eed6332d9f429e941ad728b61cf7c1585f9020082057c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00ba121fffacb5e97b5293694e009ae438244b7e605d17418923a79dd4c89fe91a02fccaf71cb40d28adc44aafbc84be9760e33f453e949ae0fff68eaa646f0eed8f9020082057d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03dac6550b4fc9ce78dab83db6ef22289149e32b3f554605cfe1add704925338ba0751c6e7490f75108acc7323f58c908bd7da3c5ec44d0a438605d72f0b1f8148ff9020082057e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f5a34c498c8c5562920c03fffbd93099f3c8887f91bf365939720a00777d140aa042db7ac88361ea17fff36559868521641266dc844c37764de25d04486a1c006bf9020082057f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08b0252c32e6336b45a2b48c6f15c00b596665f3cf1439c380f29ca074dc8de64a020e3280a283aae70a109b64049aaa232dd260e0cb311b21147cb1cf1befe286ef9020082058007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09b55d31e56ac156fa3630a656abb75a26f0ea9f350c4ad44fa114a347418c158a00a574d2b8b88df139d04d59b4e51faf78e00411bfe2a1cd29d4da7295c0505bef9020082058107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ceac1394db4edfc1d8bdb9c5e81ee3d248f28542631970be14081de03f0c5309a05fef224235cdcc4f6dee778ac51e35fe6c579d7f6e6ee887b99a30b147522200f9020082058207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a096a991783f508e0e1353858d418323bd8f42c7e48a4767b185d81c751318f3b5a02ba327f0c1f4eaa313473126962c39835ac452899bfe97e00abda17f7a8429eaf9020082058307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07f8a04e75c163f7bbeef03d0c62c15be52384a9187b16fbd60fcf95f3aa0c2d1a0526c0c7e063bf7530bb71c39895fed6e5430b5d2c376f9ff105a160d452bcb2af9020082058407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fe6fb0afe443235c1a561e267f3b089567eb1c4431fd535450ea5c1e9cdb2f42a01b35312465e0a330ac0778fe27506a93c2345b9d84ce5fd33ff584c575ed8c54f9020082058507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c346774e8ff67b9db059f0b75b940de8a13649602d8d3b5e1389b1784745de7da0620a97224e90bed0f431fa0f9ff3ac9a94fa0f682595d388f9c4f359b51208d9f9020082058607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d23f5d604c1f241dc7e21d2421bfe42b0266252a3d58754df8d6e9dea9b65518a0373e54837e1ab1d24272a811fbf1afba574ada5757fe7caabe0afd3414f88a5ff9020082058707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a008e6f3352c3a915b194f6bfefd0d14f9ec34ed3179c4b32e144813feb9d96b2ea005a0650a786962677957a2105aedadff28a9e95b754b1d4465213bf34611c699f9020082058807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06d83138341580727b9d31e1fb2911ebb59fea474166542ffff5cc88a6ba05eeda03b9a5e6bd86ed9e5370c124b362a47db688669af5533bd8eb9a8ef3cb4323027f9020082058907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a008cb9639c70819e4a17ac7a8274fb140ff54a6aa1317b5600fde7ee05f1eba76a0697e1c02ef3624938d151fa672d4ab73eb0291ff90071ff37ff32e82a0fc5ef4f9020082058a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04a6b27180c2931027229bd42317eacb9f476dacf525884e1a8a0cfecaabcd19fa0581a685d12d640b86fdbb94259cca008da3d3a4dc69629bfa4e82f6c45cf652bf9020082058b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a092fed6780050f27c4e45a403eebfdce30ffb37eff3dc825675a375a9b7ee7effa03930c3e7264f786623e0d34e2ed646126b984d09fa724d1bf5b54080d1ba028cf9020082058c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08c65e1b3be5df409d07c7ab92f659588d0b01649544b036c70d5672c65c53f09a029892283c3d14a2bd548e972c51294741c602f610e6b30dc73fc1fe4a1616719f9020082058d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a0214a1ceb053b0b47e4e93838b52b2cb97644fb7b70c31e810ca6017382d7b1a02faf2358b813491354c9de4fc348344f1ad6ddf60338d63f937a54bae146b455f9020082058e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0856893598dbee8186e4ca4c71f74475fdff25128686d6e771df296ec6bde8831a016f57145423b52444747ba02247be1865b568fd4f11554dce4707673223951d1f9020082058f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ba885a4c6a08371534ac15ecf2b58769a225f07addb1217db8d4f488dee9e85fa047ba1fd2b47510c2d5bc1ddab967291d9a9025d3f5e5c9edd6f3da84feef4da7f9020082059007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a333fdafb450317486ad7d8043ec182ff169475e3c78d1bc6c1c04146f710a0aa06d6ab7863e0f144d54065905ffbad43194781e25a84d0d86eb0b9e427bb3bf52f9020082059107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c1413260fdaa1ee8142cb949f061fe73d41847c6bd8ca8bdbd021012c0b2b7a0a053daec90c758275664a73bbb06f4e1b44caac908ed8fdb7d6da7ea5c1e655255f9020082059207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0623065a05755169170fe1a623b31bd45b99b71bdcc394e5fa2e5662f397f96f6a0165a7eb39cddb571aa1547eae2c25ac88709737ad98a44093c642d2b277f60b2f9020082059307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b698e963b7c782c04f72714dc85389031a6b478db1c4e8665dfa844525cf453da01404ea28fb687b4acef8ef5927f939c7ddbd3a6fc8a11421197e4a220c561b78f9020082059407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02a10f7ec4efa44206f81f183fc4df4183566c912bbea4ba2e17efa489d6f4607a06a5bc1d6e098c93870b2e0d1c15a7f69ef783dabcf3cd80817981d5ae262e680f9020082059507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a090ddb95ae6c16c4f8151ee0af5133dbb04a53da3ff1653d73fd2f1305f833344a063f61e952134c1724e764898a36c693dd3437a0106f33b8d84df22efc44fe0fff9020082059607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0063e1da5f0c409ced750b001815a10610bfc61c1790e9440b517610a4ac460a2a072b8decb824742643a09db4d2142f26920e49814fae49f20990f97819d9aa67df9020082059707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05304f56c4407c4a62d4045054bc8690c48264fa1c1c4053d8fddd7c99690c541a06e17c279dc221ed1ac1fd8d284c5b478ff8f6525fdbcfe0769378db74a9ff5aff901ff82059807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003269f8d1def2cbaafd0d623e3bfd2d4f6e5c5a54e1905cfdcdced15a458c6622c55a02917ac530694bb7193756e5cb7acc9c9402ce756af612ecb2358c3e94d9afb9ff9020082059907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06e44ddbd8f0bac6bb6fa23ff6409f68e057166675053f8759165933385b27495a079ddd2f83e7f8002ab623907b9ef987a1ddc7491620febb2f9678c78c0c735e3f9020082059a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a076e7a4d11f45bd73f4a37343f45bd6071ba0eae7a28b4971b3463c42f9570bd2a045babc052409f64a4d364d858ff235703a5f0f1097cb72a214a48107783dd0b9f9020082059b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d8280ceea400fa798a07fe0a3d77b0ae2ee76d0533fc967632da1843a2445a96a0733e837d09697006a6565bc8bc100730ed7da1f78d92d28ae490c4228bb1ac55f9020082059c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a7af9aaed201af63849d73cf1dc666f33418df121cd37bac126866025a22f965a060c9ea919bca54d2b5e0dd40c6cad1f951bfe98abb39590be5342a04aafeaf13f9020082059d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f1c33db0a2d37eeb660f29053c43c9745d04e22374c18b2e69c623bae8e47b70a0517c3f667bed6818b3d840cf4a835e480e24fc6e14b7e79359a955314c806bd3f9020082059e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a097e6033f891e29a01e1fa04f2f3feebb0a238e9dbe7b8e9834dbaed4d5c951aba03f66b74c23b48b106d7f26d44142e9bf15813e3f5a05006899ccc9b06ea36b3cf9020082059f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05f3ba013b059dad52a4307c1e958f485959c0c757c496bca1873e2de7b0f662aa052db931bdd4c357963fc148ea7af8af451bbb21cd7d99104d262c11ed7013efaf902008205a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a034707753e269d7c1ee2b9c881a86e40df960611763cbebc478ad97655a2240d8a00d55dad95ec6d6011771b575ccb0114ef10f36cc34b8b9de37c4d0779d01d3e0f902008205a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a015df90e0e7c9eaab1a5f395323609979a5a9860e1995b55e1539ef496e097d21a036cc9d9478f6e55e8867ec8f5dd3d0742d240113b942e123a98b8ee7de096ba0f902008205a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0593deaa169f7816c576a68cf15052f6231d40e6b265c855c2058810391c9b21ba05e89b7c1af76143b66e4ebf1b7abccb2ba58b14d3b81411126a6ed8bf7a48ce5f902008205a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05a6f941242c3436278e0d3ee3af9d652e738ebff56a2aff9055b510fb0723f2ba00f3002ff4297e270427fa04665b321e91ea44682fdf3fe166044a26b17cdb752f902008205a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09a71ae5bd0c873b00c27a844d5bd6581f605cf1813851a6df87120e60274a759a028d570e85f1ad9509f68e1bf8746edd47f1ef7359830d5b31c262ff0ce83450cf902008205a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a018d13943c59c174cd2abb45713065666f7781e6aec4aae361028d332a20f6ef2a05019faf8dfa4d4a13d9f69f228626728bb7e3e295ef8d32f83c3065ed1b27aecf902008205a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0231b0d5a3e4e897b176f5bce29a5ed4c3f4f1e01d8dac9716382cc8b99c6faf0a02c0cfccdc3a02af9815d724f65896a397ce5444af433a52e6317554a62d16c65f902008205a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0989e9887dfc4461dc0a61d5f17d83ae76253c19364e8438eae6a444d37ef90fea03ad6c00e3d750c878c37dd6bf8f389bb6e84dd09966b3be84b81f51aac299529f902008205a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044fcc4ee212645b6aa5e216c880cad0404d52a25057078faaefd4a13b7ab81bfa00848147714b1e604bb017cb705a4a4d16582d9eaeabdf313a8a57c99d752d679f902008205a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a248d0e15be4a54391d013d7d21966842176f4d0024db95fc91f47f8712b1307a0144f9e196fafbbccdb3e4b547af07d9bd283166c63b0ccc065f8aba222fde363f902008205aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0049739b06a17e3e55348661e955d4a11b4ce8a6bcd7e193ae2bdb5fbc7d07e07a0313c8dbd00e08a9e7eb1d5ed982332ec29598467e9d4cdd7fe6370252aaf9692f902008205ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ebe2d37a6f3af7aa235982f8832ae31484a1eb85fec2ffe8a4ebc0dfe543ee9da07225f8237b866a7386296d85dffa6ac5d4dbfb490dc68ba34ec408d9beac263ff902008205ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07988bbebe1950b7b04ccfdb8bb278d881bffa97c033326a135a334bcc0b6b994a01758ee3c394dcd4db0b3e26862d8a7dbfc85cf8f886b3e88e8999928dac1ad1ff902008205ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0333dfbc79d6ecb387291ad2fc28ce1706f596b9dace3a2eff70889031084118da00ee161cb62764d4fdffab6cd30df40bf490d97cc87fc1be7e95ec40018640f38f902008205ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c8c3b7a5b24a238edbd1cc35c4cd56a99dbc70c06c72d9b14432d7fa8972f18ea00bddb72d90125899d05d73ae83645c0654772c890119e205aaddb4c9cd8f50b1f902008205af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bc1131784771d60d5fad29fd0b579d419dcbefbd698b01f36b8a1ae400a9c14da02e7940de61f31d723ca7c87d91ebc5a2b7fb56174a068f15a86da3050e49258df902008205b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cb747543cd059f8f48a0041f1b5437b5b08ea2e52b87b283a582feb9b65e41f2a016974ede7fd6e0aeaa0a2319bc8178d8f42e804f780e6e3255f1bf157e4b98bff902008205b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b5038646a8aceb9d36fe82e67e7dd8d2f52750270b04a55673972341cc41c566a0238e0cb4632fd6835335f7e4599b4019cb3668d2317bdf57cfbbcd5990606a43f902008205b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0818666bf5fb037d55ce8e76f8f941510ef06e17ed41aeef198b79252d69dfc97a0043988cbe1a32a2424a8eb6a09548b100531f6d7af0800fef9b73a5a487a0470f902008205b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08d530a07c34ac477bd10779aaf3a1709002a407374e892b8c726f6a2e9cb5016a063199d97f2b1182290e78eecd42437e2922b3d62bd9892f659aa547317a74d02f902008205b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0999272265e16658d737e7bda82812df27cee125fdc56df584141cce48b407478a07f91972b8e898a53487f7104431a44534f4ec78bf7f95d430873bd1b8aac10c8f902008205b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a1d14e901f6a8e0bb2db37d7a50dafc23a0a740be61dc998bad4adf67908bbd8a05c6f48b50b37e9f109e18c328a31b148b245e727ad451b327e8ac13da7ae348af902008205b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a044fd9ce8d8345afe957e6e22fbe814925bef9accd5f01c8fe76f2b62e554b039a003ef7f1119fe2dc326895e624c938bfc59f87ec7b592931a73cab56f7b721a70f902008205b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a089e92f6555a3cd7b03d3dfef741c5d1989a6517739705afe7dcb2ca09ecac794a039a4820140a6e187f7d3fda12787d82db1ee01d033b1364b5a2d717d355caea7f902008205b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0adb92c20b1e5c80ddbb99976bba1daa4b8d318b5e3d99830ed33035a99c4f6ffa0337e75500d9906d9b2c6e4b09a45ef79ab6f85b1dd69f119225ee76c1b363edef902008205b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dca06ce4cea35add203694370a08c768edcb38fe6c492c1126cd625b2c66488ea05f5fe8ea1395441c95bda4084bd6d92930486ebe8635776243ee1a09c1234166f902008205ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0037380f42e5a97217aa56cbd20e847521a1a2b3038648dccbc97d9597bf97088a07db93b707e9c52bc456b80f59a6fa758df971301d2f07a419ae3bea769ad31f3f902008205bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cb49c38a8a446441d824a4e59ce5cb254008384d61e7cddcc8e9075b394894daa0629354ccfb918e69ef243ce77421784e24b7a5611866372e77675725185d45a2f902008205bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e93e3999770973f6c79064b09b4c3ad77789bdded1c3dc03240eaca76618d6ffa022aa0cc2ce5df2afd94be6efbc49a734dcfa15fef39fe359377900c9bcac01b4f902008205bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a0019aab8a69fb2290fede8b11b7add59acfec6f4f3ef1c635682c5a948cc0d0a05ff85727a7c9591b91f9a800dd8f221ff6df3d99678b9c1e11bde5b0220e7a74f902008205be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0873bac0184be305dc74c17b8f8e348ae3d5fef33133eb17e5f1e05f2da1cf8d0a05131f9bd9d441975465aed9edc6bfd02c07e7857ef4f156622ea3e205b0b8fedf902008205bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00ef3e7d71799210f713801c0a6ad9b3988a88c8fbb3d7fc28a3d6356854fe7e0a055df668d1f3ff2d3a5b8585b8622241729b0c4f7bba04d1d2debfe050b884572f902008205c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00f017ca0ed87cbcefa96ea7bf8dabd49039b3d4310958a9090717313957347bda05f07593314e8b206ff652ec8cfa57ade41ddece38778de7a5e883cc9660ad795f902008205c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0055e9cedef178c9044ecf6d0035b55a96df0253964d6462213e1d1384876b127a03f122b9e4de52dc54fea4306da0fdcec568456d003dd8ed4fc3e81628f7470caf902008205c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00c76a2bcbc3676aedd4982eb8bc19644e6666dbde04fd7ceafeec79322d6e013a012d8555c002023f06e47dc478a298b8ebe903a6ef01a93689e64d0a3951fda39f902008205c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02133b976f01286c0604108cc7219eeb3502a54ee09af8590567de0dea7fd1fdca03d66efad614334a2f0ca887f5c118d6542d3b4a63a19a8bf55bc05dd2a9a5736f902008205c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a004e6cc33736d8905c19381e6cdb16e8abfaedd66f09729438f91a32801e6e684a01a412f74f6b0aa3c23bfac1d7842f8157a6f4bcb364ead66b4ae091e08f90a4cf902008205c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04ac81d42e8bcd90cd1410217d5b7737eded3effaf9caf6fd55f8efd581b2da89a0412016983e064917ebc85627150796c7c2061d1fa8fc1e1d9cbc47caa44b3781f902008205c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a066a5c7db22d2b5a614ebbcea87ec412d4b2916bff634b426ca7484811da472dfa01bfa48f2ab9c3bdf7db3c784aba8668a0d69287be5bd4e07a1b7164b36e876b2f902008205c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0154734e2a21e19d2df6bef5d3afcf1d7928aaff70d99fe3a1e32809aa5a874b3a05efeac94c67e0b48f6bd2b3fc35671896a93d495e1fcce9fe6da6feb65f2b0f0f902008205c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0445be77906d0151c2b09dd76d783653b40553bd79795c6a625d85649b1d300e2a046f40bfa1fa9441b8a92776a3ed20d291234e715a74d8db79da3216eaf99f8d2f902008205c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0665f67a2acbc03ff06e49db57311b99f1172c295d291b7b6723b752086cd80dca004c0c050d3134f4fbbc49172cefc5eb761e189930ea482ce99d668b5f991f32ff902008205ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cbfd1fcbd5daa1fc77df9d58ff76b411ea075f0ce35d4719141a5ee1a65f4f93a00fc54c9eaeef136f5dc063de561ee5a820f44b42c816e6d837ff458f5eecd4def902008205cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07b3395135fb9b4c0421631e1940d45aa196f633a9abf82ba18810e18e6d1d122a0637910a2285d09799b640dd1e69998676a73ed5e54dec42393ee6460e82dc492f902008205cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b5a14f47290ace8cc3bee37c0b2ffa7f7b5e8547dd6b3d6a4e0cc8a8342e7005a0773f9049e4ac8a5f9cd967631a78d4e53fed5a84d235d73479983d25276f8780f902008205cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05e7b5d50c284d9fb5c9464b087fd4c29d5539739ebe56028076e1c0fa1121b02a02b000b62a5a37802064d3741a466bd752407a2be91c4cf9667ca934ed36112f3f902008205ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04308b1896eab0c25f710b4f91cb3cd7bae669afa03dd0e7360dd01ebba4f38c9a07abdb2df4d9b24a50b7f8a56b57a0a48ccdca7c02922c455482ab179526ecfa2f902008205cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01d540f5c08bcebdd9d69e37d7a2df365414dbae0ac5a1fb898d3c681f25f725ba01beba7c0a9b4053cc07bf9c20b2078338d19d5119811e4d660e72a7d11fadd69f902008205d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0355eec195d1493121947a112a17a5406f4f7b00c5b3fd8944c21ab1d2b6debd9a046893bd28d3b22a0f47bb76ddaabe3ea1245cc29c53a4771f179185face4025af902008205d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02c314a994a7141242856cb941400db273af347926dbec550e9473dbe74aef095a007b26a820e84d0c5a625267f119dc21b57261d2fb63bcbc8bcddf0d4450e8756f902008205d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a37ce18bc0ad3ae4eecd01940ee2807fe4672affc6a5ac75fea4e2e733427467a0391b4d96a3fdd44318f9ea9d62bf183ce1e26eae00509d730310b8ebcf7920b0f902008205d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e95dbc4649c7a5cd08073c74418febf86e1336e1978a0d3993e7b43e64542ec8a02674f29f384a8d09b684b2a73f688ef3829a15b5ef3a0ed6e488c65db6bd3feff902008205d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0280748209c0df422eb955fe08ce0c39465b8227dca1ec84776e4212bf89b0bfca00882c6cfbd4a9f87f6065dbe005c7cee8e1b7517a99e7a1bc89edfcbd510929cf902008205d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c51169ae803da5e5f2bbc625b1de6edbbf8b5d65fc0ca4304d06e051e51de569a0109a2ed0f7fa415984b31e39cdc7dc6961c5e85fa1cc524c501eedd62e671a5ff902008205d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a098d19445042a65f88b4b77d5e21cf427c68ea4220f59f2f8f6c041643ae9f628a07e97bfabd055c9288cdc987b96f7dc971ebcf6744d3e20cce4a95bddb82462abf902008205d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01015331b08e4459c8d3e6e13103f96c4884745df2aaeefc8cc6d787f976d15aba05ffe123f7360be7f4c99bbec884c83cf31c448cdb76805004fb2a4124e7f907bf902008205d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c167932334c2b0be7981bb751c959dab2a41d583385eab0c50b2995ce4bc6515a07fdf151f82fd936f093b900e206d62cd78edb8336186735c5d52451c278bc76ef902008205d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0196cf7794ed3e70e37daf3a8067f4b04edf00f004eaa56ae83f2eef79448d05da06fd01577dedf28826cec8a17902d0b517eabf85d96312c55870389b73720f375f902008205da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a021a41122d7897098cdbea0755389ebdd245ab0ad6e356de1b04def75e66b84f2a015e601885798cbe1c0eb644a693e57c8b557e5ca41480b24e59d141f05fd1a5df902008205db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fbd962448762059aa7036e61b61a02fffa2f0b24e527fe82d04807b2fe8beb4ba03afe60760ce8fd2ae24f0781fb9776d023a5bb25b4fa66604d72bb781ebeecb0f902008205dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a034c0d85515dd2c0273af0cd3c727af6f3888800443f6dfa0938a32af25d1aa75a06452e524aa9a5a57320f07e3869560c3c60a1dbdd728b37cb78760a03208591ff902008205dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d291dafb3a2ba56daf01fc370632450951d8e46940792806e205c1a7f4fda56ca079d2d031efb2a9fd950696c0836447d7c079bc760317f20ca21e27369770f0a0f902008205de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a086c1f5306a0c3159258ca3456cd652d72d61dc6a158855445fdab6c615e572eea049a658a3c1225176d71676d6e3a3d0a8df4da4b413bd8497904e7b305dbe2159f902008205df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a014989cf20a179c51d24a4bbe851203ae1af5b1e301af7ac3c92a6d298581ff98a04597b724297f808c4bc657c5df4635c3c542123808c2a35f1287663061b62664f902008205e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a007846b7b63568dffa545e9f1ae734b29de8f67c6ed2d46356bd827d6cd9d9f03a03cdd8238c241382c5d23962c77b10327cb6e88275ce2f5e7dbf1778078981886f902008205e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0097e0e7ed597d85729314f6ecc07dd9ff5af680437d1289a1592cf5966414344a01458abff2f5d85a256baedda3ecaa038fc5f5a9ef347d881712a3be9d1fc2503f902008205e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c5bd8dd1bef1d1133c582a7c322d626dc1971a44c4620e0a4ee9633d17b08d2fa07de1a34ce280e3df3715f734eeb6d63acf0c846b621409b254beb0ff47b54360f902008205e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09630120902f222deff0d99e3c50280b522339eba6d3f6d86c61a1ac3adb4d363a00520763b93b8df41dfce6c31045622ee09f4f0bcd2cd96fcdf69d4ee5beddf01f902008205e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b78325e1c43da7c12d6fa728cbabe424b2a15e964f6de4acb0244f9ba61ed9f6a075055f1162d3090308401f2780706b76bf76ae2c0b38755c57e3233ba6c1251ef902008205e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a015edb31ac9ed092708737918f565c154acc2a2b6a0aa052ff6d4652f0740d3faa07784e41cc8cc6b48582a405399dd9204184da23f7e006e68ea1342eb737f5811f902008205e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05e80a0dd2884576269e086f90601ef7f74cf38ab1dd18aec3b6cb30e116ee0c2a06cd302c1d6822711ea6116ef51bb04ca7f3616f061ac62e8da721f3373587652f902008205e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b0e3c62f3c542406e6712049ecc0e41128a14a78cf0fa93c503e02c33b774bf0a01f9f29b8a45e07edd584c7ddc7b3765ac717804894987e4c69d474257a18dd3cf902008205e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08f00857df45ead1592fad456a3b10e365533be8a623cc698be67fe6079b23db9a07e65bc69dda24f7d6629f5b963393f87194e258195b933e19cbfdac7336eb96cf902008205e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0695784a3d7f342c1c0794b888e901755bd410c9fd20e70252775b8ce7134d32ca026f377a9ec408d230193f72fada41c7ce1f276282767501a292531a937b7da60f902008205ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04600c7a120fcf3e686e8fc45daa75d2fc30784467fcc6d99381dd703b0a0524aa06b22076aa82b0fb3d46baff97a311be8e752865f443b6486d07b95e70c320d91f902008205eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b3380b534499bf6bd62c4bd3524fb8af4062289dcd552e27bca9d213800e6c52a05c06510e822a1afca28c90465373b8c08543902eb230891dfc2b0c531a8d2ffdf902008205ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e3b713b0ad25d2e70268b43a6837d681ef859287d1aaaf4ca2a142d75e20d7d5a02bedc2bc7f23b9d02542cebae53ccd4f26c4f805afdf617f87a791eacdd5fbeef902008205ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e912350c9f5c5d203642900686b5ea36ad5ce0118e4c5508b076a7dc3cec0f8aa0574496a59a1c373c41ca2a1b439df1088f007331776a323b8e9eb1f716431777f902008205ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d52a943af819a3d6a3b673e34d62390c129f21ea997e1f88608a4a590c30bcfaa01f58052c8175156f06bc3cf34fb8f17f3f137c1adbdd867f84c6c3022db08ff6f902008205ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09ef299099f8b7951e7a4ef0bef1330cc14f4aaa278219c4189e75c66919bb39ca04da1aaa286805b40150e37c55fca59439e3b2338264a934d45d1ea54b605bb64f902008205f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a073a084d7e7578c3f23af534a2d790a478ec63a881537d07d54ca4045103d17d3a0680dff98219686dccc09977a0f82d83b6d03bb00faf0a38e45a0f9abc44e6732f902008205f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0af841b8c1733b6f9d14185edef98f7b12fc76abf1788c657927156e44db0cd50a0157e424b3dd40af321344fdaca23747c2510fa9e4ffc00b6f3e8188edc06a354f902008205f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c37794372f0f02bf95e741aacea93b105f6153aa301040662202848d9bb477a8a07939fc67fa05ea5a6cca788286922582b68ea8e75c442c484d598af0bc06471df902008205f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04e362b4da4299757ba8bbe136e9358032ef211057e7ee7c143dda3d0fb232c12a04e9c5b7c17057517f96f44e520e6780962317d6b3099ee02f5c704bdcb8a8e6cf902008205f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f511f72bacabcb8ac68f586648614da870bdac615a36424a7fd890e14ee93971a06bc74b92169896226deb3ee3fcfb60e6750be869c9344dd391347bd623c6fee9f902008205f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f4d3b8b9ccac0add68f3f285b088eb14ae1b68bd69811598dd103f58e7076134a019cd40df03e5eb8eba33980736093b65e0130a376c3eb2e0215c42ed6abd7cd1f902008205f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f4b77c7c72d00d31b377f55f4e64192932678a3c175ec16f0a92452f9b595ce5a039216781182aa01885de4d665bd8d61ab85f2e8bb0f0e91ffaf2434638b0aa52f902008205f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06498ce770eab2ce12203c78fe1ea380ad610f3a65fca783ffc83b07bed98d717a07d17de1092e0bbac120734261bd1dfec4a5a339243a4eb9d10cb98d90bba3532f902008205f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09cd889c6a62444ce6505de65806168931cda136d7d538bf95b9e0bb00ae2e041a068e1d3f221846bab5961ae584e725c34ed08bed60a49b2c467480b56e1350181f902008205f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e4f7640742fda2d98b886450ccacc25dd13b87a8f3b7c8b7669a372bd58476fda01124506f46461f4a430234c70571f9ae4116e541b9827a9e361273b62b9cfa01f902008205fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a061232f5ccb058ed211043aa046ce87876618b9db960760fbf302644020753b63a009b5801bb6a2db5d9a2184a746675eb14e45e86ce278d1d752d755eba0b946c0f902008205fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d419476a92229e325968c95f295088ae786d6fe471782c476739e1966862665ea07ff979f14406393c9ac8ebbb1b2124cb981855086abcfe7a7ea7520222da416cf902008205fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03d98ddf89bdae11331e4bd556d48e91877582b1dab2ef511bbefdae3858f733ea06e7be8e4cf3f90af1646a0b597e6bcf5f98bf07059dd5e411544edbf1e6eb547f902008205fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06468df42fb6538fcb4e35b8e6ec7ace8a44be7110e1bd23b8d57886e27994b91a03da2aba01fcb4aab91f98303fd066f21322f0df72b275f22941fb4efa3bdf179f902008205fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06749961b373d0385feeb3c6355b5e10950fd4fd33b24e24c7093530f1f0f7a29a03f6cffaae756f1e2f59a8a6d4ddcc6618987375d9ce32045680d1f8522611d70f902008205ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d86205b3104052973dcb15bb3a9ea6cab7f6716d836a519fb298b06e6d485d6a047be8d9be1a8d218efb230544fbe1a56aab8477539cad26ea97c8f7f5a794caff9020082060007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ca633c64435000aa1b52c387dd0508d3d338f842fbbb657a8fd0986c40614e10a004f8cf7a6759c608a9ef5b57090cbcb937cd78763630f29053cccf8e092d4071f9020082060107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08b1a8d450330900082c807f8bc4b9c5ca5fd3d50f1803eccfdbd169c89ed6924a017abbd2c24e7bf82b4f4c50d1d9249aa91aee9f9676135ab3f18be969e7a7684f9020082060207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04adc27afbce2aca550f3f4e6d7305e2bf9bdd77b689cc4b1d50026bbaf3c209da019deb29b19a2622ddb9e04b05bfa628d507adea594c2102f6b78e6262445bb20f9020082060307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a042e053ce21d30477e665d20e6d0ba3c4e22754e865da12bd5abfaaf606f16cf5a027faeeb2a4f37ff571dc8cfdc6c3121576d0e9baf4e390e531e0947a6e23e2dbf9020082060407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0163123453055707fa9c792b68351c94f48b7f73e7424c562b6e9c083becf7a99a079824c977e82ffe9768af8d0fecafd3d6bb28c9ce6526c2b377f70a09d640f28f9020082060507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a094ed9ff2f4b49758107a1237663139ab0e535f2d6f09d45c9ddac5a279dc50aba05cbabf9d54906702205a3dab69a441896f95e5e0b3e3c7ab5a8bc5963c2c6d7df9020082060607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a047f1ed0295f7ef4b6dd6da69922ae47bba364a419fd37f378980fea2d95c48eda053114b834158e73b3395f4726e259ca460e887b5005ef4b9a64870cb082f4ae4f9020082060707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09da3445a077799f760f7a9644911b55f2896e5e490f1cba667abac25b232bb7fa06d982e01816b870567faddfcf80e849160990aa224b55ba0626029e2fcbb10d1f9020082060807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a049021cd57a3d4b2c412b4f92434b2ffad1bebd0f74c90b70fbd2eb2820e6f349a0781b78b6e22dd54cdcec541b0facfb65e2325f9faa425c03d11845b5c77f2d2bf9020082060907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01a4063b01dedc06714be0ed90648b8752c8ded0e770f3430e0d143589d64f4cda00c930481c3666b8f8a9456d4764875c8295b4f1dea4eb3a3907083e448b31827f9020082060a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a043585a5d27d5e26ab3f0e65f7bd471cd0d77067ca16c76f0c5adb4669535fc4ca02d92c28d38e8b6d37ec5c7a1248d162a71ce8f5406d16b52bd00afeecef6bb69f9020082060b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d91d22837c064ef8fdb927fbae4d47ae15867064d2727a18902b8f64c23bef0da07f397e10d07a97f70c6329ea01ea27962cad7c6622b2efb078b579de01cf3c18f9020082060c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c27a4058203ecc193a3c5e19e65d8f1bbd2528a1808b40d9343457e31abf06c0a027324ce80d6048019c28f9e8c93ffa057f742c5cb05ae4b12c96e588bf215598f9020082060d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a031056658e03ddfd45caa85b936eafc1c15cf7cf90e01d255fb123ff509e06f0ca029c5f9572263de26b5a2671e1b7ab051105a6f987f494182abc8689b1e1e2c9bf9020082060e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0805fab6ce0f88d556726bec55f0a8de7eec8d18aaabf153c1123d699b9ea32fea06605c3e6c9d0d8cffa6aec83aa28890f2a5528a0c73e12ffd00ec940410057ebf9020082060f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c65a5e4e8f5054900736151523b97bb18157cb589de5c9f0ea622ec68f44697a03bedf264abf6f35ba7501fec53e835b51827113a46c88fbd7d913f3ce21de74df9020082061007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a059f19316a6a5761c993ca4a181d6a614c9c9b0add55271b84998d643ecc1cf90a023306fc70d09d4c4eaab23a0032ac64a9c2c8b63800a911298bc83d0c72c83b3f9020082061107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cde2e846c2cebf278612a844c388d94de69a55e050b06615cc4a51a420fc3282a054a9f5fa93de6dc9b41c474e663c8fe7d91c4768e3b75e7651aedaa2d0f0cd3af9020082061207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f21ab6ce96c11ba079c2aeb2a045a4b47e4b449193ff556cc829574ffc1662b5a029746f5df63bc8d52649d57d484ae9f54d82810a03d5d7fcf0d595c1250d94b6f9020082061307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f916b6552afce6d62f1422fd084dc4f6bfb05f656b831e13b57e0125c8e767a0a04fd8a81f7665dc422ee53d7bf49d81d4940a54c4bfbe6d33bc4a7ec656121cadf9020082061407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a014b5a43da607076ba3540e21733c409bc825defc6bd58b0a87c9fe70c7702c7ea01cb401fe35f29f279b71329ae4d972bdec5e000334db0373abdb8f31cd8ecca4f9020082061507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08d71e63fc19ec9fb249eeb0a6f72a4e18e30187d55585191b6d00be1ca1f4c82a02cc36f869045c272ba8e646e8eab6ff6839bc8d653f3d54381a0fa607c4d0716f9020082061607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09191270ee2a23f0603dda32c495a53c757f0a3ecc1b8aec829c86f43af8934e9a02f375d4ada597c4d6413442089590cea592922fdd7b3f0c495d61bf174e50b65f9020082061707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a036e568a2f6c5c97fa7096801dc8c4d039c806642d54c7d8edce8557f18ebd52fa04773fba3a6466fa4bb60e4594a763526c915f07671faf7f22e20f105d3441159f9020082061807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d74f12e69ec83502b32e54521955e2be4b38bb184e3066fb2aaf202b76ea6fdba07edd1df47e6309798f0d8e3e0441a54c611affc12d244300a3a4291a3a2f14edf9020082061907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00da8c02f196ce89055af2033bfed4bb495c6bbc11ca754db4c5989dec1558b7ea06efa543ad1d661f120187e4af51dc89e8679862dec823a88cdddbb4e959b8c56f9020082061a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0758b7ffbed537703847e87f891f14334e0d37f36af5ab10082ba5d3e6d4048a3a0789d9ea80503ed106be2a08a8be6eacbf5e5ecb15054c3c1d68d0fca135730c9f9020082061b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05648a131390be46b6bf056a5bd241181f8a8c16e941d7222be3fd0c2813ef1e4a04a43535755c881707be76181dcc1ab4cc087603ea6ab2a4b190ca0d3f934fdf9f9020082061c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0728c5f97c97b8e85df5896a35bb4a05d0db59800fb5aca42df23bd451e1c6fc0a05f4f812566241b36f5d60a5dda3bf1a37f47ea73a45070bcb00aba3aac2f6c1df9020082061d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0858a08f9915246ebac55cd2680f630291d1a342cb9cabde17591accb2fd3b5f6a0753eb208e728c1125748faecdeaefc119baf05f35b76dec65b81a173bb6e9f73f9020082061e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0575938836ba80703ac38f1540d093649bad2353bc0dfd7f9eeeb99fedaa5c229a045c0c31b1ee7255b59a2b2e33bc75131c0924aade6c4f5d694a5ee403b27381cf9020082061f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ae45757e3bc0ed8db3815ee8d364810774794fd630b8010035a7b70f15fc50c9a06f85756a2e004351aae2c0d2733ed763aadee8fdabde8b22b7461571a1d48545f9020082062007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ba627ff31e2bbc086b1396c7bf2a76b4675579e69acbfc5b5d0884cd8fc742faa001d6ea63fa34c600b1ad3d9780f0d5269ca856a45c45f8dc487aec41dc6fd595f9020082062107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e0bdae2e6102078def62aa483d972967dcd307c52a754704caaf94662489cc1ba03387cb6649855f49a53771c8c0effb96f8999683bb8d256eefe4cbe7e72d0153f9020082062207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b27ebbf9204d5d2b7f2e878e4c1326251b4afbd66a6ce41a2f3dc0a672abbc34a05bb9d303f62a85be30a9f434c3692e6b7feb9938f726bd9d382795ff65474a10f9020082062307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ee3a05d15a86347c8092555eb18f49d77793d8f98d317ef0ecef0ab3790d7bb3a03c686b79f8f6b90e11941a67eb37aa068a143aeaddadf02b21ca826e33ab7aa8f9020082062407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ceb014b7e3f7ea1fb34f6a5098895d17a905ccdcab2b40a26330848ab440a520a06e7ab62c7abb16c9967c72503ee204e2bb9b7e417972886441ef69a4bceb6c1df9020082062507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c318f04c8b186db5d4177758c7be4a0ecbc10b0d864f567218c21e0c5c66e3bca00c7e776a4d0949d4ff7af0d1b55939302f4aa556167fbf7903c645f28dd6ca54f9020082062607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00605169e831de477aacbd2ee9ae969b6e849736ecac1818e85f2ed79c760f676a037fd1eeb20d88c9cdc002d9cc5dcbe66a740195e8243d6be876ba51b7943a7dcf9020082062707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a043d8d2169620e914d3a4fec40cc6853313dcf3a7a4a6b4f69d2c8669561143c4a0092f466f6c44dd9e0eb4f3a2defce72ff5f273435d3820e9f5d27bf6098ea4f3f9020082062807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02d09b7855f1b032d16223f4975765adacb1e9203fe949264e2b93860713409b5a05afe66597b6d3d616f5c10c809f3dce2fb284024d1feca7317e06a1a3abc592ff9020082062907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0066862c486f8c2843b7ad3d414bfa03b1830369e53793fbfd2862f2bc774a73ba02b9514f9ac35c49afb3fc7048b6e0b4ce89e0dd29bffa3088dc7407115bfadc9f9020082062a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02587675f24251b2553aa3fb9d42db964d0560c752f0aa934f0ad632e45c242afa040dc019e4ee455d71f6a493c36027945775da52638cba339fea158f53ec00dc1f9020082062b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f02626c73bd7369c355b844aac2ba94ecbd1dd7f4fbc3b2dc72dd65f29e50b0ea04dd71693d884aa43b5048091df10f2dc9dff05aac18176f896402e6f6a3333f8f9020082062c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04b87c14c7a57d3bac7fdfcd84573f7ecb3b0da4d6af41390d9d825f1136ef7fca02116d526a5a966a258f3451cbb55389f488eab1a5a0b2615d163e0768d662accf9020082062d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a095cd704fa30576a6d12b50b33b9ea539185a26dc5f2aa9ca1b4af42f3bf4fa46a020c8500f67c313b557031e870d703f5956b66a96369b6e0d216e97e3c5b0c16af9020082062e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a7ccc35a47661ba854979dc4018d93889b724a9876d51aaafce9520d318275c2a014e7ab0d5236826c02420a231f6e22cb5fc4d7fe99fb073c44d57474fcb0409df9020082062f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0901da90f94c08eefbef851a6c1c4367c5e5e753fa86483f992b8d1589f796754a00ddddef3f98c9afe6e19a66fd8db1e8041b814c4ca121dff8280b483164ee149f9020082063007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eef65cf0ffc1ccffd5bf97d374d60e098ff2a497c602da285543c268b14fc2eaa07294efa500b547878c74b8a09c3690b0b5eaae47c72a5c7c9073e2cc1031bad5f9020082063107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06521b4ad46dc1b9c7026feb026554c07a4ca617763c906998a3533e47d624d26a00ee10de16180b30c9b82ad354d10046ed29a833951e10d4d8497b69bb682c6a8f9020082063207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c022a4d7f15c568e29650deac402e9871fa1a3dd88318019e74945aa10a22d95a022fe88a30c903d52727fe4ed4255f656393a2f1bf0c33065927c35b2931c37e1f9020082063307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ae5467a1df505386c7fa55ff0b69d3fc26f5bb78635c9717736bc7cc4f5d3adca017bb851966b45d80d2a034de1351781797c4206eac1788a2351109c8700c3589f9020082063407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07cd65e505c7f9124599dc2a3bbcc2ddae235cca9c55909f8913e7a47a410155aa03a2a9f16aa0424f6857679a10c50745f4fb9d0121ce329d71389f72fe5e8f56ff9020082063507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c1de1092aaba4a1a61d9302a33282ccb67583157659b5c436b109d657c67b8a9a04c3c640f69eb85ce05fe574db8f53e5c97f2004519fdb2423907dfaa046ab9d2f9020082063607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00f2f60d29712a8f5e9b055c5263fb4784d37763875712f77d36e72d602a379b0a017c6257c3e03407bd1a527e54be52a74d49eea2666cce335591bd6e88fda311ff9020082063707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0856dccd4c95df3d9ae6e9fd9a8d73bac58fb3373d8c581dd693d9dd6bab73a9ba05800ed6974c92bba03c6634cad3d7726715b21cb555a5f6fabfa9c39fe2b8e5bf9020082063807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0af69a11803065bd4a460f3532abf613fa68f7db05b80696b25fe608113505db9a04040761a295716d12128d9dd4d4f5b32b0c541bf3bacc45b6dbd27658fbf560ff9020082063907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ec438f97982125d4acac890c165cf9d589e0d38e54f6aef9b9e5518c4a35d66ea059173d0f4ea535b7bb69111ad8a7a5300a6347b4f36e31108eb822240ba9ea48f9020082063a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0715b1022e9e4248550c1a271cc2c478c065b06d70236344bb18c9fc0033d97fea0139189e265f872c900e58e55661e868ab6f8557bb26cac1c4029f8ab34e0ec07f9020082063b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07cb94667f58694c8d5b3aad2548ebde532719c98e6e7e40e1610523128324ef2a022513beeee7dd4a94b752d2986aa09a411ab95b89c129ca0bcb8b89d7a6c7c5ef9020082063c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01f2bda49434a8cff59a7402954ec6d34778c4e80ccc1915de5e38513e5cc8332a024d6194e1a50d511ed7995f442190589f88aa2898c315aad44c156283ec82d67f9020082063d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07eb5f09c9e2cf3fd5900f6212b040edf0f35a0210e88db42203b67eb057226dfa00cd4c079690737da4409306664a9e715a09b1baf0346de025dd68e8398fa6ea0f9020082063e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0dabc73bb843bd746400fae643e92045b0ac632ec9964401eabded07b3c2f28f8a0493dc3b1ea2be72116c2a8a72cb7e3f593df9755b93ef7bce6eb869dc0c17916f9020082063f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0deba30fb76ecd3db0be868d7efc18ee3cfa0fc5eb973aa522424b585c5ca8833a05e56c25fe073138516062146a9e09595d5bb2d4f321e6025c7add440cc65107bf9020082064007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d80b246294a9856b4b9b423df8b2262c4f3ac5349e9060536e5e7e124326062a04929dacf4f87faaa73860c4aaa0bdf9e06db47b958bdaba3ed87f2a023a5b06cf9020082064107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06d4176c8f67c870b86ef11098a15519caa51009f530f7d31f53e46b0382ed3a6a02edd1626b1b8c45138588dd322675d3291cb24bbcaa34e0b58f7f9a00a89cd00f9020082064207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04e5aee31d8b83848b19c70274a509277e0ccfb3170647fe500cb142162b92a82a03d48b3924acf5412f3974208f8efdb12e9d5446bb72c3a3acf972acb78eaaf79f9020082064307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0de27eb99eb107f87cba7f2cd54b7eb71d5e25ec99bd72ec3c7b8755b53fbc74ba040f84dfa731e3eb1eecd86cf71afe1118ee4138879b54cf4dec2f49ce76c7831f9020082064407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a003d35a5c66b5a9eff3a12f82839526093a5008fb57eee929f11a880141042755a065711f337280b70813676b282db1f8f154629726b7ea40f5e980af6f1f942426f9020082064507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a079a4d401f538f7d0aca9056e51983c69bf2164e1171d8e8490d29d95c6712b6fa041a76e1c31700b70d134a05309d2a48d7104de95d7fe9c618a2d9e65612c86d3f9020082064607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d841234a0df56ef1b15876d50d1731aff50e11826688140605ef0c7df6f6ac93a05549b2d1f06d7d5d7087e1fa8e74bed2f5192de362638c44847e806d902f6d46f9020082064707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0123cbb732c3772e679fdfb17240a3818be85c04eaed844a5414653564bb46e9da06acf8d67adc86fd0fee8b55839cac13367365ac509fe5dcd0b34265a35650ee0f9020082064807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a065e45abda59c2afd7371624d58fd81aacec60518b9a593647801b86d582c28c7a078aec8a153565368120a02308d6b106824ae4ff006c8344dbf750a9b9bace018f9020082064907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f1975256c01a662ad8b6a3734edfae7a3377b00593825423726110e607ef64e3a02c77b23d13be95bcc7053fc62803df88c06ad9c350be20cd58ba04d749551440f9020082064a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a070c2243acfa7fcdd726e53bf2518e11b634160fa00612bb46882c956a9bdf51fa047c0c27f2325911d4e9e5fcdf3a7309e3a07b48b6e229a0b49f64bd29d661dbaf9020082064b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a096f979dd0a55bcaf28f39c7db8ca0527196db98bf262930a8c407981fb45dccba0333d55bcc441f5496aa93f0ba642359fbd3e6c169566982b7313d7c0aee04f1ff9020082064c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a007371de47a6bbcdd64abbb321c7966f7c99ec1c75f686ff7b3f111671354ca1da02885014eeab02eadfe74c712b4b6029cdbca60a27192681529f56f66a29e9d7bf9020082064d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02a77d78c6c015104ff1ca42b0bb81b2dce843ae9862f5681f41a5b8a09b7b671a073233e447b74a1fa02b8616b9042bfa304c4f01d00097e80ba4e522de0e63029f9020082064e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f10e51f7c737f33555966894bf34cec0cd74d7ab93245917e513fb8e9b2bfe2ea0538840d0aa9868ece0d45a1cbf8fe84345c455efa06a1afb7bc94e971ded1a27f9020082064f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a003f3b2819e62b80d5fc894348ae423cd48814471d7dcd7bdab5b531b1dc6d303a05cda17ceefaa907072612269ac9b6091b0c7ad8f9c0058ea6950cf30cd63d5f5f9020082065007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03c1111e7fcddcac50d5874ab3826ad32b69a2b53523b147d6e8f697c5982d24fa0038f356c8f78a2acc88be9308edfcb189e2ec78e3e932420483f714d06d760cff9020082065107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07ab9a18c9b0fd42e465a671c97a9ba5f07165feaa9bf76438332f94aa10561d9a0151f96818df57f84f22289336735dfc5b93c4267195a264bec5de33b2ac3d7fff9020082065207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fec2f387eb0b35718dce4382bb7f4f87ebd3d8d66b8863ff4d16fa40ca4faeefa03915e0daca8cfe40f5efb0e595c9be99bb925d1c55d789b219b7d784dff2bf35f9020082065307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f2d655bad5cb4fcd1970dbe4158b873b1d13c04482b9f1f4586c4e34d7c55d1aa0494bc108a8ee701bfdb8716558766f27f0fe6982c315325d05af873293f7338cf9020082065407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f4b5f1952701649fab7171a47fa86cf85eb6539f475711a0afac444b65c59193a00499f529ff56e68e6eec6104f2aa15bcb012803a6362aac9e64b3449ad35a701f9020082065507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fc8239f333dc166b23c558d09e1f7f395cd109645d13d0f3a24322dfd8996f35a040f7688eb831f710b2fe60207fe12b8e01a9e51577c179acd32b4bc0b90fd4ebf9020082065607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a046c12cb0558456879ba1b6618d437c17a11d10e28438da1233c4d0ad0a7fa50ca00986f338ac284be24b0e4b1f1c91f1770d8ee44b1d437cd615b8443f52befdd4f9020082065707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072599c374bb24795d8e8677a9e0c151958366204741d582d209ea5d58562b83ca03cc23fbff5f6e6f7287666c13df42722b8a68b957846dd503c845c7535bd859cf9020082065807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d285848634eff279c9993184e469bd76a3e2c5f579bcdca2ebd042ee95798c8aa04afcacf64456a5f14b3965eb2eee3bf0b20a48d5510b8827b2e4cb3741d22273f9020082065907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01220817cc4d49bcc7616e9eab1ec6dd478edf4bedddd6b371a6ba18c5e20a678a047b913ce489dbc785fcee68fbee1b53c59f4e2e911d27a988c43a819adf890d8f9020082065a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a060d8163ea305d6f2aaa66ad0370ff2e00dca024f731264a88bfd3110c61347a3a02a40bc7913244b83af6eee2a012491aee5c0ffce259300fc01be3e9bef755b02f9020082065b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ccd31c4ba5aa24b2e1a3b78b1fcb53a3b14d08351dfcb6dee813b957eb3982a9a01376c2a148aae04c5be10d39bce63dc5ca91bb018b49d25d882ddc596e4afa7ff9020082065c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04db5b4d71b324dcfd6ccba96280efc145b7e9f05ea808679c714bec3dc62e54ea03df9dbfa7888171de845c030e97926d25072e33b52a8346228b8ba4ede376edbf9020082065d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04f4f9ec742a2a1dfbf296ace6957547a74941d87965db07af686f7dccf3df75fa06ccf082a4a7fb1c41937023e5d768c16bce907e547d73a8c9f6f934f72612f3df9020082065e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a015624899bf657458b900adfc3614e42ad367f202d20739dfc2a3944179a2a0f0a07b0269cf15595b15fea1441e7724459435e8279bd96e040088a81b505bb55fc9f9020082065f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c3db80a38c45405822149d05a024f4824adb1c1614b0313b1741ee63b55424b8a028d946d81ff56c0c08e7a0959203c6b36f97312106cfd7f3e9a5e36aa1a2d3a5f9020082066007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e02e23fb6fd26330779a78bd166be16774d5e33d43bdadef341f2cb8cd47d35ea0019e0f5a4b7bf7ef2bcce960aaa3f6e1404ad084743f317867b1e7c894bc7194f9020082066107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a049e1e53bb3802e6c1ef8430a7988ae8c73122adb5b7058ed1bd45e36695842faa03ae6c4cc6963455a3a9874bac1da1be5af2113df465b1d4ab4971bae50e0e867f9020082066207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ea87f0cb84a837977bc1b3b6d25d219afdb4003410d4f30e7ab434976ca1e7d4a07489047117041dc901b00cb49ff35d9236b77e1f745a9bfa0a719e1fab78544ef9020082066307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d8312e73786c25ddae476edf1aeb2e5902b73e9135c03bccb6e1f0c5fe0e5e0aa053e2a28769090da696553de4aae95393174d2b7ac4772e6f5547292db2919a11f9020082066407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f5da98c719ffd3aa3a09155c7834eb0b92798f2e7c1a616e48c9d34c489a64bea005b7967300cab829091bcdaf22b99edbcc0854c26d1e451fe0ec2046c50c79e1f9020082066507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a030515cacc2e597431bc938836435d02d80613c36f62c31f4248e3d3b95631d38a041366ffea29b9b190d4d153c2f3dea25b3afa4466f4f8ca675663b03199413b3f9020082066607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0067e64845ac7f1cbc28a753dec913200bbb99c85a631d716731572fc1c8ee412a01c7fdf1719ce3ae8cf9f5807e171d340943ef28227f047a2a3cf1b6a859d4ea1f9020082066707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a049805f079945d17545656a8fa543160a7e3cd1c26af7011b12360d6da403d114a077f018f23af4192344350e67068d2b2cb67e99c8bfa51bcfb85e0c9fb0915358f9020082066807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cd5b4844c8111d4aa0b8cfc27a98ca6c68dd00197f30caba9e25ab6fdf0fcd8aa0303fa7c6ff9dc10972e34c0e3b371fb3d57f580c39c5f581bffe6a0b8a98fa0bf9020082066907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a088a408ce1f8961b42035396c7bf40b928d72aff799625dc48db1350bbd1e497da02ba4e53a868371e18c2f699cb2644d901599352f17e330cdc1d0800e03b4c14ff9020082066a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07e6aea831dc7bd2ee31d249300608c859eb643ac8e06ea998842028f40048bffa0716f21cea9ab146446e845b78b093827b291852b78aedf020e0a7b6ce57c112bf9020082066b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b8dbc8f2d447c49a8eb2a03b3a3aab76e359f5ad9d5d6144a930ac76e6bbbe20a065eafbff6cfc6a9747c1dc0ca34b0bacad0332be31ad4fe2f978ffa6d1299e09f9020082066c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a077b2fe1faa3234b885a127a46161ed33f9996df7f5875fa91e5bdd724f3065c7a04ade76188a37f1381048ac1a3aa9fc3478f3e0b157c785f7b9eeeae0458666bef9020082066d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0434706588578b85e7a1210ec2400d85e91cfd221e72a1d2eacd039c2107d94a8a07e5010ffe186b1bff8786dea9c66751df604aabbff44bfd7e6f5dab8b46785d0f9020082066e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cf9c7a3dc7de407fedec28eedb3e583a7ca1584d8a77e897498fdbce3d71ee82a0281bb79ebdc131624008ad800d602788cc36a44528425708e3ed577e2ac0311df9020082066f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00759d5b00fc3eba9e67d704be6537e5c9bc28b715c95e1ebd0529de9b9ae8b83a04947fab5f9fea6b79179bd9882066f071bd01b164f916a05c2fc783d76f871d2f9020082067007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05433992e43d2e1aea2d90714fdbffab236704dba01b39e82a629aa2d4a0c78dba0133ab35114d78cc8a02be3366adad56cf46948e3730760abd9edd75d4dadfa70f901ff82067107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03615aea7ce703a94bf615381fbe3d57dd34a4689c41c2c3c1315534d75d6f7b09f54ba9ac6318f4cdd0c08b6a3390258a34d7b57a1ae8efa55ad258b0a2efc4af9020082067207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c7e4b842bdb5de2abec90cf215cb0255d260ef2aa772bcb71d0cf21bcdc454dfa008fb778d04976db4ff994f77ffcf7f382026406d6e34d7fe01a786a44e34c430f9020082067307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03fd9f491bdd3a9d02f91c03a9b29670d9ec818de32c374d35702935aeeb2ef7fa02c6413f56027b1e47bb4f048c44b5f2c19a001adfe9df03405f7a7b46dae1a7df9020082067407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c30551c188c20f74093a5c24c9c0c02b47bdc51831167f1a9607b9a865c5f267a03870442128536459b9356b30b440c74b01aa276a3f30cecb65d31d12e62dda4df9020082067507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01fb4325c7649ce84d90b8f4477505df5b2db724385d1ee16d245d337ebc8e0a7a0513f0f3c1b6f2a7c5b888b52e4e2e98a03b2243eb122d14a4b5637d611c189a4f9020082067607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09a41aeab58a99e80df4f52c1d6a948b4aa4f7a05cf3d01408c0e686b5f9acf3ba01353581bf1eb24c2ced2474943ed82a7d26bdca398162043aa3638f111e3ba02f9020082067707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c75c5f88ec8962a27fa91e2057bba7efc8f0769eae42b292e01d12585225559fa0349f6f2e3ab0ffe21d723eb3e39fa361e7c14873cd0a2f731a792618db6fc04ef9020082067807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ecaeabffb29f96c7aec5374afbddb8df715d2980b2e27804232d2a4373e3f366a043eb7910e075e3d826dab2396a6b286fbdec55367c7c55ad35f32009e1300540f9020082067907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a37d0383aa9bf34d7de4ed6efe03b7a353ef5b31b9dc79beac511ac9906e7325a04b3ae3fa0afd0f1ed5ea4785d927efe392e48dd1bb18eebb2a3588fcdb4f938df9020082067a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e6afbb9adc4ff8001d31e55bb933d7a181c0d0edec4f8a0291c4855cb5bd9ef1a02690d7fc76cdb6a0c6b5aa662282c6cff1bacebf88011ece56d72e100bfa2f34f9020082067b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07324b5831e291f001f1c8d09de2e9f0af5d20ee6fadeaa811b236b9c5cac58b4a021db0691d4e6887274ae8f100f913f309a8fd9af8ebb2f857c417e5b372652c8f9020082067c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0397996c80b2182cf7f7186c68eb3db82a4873a8de9ecc6a2c4f541fbd4a64adea025a06f4cdaf5377d1003ed892deb8e9f99947b8a8054aee076c5c21d44e31ea4f9020082067d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a028d1222f0d865b8b9abf6a3fb8cb75749b6cbeefdf5c8cd00e51bc6f1306e85fa055c7ddabd900cfc2c018cf5519dc301afd74217b8c2335c9a3ec68d3a6dda0c3f9020082067e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eadfa64545e46da483c6883928af5d2859b6b2b0ae75ae9e2a35534935e21c3ba03b96895e4b36a9bda81ca179a61c83de4ea18dc86bf306e211f2cb2951ac440ff9020082067f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04bcfc38062acae52a3064daba29f87635615f616a2e3171a934fd6061195e0e8a071f7f8723e2cc8eac37e8cae958404dedfa296c7fcc8365a9ef2ca7942fb334af9020082068007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f7c37d81bcfd3f4905d33773d26beab78444f71467d4e7d2b98c55622760c543a0621edb20d1ec580090a4f7e16569ab1925b00b15e58f536843d35f19ee038255f9020082068107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a8c7319bb946526667c14ddf4cc84ca6c18bb2b4556a136d04716b142b8b5366a024a07ad5158fe87c0fd06c362b88031cb4c67cddd7e9235a0b73aab8558c01d8f9020082068207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e44aeac777a06c74f4200348a9d28e209a75f411db9c7296a84d1a27eb59ccffa037343e4bc25b013f43b2219cf6b3297f09950cd726dfc0e597d1ec5c23f4e7c0f9020082068307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c2504a880b2a90a9c7c2c0c98c2042c0eb529e6b5a81fc441de37219a16c19eca04617813ce7fc1e908cbf5ed39b08cff9dbbe9eb5a3e08d939c04e35ff6d24988f9020082068407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07b3a9de0e321cae73a5904d667cd7b82b04011cb95a3815bd288d226b8de5df5a008c236c88053891f323a8911ed16848972501ca621cac08acf20e82af62bef23f9020082068507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c48e5fe9de6c396d730f14d7943c07783aac1662322cead8b370b125a73d8e11a064510760c380a1237e1095c09594ebd5562c2911a10d0890686e9aab0a166249f9020082068607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a041038db9c2c8aa77cea70d85e7f27f80af540c4c4716f2b7a0c79961d4a0704da0200d2a814042b1ab1208061861299422b9b6262b105eca6c578ea2d0f24e23fcf9020082068707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03baa221e00337f6ce3663dc981b0bc7c410fc13a6f98beff7f28a6076ff8baeba0752eae6cdc4483fa18d464d9c716f4feda0efc235ad65027cc22f999156408b7f9020082068807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a064c75bfcc378e9cbff4d96134e8e5894f6deff5c63cb93845b3e07df68ecf7f7a052931e7e792eb1ec982ff09cf5962dcf6cbf0906db20dff8906022b45b0a6daaf9020082068907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09eab7155a5c17ba3a7fa65972e73a71f80a427ac263553df663479cd96006ef7a028b5343c5b8542d19e5bdd3a087531161d5319f9969ef4a34d0ef02e25c7285cf9020082068a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d0cf956b493ca08d7dccfe978dbbe270babe91c6d5ad69dd2779ff414f3636da068d9e47bfd6f12ea08303f9cb5f45302aeec2d4d2d5e952e232c93a3b018a5e5f9020082068b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0977d7c4a527965af46f375bb4c65f3269aea192bb7e90bd81f9e8621b95c3820a07d1e416a79b5fac1a60aee1f8191070f0ea851359c6f5321e87b17d5da7d7a57f9020082068c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a18588e88716730ce6d7882df5a703fa7da9493a5a4234c5ff2eca2652eb93faa02c938e239226ea1fe779f34fd9b4a21304f2aa220e3d28a7367e70837964e716f9020082068d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a1113349d636fb3b1408dadb36cadc774ccdfbefa9ab0fc530c58250f0c8e007a0119e4106bea4c7b436030c914101d270dbca921f9fc21868f321397cf65dee9ef9020082068e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a018663f454b3e147f7f0add68a4e26524ce33c95fc4d326c7db1014d04153a824a073e3be41ded96691e55b5c658e40dbea785742dfaf00f1b15709f70544b60438f9020082068f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05ad683b9921e565897e523af83e22f93692837ba9a97d10bcd0da4cf592a7f92a07f548c7d54920cd71644ac6de62a59c2b96fde2bd1c572f3ea996d3a20b11394f9020082069007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b77dc22e066837233f4ff63747477455044a44a9a56ee3b1dcf2017d0a466fb0a00cbcca1ec2f802ffcd65a8ddbb3aab20efba651f84ca794dee70af11613e6651f9020082069107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05259affd3b81ef4601b3ecf6c369ed24674ea21c11603b5233be46dd3984f589a04c0f282bc49e8fe79f4f7d3118cd025b4ecfd15f82477c2d58d6d1caa5a463e9f9020082069207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02419a0bf1a00376d63f6c042a34b4d5fcbf43579170d4e618ebc3bac36614767a02cd025a416084d459c5f576eed025344fcf241c74ae1a2d4410b88091e3bc78ff9020082069307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a067050c2fbe367a633357dce0840679924a2a186327d1382607cf730adc66feada07f9a9dba5f143183dc660cd71823b0e99c685570352d21ac6ac9c96b6e1fc577f901ff82069407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a064745448fe9cd1bc4208b59d570a0c6f5ba9503be6fa3f9a6a937c7a43b206b79f1cc32c05a9f837b859a1c13d9cfb84e6999020b470c034bf0751ff8181a1b4f9020082069507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a070a93f418a789c34ae278be171ae2cf1ee4af05944c9b53b6df8b9d44fee47d2a0579ca7201f3326d714e668df1f113e06c01ac17227bfe4c7ec8ba72ddae21424f9020082069607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a047c1294b02b2c83410cb83790b8863d5725e430bcd129bbf0a30ba0a4841fc2ea01f90b3f60d3ff6452a83f5c30722492fadd3c4260cfa0d520f20219625d8e073f9020082069707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ed6fb6309e38ab8b7c03238bdcd1a5cea4a46fcba97ce3b7f0b994893a4db1b7a02794fa90db30370617c2b242df00671c880b9422892cc8bc954f3cf82844779bf9020082069807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a014310e77e5902059f89f3de4c10205408e1d63357990250e6782e58708dd7b1ca01b8bdeff9023e3e886fbc89807454335f1ed91cb833ee0f76f27a9abdce39deef9020082069907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a052756c00ce331380d6ca899530c35150da6051015962c62f5b48f5f38ed9e4e0a0248256889cbf2269c45d6130c378089d57cc207439371f830d6c6fb97c7b176ef9020082069a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b1c58a20b1b838f9e6df3254624423d44f837df59befc4999bd1e664628dca06a01dc0728efd709b8720ea34b5e2a83d8846d5e767276340f7e999abb2a217fb64f9020082069b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b169156f19714466ef5dfab18c57006432fe722db2a124c7c9e251b140153c44a058e767d8faf347254b246290ee7cd678d114d21b6465d442946537e941cdd411f9020082069c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03d4c5fc46a787f019282e499fe44d49c9b8e3fbc7586204868b49ef93d665d46a05e4406fc0706ff4607dadd6991932352a18fbf26cc7aa683959d756be85029cbf9020082069d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08741e1a0940aaf76c4748abec09ca0a49f294a957cbe248615b7c02bd4e3bd61a07ed47b358971db55e8a4840234a06de8966a4de191021816724ba8d42e8d0cc9f9020082069e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01543801811e0978649e95d9872209299164dea955b146d78edf3e84b9ce48334a02020a278e694af46c3a8f0917af4720058f1342a0664adaa61b708a4e69765f7f9020082069f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09c194818f864db2136fc0b80697f26f6e12b294e10c184c0573109c7087d1fcaa059b8fe7a72798ac81b1e5b4f32ccf719041980e92df8c5c1b79b1ad1bc12b203f902008206a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07da4417652bd1ce68847a392976a0ddb5f2da7203d8006a09e1085fc963396b5a011dae7a8881c8650a3642fab332cf86bb3619c9dbed95968c4fdf509d8453f34f902008206a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d5b1dbf2ca7e1555a152a417586c039e2e679fb53259bdea7027d0401f79822ba0524f7a63a8458272dea7e6f84f7e689668b5993a383bc10f20111d3472b0da67f902008206a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0194bcdf381bed461976bdd76113364370ad6549e436b5e2cd4db5bb811d4e8dea05a1a4e87a4d8ceae545c32abfc29e508abb1acd4d89e8e6358304853e4b81832f902008206a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bf2f8cc97e43eb134e06038a5a78b0139562376f9aec8e6eb892b616ca5f16c4a0250de0cdec25624f32a461676dded863a131efba450435ae88d437dcbc6cf507f902008206a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0588f5427ef3d57660a21fa6685fafcd3d09bebf3af8f714a806eca21a6b3755ba045bd9ba5e2c12a8d95dcb5dfb00130073c6fc5b60c8895c51e8f9cbd5191c087f902008206a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a096fd2ebd5927d02e664e4e91e4c705549b874b407771f153006cf336a8de4a62a0126ecce66f0b5afdcbda5fa4e2ec4f5f38e64f12ba22e346636197a32f8d4e05f902008206a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b4bde08deb9cf7d887442138551c5e43432206ade4c33e433caccd15901fd255a05ad4f306f69a2f6f4c4874534698baa72812d63bb409e6356d3ac0a3440c2aa9f902008206a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09e7afd04f444b482912d75cc2cecbb172bd28fc181efebb018ef44eb8ac47173a076c9c478777c30387253bb0971188f39823741ba8d648fa071bde9de118b80edf902008206a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a046d60765b8a748d5e9413efe5527c24573bde15d4d715393ed7708eef0c2922ca024977c95bb0c0b627d1cf5221cfa15d2fa38dce80b00d45b744c8f7c77c2928ef902008206a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09c94a854f42edd7e4d98dd93fed2dde91f607bbd52c69bf411d7b84716eaf6aaa07b35416aa530b0a345bba555154719f2db71a5279a94d0091063327e8e58847cf902008206aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b2cbc657098a78d8ddd837ae8ac1029922b2f1639aecf962a3ce457d810f14bea008a3d385e75d6c6e1feb6b3bd0108ea4cea33f5bb7fa395f206cb560158aeacff902008206ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f1e130e2dade821edbe0b77fffb47eafe8cc39f2af62e248a79558dd668c62aca0475811597886a7636c414703afd2d74caafccb4e9ac840b54c54eaa8689f513cf902008206ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09fa9103b465d6ab281bca8946d1802265211022dd5314bec43a000b05551e5fea06c53da392718ab50785528df4ca06400cf0ea5422c5c7b68c1774f98cd8f73a5f902008206ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a008930319fa16a4ad82b9654ccf0e06f736f6eedbc436566bb45d883c9cc02226a03a7d969c828271f9f6ef559ba861cda94943020bc2391a6f6c25cb56ed63bacff902008206ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04d4c4be5618c0d7b271575e69fbc8d1eaee0a67a41ada99a63d14337ca1e420ba00e0fa99a28f8dced949c42add8849e34536fb4b47c0217c32990822de2f5a705f902008206af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cf5b0204e137286cf6c77246bc444ca32b3a74b5326685c66f003b756c8e3e58a057672f0e5d3eb58ffab4af0934504d149f15ac6caeebe9a0f92c8a3b32ca7508f902008206b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05749be21d8f3827a0806059193cafa97570bf66f7389f03eb02ff8861802e8cfa02ed1e3bb1ab7737150552ba501475c71aa10eb823982d93801a44349726689bff902008206b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e0a6e9d82e689debdc551af7b42612bfaa84e4aeeb5a6c3dffd2e2553cef1a56a00e59bee3c9fb93e2e409e16e058d83d56b31263703584990a2fc6e847184c112f902008206b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06fca8d50dd5e6d2428dfca742b6988026da98237d8e70701c701d50b393cf61da00ecc41220962cfea76cd340c2867381865726292c79ef590585e51aaded3a3bcf902008206b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09199309eaf77b658680ca4b066dc06d286c64a0e3ee8110f7348582356aed375a0527df078d9ffcaa67881010269fa27855c7eb520077bd740ecd0b14090b79b93f902008206b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03fe0826991a6fe7a714bd51f4142e0b7c5e90f2b0fe4e476dcba0e73e982061da04396873788bec4aeadf3012f19c2b8bb29ba3a25fc952a416e3e886f190123aaf902008206b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08084aa5b828a9dc41c78c6c8dfbfddad195494c788efcd083502d349c5735aa1a04a9d21970f01ca9b21d56de8a099fdd247f336adcfc2acf10884c6c7fb16d5a1f902008206b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05e94aabee2fc5c268016610acd4bf1395ec3d4dccd8400c449b132943bf25a06a00750374e47e426921f865609df08c1f09271fca7907bcfb55182c1c33da8386af902008206b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0416543ec227a57e76f089893de7adbeb255c61581b64410302a2d284eb2c0796a06ac3c6eb9b3ccc90a18cf2b33a2e9e88e7235a7f4472ccb7aa6db28bbb889a74f902008206b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d2cf716ad1b1d164dad4435d826139b0c6f545adc49fe808d88dd8eec2edcf78a0493b8d61240bb38705a2ff53b50005134b78a0a0b0b0a88ab1f22403317a64d1f902008206b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09ace9ea7f887ae6abd7eff270c3a6ac38b581621567067559e8fe5fc5611cc53a06a8ae7c63453b9eb63e41c5274cba5c9b66803241f5ce73b6e5ee01f70aaf707f902008206ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a076ae2e5064114368812a5dea75941690ae642c752b1836f751bfa1dc8e72cfcca05ca5e67c84a3db282adc7d6e70c5335f423ecd447bba1780317ab8f36110c2b6f902008206bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ca11d85f98f4f8b95ec48ea19d414a34e95a0c3a420ab0948e288d93a93c769ca01f98fb8f20f369ed262faa11daa6551b5242839b51302e8b4f55e443ef1bcd4ff902008206bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05a327b0b52da797b6fe89f491c1850596a8c2c50453f326eaaf04435e04bcb85a0424328e521dbee2fe40050174ad8965a2e5c2a8b1d8ad9bcb775a5a090fa1b49f902008206bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e8b741a56c195b95098899aa470a96fe0046a02a74b76d1455d9b7f5af4036c0a045c6a15b72f4e3a32d93bb5d7a8879b1751e790366b6821bdca2f503348ade49f902008206be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cb1a1da5e427ad6aa93daacba373efd16f134b1529fa980e08de2ec2e85231a0a0338774c389148ee81947b6b685d0543ecc9b4a00608f4d5df7b73a3f0e97b865f902008206bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fa7e0dc7445469e8d75adc68091b686b773fc015c4ef0f0742c8a055a0c6ce2ea033cb0b427bbe8aeb4c9a6dc2fd65a4bc1b38d268fbe80f9039f613ef811a08e1f902008206c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09ed7786438c445eda207120efcf74f38be64e5606389b2effc37c09960c97b23a06b4266d010aae162e3e3d44d33a6d781e59ec11a1f4e24a7232da60ec83ad610f902008206c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d44c10fe87da4ae4ff44969532b1aa1eb1439067808b363825ce0732d98aa86da045bed7c00f2ca1db2146ead427377f4af7cf0dea346cee1b779cba4192b889b7f902008206c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bcefa85ac01f8cf1cf0a957b71007b2ac5cc0e8bf223055c299da3f62faa20f6a07e16678c41eee2a979ac32f540411f95cec9229a489aa9f0576704366f441afbf902008206c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a089c87f244e5b8bd0a8c7ab057ed4a8fd683326681d31b939d5f7df7e7daf3875a06c81914f4d9da0efa424b55f94eaf0ca978ccafcdedc20fc43a478482769cd42f902008206c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f3ff352877d79f145991a4322752e84b64610a81681f296953ec6f28e486e3f1a0483146bf0940e759c8d968f407a011c9a995d96905f15d4729357cd5881f382cf901ff8206c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003259fe75bdeb803ae54d2065edfd011b36783cd06af473b8084ad25d9eb29930bf4a00de23a66caea3ee96f2366cf4775a98d088b1b480e87840d56e567f17d69dd3bf902008206c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02df993029b08eb0cb2e2e414c1c59bcfdfd2fedd96927d14f7b0117c816832c2a0048557310bf81f7b0aa0b849ee6da2e4bbda68b61bad047b45d3715ce947b01ff902008206c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00180a776b36a08df4487968c1ab81fae69d509b1c54399d28fff52e7d3cb91b9a0510de88762dcad8f05466c9c18f102bab6732feeb0c7b239d336d9075f415e9ef902008206c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0191dd09dc4de738686e32a9d65d0aafe51d6b2f28a53dfc2ec4d745c4afd952da02c9d9367f44eb42c5e87a305bb3e491e7b0e71a0938d9fba869ec1d47397b7d8f902008206c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bf8d22970df2df37aceb521e7813345ca799fc9cf210d821072da07bb5db61c3a0621fab8cfe1243faeb42a7d4a2d514bbec628d07b892b25704718dbe7c8d61fff902008206ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a34203976d4d31e3b12eed623d31997b74c3dc47c6eac990baf1da6c9a11149ea071b57cb97d9629ba4e401d4bcf9336fd9eb76bdbf927b5d351a9b24a099589cdf902008206cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b24ba80ff38a28165b4dc77b35efec546c4cccf75f8aa951c8489364403406a5a06b61f11efcf18cf65e8ddf2da38297e37f68fe6684e9d4479641f37dffdd9d19f902008206cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02bf8b14ff249a7718520d2365e3e2272639d4fcb2e854c4f483c70d63215c8efa05abd7a0b622d556e5de1dfc66c7eab503519eb96cafda4e8a4ec8fcfe57f3cbdf902008206cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03b40a02f165f8cfb81f4b790c8906573dc66d4513b63fa67db483617841d77cba001d2b2b1293741ed94ba612dc3c5e86688b9473200234c20296f5eea71d5e897f902008206ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a091a48127894d0283ab2c0ec733938d437f4151bd9749670aa61d8a48b5fe5bfea015e9b9b7bf4742a977410549be393e697d1dd05d971c822f6b7a9897e6d5f64bf902008206cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a067a2fe8e275be3aa7ad5b11889d688280e362297f6450077df4b993d5db3098fa05949bed87f647723d7c00c08c942ed9ebb6bd8a5aebb6bc4c6969beb0ee91cb5f902008206d007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d7091d0450103b4694ec6114395adef7d51ac3bb5ca95890aaabb7e83fe5c2c7a020e776446174ee8471591362b3938c849b7d04ca66faf85fc2d4ec1c67b2bf2cf902008206d107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fab4b564410e54d493fb133b5892cacf26d6ee9a97b12c30c044e6ef0733d667a037da1ad834d6a358ab1a8403b95a2ee83ea065934e22fbc8248e278a48643183f902008206d207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d115b3204c442280b3f021ea8565b9544d8da28636f2b2533bf2e8dd19e9b527a04ef92a65de4d8ccac3908eaf45e42cbfb96deac263f30c7279a792649af8b3bff902008206d307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a001cfb82429b2679cb2004880301173617b2f95a4fd1e32fe5aa0dee78cfb771aa036b26660ece3868ae6fdfeab7f2bd75e72026fd7cd04a596387084293c2bc139f902008206d407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a074b23ed7bb00005c0448b35203e1e51dbbd05ccdea9d87247fdc108e1a59df37a01617a5b2ac4765938a857deda1c346904bcc392c6e2b52c31a26ce82552c2f78f902008206d507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00fd62711851bfb888f9f8b1d84c36c5c374f095b666836308d6978a3192a462da071ca5ca26bf00dfe19cac4bdb813eb2fc00c2b71a5662f25c6bd7a8695e10ecff902008206d607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02ab257133252141735aee2f3277535600efd5858b9ef9dd77e10b70c5abd41d7a005af84e59348d0d430fb9f2b2fc1601dfc80d23bae6aeaf8d0724585589d99a4f902008206d707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a9024ffab26a9aae817de977bef907dc74f0c49566495bb1870ef490a0a8bc1fa04a3161602a4ba9a8f0a9c644ab2d95f8c923bd0dad3a01926300f93115ae1dd4f902008206d807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05a20845e26b8be674f381aae39fa125f8e22517a199afc3c7dc6490a3ec640c6a06ad3502b703f137fe9862075e898403653e82c642d528473d890b1199718afd2f902008206d907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00576ff1235e9925bc9def6696ca8140e656bb53a601985ab108a84e6660b0e83a012b2db72f649b0d7b954ff40870b1b4e8cbfcc0e0111a7b7b4d0ecea80534d8af902008206da07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09439e1cfa855eaebf9af95fcfce2776d64af96a84b463d0c9b526637eeb5f234a02636e002c01398f1b736b444be48e201a9555856458eb149f55ea3aac08fc1cff902008206db07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0efa1189c0147d1f826a734259d731abd4c577410235b691e655c8be2c7a45be3a010c028bb9e05b157c2fd68428f77a71374e1569b9331479e5626f4d97f5ff267f902008206dc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08f8ab540effe1f5657d85abea27b4d29d6d588f82fbd49bb08400cf8764e7ac9a038b31810a3c2c51698adddba6aded7ce94ce93565f36094624b07eb49183ea92f902008206dd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05e23e43965e562a8af6167d7507204873e5b33603c30d1bbeed4203a3c110273a0721829024ca9c4927ec3e9cc7483bb3bea9739dc2aa1b8a3b71ea9eb2e2a5e8df902008206de07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a030dfc210849ab764bfb6a3206317a2c471ead7e20db575d3e502b383a7609664a06d1a974e10ece068f83ba7332ab9302c1f7d57d0022a9d7d1560246b00dc7f9ff902008206df07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06935ae21d959cd71e38523f42365a6695b931cf5d11d88784b104bb8510f8681a0440210387a7329ff04856ee35bcdeb9260cd4acc6008c4f26d52010e6f015ae9f902008206e007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd722e70388a2a84b424b9dd1236ed9a6cbe7aa42048636de7aa650d71daec16a0697a3d6bd498cff6a075a00838837e9f2363e1729eaba727f5b047ba545888eaf902008206e107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09b7bea7b4e6a12600298f79205758d31dcf816e0b95ae840ffdec6e730eb91eda05fece7b19fb4c7e0a9ffb5338fc244332562b6171c723371ded16a6e186122edf902008206e207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d1827fe8e4b9327168748f8452fc8502acf70c79d9522957d2400988d6542c8a07f13d1bc523ef30f11acc517edefe91b48350aff4c3a48fea7e818246f92f049f902008206e307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a058eb40ba989fba8d2492bcd4e0275fc1f1a8059025061c157b0ab3d6b3053c32a00543b4da6ba25d4d87b319f17d5773457af5510c1daa66aa529b7a83de91f05ef902008206e407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a048da925fb8be0be9656dcb3522f9c68867c6212975b7d27acfde42460c1414fca01f6d9ad6f7572635399c28224a495431a4a80622f7a7b5a4182db4f999b995b8f902008206e507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e0be99cfacd193e61529b2a7cc0bbcaa9c71bf51fc29d084798f3d6b2391e34aa01ba0cd299c867990fe1b4a13410701fb661e0b24064ced7364b8b975abb655baf902008206e607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07d199ebcc017f804dde70fc8c563c96014d6a37f1424754d431d8ca29139a1e0a029ddf33ca49475478ea11826a589acee49069e9994a58ea139f2766006971211f902008206e707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04c84100707c553b4710fcc7dc6fa1414e9408300db73e33f11ef25837fc2d630a02a1f346034356b666b05a4d61bd3e21b0aa678b42c0d90e0133350f3a955b9f5f902008206e807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ed6595ad31d7ac6e0b0cd2b674ff393536b4b43166401615647636ec4e463a0ba06c0a4c5d9819a7b5e84115353be22520a04af1bf3ddfc6b2684b9fccceed51a6f902008206e907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d075b7d594dbe6a233d37ef85b98cca0692ff65dc4c6a1ca4b254e14203490fba01c596a992a8c9bf21b511c1d50d46297b42346d83489f384d7aa6aa8cb1fd37af902008206ea07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f79082f248e84fe0c8585accb7afebcfc555860c525e16b071c0cb992d4f6d44a01f6324adf60e839f5623bffc4635b69dbbf7588d659275d47c8314adcacacc34f902008206eb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cd85d003a9205779236ddc73c745b16602d48d6b891bdf85575686febb53789ba04fb7df41298bf54826d4b26d9e309ee2f9d84c86b73a91a48a78fa26b58e1192f902008206ec07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09d61494c74d4078e0b751bd417e72238c7dd73e9e69b252cdf7242e4cc13e34da002ee337486c5cc4fe990482b201236f679b096801807cef73b8230fc7be2bce6f902008206ed07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0afd2c8b32fb97b6a817ce6b76fcd858f9d45b3d820ea67d74261c88d3a0c1140a040b5fafab976264b1ac9e1dcb5ebbb7a094b7a26590790c4dced97b592dc921ff902008206ee07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a63fe1fb2914f9ee5c14601b1c3a00102b609592e6c0da782695f1918d187b6fa06477c580d67b657809a5eab179c9608170a99018ef19631d5dfcd9435e5797fcf902008206ef07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a073ce0b954992222910d1dccd313739dd3cf71daa306bd70ac604b89c9adff82ba003d768b267e532a5221d6584e361cac6aa8bc7aeb375e2329f6731a806275f0af902008206f007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a028a3d4b43662f6356d1358f5d2ae4bbb984306c689334b14e9ca77c8002238aca07665ad94c8466f8852b43c1b450d530567e6ff74a4559f0a53e4645db43bab41f902008206f107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a011cd0df309da278bb6acbe58ea576ac3da0dd0ac8998f08ebacae3f190101582a0219aceafda63141369da2514897bcfbf057001bbd06ac94fbf0c211b470fb17df902008206f207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06bac0ed381a7339f9893a22274f084cd5bb5755b4f1d771fcce8e73b2892d69ca05895f343264fe577c24c69fece12790b454c9f5aa08b38d039991a40ed555f52f901ff8206f307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003259f8ae212e209d3921f26aadfbaf4ae13d1766f333e1aaf998605dd33566d997ea060c1b82d6a94901c63dd4c600677e0df00db79165d7314848f463c8da7256b68f902008206f407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0afabea30830f3a1201dad244c18a58969850821abc55f410fc65bc2bfdced053a03e3a917a50b021cf0fbef013832afb28ca682fe5a51013eed17a5eda320c85e5f902008206f507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb71cca59f5ccea97924dfc3bd36c1920e80616f9bda2d9c91dc5cba7e136074a0486cc5b26205b2f95b231cb5f4979fb64b8c7f8cd409ed949ddff9ad6b387e93f902008206f607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a091f42438e6800a0fd640f9690573548efbd38e4aca9ac58548246e8592450355a037415c0502526bf79323271bc599c99ffc9bb63ab43bb88e8b435666e5d37779f901ff8206f707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cf24a66e22b88f4a468d7dd12906cfba388cec82298c1dfd84aa9bf6d5f27c449f31ee33db5a5872f3f162055b5786c6afd7e65a2d5b4710a47f529bf122418df902008206f807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e8d218eeb8058d3c5e7f4bb01fc88ecec4afca01c057e2363bd39710aaf28461a07b100e70294e9c167b5b99f1d0ea26df7c6e6bf48206a55a24526e8d7cac5d0ef902008206f907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00e83ad3394a78ae00b239d2c3d927721a9cc6272a20814ed7b9edcf8f6f65c1aa03f3f7aa4e17a58c96103eb9773d67993213635852dd4b49a4918f7354d0e5869f902008206fa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08d1075b2dc6aa3bca5403a1dcd0971e1aa33bd88edfa81ae53133b3b6d88aaaca05fd5d79fd883c5d86a99071c7e0139e0623da7c8a9f68dc3a1f00fbcefb73905f902008206fb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a029377e3d99a1a6044976766cb6ebf2037a42c1e7bb9c1074d3a3d1488ddbda84a04caf782a338f80508e98feb146cbfd1718bc848e921f0b7d78f26ae048b8ae4ef902008206fc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00b3d5c2ffb520cf19427e3f19ba15dff2bbde648e425f7ef43b50f1142db37d6a0629d842adba009ff494bdbf11baef31aec08244203c04dad23bc5bebf98553c0f902008206fd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04c6406e28385ec3eaae5fe24b9866f6d69c7dec1d0f3872e52a6618ff0badf67a0227e5819f31c853bfe7040dc2bde033ff0049ba2a4570c7195b8e2c63920cedef902008206fe07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01052581157d0d9415629d159a1fc4001a3ca6c95e66205cd0fef96dc65325f99a063a84e433a49085c4dab9efedddede9eababd9d512a7697d6e829029e4f25f82f902008206ff07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a40caabb73aba069c945cf4c43f078acf0088b40a236385c5a5f17270e8aaf91a01adf5010628b26854166f83f153107adf090712ee38601262208e5e0c3ea960cf9020082070007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0628944f381a9a32efc474c25831e0ad012adf24b9504e0f435a58629d8a944b4a04cd11aa333fa381fadb69f42337db66ca7132c5fd0d79b9b2ec71d7a224512a2f9020082070107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0281433fbceb155f0f6f5e1a39e03fce790cc0a57deedb965673f445bea0e8356a012aa2e911ab163586894a7b01bd3c1b4e31c949d737fe60a459fa24358633e55f9020082070207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c027520d6d80e5ba725267b5b685476142786962bb6747a8da5033b4d65ff11ca05c3a062f7beaf6cc65141a643c240f32b3bde539c93985d1c0ee72013ac489fff9020082070307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02be074e9455d031ea2b2d10f7892fa07ed5b20a4936951d30384fa7e9f3f1d9aa03c35791cd2f6a5ee48bdd2807bd84d41de962ba1adbc1acf293441cfd7dbce6bf9020082070407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a056710fbaacd8b19cdab82dfdd54cb60b589b295fe13655a9e95a5af89a8aa3d0a0280fc094231ccae9810608b24423e57eaa80050ee7ba37fca3ac145ccfebb7d7f9020082070507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0238903ef347714033f7fadaacdc1adf8ee7c566965474704537b48fc751ad3e6a02a54bff125df1df2929d10e676f182ba80a8bf3f8af6953789ba6da3205fb409f9020082070607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b73773b74dd4803cc84697a91b6b38a0a1becd37c6b6678dd46eaf8b3bfe6b35a017c06e796b7d91286473603a42bd4c72b7cefe2eef5cd40ac67a4dfc5c08f788f9020082070707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d9cfbed4e542b012d2d39855e8f5954396797f9170b4b4ef1bc51ba8869309a8a07c92f9442128d2f35bda29bd0c8e4ed16015ad2e1aa9daeded7682cd5cf4c69ef9020082070807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02f914ac83d4bc00cbf9ac0b22bdd876cb2ae5998c03f51ca8207a1d7a44c7c1ea03b746c2548741c6502b6d5ec1a0cd93d90edee59e13c83d2c09c5c467b2823daf9020082070907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a096c9dfb9642ff121c4eff2eb184cb10765359ebb917a30f809e365f31b36d3e8a0631e95058f1c582a59bc09a1240842daa840770915638bc6139df6f633365141f9020082070a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0459ec2d850cc0b0d6a68d91d4667d790ac34795bccee876c537fdfef357ae325a0020e6f83670f1e84c083215f63f77246517e0300a9e5e62d173c4c13b2cbf211f9020082070b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a007b1a5c0aadbc662fb2713b5902c55d988632cf7965d4111855b4ac1c9b19a7ea06d0e45b995ae4bddd2b38d9d6bb61b5fd75d0441861a9b768fa66636575de7aef9020082070c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05add52440020553a8248c64cbe6d69a0fbaa0e406ac82188a28cc50e590ed94aa03a77faaaa1e0d6642a1f1d686d082b268364a8110f1473a053fc70a9012bba94f9020082070d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f109159c1cc980d7149c57a4c195f1b0e80ce10d0bf263bc1a214d1f8db4bab0a06cd5ec91263938a882bfdaa26e1f6b24eb2237e016eaed893fde15a1a6c29ba4f9020082070e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a068354308e2a02ef9667b43d7476c7551d7f3ccb57c5bac51e32bca0833c2d228a07b9e771edb4eeab29c2a6b51c920df41c0fd1c285db52ce8456cb2e86a7a31c8f9020082070f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fe944bb53a38f1dad3874d2f51b33d1db9ad3e5fd35f9a5b2ea463d1c8088a67a0604f7d6a893e1bd708da38982b7af44145d48f4dcd5a0e39f8006c7309a3d228f9020082071007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bc4c06e041d814de675a59c1b74c1cae3d263b49d88c28d27fbd1d15fa12e077a0269c121cad3abf0e8479bfc6bc86c54dbbe61ff466f83b5f9e5e40510af4c913f9020082071107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09bd53826ac3cfd8d46730f1630e7a89869d14ef556f1cc31bbace066e719d55ba075444b99b7066ce56a69da2003a2627ef905bb86c8277cdc9b56d887cdf8c012f9020082071207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a098e7cfd48f1421d18d96ea699319101ce0683ae5615ed9232d8fd0cc4335edfca036f1f254770c1e6c5082f44fd31e6a6cc449f3620e8c338923223306679388a1f9020082071307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00fe74745a827f62e5f80ae4d85db207b7fea454fb0f83515ce38299f7634593ba053c409d4ef94102bb2f5580a593adf321fd72aa5bc3c83c5bac3508c27901046f9020082071407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03a40b91d6bcac7acd8133c1e6975c95cff4ed666188cbb1c062f16cd0fa645eda001ccd914391b2a08d3486daa672f1190b7379e1e94d76f0905a104787fa9d0a8f9020082071507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03a517473e4f8df53b4778e54eb1fad9e33c83ce3eff5cbc851c695efbf116759a0030622e963e8a8bc00adb605b82605e2819b126f59a3d6b5ac584b49c23b1041f9020082071607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bea64932ba64b7b33f01fb089cbdc0788091a448b9aa0137e0227a2036d6bc86a04dc907af51f7f40a22d868c51b3b1b24061d8159f3e11d812f90db2096f277f7f9020082071707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a096eb06d2f03430919ae65b4938426bf3ac12ed2ab8967742d4492d5a8865ebf5a055ddb9b6dedbc4afdab57d0de8cfdfaa1936b062d2515a02aaedc44e9b560c0ef9020082071807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d5504cf8069bc31b496793f441e15a251658d62d6b169a78fe83a5633749f67fa02a70694ba755d87546974e9272d69335e6c9809f3a7710c706435d2d411186f7f9020082071907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f4ef89149f27e287324957f2966b7bcf6844c532d00caa56c17b0a948bf0d15ba009ee12b9e515ec9e8c11786bf3c1fbdcb982f7f6c424e1cde40528bea46d4f4af9020082071a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00c396e8f07517009ee9ecfa258b602b8a5cc919be804eb445d41b05f0a9580e0a0343fe9139dd1e80037214b60e8a9892c382bfd9c445075aefd4e0b59aaa04cecf9020082071b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00c9d098e62b1edd0e1cbe90e312ae90e4fc14bedc6f1dc2ea48a8141e96818aea00cb7ab6552d9a516250acd54f6de1effa6039ec02d4b5ad39e91acc374fac0caf9020082071c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a006ecdad654b24259cddbed02bef865bfdd3000065029bff61520cf10516f4502a06969c32f3f1bc8db9f008309faa3777b760b9f1486a2b5c0ecc9a55735dd8e79f9020082071d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a030e2e35d5a01f120a5d10111b4902e856a581e45f08872d3f0f80e9488580dcaa0605f7f97ef88b9359136a34f4e079bd1ee3f8182a4aa1c70604d460a0ad97b44f9020082071e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02fb482f658922187245e21031f549bb87d1d9180ae52f825a62127f0ba8b235ea0712ba3e89cc8a730a27a8bfb1e85b550cdde9985d9053ccbe8612b429dd820c2f9020082071f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a018ce06f45b1f9aaf8cfd85113fc73ca561e9e89eddfd274312cae53d06d89e4ba02a77ac9c0a4eae941d2e175bc46f78f5e61615b44fb0fd3d4971949bf0779c14f9020082072007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a069f1598034b9fa991db980d7c0b96353f560ab45f75f63eac304386f8eb7e35da029fb55360313bab435df82b0f59f84df6de0e09e636e38345402cf5b1ef17b5af9020082072107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0643182a7fa0d0abe70f311fd3ff859bc532edd80697f9776a1af6fbd17c3ed08a02989a5c22a1822f98aa9815c013dd67d14d28f6810c052337b21571117280b76f9020082072207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00401d176ecabc2275ba8bb0c83d8cff11132db4d1d480288a5ad3251cfb6bba1a03808e47b0bd38470902990d7875d1fa0d1225f51aa4631ed96308438d06df2bbf9020082072307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a023d9b23d390a6219884c4b932319c43888ee47f1d2ca97a6f71eaa9a0475c2a0462479b725b3f1e74a892b32d166ba7c78ea20ef17d569860fb163cd282a12a8f9020082072407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08d1734e3955332cde053808348f506c036487cdeae945a975b67798c640f6ccfa05d445c953b419f48579a87f60180bffd68149e6044257b11f15a817bb4fcafc1f9020082072507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05f89393f9496ceeefe81a709c8e4b81b8c3bea64ec2fbb6326a51df1adae45e6a068dd257e27dddd6d481bcd2e7a90fe8d250c38ca721d1798922e6e36a0cea86ff9020082072607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00a74d28d2f882f862136a12dc2f91166d9031f64a2791e0f40da441d2cb5a828a05046a00b882e7284e6dfc6fc6003659f1a5e464b40b71b82d80a56151bd4c8dff9020082072707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0eb9a15df16d4aab095597cc0bdc32fa5dab5f443b5afe2651fd44eda8aa20ffba054bd3905efb08241f142292a9ffa048134718ba9a5886c0fa6181e6995840676f9020082072807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a80afdfd13c7e83db7d0e0ff3da8518111b160687cc7925a64b6e795e4a3c268a0409c75b473383a15fa12d0cf56b8a76b3cdf07f6cb140e911e5ffa6b2a79db60f9020082072907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02c993800854745ddd9258ea7ef013f09df2262c07630a437e439cb27c15663fda0326a6f9c09c7a2f281762e2c1fa2427b3199150692bed17a9f965990518a460cf9020082072a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a00d1ef7fbcd87259a1e749ad3320920ae2b18052ce90871d232ef372daf6f5927a0707358ba3f104a4a9b359608d6666cc792dbe46aec13416f0bdd89d8c14fdf38f9020082072b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cbaa06decf2439d71296f49da4767e274b3e5fe17ea7264be2f15818762af4e2a076a92843eda671e1b4ca9db0fb2b27678c2a14cbdf8cd94755b1e91080afd3bdf9020082072c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a022959eee73b9199f758705bb2abe30add529b60e59a2dc6f100e199c1a4d02f6a02c2df09e803c67e5680087946a461abbb59c99f9df32bcc0f5844a4d0ce1ebddf9020082072d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b4a7c46d5bf4a204b9907bdde508d9921c8686dc2c52a7fe2f7408658822da2ca05d2b5fe12225030d466dac433e0342df7d2da6438c63903be5c93916276e1f07f9020082072e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a02187f2d53ba0b66503919b0381c93aa2564f84122cb7d78ae73be6845d51a648a03f3b75c4a18d6899118aa14aca1760b988fc4d42265edc325830cafd5d58845cf9020082072f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a001b4248393d55960082278e385e08bf947e7fd6735eb78d31ab67f7ea4874d26a040696de84f2feac0743a42c7cafaffd8d94757f1f4d2b5826d602d634c7a140af9020082073007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a079251815ddc519ee977c7bee4246473d0b282d278961e61d4920987ecd1b187ea06572e93862389f738fcf0222d50d9f0eb3f5a148c43556e693503de0426bd760f9020082073107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06890d1fe827c5f02d6364ccbec5b4de12a7b5a0c34dc7f9c4f446cb9065a44c0a006f647e8373d998e9cf4072033bb0f1b2b7e11b9bae9a642283e1d9fc044cf42f9020082073207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d8df58bff93e218f5b635d7b36ba7032ef88bf6aa136cace2bd107ac856e5b7ea034949056bfcc52eaab11784c7055f510cafe0a72a551bfcf8972f5c3714b8df1f9020082073307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04940b277b86dedccf7505dff55f0b4516c9187080e6af7983bc0b8af26724910a04585a76e1fd1956c633185897c801fa868cc0e0a59fede73654f66b740148833f9020082073407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a072f2280fad50316db7c88c1620b2d92c9853291c4253710bcbe8832e67da48aba0599d8668f4677fa123be6c66a6f46ab80a0fd5c3720660cdf526cb41bc4774a1f9020082073507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07717fa08b58611cfe944b9fc00449be7528a71c53e643f9975ae16452d3ab717a041582fda914ee67a8bbf02204df561a4f751089a753a5087fbb2a33173e40e54f9020082073607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d1be6a4b2ae2cbb38ea908b0308c4fb5655c540849d7b948180cc24dad9398eea00539127449676b03ea0e59e16cad5fea42972136144f9e62ba324e368ba16b0bf9020082073707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a064b6d787e15d95e61936196ab6257d1473311727a7740aa0cf1874e8f0bea187a06e803d876ce713702a93e0ffbdd940503b76ba8da405bd6a0a72b1e4d934cd43f9020082073807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c8992a2828f803d9db7c2030880107b8e37923bb93360e3a1ca6397699ab6ceba030c91151015b9af2707e601654459709c32245ea858109dc5b93e132e8ed25b9f9020082073907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0379aefd453848db352470ed67dd9344b10071a7bbc50fb7c54a074c2a620df1fa0594d5de1e56475d0484fc458898f268fdcf327a10775bbda045e32483de61377f9020082073a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03c1c2abd4ff4236af28a68a03aae7b7e6bdbace7d52f5e6770dc4c132c633c7aa01b13b5d7e5d5d85c33bca19b9a33da2408dd8403a62a6e403d12febf7d9cad55f9020082073b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0dc3144eabca56e0717f30634fc21246ab94aa70488be96a09366cfa5215bf5e5a0312cea336bbf08f7ea57210b809ed88c5e9c26afe9c2c0d1905cef0e29e09100f9020082073c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b22ad1ab7b96479e359bdeeae70d7051e38bdaf9dc7f1168173b31d735e2bb43a0242a5923680aaf539fb94f4c5ae636f1cbd4d8a5a7c5ce10f789e3eaaa65df8ff9020082073d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0065e8d76088561c5e23e3d8276bca456eded63ba83a261a4bf87f3d8b689c39ea02035c9bf4ec875c8d424ac15192aab80116328edd5cb778391886263d878230ff9020082073e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a019d5e71de894f6788438b7fb6d7b6d54a11c44ccb0954ffae13902c9ba9869b5a009ee1bcd2b97d6cb14d3d4f014d3566d5b3a98fd39e975ab4e2c8e48285f7166f9020082073f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a010b402bb0aabd6b39708e9e54c7156cbfd7b4241ba418cd24f51e06fb548143ca0087b3ec8ee2fc1ed11098e3dd63271fd184d595afc83a8a9a30f7710a53da860f9020082074007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a044883ec5d2b5289f47294e6adad6c3c8f79e39298c701628ab9d4483ae3e7b7aa016e6cfc5e909bdd9d7589b611f175406c342a3135c3fef761462f8bdac4be9acf9020082074107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a019c55d9141731db97bc8daa53bf4c2598c7fca4c570cde1438301802f594a7b4a0708436639a44d77de83ae7c6b9fef8567c4e8bdc38b99895acbd92f04993e834f9020082074207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04db3e6fd1f7766ac9b70b03d13a2eb6403c2670ab6770135016afa668d8fc410a02008a4afaf80d84e963e2db7328e8b2f542405f5eaaa48240185a5dc842f81a9f9020082074307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07ca169f18872a4c716a29fd0df09b3ac333477f5f674fb8c45a6e6bf829aa120a057a3fc1b88c4800eecb56f75ddd382abd21d670ff13251b4eea0b4b895e77f66f9020082074407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0550ffd23e790b1852b9e98234b1e8f1a2c02f8a7c7cdc9c0823b21a59623c4c6a04a250875b95a7fbf61a90174cb03a2686ecab1320cf42227b8526245a466a365f9020082074507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a005719bd392972fddf03e8d0c329b6bc61c7cd2993f9359171017fc42c8bbcbc2a044e9579b92568ab06b43466827ee5c52d5f176c7873f64dab795d17ac76fed7ff9020082074607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0462049e213259aa3e5d24c079e6548b3dae05626f01aaaf4a6310d0755662beaa016cfe656d36db95641fd870bf9ac6195b9b5117385158500ddefcad0f4741798f9020082074707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b3227c13fe8452ac8d091e349632fb0bb7d318f4f3cf06576d3e82c1048bc742a054f09e7de75d7cef0cbb23c9410856d6263baa578ae7db5d3c4ba2e5a782c789f9020082074807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05cf84eb78bb8b1524bd72609b740c357dd36e762b77b5fd79a54898a051bb888a029c4c1021f2be0117ab55d9ae7c5df338e4a8f96a7891f24294fdb654d855d99f9020082074907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ac8a526734d1620796160580afb27eaf1492d8fdbf4ba1ac94197fab5fef96eaa05ca5de73d40509eb5b0c0740107537c60990067b43f3b4f5cd9ae0df826259a8f9020082074a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a88ae0978999b29d62d5ec32a460a23a7b915bd9958e5b132484a2326ed1e617a06c870f4baf665989f6a5fc7ea6b324a639d116b4a8fee7f8262bdd957dab5fc8f9020082074b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06239fc76ffebd01fe8300f1c76257535a898dccef94720516e86d9fc90884355a01ffc30c7cd9c47bf773978fd32ea1010f2f0f316de288b1a854023e0438bcecbf9020082074c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08a70bb953765c5789a04126a9cbb12664c42a00d338a8d060a6d4cebe572f9f3a05db7d478881038c923927cbca838f07f526d224f628c1eff4a4a52064aee0233f9020082074d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a05bb97a65b367ceb30a7dbf2cf236b317c9829deb3dc1f991286e52773a9ab2f6a02ea7300e5056d5685b90728846f3acc2e48e5fe4e7a56dc19e601a71468116a8f9020082074e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a045600976079bd02a91c47a89dc41afabcc6a8432f6f12fed185420d4a645199ea03fbb58c316c42041a08cf81b260a0c737b2f9bfd86d5afe1decc7c1c63a8676df9020082074f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c2a79441befb80c4b67c52fcc1723220ba8b3061c5b16b8ea55acce399515b8aa005c4a2a6f62d1205612120c616d4feea3de488f76f943f9e436b39d77f52792cf9020082075007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d9af8f6695446e4bdb6150d89693e52b0e88fac7e26cc8340469b8089583edc6a0739683569b097f2f5d6c78cb50cc7e912f4bebfad8522886e40425a9ce2398e8f9020082075107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e3105aac1e331239f939cf2310e0772f6ea0bab3b9dca1105b119f15a49a611ca06a7ef917de2539b0649bacc2ebbe945cdd5a1e7c64ebe2dd3b1abce1270eba09f9020082075207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a085731dc274d26b60239b87b30d8b7a3a55526aae7a21095775ce8c0d1bf979a035e934742adca8084bb6a67b21ce0997cdce11e6f69e656d3e9c671c92e96069f9020082075307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd9cf14f31a25437395f93342d300d74511a1ef391737495063507e032f159a7a024c5c66c12e56bfb096456a01d598623255b77caa0b2416bed737795cd742dfef9020082075407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a013bb3c63779cb50648e4373ac6cf262dad73b9744ede5a4dd40ed36453eebb69a0445894978f50ee55c4e9c6c5dc23cd8a90fa83263396418e2ee0f98eb0562572f9020082075507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08ecfe28a98c1df0b98aa7a366efb6cbadafe1355db321f878c5c2702ff870539a050658464c91b01fc444daf0c1b666c07a3e3893d45f8d639907ceae2337ca80ff9020082075607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04be028e4e532a517d9ee38000c48d2665b9c015212bf5821b03edc6032a9c463a02d1f56de7cd182259cc3100472da1f6f6a4d1eecdc4500c73e581f8a2767d572f9020082075707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a058c16e650c4533a11857a783832476d37a5193bda0843f8bffb1b26381a3c4e9a00ee34c32cfd7a1a518106a6b50c71815760cfc2d9d4c1e4def23cd6ead66326af9020082075807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bc97e3948b3db174c24eac3ea1fe7f67d42c38f8967811a61fa01ef19c734a8ea06fa131c40435f74811e1bd273699f4f9d4a8739573f1296f88e83d5ec75d0a4df9020082075907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02869206764422314409c6dc41a3d310c5b55c67556047df324ce81bce434899aa053cd893353e7af5a08f834f2ecf4f652e43c1fdfea341b1b23469b5f71f705cff9020082075a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a004f7ab7e3e04a2b320d4d92fd76dbdcea7f73af1160e1096735f461c8885bfeca0587b40297be407c4912950cbbe84d8ded46dade0eb2b926a99d33dc37f77ba5ff9020082075b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a089e1ec481b0435ea15ad08dc7a7099f82bff20899a96edd163a6d8005aecf5d5a005752dff56e1e225ed292618919ee142233178372ad081ff64b627e607dd3110f9020082075c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a073884e3ea66ebb73ddb2ae9b42c6edaf090bdfb11d229570f1cf340c48f100aba03ba586979caa0836520058ea216a265c84e669ab23d23591207373854525cfd5f9020082075d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02c3b03962a6c37a04133762bc64beb7c5a1555ba34f8c8a7fbeed68519b907b0a003ffc75dafa096b602382f282b873118fc024bd347a276f89bd846b70d5b8a4ff9020082075e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c92fad10c9d393f12ed4d590f21be9a95388e749c6a40f1c728244aadcd9e3bea03fab1d45b16a449108ab3b29a57e8d7f28ea9206d4991c3ff562efcb2ee9c5def9020082075f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08e175aab72c5d101de289d8b86ee232596bdff0d6dcb2b7290f0bba8d983d516a00ed9f650644abc6dd2983df67e9374c523ecd5beb1708ff8baefd6f756a6f752f9020082076007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b8536efd611ce4c6e828c5320d9d67759d5770420a5fceb44bfe766e85c737d8a072b159275d49468da9c8336f994b8a5a0258f595340ad5f9f8cef24ea963e0c6f9020082076107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c077da52d0ea3eee104921274b6625a3cf2a2e42414557f33365a18ae2d840c6a024e93d97cf2e7105ecc700ea9df87efbf2a009457b48a210bba151f17303b442f9020082076207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08009878845adeea5b37f3d185164fc0902cea275e727284116e433ed78e21b03a010e75d4929b027ce9ffd239fb6ca8f0b93c97a57795fe6a469885925334f9ec5f9020082076307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0137b6d2ce8b3bfe689eba9243df0d5e79bc1b548124c6665562efcac92e8b49ea04cf3ac5990fc49e57d7fe97fed3c9c7354dc7f4e22673137884da51b368b18b6f9020082076407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f1e9e8409a4f0aac6583663d070252aa88d9fc309da659eaa6a1fb714ae122a5a059a5962442516c1dab70cfc18a18c9e933bba34ee796ca793f7a13a12334f5e2f9020082076507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08a3b5b9e84f384178099cda7d17f69a67244eb54f20ad5bd3f33dbb1caea7d36a025adfeb033f0b25ce8f47a0c7aa8ff632bd1ab710c9641261d54769ec9f6d0cef9020082076607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0497cb5c964a21724d4f51b410b8b13b40d94548c25b28f883aa623f49bd95601a035f642b42879c484545d5927a4730470071ac446630dce3845eca1e883942170f9020082076707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03346a045016ea06bbee8a32cdf83e01c25c6ad4b18c7a0c738907558f9629f7ba0717b995ec417eefc6f671dc07b496159f233babc26c298238f7d7eaa5948f97ff9020082076807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0690f55d22484a70d413f4c243e8911edfa74ca485e85a360db03e096fbbc4e07a01e7e6dc1723531ad79a329689aeca2c371b5466105b80b2744759fc00dc9d40df9020082076907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0033a2316f8f5d9562187731eab16b4eaa6db2eec2ee9c851d173bfdbcfa0d136a069753e843aedb1d9423e51b2d283bd93522872f63f25c7f949fd361b7a90de42f9020082076a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a028bfff22bd341de51304445e14357d230f1124e3f6c050aa1c7952447a1d0939a01b056ed673b00b4bcc4a5cdd5a324bdf51cd65101bf6ceaa1a4ec1c3541795bff9020082076b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c26a5b38e23a6e96bfd84a9cd8bdb176009c5a04da5cffc0b3e49f532f910761a0794114c9af5f21e2ad5204f8f53ca974b77ad8aaa35eacbb98381f7116d4c7baf9020082076c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a058e0c6d3b7dc01c7eeb1ebd0e81f0c4dc0a8f0ecdce47468a3e6d1fc37d338cba0414b498edb6c705aecb507cacb2f7e39ce50b4d40999b30a26908c772eb87a28f9020082076d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ee98104ad3fe6beb21871f31114ec9cf4a4b03b89ad33f48ed61135c79bf376aa06787af640a4ea51d307ea772fa208a54ad9542dbdb3cc6b3fce07ad56fef09d2f9020082076e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0657dac6c0c46720f666de228deed90770c54727f5803a66b84c34b3506aad292a033f8626e3be0fe3ca8f6c69c328af274616bd25598ff7eeb5c20a115f69cbd58f9020082076f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d9a33f705bc3b53faf3d0814e2030179a3dbbd1d7e1706202d36348ccb34f106a064e9d1d46bea37a75b2b8622f7bf4d2b73d144e1aabbe43d8dccbe24c2ec1d5bf9020082077007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d0d3c858ddc60c21735240ba66852c1bab673ce587b4c8891b18b198713f8d89a074af0e5ff44bfcbf07265dc2426bf7f9d7c0a6ee0ee968e1244baa9098c62228f9020082077107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a064b2fd006a9f178e133bd0c5f822d1d6770024a6a3023d7bd256074f8a392590a00d53b3ff298cf4bb5cdb4389128d640a896b163b78f58e54efbfe20a34e011f8f9020082077207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0970d1bd91781ab3138ca5772cf83f92d432bb2053fa9203df67d21234c3e06a8a034093d97c572c0c5c9e7ca694e56c360af8a87ef168a3b8644eee521485bd273f9020082077307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a053b288663e5c12d03a8cff7088c69746f1f291c835381c882a09f3c9e7fd7e26a059759bb131d571604d9afddcafa0b0a9d3fc9c9f670e017f78cb95e7828e92fcf9020082077407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e238ff1649d30eee17490ac9398621cebd5c6f8b3fe7231a70584568f38acbbea04684fdb1f4dfb3df6e9506047b94e44e192d0beb253a98ef130ef89710150d9ef9020082077507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d88978166d2a74fa14b3728090aade8c038b4bdb943c95fb7198a07671ccc27fa0267c76aa2de70b43c0a579dbd0fa23a6eb97faa9c5599a1039906a833dd2aa21f9020082077607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03d2ce4668a92e0a71c9bdf056cb2907c0454df0afd99e01316ef69cdac4316b0a001d87e03e0d0c64e8326febf7247ed2660a854990ca9d85b2d6a0d9f465dd409f9020082077707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06d737619709dd1679b9b2d3ab691f6f6f83e6e01447a4119f585751554a16beda0507f4a61b766a37d9eb412085288f831afdc433a466212f5307765af01a43301f9020082077807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cc4abcb0aabfea52b8d335a0e0643713c89015b9424d37c3d4955fd71932fb26a07eb21e54045ef3fc3492988be30aec6619459e2168e7c0159cb4ac3433af1967f9020082077907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0e1f5e37722c5ee48e049a4e08f449f1b09ebcf3008d32f2d90b073e8503a59a8a01474fa2cbee7c47f9b2eecde6328f3eedd67d4a376e130722e11b36b45e85b3cf9020082077a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a038160ebd751eae42aa9ffedada0717a2b68440d17f918a5012fad7825b330756a0132bf2f5c602aa567540fcf2bf28534fa13bb710a3d8d8656e1167c3d05b99e2f9020082077b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a061acb7ec0ecf923a3520a31eb69444c5a3fea16843757d07eed84d002ba797eaa0133edd3c976e1ba52e78101598ecc54c4fbfc8d03dbed17a3765fa3ac04a45c6f9020082077c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a07abe2241ce7527c5246dacc4b55b25744d3c5d27a6d61a9e2c5d5781965007daa0673cb794757dba09b68c3b05bed115d19f08c27c405797d7db5d0b6503536da0f9020082077d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0960aa83219c55368ea31c84a9612bd3e015db1251a6fc2fa3e6525fb7d6c4a3ca03605858a506415a4ec752283da845a7d2178144a2e96a6cd0d9e1c879c5c68baf9020082077e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a03ca2c607d8a03cf56388a7756d653472a8605b83856f70af6d1d8a95c7a435b1a06c32dbfb3a8861257d9a9bc27c40b0ff743445358398d698fc339443e6119f06f9020082077f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09cee6b544c4554808858565c8e0e7847024a69f884bc1a2cc6d0d8831d761b53a03204a7b78715c4e5368441345a1c259289b70f1f1826f631fe68af3d052abee7f9020082078007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a053eabd5e674fd6dba80c9b43a7b0db7b7b3fa8659239d68bdbcaedd917c1623fa05669eb96ac7d9fae76f914866bdc0902754409c173f67e031742ad59459f96e2f9020082078107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01fa08598041968ff5ce24d51af853cca6612978cb32f8a82ccef50981b62195ca02e0fbff6d80d64cde550e3d2bb38eb99a7d8dcb22a7170a436a6aa3ca2f58f6ff9020082078207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02212569918f72361516451045ef091665fdc5eb481e8c6e768efd6826ff7015ba05d184bc1634d1b2ec7b95f1ce7ba9ff6fc603ec9df22d89254d1b56fd7e1d34df9020082078307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a076d386f9ab7d6c76dc8d33a9a6492d23cc820afae2e1ad2c7a001b4b25f366c0a07ad2b78ecd1a3defbe33a53d4b4347962b2d6a8453ef9e66a473c885828ea0cdf9020082078407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b5754622da07c729853357da7a4411632c8e3ac483e66cf47ffa53f5a494f02ca07733891bc4ac4fe85ddee35b1091f23a307444464b359e5ea49c0d313fd357f1f9020082078507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0923fcbcbf50c5677b845e8375a568ecec4c4f8ad1ca73ac47d997baef10ff9e3a003db2c50d37a443e14b54af2ca713f43a3aa52a573390bf7360d60885613f8bbf9020082078607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03abca3893c3de473ae2bfe36337f604b99d125ad2c6f20056ce0228bfac85763a012edc90c08c950ef9c23f7a5f6e93db5911e3e2c83d6e30773bdc18e42822ae6f9020082078707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0311b667bd4165e11877ec49ae02dccfccce4d11a98bb1819440c5b35fabdfa50a077bb12fceceb609503df889bb935337058a7a7b367e1305d5726f3012fe0f0a8f9020082078807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04575b25f64a8dae041990436697dbed7e10b7134430c30476a01a6a2c7e62309a033f78a95d54c9f2e709d7ddb208ed3204371ce0ae9afcd9e04b484972ce5e7dff9020082078907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a07623f441be6da908ae7f180cc2ab07933149809e2436404531293b5ab0af0dbea076dd94255552c04e5f25b7d9c84ceb830a6ed39434c250be7a3ca77eb3c42eaef9020082078a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09fe1b4ff370fa559b3b385022cb6affa4d4ba2c025fcebd506ede9823515c0c3a059b8a18dd8a452451b7d0865ab561ae81e467b37f873d0b9e8288022807ac8b9f9020082078b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03cde2875ec84229e751ce92ff22693776c6e1e306f634d3f2c4be3f2758fd78aa07fde0d86b6b81a870b2cf7f6527c7c369ca2c93b6159ac134161881c334652f8f9020082078c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a04a869973e69f716ddf1db76572d615b8c9ad5659bdf7459dad623f25e0d44014a0751a4903a025f168d30138dc2bc575455e76813697b095746d4f80f618524177f9020082078d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a035b85becb6e9743598adc2a9fc3906495fe84aa9a09f8402a68763ec85793a18a049cb1d22e600d6e520d75db75967bca35670f12de918863840c7ef04ed9f41abf9020082078e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01299cff99a2ccba7733ac65117dce9e8b73e19c5233297a394f4f13228ba3561a072dec8448cd70e78770e7ac87b989688c2f8f7da6dcdba0da2ca3a201310098cf9020082078f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01837c4ec34df5a0565d153561b7e334bce78f686e47ad948a3d023e17e983822a02b3bfbaad1d89db0440d7871460bf270faa3d8a49b693062938bca0e5912c76ff9020082079007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a09e8b5545448c0126bd4a4ae91c8045ec713e34093118fe5fdb443f975b02b80ba04920a148dc53ea6f8255af7a72bdf0e237623f88c48cf16e5c16de5e0986f392f9020082079107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04f305df49f238726a7dc18c7cceafd409fb29e327e315a333bdc5bf5cd964f92a04df2c2966c176a9c445a468b677e25ace6b1afe1f9e87df2e021942a466f1270f9020082079207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a0ed6d92719be48da4e8ff638080b9bd54af5a926b7f9ec927364adad3a80e41a06c85620310c24a4cc283d29e475052ee8d1806e5f3441415cdb8305a8f63406df9020082079307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a049f0788b279b5622317d87f57f7e87fadfe277f8b40ab7957218d5b4b60644baa050423d05757c2b07920736a23af08dfd1e56df5bba19374fde383f712e46520ff9020082079407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a6b3b2692cb5eb10e73d29b0bc7f63cb41563cda4e2aa332d1ee821809782db9a038c9dcf96e6364d6a9f1a5f86a9b7d6aa6192246f63daa420549ef208a503d42f9020082079507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a064a291993d6b6c531383538a24b2c9a4eb0690a5a9bc6a8e32dae7794f44574aa043f5ff22dba43cd5223c8f3c988120b170798a09aba34ab5d79a974f22cc48dff9020082079607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0f750d43e91054eeec62ebb5fd82978481c7f237fba2ec8b994dee37dcb31cb9da002c49b1cc33d3d393d3164f10c597a69d8b56ee7e0e54397bf0b2c392a8c5edaf9020082079707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08d09c766f7a9b984098f295929350d8de9ec0ecc167410ddc2a78fd8e16f67d9a06368cd82004847a07da47565debd586d2445569274f2afd6746db1a06aa5b7f8f9020082079807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b98429279fe87b445871afe25937e8698ac51acfbf49de70c66715e40da3f6b0a0409a3b850afeeeb16494450601258c41e12f298bf6c8b14ea8fc407e774d2acaf9020082079907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a8825e14ffc098d87facbf9c24b659d06e4f5d8ae3b60e5aa814c663c5d7a3d3a0692aca803750dd0ed17a86f31a53a9884b1fc48774fa483673588c67dbbbb55df9020082079a07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a096165d4eedcb1fab8a79cceaed9cc236a9791240a4668e700b024200020f54cfa0309bc94b308fe8d95ba837fa931b540cdae6aab7d9d4f0df7dfb0768745668a5f9020082079b07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0cab223fdcc7672656f5e317d2f963fa32c38a65d565fe19890d0e7caa0040781a02ad346044f806ccf5f90a8aae6bef14a6702b38cd2f059655bc925647600b80df9020082079c07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a09d0271e217b74126ae51382af1901cffbb860a2a49b8f2364bd25d801ce745a05d0b899baf242a4042b925013859bed322573246d0310a807ea17f4e6dc9cf76f9020082079d07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a08b71595df411abdc54556d20c56df98443f6583e1dfbac3714401b9deb7a2b92a0124066d5118a628195e38179ebacede9840e8a6079b99214a9ab0260aa43d534f9020082079e07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08ee811ea974844a92ddf980463492b20c878a23e9194693d36b10928535b792ca03fd8c837972eca905ad1171516a30ca444e59e7173c9dbb1015da19fc7704a8df9020082079f07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cd68c7cd72b052d6942bec61e1c5389cc3b004a8712f9d4dbebfd3acf0eb9f9da066e21fb14706bdaeffd91bbb571b6fe18aa216e30aa1417dd94f87af273d4404f902008207a007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06bc3ffb0a327bd828e1d8356f7fed7e63fc8d6ea3a667d44b5ee7187ee0a5f3aa034818e47808018cd07af0306941776998a51d2ee7133a7de5f93d80c19c78da4f902008207a107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06b0c92035973d11f42717dbd8a9b23f68607736903f17dd07a8d0d007fbf5035a0753d68d3433a6ae3a8460d1cf279c5739f348b8d7b03f4a682ebbe8a129e5c9cf902008207a207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a094bb1139a83cf99731be08550600da5af67699066c7ab9d5e8e8e23fa1ab92d6a05f0dbd3f983624527b3bc3308c71f834d5f02eb93148a96e5fad2087db2a3c2ff902008207a307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb945e336561efb2529159e1a581203c27be13233aadf8956ed10c1db2cadb12a05e9e688e71e55b99e42b97836de00589c8ca45767ebae88f62a5eaab56623d09f902008207a407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e2b9504eb07ba3d264fab39a5a17f7c659f3ba6935484a38c6f0ebbbe561fd86a07ffa0de3ca4e9ab0f19bebeedc702795f97375a9e46a843366948315399eb63cf902008207a507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a03ae1cdccd9ac0ff0be3341a1c7b25deac4043710e991b6f57ecd071bfb222af2a01674c257ece942e4c817c5931a423c92c08a404f402c64391d76c6eef6ad06b7f902008207a607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0bb7a729c33f617e0c1f7f9464d0020c31d39544c64d98c387382b6c043a84152a076b049bf318b8ea3214380155dee005f2b787e0545884cee9ef77da131020b15f902008207a707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a01fc1d0c9b3f420b06ade7423f98451a5a5d362022d8e66684d628efcbb122667a033ca67873f09c0e99a4f57ecc1d822b36bbddb8392535d2576cf8de50aacfcdaf902008207a807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0ff37933e08275b7b9172f6b8e4db39616aab508d1000a55a7ea9a19df65adac6a06159157084f78e4973cb6a1db7935dd75aca1464bfa8fa5190553c0c1a67e7dcf902008207a907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a034c3a85eec428d83b887b8b870b773f2b3d529eb9783b2ea91765639bd774906a01805fe3a94d6d88ab04ff8bc57d15ce9621144de0338929a6d0852246a54d8ddf902008207aa07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a040f6095a8e981a8a518336d97fe287a2ace0d2999d42de7fc3345c366261cb40a04f620b99e45a4c44f06ae0ba161e1770a71d973d2fb019d36f5c4069d6da3fc0f902008207ab07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a01374c984afa4453455ae0288ed3b798e654545cd5fa2c629c21278c538b8ef13a02eccd279194814b7d8acbc9d56f2734adba188a1b4641849ab8c1b0f097a2a96f902008207ac07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b61559eac559e57671962a6bf915966409da612529f5c6b19673cef36abf0966a01f70aaacedd16896c78dc9a8c0a3672fd82a287da65038865c6e7b9d1d14ff78f902008207ad07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a066c6f885f08359b00e359a50c34926cd9cf6f68c652662abeb06daaa494d810fa05d6bf8b93ae6a5d8fde01436c2caae428a0fd82c42c8b36ea1c52d3108a46298f902008207ae07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0cce25b87107d9c4af8591fce3e1deb6f986683957f5937aa04d3b133b09084f4a021bf2dcf528c0aa17e14c0c27b12a54b448ba09e7224314a1091a1a1949f7b21f902008207af07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a06451f67f98f12b88134c33e37537df2e17572360ee44d19b333de808d9934615a03686cb600debe0cd4beac5dcccdf335194bed87634cce9aa4695f556616f4c1df902008207b007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0eb8005be2567f1d27dc036ee7afac1587100a67515c7e6eaae16d46a4bd47784a012c5639ad52c601c26cf41c320b767fac355191b731e2d65069f66acd000e923f902008207b107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a21776484875f902d7aa5b50b384abd019d7ebc1f8fd3752a98bc3bfd83819c4a0247b642261cc9888e58307f33d0bee90a7ba357df97e179a79210b0f3b416d4cf902008207b207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08a5765500366f4542511cfda58e8bf3dafe7c11559a529c2e1b682ff1c04a283a073ac4ee22e5f05daff618d89916fa822aa8bda76656fa61ce3bbb54a214770c3f902008207b307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0045654154d43a5e17f45c1061d487dc0f9321441187ccdb890ff3453bbb0953fa011b6fb8faaa77d1ae41b6815a32234f00636a7960557fd67262b5c1d78e669f0f902008207b407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09d92aed327cf2ed0f94867a8af7864e3d7b09a3e9ec23d106eafbbcefd2c2250a02d439c34222a3be59734080cc2000159c12e193d432e1dae9b2df8cccac2feaaf902008207b507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06144485f64d35b5d0ff737706acbf791658ea18f6948c667de30a1b1f00b9654a0648e75fc26edbdfa61277105346fd2bf80ff7c54f75f23a4b4d3e8bdd5e0aa77f902008207b607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0c74c7920ad6e8b3f479b33dbbefcf2d563dc30706cc0dec00a0bbead98660567a02d99fb61c95ebc3f9ddc2093e89793fd70a6b1d982e92bf2ceb454efe356b61af902008207b707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a063332fcb449074930ccf64e630d50f9a0e010d2d591a1d7a8369021aa413e0d4a07041230d619d83a77d4ec7176de66c5e7f80b56ed447b2f2f032d82eadd98bb3f902008207b807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fe835e35aa2c0b3a55326260e4d95af1a0276c49b5511756a83ced73d8de95f3a01e82a85bd3d93d3e731351e9dacb175ac5d7bef4f1bf5b115f31b5d197ca620af902008207b907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0914348bd636762b2221b0dc110a4baae78b3a6732021b8924da6f6408bcb74f8a0206b2e15310578d795d3f684e202c8bbc2af44a5a3451637ac6d770fd2ebbb64f902008207ba07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0680141af26e7889a7d5c48ef59f918459e58779ac3c325388c371b215a6625fea0200770d0326dc265b36658242ebc6e1893f504627c89635b30693b7135843823f902008207bb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a008e1af1ab96c83cf448114db0133700df67527d88842b4e8c8418a122ff64210a002619bf5429588dac609ccd86391ff1c2126e975e5be0faad98a796bc04ac44ef902008207bc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0b50d4724dfe2f9c0a2fbcf930ed39617502179d7954c27765be3fb1c03124ed6a06a2998e695307f806ce4cfa5f6794caa492392b361cd7de49414d9bd2ab651b2f902008207bd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0a5782736ba9b0003efe0d30af70f571adcd37f3848569c914714bf225cfb52b2a02806e645f414fc7d8f1ed45953db1efc4bcc327635ca439e1bdc33faa4ade54ff902008207be07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f82d3088327532461e033e5c7063ad2e3254106a7a366e0ae8ab4a02596921f7a0241b5b065d705e583c11194dc1d4da2384b5e9c98a157bc7d973dcf4d9eabd83f902008207bf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a04a57e5202f9e25a22d30f035254f0ce2e9c85b78acdbba77003123dd87fd9fc7a06a6c8c573f852a2d471c2f0aa8532b1b4922423fb29e4b4ad89a2a24a11c83fef902008207c007830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0fd617b319d7e5fe00c62fe0f9f2c5699d6784395d3688e6dafb7d0cfbbbfbdf8a03c495a1b36765a595f166329a82cc1ca6a0b605a79c2e5ac31b57f707dfc3c7bf902008207c107830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08321650c6284a7909e2082eb77dcae6e06296d3aa08175f14795c4c4815cf6a6a022ea42b66b036793358b39849898afd42d16799d05c908e8318806f1965a7b9cf902008207c207830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0760a57b4a5916bea18b8dd8c0f3a8589a3d935e509c3ee1d2e9013edcbb006c1a01058dd033881668d15f5a6af3c08614c52144de03690d9693fcaeb4c2054df36f902008207c307830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00f08c447a672d5f45ae780f2cf19e8486126b8d3004548103cf257772848d4b5a0720a4fd2598348ca073dfb8a24e0c800146fecb3562168d7738df45e88baca04f902008207c407830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a09aacfcc04f966340e90dbeaad1d8163313a46d5b9a76a2d5232fbb273a430f1ea0743fb55a389db60df8f1fd1fe5f1e15fdfc0a162beb7b502a5af6918faa17a00f902008207c507830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08d1566e03d2f0639ee0184cfec2bcb7997d33c66fe3955aa5c305b260928a4eba01bf35e68711e085acaa8b9cbf94cb38e927f1783ef20a05d3a9e677b80d9e158f902008207c607830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a092ed47955d57306081454a78cdc22975faf09ca06265d999d3786fbb567a5272a0605982e2d7c01d7ead8b2246e3401570a09bd6dffcb5bed15157279df4d5a021f902008207c707830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0d7e1528af59717daf1a8a51912619e9e097d9a31614944a7c4f53ad20808ee19a01a5102c9a98d5ae81ba3ee5d9a251a0064cf6090a1a6ae3278caa669c75c21a9f902008207c807830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0d284643502333bd2a510d3c367e286501712e23e404166a886defa025791637ca075aeafa27ea2a9840a46dfc29c4ffc7a4077708f5780824366288cd6d74b250ff902008207c907830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a012b2b1d0b195354a7dff6809ca3abced2377814be027a961abcbf8fa215f4579a078dd2b778f253d28512e32cd558e04796b2dc8eb2da43b09febe57d307fe8a21f902008207ca07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0b0acd0971afcb68d1033d9ec3820f5e59443b43924f9b3fcf02b513da7893f26a01dec20e01a6cff7eefe03d96263b1c2b0b22bac78529a68a2d22489639b1974ff902008207cb07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a052b37d00acf2fcf83f9f3233042c0baeffbb8f7bef1a6bad537ec1faa147a87fa03fd3f083895e42144a034a18d4de0225d23942d7f2df5c8406ff829f8674bc02f902008207cc07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0c9633ef784344e358eab69262fa811d820b52f5551b49f7154e0d46a0a804dd9a06563f3760609b4d0d3db74868a2dc3d292379a45c117aa51a2789f8df656e0c2f902008207cd07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a49186bcb26e906d7826371921cf36c0e4c3eee7e34a8490453d4f64f9776db0a0182d56c313396c4fb261ed386be13724d1ae68f55bc1d7cae1aa7069b16300c4f902008207ce07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0a30a656625aa89d532ecdaa210f5f5f2b4ccbe125d92882cb882698ad6d27fd8a00f0f22767517aade20c1f2f4c2f34e0f217f49f0af51f9595115655b679bff59f902008207cf07830f42409400000000219ab540356cbb839cbe05303d7705fa880de0b6b3a7640000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e96be0581ea878e13e531b4a717761add2c1b5e27079dd3c874ab2a85e8a538ba05fc6003ef7d21350b0b4ff6173fcb16d98948d982ec80395f35917f407213cdbc0c0fa05e250b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000307b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000309b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000310b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000312b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000313b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000314b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000315b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000317b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000318b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000319b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000320b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000321b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000323b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000324b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000327b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000328b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000329b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000331b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000332b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000333b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000334b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000335b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000336b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000337b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000338b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000339b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000340b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000341b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000344b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000345b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000346b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000347b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000348b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000349b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000350b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000351b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000352b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000354b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000355b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000356b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000357b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000358b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000359b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000360b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000361b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000362b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000363b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000364b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000365b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000366b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000367b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000368b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000369b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036fb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000370b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000371b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000372b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000373b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000375b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000376b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000377b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000378b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000379b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037ab8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037bb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037cb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037db8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037eb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037fb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038180b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038181b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038182b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038183b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038184b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038185b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038186b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038187b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038188b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038189b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818ab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818bb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818cb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818db8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818eb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003818fb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038190b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038191b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038192b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038193b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038194b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038195b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038196b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038197b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038198b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038199b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819ab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819bb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819cb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819db8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819eb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003819fb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381a9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381aab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381abb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381acb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381adb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381aeb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381afb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381b9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381bab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381bbb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381bcb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381bdb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381beb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381bfb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381c9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381cab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381cbb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ccb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381cdb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ceb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381cfb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381d9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381dab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381dbb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381dcb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ddb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381deb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381dfb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381e9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381eab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ebb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ecb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381edb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381eeb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381efb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f1b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f2b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f3b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f4b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f5b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f6b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f7b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f8b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381f9b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381fab8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381fbb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381fcb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381fdb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381feb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000381ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820100b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820101b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820102b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820103b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820104b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820105b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820106b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820107b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820108b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820109b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382010fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820110b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820111b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820112b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820113b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820114b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820115b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820116b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820117b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820118b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820119b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382011fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820120b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820121b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820122b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820123b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820124b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820125b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820126b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820127b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820128b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820129b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382012fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820130b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820131b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820132b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820133b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820134b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820135b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820136b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820137b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820138b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820139b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382013fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820140b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820141b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820142b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820143b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820144b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820145b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820146b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820147b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820148b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820149b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382014fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820150b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820151b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820152b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820153b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820154b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820155b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820156b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820157b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820158b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820159b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382015fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820160b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820161b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820162b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820163b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820164b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820165b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820166b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820167b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820168b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820169b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382016fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820170b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820171b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820172b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820173b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820174b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820175b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820176b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820177b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820178b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820179b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382017fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820180b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820181b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820182b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820183b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820184b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820185b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820186b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820187b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820188b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820189b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382018fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820190b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820191b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820192b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820193b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820194b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820195b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820196b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820197b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820198b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820199b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382019fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038201ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820200b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820201b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820202b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820203b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820204b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820205b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820206b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820207b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820208b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820209b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382020fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820210b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820211b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820212b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820213b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820214b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820215b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820216b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820217b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820218b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820219b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382021fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820220b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820221b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820222b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820223b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820224b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820225b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820226b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820227b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820228b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820229b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382022fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820230b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820231b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820232b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820233b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820234b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820235b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820236b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820237b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820238b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820239b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382023fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820240b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820241b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820242b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820243b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820244b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820245b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820246b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820247b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820248b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820249b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382024fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820250b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820251b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820252b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820253b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820254b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820255b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820256b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820257b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820258b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820259b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382025fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820260b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820261b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820262b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820263b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820264b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820265b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820266b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820267b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820268b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820269b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382026fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820270b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820271b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820272b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820273b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820274b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820275b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820276b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820277b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820278b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820279b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382027fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820280b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820281b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820282b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820283b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820284b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820285b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820286b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820287b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820288b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820289b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382028fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820290b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820291b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820292b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820293b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820294b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820295b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820296b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820297b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820298b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820299b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382029fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038202ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820300b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820301b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820302b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820303b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820304b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820305b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820306b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820307b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820308b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820309b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382030fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820310b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820311b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820312b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820313b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820314b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820315b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820316b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820317b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820318b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820319b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382031fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820320b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820321b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820322b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820323b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820324b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820325b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820326b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820327b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820328b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820329b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382032fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820330b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820331b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820332b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820333b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820334b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820335b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820336b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820337b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820338b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820339b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382033fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820340b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820341b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820342b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820343b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820344b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820345b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820346b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820347b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820348b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820349b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382034fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820350b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820351b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820352b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820353b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820354b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820355b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820356b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820357b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820358b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820359b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382035fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820360b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820361b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820362b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820363b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820364b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820365b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820366b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820367b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820368b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820369b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382036fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820370b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820371b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820372b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820373b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820374b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820375b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820376b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820377b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820378b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820379b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382037fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820380b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820381b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820382b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820383b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820384b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820385b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820386b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820387b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820388b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820389b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382038fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820390b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820391b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820392b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820393b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820394b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820395b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820396b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820397b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820398b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820399b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382039fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038203ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820400b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820401b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820402b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820403b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820404b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820405b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820406b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820407b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820408b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820409b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382040fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820410b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820411b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820412b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820413b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820414b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820415b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820416b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820417b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820418b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820419b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382041fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820420b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820421b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820422b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820423b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820424b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820425b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820426b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820427b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820428b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820429b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382042fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820430b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820431b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820432b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820433b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820434b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820435b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820436b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820437b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820438b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820439b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382043fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820440b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820441b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820442b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820443b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820444b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820445b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820446b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820447b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820448b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820449b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382044fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820450b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820451b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820452b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820453b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820454b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820455b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820456b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820457b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820458b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820459b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382045fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820460b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820461b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820462b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820463b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820464b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820465b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820466b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820467b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820468b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820469b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382046fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820470b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820471b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820472b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820473b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820474b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820475b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820476b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820477b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820478b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820479b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382047fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820480b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820481b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820482b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820483b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820484b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820485b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820486b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820487b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820488b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820489b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382048fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820490b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820491b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820492b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820493b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820494b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820495b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820496b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820497b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820498b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820499b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382049fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038204ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820500b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820501b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820502b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820503b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820504b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820505b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820506b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820507b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820508b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820509b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382050fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820510b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820511b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820512b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820513b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820514b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820515b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820516b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820517b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820518b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820519b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382051fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820520b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820521b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820522b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820523b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820524b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820525b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820526b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820527b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820528b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820529b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382052fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820530b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820531b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820532b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820533b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820534b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820535b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820536b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820537b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820538b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820539b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382053fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820540b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820541b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820542b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820543b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820544b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820545b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820546b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820547b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820548b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820549b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382054fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820550b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820551b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820552b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820553b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820554b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820555b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820556b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820557b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820558b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820559b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382055fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820560b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820561b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820562b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820563b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820564b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820565b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820566b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820567b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820568b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820569b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382056fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820570b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820571b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820572b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820573b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820574b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820575b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820576b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820577b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820578b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820579b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382057fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820580b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820581b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820582b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820583b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820584b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820585b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820586b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820587b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820588b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820589b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382058fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820590b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820591b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820592b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820593b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820594b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820595b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820596b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820597b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820598b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820599b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382059fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038205ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820600b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820601b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820602b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820603b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820604b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820605b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820606b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820607b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820608b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820609b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382060fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820610b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820611b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820612b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820613b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820614b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820615b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820616b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820617b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820618b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820619b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382061fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820620b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820621b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820622b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820623b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820624b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820625b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820626b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820627b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820628b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820629b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382062fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820630b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820631b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820632b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820633b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820634b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820635b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820636b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820637b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820638b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820639b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382063fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820640b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820641b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820642b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820643b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820644b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820645b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820646b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820647b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820648b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820649b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382064fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820650b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820651b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820652b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820653b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820654b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820655b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820656b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820657b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820658b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820659b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382065fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820660b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820661b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820662b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820663b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820664b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820665b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820666b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820667b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820668b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820669b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382066fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820670b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820671b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820672b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820673b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820674b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820675b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820676b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820677b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820678b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820679b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382067fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820680b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820681b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820682b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820683b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820684b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820685b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820686b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820687b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820688b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820689b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382068fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820690b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820691b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820692b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820693b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820694b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820695b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820696b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820697b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820698b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820699b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382069fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206cfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206d9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206dab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206dbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206dcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ddb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206deb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206dfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206e9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206eab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ebb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ecb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206edb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206eeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206efb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206f9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206fab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206fbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206fcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206fdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206feb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038206ffb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820700b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820701b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820702b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820703b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820704b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820705b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820706b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820707b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820708b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820709b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382070fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820710b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820711b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820712b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820713b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820714b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820715b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820716b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820717b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820718b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820719b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382071fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820720b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820721b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820722b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820723b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820724b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820725b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820726b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820727b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820728b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820729b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382072fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820730b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820731b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820732b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820733b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820734b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820735b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820736b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820737b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820738b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820739b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382073fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820740b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820741b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820742b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820743b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820744b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820745b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820746b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820747b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820748b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820749b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382074fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820750b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820751b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820752b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820753b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820754b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820755b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820756b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820757b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820758b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820759b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382075fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820760b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820761b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820762b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820763b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820764b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820765b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820766b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820767b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820768b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820769b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382076fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820770b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820771b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820772b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820773b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820774b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820775b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820776b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820777b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820778b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820779b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382077fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820780b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820781b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820782b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820783b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820784b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820785b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820786b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820787b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820788b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820789b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382078fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820790b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820791b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820792b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820793b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820794b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820795b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820796b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820797b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820798b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003820799b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079ab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079bb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079cb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079db8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079eb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000382079fb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207a9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207aab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207abb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207acb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207adb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207aeb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207afb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207b9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207bab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207bbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207bcb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207bdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207beb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207bfb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c0b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c1b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c2b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c3b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c4b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c5b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c6b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c7b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c8b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207c9b8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207cab8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207cbb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207ccb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207cdb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207ceb8bf00f8bcb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038207cf", - "blocknumber": "1" - } - ], - "lastblockhash": "0x988b9317a6aafeb5b8a25953d92b2fe13ab5ecb6d92dafbde00b6748302e8420", - "sealEngine": "NoProof", - "_info": { - "hash": "0xdaeb5bade558b3310ecdbc1425222fc50c3b58b032ff3f6c50f994bc17f57759", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_different_eoa]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4742ee95cff22fb9be16496538804989517b1be110c1fa6f051a66fb81dfd577", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x86c1e2ae22b7874f1b88d5f9dfa5fdc4247d2f1d7f5dfeb4a6506d2cf10a8f82" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x8a0a19589531694250d570040a0c4b74576919b8": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x03782dace9d9000000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", - "0x20": "0x02", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0x8a0a19589531694250d570040a0c4b74576919b8": { - "nonce": "0x01", - "balance": "0xabbcd4ef377578ac62", - "code": "0x", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xabbcd4ef3775772a2e", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04742ee95cff22fb9be16496538804989517b1be110c1fa6f051a66fb81dfd577a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x86c1e2ae22b7874f1b88d5f9dfa5fdc4247d2f1d7f5dfeb4a6506d2cf10a8f82", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe0cb69f12993f04430c8d3b9d0aaa8c8ff245e80ef24db2bd8a0ec69fda8a79f", - "transactionsTrie": "0xe2b304dffb7efb361e5a3f61fe6f0dd0ac96695c130397520faf83bcd07349df", - "receiptTrie": "0x9c8d7a917ecb3ff2566f264abbf39131e51b08b07eb2b69cb46989d79d985593", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x024f10", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0xfba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29", - "hash": "0xe0ee0395258646d91291a46d8e9dceeed0e853ac08ed405732d00c461c3f8915" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", - "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x151cafa851383f84aa9bca842d970013c41da06d4cbd9218ea6fd5d93444d045", - "s": "0x2065bb8cd6b28c631d62f56bd72fbf68083556891ffd575afd4746db4bf32d30", - "sender": "0x8a0a19589531694250d570040a0c4b74576919b8" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01" - } - ], - "rlp": "0xf907edf9025ea086c1e2ae22b7874f1b88d5f9dfa5fdc4247d2f1d7f5dfeb4a6506d2cf10a8f82a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0cb69f12993f04430c8d3b9d0aaa8c8ff245e80ef24db2bd8a0ec69fda8a79fa0e2b304dffb7efb361e5a3f61fe6f0dd0ac96695c130397520faf83bcd07349dfa09c8d7a917ecb3ff2566f264abbf39131e51b08b07eb2b69cb46989d79d985593b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083024f100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0fba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29f90404f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0151cafa851383f84aa9bca842d970013c41da06d4cbd9218ea6fd5d93444d045a02065bb8cd6b28c631d62f56bd72fbf68083556891ffd575afd4746db4bf32d30c0c0f90180b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301", - "blocknumber": "1" - } - ], - "lastblockhash": "0xe0ee0395258646d91291a46d8e9dceeed0e853ac08ed405732d00c461c3f8915", - "sealEngine": "NoProof", - "_info": { - "hash": "0x7839d070bb9ce35b39176bd6f114b6c93d1696674b535cc87df1856c5fe0781e", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_reverts]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x01bc16d674ec800000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x02", - "balance": "0xabbcd4ef3775749890", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x56c98fb45185e3ff3abb34538d6cfae09eecb72fa637ceb8711046fba724d693", - "transactionsTrie": "0x1ebe5245285b870fc6fe65a4d2abe5505e258744b278320b3da11ec04dfe4312", - "receiptTrie": "0xc82ea3aed32f99d57c62cf4a61ebeddd2c4ad1036832fe87980fa1618885794a", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x01a110", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", - "hash": "0x90841e61050efeb01eba54c86083bef86a72491262885789107a3e8e52d24476" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x038d7e692bb600", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011050dacbd9d78a9f0f096ca5067699a6bd87cdec624729493294f6819fbf72af1d0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2153b02aa61f4f5e55fae4ce1a797147e18843385b025e70e81d0e228b2173b9", - "s": "0x2cca4835e18337e42c2ce8f330f9b6e092902486cca2050460087651f1c28947", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8ab", - "s": "0x4300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf9072af9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa056c98fb45185e3ff3abb34538d6cfae09eecb72fa637ceb8711046fba724d693a01ebe5245285b870fc6fe65a4d2abe5505e258744b278320b3da11ec04dfe4312a0c82ea3aed32f99d57c62cf4a61ebeddd2c4ad1036832fe87980fa1618885794ab9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008301a1100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f90402f901fd8007830f42409400000000219ab540356cbb839cbe05303d7705fa87038d7e692bb600b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011050dacbd9d78a9f0f096ca5067699a6bd87cdec624729493294f6819fbf72af1d000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02153b02aa61f4f5e55fae4ce1a797147e18843385b025e70e81d0e228b2173b9a02cca4835e18337e42c2ce8f330f9b6e092902486cca2050460087651f1c28947f901ff0107830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8aba04300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0x90841e61050efeb01eba54c86083bef86a72491262885789107a3e8e52d24476", - "sealEngine": "NoProof", - "_info": { - "hash": "0xb4edc2e6ba43ab847ba1aa2b77711e2851b5d167129b44dcb2867dde5fb501f7", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_reverts]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x01bc16d674ec800000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x02", - "balance": "0xabbcd4ef3775749890", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x56c98fb45185e3ff3abb34538d6cfae09eecb72fa637ceb8711046fba724d693", - "transactionsTrie": "0xaf65f2d4d731a80adae207f31956de025f71fabdf2be177d36676ac10c4a4526", - "receiptTrie": "0xc8d01292bbdb04ea17fb308a07f1ed3f6a3d6a7843e893effe15367cbcd37031", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x01a110", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", - "hash": "0x3c553aad964a228089d3ec79937c90489136dbf0399b175f77ec4632b85176a2" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", - "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x038d7e692bb600", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011050dacbd9d78a9f0f096ca5067699a6bd87cdec624729493294f6819fbf72af1d0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xfd868d6bf9f187bbf5549b37b08cdfd1e3fb0d5fb784a40841711580379270e4", - "s": "0x5e8cafdc55d4f56947a79fbaee4f25b086cb16b32e1ff3c49de23b36248968a1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf9072af9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa056c98fb45185e3ff3abb34538d6cfae09eecb72fa637ceb8711046fba724d693a0af65f2d4d731a80adae207f31956de025f71fabdf2be177d36676ac10c4a4526a0c8d01292bbdb04ea17fb308a07f1ed3f6a3d6a7843e893effe15367cbcd37031b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008301a1100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f90402f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901fd0107830f42409400000000219ab540356cbb839cbe05303d7705fa87038d7e692bb600b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011050dacbd9d78a9f0f096ca5067699a6bd87cdec624729493294f6819fbf72af1d000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0fd868d6bf9f187bbf5549b37b08cdfd1e3fb0d5fb784a40841711580379270e4a05e8cafdc55d4f56947a79fbaee4f25b086cb16b32e1ff3c49de23b36248968a1c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0x3c553aad964a228089d3ec79937c90489136dbf0399b175f77ec4632b85176a2", - "sealEngine": "NoProof", - "_info": { - "hash": "0xd2571df4769a15d985772795d16fea76121c6bf6067c6147c4fc1f587f35c1e9", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_oog]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x01bc16d674ec800000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x02", - "balance": "0xabbcd4ef37756e5463", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x00c9d36026df936c32ba9a7749ae0e64666dd3de2ed46f3f72bb43ad9d204daa", - "transactionsTrie": "0xe9b6ac5f19e90e6a68cfc57ffefd5da7037ff4d61b709631b21f2e1d1702654e", - "receiptTrie": "0xd86dfcf1df602248008020fe5fc7f40151ea660dc7e803f49a380cb132ed3a90", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x02863b", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", - "hash": "0xbc1e9f4a5eb7f8ecacb508bc88e9b8b10a7b2f08474f2191bf8cc87555117aca" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x01431d", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0xf73ecea9be326c1a956c874fc2b3b173e73ec035a166115a90c4216586d21f5b", - "s": "0x58263c228938a5f189d1b7524794d37f092125b7aa86ca6863992ff840df5929", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8ab", - "s": "0x4300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf9072cf9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa000c9d36026df936c32ba9a7749ae0e64666dd3de2ed46f3f72bb43ad9d204daaa0e9b6ac5f19e90e6a68cfc57ffefd5da7037ff4d61b709631b21f2e1d1702654ea0d86dfcf1df602248008020fe5fc7f40151ea660dc7e803f49a380cb132ed3a90b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008302863b0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f90404f901ff80078301431d9400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a0f73ecea9be326c1a956c874fc2b3b173e73ec035a166115a90c4216586d21f5ba058263c228938a5f189d1b7524794d37f092125b7aa86ca6863992ff840df5929f901ff0107830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8aba04300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0xbc1e9f4a5eb7f8ecacb508bc88e9b8b10a7b2f08474f2191bf8cc87555117aca", - "sealEngine": "NoProof", - "_info": { - "hash": "0x64707e3202bc3654685d27d04e34c0f711e15ba6d36fb12ec9487d2fd8beed2c", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_oog]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x01bc16d674ec800000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x02", - "balance": "0xabbcd4ef37756fd697", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9e87608a0f0b51c4a8860103326006c464e3231b0111cb3355c720b537616bd6", - "transactionsTrie": "0xfbb9043be1f806ad1d978f0a782c18187b568daae57bc8c467f005a41ebf63f0", - "receiptTrie": "0xd537192233df21f3aaa013942c2b536d6c5f75db3cbc2a06e09b527193da0651", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x024f0f", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", - "hash": "0x8b0f610af0b3dd7bd694a5ff94eebaa198b6e44afbb6d17ef74394ace05641b2" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", - "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x07", - "gasLimit": "0x010bf1", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5ea326e2af26bca5002830cda5ca29b01e7490596e08db6a9f3839dd3035578b", - "s": "0x71b06e5fdca96479f7706312e62ef6880a78a00348b8bea20fbae5dfe6d658ce", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf9072cf9025ea09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e87608a0f0b51c4a8860103326006c464e3231b0111cb3355c720b537616bd6a0fbb9043be1f806ad1d978f0a782c18187b568daae57bc8c467f005a41ebf63f0a0d537192233df21f3aaa013942c2b536d6c5f75db3cbc2a06e09b527193da0651b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083024f0f0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f90404f901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901ff010783010bf19400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05ea326e2af26bca5002830cda5ca29b01e7490596e08db6a9f3839dd3035578ba071b06e5fdca96479f7706312e62ef6880a78a00348b8bea20fbae5dfe6d658cec0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0x8b0f610af0b3dd7bd694a5ff94eebaa198b6e44afbb6d17ef74394ace05641b2", - "sealEngine": "NoProof", - "_info": { - "hash": "0x07590515ebefaa2a01c340956d69961124abb181225a5d1ca0a68656fbb633bd", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-send_eth_from_eoa]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5df", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac61fdc086", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f6dc274555629211ff91a223be0b9efd03a0018037b1426d182e8e031a9f5dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x9c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe1bc2f01a1bb4121a7af75b6ab289d367ae619e00e4836c52f3f884cfe8be9e7", - "transactionsTrie": "0x39e1372cf70f9e0d0684b5e087d38a557dc1abbbed95ebac6cfebb5955da666f", - "receiptTrie": "0x2c8ff3746c00ed1dfd4a6ecd228b16d470a4633d7d09b9033fcde8072824f3a0", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x5236", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x0c694c4c65c3c97f48d273b7931ed8e9138e9ed4aee79d3dc808111737338a06" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x", - "v": "0x26", - "r": "0xbfb111ecdfd08a897f2ee25ca4c46ca64033c44ea7c23eb9b36f0299e593bf2a", - "s": "0x7ae544de2e973d6df6cd7c1af1637488999b96f83e48f526ab49c1846a4cb8f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [], - "rlp": "0xf902d0f9025da09c4903efebca496293db2eda57c20a104bdd32a0f0a8b768f6af75efcea556e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e1bc2f01a1bb4121a7af75b6ab289d367ae619e00e4836c52f3f884cfe8be9e7a039e1372cf70f9e0d0684b5e087d38a557dc1abbbed95ebac6cfebb5955da666fa02c8ff3746c00ed1dfd4a6ecd228b16d470a4633d7d09b9033fcde8072824f3a0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252360c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86bf8698007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec8000008026a0bfb111ecdfd08a897f2ee25ca4c46ca64033c44ea7c23eb9b36f0299e593bf2aa07ae544de2e973d6df6cd7c1af1637488999b96f83e48f526ab49c1846a4cb8f0c0c0c0", - "blocknumber": "1" - } - ], - "lastblockhash": "0x0c694c4c65c3c97f48d273b7931ed8e9138e9ed4aee79d3dc808111737338a06", - "sealEngine": "NoProof", - "_info": { - "hash": "0x4a27bfc45f706228ac29f188781a414d10bfb3e9f3d1ac46e34e47fa586bac29", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbabe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xabbcd4ef3775800000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x01bc16d674ec800000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac61f628d2", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0babe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x533b638d6e9ef6a4b477ac873886de573a503f7cf62b493d11a5e22277625ae7", - "transactionsTrie": "0x302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6", - "receiptTrie": "0x205016b809d87a4d5cf38435c64419adf2bef7b1abf2d67a0ae1dc105cc04619", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x0167e2", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", - "hash": "0xaf1ce2e109e2301af86cd3f3498d2ab87ce51d27762e4f7e92c06ec747d4a09b" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", - "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf90521f9025ea03cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0533b638d6e9ef6a4b477ac873886de573a503f7cf62b493d11a5e22277625ae7a0302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6a0205016b809d87a4d5cf38435c64419adf2bef7b1abf2d67a0ae1dc105cc04619b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830167e20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f901f9f901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ec0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0xaf1ce2e109e2301af86cd3f3498d2ab87ce51d27762e4f7e92c06ec747d4a09b", - "sealEngine": "NoProof", - "_info": { - "hash": "0x557402cbf7aa45f82942361982e036097a3a61c1ee2080e536322f6791517622", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x76b380f6d83bc4013efa88d1a4ce29c9804ede3c14b67f8eff5701f710e9bf89", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x9109772be4a327d4b0fc4f7f754683a1aea5de4290e20e979ab4f329ff3bee7b" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xabaef43883ce1c0000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x01c9f78d2893e40000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x01": "0x3a968154458dd8e8f2552c48a438fca9f2292e75ae22c4852c0926f58cef116c", - "0x20": "0x02", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac61f1116d", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a076b380f6d83bc4013efa88d1a4ce29c9804ede3c14b67f8eff5701f710e9bf89a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x9109772be4a327d4b0fc4f7f754683a1aea5de4290e20e979ab4f329ff3bee7b", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x907567fb5e9fff9ed0d9a116e1749e0d6e62052445a25cdf8c1cc411459691e4", - "transactionsTrie": "0x9b91299bab917b6d03f75b8c163cfc91944f39b8ddabc606fd27b4602bdbeeb5", - "receiptTrie": "0xa6755caa8220d259543dac387041bf8ed79256747e461c2417cf4ec0f52229c6", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x022215", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0xb6f79c3a538bbfae7908cc60b490cffb950738ba1ee358b457321c930010fc3e", - "hash": "0xeea5d13534f4d682df4d68301d294fd3b933cd5ab5659a9e09b548e980acaab7" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x62a36ac5c520eb0d7228531756de393ca5868292b58fbb5c1b44d54a70a44181", - "s": "0x4ee4de764a47ba34a2ae5fcd3d33e59ad3ee0ff3bde8732136ea3fb6bf1c7ff7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01" - } - ], - "rlp": "0xf90775f9025ea09109772be4a327d4b0fc4f7f754683a1aea5de4290e20e979ab4f329ff3bee7ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0907567fb5e9fff9ed0d9a116e1749e0d6e62052445a25cdf8c1cc411459691e4a09b91299bab917b6d03f75b8c163cfc91944f39b8ddabc606fd27b4602bdbeeb5a0a6755caa8220d259543dac387041bf8ed79256747e461c2417cf4ec0f52229c6b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830222150c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0b6f79c3a538bbfae7908cc60b490cffb950738ba1ee358b457321c930010fc3ef9038df9038a8007830f424094000000000000000000000000000000000000020080b9032822895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a062a36ac5c520eb0d7228531756de393ca5868292b58fbb5c1b44d54a70a44181a04ee4de764a47ba34a2ae5fcd3d33e59ad3ee0ff3bde8732136ea3fb6bf1c7ff7c0c0f9017fb8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301", - "blocknumber": "1" - } - ], - "lastblockhash": "0xeea5d13534f4d682df4d68301d294fd3b933cd5ab5659a9e09b548e980acaab7", - "sealEngine": "NoProof", - "_info": { - "hash": "0x10d743461e01ccccc9f207469340e207648da8411d363b2c768ea9eb17b9cea6", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_first_reverts]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x999fad76b129e7d51069ef92df397027b4ad846d60519921aeeec48a9024f790", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xee46510fa733945f21ec23098c97b12a3e591e5959431fcb1f29c7c7b6b5fe21" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x6101946000600037600060006101946000670de0b6b36bc936006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad6b0b0ef8ba9c0000", - "code": "0x6101946000600037600060006101946000670de0b6b36bc936006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x0de0b6b3a7640000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x46b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac61f5197d", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0999fad76b129e7d51069ef92df397027b4ad846d60519921aeeec48a9024f790a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0xee46510fa733945f21ec23098c97b12a3e591e5959431fcb1f29c7c7b6b5fe21", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x73f2701e4d39346e501fb48f32dc94ddb4e1f7c96d9567b0d4697ed3dfa530fb", - "transactionsTrie": "0x82da41971cdd334acbae330f507abee7795f58ead6da0f2d254545eba9d51240", - "receiptTrie": "0xf17272aaae851f50bed0363f377a1a72faf85791d5cede6cde4475350e1dedad", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x018ea5", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x64e4ae3d3f1934be8def3c80e2066f2bcfb8954f0ce18022fd6c817583279c08", - "hash": "0x5557e3c6ae0a31a5f9d01deee55e7e616bd9f10b95739adc16316bd7832d9c92" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011053826ae596a0805ec6b8f0a4de97dc32adea791e2437083e662caa166f6edc1b000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x8188f80358ff1a4bc78dce45b8529211b7335fbbdf467e58bc9a0b01ab88ce49", - "s": "0x3744154693a1c4cd56c0c9ed05216e3cad834e3462fe4876f4b1237290f8218a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf906b4f9025ea0ee46510fa733945f21ec23098c97b12a3e591e5959431fcb1f29c7c7b6b5fe21a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa073f2701e4d39346e501fb48f32dc94ddb4e1f7c96d9567b0d4697ed3dfa530fba082da41971cdd334acbae330f507abee7795f58ead6da0f2d254545eba9d51240a0f17272aaae851f50bed0363f377a1a72faf85791d5cede6cde4475350e1dedadb9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083018ea50c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a064e4ae3d3f1934be8def3c80e2066f2bcfb8954f0ce18022fd6c817583279c08f9038df9038a8007830f424094000000000000000000000000000000000000020080b9032822895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011053826ae596a0805ec6b8f0a4de97dc32adea791e2437083e662caa166f6edc1b000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a08188f80358ff1a4bc78dce45b8529211b7335fbbdf467e58bc9a0b01ab88ce49a03744154693a1c4cd56c0c9ed05216e3cad834e3462fe4876f4b1237290f8218ac0c0f8bfb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0x5557e3c6ae0a31a5f9d01deee55e7e616bd9f10b95739adc16316bd7832d9c92", - "sealEngine": "NoProof", - "_info": { - "hash": "0xb354a27cb17b7d0c677adb8f628753a02f5a2810758342e2b6dedd433b419bac", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_last_reverts]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x37963e5c5cd0f74d513991625dd55b2311981a902dbccf22f0ad09bc09f2bc3d", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x5a6224ce9ded0ac504a817bda1c748affe312d62bee7ad4cf2aeafc5db56fef8" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x6101946000600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b36bc936006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad6b0b0ef8ba9c0000", - "code": "0x6101946000600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b36bc936006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x0de0b6b3a7640000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x46b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac61f5197d", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a037963e5c5cd0f74d513991625dd55b2311981a902dbccf22f0ad09bc09f2bc3da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x5a6224ce9ded0ac504a817bda1c748affe312d62bee7ad4cf2aeafc5db56fef8", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x958b62b7d72784f8ec0b92c7cdac08ef7292b9d89456dcf21e78037141ef212b", - "transactionsTrie": "0xb9e988dc4d0b7ab5a0a74b5b3b211e8bad1d3c5d4e9abdfff7a5f8c57cdb7e98", - "receiptTrie": "0xf17272aaae851f50bed0363f377a1a72faf85791d5cede6cde4475350e1dedad", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x018ea5", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x64e4ae3d3f1934be8def3c80e2066f2bcfb8954f0ce18022fd6c817583279c08", - "hash": "0x49e71c3003ec932d9e474967a49b06b14d627c01fdb96da823cfedf7d9545673" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011053826ae596a0805ec6b8f0a4de97dc32adea791e2437083e662caa166f6edc1b0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x2dea5995a1b5331ee5166c5234d9cd3d04516de5db32c1247fc816908e6dd4ed", - "s": "0x473ebc91b18bae95feaf09ef0cf8f02bb3900433e51011e610ff0119f8631bd7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x3b9aca00", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf906b4f9025ea05a6224ce9ded0ac504a817bda1c748affe312d62bee7ad4cf2aeafc5db56fef8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0958b62b7d72784f8ec0b92c7cdac08ef7292b9d89456dcf21e78037141ef212ba0b9e988dc4d0b7ab5a0a74b5b3b211e8bad1d3c5d4e9abdfff7a5f8c57cdb7e98a0f17272aaae851f50bed0363f377a1a72faf85791d5cede6cde4475350e1dedadb9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083018ea50c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a064e4ae3d3f1934be8def3c80e2066f2bcfb8954f0ce18022fd6c817583279c08f9038df9038a8007830f424094000000000000000000000000000000000000020080b9032822895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011053826ae596a0805ec6b8f0a4de97dc32adea791e2437083e662caa166f6edc1b000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a02dea5995a1b5331ee5166c5234d9cd3d04516de5db32c1247fc816908e6dd4eda0473ebc91b18bae95feaf09ef0cf8f02bb3900433e51011e610ff0119f8631bd7c0c0f8bfb8bd00f8bab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002843b9aca00b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0x49e71c3003ec932d9e474967a49b06b14d627c01fdb96da823cfedf7d9545673", - "sealEngine": "NoProof", - "_info": { - "hash": "0x2c088003448475d27b6ed283ca757d0763a07916deb9c05b36a284443cf76b24", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract_caller_reverts]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6ab4970026ca18c2db52a6441d754c6530263267a5f96f13ef61916451290762", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xbba838427632c0a988954007c4420975c7a836df15bad2a4cf1c72e26b647ba9" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af15060006000fd", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150610194610194600037600060006101946000670de0b6b3a76400006f219ab540356cbb839cbe05303d7705fa5af15060006000fd", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac61f11143", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ab4970026ca18c2db52a6441d754c6530263267a5f96f13ef61916451290762a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0xbba838427632c0a988954007c4420975c7a836df15bad2a4cf1c72e26b647ba9", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcfd886611c30ad2c89cfaa7b2a6d11bbd08cb5287f28a2b17cc4432a453670f7", - "transactionsTrie": "0x9b91299bab917b6d03f75b8c163cfc91944f39b8ddabc606fd27b4602bdbeeb5", - "receiptTrie": "0x21cdaa45c33cf93bc4fd1e7045676fd58056183537ba1243bcd7ad1d6472faf8", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x02221b", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xf218fb9dd77a0088aab41046dc7925b954da20d795e274cbceb0ec5b356bc200" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f90000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x62a36ac5c520eb0d7228531756de393ca5868292b58fbb5c1b44d54a70a44181", - "s": "0x4ee4de764a47ba34a2ae5fcd3d33e59ad3ee0ff3bde8732136ea3fb6bf1c7ff7", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [], - "rlp": "0xf905f4f9025ea0bba838427632c0a988954007c4420975c7a836df15bad2a4cf1c72e26b647ba9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cfd886611c30ad2c89cfaa7b2a6d11bbd08cb5287f28a2b17cc4432a453670f7a09b91299bab917b6d03f75b8c163cfc91944f39b8ddabc606fd27b4602bdbeeb5a021cdaa45c33cf93bc4fd1e7045676fd58056183537ba1243bcd7ad1d6472faf8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008302221b0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9038df9038a8007830f424094000000000000000000000000000000000000020080b9032822895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011046b05f79fc25b1e7a4cc63e747a3294e26329578d4c8f74cda8d29ec09f536f9000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a062a36ac5c520eb0d7228531756de393ca5868292b58fbb5c1b44d54a70a44181a04ee4de764a47ba34a2ae5fcd3d33e59ad3ee0ff3bde8732136ea3fb6bf1c7ff7c0c0c0", - "blocknumber": "1" - } - ], - "lastblockhash": "0xf218fb9dd77a0088aab41046dc7925b954da20d795e274cbceb0ec5b356bc200", - "sealEngine": "NoProof", - "_info": { - "hash": "0x38f936eb2ce2ec0605ae2942dca1072cb79da049206aa58b52a0b0732fe92cc0", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_single_deposit_from_eoa]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbabe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xabbcd4ef3775800000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x03782dace9d9000000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", - "0x20": "0x02", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x02", - "balance": "0xabbcd4ef37756ed534", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0babe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9b199228312510cfacf934f232793a95bcf8033d8d781abd0a6fa4c2728439bc", - "transactionsTrie": "0x79fc5803680c7fefb38b53299280848f14c8a370c1326d789e54dee51d21fca3", - "receiptTrie": "0x2389410d6da5588bfca9d515b397c44d55a444057331dbab156f453ba791bcc3", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x0273d4", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0xfba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29", - "hash": "0x07f457eb1e9945427d805f2bf0a84a588a54ee62eaf3b3a2de3c774b12fb74b8" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", - "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8ab", - "s": "0x4300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01" - } - ], - "rlp": "0xf907e4f9025ea03cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09b199228312510cfacf934f232793a95bcf8033d8d781abd0a6fa4c2728439bca079fc5803680c7fefb38b53299280848f14c8a370c1326d789e54dee51d21fca3a02389410d6da5588bfca9d515b397c44d55a444057331dbab156f453ba791bcc3b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830273d40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0fba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29f903fbf901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ef901ff0107830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8aba04300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855c0c0f90180b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301", - "blocknumber": "1" - } - ], - "lastblockhash": "0x07f457eb1e9945427d805f2bf0a84a588a54ee62eaf3b3a2de3c774b12fb74b8", - "sealEngine": "NoProof", - "_info": { - "hash": "0x94c26151e0cd40ccd8ee24ef173fc6e5501c1503dd425ab2aea80206f6b90b28", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_single_deposit_from_contract]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbabe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xabbcd4ef3775800000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x03782dace9d9000000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", - "0x20": "0x02", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x02", - "balance": "0xabbcd4ef37756ed534", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0babe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9b199228312510cfacf934f232793a95bcf8033d8d781abd0a6fa4c2728439bc", - "transactionsTrie": "0x559bc1f447286fbc2c9d444975f69fd4e2e811b81065b7c2729c867010484883", - "receiptTrie": "0x709ff470d8abd16a7c36cf42fdd620e84b70cddcbb21a519ae8f3b8173dc2128", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x0273d4", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0xfba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29", - "hash": "0xba8e98a070716ca39d126e461b8fccd33e85ed832031c10fc7e0ced4a572fa8c" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", - "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0a850a008373fdab91dc4cc54c2f35cf95fc1e2e20843b7cebba3951eab1e8a1", - "s": "0x61ef31836e7be7e8262df7ad2d129349fb940c57baf860705991f98f0a1663c8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01" - } - ], - "rlp": "0xf907e4f9025ea03cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09b199228312510cfacf934f232793a95bcf8033d8d781abd0a6fa4c2728439bca0559bc1f447286fbc2c9d444975f69fd4e2e811b81065b7c2729c867010484883a0709ff470d8abd16a7c36cf42fdd620e84b70cddcbb21a519ae8f3b8173dc2128b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830273d40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0fba41d6600776bec2258a06e4bc00a34f7a2a1bc0aa802976d038ef4e3379d29f903fbf901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901f60107830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00a850a008373fdab91dc4cc54c2f35cf95fc1e2e20843b7cebba3951eab1e8a1a061ef31836e7be7e8262df7ad2d129349fb940c57baf860705991f98f0a1663c8c0c0f90180b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301", - "blocknumber": "1" - } - ], - "lastblockhash": "0xba8e98a070716ca39d126e461b8fccd33e85ed832031c10fc7e0ced4a572fa8c", - "sealEngine": "NoProof", - "_info": { - "hash": "0x9f1a55f4633849e4f3c3f585c1c67df56b866c855ad8ce5c6fe2d72a900eedcb", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_between_eoa_deposits]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbabe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xabbcd4ef3775800000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x053444835ec5800000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", - "0x20": "0x03", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x03", - "balance": "0xaa00be18c288e9f31a", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0babe7bb8ba02cf0d9be3ab436da00fbdf8d2f15e0d223aea4acf6baa94583753a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x3cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x74f289c7fd81ac35fc5ffb5db3ffbf6608dd54d28e639b1662ab670110df6d5c", - "transactionsTrie": "0xc307333061d40ec0137ec938c89122643ec88e6ca28fd3cca677f5a5372e6059", - "receiptTrie": "0x07881abbf8c8bb3545de68ead33df0ae428c848849ae96cc5ef8752d3edc9d6d", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x03266a", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0xe9d994e854499fd3fa4b6a94f37f77f1d50fd385b09470f875bedabb3ccc3d1f", - "hash": "0xce8509e9a42a7eb48b60d102432cfadf799c0301a6dfa1d8b8bd978395a418a5" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575", - "s": "0x3d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x0a850a008373fdab91dc4cc54c2f35cf95fc1e2e20843b7cebba3951eab1e8a1", - "s": "0x61ef31836e7be7e8262df7ad2d129349fb940c57baf860705991f98f0a1663c8", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x733ad6925a6ca48ea48a185ee58523d418d9d73d3cbfaf53c4414ed59af8c4e9", - "s": "0x31efec56c003f247a95d310150edfb0d165193990e8f923291b77f7704f095cc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02" - } - ], - "rlp": "0xf90aa6f9025ea03cb163b1d1785ec55203e8424c988682af414d79c8abef1c28962ae7d02e9c17a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa074f289c7fd81ac35fc5ffb5db3ffbf6608dd54d28e639b1662ab670110df6d5ca0c307333061d40ec0137ec938c89122643ec88e6ca28fd3cca677f5a5372e6059a007881abbf8c8bb3545de68ead33df0ae428c848849ae96cc5ef8752d3edc9d6db9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a00008303266a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0e9d994e854499fd3fa4b6a94f37f77f1d50fd385b09470f875bedabb3ccc3d1ff905fdf901ff8007830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0ffeb1d6e7ef8e9ee9b64dcdc3b056f9a1d2b94c1572f1949954e712364604575a03d0f42bad795205de84db8d4ab10b9abd0d081ffe560cbf45f6c281768112a69f901f60107830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a00a850a008373fdab91dc4cc54c2f35cf95fc1e2e20843b7cebba3951eab1e8a1a061ef31836e7be7e8262df7ad2d129349fb940c57baf860705991f98f0a1663c8f901ff0207830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0733ad6925a6ca48ea48a185ee58523d418d9d73d3cbfaf53c4414ed59af8c4e9a031efec56c003f247a95d310150edfb0d165193990e8f923291b77f7704f095ccc0c0f90240b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302", - "blocknumber": "1" - } - ], - "lastblockhash": "0xce8509e9a42a7eb48b60d102432cfadf799c0301a6dfa1d8b8bd978395a418a5", - "sealEngine": "NoProof", - "_info": { - "hash": "0x6f53bde186c01580f2149135986895f3b10cfbf1fd357833adf5bcde6e8bf5ca", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_between_contract_deposits]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x76a2e98018880a8d1a6bc36e50f42d9d690c527e3a11f4cf8aa654f787dd7790", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x40892bc6d47af1c57be3fdc6063a9a516d90b3cef90e3b7ca6da702ecbd6af13" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000300": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xabbcd4ef3775800000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000300": { - "nonce": "0x01", - "balance": "0xabbcd4ef3775800000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x053444835ec5800000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x01": "0x2f93f18b1befc457f659e486ce25bbe413fe3943ee7634d2afbe83dc512c3d7a", - "0x20": "0x03", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x03", - "balance": "0xabbcd4ef377568f1be", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a076a2e98018880a8d1a6bc36e50f42d9d690c527e3a11f4cf8aa654f787dd7790a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x40892bc6d47af1c57be3fdc6063a9a516d90b3cef90e3b7ca6da702ecbd6af13", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x98899f3ddae833dbb269ca979e5b523a61c66db7f93fb6b65588d13523d16bfc", - "transactionsTrie": "0x2e977fb428dbca7409c408d5e7269f9f4cd621b5cbe63dc06bebc92eedae4f45", - "receiptTrie": "0xab7cdf98405009ebc7cad14698bdfdf2275f13a59cd38a9b1d2d641cc2e90fd6", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x034b2e", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0xe9d994e854499fd3fa4b6a94f37f77f1d50fd385b09470f875bedabb3ccc3d1f", - "hash": "0x724b96fc1df1a0699be602f35048bdf8977bd34c1d770312a2f0495e9dc3c856" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", - "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x00000000219ab540356cbb839cbe05303d7705fa", - "value": "0x01bc16d674ec800000", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x5bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8ab", - "s": "0x4300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000300", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xbd624e9ff95747d7a41794070acaf04a8c8662a2b695aefb1833e20b7443d7e5", - "s": "0x7c60672fcd14981370b23062f146728fbb3715a959f357958685768c3a456019", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x01" - }, - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x02" - } - ], - "rlp": "0xf90a9df9025ea040892bc6d47af1c57be3fdc6063a9a516d90b3cef90e3b7ca6da702ecbd6af13a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098899f3ddae833dbb269ca979e5b523a61c66db7f93fb6b65588d13523d16bfca02e977fb428dbca7409c408d5e7269f9f4cd621b5cbe63dc06bebc92eedae4f45a0ab7cdf98405009ebc7cad14698bdfdf2275f13a59cd38a9b1d2d641cc2e90fd6b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a000083034b2e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0e9d994e854499fd3fa4b6a94f37f77f1d50fd385b09470f875bedabb3ccc3d1ff905f4f901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ef901ff0107830f42409400000000219ab540356cbb839cbe05303d7705fa8901bc16d674ec800000b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a05bb08e348c9c4b0a2e15d04f4a89d1a210d013205de8d3d93e38e5c1b0c8d8aba04300c0f575d9908d2cbc3413ab82895678bb8f3ef356224dd1e7cb972f2c4855f901f60207830f424094000000000000000000000000000000000000030080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0bd624e9ff95747d7a41794070acaf04a8c8662a2b695aefb1833e20b7443d7e5a07c60672fcd14981370b23062f146728fbb3715a959f357958685768c3a456019c0c0f90240b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000301b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302", - "blocknumber": "1" - } - ], - "lastblockhash": "0x724b96fc1df1a0699be602f35048bdf8977bd34c1d770312a2f0495e9dc3c856", - "sealEngine": "NoProof", - "_info": { - "hash": "0x0a1a4c3d47f37c2b569f475d03e61e6e2bf090306cbdc38c38b7dda2b9383d2e", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_delegatecall]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x456b5f953201b135253a2acb455eb873706423abceb0061b75f471084165055c", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x2a57e20b8638b22f85c5700bb7fc1c7ad2c5c55047111be60510fdeab49c90b1" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006f219ab540356cbb839cbe05303d7705fa5af450", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006f219ab540356cbb839cbe05303d7705fa5af450", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac61fd244f", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0456b5f953201b135253a2acb455eb873706423abceb0061b75f471084165055ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x2a57e20b8638b22f85c5700bb7fc1c7ad2c5c55047111be60510fdeab49c90b1", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9b0c41f8c1e35996ef078dcf205b4e973dd840ca75cb761b37f44757e89409b2", - "transactionsTrie": "0x302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6", - "receiptTrie": "0xfd3f0fd297d0041e89f18bbd0af74b8dcf857f06832e393c3320ac72fca3e275", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x6887", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x56925d63d598aae896cd85d4acf5fa18fbffbf00636a2acaae1d4dc21d937a76" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", - "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [], - "rlp": "0xf9045ff9025da02a57e20b8638b22f85c5700bb7fc1c7ad2c5c55047111be60510fdeab49c90b1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09b0c41f8c1e35996ef078dcf205b4e973dd840ca75cb761b37f44757e89409b2a0302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6a0fd3f0fd297d0041e89f18bbd0af74b8dcf857f06832e393c3320ac72fca3e275b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008268870c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f901f9f901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ec0c0c0", - "blocknumber": "1" - } - ], - "lastblockhash": "0x56925d63d598aae896cd85d4acf5fa18fbffbf00636a2acaae1d4dc21d937a76", - "sealEngine": "NoProof", - "_info": { - "hash": "0x08c4061211e745ec18529e748e11b155752feb8a713c93ece5c7a079b695107a", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_staticcall]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x27102520020adaaf699985a76ae3091f37e61aa5063298e326beee421d87fc90", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x6c1169af5b86c18ea0443c31bc457db845f21c08bf1eaf9a3ed7048e6051dc4f" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006f219ab540356cbb839cbe05303d7705fa5afa50", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006f219ab540356cbb839cbe05303d7705fa5afa50", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac61fd244f", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a027102520020adaaf699985a76ae3091f37e61aa5063298e326beee421d87fc90a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x6c1169af5b86c18ea0443c31bc457db845f21c08bf1eaf9a3ed7048e6051dc4f", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x8347a5d7a6d7a6ecf05dc8a624a56672161ab7ea07a7eb2ea0d7d97cd71b8df1", - "transactionsTrie": "0x302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6", - "receiptTrie": "0xfd3f0fd297d0041e89f18bbd0af74b8dcf857f06832e393c3320ac72fca3e275", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x6887", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x91dfc5f2a9f44c28975dfdc2f353178e6df79dfa838601b97dab494e880bb200" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", - "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [], - "rlp": "0xf9045ff9025da06c1169af5b86c18ea0443c31bc457db845f21c08bf1eaf9a3ed7048e6051dc4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08347a5d7a6d7a6ecf05dc8a624a56672161ab7ea07a7eb2ea0d7d97cd71b8df1a0302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6a0fd3f0fd297d0041e89f18bbd0af74b8dcf857f06832e393c3320ac72fca3e275b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008268870c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f901f9f901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ec0c0c0", - "blocknumber": "1" - } - ], - "lastblockhash": "0x91dfc5f2a9f44c28975dfdc2f353178e6df79dfa838601b97dab494e880bb200", - "sealEngine": "NoProof", - "_info": { - "hash": "0x1b3ae61ee053aff0e7e3c2766ac05cf4a1900af8f2f7b36f031ba595144ae054", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_callcode]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd4f0de4324af40dc5a5515bfe4090da87996052c229a19f3d91270b801925f7b", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x266e9196df3df3c7d12e4dded9c0789a267f814cc7a798110c1c704ec1136311" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af250", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af250", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x20": "0x01" - } - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac61f628d2", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d4f0de4324af40dc5a5515bfe4090da87996052c229a19f3d91270b801925f7ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x266e9196df3df3c7d12e4dded9c0789a267f814cc7a798110c1c704ec1136311", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf2dcc06113e2a781bfe7d67dd85e1a93b2415e4140958f7512c2b9a7d1cb04cc", - "transactionsTrie": "0x302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6", - "receiptTrie": "0x246d2ee9836ddb0f7d15f8358c33d0939ff490cb49d4bae41cb8bf125a400581", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000080000000000000000000000008000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x0167e2", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xf8efa0254336afd219ff83c01cd67bfee8c139428258f6e9599c8672373278bd" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000200", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0x6c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78", - "s": "0x26666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7e", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [], - "rlp": "0xf90460f9025ea0266e9196df3df3c7d12e4dded9c0789a267f814cc7a798110c1c704ec1136311a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2dcc06113e2a781bfe7d67dd85e1a93b2415e4140958f7512c2b9a7d1cb04cca0302325978b7f03220cb628f01531f9668aec3c0599ee93fffe85e2cf25ae12c6a0246d2ee9836ddb0f7d15f8358c33d0939ff490cb49d4bae41cb8bf125a400581b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000080000000000000000000000008000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830167e20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f901f9f901f68007830f424094000000000000000000000000000000000000020080b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a06c1a9354372a17a9a5df93ecf5c7b480d549307d05acbe2a050200669fb60c78a026666d6f9678d9474b994330248719485291ade2cae4ea9570843bb300d9bd7ec0c0c0", - "blocknumber": "1" - } - ], - "lastblockhash": "0xf8efa0254336afd219ff83c01cd67bfee8c139428258f6e9599c8672373278bd", - "sealEngine": "NoProof", - "_info": { - "hash": "0x54cff4abe0f4ab10248e0f306c11910e41a530060ae381deac402ed33483948e", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_call_depth_3]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf5599c089c5bbf3a0d9d68a397907bf365b2e8f1f5430e9c4c60d1c4e553cee6", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x3cdc793a479660ad7f18cc316d4946c4f62e005d26e210ae37e0eab975304836" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000201": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102005af150", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xabbcd4ef3775800000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000201": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102005af150", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x01bc16d674ec800000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac61f5deb8", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0f5599c089c5bbf3a0d9d68a397907bf365b2e8f1f5430e9c4c60d1c4e553cee6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0x3cdc793a479660ad7f18cc316d4946c4f62e005d26e210ae37e0eab975304836", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd220bd36e89484c97d6b37bbe283298590c9b9a05ab071d86f8d50b9c14d9f46", - "transactionsTrie": "0xa571917db15626d8bc5a10b3edcd4a5ce2ac32dc973cb34cfa1027acedbf2379", - "receiptTrie": "0x2dcdeb6cdb8d9670ec16929614d39271aaba206a62818bf3034a0e4a19f3c778", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x017278", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", - "hash": "0x9c42f0884101f094d8e8b65abcf08a57306b7950cd7dff5c3acb1b9b030a06c8" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000201", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x25", - "r": "0xe9784a3c6b7bc731af30faac5c279958e269c72a91ce406a74a9953ca955771b", - "s": "0x5a8bf050a0b155f14d2cb4fe26457783e2cc04b0a149976b44f22ca6c22f7b53", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf90521f9025ea03cdc793a479660ad7f18cc316d4946c4f62e005d26e210ae37e0eab975304836a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d220bd36e89484c97d6b37bbe283298590c9b9a05ab071d86f8d50b9c14d9f46a0a571917db15626d8bc5a10b3edcd4a5ce2ac32dc973cb34cfa1027acedbf2379a02dcdeb6cdb8d9670ec16929614d39271aaba206a62818bf3034a0e4a19f3c778b9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000830172780c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f901f9f901f68007830f424094000000000000000000000000000000000000020180b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000325a0e9784a3c6b7bc731af30faac5c279958e269c72a91ce406a74a9953ca955771ba05a8bf050a0b155f14d2cb4fe26457783e2cc04b0a149976b44f22ca6c22f7b53c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0x9c42f0884101f094d8e8b65abcf08a57306b7950cd7dff5c3acb1b9b030a06c8", - "sealEngine": "NoProof", - "_info": { - "hash": "0x7267d5d0298a839c178493f4f51e6193f17e0d6bc7288a121f3fbb24c4e1bf54", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - }, - "tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_call_high_depth]": { - "network": "Prague", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8f8a5ff479e425495fc6eac413e9db3378694c7611bbc6b1e47e8980ed3434df", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xb758f56efac696f1516f4858c182638796cb23f858bda02b0150550357a57d4c" - }, - "pre": { - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0xad78ebc5ac62000000", - "code": "0x", - "storage": {} - }, - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000201": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102005af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000202": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102015af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000203": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102025af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000204": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102035af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000205": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102045af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000206": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102055af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000207": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102065af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000208": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102075af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000209": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102085af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102095af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000210": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000211": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102105af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000212": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102115af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000213": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102125af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000214": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102135af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000215": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102145af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000216": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102155af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000217": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102165af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000218": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102175af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000219": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102185af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102195af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000220": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000221": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102205af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000222": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102215af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000223": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102225af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000224": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102235af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000225": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102245af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000226": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102255af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000227": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102265af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000228": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102275af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000229": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102285af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102295af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000230": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000231": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102305af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000232": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102315af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000233": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102325af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000234": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102335af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000235": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102345af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000236": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102355af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000237": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102365af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000238": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102375af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000239": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102385af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102395af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000240": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000241": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102405af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000242": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102415af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000243": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102425af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000244": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102435af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000245": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102445af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000246": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102455af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000247": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102465af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000248": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102475af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000249": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102485af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102495af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000250": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000251": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102505af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000252": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102515af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000253": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102525af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000254": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102535af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000255": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102545af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000256": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102555af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000257": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102565af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000258": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102575af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000259": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102585af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102595af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000260": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000261": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102605af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000262": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102615af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000263": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102625af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000264": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102635af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000265": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102645af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000266": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102655af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000267": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102665af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000268": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102675af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000269": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102685af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102695af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000270": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000271": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102705af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000272": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102715af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000273": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102725af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000274": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102735af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000275": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102745af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000276": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102755af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000277": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102765af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000278": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102775af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000279": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102785af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102795af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000280": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000281": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102805af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000282": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102815af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000283": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102825af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000284": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102835af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000285": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102845af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000286": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102855af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000287": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102865af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000288": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102875af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000289": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102885af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102895af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000290": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000291": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102905af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000292": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102915af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000293": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102925af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000294": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102935af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000295": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102945af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000296": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102955af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000297": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102965af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000298": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102975af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000299": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102985af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102995af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029e5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029f5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002aa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ab": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102aa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ac": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ab5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ad": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ac5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ae": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ad5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002af": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ae5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102af5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ba": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002bb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ba5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002bc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102bb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002bd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102bc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002be": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102bd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002bf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102be5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102bf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ca": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002cb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ca5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002cc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102cb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002cd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102cc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ce": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102cd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002cf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ce5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102cf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002da": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002db": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102da5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002dc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102db5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002dd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102dc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002de": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102dd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002df": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102de5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102df5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ea": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002eb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ea5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ec": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102eb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ed": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ec5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ee": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ed5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ef": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ee5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ef5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002fa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002fb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102fa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002fc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102fb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002fd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102fc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002fe": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102fd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ff": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102fe5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000300": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ff5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000301": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103005af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000302": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103015af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000303": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103025af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000304": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103035af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000305": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103045af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000306": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103055af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000307": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103065af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000308": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103075af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000309": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103085af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103095af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000310": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000311": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103105af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000312": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103115af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000313": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103125af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000314": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103135af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000315": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103145af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000316": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103155af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000317": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103165af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000318": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103175af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000319": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103185af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103195af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000320": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000321": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103205af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000322": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103215af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000323": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103225af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000324": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103235af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000325": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103245af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000326": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103255af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000327": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103265af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000328": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103275af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000329": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103285af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103295af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000330": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000331": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103305af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000332": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103315af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000333": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103325af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000334": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103335af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000335": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103345af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000336": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103355af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000337": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103365af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000338": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103375af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000339": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103385af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103395af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000340": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000341": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103405af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000342": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103415af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000343": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103425af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000344": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103435af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000345": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103445af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000346": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103455af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000347": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103465af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000348": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103475af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000349": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103485af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103495af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000350": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000351": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103505af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000352": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103515af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000353": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103525af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000354": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103535af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000355": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103545af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000356": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103555af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000357": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103565af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000358": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103575af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000359": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103585af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103595af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000360": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000361": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103605af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000362": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103615af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000363": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103625af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000364": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103635af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000365": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103645af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000366": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103655af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000367": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103665af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000368": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103675af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000369": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103685af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103695af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000370": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000371": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103705af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000372": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103715af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000373": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103725af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000374": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103735af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000375": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103745af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000376": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103755af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000377": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103765af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000378": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103775af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000379": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103785af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103795af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000380": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000381": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103805af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000382": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103815af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000383": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103825af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000384": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103835af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000385": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103845af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000386": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103855af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000387": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103865af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000388": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103875af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000389": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103885af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103895af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000390": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000391": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103905af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000392": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103915af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000393": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103925af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000394": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103935af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000395": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103945af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000396": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103955af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000397": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103965af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000398": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103975af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000399": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103985af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103995af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039e5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039f5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003aa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ab": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103aa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ac": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ab5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ad": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ac5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ae": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ad5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003af": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ae5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103af5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ba": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003bb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ba5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003bc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103bb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003bd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103bc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003be": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103bd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003bf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103be5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103bf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ca": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003cb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ca5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003cc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103cb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003cd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103cc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ce": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103cd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003cf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ce5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103cf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003da": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003db": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103da5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003dc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103db5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003dd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103dc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003de": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103dd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003df": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103de5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103df5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ea": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003eb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ea5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ec": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103eb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ed": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ec5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ee": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ed5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ef": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ee5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ef5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003fa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003fb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103fa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003fc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103fb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003fd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103fc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003fe": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103fd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ff": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103fe5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000400": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ff5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000401": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104005af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000402": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104015af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000403": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104025af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000404": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104035af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000405": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104045af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000406": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104055af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000407": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104065af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000408": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104075af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000409": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104085af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104095af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000410": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000411": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104105af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000412": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104115af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000413": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104125af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000414": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104135af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000415": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104145af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000416": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104155af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000417": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104165af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000418": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104175af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000419": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104185af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104195af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000420": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000421": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104205af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000422": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104215af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000423": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104225af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000424": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104235af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000425": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104245af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000426": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104255af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000427": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104265af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000428": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104275af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000429": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104285af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104295af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000430": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000431": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104305af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000432": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104315af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000433": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104325af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000434": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104335af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000435": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104345af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000436": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104355af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000437": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104365af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000438": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104375af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000439": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104385af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104395af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000440": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000441": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104405af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000442": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104415af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000443": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104425af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000444": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104435af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000445": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104445af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000446": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104455af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000447": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104465af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000448": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104475af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000449": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104485af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104495af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000450": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000451": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104505af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000452": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104515af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000453": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104525af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000454": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104535af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000455": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104545af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000456": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104555af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000457": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104565af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000458": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104575af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000459": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104585af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104595af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000460": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000461": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104605af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000462": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104615af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000463": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104625af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000464": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104635af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000465": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104645af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000466": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104655af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000467": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104665af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000468": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104675af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000469": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104685af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104695af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000470": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000471": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104705af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000472": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104715af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000473": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104725af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000474": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104735af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000475": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104745af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000476": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104755af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000477": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104765af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000478": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104775af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000479": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104785af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104795af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000480": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000481": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104805af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000482": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104815af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000483": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104825af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000484": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104835af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000485": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104845af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000486": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104855af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000487": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104865af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000488": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104875af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000489": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104885af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104895af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000490": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000491": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104905af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000492": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104915af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000493": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104925af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000494": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104935af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000495": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104945af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000496": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104955af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000497": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104965af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000498": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104975af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000499": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104985af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104995af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049e5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049f5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004aa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ab": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104aa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ac": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ab5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ad": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ac5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ae": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ad5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004af": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ae5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104af5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ba": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004bb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ba5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004bc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104bb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004bd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104bc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004be": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104bd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004bf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104be5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104bf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ca": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004cb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ca5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004cc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104cb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004cd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104cc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ce": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104cd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004cf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ce5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104cf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004da": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004db": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104da5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004dc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104db5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004dd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104dc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004de": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104dd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004df": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104de5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104df5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ea": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004eb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ea5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ec": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104eb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ed": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ec5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ee": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ed5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ef": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ee5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ef5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004fa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004fb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104fa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004fc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104fb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004fd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104fc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004fe": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104fd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ff": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104fe5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000500": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ff5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000501": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105005af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000502": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105015af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000503": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105025af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000504": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105035af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000505": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105045af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000506": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105055af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000507": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105065af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000508": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105075af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000509": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105085af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105095af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000510": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000511": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105105af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000512": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105115af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000513": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105125af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000514": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105135af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000515": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105145af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000516": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105155af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000517": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105165af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000518": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105175af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000519": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105185af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105195af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000520": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000521": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105205af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000522": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105215af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000523": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105225af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000524": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105235af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000525": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105245af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000526": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105255af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000527": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105265af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000528": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105275af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000529": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105285af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105295af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000530": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000531": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105305af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000532": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105315af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000533": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105325af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000534": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105335af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000535": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105345af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000536": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105355af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000537": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105365af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000538": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105375af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000539": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105385af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105395af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000540": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000541": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105405af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000542": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105415af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000543": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105425af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000544": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105435af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000545": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105445af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000546": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105455af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000547": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105465af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000548": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105475af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000549": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105485af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105495af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000550": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000551": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105505af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000552": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105515af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000553": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105525af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000554": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105535af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000555": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105545af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000556": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105555af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000557": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105565af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000558": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105575af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000559": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105585af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105595af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000560": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000561": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105605af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000562": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105615af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000563": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105625af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000564": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105635af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000565": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105645af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000566": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105655af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000567": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105665af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000568": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105675af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000569": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105685af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105695af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000570": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000571": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105705af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000572": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105715af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000573": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105725af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000574": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105735af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000575": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105745af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000576": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105755af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000577": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105765af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000578": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105775af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000579": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105785af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105795af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000580": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000581": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105805af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000582": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105815af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000583": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105825af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000584": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105835af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000585": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105845af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000586": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105855af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000587": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105865af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000588": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105875af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000589": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105885af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105895af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000590": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000591": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105905af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000592": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105915af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000593": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105925af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000594": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105935af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000595": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105945af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000596": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105955af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000597": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105965af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000598": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105975af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000599": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105985af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105995af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059e5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059f5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005aa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ab": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105aa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ac": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ab5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ad": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ac5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ae": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ad5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005af": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ae5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105af5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ba": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005bb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ba5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005bc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105bb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005bd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105bc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005be": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105bd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005bf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105be5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105bf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ca": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005cb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ca5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005cc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105cb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005cd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105cc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ce": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105cd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005cf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ce5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105cf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005da": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005db": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105da5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005dc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105db5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005dd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105dc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005de": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105dd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005df": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105de5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105df5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ea": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005eb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ea5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ec": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105eb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ed": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ec5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ee": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ed5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ef": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ee5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ef5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005fa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005fb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105fa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005fc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105fb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005fd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105fc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005fe": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105fd5af150", - "storage": {} - } - }, - "postState": { - "0x0000000000000000000000000000000000000200": { - "nonce": "0x01", - "balance": "0xabbcd4ef3775800000", - "code": "0x61019460006000376000600061019460006801bc16d674ec8000006f219ab540356cbb839cbe05303d7705fa5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000201": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102005af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000202": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102015af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000203": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102025af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000204": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102035af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000205": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102045af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000206": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102055af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000207": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102065af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000208": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102075af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000209": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102085af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102095af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000020f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000210": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061020f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000211": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102105af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000212": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102115af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000213": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102125af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000214": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102135af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000215": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102145af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000216": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102155af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000217": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102165af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000218": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102175af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000219": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102185af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102195af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000021f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000220": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061021f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000221": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102205af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000222": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102215af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000223": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102225af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000224": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102235af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000225": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102245af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000226": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102255af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000227": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102265af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000228": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102275af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000229": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102285af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102295af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000022f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000230": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061022f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000231": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102305af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000232": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102315af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000233": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102325af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000234": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102335af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000235": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102345af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000236": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102355af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000237": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102365af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000238": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102375af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000239": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102385af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102395af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000023f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000240": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061023f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000241": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102405af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000242": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102415af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000243": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102425af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000244": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102435af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000245": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102445af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000246": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102455af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000247": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102465af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000248": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102475af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000249": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102485af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102495af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000024f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000250": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061024f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000251": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102505af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000252": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102515af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000253": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102525af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000254": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102535af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000255": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102545af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000256": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102555af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000257": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102565af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000258": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102575af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000259": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102585af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102595af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000025f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000260": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061025f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000261": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102605af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000262": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102615af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000263": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102625af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000264": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102635af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000265": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102645af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000266": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102655af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000267": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102665af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000268": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102675af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000269": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102685af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102695af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000026f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000270": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061026f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000271": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102705af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000272": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102715af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000273": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102725af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000274": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102735af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000275": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102745af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000276": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102755af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000277": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102765af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000278": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102775af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000279": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102785af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102795af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000027f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000280": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061027f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000281": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102805af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000282": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102815af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000283": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102825af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000284": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102835af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000285": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102845af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000286": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102855af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000287": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102865af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000288": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102875af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000289": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102885af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102895af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000028f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000290": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061028f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000291": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102905af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000292": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102915af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000293": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102925af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000294": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102935af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000295": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102945af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000296": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102955af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000297": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102965af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000298": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102975af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000299": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102985af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102995af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000029f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029e5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061029f5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002a9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002aa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102a95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ab": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102aa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ac": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ab5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ad": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ac5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ae": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ad5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002af": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ae5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102af5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002b9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ba": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102b95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002bb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ba5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002bc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102bb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002bd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102bc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002be": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102bd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002bf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102be5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102bf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002c9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ca": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102c95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002cb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ca5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002cc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102cb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002cd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102cc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ce": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102cd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002cf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ce5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102cf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002d9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002da": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102d95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002db": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102da5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002dc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102db5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002dd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102dc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002de": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102dd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002df": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102de5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102df5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002e9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ea": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102e95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002eb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ea5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ec": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102eb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ed": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ec5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ee": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ed5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ef": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ee5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ef5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002f9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002fa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102f95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002fb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102fa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002fc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102fb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002fd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102fc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002fe": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102fd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000002ff": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102fe5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000300": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006102ff5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000301": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103005af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000302": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103015af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000303": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103025af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000304": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103035af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000305": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103045af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000306": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103055af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000307": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103065af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000308": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103075af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000309": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103085af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103095af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000030f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000310": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061030f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000311": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103105af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000312": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103115af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000313": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103125af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000314": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103135af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000315": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103145af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000316": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103155af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000317": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103165af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000318": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103175af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000319": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103185af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103195af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000031f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000320": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061031f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000321": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103205af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000322": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103215af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000323": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103225af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000324": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103235af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000325": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103245af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000326": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103255af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000327": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103265af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000328": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103275af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000329": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103285af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103295af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000032f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000330": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061032f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000331": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103305af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000332": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103315af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000333": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103325af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000334": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103335af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000335": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103345af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000336": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103355af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000337": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103365af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000338": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103375af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000339": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103385af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103395af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000033f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000340": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061033f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000341": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103405af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000342": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103415af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000343": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103425af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000344": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103435af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000345": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103445af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000346": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103455af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000347": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103465af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000348": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103475af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000349": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103485af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103495af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000034f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000350": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061034f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000351": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103505af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000352": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103515af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000353": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103525af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000354": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103535af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000355": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103545af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000356": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103555af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000357": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103565af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000358": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103575af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000359": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103585af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103595af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000035f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000360": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061035f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000361": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103605af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000362": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103615af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000363": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103625af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000364": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103635af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000365": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103645af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000366": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103655af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000367": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103665af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000368": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103675af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000369": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103685af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103695af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000036f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000370": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061036f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000371": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103705af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000372": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103715af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000373": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103725af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000374": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103735af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000375": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103745af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000376": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103755af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000377": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103765af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000378": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103775af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000379": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103785af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103795af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000037f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000380": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061037f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000381": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103805af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000382": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103815af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000383": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103825af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000384": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103835af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000385": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103845af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000386": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103855af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000387": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103865af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000388": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103875af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000389": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103885af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103895af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000038f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000390": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061038f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000391": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103905af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000392": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103915af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000393": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103925af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000394": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103935af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000395": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103945af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000396": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103955af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000397": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103965af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000398": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103975af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000399": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103985af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103995af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000039f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039e5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061039f5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003a9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003aa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103a95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ab": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103aa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ac": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ab5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ad": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ac5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ae": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ad5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003af": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ae5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103af5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003b9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ba": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103b95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003bb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ba5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003bc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103bb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003bd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103bc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003be": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103bd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003bf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103be5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103bf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003c9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ca": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103c95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003cb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ca5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003cc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103cb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003cd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103cc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ce": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103cd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003cf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ce5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103cf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003d9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003da": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103d95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003db": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103da5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003dc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103db5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003dd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103dc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003de": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103dd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003df": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103de5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103df5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003e9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ea": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103e95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003eb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ea5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ec": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103eb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ed": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ec5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ee": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ed5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ef": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ee5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ef5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003f9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003fa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103f95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003fb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103fa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003fc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103fb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003fd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103fc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003fe": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103fd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000003ff": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103fe5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000400": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006103ff5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000401": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104005af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000402": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104015af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000403": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104025af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000404": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104035af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000405": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104045af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000406": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104055af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000407": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104065af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000408": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104075af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000409": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104085af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104095af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000040f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000410": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061040f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000411": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104105af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000412": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104115af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000413": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104125af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000414": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104135af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000415": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104145af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000416": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104155af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000417": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104165af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000418": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104175af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000419": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104185af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104195af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000041f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000420": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061041f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000421": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104205af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000422": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104215af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000423": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104225af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000424": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104235af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000425": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104245af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000426": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104255af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000427": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104265af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000428": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104275af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000429": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104285af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104295af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000042f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000430": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061042f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000431": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104305af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000432": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104315af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000433": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104325af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000434": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104335af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000435": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104345af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000436": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104355af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000437": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104365af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000438": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104375af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000439": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104385af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104395af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000043f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000440": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061043f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000441": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104405af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000442": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104415af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000443": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104425af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000444": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104435af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000445": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104445af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000446": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104455af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000447": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104465af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000448": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104475af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000449": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104485af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104495af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000044f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000450": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061044f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000451": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104505af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000452": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104515af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000453": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104525af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000454": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104535af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000455": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104545af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000456": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104555af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000457": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104565af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000458": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104575af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000459": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104585af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104595af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000045f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000460": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061045f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000461": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104605af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000462": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104615af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000463": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104625af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000464": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104635af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000465": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104645af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000466": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104655af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000467": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104665af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000468": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104675af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000469": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104685af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104695af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000046f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000470": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061046f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000471": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104705af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000472": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104715af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000473": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104725af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000474": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104735af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000475": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104745af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000476": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104755af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000477": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104765af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000478": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104775af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000479": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104785af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104795af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000047f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000480": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061047f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000481": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104805af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000482": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104815af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000483": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104825af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000484": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104835af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000485": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104845af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000486": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104855af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000487": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104865af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000488": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104875af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000489": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104885af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104895af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000048f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000490": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061048f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000491": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104905af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000492": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104915af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000493": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104925af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000494": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104935af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000495": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104945af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000496": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104955af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000497": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104965af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000498": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104975af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000499": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104985af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104995af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000049f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049e5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061049f5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004a9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004aa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104a95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ab": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104aa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ac": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ab5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ad": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ac5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ae": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ad5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004af": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ae5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104af5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004b9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ba": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104b95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004bb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ba5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004bc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104bb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004bd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104bc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004be": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104bd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004bf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104be5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104bf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004c9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ca": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104c95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004cb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ca5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004cc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104cb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004cd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104cc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ce": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104cd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004cf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ce5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104cf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004d9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004da": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104d95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004db": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104da5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004dc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104db5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004dd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104dc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004de": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104dd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004df": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104de5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104df5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004e9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ea": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104e95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004eb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ea5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ec": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104eb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ed": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ec5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ee": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ed5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ef": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ee5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ef5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004f9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004fa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104f95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004fb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104fa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004fc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104fb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004fd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104fc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004fe": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104fd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000004ff": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104fe5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000500": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006104ff5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000501": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105005af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000502": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105015af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000503": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105025af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000504": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105035af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000505": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105045af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000506": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105055af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000507": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105065af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000508": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105075af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000509": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105085af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105095af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000050f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000510": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061050f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000511": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105105af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000512": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105115af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000513": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105125af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000514": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105135af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000515": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105145af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000516": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105155af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000517": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105165af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000518": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105175af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000519": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105185af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105195af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000051f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000520": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061051f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000521": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105205af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000522": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105215af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000523": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105225af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000524": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105235af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000525": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105245af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000526": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105255af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000527": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105265af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000528": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105275af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000529": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105285af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105295af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000052f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000530": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061052f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000531": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105305af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000532": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105315af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000533": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105325af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000534": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105335af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000535": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105345af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000536": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105355af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000537": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105365af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000538": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105375af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000539": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105385af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105395af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000053f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000540": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061053f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000541": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105405af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000542": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105415af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000543": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105425af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000544": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105435af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000545": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105445af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000546": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105455af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000547": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105465af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000548": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105475af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000549": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105485af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105495af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000054f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000550": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061054f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000551": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105505af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000552": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105515af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000553": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105525af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000554": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105535af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000555": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105545af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000556": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105555af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000557": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105565af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000558": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105575af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000559": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105585af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105595af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000055f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000560": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061055f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000561": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105605af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000562": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105615af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000563": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105625af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000564": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105635af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000565": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105645af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000566": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105655af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000567": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105665af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000568": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105675af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000569": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105685af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105695af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000056f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000570": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061056f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000571": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105705af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000572": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105715af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000573": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105725af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000574": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105735af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000575": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105745af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000576": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105755af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000577": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105765af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000578": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105775af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000579": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105785af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105795af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000057f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000580": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061057f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000581": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105805af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000582": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105815af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000583": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105825af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000584": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105835af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000585": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105845af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000586": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105855af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000587": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105865af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000588": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105875af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000589": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105885af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105895af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000058f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058e5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000590": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061058f5af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000591": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105905af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000592": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105915af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000593": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105925af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000594": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105935af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000595": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105945af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000596": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105955af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000597": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105965af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000598": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105975af150", - "storage": {} - }, - "0x0000000000000000000000000000000000000599": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105985af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059a": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105995af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059a5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059c": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059b5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059d": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059c5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059e": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059d5af150", - "storage": {} - }, - "0x000000000000000000000000000000000000059f": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059e5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x36600060003760006000366000600061059f5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005a9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005aa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105a95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ab": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105aa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ac": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ab5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ad": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ac5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ae": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ad5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005af": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ae5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105af5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005b9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ba": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105b95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005bb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ba5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005bc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105bb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005bd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105bc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005be": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105bd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005bf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105be5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105bf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005c9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ca": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105c95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005cb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ca5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005cc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105cb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005cd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105cc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ce": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105cd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005cf": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ce5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105cf5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005d9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005da": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105d95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005db": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105da5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005dc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105db5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005dd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105dc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005de": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105dd5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005df": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105de5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105df5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005e9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ea": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105e95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005eb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ea5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ec": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105eb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ed": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ec5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ee": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ed5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005ef": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ee5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f0": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105ef5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f1": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f05af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f2": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f15af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f3": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f25af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f4": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f35af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f5": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f45af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f6": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f55af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f7": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f65af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f8": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f75af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005f9": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f85af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005fa": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105f95af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005fb": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105fa5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005fc": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105fb5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005fd": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105fc5af150", - "storage": {} - }, - "0x00000000000000000000000000000000000005fe": { - "nonce": "0x01", - "balance": "0xad78ebc5ac62000000", - "code": "0x3660006000376000600036600060006105fd5af150", - "storage": {} - }, - "0x00000000219ab540356cbb839cbe05303d7705fa": { - "nonce": "0x01", - "balance": "0x01bc16d674ec800000", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033", - "storage": { - "0x00": "0x85acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05", - "0x20": "0x01", - "0x22": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x23": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x24": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x25": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x26": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x27": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x28": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x29": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x2a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x2b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x2c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x2d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x2e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x2f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x30": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x31": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x32": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x33": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x34": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x35": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x36": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x37": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x38": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x39": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x3a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x3b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x3c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x3d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x3e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x3f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x40": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7" - } - }, - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0c": "0x0c" - } - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x01", - "balance": "0xad78ebc5ac60ce5506", - "code": "0x", - "storage": {} - } - }, - "genesisRLP": "0xf90262f9025ba00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08f8a5ff479e425495fc6eac413e9db3378694c7611bbc6b1e47e8980ed3434dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0c0", - "blocks": [ - { - "blockHeader": { - "parentHash": "0xb758f56efac696f1516f4858c182638796cb23f858bda02b0150550357a57d4c", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x79d1140dada3817661b1aa8e720ab7221340ceba4683a0e68ee8865b8d9b1fd2", - "transactionsTrie": "0x2c3246fff7d874af17839e880ef9712ff08e76d9888acf082c59ed2158874b05", - "receiptTrie": "0x3a34448fb2eee61491e1fec53a616409ca679ba3049d5961438fd394634f893a", - "bloom": "0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x2baab6", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "requestsRoot": "0x045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97", - "hash": "0x7ee731b9a457fa1297eac2b32ec521abcd60571d369d6460126b203efe6e1d9e" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x07", - "gasLimit": "0x0246139ca800", - "to": "0x00000000000000000000000000000000000005fe", - "value": "0x00", - "data": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b050000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "v": "0x26", - "r": "0x94504f92848f6ec77a8a8866c34ef90ed334a41cb258b7f8e20117491f2fe6f9", - "s": "0x70ee55ab7fbf20b29a8416d62e1ad2bf0abfed3d37d6d0f183539559b3c354c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [], - "depositRequests": [ - { - "pubkey": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "withdrawalCredentials": "0x0000000000000000000000000000000000000000000000000000000000000002", - "amount": "0x0773594000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", - "index": "0x00" - } - ], - "rlp": "0xf90524f9025ea0b758f56efac696f1516f4858c182638796cb23f858bda02b0150550357a57d4ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa079d1140dada3817661b1aa8e720ab7221340ceba4683a0e68ee8865b8d9b1fd2a02c3246fff7d874af17839e880ef9712ff08e76d9888acf082c59ed2158874b05a03a34448fb2eee61491e1fec53a616409ca679ba3049d5961438fd394634f893ab9010000000000000000000000400000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000800188016345785d8a0000832baab60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000a0045e77786f8dabc6cf70617141932e3c405c838d16fa8c5fceed1f5e7dbe3a97f901fcf901f98007860246139ca8009400000000000000000000000000000000000005fe80b9019422895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000011085acb6376c2707b118225da41825974c12b5924a05c6a53b988c9cbc33c55b05000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326a094504f92848f6ec77a8a8866c34ef90ed334a41cb258b7f8e20117491f2fe6f9a070ee55ab7fbf20b29a8416d62e1ad2bf0abfed3d37d6d0f183539559b3c354c3c0c0f8c0b8be00f8bbb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002850773594000b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380", - "blocknumber": "1" - } - ], - "lastblockhash": "0x7ee731b9a457fa1297eac2b32ec521abcd60571d369d6460126b203efe6e1d9e", - "sealEngine": "NoProof", - "_info": { - "hash": "0x67fe4b69dd8bf0b07cf56574625dd77d6ada5b1088b1e1202847cee8aaed8d6e", - "comment": "`execution-spec-tests` generated test", - "filling-transition-tool": "evm version 1.14.0-unstable-5535dc08-20240424", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6110.md", - "reference-spec-version": "70a6ec21f62937caf665d98db2b41633e9287871" - } - } -} \ No newline at end of file From 993b9ece70118b525f15253b956f609454c59f97 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Fri, 3 May 2024 11:13:39 +0200 Subject: [PATCH 225/551] Add Prague tests --- .../PragueTests.cs | 23 +++++++++++++++++++ .../Ethereum.Test.Base/JsonToEthereumTest.cs | 1 + 2 files changed, 24 insertions(+) create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs new file mode 100644 index 00000000000..903c7249b2c --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -0,0 +1,23 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Threading.Tasks; +using Ethereum.Test.Base; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class PragueTests : BlockchainTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public async Task Test(BlockchainTest test) => await RunTest(test); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/prague"); + return (IEnumerable)loader.LoadTests(); + } +} diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index 2a474b85eaa..8a93d1a20ad 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -58,6 +58,7 @@ private static IReleaseSpec ParseSpec(string network) "GrayGlacier" => GrayGlacier.Instance, "Shanghai" => Shanghai.Instance, "Cancun" => Cancun.Instance, + "Prague" => Prague.Instance, _ => throw new NotSupportedException() }; } From 1651033ca37b9788c0b71356fb6cf80e0cc83f16 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Fri, 3 May 2024 11:20:11 +0200 Subject: [PATCH 226/551] Make PragueTests explicit for now --- src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs index 903c7249b2c..c97dff32a27 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -10,6 +10,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] +[Explicit("These tests are not ready yet")] public class PragueTests : BlockchainTestBase { [TestCaseSource(nameof(LoadTests))] From 0ed3097838487eb46164c666ae2a4b6c358537ce Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sun, 5 May 2024 15:35:10 +0200 Subject: [PATCH 227/551] adjust engine field name --- .../Nethermind.Merge.Plugin/Data/ExecutionPayload.cs | 6 +++--- .../Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs | 8 ++++---- src/tests | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index c44fc8d7b58..121d43be9aa 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -93,10 +93,10 @@ public byte[][] Transactions /// - /// Gets or sets a collection of as defined in + /// Gets or sets a collection of as defined in /// EIP-6110. /// - public virtual Deposit[]? Deposits { get; set; } + public virtual Deposit[]? DepositRequests { get; set; } /// @@ -239,7 +239,7 @@ private int GetExecutionPayloadVersion() { return this switch { - { Deposits: not null, WithdrawalRequests: not null } => 4, + { DepositRequests: not null, WithdrawalRequests: not null } => 4, { BlobGasUsed: not null } or { ExcessBlobGas: not null } or { ParentBeaconBlockRoot: not null } => 3, { Withdrawals: not null } => 2, _ => 1 diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index dd8f86b4255..f6a325df985 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -41,7 +41,7 @@ public ExecutionPayloadV4(Block block) : base(block) } } - Deposits = deposits?.ToArray() ?? []; + DepositRequests = deposits?.ToArray() ?? []; WithdrawalRequests = withdrawalRequests?.ToArray() ?? []; } @@ -52,7 +52,7 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu return false; } - var depositsLength = Deposits?.Length ?? 0; + var depositsLength = DepositRequests?.Length ?? 0; var withdrawalRequestsLength = WithdrawalRequests?.Length ?? 0; var requestsCount = depositsLength + withdrawalRequestsLength; if (requestsCount > 0) @@ -61,7 +61,7 @@ public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = nu int i = 0; for (; i < depositsLength; ++i) { - requests[i] = Deposits![i]; + requests[i] = DepositRequests![i]; } for (; i < requestsCount; ++i) @@ -90,7 +90,7 @@ public override bool ValidateFork(ISpecProvider specProvider) => /// EIP-6110. /// [JsonRequired] - public override Deposit[]? Deposits { get; set; } + public override Deposit[]? DepositRequests { get; set; } /// /// Gets or sets as defined in diff --git a/src/tests b/src/tests index 661356317ac..acac3bde26a 160000 --- a/src/tests +++ b/src/tests @@ -1 +1 @@ -Subproject commit 661356317ac6df52208d54187e692472a25a01f8 +Subproject commit acac3bde26a5c0472c2fc259ff6bbb7a3a47ce55 From 70f0234d932f2dba5f0d10cb8fea8b8e6038ee83 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 6 May 2024 11:49:06 +0530 Subject: [PATCH 228/551] format files --- .../ValidatorExit/WithdrawRequestsContract.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs index f56eac7f3de..a03761f5582 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only using System; From 97ca405a5b314db332524d31f933831568296dcc Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 6 May 2024 11:53:00 +0530 Subject: [PATCH 229/551] fix build error --- .../Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index f9086db6edc..eb6ca5c027f 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -149,7 +149,7 @@ protected virtual BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv re readOnlyTxProcessingEnv.TransactionProcessor, logManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager)), - _consensusRequestsProcessor); + consensusRequestsProcessor: _consensusRequestsProcessor); } } From 0b7784502e3ab1a5a7480fab02bde9770718c94d Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 6 May 2024 12:00:40 +0530 Subject: [PATCH 230/551] fix arg error --- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index e0816122519..c386da262b6 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -255,7 +255,7 @@ protected override IBlockProcessor CreateBlockProcessor() TxProcessor, LogManager, WithdrawalProcessor, - ConsensusRequestsProcessor); + consensusRequestsProcessor: ConsensusRequestsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } From b3e05045324af2a761e330ff25091da393d5929c Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 6 May 2024 12:05:52 +0530 Subject: [PATCH 231/551] again fix arg error --- .../Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 1a7dd66d557..64fd6a54235 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -145,7 +145,7 @@ protected override IBlockProcessor CreateBlockProcessor() TxProcessor, LogManager, WithdrawalProcessor, - ConsensusRequestsProcessor); + consensusRequestsProcessor: ConsensusRequestsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } From 6cc6774708119d3957e915b65ef87a46561a0a85 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 6 May 2024 13:17:27 +0530 Subject: [PATCH 232/551] address some lukasz comments --- .../Ethereum.Test.Base/GeneralStateTest.cs | 1 - .../Nethermind.Core/ConsensusRequests/Deposit.cs | 13 ++++++------- .../ConsensusRequests/WithdrawalRequest.cs | 10 ++++------ 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs index 5dbbf03656e..d3190aa83bf 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs @@ -8,7 +8,6 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Int256; -using NUnit.Framework; namespace Ethereum.Test.Base { diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs index 827603c9bf7..774ae67383b 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -45,13 +45,12 @@ public ulong? Index } public override string ToString() => ToString(string.Empty); - public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(Deposit)} {{") - .Append($"{nameof(Index)}: {Index}, ") - .Append($"{nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, ") - .Append($"{nameof(Amount)}: {Amount}, ") - .Append($"{nameof(Signature)}: {Signature?.ToHexString()}, ") - .Append($"{nameof(PubKey)}: {PubKey?.ToHexString()}}}") - .ToString(); + public string ToString(string indentation) => @$"{indentation}{nameof(Deposit)} + {{{nameof(Index)}: {Index}, + {nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, + {nameof(Amount)}: {Amount}, + {nameof(Signature)}: {Signature?.ToHexString()}, + {nameof(PubKey)}: {PubKey?.ToHexString()}}}"; } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs index 6025649370c..fcab4df6d92 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -34,11 +34,9 @@ public ulong Amount } public override string ToString() => ToString(string.Empty); - public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(WithdrawalRequest)} {{") - .Append($"{nameof(SourceAddress)}: {SourceAddress}, ") - .Append($"{nameof(ValidatorPubkey)}: {ValidatorPubkey?.ToHexString()}, ") - .Append($"{nameof(Amount)}: {Amount}}}") - .ToString(); - + public string ToString(string indentation) => @$"{indentation}{nameof(WithdrawalRequest)} + {{{nameof(SourceAddress)}: {SourceAddress}, + {nameof(ValidatorPubkey)}: {ValidatorPubkey?.ToHexString()}, + {nameof(Amount)}: {Amount}}}"; } From 2528188d77434d061ce903f7ebc24ef7761f167c Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 6 May 2024 11:22:08 +0200 Subject: [PATCH 233/551] format whitespace --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 86aac620dc4..654f6620621 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2233,11 +2233,11 @@ private EvmExceptionType InstructionAuth(EvmState vmState, } Signature signature = new(sigData, yParity); - Address recovered = null; + Address recovered = null; if (signature.V == 27 || signature.V == 28) { //TODO is ExecutingAccount correct when DELEGATECALL and CALLCODE? - recovered = TryRecoverSigner(signature, vmState.Env.ExecutingAccount, authority, commit); + recovered = TryRecoverSigner(signature, vmState.Env.ExecutingAccount, authority, commit); } if (recovered == authority) @@ -2272,7 +2272,7 @@ private EvmExceptionType InstructionAuth(EvmState vmState, if (i < 12) msg[offset + 64] = 0; - else if(i - 12 < invokerAddress.Length) + else if (i - 12 < invokerAddress.Length) msg[offset + 64] = invokerAddress[i - 12]; if (i < commit.Length) @@ -2388,7 +2388,7 @@ private EvmExceptionType InstructionCall( //AUTHCALL forwards all, if gas param is zero if (gasLimit == 0) gasLimit = sixtyFourthDeducted; - else if(sixtyFourthDeducted < gasLimit) + else if (sixtyFourthDeducted < gasLimit) return EvmExceptionType.OutOfGas; } gasLimit = UInt256.Min(sixtyFourthDeducted, gasLimit); From 2b83051e7bae16ad510af5fc866c95fc53131dfb Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 6 May 2024 14:37:16 +0200 Subject: [PATCH 234/551] remove test --- .../Nethermind.Evm.Test/Eip3074Tests.cs | 107 +----------------- 1 file changed, 5 insertions(+), 102 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs index 4dab19a95d2..4bf346b9a3c 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs @@ -338,7 +338,7 @@ public void ExecuteAuth_SignatureIsInvalid_ReturnsZero() .Op(Instruction.PUSH0) .Op(Instruction.RETURN) .Done; - + var result = Execute(code); Assert.That(result.ReturnValue[0], Is.EqualTo(0)); @@ -448,103 +448,6 @@ public void ExecuteAuthCall_TransactionReturnsTheCurrentCallerAfterAuthCall_Sign Assert.That(new Address(result.ReturnValue), Is.EqualTo(signer.Address)); } - [Test] - public void ExecuteAuthCallAndDELEGATECALL_TransactionReturnsTheCurrentCallerAfterAuthCallAndDelegateCall_ContractAddressIsReturned() - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Just throw away the result - .POP() - - //AuthCall params - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.AddressC) - .PushData(0) - .Op(Instruction.AUTHCALL) - .Done; - - byte[] firstCallCode = Prepare.EvmCode - .CALLER() - .Op(Instruction.PUSH0) - .Op(Instruction.SSTORE) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.AddressD) - .PushData(1000000) - .Op(Instruction.CALL) - .Done; - - byte[] secondCallCode = Prepare.EvmCode - .CALLER() - .Op(Instruction.PUSH0) - .Op(Instruction.SSTORE) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.AddressE) - .PushData(1000000) - .Op(Instruction.CALL) - .Done; - - //Store caller in slot 0 - byte[] codeStoreCaller = Prepare.EvmCode - .CALLER() - .Op(Instruction.PUSH0) - .Op(Instruction.SSTORE) - .Op(Instruction.STOP) - .Done; - - TestState.CreateAccount(TestItem.AddressC, 0); - TestState.InsertCode(TestItem.AddressC, Keccak.Compute(firstCallCode), firstCallCode, Spec); - - TestState.CreateAccount(TestItem.AddressD, 0); - TestState.InsertCode(TestItem.AddressD, Keccak.Compute(secondCallCode), secondCallCode, Spec); - - TestState.CreateAccount(TestItem.AddressE, 0); - TestState.InsertCode(TestItem.AddressE, Keccak.Compute(codeStoreCaller), codeStoreCaller, Spec); - - Execute(code); - - var resultB = TestState.Get(new StorageCell(TestItem.AddressB, 0)); - - Assert.That(new Address(resultB.ToArray()), Is.EqualTo(TestItem.AddressB)); - - var resultD = TestState.Get(new StorageCell(TestItem.AddressD, 0)); - - Assert.That(new Address(resultD.ToArray()), Is.EqualTo(TestItem.AddressC)); - - var resultE = TestState.Get(new StorageCell(TestItem.AddressE, 0)); - - Assert.That(new Address(resultE.ToArray()), Is.EqualTo(TestItem.AddressD)); - } - public static IEnumerable AuthCallGasCases() { yield return new object[] @@ -679,7 +582,7 @@ public void ExecuteAuthCall_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsFor TestState.CreateAccount(TestItem.AddressC, 0); TestState.InsertCode(TestItem.AddressC, Keccak.Compute(codeStoreGas), codeStoreGas, Spec); - + var result = ExecuteAndTrace(gasLimit, code); Assert.That(new UInt256(result.ReturnValue, true), Is.EqualTo((UInt256)expectedGasInSubcall)); @@ -748,7 +651,7 @@ public void ExecuteAuthCall_1GweiIsSent_SignerIsDebitedAndReceiverCredited() .PushSingle(64) .Op(Instruction.MSTORE) - //Auth params + //Auth params .PushSingle((UInt256)data.Length) .Op(Instruction.PUSH0) .PushData(signer.Address) @@ -875,7 +778,7 @@ public void ExecuteAuthCall_SignerHasCodeDeployed_AuthorizedHasNotBeenSet() } [Test] - public void ExecuteAuthCall_AuthCallIsCalledTwice_AuthorizedIsStillSet() + public void ExecuteAuthCall_AuthCallIsCalledTwiceInSameFrame_AuthorizedIsStillSet() { var signer = TestItem.PrivateKeyF; var data = CreateSignedCommitMessage(signer); @@ -968,7 +871,7 @@ public void ExecuteAuthCall_AuthorizedIsSetAndAuthCallIsCalledInSubcall_Authoriz TestState.InsertCode(TestItem.AddressC, Keccak.Compute(authCall), authCall, Spec); var result = ExecuteAndTrace(code); - Assert.That(result.Entries.Last(e=> e.Opcode.Equals(Instruction.AUTHCALL.ToString())).Error, Is.Not.Null); + Assert.That(result.Entries.Last(e => e.Opcode.Equals(Instruction.AUTHCALL.ToString())).Error, Is.Not.Null); } private byte[] CreateSignedCommitMessage(PrivateKey signer) From 669853cbf6e39f1555a45cf92801b5cc15ef6b3f Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 6 May 2024 16:22:42 +0200 Subject: [PATCH 235/551] invalid op test fix --- .../Nethermind.Evm.Test/InvalidOpcodeTests.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs b/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs index 59844dba4c0..66fb59e7fc4 100644 --- a/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs @@ -112,6 +112,15 @@ public class InvalidOpcodeTests : VirtualMachineTestsBase } ).ToArray(); + private static readonly Instruction[] PragueInstructions = + CancunInstructions.Union( + new Instruction[] + { + Instruction.AUTH, + Instruction.AUTHCALL + } + ).ToArray(); + private readonly Dictionary _validOpcodes = new() { @@ -127,7 +136,8 @@ private readonly Dictionary _validOpcodes {(ForkActivation)MainnetSpecProvider.LondonBlockNumber, LondonInstructions}, {MainnetSpecProvider.ShanghaiActivation, ShanghaiInstructions}, {MainnetSpecProvider.CancunActivation, CancunInstructions}, - {(long.MaxValue, ulong.MaxValue), CancunInstructions} + {MainnetSpecProvider.PragueActivation, PragueInstructions}, + {(long.MaxValue, ulong.MaxValue), PragueInstructions} }; private const string InvalidOpCodeErrorMessage = "BadInstruction"; From 1ed395b666f72efc20c59c2940badf43993b5e2c Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 7 May 2024 16:24:23 +0530 Subject: [PATCH 236/551] address lukasz comments --- .../Ethereum.Test.Base/GeneralStateTest.cs | 1 - .../Nethermind.Core/ConsensusRequests/Deposit.cs | 13 ++++++------- .../ConsensusRequests/WithdrawalRequest.cs | 9 ++++----- src/tests | 2 +- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs index 5dbbf03656e..d3190aa83bf 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs @@ -8,7 +8,6 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Int256; -using NUnit.Framework; namespace Ethereum.Test.Base { diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs index 827603c9bf7..774ae67383b 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -45,13 +45,12 @@ public ulong? Index } public override string ToString() => ToString(string.Empty); - public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(Deposit)} {{") - .Append($"{nameof(Index)}: {Index}, ") - .Append($"{nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, ") - .Append($"{nameof(Amount)}: {Amount}, ") - .Append($"{nameof(Signature)}: {Signature?.ToHexString()}, ") - .Append($"{nameof(PubKey)}: {PubKey?.ToHexString()}}}") - .ToString(); + public string ToString(string indentation) => @$"{indentation}{nameof(Deposit)} + {{{nameof(Index)}: {Index}, + {nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, + {nameof(Amount)}: {Amount}, + {nameof(Signature)}: {Signature?.ToHexString()}, + {nameof(PubKey)}: {PubKey?.ToHexString()}}}"; } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs index 6025649370c..da674c4fd50 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -34,11 +34,10 @@ public ulong Amount } public override string ToString() => ToString(string.Empty); - public string ToString(string indentation) => new StringBuilder($"{indentation}{nameof(WithdrawalRequest)} {{") - .Append($"{nameof(SourceAddress)}: {SourceAddress}, ") - .Append($"{nameof(ValidatorPubkey)}: {ValidatorPubkey?.ToHexString()}, ") - .Append($"{nameof(Amount)}: {Amount}}}") - .ToString(); + public string ToString(string indentation) => @$"{indentation}{nameof(WithdrawalRequest)} + {{{nameof(SourceAddress)}: {SourceAddress}, + {nameof(ValidatorPubkey)}: {ValidatorPubkey?.ToHexString()}, + {nameof(Amount)}: {Amount}}}"; } diff --git a/src/tests b/src/tests index acac3bde26a..661356317ac 160000 --- a/src/tests +++ b/src/tests @@ -1 +1 @@ -Subproject commit acac3bde26a5c0472c2fc259ff6bbb7a3a47ce55 +Subproject commit 661356317ac6df52208d54187e692472a25a01f8 From 70e926e0f4684113a4d3bb908e4a46def18d01a7 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 7 May 2024 17:16:25 +0530 Subject: [PATCH 237/551] update test hashes --- .../AuRaMergeEngineModuleTests.cs | 2 +- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 7c8df428f40..0f0c7237187 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -59,7 +59,7 @@ int ErrorCode => base.forkchoiceUpdatedV2_should_validate_withdrawals(input); [TestCase( - "0xe97d919a17fa5011ff3a08ffb07657ed9e1aaf5ff649888e5d7f605006caf598", + "0xeb7146faceb5d2974ae7198a55335071b88083972d5f16a031b53b0928d8475b", "0xb3bafa4c9efb2f6f95345381f591d2b6f611b0911ca568fb499594cbec66e5d4", "0xffadd136040966576fb63852506bba89c765cabe2884fa27797fd67aea5769dc", "0x3c6a8926870bdeff")] diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 29801d52e1b..fcbbe57fc51 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -23,10 +23,10 @@ namespace Nethermind.Merge.Plugin.Test; public partial class EngineModuleTests { [TestCase( - "0x948f67f47376af5d09cc39ec25a84c84774f14b2e80289064c2de73db33cc573", - "0x9293c385458977100c54efd4f61180ccff47ad2f081db181a9f1ebeaff3e0999", - "0x30f4339ed858007f3f9e87b0342598bae47836fd89f1b84f42a16b90e583c47c", - "0x96b752d22831ad92")] + "0x15d4d1f0b215b52458adeac09119798a7c35cebe4aba7f37f0014c7533e12b8a", + "0xb457b256c8bbfc7f0716a0df076b4f72a358594d795be2aab001795fd297acdb", + "0x58bb65def521baa8a64c1c9337d42da3885d7fbf85b8ad439cb179d480a64e98", + "0xae9416e039eb988f")] public virtual async Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) { From cc7bab1675d65b84778cb29d5f0f5b49e82259a1 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 7 May 2024 17:19:55 +0530 Subject: [PATCH 238/551] update hash in merge test --- .../Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 0f0c7237187..768d3ab3e25 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -62,7 +62,7 @@ int ErrorCode "0xeb7146faceb5d2974ae7198a55335071b88083972d5f16a031b53b0928d8475b", "0xb3bafa4c9efb2f6f95345381f591d2b6f611b0911ca568fb499594cbec66e5d4", "0xffadd136040966576fb63852506bba89c765cabe2884fa27797fd67aea5769dc", - "0x3c6a8926870bdeff")] + "0x7f9dace0b66620a2")] public override Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) => base.Should_process_block_as_expected_V4(latestValidHash, blockHash, stateRoot, payloadId); From 01e02a2454bfd608a4ffb1557dd207787a9cbef1 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 7 May 2024 17:29:12 +0530 Subject: [PATCH 239/551] update state root --- .../Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 768d3ab3e25..a614a114607 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -60,8 +60,8 @@ int ErrorCode [TestCase( "0xeb7146faceb5d2974ae7198a55335071b88083972d5f16a031b53b0928d8475b", - "0xb3bafa4c9efb2f6f95345381f591d2b6f611b0911ca568fb499594cbec66e5d4", - "0xffadd136040966576fb63852506bba89c765cabe2884fa27797fd67aea5769dc", + "0x0868af0d579748cf4c82b45abaaf31058b9538f476aefe43735a7d86b47b4ad4", + "0x01dcf226fff92c021431e8802f96875b0197f332d075aea01dc6d34f4af79f00", "0x7f9dace0b66620a2")] public override Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) => base.Should_process_block_as_expected_V4(latestValidHash, blockHash, stateRoot, payloadId); From fc273d606e4f7aa2830dc71f094ca07e0c56566e Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 8 May 2024 11:18:26 +0200 Subject: [PATCH 240/551] fix DepositsProcessor --- .../DepositProcessorTests.cs | 46 +++++++++++++++++++ .../Requests/DepositsProcessor.cs | 23 +++++++--- 2 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs diff --git a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs new file mode 100644 index 00000000000..d5859ddc7db --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs @@ -0,0 +1,46 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Linq; +using Nethermind.Abi; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Extensions; +using NUnit.Framework; + + +namespace Nethermind.Consensus.Test; + +public class DepositProcessorTests +{ + private AbiSignature depositEventABI = new AbiSignature("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes ,AbiType.DynamicBytes); + + // ToDo this test is not finished and needs to be rewritten + [Test] + public void CanParseDeposit() + { + var deposit = new Deposit() + { + Amount = 32000000000, + Index = 0, + PubKey = Bytes.FromHexString( + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"), + Signature = Bytes.FromHexString( + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003"), + WithdrawalCredentials = + Bytes.FromHexString("0000000000000000000000000000000000000000000000000000000000000002") + }; + var bytes = Bytes.FromHexString( + "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080040597307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000"); + AbiEncoder abiEncoder = new AbiEncoder(); + var result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, bytes); + + var newDeposit = new Deposit() + { + PubKey = (byte[])result[0], + WithdrawalCredentials = (byte[])result[1], + Amount = ((byte[])result[2]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), + Signature = (byte[])result[3], + Index = ((byte[])result[4]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), + }; + } +} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 75edf824c22..5dab475ed1b 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -2,20 +2,24 @@ // SPDX-License-Identifier: LGPL-3.0-only using System.Collections.Generic; +using Nethermind.Abi; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Specs; -using Nethermind.Serialization.Rlp; +using System.Linq; +using Nethermind.Core.Extensions; namespace Nethermind.Consensus.Requests; public class DepositsProcessor : IDepositsProcessor { + private AbiSignature depositEventABI = new AbiSignature("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes ,AbiType.DynamicBytes); + AbiEncoder abiEncoder = new AbiEncoder(); + public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { if (spec.DepositsEnabled) { - DepositDecoder depositDecoder = DepositDecoder.Instance; for (int i = 0; i < receipts.Length; i++) { LogEntry[]? logEntries = receipts[i].Logs; @@ -26,11 +30,18 @@ public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, I LogEntry log = logEntries[index]; if (log.LoggersAddress == spec.DepositContractAddress) { - Deposit? deposit = depositDecoder.Decode(new RlpStream(log.Data)); - if (deposit is not null) + var result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, log.Data); + + var newDeposit = new Deposit() { - yield return deposit; - } + PubKey = (byte[])result[0], + WithdrawalCredentials = (byte[])result[1], + Amount = ((byte[])result[2]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), // ToDo not optimal - optimize + Signature = (byte[])result[3], + Index = ((byte[])result[4]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), // ToDo not optimal - optimize + }; + + yield return newDeposit; } } } From 94ea7a3b0a8af202d6a9338c487a2c615928855b Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 8 May 2024 14:06:11 +0200 Subject: [PATCH 241/551] from review comments --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 27897231fb6..d69846c2295 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2234,7 +2234,7 @@ private EvmExceptionType InstructionAuth(EvmState vmState, Signature signature = new(sigData, yParity); Address recovered = null; - if (signature.V == 27 || signature.V == 28) + if (signature.V == Signature.VOffset || signature.V == Signature.VOffset + 1) { //TODO is ExecutingAccount correct when DELEGATECALL and CALLCODE? recovered = TryRecoverSigner(signature, vmState.Env.ExecutingAccount, authority, commit); @@ -2259,7 +2259,6 @@ private EvmExceptionType InstructionAuth(EvmState vmState, Address authority, ReadOnlySpan commit) { - byte[] chainId = _chainId.PadLeft(32); UInt256 nonce = _state.GetNonce(authority); byte[] invokerAddress = invoker.Bytes; Span msg = stackalloc byte[1 + 32 * 4]; @@ -2267,7 +2266,7 @@ private EvmExceptionType InstructionAuth(EvmState vmState, for (int i = 0; i < 32; i++) { int offset = i + 1; - msg[offset] = chainId[i]; + msg[offset] = _chainId[i]; msg[32 + 32 - i] = (byte)(nonce[i / 8] >> (8 * (i % 8))); if (i < 12) From eeae2f300594538f7daf47d883c0b90703edb662 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 8 May 2024 16:06:03 +0200 Subject: [PATCH 242/551] test fixes --- .../Blocks/BlockhashStore.cs | 4 +- .../Processing/BlockProcessor.cs | 2 +- .../Requests/ConsensusRequestsProcessor.cs | 5 +- .../Requests/WithdrawalRequestsProcessor.cs | 95 ++++++------------- .../EngineModuleTests.Setup.cs | 2 +- .../Properties/launchSettings.json | 2 +- 6 files changed, 39 insertions(+), 71 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/Blocks/BlockhashStore.cs b/src/Nethermind/Nethermind.Blockchain/Blocks/BlockhashStore.cs index c3697f828d1..cb5f1038a42 100644 --- a/src/Nethermind/Nethermind.Blockchain/Blocks/BlockhashStore.cs +++ b/src/Nethermind/Nethermind.Blockchain/Blocks/BlockhashStore.cs @@ -32,7 +32,7 @@ public void ApplyHistoryBlockHashes(BlockHeader blockHeader) // TODO: find a better way to handle this - no need to have this check everytime // this would just be true on the fork block BlockHeader parentHeader = blockFinder.FindParentHeader(blockHeader, BlockTreeLookupOptions.None); - if (parentHeader is not null && parentHeader!.Timestamp < spec.Eip2935TransitionTimestamp) + if (parentHeader is not null && !specProvider.GetSpec(parentHeader).IsEip2935Enabled) InitHistoryOnForkBlock(blockHeader, eip2935Account); else AddParentBlockHashToState(blockHeader, eip2935Account); @@ -74,6 +74,6 @@ private void AddParentBlockHashToState(BlockHeader blockHeader, Address eip2935A Hash256 parentBlockHash = blockHeader.ParentHash; var blockIndex = new UInt256((ulong)((blockHeader.Number - 1) % Eip2935Constants.RingBufferSize)); StorageCell blockHashStoreCell = new(eip2935Account, blockIndex); - worldState.Set(blockHashStoreCell, parentBlockHash!.BytesToArray()); + worldState.Set(blockHashStoreCell, parentBlockHash!.Bytes.WithoutLeadingZeros().ToArray()); } } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index b4f9db34096..1c7d85000ee 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -81,7 +81,7 @@ public BlockProcessor( _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); _receiptsRootCalculator = receiptsRootCalculator ?? ReceiptsRootCalculator.Instance; _beaconBlockRootHandler = beaconBlockRootHandler ?? new BeaconBlockRootHandler(transactionProcessor, logManager); - _consensusRequestsProcessor = consensusRequestsProcessor ?? new ConsensusRequestsProcessor(); + _consensusRequestsProcessor = consensusRequestsProcessor ?? new ConsensusRequestsProcessor(transactionProcessor); _blockhashStore = blockHashStore ?? throw new ArgumentNullException(nameof(blockHashStore)); ReceiptsTracer = new BlockReceiptsTracer(); diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index ebc258446d9..0a15e7fc61d 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -8,14 +8,15 @@ using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; using Nethermind.State; using Nethermind.State.Proofs; namespace Nethermind.Consensus.Requests; -public class ConsensusRequestsProcessor : IConsensusRequestsProcessor +public class ConsensusRequestsProcessor(ITransactionProcessor transactionProcessor) : IConsensusRequestsProcessor { - private readonly WithdrawalRequestsProcessor _withdrawalRequestsProcessor = new(); + private readonly WithdrawalRequestsProcessor _withdrawalRequestsProcessor = new(transactionProcessor); private readonly IDepositsProcessor _depositsProcessor = new DepositsProcessor(); public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 3d4b85b88c0..47f49379906 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -9,91 +9,58 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Int256; using Nethermind.State; namespace Nethermind.Consensus.Requests; // https://eips.ethereum.org/EIPS/eip-7002#block-processing -public class WithdrawalRequestsProcessor : IWithdrawalRequestsProcessor +public class WithdrawalRequestsProcessor(ITransactionProcessor transactionProcessor) : IWithdrawalRequestsProcessor { - private static readonly UInt256 ExcessWithdrawalRequestsStorageSlot = 0; - private static readonly UInt256 WithdrawalRequestCountStorageSlot = 1; - private static readonly UInt256 WithdrawalRequestQueueHeadStorageSlot = 2; - private static readonly UInt256 WithdrawalRequestQueueTailStorageSlot = 3; - private static readonly UInt256 WithdrawalRequestQueueStorageOffset = 4; - private static readonly UInt256 MaxWithdrawalRequestsPerBlock = 16; - private static readonly UInt256 TargetWithdrawalRequestsPerBlock = 2; + private const long GasLimit = 30_000_000L; - // Will be moved to system transaction public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state, Block block) { if (!spec.IsEip7002Enabled) yield break; Address eip7002Account = spec.Eip7002ContractAddress; - if (!state.AccountExists(eip7002Account)) + if (!state.AccountExists(eip7002Account)) // not needed anymore? yield break; - // Reads validator exit information from the precompile - StorageCell queueHeadIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueHeadStorageSlot); - StorageCell queueTailIndexCell = new(spec.Eip7002ContractAddress, WithdrawalRequestQueueTailStorageSlot); + CallOutputTracer tracer = new(); - UInt256 queueHeadIndex = new(state.Get(queueHeadIndexCell)); - UInt256 queueTailIndex = new(state.Get(queueTailIndexCell)); - - UInt256 numInQueue = queueTailIndex - queueHeadIndex; - UInt256 numDequeued = UInt256.Min(numInQueue, MaxWithdrawalRequestsPerBlock); - - for (UInt256 i = 0; i < numDequeued; ++i) + Transaction? transaction = new() { - UInt256 queueStorageSlot = WithdrawalRequestQueueStorageOffset + (queueHeadIndex + i) * 3; - StorageCell sourceAddressCell = new(spec.Eip7002ContractAddress, queueStorageSlot); - StorageCell validatorAddressFirstCell = new(spec.Eip7002ContractAddress, queueStorageSlot + 1); - StorageCell validatorAddressSecondCell = new(spec.Eip7002ContractAddress, queueStorageSlot + 2); - Address sourceAddress = new(state.Get(sourceAddressCell)[..20].ToArray()); - byte[] validatorPubKey = new byte[48]; - state.Get(validatorAddressFirstCell)[..32].CopyTo(validatorPubKey[..32]); - state.Get(validatorAddressSecondCell)[..16].CopyTo(validatorPubKey[32..]); - ulong amount = state.Get(validatorAddressSecondCell)[16..24].ToULongFromBigEndianByteArrayWithoutLeadingZeros(); // ToDo write tests to extension method - yield return new WithdrawalRequest { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubKey, Amount = amount }; - } + Value = UInt256.Zero, + Data = Array.Empty(), + To = spec.Eip7002ContractAddress, + SenderAddress = Address.SystemUser, + GasLimit = GasLimit, + GasPrice = UInt256.Zero, + }; + transaction.Hash = transaction.CalculateHash(); + + transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); + var result = tracer.ReturnValue; + if (result == null || result.Length == 0) + yield break; - UInt256 newQueueHeadIndex = queueHeadIndex + numDequeued; - if (newQueueHeadIndex == queueTailIndex) + int sizeOfClass = 20 + 48 + 8; + int count = result.Length / sizeOfClass; + for (int i = 0; i < count; ++i) { - state.Set(queueHeadIndexCell, UInt256.Zero.ToBigEndian()); - state.Set(queueTailIndexCell, UInt256.Zero.ToBigEndian()); - } - else - { - state.Set(queueHeadIndexCell, newQueueHeadIndex.ToBigEndian()); - } - - UpdateExcessExits(spec, state); - ResetExitCount(spec, state); - } + WithdrawalRequest request = new(); + Span span = new Span(result, i * sizeOfClass, sizeOfClass); + request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); + request.ValidatorPubkey = span.Slice(20, 48).ToArray(); + request.Amount = BitConverter.ToUInt64(span.Slice(68, 8).ToArray().Reverse().ToArray()); // ToDo Optimize - private void UpdateExcessExits(IReleaseSpec spec, IWorldState state) - { - StorageCell previousExcessCell = new(spec.Eip7002ContractAddress, ExcessWithdrawalRequestsStorageSlot); - StorageCell countCell = new(spec.Eip7002ContractAddress, WithdrawalRequestCountStorageSlot); - - UInt256 previousExcess = new(state.Get(previousExcessCell)); - UInt256 count = new(state.Get(countCell)); - - UInt256 newExcess = 0; - if (previousExcess + count > TargetWithdrawalRequestsPerBlock) - { - newExcess = previousExcess + count - TargetWithdrawalRequestsPerBlock; + yield return request; } - - state.Set(previousExcessCell, newExcess.ToBigEndian()); - } - - private void ResetExitCount(IReleaseSpec spec, IWorldState state) - { - StorageCell countCell = new(spec.Eip7002ContractAddress, WithdrawalRequestCountStorageSlot); - state.Set(countCell, UInt256.Zero.ToBigEndian()); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index b7b2d1e36b7..6e66581f4bb 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -237,7 +237,7 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot), 50000); // by default we want to avoid cleanup payload effects in testing - ConsensusRequestsProcessor ??= new ConsensusRequestsProcessor(); + ConsensusRequestsProcessor ??= new ConsensusRequestsProcessor(TxProcessor); return new MergeBlockProducer(preMergeBlockProducer, postMergeBlockProducer, PoSSwitcher); } diff --git a/src/Nethermind/Nethermind.Test.Runner/Properties/launchSettings.json b/src/Nethermind/Nethermind.Test.Runner/Properties/launchSettings.json index b7f5184a651..fbf051b5111 100644 --- a/src/Nethermind/Nethermind.Test.Runner/Properties/launchSettings.json +++ b/src/Nethermind/Nethermind.Test.Runner/Properties/launchSettings.json @@ -6,7 +6,7 @@ }, "Blockchain Test": { "commandName": "Project", - "commandLineArgs": "-b -i C:\\Users\\marek\\Nethermind\\tests\\fixtures\\blockchain_tests\\prague\\eip7685_general_purpose_el_requests\\deposits_withdrawals\\valid_deposit_withdrawal_requests.json" + "commandLineArgs": "-b -i C:\\Users\\marek\\Nethermind\\tests\\fixtures\\blockchain_tests\\prague\\eip2935_historical_block_hashes_from_state\\block_hashes\\block_hashes_history_at_transition.json" }, "Regex State Test": { "commandName": "Project", From 6d4a20cfb590670e332a1206ca1bf2e1628bf6b8 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 8 May 2024 16:45:27 +0200 Subject: [PATCH 243/551] fixes --- .../Requests/WithdrawalRequestsProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 47f49379906..3b6bc7512ca 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -58,7 +58,7 @@ public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, Span span = new Span(result, i * sizeOfClass, sizeOfClass); request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); request.ValidatorPubkey = span.Slice(20, 48).ToArray(); - request.Amount = BitConverter.ToUInt64(span.Slice(68, 8).ToArray().Reverse().ToArray()); // ToDo Optimize + request.Amount = BitConverter.ToUInt64(span.Slice( 68, 8).ToArray().Reverse().ToArray()); // ToDo Optimize yield return request; } From 9042e63edfdb6d02476fa6f4afea9a5db81bfdb0 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 8 May 2024 17:02:18 +0200 Subject: [PATCH 244/551] Fix InvalidBlockInterceptor --- .../InvalidChainTracker/InvalidBlockInterceptor.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs index 87cbb58f650..2c6dc8090b6 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs @@ -5,6 +5,7 @@ using Nethermind.Core; using Nethermind.Logging; using System.Diagnostics.CodeAnalysis; +using System.Runtime.InteropServices.Marshalling; namespace Nethermind.Merge.Plugin.InvalidChainTracker; @@ -148,7 +149,10 @@ private static bool ShouldNotTrackInvalidation(Block block) if (!BlockValidator.ValidateUnclesHashMatches(block, out _)) return true; - return !BlockValidator.ValidateWithdrawalsHashMatches(block, out _); + if (!BlockValidator.ValidateWithdrawalsHashMatches(block, out _)) + return true; + + return !BlockValidator.ValidateRequestsHashMatches(block, out _); } } From a3f8a10cd16eb930c9741a9ed1f478100030d913 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 8 May 2024 21:59:11 +0200 Subject: [PATCH 245/551] cleanup --- .../Nethermind.Test.Runner/Properties/launchSettings.json | 4 ++-- src/tests | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Test.Runner/Properties/launchSettings.json b/src/Nethermind/Nethermind.Test.Runner/Properties/launchSettings.json index fbf051b5111..c2bffc4ce24 100644 --- a/src/Nethermind/Nethermind.Test.Runner/Properties/launchSettings.json +++ b/src/Nethermind/Nethermind.Test.Runner/Properties/launchSettings.json @@ -2,11 +2,11 @@ "profiles": { "State Test": { "commandName": "Project", - "commandLineArgs": "-i C:\\Users\\marek\\Nethermind\\tests\\fixtures\\state_tests\\prague\\eip2537_bls_12_381_precompiles\\bls12_g1add\\gas.json" + "commandLineArgs": "-i statetest1.json" }, "Blockchain Test": { "commandName": "Project", - "commandLineArgs": "-b -i C:\\Users\\marek\\Nethermind\\tests\\fixtures\\blockchain_tests\\prague\\eip2935_historical_block_hashes_from_state\\block_hashes\\block_hashes_history_at_transition.json" + "commandLineArgs": "-b -i blockchainTest1.json" }, "Regex State Test": { "commandName": "Project", diff --git a/src/tests b/src/tests index acac3bde26a..661356317ac 160000 --- a/src/tests +++ b/src/tests @@ -1 +1 @@ -Subproject commit acac3bde26a5c0472c2fc259ff6bbb7a3a47ce55 +Subproject commit 661356317ac6df52208d54187e692472a25a01f8 From 95bea29580b511f73b80d283690a4961e78836d2 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 8 May 2024 22:13:54 +0200 Subject: [PATCH 246/551] fix file encoding --- .../Nethermind.Consensus.Test/DepositProcessorTests.cs | 4 ++-- .../Nethermind.Consensus/Requests/DepositsProcessor.cs | 4 ++-- .../Requests/WithdrawalRequestsProcessor.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs index d5859ddc7db..cee04db26a2 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only using System.Linq; @@ -12,7 +12,7 @@ namespace Nethermind.Consensus.Test; public class DepositProcessorTests { - private AbiSignature depositEventABI = new AbiSignature("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes ,AbiType.DynamicBytes); + private AbiSignature depositEventABI = new AbiSignature("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); // ToDo this test is not finished and needs to be rewritten [Test] diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 5dab475ed1b..f37d9bd830d 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -13,8 +13,8 @@ namespace Nethermind.Consensus.Requests; public class DepositsProcessor : IDepositsProcessor { - private AbiSignature depositEventABI = new AbiSignature("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes ,AbiType.DynamicBytes); - AbiEncoder abiEncoder = new AbiEncoder(); + private AbiSignature depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); + AbiEncoder abiEncoder = new(); public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 3b6bc7512ca..47f49379906 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -58,7 +58,7 @@ public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, Span span = new Span(result, i * sizeOfClass, sizeOfClass); request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); request.ValidatorPubkey = span.Slice(20, 48).ToArray(); - request.Amount = BitConverter.ToUInt64(span.Slice( 68, 8).ToArray().Reverse().ToArray()); // ToDo Optimize + request.Amount = BitConverter.ToUInt64(span.Slice(68, 8).ToArray().Reverse().ToArray()); // ToDo Optimize yield return request; } From 85cc58b1ad16bf39f8e9e7299b080fcb724f9bb4 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 8 May 2024 22:26:15 +0200 Subject: [PATCH 247/551] fix hashes --- .../AuRaMergeEngineModuleTests.cs | 8 ++++---- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 7b3165a3f69..94e728d5d8b 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -60,16 +60,16 @@ int ErrorCode [TestCase( "0xeb7146faceb5d2974ae7198a55335071b88083972d5f16a031b53b0928d8475b", - "0x0868af0d579748cf4c82b45abaaf31058b9538f476aefe43735a7d86b47b4ad4", - "0x01dcf226fff92c021431e8802f96875b0197f332d075aea01dc6d34f4af79f00", + "0x372f0b6751b91568f2bf642e51731557893f9879074cbbdf005ff31d5cd6a035", + "0xc784a9383eecff180a5fa06ec0a8956beefce39ae529d077e4fb47a8adf935bc", "0x7f9dace0b66620a2")] public override Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) => base.Should_process_block_as_expected_V4(latestValidHash, blockHash, stateRoot, payloadId); [TestCase( "0xe168b70ac8a6f7d90734010030801fbb2dcce03a657155c4024b36ba8d1e3926", - "0x3e604e45a9a74b66a7e03f828cc2597f0cb5f5e7dc50c9211be3a62fbcd6396d", - "0xdbd87b98a6be7d4e3f11ff8500c38a0736d9a5e7a47b5cb25628d37187a98cb9", + "0x310f4c8c949eb758faa4497e293bb18ef27a465af16553e5fc03752d3be19cc3", + "0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f", "0xcdd08163eccae523")] public override Task Should_process_block_as_expected_V2(string latestValidHash, string blockHash, string stateRoot, string payloadId) => base.Should_process_block_as_expected_V2(latestValidHash, blockHash, stateRoot, payloadId); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index fcbbe57fc51..9731a22d5bf 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -24,8 +24,8 @@ public partial class EngineModuleTests { [TestCase( "0x15d4d1f0b215b52458adeac09119798a7c35cebe4aba7f37f0014c7533e12b8a", - "0xb457b256c8bbfc7f0716a0df076b4f72a358594d795be2aab001795fd297acdb", - "0x58bb65def521baa8a64c1c9337d42da3885d7fbf85b8ad439cb179d480a64e98", + "0xaf99598b64692a1975ce80ae8fcc14a610aef517f77dc32f8cb2692cc08f129a", + "0x582281d590f52fdafc956c4ef42193fe1d7a1fd77a7bdc2b8b6a583235a2b087", "0xae9416e039eb988f")] public virtual async Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) From 7ea2ed26d5a2352f6847657c07eb29976289d820 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 8 May 2024 22:30:43 +0200 Subject: [PATCH 248/551] fix tests --- src/Nethermind/Nethermind.Trie/NodeStorage.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Trie/NodeStorage.cs b/src/Nethermind/Nethermind.Trie/NodeStorage.cs index 6f1291b2da9..c15dc6f2f38 100644 --- a/src/Nethermind/Nethermind.Trie/NodeStorage.cs +++ b/src/Nethermind/Nethermind.Trie/NodeStorage.cs @@ -192,8 +192,6 @@ public void Flush() } } - public void Set(Hash256? address, in TreePath path, in ValueHash256 hash, byte[] toArray, WriteFlags writeFlags = WriteFlags.None) - => Set(address, path, hash, toArray, writeFlags); private class WriteBatch : INodeStorage.WriteBatch { private readonly IWriteBatch _writeBatch; @@ -225,8 +223,5 @@ public void Remove(Hash256? address, in TreePath path, in ValueHash256 keccak) // Only delete half path key. DO NOT delete hash based key. _writeBatch.Remove(GetHalfPathNodeStoragePathSpan(stackalloc byte[StoragePathLength], address, path, keccak)); } - - public void Set(Hash256? address, in TreePath path, in ValueHash256 currentNodeKeccak, byte[] toArray, WriteFlags writeFlags) - => Set(address, path, currentNodeKeccak, toArray, writeFlags); } } From da6c8863b02ed60be222a95d4b7205a956a45997 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 13 May 2024 08:28:13 +0200 Subject: [PATCH 249/551] cosmetic --- src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs index 0e40757ee58..5cc8780472e 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs @@ -14,12 +14,12 @@ public class Prague : Cancun protected Prague() { Name = "Prague"; - IsEip6110Enabled = true; - IsEip7002Enabled = true; IsEip2537Enabled = true; IsEip2935Enabled = true; - Eip2935ContractAddress = Eip2935Constants.BlockHashHistoryAddress; IsEip3074Enabled = true; + IsEip6110Enabled = true; + IsEip7002Enabled = true; + Eip2935ContractAddress = Eip2935Constants.BlockHashHistoryAddress; } public new static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Prague()); From 2597b67206459706012db75724ca782f1d858def Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 14 May 2024 10:51:41 +0200 Subject: [PATCH 250/551] fix validatorPubKey ->validatorPublicKey --- .../ValidatorExit/WithdrawRequestsContract.cs | 2 +- .../Requests/WithdrawalRequestsProcessor.cs | 2 +- .../Nethermind.Core.Test/Builders/TestItem.cs | 12 ++++++------ .../Builders/WithdrawalRequestBuilder.cs | 2 +- .../Encoding/ConsensusRequestDecoderTests.cs | 8 ++++---- .../ConsensusRequests/WithdrawalRequest.cs | 4 ++-- .../WithdrawalRequestDecoder.cs | 8 ++++---- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs index a03761f5582..aafe88bc66e 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs @@ -57,7 +57,7 @@ WithdrawalRequest[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state WithdrawalRequest request = new(); Span span = new Span(result, i * sizeOfClass, sizeOfClass); request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); - request.ValidatorPubkey = span.Slice(20, 48).ToArray(); + request.ValidatorPublicKey = span.Slice(20, 48).ToArray(); request.Amount = BitConverter.ToUInt64(span.Slice(68, 8)); withdrawalRequests.Add(request); diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 47f49379906..912bcf16d21 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -57,7 +57,7 @@ public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, WithdrawalRequest request = new(); Span span = new Span(result, i * sizeOfClass, sizeOfClass); request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); - request.ValidatorPubkey = span.Slice(20, 48).ToArray(); + request.ValidatorPublicKey = span.Slice(20, 48).ToArray(); request.Amount = BitConverter.ToUInt64(span.Slice(68, 8).ToArray().Reverse().ToArray()); // ToDo Optimize yield return request; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index 8476be03419..feb96fd0dd8 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -108,12 +108,12 @@ public static Hash256 KeccakFromNumber(int i) public static Deposit DepositF_6Eth = new() { Index = 6, PubKey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray() }; - public static WithdrawalRequest WithdrawalRequestA = new() { SourceAddress = AddressA, ValidatorPubkey = PublicKeyA.Bytes }; - public static WithdrawalRequest WithdrawalRequestB = new() { SourceAddress = AddressB, ValidatorPubkey = PublicKeyB.Bytes }; - public static WithdrawalRequest WithdrawalRequestC = new() { SourceAddress = AddressC, ValidatorPubkey = PublicKeyC.Bytes }; - public static WithdrawalRequest WithdrawalRequestD = new() { SourceAddress = AddressD, ValidatorPubkey = PublicKeyD.Bytes }; - public static WithdrawalRequest WithdrawalRequestE = new() { SourceAddress = AddressE, ValidatorPubkey = PublicKeyE.Bytes }; - public static WithdrawalRequest WithdrawalRequestF = new() { SourceAddress = AddressF, ValidatorPubkey = PublicKeyF.Bytes }; + public static WithdrawalRequest WithdrawalRequestA = new() { SourceAddress = AddressA, ValidatorPublicKey = PublicKeyA.Bytes }; + public static WithdrawalRequest WithdrawalRequestB = new() { SourceAddress = AddressB, ValidatorPublicKey = PublicKeyB.Bytes }; + public static WithdrawalRequest WithdrawalRequestC = new() { SourceAddress = AddressC, ValidatorPublicKey = PublicKeyC.Bytes }; + public static WithdrawalRequest WithdrawalRequestD = new() { SourceAddress = AddressD, ValidatorPublicKey = PublicKeyD.Bytes }; + public static WithdrawalRequest WithdrawalRequestE = new() { SourceAddress = AddressE, ValidatorPublicKey = PublicKeyE.Bytes }; + public static WithdrawalRequest WithdrawalRequestF = new() { SourceAddress = AddressF, ValidatorPublicKey = PublicKeyF.Bytes }; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs index 3382371eda6..0cbefde6d4a 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs @@ -25,7 +25,7 @@ public WithdrawalRequestBuilder WithSourceAddress(Address sourceAddress) public WithdrawalRequestBuilder WithValidatorPubkey(byte[] validatorPubkey) { - TestObject.ValidatorPubkey = validatorPubkey; + TestObject.ValidatorPublicKey = validatorPubkey; return this; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs index cd8cc3e5a43..e3f973a7d1b 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs @@ -40,7 +40,7 @@ public void Roundtrip_withdrawalRequest() ConsensusRequest withdrawalRequest = new WithdrawalRequest() { SourceAddress = TestItem.AddressA, - ValidatorPubkey = validatorPubkey, + ValidatorPublicKey = validatorPubkey, Amount = int.MaxValue }; @@ -78,7 +78,7 @@ public void Should_decode_withdrawalRequest_with_ValueDecoderContext() ConsensusRequest withdrawalRequest = new WithdrawalRequest() { SourceAddress = TestItem.AddressA, - ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + ValidatorPublicKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue }; RlpStream stream = new(1024); @@ -115,7 +115,7 @@ public void Should_encode_withdrawalRequest_same_for_Rlp_Encode_and_DepositDecod ConsensusRequest withdrawalRequest = new WithdrawalRequest() { SourceAddress = TestItem.AddressA, - ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + ValidatorPublicKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue }; byte[] rlp1 = new ConsensusRequestDecoder().Encode(withdrawalRequest).Bytes; @@ -140,7 +140,7 @@ public void Should_encode_ConsensusRequests_Array() new WithdrawalRequest() { SourceAddress = TestItem.AddressA, - ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + ValidatorPublicKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue } }; diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs index ee2dc15775e..af676e875a2 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -21,7 +21,7 @@ public Address? SourceAddress set { SourceAddressField = value; } } - public byte[]? ValidatorPubkey + public byte[]? ValidatorPublicKey { get { return PubKeyField; } set { PubKeyField = value; } @@ -36,7 +36,7 @@ public ulong Amount public string ToString(string indentation) => @$"{indentation}{nameof(WithdrawalRequest)} {{{nameof(SourceAddress)}: {SourceAddress}, - {nameof(ValidatorPubkey)}: {ValidatorPubkey?.ToHexString()}, + {nameof(ValidatorPublicKey)}: {ValidatorPublicKey?.ToHexString()}, {nameof(Amount)}: {Amount}}}"; diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs index 900d1507250..8584c4d6bb9 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs @@ -13,7 +13,7 @@ public int GetLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); public int GetContentLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey) + + Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPublicKey) + Rlp.LengthOf(item.Amount); public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -26,7 +26,7 @@ public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = return new WithdrawalRequest() { SourceAddress = sourceAddress, - ValidatorPubkey = validatorPubkey, + ValidatorPublicKey = validatorPubkey, Amount = amount }; } @@ -41,7 +41,7 @@ public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpB return new WithdrawalRequest() { SourceAddress = sourceAddress, - ValidatorPubkey = validatorPubkey, + ValidatorPublicKey = validatorPubkey, Amount = amount }; } @@ -51,7 +51,7 @@ public void Encode(RlpStream stream, WithdrawalRequest item, RlpBehaviors rlpBeh int contentLength = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.SourceAddress); - stream.Encode(item.ValidatorPubkey); + stream.Encode(item.ValidatorPublicKey); stream.Encode(item.Amount); } From 59a05eebbb44ca073a66a770109797136ddf3676 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 14 May 2024 11:24:19 +0200 Subject: [PATCH 251/551] fix pubkey --- .../Requests/DepositsProcessor.cs | 2 +- .../Builders/DepositBuilder.cs | 2 +- .../Nethermind.Core.Test/Builders/TestItem.cs | 12 ++++++------ .../Encoding/ConsensusRequestDecoderTests.cs | 8 ++++---- .../Nethermind.Core/ConsensusRequests/Deposit.cs | 14 +++++++------- .../Properties/launchSettings.json | 2 +- .../Nethermind.Serialization.Rlp/DepositDecoder.cs | 8 ++++---- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index f37d9bd830d..80578cf578a 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -34,7 +34,7 @@ public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, I var newDeposit = new Deposit() { - PubKey = (byte[])result[0], + Pubkey = (byte[])result[0], WithdrawalCredentials = (byte[])result[1], Amount = ((byte[])result[2]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), // ToDo not optimal - optimize Signature = (byte[])result[3], diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs index 5b4c1fbe723..48a06b77f8e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs @@ -38,7 +38,7 @@ public DepositBuilder WithSignature(byte[] signature) } public DepositBuilder WithPublicKey(byte[] pubKey) { - TestObject.PubKey = pubKey; + TestObject.Pubkey = pubKey; return this; } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index feb96fd0dd8..57ebb05c318 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -100,12 +100,12 @@ public static Hash256 KeccakFromNumber(int i) public static Withdrawal WithdrawalE_5Eth = new() { Address = AddressE, Index = 5, ValidatorIndex = 2005, AmountInGwei = 5_000_000_000 }; public static Withdrawal WithdrawalF_6Eth = new() { Address = AddressF, Index = 6, ValidatorIndex = 2006, AmountInGwei = 6_000_000_000 }; - public static Deposit DepositA_1Eth = new() { Index = 1, PubKey = PublicKeyA.Bytes, Amount = 1_000_000_000, WithdrawalCredentials = AddressA.Bytes, Signature = KeccakA.Bytes.ToArray() }; - public static Deposit DepositB_2Eth = new() { Index = 2, PubKey = PublicKeyB.Bytes, Amount = 2_000_000_000, WithdrawalCredentials = AddressB.Bytes, Signature = KeccakB.Bytes.ToArray() }; - public static Deposit DepositC_3Eth = new() { Index = 3, PubKey = PublicKeyC.Bytes, Amount = 3_000_000_000, WithdrawalCredentials = AddressC.Bytes, Signature = KeccakC.Bytes.ToArray() }; - public static Deposit DepositD_4Eth = new() { Index = 4, PubKey = PublicKeyD.Bytes, Amount = 4_000_000_000, WithdrawalCredentials = AddressD.Bytes, Signature = KeccakD.Bytes.ToArray() }; - public static Deposit DepositE_5Eth = new() { Index = 5, PubKey = PublicKeyE.Bytes, Amount = 5_000_000_000, WithdrawalCredentials = AddressE.Bytes, Signature = KeccakE.Bytes.ToArray() }; - public static Deposit DepositF_6Eth = new() { Index = 6, PubKey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray() }; + public static Deposit DepositA_1Eth = new() { Index = 1, Pubkey = PublicKeyA.Bytes, Amount = 1_000_000_000, WithdrawalCredentials = AddressA.Bytes, Signature = KeccakA.Bytes.ToArray() }; + public static Deposit DepositB_2Eth = new() { Index = 2, Pubkey = PublicKeyB.Bytes, Amount = 2_000_000_000, WithdrawalCredentials = AddressB.Bytes, Signature = KeccakB.Bytes.ToArray() }; + public static Deposit DepositC_3Eth = new() { Index = 3, Pubkey = PublicKeyC.Bytes, Amount = 3_000_000_000, WithdrawalCredentials = AddressC.Bytes, Signature = KeccakC.Bytes.ToArray() }; + public static Deposit DepositD_4Eth = new() { Index = 4, Pubkey = PublicKeyD.Bytes, Amount = 4_000_000_000, WithdrawalCredentials = AddressD.Bytes, Signature = KeccakD.Bytes.ToArray() }; + public static Deposit DepositE_5Eth = new() { Index = 5, Pubkey = PublicKeyE.Bytes, Amount = 5_000_000_000, WithdrawalCredentials = AddressE.Bytes, Signature = KeccakE.Bytes.ToArray() }; + public static Deposit DepositF_6Eth = new() { Index = 6, Pubkey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray() }; public static WithdrawalRequest WithdrawalRequestA = new() { SourceAddress = AddressA, ValidatorPublicKey = PublicKeyA.Bytes }; diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs index e3f973a7d1b..56da2ad0fc1 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs @@ -20,7 +20,7 @@ public void Roundtrip_deposit() ConsensusRequest deposit = new Deposit() { Index = long.MaxValue, - PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue @@ -56,7 +56,7 @@ public void Should_decode_deposit_with_ValueDecoderContext() ConsensusRequest deposit = new Deposit() { Index = long.MaxValue, - PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue @@ -98,7 +98,7 @@ public void Should_encode_deposit_same_for_Rlp_Encode_and_DepositDecoder_Encode( ConsensusRequest deposit = new Deposit() { Index = long.MaxValue, - PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue @@ -132,7 +132,7 @@ public void Should_encode_ConsensusRequests_Array() new Deposit() { Index = long.MaxValue, - PubKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs index 774ae67383b..aff4e517adb 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -15,7 +15,7 @@ public Deposit() { Type = ConsensusRequestsType.Deposit; } - public byte[]? PubKey + public byte[]? Pubkey { get { return PubKeyField; } set { PubKeyField = value; } @@ -45,12 +45,12 @@ public ulong? Index } public override string ToString() => ToString(string.Empty); - public string ToString(string indentation) => @$"{indentation}{nameof(Deposit)} - {{{nameof(Index)}: {Index}, - {nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, - {nameof(Amount)}: {Amount}, - {nameof(Signature)}: {Signature?.ToHexString()}, - {nameof(PubKey)}: {PubKey?.ToHexString()}}}"; + public string ToString(string indentation) => @$"{indentation}{nameof(Deposit)} + {{{nameof(Index)}: {Index}, + {nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, + {nameof(Amount)}: {Amount}, + {nameof(Signature)}: {Signature?.ToHexString()}, + {nameof(Pubkey)}: {Pubkey?.ToHexString()}}}"; } diff --git a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json index f1b575fe5af..2c5c4f7df6d 100644 --- a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json +++ b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json @@ -86,7 +86,7 @@ }, "Holesky": { "commandName": "Project", - "commandLineArgs": "-c holesky -dd .data", + "commandLineArgs": "-c holesky -dd .data --JsonRpc.UnsecureDevNoRpcAuthentication true", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs index b9cfdb4cdb8..9fdc2a3bd1e 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -22,7 +22,7 @@ public class DepositDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpValueDecoder - Rlp.LengthOf(item.PubKey) + + Rlp.LengthOf(item.Pubkey) + Rlp.LengthOf(item.WithdrawalCredentials) + Rlp.LengthOf(item.Amount) + Rlp.LengthOf(item.Signature) + From 60cc1b79f194adf2097edad145cd866f6dc24714 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 15 May 2024 15:24:51 +0200 Subject: [PATCH 252/551] fix DepositProcessorTests --- .../Nethermind.Consensus.Test/DepositProcessorTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs index cee04db26a2..567c075d02c 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs @@ -22,7 +22,7 @@ public void CanParseDeposit() { Amount = 32000000000, Index = 0, - PubKey = Bytes.FromHexString( + Pubkey = Bytes.FromHexString( "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"), Signature = Bytes.FromHexString( "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003"), @@ -36,7 +36,7 @@ public void CanParseDeposit() var newDeposit = new Deposit() { - PubKey = (byte[])result[0], + Pubkey = (byte[])result[0], WithdrawalCredentials = (byte[])result[1], Amount = ((byte[])result[2]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), Signature = (byte[])result[3], From 283f63bd6a0bfb5d9cd946c866396e1cd8750ddd Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 16 May 2024 20:49:03 +0200 Subject: [PATCH 253/551] fix AUTH call gas costs --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index d18a1fde411..b219520dfb3 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2202,14 +2202,6 @@ private EvmExceptionType InstructionAuth(EvmState vmState, if (!stack.PopUInt256(out UInt256 offset)) return EvmExceptionType.StackUnderflow; if (!stack.PopUInt256(out UInt256 length)) return EvmExceptionType.StackUnderflow; - - if (_state.IsContract(authority)) - { - vmState.Authorized = null; - stack.PushUInt256(0); - return EvmExceptionType.None; - } - gasAvailable -= GasCostOf.Auth; if (!UpdateMemoryCost(vmState, ref gasAvailable, offset, length)) @@ -2218,6 +2210,13 @@ private EvmExceptionType InstructionAuth(EvmState vmState, if (!ChargeAccountAccessGas(ref gasAvailable, vmState, authority, spec)) return EvmExceptionType.OutOfGas; + if (_state.IsContract(authority)) + { + vmState.Authorized = null; + stack.PushUInt256(0); + return EvmExceptionType.None; + } + ReadOnlySpan memData = vmState.Memory.Load(in offset, length).Span; byte yParity = 0; From 67ab80f68ae7f364ed8a5f064f9a9f5ff63a2ab7 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 5 Jun 2024 17:22:55 +0200 Subject: [PATCH 254/551] RLP encoding --- .../Builders/TransactionBuilder.cs | 13 ++ .../Encoding/TxDecoderTests.cs | 29 ++++ src/Nethermind/Nethermind.Core/Transaction.cs | 4 + .../Nethermind.Core/TxContractCode.cs | 25 ++++ src/Nethermind/Nethermind.Core/TxType.cs | 1 + .../Eip7702/TxContractCodeDecoder.cs | 126 ++++++++++++++++++ .../Nethermind.Serialization.Rlp/TxDecoder.cs | 69 ++++++++++ 7 files changed, 267 insertions(+) create mode 100644 src/Nethermind/Nethermind.Core/TxContractCode.cs create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index a06da3f81ef..7df33b43d2e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -2,12 +2,14 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; using System.Linq; using Nethermind.Core.Crypto; using Nethermind.Core.Eip2930; using Nethermind.Crypto; using Nethermind.Int256; using Nethermind.Logging; +using Newtonsoft.Json.Linq; namespace Nethermind.Core.Test.Builders { @@ -218,6 +220,17 @@ public TransactionBuilder WithShardBlobTxTypeAndFields(int blobCount = 1, boo return this; } + public TransactionBuilder WithContractCode(TxContractCode contractCode) + { + TestObjectInternal.ContractCodes = TestObjectInternal.ContractCodes != null ? [.. TestObjectInternal.ContractCodes, contractCode] : [contractCode]; + return this; + } + public TransactionBuilder WithContractCode(IEnumerable contractCodes) + { + TestObjectInternal.ContractCodes = contractCodes.ToArray(); + return this; + } + public TransactionBuilder With(Action anyChange) { anyChange(TestObjectInternal); diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs index 3fbfd883789..71485dcbad9 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs @@ -61,6 +61,13 @@ public class TxDecoderTests .WithGasPrice(0) .WithChainId(1559) .SignedAndResolved(), "EIP 1559 second test case"); + yield return (Build.A.Transaction + .WithMaxFeePerGas(2.GWei()) + .WithType(TxType.ContractCode) + .WithGasPrice(0) + .WithChainId(1559) + .WithContractCode([new TxContractCode([0x0], UInt256.Zero, UInt256.Zero, UInt256.Zero)]) + .SignedAndResolved(), "EIP 7702 first test case"); } public static IEnumerable<(Transaction, string)> TestCaseSource() @@ -375,5 +382,27 @@ public void Duplicate_storage_keys_result_in_different_hashes() new Hash256("0x0a956694228afe4577bd94fcf8a3aa8544bbadcecfe0d66ccad8ec7ae56c025f") ); } + + [Test] + public void TxContractCodeEncodeAndDecode() + { + Transaction tx = Build.A.Transaction + .WithMaxFeePerGas(2.GWei()) + .WithType(TxType.ContractCode) + .WithGasPrice(0) + .WithChainId(1559) + .WithContractCode(new TxContractCode([0x0], UInt256.Zero, UInt256.Zero, UInt256.Zero)) + .WithContractCode(new TxContractCode([0x1], UInt256.MaxValue, UInt256.MaxValue, UInt256.MaxValue)) + .SignedAndResolved().TestObject; + RlpStream rlpStream = new(_txDecoder.GetLength(tx, RlpBehaviors.None)); + _txDecoder.Encode(rlpStream, tx); + rlpStream.Position = 0; + Transaction? decoded = _txDecoder.Decode(rlpStream); + decoded!.SenderAddress = + new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance).RecoverAddress(decoded); + + Assert.That(tx.Hash, Is.EqualTo(decoded.CalculateHash())); + } + } } diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index 1371eba41de..6fde1e7eed7 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -160,6 +160,8 @@ private void ClearPreHashInternal() public object? NetworkWrapper { get; set; } + public TxContractCode[]? ContractCodes { get; set; } // https://eips.ethereum.org/EIPS/eip-7702 + /// /// Service transactions are free. The field added to handle baseFee validation after 1559 /// @@ -262,6 +264,7 @@ public bool Return(Transaction obj) obj.IsServiceTransaction = default; obj.PoolIndex = default; obj._size = default; + obj.ContractCodes = default; return true; } @@ -292,6 +295,7 @@ public void CopyTo(Transaction tx) tx.IsServiceTransaction = IsServiceTransaction; tx.PoolIndex = PoolIndex; tx._size = _size; + tx.ContractCodes = ContractCodes; } } diff --git a/src/Nethermind/Nethermind.Core/TxContractCode.cs b/src/Nethermind/Nethermind.Core/TxContractCode.cs new file mode 100644 index 00000000000..18364c4babe --- /dev/null +++ b/src/Nethermind/Nethermind.Core/TxContractCode.cs @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Int256; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Nethermind.Core; +public class TxContractCode +{ + public TxContractCode(byte[]? contractCode, UInt256 yParity, UInt256 r, UInt256 s) + { + ContractCode = contractCode; + YParity = yParity; + R = r; + S = s; + } + public byte[]? ContractCode { get; } + public UInt256 YParity { get; } + public UInt256 R { get; } + public UInt256 S { get; } +} diff --git a/src/Nethermind/Nethermind.Core/TxType.cs b/src/Nethermind/Nethermind.Core/TxType.cs index 9257754dab6..d824f2dc758 100644 --- a/src/Nethermind/Nethermind.Core/TxType.cs +++ b/src/Nethermind/Nethermind.Core/TxType.cs @@ -9,6 +9,7 @@ public enum TxType : byte AccessList = 1, EIP1559 = 2, Blob = 3, + ContractCode = 4, DepositTx = 0x7E, } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs new file mode 100644 index 00000000000..158c2746ae4 --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs @@ -0,0 +1,126 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Eip2930; +using Nethermind.Core; +using Nethermind.Int256; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Nethermind.Serialization.Rlp.Eip7702; +public class TxContractCodeDecoder : IRlpStreamDecoder, IRlpValueDecoder +{ + public TxContractCode[]? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (rlpStream.IsNextItemNull()) + { + rlpStream.ReadByte(); + return null; + } + + int outerLength = rlpStream.ReadSequenceLength(); + + int check = rlpStream.Position + outerLength; + + List result = new List(); + + while (rlpStream.Position < check) + { + //TODO check what is valid for the fields here + byte[] contractCode = rlpStream.DecodeByteArray(); + UInt256 yParity = rlpStream.DecodeUInt256(); + UInt256 r = rlpStream.DecodeUInt256(); + UInt256 s = rlpStream.DecodeUInt256(); + result.Add(new TxContractCode(contractCode, yParity, r, s)); + } + + if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + { + rlpStream.Check(check); + } + return result.ToArray(); + } + + public TxContractCode[]? Decode( + ref Rlp.ValueDecoderContext decoderContext, + RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (decoderContext.IsNextItemNull()) + { + decoderContext.ReadByte(); + return null; + } + + int outerLength = decoderContext.ReadSequenceLength(); + + int check = decoderContext.Position + outerLength; + + List result = new List(); + + while (decoderContext.Position < check) + { + //TODO check what is valid for the fields here + byte[] contractCode = decoderContext.DecodeByteArray(); + UInt256 yParity = decoderContext.DecodeUInt256(); + UInt256 r = decoderContext.DecodeUInt256(); + UInt256 s = decoderContext.DecodeUInt256(); + result.Add(new TxContractCode(contractCode, yParity, r, s)); + } + + if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + { + decoderContext.Check(check); + } + return result.ToArray(); + } + + public void Encode(RlpStream stream, TxContractCode[]? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (item is null) + { + stream.WriteByte(Rlp.NullObjectByte); + return; + } + + int contentLength = GetContentLength(item); + stream.StartSequence(contentLength); + foreach (TxContractCode contractCode in item) + { + if (contractCode.ContractCode == null) + { + stream.WriteByte(Rlp.NullObjectByte); + } + else + { + stream.Encode(contractCode.ContractCode); + } + stream.Encode(contractCode.YParity); + stream.Encode(contractCode.R); + stream.Encode(contractCode.S); + } + } + + public int GetLength(TxContractCode[]? contractCodes, RlpBehaviors rlpBehaviors) + { + if (contractCodes is null) + { + return Rlp.OfEmptySequence.Length; + } + + int contentLength = GetContentLength(contractCodes); + return Rlp.LengthOfSequence(contentLength); + } + + private static int GetContentLength(ReadOnlySpan contractCodes) + { + int total = 0; + foreach (var code in contractCodes) + { + total += Rlp.LengthOf(code.ContractCode) + Rlp.LengthOf(code.YParity) + Rlp.LengthOf(code.R) + Rlp.LengthOf(code.S); + } + return total; + } +} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs index 66059c44de4..047b4ccb79e 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs @@ -2,11 +2,16 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; +using System.IO; using Microsoft.Extensions.ObjectPool; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Core.Eip2930; using Nethermind.Core.Extensions; +using Nethermind.Int256; using Nethermind.Serialization.Rlp.Eip2930; +using Nethermind.Serialization.Rlp.Eip7702; namespace Nethermind.Serialization.Rlp { @@ -40,6 +45,7 @@ public class TxDecoder : { private readonly AccessListDecoder _accessListDecoder = new(); private readonly bool _lazyHash; + private TxContractCodeDecoder _txContractCodeDecoder = new(); protected TxDecoder(bool lazyHash = true) { @@ -90,6 +96,9 @@ protected virtual T NewTx() case TxType.Blob: DecodeShardBlobPayloadWithoutSig(transaction, rlpStream, rlpBehaviors); break; + case TxType.ContractCode: + DecodeContractCodeWithoutSig(transaction, rlpStream, rlpBehaviors); + break; case TxType.DepositTx: TxDecoder.DecodeDepositPayloadWithoutSig(transaction, rlpStream, rlpBehaviors); break; @@ -307,6 +316,18 @@ private static void DecodeShardBlobNetworkPayload(T transaction, ref Rlp.ValueDe byte[][] proofs = decoderContext.DecodeByteArrays(); transaction.NetworkWrapper = new ShardBlobNetworkWrapper(blobs, commitments, proofs); } + private void DecodeContractCodeWithoutSig(T transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors) + { + transaction.ChainId = decoderContext.DecodeULong(); + transaction.Nonce = decoderContext.DecodeUInt256(); + transaction.GasPrice = decoderContext.DecodeUInt256(); // gas premium + transaction.DecodedMaxFeePerGas = decoderContext.DecodeUInt256(); + transaction.GasLimit = decoderContext.DecodeLong(); + transaction.To = decoderContext.DecodeAddress(); + transaction.Data = decoderContext.DecodeByteArray(); + transaction.AccessList = _accessListDecoder.Decode(ref decoderContext, rlpBehaviors); + transaction.ContractCodes = _txContractCodeDecoder.Decode(ref decoderContext, rlpBehaviors); + } private static void DecodeDepositPayloadWithoutSig(T transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors) { @@ -320,6 +341,19 @@ private static void DecodeDepositPayloadWithoutSig(T transaction, ref Rlp.ValueD transaction.Data = decoderContext.DecodeByteArray(); } + private void DecodeContractCodeWithoutSig(T transaction, RlpStream rlpStream, RlpBehaviors rlpBehaviors) + { + transaction.ChainId = rlpStream.DecodeULong(); + transaction.Nonce = rlpStream.DecodeUInt256(); + transaction.GasPrice = rlpStream.DecodeUInt256(); // gas premium + transaction.DecodedMaxFeePerGas = rlpStream.DecodeUInt256(); + transaction.GasLimit = rlpStream.DecodeLong(); + transaction.To = rlpStream.DecodeAddress(); + transaction.Data = rlpStream.DecodeByteArray(); + transaction.AccessList = _accessListDecoder.Decode(rlpStream, rlpBehaviors); + transaction.ContractCodes = _txContractCodeDecoder.Decode(rlpStream, rlpBehaviors); + } + private static void EncodeLegacyWithoutPayload(T item, RlpStream stream) { stream.Encode(item.Nonce); @@ -370,6 +404,19 @@ private void EncodeShardBlobPayloadWithoutPayload(T item, RlpStream stream, RlpB stream.Encode(item.BlobVersionedHashes); } + private void EncodeContractCodeWithoutPayload(T item, RlpStream stream, RlpBehaviors rlpBehaviors) + { + stream.Encode(item.ChainId ?? 0); + stream.Encode(item.Nonce); + stream.Encode(item.GasPrice); // gas premium + stream.Encode(item.DecodedMaxFeePerGas); + stream.Encode(item.GasLimit); + stream.Encode(item.To); + stream.Encode(item.Data); + _accessListDecoder.Encode(stream, item.AccessList, rlpBehaviors); + _txContractCodeDecoder.Encode(stream, item.ContractCodes, rlpBehaviors); + } + private static void EncodeDepositTxPayloadWithoutPayload(T item, RlpStream stream) { stream.Encode(item.SourceHash); @@ -461,6 +508,9 @@ public void Decode(ref Rlp.ValueDecoderContext decoderContext, ref T? transactio case TxType.Blob: DecodeShardBlobPayloadWithoutSig(transaction, ref decoderContext, rlpBehaviors); break; + case TxType.ContractCode: + DecodeContractCodeWithoutSig(transaction, ref decoderContext, rlpBehaviors); + break; case TxType.DepositTx: TxDecoder.DecodeDepositPayloadWithoutSig(transaction, ref decoderContext, rlpBehaviors); break; @@ -659,6 +709,9 @@ private void EncodeTx(RlpStream stream, T? item, RlpBehaviors rlpBehaviors = Rlp case TxType.Blob: EncodeShardBlobPayloadWithoutPayload(item, stream, rlpBehaviors); break; + case TxType.ContractCode: + EncodeContractCodeWithoutPayload(item, stream, rlpBehaviors); + break; case TxType.DepositTx: TxDecoder.EncodeDepositTxPayloadWithoutPayload(item, stream); break; @@ -767,6 +820,19 @@ private int GetShardBlobContentLength(T item) + Rlp.LengthOf(item.BlobVersionedHashes); } + private int GetContractCodeLength(T item) + { + return Rlp.LengthOf(item.Nonce) + + Rlp.LengthOf(item.GasPrice) // gas premium + + Rlp.LengthOf(item.DecodedMaxFeePerGas) + + Rlp.LengthOf(item.GasLimit) + + Rlp.LengthOf(item.To) + + Rlp.LengthOf(item.Data) + + Rlp.LengthOf(item.ChainId ?? 0) + + _accessListDecoder.GetLength(item.AccessList, RlpBehaviors.None) + + _txContractCodeDecoder.GetLength(item.ContractCodes, RlpBehaviors.None); + } + private static int GetShardBlobNetworkWrapperContentLength(T item, int txContentLength) { ShardBlobNetworkWrapper networkWrapper = item.NetworkWrapper as ShardBlobNetworkWrapper; @@ -807,6 +873,9 @@ private int GetContentLength(T item, bool forSigning, bool isEip155Enabled = fal case TxType.Blob: contentLength = GetShardBlobContentLength(item); break; + case TxType.ContractCode: + contentLength = GetContractCodeLength(item); + break; case TxType.DepositTx: contentLength = TxDecoder.GetDepositTxContentLength(item); break; From 28430857bb322de017b36cecc6479f376b144ee8 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 5 Jun 2024 23:57:45 +0200 Subject: [PATCH 255/551] start test --- .../Encoding/TxDecoderTests.cs | 6 +- .../Nethermind.Core/Eip7702Constants.cs | 14 ++ .../Nethermind.Core/Specs/IReleaseSpec.cs | 7 + .../Nethermind.Core/TxContractCode.cs | 13 +- .../Nethermind.Evm.Test/Eip7702Tests.cs | 144 ++++++++++++++++++ .../VirtualMachineTestsBase.cs | 37 +++-- .../Nethermind.Evm/IntrinsicGasCalculator.cs | 27 ++++ .../Eip7702/TxContractCodeDecoder.cs | 18 ++- 8 files changed, 241 insertions(+), 25 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core/Eip7702Constants.cs create mode 100644 src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs index 71485dcbad9..04a08b92775 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs @@ -66,7 +66,7 @@ public class TxDecoderTests .WithType(TxType.ContractCode) .WithGasPrice(0) .WithChainId(1559) - .WithContractCode([new TxContractCode([0x0], UInt256.Zero, UInt256.Zero, UInt256.Zero)]) + .WithContractCode([new TxContractCode([0x0], ulong.MinValue, [0x0], [0x0])]) .SignedAndResolved(), "EIP 7702 first test case"); } @@ -391,8 +391,8 @@ public void TxContractCodeEncodeAndDecode() .WithType(TxType.ContractCode) .WithGasPrice(0) .WithChainId(1559) - .WithContractCode(new TxContractCode([0x0], UInt256.Zero, UInt256.Zero, UInt256.Zero)) - .WithContractCode(new TxContractCode([0x1], UInt256.MaxValue, UInt256.MaxValue, UInt256.MaxValue)) + .WithContractCode(new TxContractCode([0x0], ulong.MinValue, [0x0], [0x0])) + .WithContractCode(new TxContractCode([0x1], ulong.MinValue, [0xff, 0xff, 0xff], [0xff, 0xff, 0xff])) .SignedAndResolved().TestObject; RlpStream rlpStream = new(_txDecoder.GetLength(tx, RlpBehaviors.None)); _txDecoder.Encode(rlpStream, tx); diff --git a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs new file mode 100644 index 00000000000..d3b6b7b6ca9 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs @@ -0,0 +1,14 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Nethermind.Core; +public static class Eip7702Constants +{ + public static byte Magic => 4; +} diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index c34e6933f53..2a150e34a09 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -279,6 +279,11 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// bool IsEip6780Enabled { get; } + /// + /// Transactions that allows code for EOA temporarily + /// + bool IsEip7702Enabled { get; } + /// /// Should transactions be validated against chainId. /// @@ -361,5 +366,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool IsBlockHashInStateAvailable => IsEip2935Enabled; public bool MCopyIncluded => IsEip5656Enabled; public bool BlobBaseFeeEnabled => IsEip4844Enabled; + + bool UseContractCode => IsEip7702Enabled; } } diff --git a/src/Nethermind/Nethermind.Core/TxContractCode.cs b/src/Nethermind/Nethermind.Core/TxContractCode.cs index 18364c4babe..7c22ca18961 100644 --- a/src/Nethermind/Nethermind.Core/TxContractCode.cs +++ b/src/Nethermind/Nethermind.Core/TxContractCode.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using Nethermind.Core.Crypto; using Nethermind.Int256; using System; using System.Collections.Generic; @@ -11,7 +12,11 @@ namespace Nethermind.Core; public class TxContractCode { - public TxContractCode(byte[]? contractCode, UInt256 yParity, UInt256 r, UInt256 s) + public TxContractCode(byte[]? contractCode, Signature sig) : this(contractCode, sig.V, sig.R, sig.S) + { + + } + public TxContractCode(byte[]? contractCode, ulong yParity, byte[] r, byte[] s) { ContractCode = contractCode; YParity = yParity; @@ -19,7 +24,7 @@ public TxContractCode(byte[]? contractCode, UInt256 yParity, UInt256 r, UInt256 S = s; } public byte[]? ContractCode { get; } - public UInt256 YParity { get; } - public UInt256 R { get; } - public UInt256 S { get; } + public ulong YParity { get; } + public byte[] R { get; } + public byte[] S { get; } } diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs new file mode 100644 index 00000000000..fc5564d6c64 --- /dev/null +++ b/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs @@ -0,0 +1,144 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.Crypto; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Specs; +using Newtonsoft.Json.Linq; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Nethermind.Evm.Test; +public class Eip7702Tests : VirtualMachineTestsBase +{ + protected override ForkActivation Activation => MainnetSpecProvider.PragueActivation; + protected override ulong Timestamp => MainnetSpecProvider.PragueBlockTimestamp; + + protected override TestAllTracerWithOutput CreateTracer() => new() { IsTracingAccess = false }; + + public static IEnumerable AuthorityCombinationCases() + { + yield return new object[] { TestItem.PrivateKeyF, TestItem.AddressF, 0x1 }; + yield return new object[] { TestItem.PrivateKeyE, TestItem.AddressE, 0x1 }; + yield return new object[] { TestItem.PrivateKeyF, TestItem.AddressE, 0x0 }; + yield return new object[] { TestItem.PrivateKeyE, TestItem.AddressF, 0x0 }; + } + + [TestCaseSource(nameof(AuthorityCombinationCases))] + public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(PrivateKey signer, Address authority, int expected) + { + byte[] code = Prepare.EvmCode + //Return the result of Auth + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE8) + .PushSingle(1) + .Op(Instruction.PUSH0) + .Op(Instruction.RETURN) + .Done; + + Signature sig = CreateContractCodeSignedMessage(signer, code); + + Transaction tx = Build.A.Transaction + .WithType(TxType.ContractCode) + .WithContractCode(new TxContractCode(code, sig)) + .WithGasLimit(40000) + .WithGasPrice(1) + .WithValue(0) + .WithNonce(TestState.GetNonce(signer.Address)) + .To(TestItem.AddressB) + .SignedAndResolved(signer) + .TestObject; + + var result = Execute(tx); + + Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); + } + + public static IEnumerable BadMessageDataCases() + { + yield return new object[] + { + TestContext.CurrentContext.Random.NextByte(5, byte.MaxValue), + ((UInt256)1).ToBigEndian().PadLeft(32), + new UInt256(0).PaddedBytes(32), + SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) + }; + yield return new object[] + { + Eip7702Constants.Magic, + new UInt256(12999999).PaddedBytes(32), + new UInt256(0).PaddedBytes(32), + SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) + }; + yield return new object[] + { + Eip7702Constants.Magic, + new UInt256(1).PaddedBytes(32), + new UInt256(99999999999).PaddedBytes(32), + SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) + }; + yield return new object[] + { + Eip7702Constants.Magic, + new UInt256(1).PaddedBytes(32), + new UInt256(0).PaddedBytes(32), + TestItem.AddressF.Bytes.PadLeft(32) + }; + } + + [TestCaseSource(nameof(BadMessageDataCases))] + public void ExecuteAuth_OneOfMessageArgsIsWrong_ReturnsZero(byte magicNumber, byte[] chainId, byte[] nonce, byte[] address) + { + PrivateKey signer = TestItem.PrivateKeyF; + + byte[] code = Prepare.EvmCode + + //Return the result of Auth + .Op(Instruction.PUSH0) + .Op(Instruction.MSTORE8) + .PushSingle(1) + .Op(Instruction.PUSH0) + .Op(Instruction.RETURN) + .Done; + + var data = CreateContractCodeSignedMessage(signer, code); + + var result = Execute(code); + + Assert.That(result.ReturnValue[0], Is.EqualTo(0)); + } + + private Signature CreateContractCodeSignedMessage(PrivateKey signer, byte[] contractCode) + { + return CreateContractCodeSignedMessage( + signer, + Eip7702Constants.Magic, + contractCode + ); + } + + private Signature CreateContractCodeSignedMessage(PrivateKey signer, byte magicNumber, byte[] contractCode) + { + List msg = + [ + magicNumber, + .. contractCode, + ]; + + Hash256 msgDigest = Keccak.Compute(msg.ToArray()); + EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); + + return ecdsa.Sign(signer, msgDigest); + } +} + diff --git a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs index 5985f35d3d5..e9999aae9f1 100644 --- a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs +++ b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs @@ -114,10 +114,22 @@ protected TestAllTracerWithOutput Execute(ForkActivation activation, params byte return tracer; } + protected TestAllTracerWithOutput Execute(ForkActivation activation, Transaction tx) + { + (Block block, _) = PrepareTx(activation, 100000, null); + TestAllTracerWithOutput tracer = CreateTracer(); + _processor.Execute(tx, block.Header, tracer); + return tracer; + } + protected TestAllTracerWithOutput Execute(params byte[] code) { return Execute(Activation, code); } + protected TestAllTracerWithOutput Execute(Transaction tx) + { + return Execute(Activation, tx); + } protected virtual TestAllTracerWithOutput CreateTracer() => new(); @@ -187,7 +199,8 @@ protected TestAllTracerWithOutput Execute(ForkActivation activation, long gasLim int value = 1, long blockGasLimit = DefaultBlockGasLimit, byte[][]? blobVersionedHashes = null, - ulong excessBlobGas = 0) + ulong excessBlobGas = 0, + Transaction transaction = null) { senderRecipientAndMiner ??= SenderRecipientAndMiner.Default; @@ -217,15 +230,19 @@ protected TestAllTracerWithOutput Execute(ForkActivation activation, long gasLim TestState.CommitTree(0); GetLogManager().GetClassLogger().Debug("Committed initial tree"); - Transaction transaction = Build.A.Transaction - .WithGasLimit(gasLimit) - .WithGasPrice(1) - .WithValue(value) - .WithBlobVersionedHashes(blobVersionedHashes) - .WithNonce(TestState.GetNonce(senderRecipientAndMiner.Sender)) - .To(senderRecipientAndMiner.Recipient) - .SignedAndResolved(_ethereumEcdsa, senderRecipientAndMiner.SenderKey) - .TestObject; + if (transaction == null) + { + transaction = + Build.A.Transaction + .WithGasLimit(gasLimit) + .WithGasPrice(1) + .WithValue(value) + .WithBlobVersionedHashes(blobVersionedHashes) + .WithNonce(TestState.GetNonce(senderRecipientAndMiner.Sender)) + .To(senderRecipientAndMiner.Recipient) + .SignedAndResolved(_ethereumEcdsa, senderRecipientAndMiner.SenderKey) + .TestObject; + } Block block = BuildBlock(activation, senderRecipientAndMiner, transaction, blockGasLimit, excessBlobGas); return (block, transaction); diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index 7742bcfc5ba..e08a1a709c1 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -80,4 +80,31 @@ private static long AccessListCost(Transaction transaction, IReleaseSpec release return accessListCost; } + + private static long ContractCodeCost(Transaction transaction, IReleaseSpec releaseSpec) + { + TxContractCode[]? contractCodes = transaction.ContractCodes; + long contractCodeCost = 0; + if (accessList is not null) + { + if (!releaseSpec.UseTxAccessLists) + { + throw new InvalidDataException( + $"Transaction with an access list received within the context of {releaseSpec.Name}. Eip-2930 is not enabled."); + } + + if (accessList.IsEmpty) return contractCodeCost; + + foreach ((Address address, AccessList.StorageKeysEnumerable storageKeys) entry in accessList) + { + contractCodeCost += GasCostOf.AccessAccountListEntry; + foreach (UInt256 _ in entry.storageKeys) + { + contractCodeCost += GasCostOf.AccessStorageListEntry; + } + } + } + + return contractCodeCost; + } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs index 158c2746ae4..6555cd03355 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs @@ -31,10 +31,11 @@ public class TxContractCodeDecoder : IRlpStreamDecoder, IRlpV { //TODO check what is valid for the fields here byte[] contractCode = rlpStream.DecodeByteArray(); - UInt256 yParity = rlpStream.DecodeUInt256(); - UInt256 r = rlpStream.DecodeUInt256(); - UInt256 s = rlpStream.DecodeUInt256(); - result.Add(new TxContractCode(contractCode, yParity, r, s)); + result.Add(new TxContractCode( + contractCode, + rlpStream.DecodeULong(), + rlpStream.DecodeByteArray(), + rlpStream.DecodeByteArray())); } if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) @@ -64,10 +65,11 @@ public class TxContractCodeDecoder : IRlpStreamDecoder, IRlpV { //TODO check what is valid for the fields here byte[] contractCode = decoderContext.DecodeByteArray(); - UInt256 yParity = decoderContext.DecodeUInt256(); - UInt256 r = decoderContext.DecodeUInt256(); - UInt256 s = decoderContext.DecodeUInt256(); - result.Add(new TxContractCode(contractCode, yParity, r, s)); + result.Add(new TxContractCode( + contractCode, + decoderContext.DecodeULong(), + decoderContext.DecodeByteArray(), + decoderContext.DecodeByteArray())); } if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) From bc8c3e97cd021590284f49668a2e682bba0abeca Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 7 Jun 2024 10:43:06 +0200 Subject: [PATCH 256/551] refactor --- .../Validators/TxValidatorTests.cs | 32 +++++++ .../Validators/TxValidator.cs | 1 + .../Builders/TransactionBuilder.cs | 6 +- .../Encoding/TxDecoderTests.cs | 10 +-- .../Nethermind.Core/SetCodeAuthorization.cs | 43 ++++++++++ src/Nethermind/Nethermind.Core/Transaction.cs | 2 +- .../Nethermind.Core/TxContractCode.cs | 30 ------- src/Nethermind/Nethermind.Core/TxType.cs | 3 +- .../Nethermind.Evm.Test/Eip7702Tests.cs | 4 +- .../IntrinsicGasCalculatorTests.cs | 84 +++++++++++++++++++ src/Nethermind/Nethermind.Evm/GasCostOf.cs | 1 + .../Nethermind.Evm/IntrinsicGasCalculator.cs | 22 ++--- .../TransactionProcessor.cs | 5 +- ...oder.cs => SetCodeAuthorizationDecoder.cs} | 43 +++++----- .../Nethermind.Serialization.Rlp/TxDecoder.cs | 10 +-- .../OverridableReleaseSpec.cs | 1 + .../Nethermind.Specs/Forks/18_Prague.cs | 1 + .../Nethermind.Specs/ReleaseSpec.cs | 4 +- .../SystemTransactionReleaseSpec.cs | 1 + 19 files changed, 216 insertions(+), 87 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core/SetCodeAuthorization.cs delete mode 100644 src/Nethermind/Nethermind.Core/TxContractCode.cs rename src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/{TxContractCodeDecoder.cs => SetCodeAuthorizationDecoder.cs} (62%) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index a40243a73bb..8f798a3bd59 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -532,6 +532,38 @@ public void IsWellFormed_BlobTxHasProofOverTheSizeLimit_ReturnFalse() Assert.That(txValidator.IsWellFormed(tx, Cancun.Instance, out error), Is.False); } + [Test] + public void IsWellFormed_ContractCodeTxInCancunSpec_ReturnsFalse() + { + TransactionBuilder txBuilder = Build.A.Transaction + .WithContractCode(new SetCodeAuthorization(0, TestItem.AddressA, 0, 0, [], [])) + .WithMaxFeePerGas(100000) + .WithGasLimit(1000000) + .WithChainId(TestBlockchainIds.ChainId) + .SignedAndResolved(); + + Transaction tx = txBuilder.TestObject; + TxValidator txValidator = new(TestBlockchainIds.ChainId); + + Assert.That(txValidator.IsWellFormed(tx, Cancun.Instance, out _), Is.False); + } + + [Test] + public void IsWellFormed_ContractCodeTxInPragueSpec_ReturnsTrue() + { + TransactionBuilder txBuilder = Build.A.Transaction + .WithContractCode(new SetCodeAuthorization(0, TestItem.AddressA, 0, 0, [], [])) + .WithMaxFeePerGas(100000) + .WithGasLimit(1000000) + .WithChainId(TestBlockchainIds.ChainId) + .SignedAndResolved(); + + Transaction tx = txBuilder.TestObject; + TxValidator txValidator = new(TestBlockchainIds.ChainId); + + Assert.That(txValidator.IsWellFormed(tx, Cancun.Instance, out _), Is.True); + } + private static byte[] MakeArray(int count, params byte[] elements) => elements.Take(Math.Min(count, elements.Length)) .Concat(new byte[Math.Max(0, count - elements.Length)]) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 409f7c32a6d..b65e9f3dd01 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -61,6 +61,7 @@ private static bool ValidateTxType(Transaction transaction, IReleaseSpec release TxType.AccessList => releaseSpec.UseTxAccessLists, TxType.EIP1559 => releaseSpec.IsEip1559Enabled, TxType.Blob => releaseSpec.IsEip4844Enabled, + TxType.SetCode => releaseSpec.IsEip7702Enabled, _ => false }; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index 7df33b43d2e..9f015698764 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -220,12 +220,12 @@ public TransactionBuilder WithShardBlobTxTypeAndFields(int blobCount = 1, boo return this; } - public TransactionBuilder WithContractCode(TxContractCode contractCode) + public TransactionBuilder WithContractCode(SetCodeAuthorization setContractCode) { - TestObjectInternal.ContractCodes = TestObjectInternal.ContractCodes != null ? [.. TestObjectInternal.ContractCodes, contractCode] : [contractCode]; + TestObjectInternal.ContractCodes = TestObjectInternal.ContractCodes != null ? [.. TestObjectInternal.ContractCodes, setContractCode] : [setContractCode]; return this; } - public TransactionBuilder WithContractCode(IEnumerable contractCodes) + public TransactionBuilder WithContractCode(IEnumerable contractCodes) { TestObjectInternal.ContractCodes = contractCodes.ToArray(); return this; diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs index 04a08b92775..d26b220c804 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs @@ -63,10 +63,10 @@ public class TxDecoderTests .SignedAndResolved(), "EIP 1559 second test case"); yield return (Build.A.Transaction .WithMaxFeePerGas(2.GWei()) - .WithType(TxType.ContractCode) + .WithType(TxType.SetCode) .WithGasPrice(0) .WithChainId(1559) - .WithContractCode([new TxContractCode([0x0], ulong.MinValue, [0x0], [0x0])]) + .WithContractCode([new SetCodeAuthorization(0, TestItem.AddressF, 0, 0, [], [])]) .SignedAndResolved(), "EIP 7702 first test case"); } @@ -388,11 +388,11 @@ public void TxContractCodeEncodeAndDecode() { Transaction tx = Build.A.Transaction .WithMaxFeePerGas(2.GWei()) - .WithType(TxType.ContractCode) + .WithType(TxType.SetCode) .WithGasPrice(0) .WithChainId(1559) - .WithContractCode(new TxContractCode([0x0], ulong.MinValue, [0x0], [0x0])) - .WithContractCode(new TxContractCode([0x1], ulong.MinValue, [0xff, 0xff, 0xff], [0xff, 0xff, 0xff])) + .WithContractCode(new SetCodeAuthorization(0, TestItem.AddressF, 0, ulong.MinValue, [0x0], [0x0])) + .WithContractCode(new SetCodeAuthorization(0, TestItem.AddressF, 0, ulong.MinValue, [0xff, 0xff, 0xff], [0xff, 0xff, 0xff])) .SignedAndResolved().TestObject; RlpStream rlpStream = new(_txDecoder.GetLength(tx, RlpBehaviors.None)); _txDecoder.Encode(rlpStream, tx); diff --git a/src/Nethermind/Nethermind.Core/SetCodeAuthorization.cs b/src/Nethermind/Nethermind.Core/SetCodeAuthorization.cs new file mode 100644 index 00000000000..fcc0f22ae99 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/SetCodeAuthorization.cs @@ -0,0 +1,43 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Crypto; +using Nethermind.Int256; + +namespace Nethermind.Core; +public class SetCodeAuthorization +{ + public SetCodeAuthorization( + ulong chainId, + Address codeAddress, + UInt256 nonce, + Signature sig) : this(chainId, codeAddress, nonce, sig.V, sig.R, sig.S) + {} + + public SetCodeAuthorization( + ulong chainId, + Address codeAddress, + UInt256 nonce, + ulong yParity, + byte[] r, + byte[] s) + { + ChainId = chainId; + CodeAddress = codeAddress; + Nonce = nonce; + YParity = yParity; + R = r; + S = s; + } + public ulong? ChainId { get; } + public Address? CodeAddress { get; } + public UInt256? Nonce { get; } + public ulong YParity { get; } + public byte[] R { get; } + public byte[] S { get; } + + public Hash256 Digest() + { + + } +} diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index 6fde1e7eed7..81a64a7b6da 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -160,7 +160,7 @@ private void ClearPreHashInternal() public object? NetworkWrapper { get; set; } - public TxContractCode[]? ContractCodes { get; set; } // https://eips.ethereum.org/EIPS/eip-7702 + public SetCodeAuthorization[]? ContractCodes { get; set; } // https://eips.ethereum.org/EIPS/eip-7702 /// /// Service transactions are free. The field added to handle baseFee validation after 1559 diff --git a/src/Nethermind/Nethermind.Core/TxContractCode.cs b/src/Nethermind/Nethermind.Core/TxContractCode.cs deleted file mode 100644 index 7c22ca18961..00000000000 --- a/src/Nethermind/Nethermind.Core/TxContractCode.cs +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Int256; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Nethermind.Core; -public class TxContractCode -{ - public TxContractCode(byte[]? contractCode, Signature sig) : this(contractCode, sig.V, sig.R, sig.S) - { - - } - public TxContractCode(byte[]? contractCode, ulong yParity, byte[] r, byte[] s) - { - ContractCode = contractCode; - YParity = yParity; - R = r; - S = s; - } - public byte[]? ContractCode { get; } - public ulong YParity { get; } - public byte[] R { get; } - public byte[] S { get; } -} diff --git a/src/Nethermind/Nethermind.Core/TxType.cs b/src/Nethermind/Nethermind.Core/TxType.cs index d824f2dc758..4aa2bf01ae6 100644 --- a/src/Nethermind/Nethermind.Core/TxType.cs +++ b/src/Nethermind/Nethermind.Core/TxType.cs @@ -9,7 +9,8 @@ public enum TxType : byte AccessList = 1, EIP1559 = 2, Blob = 3, - ContractCode = 4, + //TODO type has not been determined yet + SetCode = 4, DepositTx = 0x7E, } diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs index fc5564d6c64..6dee81104ad 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs @@ -49,8 +49,8 @@ public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(Pr Signature sig = CreateContractCodeSignedMessage(signer, code); Transaction tx = Build.A.Transaction - .WithType(TxType.ContractCode) - .WithContractCode(new TxContractCode(code, sig)) + .WithType(TxType.SetCode) + .WithContractCode(new SetCodeAuthorization(0, TestItem.AddressF, 0, sig)) .WithGasLimit(40000) .WithGasPrice(1) .WithValue(0) diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index 126efa7438b..1df61e0380a 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -1,9 +1,11 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Collections.Generic; using System.IO; using FluentAssertions; +using MathNet.Numerics.Random; using Nethermind.Core; using Nethermind.Core.Eip2930; using Nethermind.Core.Extensions; @@ -115,5 +117,87 @@ void Test(IReleaseSpec spec, bool isAfterRepricing) Test(Shanghai.Instance, true); Test(Cancun.Instance, true); } + public static IEnumerable<(SetCodeAuthorization[] contractCode, long expectedCost)> SetContractCodeTestCaseSource() + { + yield return ( + [new SetCodeAuthorization( + TestContext.CurrentContext.Random.NextULong(), + new Address(TestContext.CurrentContext.Random.NextBytes(20)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)) + ], + GasCostOf.PerAuthBaseCost); + yield return ( + [new SetCodeAuthorization( + TestContext.CurrentContext.Random.NextULong(), + new Address(TestContext.CurrentContext.Random.NextBytes(20)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)), + new SetCodeAuthorization( + TestContext.CurrentContext.Random.NextULong(), + new Address(TestContext.CurrentContext.Random.NextBytes(20)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)) + ], + GasCostOf.PerAuthBaseCost * 2); + yield return ( + [new SetCodeAuthorization( + TestContext.CurrentContext.Random.NextULong(), + new Address(TestContext.CurrentContext.Random.NextBytes(20)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)), + new SetCodeAuthorization( + TestContext.CurrentContext.Random.NextULong(), + new Address(TestContext.CurrentContext.Random.NextBytes(20)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)), + new SetCodeAuthorization( + TestContext.CurrentContext.Random.NextULong(), + new Address(TestContext.CurrentContext.Random.NextBytes(20)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)) + ], + GasCostOf.PerAuthBaseCost * 3); + } + [TestCaseSource(nameof(SetContractCodeTestCaseSource))] + public void Calculate_TxHasSetCode_ReturnsExpectedCostOfTx((SetCodeAuthorization[] ContractCodes, long ExpectedCost) testCase) + { + Transaction tx = Build.A.Transaction.SignedAndResolved() + .WithContractCode(testCase.ContractCodes) + .TestObject; + + IntrinsicGasCalculator.Calculate(tx, Prague.Instance) + .Should().Be(21000 + (testCase.ExpectedCost)); + } + + [Test] + public void Calculate_TxHasSetCodeBeforePrague_ThrowsInvalidDataException() + { + Transaction tx = Build.A.Transaction.SignedAndResolved() + .WithContractCode( + new SetCodeAuthorization( + 0, + TestItem.AddressF, + 0, + TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)) + ) + .TestObject; + + Assert.That(() => IntrinsicGasCalculator.Calculate(tx, Cancun.Instance), Throws.InstanceOf()); + } } } diff --git a/src/Nethermind/Nethermind.Evm/GasCostOf.cs b/src/Nethermind/Nethermind.Evm/GasCostOf.cs index 68dc8cae654..e67770b53e8 100644 --- a/src/Nethermind/Nethermind.Evm/GasCostOf.cs +++ b/src/Nethermind/Nethermind.Evm/GasCostOf.cs @@ -62,5 +62,6 @@ public static class GasCostOf public const long AccessStorageListEntry = 1900; // eip-2930 public const long TLoad = WarmStateRead; // eip-1153 public const long TStore = WarmStateRead; // eip-1153 + public const long PerAuthBaseCost = 2500; // eip-7702 } } diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index e08a1a709c1..f6d7c76f5d0 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -23,6 +23,7 @@ public static long Calculate(Transaction transaction, IReleaseSpec releaseSpec) result += DataCost(transaction, releaseSpec); result += CreateCost(transaction, releaseSpec); result += AccessListCost(transaction, releaseSpec); + result += ContractCodeCost(transaction, releaseSpec); return result; } @@ -83,28 +84,19 @@ private static long AccessListCost(Transaction transaction, IReleaseSpec release private static long ContractCodeCost(Transaction transaction, IReleaseSpec releaseSpec) { - TxContractCode[]? contractCodes = transaction.ContractCodes; + SetCodeAuthorization[]? contractCodes = transaction.ContractCodes; long contractCodeCost = 0; - if (accessList is not null) + if (contractCodes is not null) { - if (!releaseSpec.UseTxAccessLists) + if (!releaseSpec.UseContractCode) { throw new InvalidDataException( - $"Transaction with an access list received within the context of {releaseSpec.Name}. Eip-2930 is not enabled."); + $"Transaction with a contract code received within the context of {releaseSpec.Name}. Eip-7702 is not enabled."); } - if (accessList.IsEmpty) return contractCodeCost; - - foreach ((Address address, AccessList.StorageKeysEnumerable storageKeys) entry in accessList) - { - contractCodeCost += GasCostOf.AccessAccountListEntry; - foreach (UInt256 _ in entry.storageKeys) - { - contractCodeCost += GasCostOf.AccessStorageListEntry; - } - } + if (contractCodes.Length == 0) return contractCodeCost; + contractCodeCost += GasCostOf.PerAuthBaseCost * contractCodes.Length; } - return contractCodeCost; } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 5194bb46269..c0703b117d0 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -257,7 +257,6 @@ protected virtual TransactionResult ValidateStatic(Transaction tx, BlockHeader h return "block gas limit exceeded"; } } - return TransactionResult.Ok; } @@ -454,6 +453,10 @@ protected void ExecuteEvmCall( // If sender is SystemUser subtracting value will cause InsufficientBalanceException if (validate || !tx.IsSystem()) WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); + if (tx.Type == TxType.SetCode) + { + Ecdsa.RecoverAddress(); + } try { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/SetCodeAuthorizationDecoder.cs similarity index 62% rename from src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs rename to src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/SetCodeAuthorizationDecoder.cs index 6555cd03355..2c0d48e9ce2 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/TxContractCodeDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/SetCodeAuthorizationDecoder.cs @@ -11,9 +11,9 @@ using System.Threading.Tasks; namespace Nethermind.Serialization.Rlp.Eip7702; -public class TxContractCodeDecoder : IRlpStreamDecoder, IRlpValueDecoder +public class SetCodeAuthorizationDecoder : IRlpStreamDecoder, IRlpValueDecoder { - public TxContractCode[]? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public SetCodeAuthorization[]? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { @@ -25,14 +25,16 @@ public class TxContractCodeDecoder : IRlpStreamDecoder, IRlpV int check = rlpStream.Position + outerLength; - List result = new List(); + List result = new List(); while (rlpStream.Position < check) { //TODO check what is valid for the fields here byte[] contractCode = rlpStream.DecodeByteArray(); - result.Add(new TxContractCode( - contractCode, + result.Add(new SetCodeAuthorization( + rlpStream.DecodeULong(), + rlpStream.DecodeAddress(), + rlpStream.DecodeUInt256(), rlpStream.DecodeULong(), rlpStream.DecodeByteArray(), rlpStream.DecodeByteArray())); @@ -45,7 +47,7 @@ public class TxContractCodeDecoder : IRlpStreamDecoder, IRlpV return result.ToArray(); } - public TxContractCode[]? Decode( + public SetCodeAuthorization[]? Decode( ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -59,14 +61,16 @@ public class TxContractCodeDecoder : IRlpStreamDecoder, IRlpV int check = decoderContext.Position + outerLength; - List result = new List(); + List result = new List(); while (decoderContext.Position < check) { //TODO check what is valid for the fields here byte[] contractCode = decoderContext.DecodeByteArray(); - result.Add(new TxContractCode( - contractCode, + result.Add(new SetCodeAuthorization( + decoderContext.DecodeULong(), + decoderContext.DecodeAddress(), + decoderContext.DecodeUInt256(), decoderContext.DecodeULong(), decoderContext.DecodeByteArray(), decoderContext.DecodeByteArray())); @@ -79,7 +83,7 @@ public class TxContractCodeDecoder : IRlpStreamDecoder, IRlpV return result.ToArray(); } - public void Encode(RlpStream stream, TxContractCode[]? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public void Encode(RlpStream stream, SetCodeAuthorization[]? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -89,23 +93,18 @@ public void Encode(RlpStream stream, TxContractCode[]? item, RlpBehaviors rlpBeh int contentLength = GetContentLength(item); stream.StartSequence(contentLength); - foreach (TxContractCode contractCode in item) + foreach (SetCodeAuthorization contractCode in item) { - if (contractCode.ContractCode == null) - { - stream.WriteByte(Rlp.NullObjectByte); - } - else - { - stream.Encode(contractCode.ContractCode); - } + stream.Encode(contractCode.ChainId ?? throw new RlpException("Invalid tx set code format - chain id is null")); + stream.Encode(contractCode.CodeAddress ?? throw new RlpException("Invalid tx set code format - address is null")); + stream.Encode(contractCode.Nonce ?? 0); stream.Encode(contractCode.YParity); stream.Encode(contractCode.R); stream.Encode(contractCode.S); } } - public int GetLength(TxContractCode[]? contractCodes, RlpBehaviors rlpBehaviors) + public int GetLength(SetCodeAuthorization[]? contractCodes, RlpBehaviors rlpBehaviors) { if (contractCodes is null) { @@ -116,12 +115,12 @@ public int GetLength(TxContractCode[]? contractCodes, RlpBehaviors rlpBehaviors) return Rlp.LengthOfSequence(contentLength); } - private static int GetContentLength(ReadOnlySpan contractCodes) + private static int GetContentLength(ReadOnlySpan contractCodes) { int total = 0; foreach (var code in contractCodes) { - total += Rlp.LengthOf(code.ContractCode) + Rlp.LengthOf(code.YParity) + Rlp.LengthOf(code.R) + Rlp.LengthOf(code.S); + total += Rlp.LengthOf(code.ChainId) + Rlp.LengthOf(code.CodeAddress) + Rlp.LengthOf(code.Nonce) + Rlp.LengthOf(code.YParity) + Rlp.LengthOf(code.R) + Rlp.LengthOf(code.S); } return total; } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs index 047b4ccb79e..3ba980ff96b 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs @@ -45,7 +45,7 @@ public class TxDecoder : { private readonly AccessListDecoder _accessListDecoder = new(); private readonly bool _lazyHash; - private TxContractCodeDecoder _txContractCodeDecoder = new(); + private SetCodeAuthorizationDecoder _txContractCodeDecoder = new(); protected TxDecoder(bool lazyHash = true) { @@ -96,7 +96,7 @@ protected virtual T NewTx() case TxType.Blob: DecodeShardBlobPayloadWithoutSig(transaction, rlpStream, rlpBehaviors); break; - case TxType.ContractCode: + case TxType.SetCode: DecodeContractCodeWithoutSig(transaction, rlpStream, rlpBehaviors); break; case TxType.DepositTx: @@ -508,7 +508,7 @@ public void Decode(ref Rlp.ValueDecoderContext decoderContext, ref T? transactio case TxType.Blob: DecodeShardBlobPayloadWithoutSig(transaction, ref decoderContext, rlpBehaviors); break; - case TxType.ContractCode: + case TxType.SetCode: DecodeContractCodeWithoutSig(transaction, ref decoderContext, rlpBehaviors); break; case TxType.DepositTx: @@ -709,7 +709,7 @@ private void EncodeTx(RlpStream stream, T? item, RlpBehaviors rlpBehaviors = Rlp case TxType.Blob: EncodeShardBlobPayloadWithoutPayload(item, stream, rlpBehaviors); break; - case TxType.ContractCode: + case TxType.SetCode: EncodeContractCodeWithoutPayload(item, stream, rlpBehaviors); break; case TxType.DepositTx: @@ -873,7 +873,7 @@ private int GetContentLength(T item, bool forSigning, bool isEip155Enabled = fal case TxType.Blob: contentLength = GetShardBlobContentLength(item); break; - case TxType.ContractCode: + case TxType.SetCode: contentLength = GetContractCodeLength(item); break; case TxType.DepositTx: diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index f6d4bacf1a6..3d77a4f2342 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -157,6 +157,7 @@ public ulong Eip4844TransitionTimestamp public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; public bool IsEip2935Enabled => _spec.IsEip2935Enabled; public Address Eip2935ContractAddress => _spec.Eip2935ContractAddress; + public bool IsEip7702Enabled => _spec.IsEip7702Enabled; public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; public long ElasticityMultiplier => _spec.ElasticityMultiplier; diff --git a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs index 11036fa0946..d13b637b621 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs @@ -16,6 +16,7 @@ protected Prague() Name = "Prague"; IsEip2537Enabled = true; IsEip2935Enabled = true; + IsEip7702Enabled = true; Eip2935ContractAddress = Eip2935Constants.BlockHashHistoryAddress; } diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index c3615a05a13..1074cd1514f 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -83,6 +83,7 @@ public ReleaseSpec Clone() public bool IsEip5656Enabled { get; set; } public bool IsEip6780Enabled { get; set; } public bool IsEip4788Enabled { get; set; } + public bool IsEip7702Enabled { get; set; } private Address _eip4788ContractAddress; public Address Eip4788ContractAddress @@ -99,6 +100,5 @@ public Address Eip2935ContractAddress get => IsEip2935Enabled ? _eip2935ContractAddress : null; set => _eip2935ContractAddress = value; } - - } + }; } diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index cc9f87ffa7a..08a42b4e78a 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -130,6 +130,7 @@ public bool IsEip158IgnoredAccount(Address address) public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; public bool IsEip2935Enabled => _spec.IsEip2935Enabled; public Address Eip2935ContractAddress => _spec.Eip2935ContractAddress; + public bool IsEip7702Enabled => _spec.IsEip7702Enabled; public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; public long ElasticityMultiplier => _spec.ElasticityMultiplier; From 3ed58a3466312f7165bc2d4fb48f8ff3003cffb4 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 12 Jun 2024 16:11:52 +0530 Subject: [PATCH 257/551] Pectra: fix merge conflicts (#7170) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ben Adams Co-authored-by: Kamil Chodoła <43241881+kamilchodola@users.noreply.github.com> Co-authored-by: nethermind-machine <76107542+nethermind-machine@users.noreply.github.com> Co-authored-by: LukaszRozmej Co-authored-by: Daniel Kyutae Jung <45947071+pxyxyrus@users.noreply.github.com> Co-authored-by: Ahmad Bitar <33181301+smartprogrammer93@users.noreply.github.com> Co-authored-by: Lukasz Rozmej Co-authored-by: Amirul Ashraf Co-authored-by: yerke26 <160018032+yerke26@users.noreply.github.com> Co-authored-by: yeerke Co-authored-by: Ruben Buniatyan Co-authored-by: Alexey Co-authored-by: Nikita Mescheryakov Co-authored-by: Lautaro Emanuel <31224949+emlautarom1@users.noreply.github.com> Co-authored-by: Marcos Antonio Maceo <35319980+stdevMac@users.noreply.github.com> Co-authored-by: ak88 Co-authored-by: Yaroslav Kukharuk Co-authored-by: Marek Moraczyński Co-authored-by: Ahmad Bitar Co-authored-by: Oleg Jakushkin Co-authored-by: Kamil Chodoła Co-authored-by: healthyyyoung --- .github/workflows/hive-consensus-tests.yml | 2 +- .github/workflows/nethermind-tests.yml | 1 + .github/workflows/publish-docker.yml | 12 +- .github/workflows/rpc-comparison.yml | 44 +- .../run-a-single-node-from-branch.yml | 3 +- .github/workflows/sync-testnets.yml | 56 ++- .github/workflows/update-docs.yml | 4 +- Dockerfile | 5 +- Dockerfile.chiseled | 5 +- Dockerfile.diag | 5 +- src/Nethermind/Chains/base-mainnet.json | 27 +- src/Nethermind/Chains/base-sepolia.json | 8 + src/Nethermind/Chains/chiado.json | 11 +- src/Nethermind/Chains/op-mainnet.json | 17 +- src/Nethermind/Chains/op-sepolia.json | 12 +- src/Nethermind/Directory.Build.props | 8 +- src/Nethermind/Directory.Packages.props | 63 +-- .../BerlinBlockChainTests.cs | 21 + .../BerlinStateTests.cs | 21 + .../ByzantiumBlockChainTests.cs | 21 + .../ByzantiumStateTests.cs | 21 + .../CancunStateTests.cs | 2 - .../FrontierBlockChainTests.cs | 21 + .../FrontierStateTests.cs | 21 + .../HomesteadBlockChainTests.cs | 21 + .../HomesteadStateTests.cs | 21 + .../IstanbulBlockChainTests.cs | 21 + .../IstanbulStateTests.cs | 21 + .../ParisBlockChainTests.cs | 21 + ...haiTests.cs => ShanghaiBlockChainTests.cs} | 2 +- .../ShanghaiStateTests.cs | 21 + .../Ethereum.Blockchain.Test/MetaTests.cs | 2 +- src/Nethermind/Ethereum.Rlp.Test/RlpTests.cs | 2 +- .../Ethereum.Test.Base/BlockchainTestBase.cs | 8 +- .../Ethereum.Test.Base/FileTestsSource.cs | 4 +- .../Ethereum.Test.Base/GeneralStateTest.cs | 1 + .../GeneralStateTestEnvJson.cs | 1 + .../Ethereum.Test.Base/GeneralTestBase.cs | 38 +- .../Ethereum.Test.Base/JsonToEthereumTest.cs | 13 +- .../Ethereum.Test.Base/TestLoader.cs | 2 +- .../TransactionTests.cs | 6 +- ...sts.TestAccountAbstractionRpcBlockchain.cs | 12 +- .../AccountAbstractionRpcModuleTests.cs | 1 + .../UserOperationsMessageSerializerTests.cs | 6 +- .../AccountAbstractionPlugin.cs | 8 +- .../AccountAbstractionRpcModule.cs | 2 +- .../Broadcaster/PeerInfo.cs | 2 +- ...lockProducerTransactionsExecutorFactory.cs | 5 +- .../Executor/IUserOperationSimulator.cs | 2 +- .../Executor/UserOperationSimulator.cs | 19 +- .../Source/UserOperationTxSource.cs | 2 +- .../Extensions/IConsensusPlugin.cs | 10 +- .../Extensions/IConsensusWrapperPlugin.cs | 5 +- .../Extensions/INethermindPlugin.cs | 26 ++ .../Nethermind.Api/Extensions/IPlugin.cs | 25 -- .../Nethermind.Api/IApiWithBlockchain.cs | 3 +- .../Nethermind.Api/NethermindApi.cs | 13 +- .../AuRaBlockProducerTests.cs | 13 +- .../Nethermind.AuRa.Test/AuRaPluginTests.cs | 3 +- .../AuRaContractGasLimitOverrideTests.cs | 3 +- .../Contract/TxPriorityContractTests.cs | 3 +- .../Contract/ValidatorContractTests.cs | 12 +- .../Transactions/TxCertifierFilterTests.cs | 3 +- .../Transactions/TxPermissionFilterTest.cs | 5 +- .../Validators/ContractBasedValidatorTests.cs | 13 +- .../Evm/JumpDestinationsBenchmark.cs | 2 +- .../BlockchainTestsBugHunter.cs | 2 +- .../PerfTest.cs | 2 +- .../StateTestsBugHunter.cs | 2 +- .../BlockProcessorTests.cs | 35 -- .../Consensus/ClefSignerTests.cs | 101 +++++ .../KnownChainSizesTests.cs | 4 +- .../Nethermind.Blockchain.Test.csproj | 1 + ...lockProducerBaseTests.IsProducingBlocks.cs | 37 +- .../Producers/BlockProducerBaseTests.cs | 11 - .../Producers/DevBlockproducerTests.cs | 12 +- .../Proofs/ReceiptTrieTests.cs | 12 +- .../Receipts/ReceiptsIteratorTests.cs | 2 +- .../Nethermind.Blockchain.Test/ReorgTests.cs | 5 +- .../TransactionSelectorTests.cs | 2 +- .../TransactionsExecutorTests.cs | 2 +- .../Nethermind.Blockchain/BlockTree.cs | 49 +- .../Nethermind.Blockchain/BlockTreeOverlay.cs | 251 +++++++++++ .../Blocks/BlockStore.cs | 2 +- .../Contracts/Contract.ConstantContract.cs | 12 +- .../Find/IBlockFinder.cs | 3 +- .../FullPruning/FullPruner.cs | 10 + .../Nethermind.Blockchain/IBlockTree.cs | 2 - .../Processing/WitnessPruner.cs | 67 --- .../ReadOnlyBlockTree.cs | 4 +- .../Receipts/PersistentReceiptStorage.cs | 2 +- .../Receipts/ReceiptsRootCalculator.cs | 6 +- .../Synchronization/ISyncConfig.cs | 3 - .../Synchronization/ISyncPeer.cs | 5 - .../Synchronization/SyncConfig.cs | 1 - .../Utils/LastNStateRootTracker.cs | 2 +- .../ProofCliModuleTests.cs | 1 + .../Nethermind.Cli/Modules/EthCliModule.cs | 5 + .../CliqueBlockProducerTests.cs | 32 +- .../CliqueRpcModuleTests.cs | 18 +- .../Nethermind.Clique.Test/CliqueTests.cs | 33 ++ .../Nethermind.Config/BlocksConfig.cs | 1 + .../Nethermind.Config/IBlocksConfig.cs | 3 + .../AuRaBlockProcessor.cs | 1 - .../AuRaBlockProducer.cs | 2 - .../Nethermind.Consensus.AuRa/AuRaPlugin.cs | 32 +- .../TransactionPermissionContract.cs | 6 +- .../InitializationSteps/AuRaNethermindApi.cs | 2 +- .../StartBlockProducerAuRa.cs | 41 +- .../CliqueBlockProducer.cs | 240 ++++++---- .../CliquePlugin.cs | 46 +- .../CliqueRpcModule.cs | 4 +- .../CliqueSealer.cs | 18 +- .../ICliqueBlockProducer.cs | 2 +- .../SnapshotManager.cs | 11 +- .../EthashPlugin.cs | 20 +- .../MinedBlockProducer.cs | 2 - .../NethDevPlugin.cs | 41 +- .../ReadOnlyTxProcessingScopeTests.cs | 28 ++ .../Nethermind.Consensus/IBlockProducer.cs | 13 +- .../IBlockProducerFactory.cs | 5 +- .../IBlockProducerRunner.cs | 16 + .../Nethermind.Consensus/IHeaderSigner.cs | 12 + .../Nethermind.Consensus/IMiningConfig.cs | 5 + .../Nethermind.Consensus/ISigner.cs | 1 + .../Nethermind.Consensus/MiningConfig.cs | 2 + .../Nethermind.Consensus/NullSigner.cs | 4 + .../Processing/BlockCachePreWarmer.cs | 137 ++++++ ...cessor.BlockProductionTransactionPicker.cs | 6 +- ...sor.BlockProductionTransactionsExecutor.cs | 4 +- ...sor.BlockValidationTransactionsExecutor.cs | 3 +- .../Processing/BlockProcessor.cs | 47 +- .../Processing/BlockchainProcessor.cs | 4 +- .../Processing/IBlockCachePreWarmer.cs | 15 + .../Processing/IBlockProcessor.cs | 4 +- .../Processing/ProcessingStats.cs | 340 +++++++------- .../Processing/ReadOnlyChainProcessingEnv.cs | 48 +- .../Processing/ReadOnlyTxProcessingEnv.cs | 55 ++- .../Processing/ReadOnlyTxProcessingEnvBase.cs | 40 ++ .../ReadOnlyTxProcessingEnvFactory.cs | 35 +- .../Processing/ReadOnlyTxProcessingScope.cs | 24 + .../Producers/BlockProducerBase.cs | 60 +-- .../Producers/BlockProducerEnvFactory.cs | 25 +- ...lockProducerTransactionsExecutorFactory.cs | 3 +- .../Producers/DevBlockProducer.cs | 2 - .../Producers/IBlockProducerInfo.cs | 4 +- .../Producers/IBlockProductionCondition.cs | 21 + .../IBlockTransactionsExecutorFactory.cs | 3 +- .../Producers/MultipleBlockProducer.cs | 63 +-- .../Producers/ProducedBlockSuggester.cs | 10 +- src/Nethermind/Nethermind.Consensus/Signer.cs | 7 + .../StandardBlockProducerRunner.cs | 79 ++++ .../Validators/SimulateBlockValidatorProxy.cs | 30 ++ .../Withdrawals/WithdrawalProcessor.cs | 4 +- .../Blockchain/TestBlockProducer.cs | 2 - .../Blockchain/TestBlockchain.cs | 45 +- .../Builders/BlockBuilder.cs | 2 +- .../Builders/BlockTreeBuilder.cs | 3 +- .../Caching/LruCacheLowObjectTests.cs | 182 ++++++++ .../Caching/LruCacheTests.cs | 26 +- .../Caching/LruKeyCacheLowObjectTests.cs | 104 +++++ .../Caching/LruKeyCacheNonConcurrentTests.cs | 104 +++++ .../Caching/LruKeyCacheTests.cs | 20 +- .../Caching/SpanLruCacheTests.cs | 28 +- .../UInt256DictionaryKeyConverterTests.cs | 2 +- .../Nethermind.Core.Test/KeccakTests.cs | 8 + .../Nethermind.Core.Test/SequenceTests.cs | 33 ++ src/Nethermind/Nethermind.Core/Account.cs | 10 +- src/Nethermind/Nethermind.Core/Address.cs | 12 +- src/Nethermind/Nethermind.Core/Block.cs | 6 + src/Nethermind/Nethermind.Core/Bloom.cs | 15 +- .../Nethermind.Core/Buffers/CappedArray.cs | 10 + .../Nethermind.Core/Caching/LinkedListNode.cs | 30 +- .../Caching/LruCacheLowObject.cs | 274 +++++++++++ .../Nethermind.Core/Caching/LruKeyCache.cs | 12 - .../Caching/LruKeyCacheLowObject.cs | 248 ++++++++++ .../Caching/LruKeyCacheNonConcurrent.cs | 115 +++++ .../CappedArrayMemoryManager.cs | 63 +++ .../Collections/LinkedHashSet.cs | 1 - .../Collections/ThrowHelper.cs | 7 - .../Cpu/ConsoleExitHandler.cs | 2 +- .../Cpu/CpuInfo.cs | 4 +- .../Cpu/DefaultCultureInfo.cs | 2 +- .../Cpu/Frequency.cs | 4 +- .../Cpu/FrequencyUnit.cs | 4 +- .../Cpu/ProcCpuInfoKeyNames.cs | 2 +- .../Cpu/ProcCpuInfoParser.cs | 2 +- .../Cpu/ProcCpuInfoProvider.cs | 2 +- .../Cpu/ProcessExtensions.cs | 2 +- .../Cpu/ProcessHelper.cs | 2 +- .../Cpu/RuntimeInformation.cs | 11 +- .../Cpu/SectionsHelper.cs | 2 +- .../Cpu/SysctlCpuInfoParser.cs | 2 +- .../Cpu/SysctlCpuInfoProvider.cs | 2 +- .../Cpu/TimeInterval.cs | 4 +- .../Cpu/TimeUnit.cs | 4 +- .../Cpu/UnitPresentation.cs | 4 +- .../Cpu/WmicCpuInfoKeyNames.cs | 2 +- .../Cpu/WmicCpuInfoParser.cs | 2 +- .../Cpu/WmicCpuInfoProvider.cs | 2 +- .../Nethermind.Core/Crypto/Hash256.cs | 2 +- .../Nethermind.Core/Crypto/KeccakHash.cs | 266 +++++------ .../Extensions/ReadOnlySequenceExtensions.cs | 35 ++ .../Nethermind.Core/IKeyValueStore.cs | 4 +- src/Nethermind/Nethermind.Core/ProductInfo.cs | 33 +- .../Resettables/ResettableDictionary.cs | 8 +- .../Resettables/ResettableHashSet.cs | 7 +- .../Nethermind.Core/Specs/IReleaseSpec.cs | 7 - .../Threading/ThreadExtensions.cs | 7 +- src/Nethermind/Nethermind.Core/Transaction.cs | 27 ++ .../AesEngineX86Intrinsic.cs | 425 ------------------ .../Nethermind.Crypto/EciesCipher.cs | 122 +++-- .../Nethermind.Crypto/EthereumIesEngine.cs | 2 +- .../KzgPolynomialCommitments.cs | 41 +- .../Nethermind.Crypto.csproj | 2 +- .../Nethermind.Db.Rocks/Config/DbConfig.cs | 58 +-- .../Nethermind.Db.Rocks/Config/IDbConfig.cs | 53 +-- .../Config/PerTableDbConfig.cs | 73 ++- .../Nethermind.Db.Rocks/DbOnTheRocks.cs | 114 ++++- .../Config/PerTableDbConfigTests.cs | 21 +- .../Nethermind.Db.Test/DbOnTheRocksTests.cs | 44 +- .../StandardDbInitializerTests.cs | 1 - src/Nethermind/Nethermind.Db/DbNames.cs | 2 - src/Nethermind/Nethermind.Db/IDbProvider.cs | 5 - src/Nethermind/Nethermind.Db/Metrics.cs | 111 ++++- src/Nethermind/Nethermind.Db/ReadOnlyDb.cs | 51 +-- .../Nethermind.Db/StandardDbInitializer.cs | 2 - .../EthStatsPluginTests.cs | 5 +- .../Nethermind.EthStats/EthStatsPlugin.cs | 2 - .../Nethermind.Evm.Benchmark/EvmBenchmarks.cs | 4 +- .../MultipleUnsignedOperations.cs | 3 +- .../StaticCallBenchmarks.cs | 3 +- .../CodeAnalysis/CodeInfoTests.cs | 58 +-- .../Eip3198BaseFeeTests.cs | 2 +- .../Eip3529RefundsTests.cs | 2 +- .../Nethermind.Evm.Test/Eip3541Tests.cs | 2 +- .../Eip7516BlobBaseFeeTests.cs | 2 +- .../EvmPooledMemoryTests.cs | 3 + .../Nethermind.Evm.Test/InstructionTests.cs | 37 -- .../Tracing/GasEstimationTests.cs | 6 +- .../TransactionProcessorEip4844Tests.cs | 13 +- .../TransactionProcessorFeeTests.cs | 5 +- .../TransactionProcessorTests.cs | 5 +- .../VirtualMachineTestsBase.cs | 6 +- .../Nethermind.Evm/ByteCodeBuilder.cs | 4 +- .../ByteCodeBuilderExtensions.cs | 7 - .../Nethermind.Evm/CodeAnalysis/CodeInfo.cs | 13 +- .../CodeAnalysis/JumpDestinationAnalyzer.cs | 104 ++++- .../Nethermind.Evm/CodeInfoRepository.cs | 161 +++++++ .../Nethermind.Evm/ICodeInfoRepository.cs | 18 + .../Nethermind.Evm/IVirtualMachine.cs | 3 - src/Nethermind/Nethermind.Evm/Instruction.cs | 6 - .../Nethermind.Evm/MemoryAllowance.cs | 2 +- src/Nethermind/Nethermind.Evm/Metrics.cs | 109 ++++- .../Precompiles/IdentityPrecompile.cs | 2 +- .../Tracing/BlockReceiptsTracer.cs | 3 +- .../Tracing/CancellationBlockTracer.cs | 32 +- .../Tracing/CancellationTxTracer.cs | 269 ++++++----- .../Nethermind.Evm/Tracing/ITxLogsMutator.cs | 14 + .../BuildUpTransactionProcessorAdapter.cs | 11 +- .../IReadOnlyTransactionProcessor.cs | 13 - .../IReadOnlyTxProcessingScope.cs | 13 + .../IReadOnlyTxProcessorSource.cs | 2 +- .../ReadOnlyTransactionProcessor.cs | 47 -- .../SystemTxProcessor.cs | 9 +- .../TransactionProcessor.cs | 22 +- .../Nethermind.Evm/VirtualMachine.cs | 324 +++++-------- .../ClefSigner.cs | 140 ++++++ .../ClefSignerPlugin.cs | 80 ++++ .../Nethermind.ExternalSigner.Plugin.csproj | 14 + .../BlockchainBridgeTests.cs | 43 +- .../Nethermind.Facade/BlockchainBridge.cs | 88 ++-- .../BlockchainBridgeExtensions.cs | 12 + .../Nethermind.Facade/CallOutput.cs | 20 + .../Eth}/AccessListItemForRpc.cs | 2 +- .../Eth/BlockForRpc.cs | 2 +- .../Eth}/TransactionForRpc.cs | 3 +- .../Nethermind.Facade/IBlockchainBridge.cs | 11 +- .../Nethermind.Facade.csproj | 1 + .../OverridableCodeInfoRepository.cs | 44 ++ .../Proxy/Models/AccountOverride.cs | 27 ++ .../Proxy/Models/CallTransactionModel.cs | 30 -- .../Proxy/Models/Simulate/BlockOverride.cs | 61 +++ .../Proxy/Models/Simulate/BlockStateCall.cs | 15 + .../Proxy/Models/Simulate/Error.cs | 11 + .../Proxy/Models/Simulate/Log.cs | 21 + .../Proxy/Models/Simulate/ResultType.cs | 11 + .../Models/Simulate/SimulateBlockResult.cs | 19 + .../Models/Simulate/SimulateCallResult.cs | 16 + .../Proxy/Models/Simulate/SimulatePayload.cs | 30 ++ .../Simulate/TransactionWithSourceDetails.cs | 13 + .../Simulate/SimulateBlockTracer.cs | 60 +++ .../Simulate/SimulateBlockhashProvider.cs | 21 + .../Simulate/SimulateBridgeHelper.cs | 285 ++++++++++++ .../Simulate/SimulateDictionaryBlockStore.cs | 94 ++++ .../Simulate/SimulateDictionaryHeaderStore.cs | 72 +++ .../Simulate/SimulateOutput.cs | 16 + .../SimulateReadOnlyBlocksProcessingEnv.cs | 117 +++++ ...ulateReadOnlyBlocksProcessingEnvFactory.cs | 63 +++ .../Simulate/SimulateTransactionProcessor.cs | 32 ++ .../Simulate/SimulateTxMutatorTracer.cs | 97 ++++ .../Simulate/SimulateVirtualMachine.cs | 37 ++ .../StateOverridesExtensions.cs | 132 ++++++ .../NodeHealthServiceTests.cs | 10 +- .../HealthChecksPlugin.cs | 6 +- .../NodeHealthService.cs | 8 +- .../Nethermind.Init/InitializeStateDb.cs | 52 +-- .../Nethermind.Init/Steps/InitRlp.cs | 6 + .../Steps/InitializeBlockProducer.cs | 21 +- .../Steps/InitializeBlockchain.cs | 29 +- .../Steps/InitializeNetwork.cs | 14 +- .../Nethermind.Init/Steps/LogHardwareInfo.cs | 3 +- .../Steps/RegisterPluginRpcModules.cs | 21 - .../Steps/RegisterRpcModules.cs | 203 +++++---- .../Nethermind.Init/Steps/SetupKeyStore.cs | 7 +- .../Steps/StartBlockProducer.cs | 9 +- .../Steps/StepInitializationException.cs | 9 + .../EthModuleBenchmarks.cs | 17 +- ...usHelperTests.ReceiptsJsonRpcDataSource.cs | 1 + .../Data/AccessListItemForRpcTests.cs | 1 + .../Data/Eip2930Tests.cs | 1 + .../JsonRpcProcessorTests.cs | 2 +- .../JsonRpcServiceTests.cs | 25 +- .../Modules/BoundedModulePoolTests.cs | 4 +- .../Modules/DebugModuleTests.cs | 1 + .../Eth/EthRpcModuleTests.EstimateGas.cs | 1 + .../Modules/Eth/EthRpcModuleTests.EthCall.cs | 1 + .../Modules/Eth/EthRpcModuleTests.cs | 2 + .../Modules/Eth/EthRpcSimulateTestsBase.cs | 149 ++++++ ...SimulateTestsPrecompilesWithRedirection.cs | 194 ++++++++ .../EthSimulateTestsBlocksAndTransactions.cs | 281 ++++++++++++ .../Eth/Simulate/EthSimulateTestsHiveBase.cs | 82 ++++ .../EthSimulateTestsSimplePrecompiles.cs | 108 +++++ .../Modules/NetModuleTests.cs | 1 - .../Modules/Proof/ProofRpcModuleTests.cs | 1 + .../Modules/RpcModuleProviderTests.cs | 6 + .../Modules/SingletonModulePoolTests.cs | 4 +- .../Modules/SubscribeModuleTests.cs | 2 +- .../Modules/TestRpcBlockchain.cs | 44 +- .../Modules/Trace/ParityStyleTracerTests.cs | 12 +- .../Modules/TraceRpcModuleTests.cs | 22 +- .../TransactionForRpcConverterTests.cs | 1 + .../Modules/WitnessModuleRpcTests.cs | 81 ---- .../TraceStoreRpcModuleTests.cs | 1 + .../TraceStoreRpcModule.cs | 1 + .../Client/BasicJsonRpcClient.cs | 36 +- .../Data/AccessListForRpc.cs | 1 + .../Data/TransactionForRpcWithTraceTypes.cs | 1 + .../{ErrorType.cs => ErrorCodes.cs} | 25 ++ .../Nethermind.JsonRpc/IJsonRpcConfig.cs | 9 + .../Nethermind.JsonRpc/JsonRpcConfig.cs | 2 + .../Nethermind.JsonRpc/JsonRpcContext.cs | 14 +- .../Nethermind.JsonRpc/JsonRpcProcessor.cs | 2 + .../Modules/DebugModule/DebugBridge.cs | 2 +- .../Modules/DebugModule/DebugModuleFactory.cs | 15 +- .../Modules/DebugModule/DebugRpcModule.cs | 1 + .../Modules/DebugModule/IDebugRpcModule.cs | 1 + .../Modules/Eth/BadBlock.cs | 1 + .../Modules/Eth/EthModuleFactory.cs | 8 +- .../Eth/EthRpcModule.TransactionExecutor.cs | 116 ++--- .../Modules/Eth/EthRpcModule.cs | 149 +++--- .../Modules/Eth/ExecutorBase.cs | 49 ++ .../Eth/FeeHistory/FeeHistoryOracle.cs | 12 +- .../Modules/Eth/IEthRpcModule.cs | 24 +- .../Modules/Eth/SimulateTxExecutor.cs | 217 +++++++++ .../Nethermind.JsonRpc/Modules/ModuleType.cs | 2 - .../Modules/Personal/IPersonalRpcModule.cs | 1 + .../Modules/Personal/PersonalRpcModule.cs | 1 + .../Modules/Proof/IProofRpcModule.cs | 1 + .../Modules/Proof/ProofModuleFactory.cs | 19 +- .../Modules/Proof/ProofRpcModule.cs | 4 +- .../Modules/Proof/TransactionWithProof.cs | 1 + .../Modules/RpcModuleProvider.cs | 7 +- .../Modules/Subscribe/NewHeadSubscription.cs | 1 + .../NewPendingTransactionsSubscription.cs | 1 + .../Modules/Trace/ITraceRpcModule.cs | 1 + .../Modules/Trace/TraceModuleFactory.cs | 99 ++-- .../Modules/Trace/TraceRpcModule.cs | 10 +- .../Modules/TxPool/TransactionPoolContent.cs | 1 + .../Modules/Witness/IWitnessRpcModule.cs | 22 - .../Modules/Witness/WitnessRpcModule.cs | 36 -- .../WebSockets/JsonRpcSocketsClient.cs | 1 + .../AuRaMergeEngineModuleTests.cs | 7 +- .../AuRaMergeBlockProducerEnvFactory.cs | 7 +- .../Nethermind.Merge.AuRa/AuRaMergePlugin.cs | 4 +- .../AuRaPostMergeBlockProducerFactory.cs | 2 - .../BlobBundleExtensions.cs | 23 + ...sts.DelayBlockImprovementContextFactory.cs | 17 +- .../EngineModuleTests.HelperFunctions.cs | 21 +- .../EngineModuleTests.PayloadProduction.cs | 14 +- .../EngineModuleTests.RelayBuilder.cs | 8 +- .../EngineModuleTests.Setup.cs | 6 +- .../EngineModuleTests.V1.cs | 5 +- .../EngineModuleTests.V3.cs | 99 +++- .../ExternalRpcIntegrationTests.cs | 1 + .../MergePluginTests.cs | 4 +- .../BlockImprovementContext.cs | 7 +- .../BlockImprovementContextFactory.cs | 9 +- .../Boost/BoostBlockImprovementContext.cs | 9 +- .../BoostBlockImprovementContextFactory.cs | 9 +- .../BlockProduction/MergeBlockProducer.cs | 43 +- .../MergeBlockProducerRunner.cs | 64 +++ .../BlockProduction/PostMergeBlockProducer.cs | 2 - .../PostMergeBlockProducerFactory.cs | 3 - .../Data/ClientVersionV1.cs | 4 +- .../Data/NewPayloadV1Result.cs | 4 +- .../Handlers/ForkchoiceUpdatedHandler.cs | 19 +- .../IEngineRpcModule.Cancun.cs | 2 +- .../IEngineRpcModule.Paris.cs | 2 +- .../IEngineRpcModule.Shanghai.cs | 2 +- .../MergeGossipPolicy.cs | 2 +- .../MergePlugin.BlockProducer.cs | 27 +- .../Nethermind.Merge.Plugin/MergePlugin.cs | 8 +- .../Synchronization/MergeBlockDownloader.cs | 6 +- .../Nethermind.Merkleization/Merkleizer.cs | 2 +- .../Nethermind.Mev.Test/MevPluginTests.cs | 6 +- .../MevRpcModuleTests.TestMevRpcBlockchain.cs | 70 +-- .../Nethermind.Mev/Execution/TracerFactory.cs | 20 +- .../Execution/TxBundleExecutor.cs | 2 +- .../Nethermind.Mev/MevBlockProducer.cs | 11 +- ...lockProducerTransactionsExecutorFactory.cs | 3 +- .../MevBlockProductionTransactionsExecutor.cs | 4 +- src/Nethermind/Nethermind.Mev/MevPlugin.cs | 51 ++- .../P2P/Protocol.cs | 8 - .../DiscoveryApp.cs | 5 +- .../RoutingTable/NodeBucket.cs | 24 +- .../RoutingTable/NodeTable.cs | 37 +- .../P2P/P2PProtocolHandlerTests.cs | 4 +- .../Les/AnnounceMessageSerializerTests.cs | 27 -- .../Les/BlockBodiesSerializerTests.cs | 34 -- .../Les/BlockHeadersMessageSerializerTests.cs | 27 -- .../ContractCodesMessageSerializerTests.cs | 25 -- .../GetBlockBodiesMessageSerializerTests.cs | 24 - .../GetBlockHeadersMessageSerializerTests.cs | 45 -- .../GetContractCodesMessageSerializerTests.cs | 30 -- ...tHelperTrieProofsMessageSerializerTests.cs | 31 -- .../Les/GetReceiptsMessageSerializerTests.cs | 28 -- .../HelperTrieProofsMessageSerializerTests.cs | 39 -- .../Les/ReceiptsMessageSerializerTests.cs | 34 -- .../Les/StatusMessageSerializerTests.cs | 40 -- ...lockWitnessHashesMessageSerializerTests.cs | 50 --- ...lockWitnessHashesMessageSerializerTests.cs | 59 --- .../Wit/WitProtocolHandlerTests.cs | 163 ------- src/Nethermind/Nethermind.Network/Metrics.cs | 14 - .../Nethermind.Network/P2P/P2PMessageKey.cs | 4 - .../SyncPeerProtocolHandlerBase.cs | 3 +- .../Nethermind.Network/P2P/Session.cs | 2 +- .../Subprotocols/Eth/PooledTxsRequestor.cs | 3 +- .../Eth/V62/Eth62ProtocolHandler.cs | 5 +- .../V63/Messages/ReceiptsMessageSerializer.cs | 4 +- .../P2P/Subprotocols/Les/CodeRequest.cs | 23 - .../P2P/Subprotocols/Les/CostTracker.cs | 29 -- .../P2P/Subprotocols/Les/HelperTrieRequest.cs | 27 -- .../P2P/Subprotocols/Les/HelperTrieType.cs | 11 - .../P2P/Subprotocols/Les/LesAnnounceType.cs | 12 - .../P2P/Subprotocols/Les/LesMessageCode.cs | 33 -- .../Subprotocols/Les/LesProtocolHandler.cs | 314 ------------- .../Les/LesProtocolInitializedEventArgs.cs | 35 -- .../Les/Messages/AnnounceMessage.cs | 20 - .../Les/Messages/AnnounceMessageSerializer.cs | 55 --- .../Les/Messages/BlockBodiesMessage.cs | 27 -- .../Messages/BlockBodiesMessageSerializer.cs | 41 -- .../Les/Messages/BlockHeadersMessage.cs | 26 -- .../Messages/BlockHeadersMessageSerializer.cs | 47 -- .../Les/Messages/ContractCodesMessage.cs | 34 -- .../ContractCodesMessageSerializer.cs | 54 --- .../Les/Messages/GetBlockBodiesMessage.cs | 25 -- .../GetBlockBodiesMessageSerializer.cs | 42 -- .../Les/Messages/GetBlockHeadersMessage.cs | 31 -- .../GetBlockHeadersMessageSerializer.cs | 42 -- .../Les/Messages/GetContractCodesMessage.cs | 30 -- .../GetContractCodesMessageSerializer.cs | 62 --- .../Messages/GetHelperTrieProofsMessage.cs | 15 - .../GetHelperTrieProofsMessageSerializer.cs | 75 ---- .../Les/Messages/GetReceiptsMessage.cs | 25 -- .../Messages/GetReceiptsMessageSerializer.cs | 42 -- .../Les/Messages/HelperTrieProofsMessage.cs | 30 -- .../HelperTrieProofsMessageSerializer.cs | 72 --- .../Les/Messages/ReceiptsMessage.cs | 27 -- .../Les/Messages/ReceiptsMessageSerializer.cs | 55 --- .../Les/Messages/StatusMessage.cs | 60 --- .../Les/Messages/StatusMessageSerializer.cs | 304 ------------- .../P2P/Subprotocols/Les/RequestCost.cs | 18 - .../Wit/Messages/BlockWitnessHashesMessage.cs | 19 - .../BlockWitnessHashesMessageSerializer.cs | 66 --- .../Messages/GetBlockWitnessHashesMessage.cs | 23 - .../GetBlockWitnessHashesMessageSerializer.cs | 37 -- .../P2P/Subprotocols/Wit/WitMessageCode.cs | 25 -- .../Subprotocols/Wit/WitProtocolHandler.cs | 153 ------- .../Nethermind.Network/ProtocolValidator.cs | 2 +- .../Nethermind.Network/ProtocolsManager.cs | 20 - .../Nethermind.Network/Rlpx/FrameCipher.cs | 51 +-- .../Rlpx/FrameMacProcessor.cs | 322 +++++++------ .../Nethermind.Network/Rlpx/RlpxHost.cs | 10 +- .../Nethermind.Optimism.Test/GasCostTests.cs | 37 ++ .../Nethermind.Optimism.Test.csproj | 27 ++ .../ReceiptDecoderTests.cs | 140 ++++++ .../Create2DeployerContractRewriter.cs | 10 +- .../DepositTxExtensions.cs | 3 - .../Nethermind.Optimism/IOptimismConfig.cs | 12 + ...ConfigHelper.cs => IOptimismSpecHelper.cs} | 4 +- .../InitializeBlockProducerOptimism.cs | 7 +- .../InitializeBlockchainOptimism.cs | 13 +- .../Nethermind.Optimism/L1BlockGasInfo.cs | 107 +++++ .../Nethermind.Optimism.csproj | 1 + .../Nethermind.Optimism/OPConfigHelper.cs | 38 +- .../Nethermind.Optimism/OPL1CostHelper.cs | 237 +++++++++- .../OptimismBlockProcessor.cs | 11 +- .../OptimismBlockProducerEnvFactory.cs | 81 ++-- .../OptimismBlockReceiptTracer.cs | 8 +- .../Nethermind.Optimism/OptimismConfig.cs | 9 + .../OptimismNethermindApi.cs | 2 +- .../OptimismPayloadPreparationService.cs | 1 + .../OptimismPayloadTxSource.cs | 1 + .../Nethermind.Optimism/OptimismPlugin.cs | 31 +- .../OptimismPostMergeBlockProducer.cs | 3 +- .../OptimismReadOnlyTxProcessingEnv.cs | 38 ++ ...er.cs => OptimismReceiptMessageDecoder.cs} | 67 ++- .../OptimismReceiptStorageDecoder.cs | 336 ++++++++++++++ .../OptimismReceiptsRootCalculator.cs | 44 -- .../OptimismTransactionProcessor.cs | 35 +- .../OptimismTransactionsExecutorFactory.cs | 5 +- .../OptimismTxPoolTxSource.cs | 1 + .../ReadOnlyChainProcessingEnv.cs | 72 +++ .../{ => Rpc}/IOptimismEngineRpcModule.cs | 2 +- .../Rpc/IOptimismEthRpcModule.cs | 26 ++ .../{ => Rpc}/OptimismEngineRpcModule.cs | 2 +- .../Rpc/OptimismEthModuleFactory.cs | 92 ++++ .../Rpc/OptimismEthRpcModule.cs | 162 +++++++ .../{ => Rpc}/OptimismPayloadAttributes.cs | 6 +- .../Rpc/OptimismReceiptForRpc.cs | 51 +++ .../Rpc/OptimismTraceModuleFactory.cs | 61 +++ .../Rpc/RegisterOptimismRpcModules.cs | 123 +++++ .../Nethermind.Overseer.Test/CliqueTests.cs | 1 + .../Framework/CliqueContext.cs | 1 + src/Nethermind/Nethermind.PerfTest/Program.cs | 4 +- .../Ethereum/ContextWithMocks.cs | 1 - .../Ethereum/Api/ApiBuilder.cs | 1 + .../Ethereum/EthereumRunner.cs | 2 +- .../Nethermind.Runner/JsonRpc/Startup.cs | 4 +- .../Nethermind.Runner.csproj | 36 +- .../Properties/launchSettings.json | 19 +- .../configs/base-mainnet.cfg | 26 +- .../configs/base-mainnet_archive.cfg | 3 + .../configs/base-sepolia.cfg | 24 +- .../configs/base-sepolia_archive.cfg | 3 + .../Nethermind.Runner/configs/chiado.cfg | 4 +- .../Nethermind.Runner/configs/energyweb.cfg | 6 +- .../Nethermind.Runner/configs/exosama.cfg | 6 +- .../Nethermind.Runner/configs/gnosis.cfg | 4 +- .../Nethermind.Runner/configs/joc-mainnet.cfg | 6 +- .../Nethermind.Runner/configs/joc-testnet.cfg | 6 +- .../Nethermind.Runner/configs/mainnet.cfg | 4 +- .../Nethermind.Runner/configs/op-mainnet.cfg | 26 +- .../configs/op-mainnet_archive.cfg | 3 + .../Nethermind.Runner/configs/op-sepolia.cfg | 24 +- .../configs/op-sepolia_archive.cfg | 3 + .../Nethermind.Runner/configs/sepolia.cfg | 4 +- .../Nethermind.Runner/configs/volta.cfg | 6 +- .../StreamPipeWriter.cs | 14 +- .../CompactReceiptStorageDecoder.cs | 3 +- .../ReceiptArrayStorageDecoder.cs | 50 +-- .../ReceiptMessageDecoder.cs | 9 +- .../ReceiptStorageDecoder.cs | 8 +- .../Nethermind.Serialization.Rlp/Rlp.cs | 125 ++++-- .../Nethermind.Serialization.Rlp/RlpStream.cs | 6 - .../ChainSpecBasedSpecProviderTests.cs | 2 +- .../GoerliSpecProviderTests.cs | 1 - .../MainnetSpecProviderTests.cs | 1 - .../OverridableReleaseSpec.cs | 4 +- .../ChainSpecBasedSpecProvider.cs | 1 - .../ChainSpecStyle/ChainSpecLoader.cs | 3 + .../ChainSpecStyle/Json/ChainSpecJson.cs | 4 + .../ChainSpecStyle/OptimismParameters.cs | 4 + .../Nethermind.Specs/ReleaseSpec.cs | 1 - .../SystemTransactionReleaseSpec.cs | 4 +- .../StateProviderTests.cs | 4 +- .../Witnesses/NullWitnessCollectorTests.cs | 48 -- .../Witnesses/WitnessCollectorTests.cs | 193 -------- .../Witnesses/WitnessingStoreTests.cs | 130 ------ .../Nethermind.State/IPreBlockCaches.cs | 9 + .../Nethermind.State/IWitnessCollector.cs | 25 -- .../Nethermind.State/IWitnessRepository.cs | 20 - .../Nethermind.State/IWorldState.cs | 26 +- .../Nethermind.State/IWorldStateManager.cs | 4 +- .../Nethermind.State/NullWitnessCollector.cs | 49 -- .../OverlayWorldStateManager.cs | 50 +++ .../PartialStorageProviderBase.cs | 18 +- .../PersistentStorageProvider.cs | 172 ++++++- .../Nethermind.State/PreBlockCaches.cs | 29 ++ .../Nethermind.State/Proofs/ReceiptTrie.cs | 9 +- .../ReadOnlyWorldStateManager.cs | 29 +- .../Nethermind.State/StateProvider.cs | 164 ++++--- .../Nethermind.State/StateReader.cs | 4 +- .../Nethermind.State/StorageTree.cs | 13 +- .../TransientStorageProvider.cs | 2 +- .../Witnesses/WitnessCollector.cs | 130 ------ .../Witnesses/WitnessingStore.cs | 65 --- src/Nethermind/Nethermind.State/WorldState.cs | 85 ++-- .../Nethermind.State/WorldStateManager.cs | 27 +- .../BlockDownloaderTests.cs | 3 +- .../FastBlocks/FastHeadersSyncTests.cs | 88 +++- .../OldStyleFullSynchronizerTests.cs | 2 - .../PeerInfoTests.cs | 1 - .../RangeQueryVisitorTests.cs | 64 +++ .../SnapSync/SnapProviderTests.cs | 62 +++ .../SnapSync/SnapServerTest.cs | 46 ++ .../SyncPeersReportTests.cs | 4 +- .../SyncServerTests.cs | 11 - .../SyncThreadTests.cs | 24 +- .../SynchronizerTests.cs | 7 +- .../Blocks/BlockDownloadContext.cs | 3 +- .../FastBlocks/FastHeadersSyncFeed.cs | 62 ++- .../FastBlocks/HeadersSyncBatch.cs | 22 +- .../FastSync/StateSyncItem.cs | 35 +- .../FastSync/TreeSync.cs | 2 +- .../Nethermind.Synchronization/ISyncServer.cs | 5 - .../LesSync/CanonicalHashTrie.cs | 142 ------ .../LesSync/ChtDecoder.cs | 71 --- .../LesSync/ChtProofCollector.cs | 31 -- .../Nethermind.Synchronization/Metrics.cs | 8 - .../ParallelSync/MultiSyncModeSelector.cs | 11 +- .../Peers/AllocationContexts.cs | 5 +- .../Peers/PeerInfo.cs | 4 +- .../Peers/SyncPeersReport.cs | 3 - .../Reporting/SyncReport.cs | 11 +- .../SnapSync/SnapProvider.cs | 22 +- .../SnapSync/SnapProviderHelper.cs | 4 +- .../SnapSync/SnapServer.cs | 18 +- .../SnapSync/SnapSyncDownloader.cs | 2 - .../Nethermind.Synchronization/SyncServer.cs | 69 +-- .../Synchronizer.cs | 2 + .../Trie/HealingWorldState.cs | 8 +- .../BlockchainTestsRunner.cs | 2 +- .../Pruning/TreeStoreTests.cs | 25 -- .../Nethermind.Trie.Test/TrieTests.cs | 4 +- .../Nethermind.Trie/INodeStorage.cs | 1 + src/Nethermind/Nethermind.Trie/NodeStorage.cs | 12 +- .../Nethermind.Trie/NodeStorageFactory.cs | 2 +- .../Nethermind.Trie/PatriciaTree.cs | 41 +- .../Nethermind.Trie/PreCachedTrieStore.cs | 121 +++++ .../Pruning/BlockCommitPackage.cs | 2 +- .../Pruning/OverlayTrieStore.cs | 27 ++ .../Nethermind.Trie/Pruning/TinyTreePath.cs | 12 + .../Nethermind.Trie/Pruning/TreePath.cs | 6 +- .../Nethermind.Trie/Pruning/TrieStore.cs | 302 ++++++++++--- .../Nethermind.Trie/RangeQueryVisitor.cs | 74 ++- .../Nethermind.Trie/TrieNode.Decoder.cs | 110 ++++- .../Nethermind.Trie/TrieNode.Visitor.cs | 5 +- src/Nethermind/Nethermind.Trie/TrieNode.cs | 12 +- .../TxBroadcasterTests.cs | 4 +- .../Nethermind.TxPool.Test/TxPoolTests.cs | 56 ++- .../Collections/DistinctValueSortedPool.cs | 15 +- .../PersistentBlobTxDistinctSortedPool.cs | 18 +- .../Collections/SortedPool.Events.cs | 24 +- .../Collections/SortedPool.cs | 103 +++-- src/Nethermind/Nethermind.TxPool/HashCache.cs | 6 +- .../Nethermind.TxPool/TxBroadcaster.cs | 26 +- src/Nethermind/Nethermind.TxPool/TxPool.cs | 107 ++++- src/Nethermind/Nethermind.sln | 16 + .../HiveConsensusWorkflowGenerator/Program.cs | 4 +- tools/Nethermind.Tools.Kute/Auth/JwtAuth.cs | 2 +- tools/SendBlobs/BlobSender.cs | 2 +- tools/SendBlobs/Dockerfile | 2 +- tools/SendBlobs/FundsDistributor.cs | 6 +- tools/TxParser/Program.cs | 2 +- tools/docgen/DBSizeGenerator.cs | 149 ++++++ tools/docgen/JsonRpcGenerator.cs | 4 +- tools/docgen/Program.cs | 21 +- tools/docgen/Properties/launchSettings.json | 8 + 670 files changed, 12796 insertions(+), 8468 deletions(-) create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/BerlinBlockChainTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/BerlinStateTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ByzantiumBlockChainTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ByzantiumStateTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/FrontierBlockChainTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/FrontierStateTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/HomesteadBlockChainTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/HomesteadStateTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/IstanbulBlockChainTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/IstanbulStateTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ParisBlockChainTests.cs rename src/Nethermind/Ethereum.Blockchain.Pyspec.Test/{ShanghaiTests.cs => ShanghaiBlockChainTests.cs} (92%) create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ShanghaiStateTests.cs create mode 100644 src/Nethermind/Nethermind.Api/Extensions/INethermindPlugin.cs delete mode 100644 src/Nethermind/Nethermind.Api/Extensions/IPlugin.cs create mode 100644 src/Nethermind/Nethermind.Blockchain.Test/Consensus/ClefSignerTests.cs create mode 100644 src/Nethermind/Nethermind.Blockchain/BlockTreeOverlay.cs delete mode 100644 src/Nethermind/Nethermind.Blockchain/Processing/WitnessPruner.cs create mode 100644 src/Nethermind/Nethermind.Consensus.Test/ReadOnlyTxProcessingScopeTests.cs create mode 100644 src/Nethermind/Nethermind.Consensus/IBlockProducerRunner.cs create mode 100644 src/Nethermind/Nethermind.Consensus/IHeaderSigner.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Processing/BlockCachePreWarmer.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Processing/IBlockCachePreWarmer.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnvBase.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingScope.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Producers/IBlockProductionCondition.cs create mode 100644 src/Nethermind/Nethermind.Consensus/StandardBlockProducerRunner.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Validators/SimulateBlockValidatorProxy.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Caching/LruCacheLowObjectTests.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheLowObjectTests.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheNonConcurrentTests.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/SequenceTests.cs create mode 100644 src/Nethermind/Nethermind.Core/Caching/LruCacheLowObject.cs create mode 100644 src/Nethermind/Nethermind.Core/Caching/LruKeyCacheLowObject.cs create mode 100644 src/Nethermind/Nethermind.Core/Caching/LruKeyCacheNonConcurrent.cs create mode 100644 src/Nethermind/Nethermind.Core/CappedArrayMemoryManager.cs rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/ConsoleExitHandler.cs (98%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/CpuInfo.cs (95%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/DefaultCultureInfo.cs (94%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/Frequency.cs (98%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/FrequencyUnit.cs (94%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/ProcCpuInfoKeyNames.cs (94%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/ProcCpuInfoParser.cs (99%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/ProcCpuInfoProvider.cs (98%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/ProcessExtensions.cs (99%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/ProcessHelper.cs (97%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/RuntimeInformation.cs (66%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/SectionsHelper.cs (98%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/SysctlCpuInfoParser.cs (98%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/SysctlCpuInfoProvider.cs (95%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/TimeInterval.cs (98%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/TimeUnit.cs (97%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/UnitPresentation.cs (93%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/WmicCpuInfoKeyNames.cs (93%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/WmicCpuInfoParser.cs (98%) rename src/Nethermind/{Nethermind.Init => Nethermind.Core}/Cpu/WmicCpuInfoProvider.cs (96%) create mode 100644 src/Nethermind/Nethermind.Core/Extensions/ReadOnlySequenceExtensions.cs delete mode 100644 src/Nethermind/Nethermind.Crypto/AesEngineX86Intrinsic.cs create mode 100644 src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs create mode 100644 src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs create mode 100644 src/Nethermind/Nethermind.Evm/Tracing/ITxLogsMutator.cs delete mode 100644 src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTransactionProcessor.cs create mode 100644 src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTxProcessingScope.cs delete mode 100644 src/Nethermind/Nethermind.Evm/TransactionProcessing/ReadOnlyTransactionProcessor.cs create mode 100644 src/Nethermind/Nethermind.ExternalSigner.Plugin/ClefSigner.cs create mode 100644 src/Nethermind/Nethermind.ExternalSigner.Plugin/ClefSignerPlugin.cs create mode 100644 src/Nethermind/Nethermind.ExternalSigner.Plugin/Nethermind.ExternalSigner.Plugin.csproj create mode 100644 src/Nethermind/Nethermind.Facade/BlockchainBridgeExtensions.cs create mode 100644 src/Nethermind/Nethermind.Facade/CallOutput.cs rename src/Nethermind/{Nethermind.JsonRpc/Data => Nethermind.Facade/Eth}/AccessListItemForRpc.cs (98%) rename src/Nethermind/{Nethermind.JsonRpc/Modules => Nethermind.Facade}/Eth/BlockForRpc.cs (99%) rename src/Nethermind/{Nethermind.JsonRpc/Data => Nethermind.Facade/Eth}/TransactionForRpc.cs (99%) create mode 100644 src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs create mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/AccountOverride.cs delete mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/CallTransactionModel.cs create mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/BlockOverride.cs create mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/BlockStateCall.cs create mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/Error.cs create mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/Log.cs create mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/ResultType.cs create mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulateBlockResult.cs create mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulateCallResult.cs create mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulatePayload.cs create mode 100644 src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/TransactionWithSourceDetails.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateBlockTracer.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateBlockhashProvider.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateBridgeHelper.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateDictionaryBlockStore.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateDictionaryHeaderStore.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateOutput.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnvFactory.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateTransactionProcessor.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateTxMutatorTracer.cs create mode 100644 src/Nethermind/Nethermind.Facade/Simulate/SimulateVirtualMachine.cs create mode 100644 src/Nethermind/Nethermind.Facade/StateOverridesExtensions.cs create mode 100644 src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcSimulateTestsBase.cs create mode 100644 src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthSimulateTestsPrecompilesWithRedirection.cs create mode 100644 src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsBlocksAndTransactions.cs create mode 100644 src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsHiveBase.cs create mode 100644 src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsSimplePrecompiles.cs delete mode 100644 src/Nethermind/Nethermind.JsonRpc.Test/Modules/WitnessModuleRpcTests.cs rename src/Nethermind/Nethermind.JsonRpc/{ErrorType.cs => ErrorCodes.cs} (72%) create mode 100644 src/Nethermind/Nethermind.JsonRpc/Modules/Eth/ExecutorBase.cs create mode 100644 src/Nethermind/Nethermind.JsonRpc/Modules/Eth/SimulateTxExecutor.cs delete mode 100644 src/Nethermind/Nethermind.JsonRpc/Modules/Witness/IWitnessRpcModule.cs delete mode 100644 src/Nethermind/Nethermind.JsonRpc/Modules/Witness/WitnessRpcModule.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin.Test/BlobBundleExtensions.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/MergeBlockProducerRunner.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/AnnounceMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/BlockBodiesSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/BlockHeadersMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/ContractCodesMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetBlockBodiesMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetBlockHeadersMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetContractCodesMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetHelperTrieProofsMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetReceiptsMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/HelperTrieProofsMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/ReceiptsMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/StatusMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/BlockWitnessHashesMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/GetBlockWitnessHashesMessageSerializerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/WitProtocolHandlerTests.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/CodeRequest.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/CostTracker.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/HelperTrieRequest.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/HelperTrieType.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesAnnounceType.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesMessageCode.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesProtocolHandler.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesProtocolInitializedEventArgs.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/AnnounceMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/AnnounceMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockBodiesMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockBodiesMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockHeadersMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockHeadersMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ContractCodesMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ContractCodesMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockBodiesMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockBodiesMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockHeadersMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockHeadersMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetContractCodesMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetContractCodesMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetHelperTrieProofsMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetHelperTrieProofsMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetReceiptsMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetReceiptsMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/HelperTrieProofsMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/HelperTrieProofsMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ReceiptsMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ReceiptsMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/StatusMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/StatusMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/RequestCost.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/BlockWitnessHashesMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/BlockWitnessHashesMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/GetBlockWitnessHashesMessage.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/GetBlockWitnessHashesMessageSerializer.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/WitMessageCode.cs delete mode 100644 src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/WitProtocolHandler.cs create mode 100644 src/Nethermind/Nethermind.Optimism.Test/GasCostTests.cs create mode 100644 src/Nethermind/Nethermind.Optimism.Test/Nethermind.Optimism.Test.csproj create mode 100644 src/Nethermind/Nethermind.Optimism.Test/ReceiptDecoderTests.cs create mode 100644 src/Nethermind/Nethermind.Optimism/IOptimismConfig.cs rename src/Nethermind/Nethermind.Optimism/{IOPConfigHelper.cs => IOptimismSpecHelper.cs} (77%) create mode 100644 src/Nethermind/Nethermind.Optimism/L1BlockGasInfo.cs create mode 100644 src/Nethermind/Nethermind.Optimism/OptimismConfig.cs create mode 100644 src/Nethermind/Nethermind.Optimism/OptimismReadOnlyTxProcessingEnv.cs rename src/Nethermind/Nethermind.Optimism/{OptimismReceiptDecoder.cs => OptimismReceiptMessageDecoder.cs} (67%) create mode 100644 src/Nethermind/Nethermind.Optimism/OptimismReceiptStorageDecoder.cs delete mode 100644 src/Nethermind/Nethermind.Optimism/OptimismReceiptsRootCalculator.cs create mode 100644 src/Nethermind/Nethermind.Optimism/ReadOnlyChainProcessingEnv.cs rename src/Nethermind/Nethermind.Optimism/{ => Rpc}/IOptimismEngineRpcModule.cs (99%) create mode 100644 src/Nethermind/Nethermind.Optimism/Rpc/IOptimismEthRpcModule.cs rename src/Nethermind/Nethermind.Optimism/{ => Rpc}/OptimismEngineRpcModule.cs (98%) create mode 100644 src/Nethermind/Nethermind.Optimism/Rpc/OptimismEthModuleFactory.cs create mode 100644 src/Nethermind/Nethermind.Optimism/Rpc/OptimismEthRpcModule.cs rename src/Nethermind/Nethermind.Optimism/{ => Rpc}/OptimismPayloadAttributes.cs (97%) create mode 100644 src/Nethermind/Nethermind.Optimism/Rpc/OptimismReceiptForRpc.cs create mode 100644 src/Nethermind/Nethermind.Optimism/Rpc/OptimismTraceModuleFactory.cs create mode 100644 src/Nethermind/Nethermind.Optimism/Rpc/RegisterOptimismRpcModules.cs delete mode 100644 src/Nethermind/Nethermind.State.Test/Witnesses/NullWitnessCollectorTests.cs delete mode 100644 src/Nethermind/Nethermind.State.Test/Witnesses/WitnessCollectorTests.cs delete mode 100644 src/Nethermind/Nethermind.State.Test/Witnesses/WitnessingStoreTests.cs create mode 100644 src/Nethermind/Nethermind.State/IPreBlockCaches.cs delete mode 100644 src/Nethermind/Nethermind.State/IWitnessCollector.cs delete mode 100644 src/Nethermind/Nethermind.State/IWitnessRepository.cs delete mode 100644 src/Nethermind/Nethermind.State/NullWitnessCollector.cs create mode 100644 src/Nethermind/Nethermind.State/OverlayWorldStateManager.cs create mode 100644 src/Nethermind/Nethermind.State/PreBlockCaches.cs delete mode 100644 src/Nethermind/Nethermind.State/Witnesses/WitnessCollector.cs delete mode 100644 src/Nethermind/Nethermind.State/Witnesses/WitnessingStore.cs create mode 100644 src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapProviderTests.cs delete mode 100644 src/Nethermind/Nethermind.Synchronization/LesSync/CanonicalHashTrie.cs delete mode 100644 src/Nethermind/Nethermind.Synchronization/LesSync/ChtDecoder.cs delete mode 100644 src/Nethermind/Nethermind.Synchronization/LesSync/ChtProofCollector.cs create mode 100644 src/Nethermind/Nethermind.Trie/PreCachedTrieStore.cs create mode 100644 src/Nethermind/Nethermind.Trie/Pruning/OverlayTrieStore.cs create mode 100644 tools/docgen/DBSizeGenerator.cs create mode 100644 tools/docgen/Properties/launchSettings.json diff --git a/.github/workflows/hive-consensus-tests.yml b/.github/workflows/hive-consensus-tests.yml index e507dd4c96d..65575337757 100644 --- a/.github/workflows/hive-consensus-tests.yml +++ b/.github/workflows/hive-consensus-tests.yml @@ -69,7 +69,7 @@ jobs: # Output the variables echo "skip_docker_build=$skip_docker_build" >> $GITHUB_OUTPUT - echo "wait_for_docker=$wait_for_docker" >> $GITHUB_OUTPUT + echo "skip_wait_for_docker=$skip_wait_for_docker" >> $GITHUB_OUTPUT - name: Trigger Docker Build Action with Cleaned Ref if: steps.check_conditions.outputs.skip_docker_build != 'true' diff --git a/.github/workflows/nethermind-tests.yml b/.github/workflows/nethermind-tests.yml index afee5450960..3b9fba7070e 100644 --- a/.github/workflows/nethermind-tests.yml +++ b/.github/workflows/nethermind-tests.yml @@ -62,6 +62,7 @@ jobs: - Nethermind.Network.Dns.Test - Nethermind.Network.Enr.Test - Nethermind.Network.Test + - Nethermind.Optimism.Test - Nethermind.Overseer.Test - Nethermind.Runner.Test - Nethermind.Serialization.Ssz.Test diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml index 9773b4b600f..dd82250f539 100644 --- a/.github/workflows/publish-docker.yml +++ b/.github/workflows/publish-docker.yml @@ -23,9 +23,7 @@ on: required: true default: release type: choice - options: - - release - - debug + options: [release, debug] jobs: publish-docker: @@ -46,14 +44,16 @@ jobs: - name: Build and push image to Docker Hub (staging) run: | branch=$(echo "${{ github.ref }}" | sed -e "s/refs\/heads\///g") - original_tag=${{ github.event.inputs.tag || '$branch' }} - tag=$(echo "$original_tag" | sed 's/\//-/g') # replace '/' with '-' in tag name + tag=$(echo "${{ github.event.inputs.tag || '$branch' }}" | sed 's/\//-/g') # replace '/' with '-' + image_name=nethermindeth/${{ github.event.inputs.image-name || 'nethermind' }} build_timestamp=$(date '+%s') + echo "Building image with tag $tag" docker buildx build --platform=linux/amd64,linux/arm64 \ -f ${{ github.event.inputs.dockerfile || 'Dockerfile' }} \ - -t "nethermindeth/${{ github.event.inputs.image-name || 'nethermind' }}:$tag" \ + -t "$image_name:$tag" \ + ${{ endsWith(github.ref, '/master') && github.event_name == 'push' && '-t $image_name:master-${GITHUB_SHA:0:7}' || '' }} \ --build-arg BUILD_CONFIG=${{ github.event.inputs.build-config || 'release' }} \ --build-arg BUILD_TIMESTAMP=$build_timestamp \ --build-arg CI=$CI \ diff --git a/.github/workflows/rpc-comparison.yml b/.github/workflows/rpc-comparison.yml index a9332ca13f7..4d7a65a87be 100644 --- a/.github/workflows/rpc-comparison.yml +++ b/.github/workflows/rpc-comparison.yml @@ -49,6 +49,8 @@ jobs: verify_correctness_of_setup: name: Verify if inputs are correct runs-on: ubuntu-latest + outputs: + custom_machine_type: ${{ steps.compute_machine_type.outputs.custom_machine_type }} steps: - name: Verify if inputs are correctly applied run: | @@ -65,6 +67,21 @@ jobs: IS_PERFORMANCE_CHECK: ${{ inputs.is_performance_check }} BRANCH_TO_COMPARE: ${{ inputs.branch_to_compare }} COMPARE_WITH: ${{ inputs.compare_with }} + + - name: Compute Machine Type + id: compute_machine_type + run: | + convert_to_paprika="${{ github.event.inputs.convert_to_paprika }}" + is_performance_check="${{ github.event.inputs.is_performance_check }}" + machine_type="" + if [[ "$convert_to_paprika" == 'true' && "$is_performance_check" == 'true' ]]; then + machine_type="g7-premium-16" + elif [[ "$convert_to_paprika" == 'true' ]]; then + machine_type="g6-standard-8" + elif [[ "$is_performance_check" == 'true' ]]; then + machine_type="g7-premium-8" + fi + echo "custom_machine_type=$machine_type" >> $GITHUB_OUTPUT create_main_node: name: Create node from current branch @@ -79,10 +96,10 @@ jobs: "default_dockerfile_build_type": "release", "ssh_keys": "", "allowed_ips": "${{ inputs.allowed_ips }}", - "custom_machine_type": "${{ (inputs.convert_to_paprika == 'true' && inputs.is_performance_check == 'true' && 'g7-premium-16') || (inputs.convert_to_paprika == 'true' && 'g6-standard-8') || (inputs.is_performance_check == 'true' && 'g7-premium-8') || '' }}" + "custom_machine_type": "${{ needs.verify_correctness_of_setup.outputs.custom_machine_type }}" } non_validator_mode: true - additional_nethermind_flags: Pruning.Mode=None JsonRpc.EnabledModules=[Eth,Subscribe,Trace,TxPool,Web3,Personal,Proof,Net,Parity,Health,Rpc,Debug,Admin] + additional_nethermind_flags: JsonRpc.EnabledModules=[Eth,Subscribe,Trace,TxPool,Web3,Personal,Proof,Net,Parity,Health,Rpc,Debug,Admin] JsonRpc.Timeout=3600000 log=INFO nethermind_repo_ref: ${{ github.ref }} custom_run_id: ${{ github.run_id }} network: "${{ inputs.network || 'mainnet' }}" @@ -102,10 +119,10 @@ jobs: "default_dockerfile_build_type": "release", "ssh_keys": "", "allowed_ips": "${{ inputs.allowed_ips }}", - "custom_machine_type": "${{ (inputs.convert_to_paprika == 'true' && inputs.is_performance_check == 'true' && 'g7-premium-16') || (inputs.convert_to_paprika == 'true' && 'g6-standard-8') || (inputs.is_performance_check == 'true' && 'g7-premium-8') || '' }}" + "custom_machine_type": "${{ needs.verify_correctness_of_setup.outputs.custom_machine_type }}" } non_validator_mode: true - additional_nethermind_flags: Pruning.Mode=None JsonRpc.EnabledModules=[Eth,Subscribe,Trace,TxPool,Web3,Personal,Proof,Net,Parity,Health,Rpc,Debug,Admin] + additional_nethermind_flags: JsonRpc.EnabledModules=[Eth,Subscribe,Trace,TxPool,Web3,Personal,Proof,Net,Parity,Health,Rpc,Debug,Admin] JsonRpc.Timeout=3600000 log=INFO nethermind_repo_ref: ${{ inputs.branch_to_compare }} custom_run_id: ${{ github.run_id }} network: "${{ inputs.network || 'mainnet' }}" @@ -302,6 +319,11 @@ jobs: check_jsonrpc_responding "$url" check_chain_head "$url" fi + + # Extra wait - nodes need to process a few new blocks - nice to have at least 128 of them after StateHealing + # Adding (128 - 32) * 12 seconds (-32 because we always keep 32 blocks to be processed after healing) + echo "Waiting for (128 - 32) blocks to be synced" + sleep 1152 compare: name: Compare JSON-RPC responses between clients and versions @@ -311,7 +333,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Install flood - run: pip install git+https://github.com/kamilchodola/flood.git + run: pip install --force-reinstall --no-deps git+https://github.com/kamilchodola/flood.git - name: Prepare Comparison Flags id: prep_comparison @@ -393,21 +415,21 @@ jobs: flood "$TEST" ${compare_to_other_branch_params} --rates 10 50 100 500 1000 --output "$TEST_perf_result" --duration 30 --deep-check | tee -a "$TEST_perf_result.txt" done else - echo "flood all ${compare_to_other_branch_params} --output equality_result_other --equality | tee output_other_branch.txt" - flood all ${compare_to_other_branch_params} --output equality_result_other --equality | tee output_other_branch.txt + echo "flood all ${compare_to_other_branch_params} --equality | tee output_other_branch.txt" + flood all ${compare_to_other_branch_params} --equality | tee output_other_branch.txt fi - name: Compare to INFURA Endpoint if: env.compare_to_infura == 'true' && inputs.is_performance_check != true run: | - echo "flood all ${compare_to_infura_params} --output equality_result_infura --equality | tee output_infura.txt" - flood all ${compare_to_infura_params} --output equality_result_infura --equality | tee output_infura.txt + echo "flood all ${compare_to_infura_params} --equality | tee output_infura.txt" + flood all ${compare_to_infura_params} --equality | tee output_infura.txt - name: Compare to Nethermind Archive Endpoint if: env.compare_to_archive == 'true' && inputs.is_performance_check != true run: | - echo "flood all ${compare_to_archive_params} --output equality_result_archive --equality | tee output_archive.txt" - flood all ${compare_to_archive_params} --output equality_result_archive --equality | tee output_archive.txt + echo "flood all ${compare_to_archive_params} --equality | tee output_archive.txt" + flood all ${compare_to_archive_params} --equality | tee output_archive.txt - name: Generate report run: | diff --git a/.github/workflows/run-a-single-node-from-branch.yml b/.github/workflows/run-a-single-node-from-branch.yml index 654dfc9f09c..e11cd1c8267 100644 --- a/.github/workflows/run-a-single-node-from-branch.yml +++ b/.github/workflows/run-a-single-node-from-branch.yml @@ -28,9 +28,10 @@ on: options: - lighthouse - lodestar - #- nimbus - prysm - teku + - nimbus + - nimbus_ws cl_custom_image: description: "In case of need to run non-default cl image (different than actually supported by Sedge) put it in there" default: "" diff --git a/.github/workflows/sync-testnets.yml b/.github/workflows/sync-testnets.yml index 0a8b99b9773..3a5b0bdfcdf 100644 --- a/.github/workflows/sync-testnets.yml +++ b/.github/workflows/sync-testnets.yml @@ -20,17 +20,17 @@ jobs: include: - network: "holesky" checkpoint-sync-url: "https://holesky.beaconstate.ethstaker.cc/" - cl-client: "lighthouse:sigp/lighthouse:latest" + cl-client: "lodestar:chainsafe/lodestar:latest" el-client: "nethermind:nethermindeth/nethermind:master" - agent: ubuntu-latest + agent: sync-agent-80gb - network: "chiado" checkpoint-sync-url: "http://139.144.26.89:4000/" - cl-client: "lighthouse:sigp/lighthouse:latest" + cl-client: "lodestar:chainsafe/lodestar:latest" el-client: "nethermind:nethermindeth/nethermind:master" agent: sync-agent-80gb - network: "sepolia" checkpoint-sync-url: "https://beaconstate-sepolia.chainsafe.io" - cl-client: "lighthouse:sigp/lighthouse:latest" + cl-client: "lodestar:chainsafe/lodestar:latest" el-client: "nethermind:nethermindeth/nethermind:master" agent: sync-agent-160gb name: "Run sync of ${{ matrix.network }} testnet" @@ -41,15 +41,6 @@ jobs: with: clean: true - - name: Configure settings - id: settings - run: | - echo "BUILD_TIMESTAMP=$(date '+%s')" >> $GITHUB_OUTPUT - echo "COMMIT_HASH=$(git describe --always --exclude=* --abbrev=40)" >> $GITHUB_OUTPUT - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - name: Installing requirements run: | sudo apt-get update @@ -82,6 +73,7 @@ jobs: --el-extra-flag Sync.NonValidatorNode=true --el-extra-flag Sync.DownloadBodiesInFastSync=false \ --el-extra-flag Sync.DownloadReceiptsInFastSync=false \ --el-extra-flag JsonRpc.EnabledModules=[Eth,Subscribe,Trace,TxPool,Web3,Personal,Proof,Net,Parity,Health,Rpc,Debug] \ + --el-extra-flag Sync.SnapSync=true \ --checkpoint-sync-url=${{ matrix.checkpoint-sync-url }} echo 'Running sedge...' ./build/sedge run -p $GITHUB_WORKSPACE/sedge @@ -90,29 +82,31 @@ jobs: id: wait timeout-minutes: 180 run: | - set +e - declare -A bad_logs bad_logs["Corrupt"]=1 bad_logs["Exception"]=1 - + declare -A good_logs good_logs["Synced Chain Head"]=0 good_logs["Processed"]=0 - + declare -A required_count required_count["Synced Chain Head"]=20 - required_count["Processed"]=20 - + required_count["Processed"]=20 + counter=0 found_bad_log=false - - echo "Starting Docker logs monitoring..." + docker logs -f sedge-execution-client | while read -r line; do echo "$line" - - if [[ $found_bad_log == true ]]; then - ((counter++)) + + if [[ "$line" == *"All done"* ]]; then + echo "Unexpected termination detected: $line" + exit 1 + fi + + if [ "$found_bad_log" = true ]; then + counter=$((counter + 1)) if [ $counter -ge 100 ]; then echo "Exiting after capturing extra logs due to error." exit 1 @@ -120,21 +114,21 @@ jobs: continue fi fi - + for bad_log in "${!bad_logs[@]}"; do if [[ "$line" == *"$bad_log"* ]]; then echo "Error: $bad_log found in Docker logs." - $found_bad_log=true - continue 2 + found_bad_log=true + break fi done - + for good_log in "${!good_logs[@]}"; do if [[ "$line" == *"$good_log"* ]]; then - ((good_logs["$good_log"]++)) + good_logs["$good_log"]=$((good_logs["$good_log"]+1)) fi done - + # Check if all good logs have reached the required count all_reached_required_count=true for good_log in "${!good_logs[@]}"; do @@ -143,7 +137,7 @@ jobs: break fi done - + if $all_reached_required_count; then echo "All required logs found." exit 0 diff --git a/.github/workflows/update-docs.yml b/.github/workflows/update-docs.yml index c4d8b8ad235..b6ceb554788 100644 --- a/.github/workflows/update-docs.yml +++ b/.github/workflows/update-docs.yml @@ -39,7 +39,9 @@ jobs: mv d/docs/interacting/json-rpc-ns/eth_subscribe.md n/docgen/eth_subscribe.md mv d/docs/interacting/json-rpc-ns/eth_unsubscribe.md n/docgen/eth_unsubscribe.md mv d/docs/monitoring/metrics/metrics.md n/docgen/metrics.md - cd n/docgen && ./DocGen && cd ../.. + cd n/docgen + ./DocGen --config --jsonrpc --metrics + cd ../.. mv n/docgen/configuration.md d/docs/fundamentals/configuration.md rm -f d/docs/interacting/json-rpc-ns/*.md mv n/docgen/eth_subscribe.md d/docs/interacting/json-rpc-ns/eth_subscribe.md diff --git a/Dockerfile b/Dockerfile index 23fc81ca4ed..ccdea679109 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited # SPDX-License-Identifier: LGPL-3.0-only -FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-jammy AS build +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-noble AS build ARG BUILD_CONFIG=release ARG BUILD_TIMESTAMP @@ -9,7 +9,6 @@ ARG CI ARG COMMIT_HASH ARG TARGETARCH -COPY .git .git COPY src/Nethermind src/Nethermind RUN arch=$([ "$TARGETARCH" = "amd64" ] && echo "x64" || echo "$TARGETARCH") && \ @@ -19,7 +18,7 @@ RUN arch=$([ "$TARGETARCH" = "amd64" ] && echo "x64" || echo "$TARGETARCH") && \ # A temporary symlink to support the old executable name RUN ln -s -r /publish/nethermind /publish/Nethermind.Runner -FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:8.0-jammy +FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:8.0-noble WORKDIR /nethermind diff --git a/Dockerfile.chiseled b/Dockerfile.chiseled index 2a7185f1855..936c78877dc 100644 --- a/Dockerfile.chiseled +++ b/Dockerfile.chiseled @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited # SPDX-License-Identifier: LGPL-3.0-only -FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-jammy AS build +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-noble AS build ARG BUILD_CONFIG=release ARG BUILD_TIMESTAMP @@ -9,7 +9,6 @@ ARG CI ARG COMMIT_HASH ARG TARGETARCH -COPY .git .git COPY src/Nethermind src/Nethermind RUN arch=$([ "$TARGETARCH" = "amd64" ] && echo "x64" || echo "$TARGETARCH") && \ @@ -22,7 +21,7 @@ RUN cd /publish && \ mkdir logs && \ mkdir nethermind_db -FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:8.0-jammy-chiseled +FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:8.0-noble-chiseled WORKDIR /nethermind diff --git a/Dockerfile.diag b/Dockerfile.diag index 6fca05c60ff..768e8fa9c2e 100644 --- a/Dockerfile.diag +++ b/Dockerfile.diag @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited # SPDX-License-Identifier: LGPL-3.0-only -FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-jammy AS build +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-noble AS build ARG BUILD_CONFIG=release ARG BUILD_TIMESTAMP @@ -9,7 +9,6 @@ ARG CI ARG COMMIT_HASH ARG TARGETARCH -COPY .git .git COPY src/Nethermind src/Nethermind RUN arch=$([ "$TARGETARCH" = "amd64" ] && echo "x64" || echo "$TARGETARCH") && \ @@ -23,7 +22,7 @@ RUN dotnet tool install -g dotnet-dump && \ dotnet tool install -g dotnet-trace && \ dotnet tool install -g JetBrains.dotTrace.GlobalTools -FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:8.0-jammy +FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:8.0-noble WORKDIR /nethermind diff --git a/src/Nethermind/Chains/base-mainnet.json b/src/Nethermind/Chains/base-mainnet.json index c4de3a61e80..c0853d933aa 100644 --- a/src/Nethermind/Chains/base-mainnet.json +++ b/src/Nethermind/Chains/base-mainnet.json @@ -6,6 +6,8 @@ "params": { "regolithTimestamp": "0x0", "bedrockBlockNumber": "0x0", + "canyonTimestamp": "0x65a01e91", + "ecotoneTimestamp": "0x65f23e01", "l1FeeRecipient": "0x420000000000000000000000000000000000001A", "l1BlockAddress": "0x4200000000000000000000000000000000000015" } @@ -47,11 +49,16 @@ "eip3529Transition": "0x0", "eip3541Transition": "0x0", - "eip1153TransitionTimestamp": "0x65F23E01", - "eip4788TransitionTimestamp": "0x65F23E01", - "eip4844TransitionTimestamp": "0x65F23E01", - "eip5656TransitionTimestamp": "0x65F23E01", - "eip6780TransitionTimestamp": "0x65F23E01", + "eip4895TransitionTimestamp": "0x65a01e91", + "eip3651TransitionTimestamp": "0x65a01e91", + "eip3855TransitionTimestamp": "0x65a01e91", + "eip3860TransitionTimestamp": "0x65a01e91", + + "eip1153TransitionTimestamp": "0x65f23e01", + "eip4788TransitionTimestamp": "0x65f23e01", + "eip4844TransitionTimestamp": "0x65f23e01", + "eip5656TransitionTimestamp": "0x65f23e01", + "eip6780TransitionTimestamp": "0x65f23e01", "terminalTotalDifficulty": "0" }, @@ -71,6 +78,16 @@ "baseFeePerGas": "0x3b9aca00", "gasLimit": "0x1c9c380" }, + "nodes": [ + "enode://ca2774c3c401325850b2477fd7d0f27911efbf79b1e8b335066516e2bd8c4c9e0ba9696a94b1cb030a88eac582305ff55e905e64fb77fe0edcd70a4e5296d3ec@34.65.175.185:30305", + "enode://dd751a9ef8912be1bfa7a5e34e2c3785cc5253110bd929f385e07ba7ac19929fb0e0c5d93f77827291f4da02b2232240fbc47ea7ce04c46e333e452f8656b667@34.65.107.0:30305", + "enode://c5d289b56a77b6a2342ca29956dfd07aadf45364dde8ab20d1dc4efd4d1bc6b4655d902501daea308f4d8950737a4e93a4dfedd17b49cd5760ffd127837ca965@34.65.202.239:30305", + "enode://87a32fd13bd596b2ffca97020e31aef4ddcc1bbd4b95bb633d16c1329f654f34049ed240a36b449fda5e5225d70fe40bc667f53c304b71f8e68fc9d448690b51@3.231.138.188:30301", + "enode://ca21ea8f176adb2e229ce2d700830c844af0ea941a1d8152a9513b966fe525e809c3a6c73a2c18a12b74ed6ec4380edf91662778fe0b79f6a591236e49e176f9@184.72.129.189:30301", + "enode://acf4507a211ba7c1e52cdf4eef62cdc3c32e7c9c47998954f7ba024026f9a6b2150cd3f0b734d9c78e507ab70d59ba61dfe5c45e1078c7ad0775fb251d7735a2@3.220.145.177:30301", + "enode://8a5a5006159bf079d06a04e5eceab2a1ce6e0f721875b2a9c96905336219dbe14203d38f70f3754686a6324f786c2f9852d8c0dd3adac2d080f4db35efc678c5@3.231.11.52:30301", + "enode://cdadbe835308ad3557f9a1de8db411da1a260a98f8421d62da90e71da66e55e98aaa8e90aa7ce01b408a54e4bd2253d701218081ded3dbe5efbbc7b41d7cef79@54.198.153.150:30301" + ], "accounts": { "0000000000000000000000000000000000000001": { "builtin": { diff --git a/src/Nethermind/Chains/base-sepolia.json b/src/Nethermind/Chains/base-sepolia.json index e095bb3dd38..7faf0bda489 100644 --- a/src/Nethermind/Chains/base-sepolia.json +++ b/src/Nethermind/Chains/base-sepolia.json @@ -7,6 +7,7 @@ "regolithTimestamp": "0x0", "bedrockBlockNumber": "0x0", "canyonTimestamp": "0x6553a790", + "ecotoneTimestamp": "0x65d62c10", "l1FeeRecipient": "0x420000000000000000000000000000000000001A", "l1BlockAddress": "0x4200000000000000000000000000000000000015", "canyonBaseFeeChangeDenominator": "250", @@ -80,6 +81,13 @@ "baseFeePerGas": "0x3b9aca00", "gasLimit": "0x17d7840" }, + "nodes": [ + "enode://2bd2e657bb3c8efffb8ff6db9071d9eb7be70d7c6d7d980ff80fc93b2629675c5f750bc0a5ef27cd788c2e491b8795a7e9a4a6e72178c14acc6753c0e5d77ae4@34.65.205.244:30305", + "enode://db8e1cab24624cc62fc35dbb9e481b88a9ef0116114cd6e41034c55b5b4f18755983819252333509bd8e25f6b12aadd6465710cd2e956558faf17672cce7551f@34.65.173.88:30305", + "enode://bfda2e0110cfd0f4c9f7aa5bf5ec66e6bd18f71a2db028d36b8bf8b0d6fdb03125c1606a6017b31311d96a36f5ef7e1ad11604d7a166745e6075a715dfa67f8a@34.65.229.245:30305", + "enode://548f715f3fc388a7c917ba644a2f16270f1ede48a5d88a4d14ea287cc916068363f3092e39936f1a3e7885198bef0e5af951f1d7b1041ce8ba4010917777e71f@18.210.176.114:30301", + "enode://6f10052847a966a725c9f4adf6716f9141155b99a0fb487fea3f51498f4c2a2cb8d534e680ee678f9447db85b93ff7c74562762c3714783a7233ac448603b25f@107.21.251.55:30301" + ], "accounts": { "0000000000000000000000000000000000000001": { "balance": "0x1", diff --git a/src/Nethermind/Chains/chiado.json b/src/Nethermind/Chains/chiado.json index e2cef850df4..5a61c9ef01e 100644 --- a/src/Nethermind/Chains/chiado.json +++ b/src/Nethermind/Chains/chiado.json @@ -98,11 +98,12 @@ "gasLimit": "0x989680" }, "nodes": [ - "enode://7dd44af6138120f328bb031eb56e00985c149319d4f1e33275b30be7fddadd8ccd9f7b9c3b35a16136a61e85b2b2d1de073f30ec1d0ddf576a33be8ff48d88d0@139.144.26.89:30303", - "enode://317b9cee65ccf1d747b00e604242bfa3ae367beee8f149e28c5b2b88820f855ea7b5a75eb5327cfc3d8ca97adbf71538468290a46592ed7009f3fb394ec752f1@139.144.26.115:30303", - "enode://b77ae97906155ebbb83fd32c87ab0aa57372a24abbd8aa4bae679f048b726de4a195709f613be4981e44b24640bc89e4824427d94e9a37afc148da8250c8ab2d@139.144.26.101:30303", - "enode://69f8abfa3b0221161f8c19014b90857a18742554af27af73fd779c486728750a0ff11b873975f104fc5276a3a7c3b5b68cb3c26c815e9f78462901895d652124@139.144.26.85:30303", - "enode://ac7fc76f9b2ab343fb2d091365a7f46d17018e525cbedfbf24b247c76657e934ef4df61cc2f6dad6bfcf722425e03e1a8a6e4e4b52743acc2319cb8ebf27d742@170.187.154.239:30303", + "enode://3c9849b809dc34c914fcdf507ff59931942bdf5cd11510782a7d5695eacd622a281ae0b46aa53b8b893e1308f94867001d0fb0b52c854f96e7ecf43490f5b7bb@139.144.26.89:30303", + "enode://1556022f95f2910ed795b80df68466284b5a7de112cb00d5f4843b486392e7e790c9d27cf358bf1e3ceff3089df36dcadae593eda9730565a7221e40a96b8cd4@139.144.26.115:30303", + "enode://b39e929805542fb141ca6946931d06fdbbbd9ea8202eb1e72d7e7484877658b5baf0d8b0a6eb86a7f34b6f5c4b15b080c807c851692baef96c6a5aeca2cbf29a@139.144.26.101:30303", + "enode://5f7074a38a84e7ed7cbb207b9b1a54b4c537c5d06ebc955c892528f95927eb63a3373e344302cb1bcc2242451899c276a21e360a4347674cb97e0b9c251c2704@139.144.26.85:30303", + "enode://9ff64d021a83c72d68e7a3cefac5ea0661071cfdeed065782418ff2b0fccaace1072644118ed9fe6a304f451a2e75e2d4c69b502b3486ce16b4c50afc347cbff@170.187.154.239:30303", + "enode://4504f03b4773251188e80d2c36186de4c2dd0e1e83aadaa1164cdae2ebc510d47a3dba6c80972ea18a71177ab3aa9883e081f5a350e8979cb7127e63bb6b81ea@139.144.173.54:30303", "enode://712144ac396fd2298b3e2559e2930d7f3a36fded3addd66955224958f1845634067717ab9522757ed2948f480fc52add5676487c8378e9011a7e2c0ac2f36cc3@3.71.132.231:30303", "enode://595160631241ea41b187b85716f9f9572a266daa940d74edbe3b83477264ce284d69208e61cf50e91641b1b4f9a03fa8e60eb73d435a84cf4616b1c969bc2512@3.69.35.13:30303", "enode://5abc2f73f81ea6b94f1e1b1e376731fc662ecd7863c4c7bc83ec307042542a64feab5af7985d52b3b1432acf3cb82460b327d0b6b70cb732afb1e5a16d6b1e58@35.206.174.92:30303", diff --git a/src/Nethermind/Chains/op-mainnet.json b/src/Nethermind/Chains/op-mainnet.json index 09cd4bdf480..2c04e2cc3c1 100644 --- a/src/Nethermind/Chains/op-mainnet.json +++ b/src/Nethermind/Chains/op-mainnet.json @@ -6,6 +6,8 @@ "params": { "regolithTimestamp": "0x0", "bedrockBlockNumber": "0x645C277", + "canyonTimestamp": "0x65a01e91", + "ecotoneTimestamp": "0x65f23e01", "l1FeeRecipient": "0x420000000000000000000000000000000000001A", "l1BlockAddress": "0x4200000000000000000000000000000000000015" } @@ -52,11 +54,16 @@ "eip3529Transition": "0x645C277", "eip3541Transition": "0x645C277", - "eip1153TransitionTimestamp": "0x65F23E01", - "eip4788TransitionTimestamp": "0x65F23E01", - "eip4844TransitionTimestamp": "0x65F23E01", - "eip5656TransitionTimestamp": "0x65F23E01", - "eip6780TransitionTimestamp": "0x65F23E01", + "eip4895TransitionTimestamp": "0x65a01e91", + "eip3651TransitionTimestamp": "0x65a01e91", + "eip3855TransitionTimestamp": "0x65a01e91", + "eip3860TransitionTimestamp": "0x65a01e91", + + "eip1153TransitionTimestamp": "0x65f23e01", + "eip4788TransitionTimestamp": "0x65f23e01", + "eip4844TransitionTimestamp": "0x65f23e01", + "eip5656TransitionTimestamp": "0x65f23e01", + "eip6780TransitionTimestamp": "0x65f23e01", "terminalTotalDifficulty": "0" }, diff --git a/src/Nethermind/Chains/op-sepolia.json b/src/Nethermind/Chains/op-sepolia.json index 1068ceb6c0e..f90ba4e5a25 100644 --- a/src/Nethermind/Chains/op-sepolia.json +++ b/src/Nethermind/Chains/op-sepolia.json @@ -7,6 +7,8 @@ "regolithTimestamp": "0x0", "bedrockBlockNumber": "0x0", "canyonTimestamp": "0x6553a790", + "ecotoneTimestamp": "0x65D62C10", + "fjordTimestamp": "0x66575100", "l1FeeRecipient": "0x420000000000000000000000000000000000001A", "l1BlockAddress": "0x4200000000000000000000000000000000000015", "canyonBaseFeeChangeDenominator": "250", @@ -50,18 +52,16 @@ "eip3198Transition": "0x0", "eip3529Transition": "0x0", "eip3541Transition": "0x0", - "eip4895TransitionTimestamp": "0x6553a790", "eip3651TransitionTimestamp": "0x6553a790", "eip3855TransitionTimestamp": "0x6553a790", "eip3860TransitionTimestamp": "0x6553a790", - "eip1153TransitionTimestamp": "0x65D62C10", "eip4788TransitionTimestamp": "0x65D62C10", "eip4844TransitionTimestamp": "0x65D62C10", "eip5656TransitionTimestamp": "0x65D62C10", "eip6780TransitionTimestamp": "0x65D62C10", - + "eip7212TransitionTimestamp": "0x66575100", "terminalTotalDifficulty": "0" }, "genesis": { @@ -82,8 +82,8 @@ }, "nodes": [ "enode://2bd2e657bb3c8efffb8ff6db9071d9eb7be70d7c6d7d980ff80fc93b2629675c5f750bc0a5ef27cd788c2e491b8795a7e9a4a6e72178c14acc6753c0e5d77ae4@34.65.205.244:30305", - "enode://db8e1cab24624cc62fc35dbb9e481b88a9ef0116114cd6e41034c55b5b4f18755983819252333509bd8e25f6b12aadd6465710cd2e956558faf17672cce7551f@34.65.173.88:30305", - "enode://bfda2e0110cfd0f4c9f7aa5bf5ec66e6bd18f71a2db028d36b8bf8b0d6fdb03125c1606a6017b31311d96a36f5ef7e1ad11604d7a166745e6075a715dfa67f8a@34.65.229.245:30305", + "enode://db8e1cab24624cc62fc35dbb9e481b88a9ef0116114cd6e41034c55b5b4f18755983819252333509bd8e25f6b12aadd6465710cd2e956558faf17672cce7551f@34.65.173.88:30305", + "enode://bfda2e0110cfd0f4c9f7aa5bf5ec66e6bd18f71a2db028d36b8bf8b0d6fdb03125c1606a6017b31311d96a36f5ef7e1ad11604d7a166745e6075a715dfa67f8a@34.65.229.245:30305", "enode://548f715f3fc388a7c917ba644a2f16270f1ede48a5d88a4d14ea287cc916068363f3092e39936f1a3e7885198bef0e5af951f1d7b1041ce8ba4010917777e71f@18.210.176.114:30301", "enode://6f10052847a966a725c9f4adf6716f9141155b99a0fb487fea3f51498f4c2a2cb8d534e680ee678f9447db85b93ff7c74562762c3714783a7233ac448603b25f@107.21.251.55:30301" ], @@ -12574,4 +12574,4 @@ "balance": "0x0" } } -} +} \ No newline at end of file diff --git a/src/Nethermind/Directory.Build.props b/src/Nethermind/Directory.Build.props index 5a068779c77..b1ac734da65 100644 --- a/src/Nethermind/Directory.Build.props +++ b/src/Nethermind/Directory.Build.props @@ -13,8 +13,8 @@ $([System.DateTimeOffset]::UtcNow.ToUnixTimeSeconds()) Demerzel Solutions Limited Nethermind - $(Commit.Substring(0, 8)) - 1.26.0 + $(Commit) + 1.27.0 unstable @@ -23,10 +23,6 @@ <_Parameter1>BuildTimestamp <_Parameter2>$(BuildTimestamp) - - <_Parameter1>Commit - <_Parameter2>$(Commit) - diff --git a/src/Nethermind/Directory.Packages.props b/src/Nethermind/Directory.Packages.props index 1f3ac180c03..5d784e7530d 100644 --- a/src/Nethermind/Directory.Packages.props +++ b/src/Nethermind/Directory.Packages.props @@ -3,62 +3,63 @@ true - - - - - - + + + + + + + - + - - + + - + - - - - - - - - + + + + + + + + + - + - + - - + + - + - - + + - - + @@ -66,14 +67,14 @@ - + - + - - + + \ No newline at end of file diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/BerlinBlockChainTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/BerlinBlockChainTests.cs new file mode 100644 index 00000000000..bc1ba343cf8 --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/BerlinBlockChainTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Ethereum.Test.Base; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class BerlinBlockChainTests : BlockchainTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public async Task Test(BlockchainTest test) => await RunTest(test); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), "fixtures/blockchain_tests/berlin"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/BerlinStateTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/BerlinStateTests.cs new file mode 100644 index 00000000000..34346dc7e0f --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/BerlinStateTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using Ethereum.Test.Base; +using FluentAssertions; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class BerlinStateTests : GeneralStateTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public void Test(GeneralStateTest test) => RunTest(test).Pass.Should().BeTrue(); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/state_tests/berlin"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ByzantiumBlockChainTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ByzantiumBlockChainTests.cs new file mode 100644 index 00000000000..08c90d0e5a8 --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ByzantiumBlockChainTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Ethereum.Test.Base; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class ByzantiumBlockChainTests : BlockchainTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public async Task Test(BlockchainTest test) => await RunTest(test); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), "fixtures/blockchain_tests/byzantium"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ByzantiumStateTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ByzantiumStateTests.cs new file mode 100644 index 00000000000..6ef336fcd70 --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ByzantiumStateTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using Ethereum.Test.Base; +using FluentAssertions; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class ByzantiumStateTests : GeneralStateTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public void Test(GeneralStateTest test) => RunTest(test).Pass.Should().BeTrue(); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/state_tests/byzantium"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/CancunStateTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/CancunStateTests.cs index 5a0082d4b28..737487c2740 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/CancunStateTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/CancunStateTests.cs @@ -13,8 +13,6 @@ namespace Ethereum.Blockchain.Pyspec.Test; [Parallelizable(ParallelScope.All)] public class CancunStateTests : GeneralStateTestBase { - - [Explicit("We are failing some of those tests")] [TestCaseSource(nameof(LoadTests))] public void Test(GeneralStateTest test) => RunTest(test).Pass.Should().BeTrue(); diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/FrontierBlockChainTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/FrontierBlockChainTests.cs new file mode 100644 index 00000000000..c289ecc91bc --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/FrontierBlockChainTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Ethereum.Test.Base; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class FrontierBlockChainTests : BlockchainTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public async Task Test(BlockchainTest test) => await RunTest(test); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), "fixtures/blockchain_tests/frontier"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/FrontierStateTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/FrontierStateTests.cs new file mode 100644 index 00000000000..89526a552bf --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/FrontierStateTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using Ethereum.Test.Base; +using FluentAssertions; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class FrontierStateTests : GeneralStateTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public void Test(GeneralStateTest test) => RunTest(test).Pass.Should().BeTrue(); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/state_tests/frontier"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/HomesteadBlockChainTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/HomesteadBlockChainTests.cs new file mode 100644 index 00000000000..e73cc62f28f --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/HomesteadBlockChainTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Ethereum.Test.Base; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class HomesteadBlockChainTests : BlockchainTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public async Task Test(BlockchainTest test) => await RunTest(test); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), "fixtures/blockchain_tests/homestead"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/HomesteadStateTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/HomesteadStateTests.cs new file mode 100644 index 00000000000..48bee00d4ff --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/HomesteadStateTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using Ethereum.Test.Base; +using FluentAssertions; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class HomesteadStateTests : GeneralStateTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public void Test(GeneralStateTest test) => RunTest(test).Pass.Should().BeTrue(); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/state_tests/homestead"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/IstanbulBlockChainTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/IstanbulBlockChainTests.cs new file mode 100644 index 00000000000..5a239c1c93e --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/IstanbulBlockChainTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Ethereum.Test.Base; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class IstanbulBlockChainTests : BlockchainTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public async Task Test(BlockchainTest test) => await RunTest(test); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), "fixtures/blockchain_tests/istanbul"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/IstanbulStateTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/IstanbulStateTests.cs new file mode 100644 index 00000000000..41274723230 --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/IstanbulStateTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using Ethereum.Test.Base; +using FluentAssertions; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class IstanbulStateTests : GeneralStateTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public void Test(GeneralStateTest test) => RunTest(test).Pass.Should().BeTrue(); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/state_tests/istanbul"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ParisBlockChainTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ParisBlockChainTests.cs new file mode 100644 index 00000000000..a9ff1201768 --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ParisBlockChainTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Ethereum.Test.Base; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class ParisBlockChainTests : BlockchainTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public async Task Test(BlockchainTest test) => await RunTest(test); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), "fixtures/blockchain_tests/paris"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ShanghaiTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ShanghaiBlockChainTests.cs similarity index 92% rename from src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ShanghaiTests.cs rename to src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ShanghaiBlockChainTests.cs index 0c3928f6233..8a9aded47ca 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ShanghaiTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ShanghaiBlockChainTests.cs @@ -11,7 +11,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -public class ShanghaiTests : BlockchainTestBase +public class ShanghaiBlockChainTests : BlockchainTestBase { [TestCaseSource(nameof(LoadTests))] public async Task Test(BlockchainTest test) => await RunTest(test); diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ShanghaiStateTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ShanghaiStateTests.cs new file mode 100644 index 00000000000..efab53db059 --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/ShanghaiStateTests.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; +using Ethereum.Test.Base; +using FluentAssertions; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class ShanghaiStateTests : GeneralStateTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public void Test(GeneralStateTest test) => RunTest(test).Pass.Should().BeTrue(); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/state_tests/shanghai"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Test/MetaTests.cs b/src/Nethermind/Ethereum.Blockchain.Test/MetaTests.cs index 4d6b6752274..6797ee8c60d 100644 --- a/src/Nethermind/Ethereum.Blockchain.Test/MetaTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Test/MetaTests.cs @@ -37,7 +37,7 @@ public void All_categories_are_tested() { string expectedTypeName = ExpectedTypeName(directory).Replace("-", ""); Type type = types.SingleOrDefault(t => string.Equals(t.Name, expectedTypeName, StringComparison.InvariantCultureIgnoreCase)); - if (type == null && !excludesDirectories.Contains(directory)) + if (type is null && !excludesDirectories.Contains(directory)) { if (new DirectoryInfo(directory).GetFiles().Any(f => f.Name.Contains(".resources."))) { diff --git a/src/Nethermind/Ethereum.Rlp.Test/RlpTests.cs b/src/Nethermind/Ethereum.Rlp.Test/RlpTests.cs index 2a1369a1ed6..6185329ed45 100644 --- a/src/Nethermind/Ethereum.Rlp.Test/RlpTests.cs +++ b/src/Nethermind/Ethereum.Rlp.Test/RlpTests.cs @@ -185,7 +185,7 @@ public void PerfTest() stopwatch.Stop(); Console.WriteLine($"2nd: {stopwatch.ElapsedMilliseconds}"); - if (block == null || perfBlock == null || block.Number != perfBlock.Number) + if (block is null || perfBlock is null || block.Number != perfBlock.Number) { throw new Exception(); } diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs index ad4d7078b2c..cba811e90e4 100644 --- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs @@ -148,15 +148,18 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? IHeaderValidator headerValidator = new HeaderValidator(blockTree, Sealer, specProvider, _logManager); IUnclesValidator unclesValidator = new UnclesValidator(blockTree, headerValidator, _logManager); IBlockValidator blockValidator = new BlockValidator(txValidator, headerValidator, unclesValidator, specProvider, _logManager); + CodeInfoRepository codeInfoRepository = new(); IVirtualMachine virtualMachine = new VirtualMachine( blockhashProvider, specProvider, + codeInfoRepository, _logManager); TransactionProcessor? txProcessor = new( specProvider, stateProvider, virtualMachine, + codeInfoRepository, _logManager); IBlockProcessor blockProcessor = new BlockProcessor( @@ -167,7 +170,6 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? stateProvider), stateProvider, receiptStorage, - NullWitnessCollector.Instance, new BlockhashStore(blockTree, specProvider, stateProvider), txProcessor, _logManager); @@ -340,13 +342,13 @@ private void InitializeTestState(BlockchainTest test, IWorldState stateProvider, private List RunAssertions(BlockchainTest test, Block headBlock, IWorldState stateProvider) { - if (test.PostStateRoot != null) + if (test.PostStateRoot is not null) { return test.PostStateRoot != stateProvider.StateRoot ? new List { "state root mismatch" } : Enumerable.Empty().ToList(); } TestBlockHeaderJson testHeaderJson = (test.Blocks? - .Where(b => b.BlockHeader != null) + .Where(b => b.BlockHeader is not null) .SingleOrDefault(b => new Hash256(b.BlockHeader.Hash) == headBlock.Hash)?.BlockHeader) ?? test.GenesisBlockHeader; BlockHeader testHeader = JsonToEthereumTest.Convert(testHeaderJson); List differences = new(); diff --git a/src/Nethermind/Ethereum.Test.Base/FileTestsSource.cs b/src/Nethermind/Ethereum.Test.Base/FileTestsSource.cs index 71fa118309e..2e0baece45e 100644 --- a/src/Nethermind/Ethereum.Test.Base/FileTestsSource.cs +++ b/src/Nethermind/Ethereum.Test.Base/FileTestsSource.cs @@ -29,7 +29,7 @@ public IEnumerable LoadGeneralStateTests() return Enumerable.Empty(); } - if (_wildcard != null && !_fileName.Contains(_wildcard)) + if (_wildcard is not null && !_fileName.Contains(_wildcard)) { return Enumerable.Empty(); } @@ -52,7 +52,7 @@ public IEnumerable LoadBlockchainTests() return Enumerable.Empty(); } - if (_wildcard != null && !_fileName.Contains(_wildcard)) + if (_wildcard is not null && !_fileName.Contains(_wildcard)) { return Enumerable.Empty(); } diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs index d3190aa83bf..09158536941 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs @@ -33,6 +33,7 @@ public class GeneralStateTest : IEthereumTest public Hash256? CurrentRandom { get; set; } public Hash256? CurrentBeaconRoot { get; set; } public Hash256? CurrentWithdrawalsRoot { get; set; } + public ulong? CurrentExcessBlobGas { get; set; } public UInt256? ParentBlobGasUsed { get; set; } public UInt256? ParentExcessBlobGas { get; set; } diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralStateTestEnvJson.cs b/src/Nethermind/Ethereum.Test.Base/GeneralStateTestEnvJson.cs index f94f6015a02..a82748257d9 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralStateTestEnvJson.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralStateTestEnvJson.cs @@ -19,6 +19,7 @@ public class GeneralStateTestEnvJson public Hash256? CurrentRandom { get; set; } public Hash256? CurrentBeaconRoot { get; set; } public Hash256? CurrentWithdrawalsRoot { get; set; } + public ulong? CurrentExcessBlobGas { get; set; } public UInt256? ParentBlobGasUsed { get; set; } public UInt256? ParentExcessBlobGas { get; set; } } diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index 35b1533d69b..9965d252324 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -4,11 +4,14 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using Nethermind.Blockchain; +using Nethermind.Consensus.Ethash; using Nethermind.Consensus.Validators; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; using Nethermind.Crypto; using Nethermind.Db; using Nethermind.Int256; @@ -30,6 +33,7 @@ public abstract class GeneralStateTestBase private static ILogger _logger = new(new ConsoleAsyncLogger(LogLevel.Info)); private static ILogManager _logManager = LimboLogs.Instance; private static UInt256 _defaultBaseFeeForStateTest = 0xA; + private readonly TxValidator _txValidator = new(MainnetSpecProvider.Instance.ChainId); [SetUp] public void Setup() @@ -67,15 +71,18 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) TrieStore trieStore = new(stateDb, _logManager); WorldState stateProvider = new(trieStore, codeDb, _logManager); IBlockhashProvider blockhashProvider = new TestBlockhashProvider(); + CodeInfoRepository codeInfoRepository = new(); IVirtualMachine virtualMachine = new VirtualMachine( blockhashProvider, specProvider, + codeInfoRepository, _logManager); TransactionProcessor transactionProcessor = new( specProvider, stateProvider, virtualMachine, + codeInfoRepository, _logManager); InitializeTestState(test, stateProvider, specProvider); @@ -96,13 +103,16 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) header.MixHash = test.CurrentRandom; header.WithdrawalsRoot = test.CurrentWithdrawalsRoot; header.ParentBeaconBlockRoot = test.CurrentBeaconRoot; - header.ExcessBlobGas = 0; + header.ExcessBlobGas = test.CurrentExcessBlobGas ?? (test.Fork is Cancun ? 0ul : null); + header.BlobGasUsed = BlobGasCalculator.CalculateBlobGas(test.Transaction); header.RequestsRoot = test.RequestsRoot; Stopwatch stopwatch = Stopwatch.StartNew(); - TxValidator? txValidator = new((MainnetSpecProvider.Instance.ChainId)); IReleaseSpec? spec = specProvider.GetSpec((ForkActivation)test.CurrentNumber); - if (test.Transaction.ChainId == null) + + if (spec is Cancun) KzgPolynomialCommitments.InitializeAsync(); + + if (test.Transaction.ChainId is null) test.Transaction.ChainId = MainnetSpecProvider.Instance.ChainId; if (test.ParentBlobGasUsed is not null && test.ParentExcessBlobGas is not null) { @@ -122,7 +132,11 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) }; header.ExcessBlobGas = BlobGasCalculator.CalculateExcessBlobGas(parent, spec); } - bool isValid = txValidator.IsWellFormed(test.Transaction, spec); + + Block block = Build.A.Block.WithTransactions(test.Transaction).WithHeader(header).TestObject; + + bool isValid = _txValidator.IsWellFormed(test.Transaction, spec) && IsValidBlock(block, specProvider); + if (isValid) transactionProcessor.Execute(test.Transaction, new BlockExecutionContext(header), txTracer); stopwatch.Stop(); @@ -168,6 +182,22 @@ private static void InitializeTestState(GeneralStateTest test, WorldState stateP stateProvider.Reset(); } + private bool IsValidBlock(Block block, ISpecProvider specProvider) + { + IBlockTree blockTree = Build.A.BlockTree() + .WithSpecProvider(specProvider) + .WithoutSettingHead + .TestObject; + + var difficultyCalculator = new EthashDifficultyCalculator(specProvider); + var sealer = new EthashSealValidator(_logManager, difficultyCalculator, new CryptoRandom(), new Ethash(_logManager), Timestamper.Default); + IHeaderValidator headerValidator = new HeaderValidator(blockTree, sealer, specProvider, _logManager); + IUnclesValidator unclesValidator = new UnclesValidator(blockTree, headerValidator, _logManager); + IBlockValidator blockValidator = new BlockValidator(_txValidator, headerValidator, unclesValidator, specProvider, _logManager); + + return blockValidator.ValidateOrphanedBlock(block, out _); + } + private List RunAssertions(GeneralStateTest test, IWorldState stateProvider) { List differences = new(); diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index f745b72618d..5e33bde1488 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -85,7 +85,7 @@ private static ForkActivation TransitionForkActivation(string transitionInfo) public static BlockHeader Convert(TestBlockHeaderJson? headerJson) { - if (headerJson == null) + if (headerJson is null) { throw new InvalidDataException("Header JSON was null when constructing test."); } @@ -151,7 +151,7 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t else transaction.AccessList = null; - if (transactionJson.MaxFeePerGas != null) + if (transactionJson.MaxFeePerGas is not null) transaction.Type = TxType.EIP1559; if (transaction.BlobVersionedHashes?.Length > 0) @@ -202,7 +202,7 @@ private static AccountState Convert(AccountStateJson accountStateJson) public static IEnumerable Convert(string name, GeneralStateTestJson testJson) { - if (testJson.LoadFailure != null) + if (testJson.LoadFailure is not null) { return Enumerable.Repeat(new GeneralStateTest { Name = name, LoadFailure = testJson.LoadFailure }, 1); } @@ -234,6 +234,7 @@ public static IEnumerable Convert(string name, GeneralStateTes test.CurrentRandom = testJson.Env.CurrentRandom; test.CurrentBeaconRoot = testJson.Env.CurrentBeaconRoot; test.CurrentWithdrawalsRoot = testJson.Env.CurrentWithdrawalsRoot; + test.CurrentExcessBlobGas = testJson.Env.CurrentExcessBlobGas; test.ParentBlobGasUsed = testJson.Env.ParentBlobGasUsed; test.ParentExcessBlobGas = testJson.Env.ParentExcessBlobGas; test.PostReceiptsRoot = stateJson.Logs; @@ -251,7 +252,7 @@ public static IEnumerable Convert(string name, GeneralStateTes public static BlockchainTest Convert(string name, BlockchainTestJson testJson) { - if (testJson.LoadFailure != null) + if (testJson.LoadFailure is not null) { return new BlockchainTest { Name = name, LoadFailure = testJson.LoadFailure }; } @@ -262,13 +263,13 @@ public static BlockchainTest Convert(string name, BlockchainTestJson testJson) test.NetworkAfterTransition = testJson.EthereumNetworkAfterTransition; test.TransitionForkActivation = testJson.TransitionForkActivation; test.LastBlockHash = new Hash256(testJson.LastBlockHash); - test.GenesisRlp = testJson.GenesisRlp == null ? null : new Rlp(Bytes.FromHexString(testJson.GenesisRlp)); + test.GenesisRlp = testJson.GenesisRlp is null ? null : new Rlp(Bytes.FromHexString(testJson.GenesisRlp)); test.GenesisBlockHeader = testJson.GenesisBlockHeader; test.Blocks = testJson.Blocks; test.Pre = testJson.Pre.ToDictionary(p => new Address(p.Key), p => Convert(p.Value)); HalfBlockchainTestJson half = testJson as HalfBlockchainTestJson; - if (half != null) + if (half is not null) { test.PostStateRoot = half.PostState; } diff --git a/src/Nethermind/Ethereum.Test.Base/TestLoader.cs b/src/Nethermind/Ethereum.Test.Base/TestLoader.cs index a3670fe5cba..4a910f73123 100644 --- a/src/Nethermind/Ethereum.Test.Base/TestLoader.cs +++ b/src/Nethermind/Ethereum.Test.Base/TestLoader.cs @@ -58,7 +58,7 @@ public static IEnumerable LoadFromFile( Assembly assembly = typeof(TTest).Assembly; string[] resourceNames = assembly.GetManifestResourceNames(); string resourceName = resourceNames.SingleOrDefault(r => r.Contains(testFileName)); - if (resourceName == null) + if (resourceName is null) { throw new ArgumentException($"Cannot find test resource: {testFileName}"); } diff --git a/src/Nethermind/Ethereum.Transaction.Test/TransactionTests.cs b/src/Nethermind/Ethereum.Transaction.Test/TransactionTests.cs index 9d005329538..23682737ab7 100644 --- a/src/Nethermind/Ethereum.Transaction.Test/TransactionTests.cs +++ b/src/Nethermind/Ethereum.Transaction.Test/TransactionTests.cs @@ -57,7 +57,7 @@ private static IEnumerable LoadTests(string testSet) { TransactionJson transactionJson = byName.Value.Transaction; TransactionTest test; - if (transactionJson != null) + if (transactionJson is not null) { test = new ValidTransactionTest(byDir.Key, byName.Key, byName.Value.Rlp); ValidTransactionTest validTest = (ValidTransactionTest)test; @@ -165,7 +165,7 @@ private void RunTest(TransactionTest test, IReleaseSpec spec) } catch (Exception) { - if (validTest == null) + if (validTest is null) { return; } @@ -177,7 +177,7 @@ private void RunTest(TransactionTest test, IReleaseSpec spec) TxValidator validator = new(useChainId ? BlockchainIds.Mainnet : 0UL); - if (validTest != null) + if (validTest is not null) { Assert.That(transaction.Value, Is.EqualTo(validTest.Value), "value"); Assert.That(transaction.Data.AsArray(), Is.EqualTo(validTest.Data), "data"); diff --git a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs index 0f2e685dc5c..9403f6b893f 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs @@ -122,19 +122,18 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT UserOperationTxSource = new(UserOperationTxBuilder, UserOperationPool, UserOperationSimulator, SpecProvider, State, Signer, LogManager.GetClassLogger()); - PostMergeBlockProducer CreatePostMergeBlockProducer(IBlockProductionTrigger blockProductionTrigger, - ITxSource? txSource = null) + PostMergeBlockProducer CreatePostMergeBlockProducer(ITxSource? txSource = null) { var blockProducerEnv = blockProducerEnvFactory.Create(txSource); return new PostMergeBlockProducerFactory(SpecProvider, SealEngine, Timestamper, blocksConfig, LogManager, GasLimitCalculator).Create( - blockProducerEnv, blockProductionTrigger); + blockProducerEnv); } - IBlockProducer blockProducer = - CreatePostMergeBlockProducer(BlockProductionTrigger, UserOperationTxSource); + IBlockProducer blockProducer = CreatePostMergeBlockProducer(UserOperationTxSource); - blockProducer.BlockProduced += OnBlockProduced; + BlockProducerRunner = new StandardBlockProducerRunner(BlockProductionTrigger, BlockTree, blockProducer); + BlockProducerRunner.BlockProduced += OnBlockProduced; return blockProducer; } @@ -190,7 +189,6 @@ protected override BlockProcessor CreateBlockProcessor() new BlockProcessor.BlockValidationTransactionsExecutor(TxProcessor, State), State, ReceiptStorage, - NullWitnessCollector.Instance, new BlockhashStore(BlockTree, SpecProvider, State), TxProcessor, LogManager); diff --git a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.cs b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.cs index a08ba710e10..6862acc8a0b 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.cs @@ -18,6 +18,7 @@ using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; using Nethermind.Crypto; +using Nethermind.Facade.Eth; using Nethermind.Int256; using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Test.Modules; diff --git a/src/Nethermind/Nethermind.AccountAbstraction.Test/Network/UserOperationsMessageSerializerTests.cs b/src/Nethermind/Nethermind.AccountAbstraction.Test/Network/UserOperationsMessageSerializerTests.cs index 26ffda723f3..3532209a60c 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction.Test/Network/UserOperationsMessageSerializerTests.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction.Test/Network/UserOperationsMessageSerializerTests.cs @@ -16,10 +16,10 @@ namespace Nethermind.AccountAbstraction.Test.Network [TestFixture, Parallelizable(ParallelScope.All)] public class UserOperationsMessageSerializerTests { - [SetUp] - public void Setup() + [OneTimeSetUp] + public void OneTimeSetUp() { - Rlp.RegisterDecoders(typeof(UserOperationDecoder).Assembly); + Rlp.RegisterDecoders(typeof(UserOperationDecoder).Assembly, true); } [Test] diff --git a/src/Nethermind/Nethermind.AccountAbstraction/AccountAbstractionPlugin.cs b/src/Nethermind/Nethermind.AccountAbstraction/AccountAbstractionPlugin.cs index 1a1198df67d..327b7715335 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction/AccountAbstractionPlugin.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction/AccountAbstractionPlugin.cs @@ -123,7 +123,7 @@ private UserOperationSimulator UserOperationSimulator(Address entryPoint) ReadOnlyTxProcessingEnvFactory readOnlyTxProcessingEnvFactory = new( getFromApi.WorldStateManager!, - getFromApi.BlockTree, + getFromApi.BlockTree!, getFromApi.SpecProvider, getFromApi.LogManager); @@ -348,7 +348,7 @@ public ValueTask DisposeAsync() return ValueTask.CompletedTask; } - public Task InitBlockProducer(IBlockProducerFactory consensusPlugin, IBlockProductionTrigger blockProductionTrigger, ITxSource? additionalTxSource) + public IBlockProducer InitBlockProducer(IBlockProducerFactory consensusPlugin, ITxSource? additionalTxSource) { if (!Enabled) throw new InvalidOperationException("Account Abstraction plugin is disabled"); @@ -378,9 +378,7 @@ public Task InitBlockProducer(IBlockProducerFactory consensusPlu $"Account Abstraction Plugin: Miner ({_nethermindApi.EngineSigner!.Address}) Ether balance adequate - {minerBalance / 1.Ether()} Ether"); } - IManualBlockProductionTrigger trigger = new BuildBlocksWhenRequested(); - - return consensusPlugin.InitBlockProducer(trigger, UserOperationTxSource); + return consensusPlugin.InitBlockProducer(UserOperationTxSource); } public bool MevPluginEnabled => _nethermindApi.Config().Enabled; diff --git a/src/Nethermind/Nethermind.AccountAbstraction/AccountAbstractionRpcModule.cs b/src/Nethermind/Nethermind.AccountAbstraction/AccountAbstractionRpcModule.cs index c25d80ff850..e7629f3d75a 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction/AccountAbstractionRpcModule.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction/AccountAbstractionRpcModule.cs @@ -19,7 +19,7 @@ public class AccountAbstractionRpcModule : IAccountAbstractionRpcModule static AccountAbstractionRpcModule() { - Rlp.RegisterDecoders(typeof(UserOperationDecoder).Assembly); + Rlp.RegisterDecoders(typeof(UserOperationDecoder).Assembly, true); } public AccountAbstractionRpcModule(IDictionary userOperationPool, Address[] supportedEntryPoints) diff --git a/src/Nethermind/Nethermind.AccountAbstraction/Broadcaster/PeerInfo.cs b/src/Nethermind/Nethermind.AccountAbstraction/Broadcaster/PeerInfo.cs index 487e62bbc08..41cb3d53438 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction/Broadcaster/PeerInfo.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction/Broadcaster/PeerInfo.cs @@ -12,7 +12,7 @@ public class PeerInfo : IUserOperationPoolPeer { private IUserOperationPoolPeer Peer { get; } - private LruKeyCache NotifiedUserOperations { get; } = new(MemoryAllowance.MemPoolSize, "notifiedUserOperations"); + private LruKeyCacheLowObject NotifiedUserOperations { get; } = new(MemoryAllowance.MemPoolSize, "notifiedUserOperations"); public PeerInfo(IUserOperationPoolPeer peer) { diff --git a/src/Nethermind/Nethermind.AccountAbstraction/Executor/AABlockProducerTransactionsExecutorFactory.cs b/src/Nethermind/Nethermind.AccountAbstraction/Executor/AABlockProducerTransactionsExecutorFactory.cs index 8dd11b9d59c..42f344bc7fd 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction/Executor/AABlockProducerTransactionsExecutorFactory.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction/Executor/AABlockProducerTransactionsExecutorFactory.cs @@ -6,6 +6,7 @@ using Nethermind.Consensus.Producers; using Nethermind.Core; using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; namespace Nethermind.AccountAbstraction.Executor @@ -25,10 +26,10 @@ public AABlockProducerTransactionsExecutorFactory(ISpecProvider specProvider, IL _entryPointAddresses = entryPointAddresses; } - public IBlockProcessor.IBlockTransactionsExecutor Create(ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv) + public IBlockProcessor.IBlockTransactionsExecutor Create(IReadOnlyTxProcessingScope readOnlyTxProcessingEnv) => new AABlockProducerTransactionsExecutor( readOnlyTxProcessingEnv.TransactionProcessor, - readOnlyTxProcessingEnv.StateProvider, + readOnlyTxProcessingEnv.WorldState, _specProvider, _logManager, _signer, diff --git a/src/Nethermind/Nethermind.AccountAbstraction/Executor/IUserOperationSimulator.cs b/src/Nethermind/Nethermind.AccountAbstraction/Executor/IUserOperationSimulator.cs index 6781e276de8..d4af7269707 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction/Executor/IUserOperationSimulator.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction/Executor/IUserOperationSimulator.cs @@ -18,7 +18,7 @@ ResultWrapper Simulate(UserOperation userOperation, UInt256? timestamp = null, CancellationToken cancellationToken = default); - BlockchainBridge.CallOutput EstimateGas(BlockHeader header, Transaction tx, + CallOutput EstimateGas(BlockHeader header, Transaction tx, CancellationToken cancellationToken); } } diff --git a/src/Nethermind/Nethermind.AccountAbstraction/Executor/UserOperationSimulator.cs b/src/Nethermind/Nethermind.AccountAbstraction/Executor/UserOperationSimulator.cs index e2bd4f8a0b4..f8835cabfb1 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction/Executor/UserOperationSimulator.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction/Executor/UserOperationSimulator.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.CompilerServices; using System.Threading; using Nethermind.Abi; using Nethermind.AccountAbstraction.Data; @@ -86,14 +87,14 @@ public ResultWrapper Simulate(UserOperation userOperation, } IEip1559Spec specFor1559 = _specProvider.GetSpecFor1559(parent.Number + 1); - ReadOnlyTxProcessingEnv txProcessingEnv = _readOnlyTxProcessingEnvFactory.Create(); - ITransactionProcessor transactionProcessor = txProcessingEnv.Build(_stateProvider.StateRoot); + IReadOnlyTxProcessorSource processorSource = _readOnlyTxProcessingEnvFactory.Create(); + using IReadOnlyTxProcessingScope scope = processorSource.Build(_stateProvider.StateRoot); // wrap userOp into a tx calling the simulateWallet function off-chain from zero-address (look at EntryPoint.sol for more context) Transaction simulateValidationTransaction = BuildSimulateValidationTransaction(userOperation, parent, specFor1559); - UserOperationSimulationResult simulationResult = SimulateValidation(simulateValidationTransaction, userOperation, parent, transactionProcessor); + UserOperationSimulationResult simulationResult = SimulateValidation(simulateValidationTransaction, userOperation, parent, scope.TransactionProcessor); if (!simulationResult.Success) return ResultWrapper.Fail(simulationResult.Error ?? "unknown simulation failure"); @@ -185,24 +186,24 @@ private Transaction BuildSimulateValidationTransaction( } [Todo("Refactor once BlockchainBridge is separated")] - public BlockchainBridge.CallOutput EstimateGas(BlockHeader header, Transaction tx, CancellationToken cancellationToken) + public CallOutput EstimateGas(BlockHeader header, Transaction tx, CancellationToken cancellationToken) { - ReadOnlyTxProcessingEnv txProcessingEnv = _readOnlyTxProcessingEnvFactory.Create(); - using IReadOnlyTransactionProcessor transactionProcessor = txProcessingEnv.Build(header.StateRoot!); + IReadOnlyTxProcessorSource txProcessorSource = _readOnlyTxProcessingEnvFactory.Create(); + using IReadOnlyTxProcessingScope scope = txProcessorSource.Build(header.StateRoot!); EstimateGasTracer estimateGasTracer = new(); (bool Success, string Error) tryCallResult = TryCallAndRestore( - transactionProcessor, + scope.TransactionProcessor, header, Math.Max(header.Timestamp + 1, _timestamper.UnixTime.Seconds), tx, true, estimateGasTracer.WithCancellation(cancellationToken)); - GasEstimator gasEstimator = new(transactionProcessor, _stateProvider, _specProvider, _blocksConfig); + GasEstimator gasEstimator = new(scope.TransactionProcessor, _stateProvider, _specProvider, _blocksConfig); long estimate = gasEstimator.Estimate(tx, header, estimateGasTracer, GasEstimator.DefaultErrorMargin, cancellationToken); - return new BlockchainBridge.CallOutput + return new CallOutput { Error = tryCallResult.Success ? estimateGasTracer.Error : tryCallResult.Error, GasSpent = estimate, diff --git a/src/Nethermind/Nethermind.AccountAbstraction/Source/UserOperationTxSource.cs b/src/Nethermind/Nethermind.AccountAbstraction/Source/UserOperationTxSource.cs index ec6def2cd1e..4dac4b3fe47 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction/Source/UserOperationTxSource.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction/Source/UserOperationTxSource.cs @@ -172,7 +172,7 @@ public IEnumerable GetTransactions(BlockHeader parent, long gasLimi // TODO: Remove logging, just for testing _logger.Info($"Constructed tx from {userOperationsToInclude!.Count} userOperations: {userOperationTransaction.Hash}"); - BlockchainBridge.CallOutput callOutput = _userOperationSimulators[entryPoint].EstimateGas(parent, userOperationTransaction, CancellationToken.None); + CallOutput callOutput = _userOperationSimulators[entryPoint].EstimateGas(parent, userOperationTransaction, CancellationToken.None); FailedOp? failedOp = txBuilder.DecodeEntryPointOutputError(callOutput.OutputData); if (failedOp is not null) { diff --git a/src/Nethermind/Nethermind.Api/Extensions/IConsensusPlugin.cs b/src/Nethermind/Nethermind.Api/Extensions/IConsensusPlugin.cs index 6b140a99d39..9a0be89152e 100644 --- a/src/Nethermind/Nethermind.Api/Extensions/IConsensusPlugin.cs +++ b/src/Nethermind/Nethermind.Api/Extensions/IConsensusPlugin.cs @@ -15,15 +15,9 @@ public interface IConsensusPlugin : INethermindPlugin, IBlockProducerFactory { string SealEngineType { get; } - /// - /// Default block production trigger for this consensus plugin. - /// - /// - /// Needed when this plugin is used in combination with other plugin that affects block production like MEV plugin. - /// - IBlockProductionTrigger DefaultBlockProductionTrigger { get; } - INethermindApi CreateApi(IConfigProvider configProvider, IJsonSerializer jsonSerializer, ILogManager logManager, ChainSpec chainSpec) => new NethermindApi(configProvider, jsonSerializer, logManager, chainSpec); + + IBlockProducerRunner CreateBlockProducerRunner(); } } diff --git a/src/Nethermind/Nethermind.Api/Extensions/IConsensusWrapperPlugin.cs b/src/Nethermind/Nethermind.Api/Extensions/IConsensusWrapperPlugin.cs index 33eb6c84a09..b81722632bc 100644 --- a/src/Nethermind/Nethermind.Api/Extensions/IConsensusWrapperPlugin.cs +++ b/src/Nethermind/Nethermind.Api/Extensions/IConsensusWrapperPlugin.cs @@ -3,14 +3,15 @@ using System.Threading.Tasks; using Nethermind.Consensus; -using Nethermind.Consensus.Producers; using Nethermind.Consensus.Transactions; namespace Nethermind.Api.Extensions { public interface IConsensusWrapperPlugin : INethermindPlugin { - Task InitBlockProducer(IBlockProducerFactory baseBlockProducerFactory, IBlockProductionTrigger blockProductionTrigger, ITxSource? txSource); + IBlockProducer InitBlockProducer(IBlockProducerFactory baseBlockProducerFactory, ITxSource? txSource); + + IBlockProducerRunner InitBlockProducerRunner(IBlockProducerRunner baseRunner) => baseRunner; /// /// Priorities for ordering multiple plugin. Only used to determine the wrapping order of block production. diff --git a/src/Nethermind/Nethermind.Api/Extensions/INethermindPlugin.cs b/src/Nethermind/Nethermind.Api/Extensions/INethermindPlugin.cs new file mode 100644 index 00000000000..ad1c8c28027 --- /dev/null +++ b/src/Nethermind/Nethermind.Api/Extensions/INethermindPlugin.cs @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Threading.Tasks; + +namespace Nethermind.Api.Extensions; + +public interface INethermindPlugin : IAsyncDisposable +{ + string Name { get; } + + string Description { get; } + + string Author { get; } + + void InitRlpDecoders(INethermindApi api) { } + + Task Init(INethermindApi nethermindApi) => Task.CompletedTask; + + Task InitNetworkProtocol() => Task.CompletedTask; + + Task InitRpcModules() => Task.CompletedTask; + + bool MustInitialize => false; +} diff --git a/src/Nethermind/Nethermind.Api/Extensions/IPlugin.cs b/src/Nethermind/Nethermind.Api/Extensions/IPlugin.cs deleted file mode 100644 index 95c9e13ad81..00000000000 --- a/src/Nethermind/Nethermind.Api/Extensions/IPlugin.cs +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Threading.Tasks; - -namespace Nethermind.Api.Extensions -{ - public interface INethermindPlugin : IAsyncDisposable - { - string Name { get; } - - string Description { get; } - - string Author { get; } - - Task Init(INethermindApi nethermindApi); - - Task InitNetworkProtocol(); - - Task InitRpcModules(); - - bool MustInitialize { get => false; } - } -} diff --git a/src/Nethermind/Nethermind.Api/IApiWithBlockchain.cs b/src/Nethermind/Nethermind.Api/IApiWithBlockchain.cs index 7dd4d5b01de..496f107e7ea 100644 --- a/src/Nethermind/Nethermind.Api/IApiWithBlockchain.cs +++ b/src/Nethermind/Nethermind.Api/IApiWithBlockchain.cs @@ -38,6 +38,7 @@ public interface IApiWithBlockchain : IApiWithStores, IBlockchainBridgeFactory IBlockProcessingQueue? BlockProcessingQueue { get; set; } IBlockProcessor? MainBlockProcessor { get; set; } IBlockProducer? BlockProducer { get; set; } + IBlockProducerRunner? BlockProducerRunner { get; set; } IBlockValidator? BlockValidator { get; set; } IEnode? Enode { get; set; } IFilterStore? FilterStore { get; set; } @@ -70,8 +71,6 @@ public interface IApiWithBlockchain : IApiWithStores, IBlockchainBridgeFactory ITxPool? TxPool { get; set; } ITxPoolInfoProvider? TxPoolInfoProvider { get; set; } CompositeTxGossipPolicy TxGossipPolicy { get; } - IWitnessCollector? WitnessCollector { get; set; } - IWitnessRepository? WitnessRepository { get; set; } IHealthHintService? HealthHintService { get; set; } IRpcCapabilitiesProvider? RpcCapabilitiesProvider { get; set; } ITransactionComparerProvider? TransactionComparerProvider { get; set; } diff --git a/src/Nethermind/Nethermind.Api/NethermindApi.cs b/src/Nethermind/Nethermind.Api/NethermindApi.cs index 97e16f3041b..e07aa13ba9e 100644 --- a/src/Nethermind/Nethermind.Api/NethermindApi.cs +++ b/src/Nethermind/Nethermind.Api/NethermindApi.cs @@ -31,6 +31,7 @@ using Nethermind.Evm.TransactionProcessing; using Nethermind.Facade; using Nethermind.Facade.Eth; +using Nethermind.Facade.Simulate; using Nethermind.Grpc; using Nethermind.JsonRpc; using Nethermind.JsonRpc.Modules; @@ -81,11 +82,20 @@ public IBlockchainBridge CreateBlockchainBridge() SpecProvider, LogManager); + SimulateReadOnlyBlocksProcessingEnvFactory simulateReadOnlyBlocksProcessingEnvFactory = + new SimulateReadOnlyBlocksProcessingEnvFactory( + WorldStateManager!, + readOnlyTree, + DbProvider!, + SpecProvider!, + LogManager); + IMiningConfig miningConfig = ConfigProvider.GetConfig(); IBlocksConfig blocksConfig = ConfigProvider.GetConfig(); return new BlockchainBridge( readOnlyTxProcessingEnv, + simulateReadOnlyBlocksProcessingEnvFactory, TxPool, ReceiptFinder, FilterStore, @@ -106,6 +116,7 @@ public IBlockchainBridge CreateBlockchainBridge() public IBlockProcessingQueue? BlockProcessingQueue { get; set; } public IBlockProcessor? MainBlockProcessor { get; set; } public IBlockProducer? BlockProducer { get; set; } + public IBlockProducerRunner? BlockProducerRunner { get; set; } public IBlockTree? BlockTree { get; set; } public IBlockValidator? BlockValidator { get; set; } public IBloomStorage? BloomStorage { get; set; } @@ -146,8 +157,6 @@ public IBlockchainBridge CreateBlockchainBridge() public IProtocolsManager? ProtocolsManager { get; set; } public IProtocolValidator? ProtocolValidator { get; set; } public IReceiptStorage? ReceiptStorage { get; set; } - public IWitnessCollector? WitnessCollector { get; set; } - public IWitnessRepository? WitnessRepository { get; set; } public IReceiptFinder? ReceiptFinder { get; set; } public IReceiptMonitor? ReceiptMonitor { get; set; } public IRewardCalculatorSource? RewardCalculatorSource { get; set; } = NoBlockRewards.Instance; diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuRaBlockProducerTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuRaBlockProducerTests.cs index b8494907bf7..b2fe5479336 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuRaBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuRaBlockProducerTests.cs @@ -43,6 +43,7 @@ private class Context public IAuRaStepCalculator AuRaStepCalculator { get; } public Address NodeAddress { get; } public AuRaBlockProducer AuRaBlockProducer { get; private set; } + public IBlockProducerRunner BlockProducerRunner { get; set; } public TimeSpan StepDelay { get; } public Context() @@ -97,7 +98,6 @@ public void InitProducer(IAuraConfig auraConfig) AuRaBlockProducer = new AuRaBlockProducer( TransactionSource, BlockchainProcessor, - onlyWhenNotProcessing, StateProvider, Sealer, BlockTree, @@ -110,7 +110,12 @@ public void InitProducer(IAuraConfig auraConfig) LimboLogs.Instance, blocksConfig); - ProducedBlockSuggester suggester = new(BlockTree, AuRaBlockProducer); + BlockProducerRunner = new StandardBlockProducerRunner( + onlyWhenNotProcessing, + BlockTree, + AuRaBlockProducer); + + ProducedBlockSuggester suggester = new(BlockTree, BlockProducerRunner); } } @@ -223,7 +228,7 @@ private async Task StartStop(Context context, bool processingQueueEm processedEvent.Set(); }); - await context.AuRaBlockProducer.Start(); + context.BlockProducerRunner.Start(); await processedEvent.WaitOneAsync(context.StepDelay * stepDelayMultiplier * 5, CancellationToken.None); context.BlockTree.ClearReceivedCalls(); await Task.Delay(context.StepDelay); @@ -248,7 +253,7 @@ private async Task StartStop(Context context, bool processingQueueEm } finally { - await context.AuRaBlockProducer.StopAsync(); + await context.BlockProducerRunner.StopAsync(); } return new TestResult(q => context.BlockTree.Received(q).SuggestBlock(Arg.Any(), Arg.Any())); diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuRaPluginTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuRaPluginTests.cs index 009035305dd..03c84f9b2b8 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuRaPluginTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuRaPluginTests.cs @@ -6,6 +6,7 @@ using Nethermind.Api; using Nethermind.Config; using Nethermind.Consensus.AuRa; +using Nethermind.Consensus.AuRa.InitializationSteps; using Nethermind.Logging; using Nethermind.Serialization.Json; using Nethermind.Specs.ChainSpecStyle; @@ -19,7 +20,7 @@ public class AuRaPluginTests public void Init_when_not_AuRa_doesnt_trow() { AuRaPlugin auRaPlugin = new(); - Action init = () => auRaPlugin.Init(new NethermindApi(new ConfigProvider(), new EthereumJsonSerializer(), new TestLogManager(), new ChainSpec())); + Action init = () => auRaPlugin.Init(new AuRaNethermindApi(new ConfigProvider(), new EthereumJsonSerializer(), new TestLogManager(), new ChainSpec())); init.Should().NotThrow(); } diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs index d9e559f47dd..24b29330e4c 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using FluentAssertions; using Nethermind.Abi; +using Nethermind.Blockchain; using Nethermind.Consensus; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Contracts; @@ -83,7 +84,7 @@ protected override BlockProcessor CreateBlockProcessor() BlockGasLimitContract gasLimitContract = new(AbiEncoder.Instance, blockGasLimitContractTransition.Value, blockGasLimitContractTransition.Key, new ReadOnlyTxProcessingEnv( WorldStateManager, - BlockTree, SpecProvider, LimboLogs.Instance)); + BlockTree.AsReadOnly(), SpecProvider, LimboLogs.Instance)); GasLimitOverrideCache = new AuRaContractGasLimitOverride.Cache(); GasLimitCalculator = new AuRaContractGasLimitOverride(new[] { gasLimitContract }, GasLimitOverrideCache, false, new FollowOtherMiners(SpecProvider), LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/TxPriorityContractTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/TxPriorityContractTests.cs index 276671dab2a..1caa20bf3a9 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Contract/TxPriorityContractTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/TxPriorityContractTests.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using FluentAssertions; using Nethermind.Abi; +using Nethermind.Blockchain; using Nethermind.Blockchain.Data; using Nethermind.Consensus.AuRa.Contracts; using Nethermind.Consensus.AuRa.Contracts.DataStore; @@ -254,7 +255,7 @@ protected override TxPoolTxSource CreateTxPoolTxSource() TxPoolTxSource txPoolTxSource = base.CreateTxPoolTxSource(); TxPriorityContract = new TxPriorityContract(AbiEncoder.Instance, TestItem.AddressA, - new ReadOnlyTxProcessingEnv(WorldStateManager, BlockTree, SpecProvider, LimboLogs.Instance)); + new ReadOnlyTxProcessingEnv(WorldStateManager, BlockTree.AsReadOnly(), SpecProvider, LimboLogs.Instance)); Priorities = new DictionaryContractDataStore( new TxPriorityContract.DestinationSortedListContractDataStoreCollection(), diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/ValidatorContractTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/ValidatorContractTests.cs index 8b7ed8d3901..ae1a5040a4f 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Contract/ValidatorContractTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/ValidatorContractTests.cs @@ -6,6 +6,7 @@ using Nethermind.Abi; using Nethermind.Consensus; using Nethermind.Consensus.AuRa.Contracts; +using Nethermind.Consensus.Processing; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Test; @@ -26,7 +27,7 @@ public class ValidatorContractTests { private Block _block; private readonly Address _contractAddress = Address.FromNumber(long.MaxValue); - private IReadOnlyTransactionProcessor _transactionProcessor; + private ITransactionProcessor _transactionProcessor; private IReadOnlyTxProcessorSource _readOnlyTxProcessorSource; private IWorldState _stateProvider; @@ -34,16 +35,13 @@ public class ValidatorContractTests public void SetUp() { _block = new Block(Build.A.BlockHeader.TestObject, new BlockBody()); - _transactionProcessor = Substitute.For(); - _readOnlyTxProcessorSource = Substitute.For(); - _readOnlyTxProcessorSource.Build(TestItem.KeccakA).Returns(_transactionProcessor); + _transactionProcessor = Substitute.For(); _stateProvider = Substitute.For(); _stateProvider.StateRoot.Returns(TestItem.KeccakA); + _readOnlyTxProcessorSource = Substitute.For(); + _readOnlyTxProcessorSource.Build(TestItem.KeccakA).Returns(new ReadOnlyTxProcessingScope(_transactionProcessor, _stateProvider, Keccak.EmptyTreeHash)); } - [TearDown] - public void TearDown() => _transactionProcessor?.Dispose(); - [Test] public void constructor_throws_ArgumentNullException_on_null_contractAddress() { diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs index c65d2efc805..f6403fa1184 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs @@ -6,6 +6,7 @@ using FluentAssertions; using Nethermind.Abi; using Nethermind.AuRa.Test.Contract; +using Nethermind.Blockchain; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Contracts; using Nethermind.Consensus.AuRa.Transactions; @@ -137,7 +138,7 @@ protected override BlockProcessor CreateBlockProcessor() AbiEncoder abiEncoder = AbiEncoder.Instance; ReadOnlyTransactionProcessorSource = new ReadOnlyTxProcessingEnv( WorldStateManager, - BlockTree, SpecProvider, + BlockTree.AsReadOnly(), SpecProvider, LimboLogs.Instance); RegisterContract = new RegisterContract(abiEncoder, ChainSpec.Parameters.Registrar, ReadOnlyTransactionProcessorSource); CertifierContract = new CertifierContract( diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs index 87706013ea2..7bae62ac4df 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs @@ -8,6 +8,7 @@ using FluentAssertions; using Nethermind.Abi; using Nethermind.AuRa.Test.Contract; +using Nethermind.Blockchain; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Contracts; using Nethermind.Consensus.AuRa.Transactions; @@ -277,12 +278,12 @@ protected override BlockProcessor CreateBlockProcessor() IReadOnlyTrieStore trieStore = new TrieStore(DbProvider.StateDb, LimboLogs.Instance).AsReadOnly(); IReadOnlyTxProcessorSource txProcessorSource = new ReadOnlyTxProcessingEnv( WorldStateManager, - BlockTree, + BlockTree.AsReadOnly(), SpecProvider, LimboLogs.Instance); VersionedTransactionPermissionContract transactionPermissionContract = new(AbiEncoder.Instance, _contractAddress, 1, - new ReadOnlyTxProcessingEnv(WorldStateManager, BlockTree, SpecProvider, LimboLogs.Instance), TransactionPermissionContractVersions, LimboLogs.Instance, SpecProvider); + new ReadOnlyTxProcessingEnv(WorldStateManager, BlockTree.AsReadOnly(), SpecProvider, LimboLogs.Instance), TransactionPermissionContractVersions, LimboLogs.Instance, SpecProvider); TxPermissionFilterCache = new PermissionBasedTxFilter.Cache(); PermissionBasedTxFilter = new PermissionBasedTxFilter(transactionPermissionContract, TxPermissionFilterCache, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Validators/ContractBasedValidatorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Validators/ContractBasedValidatorTests.cs index 91dad8e1fc5..3902182d6e8 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Validators/ContractBasedValidatorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Validators/ContractBasedValidatorTests.cs @@ -32,6 +32,7 @@ using Nethermind.Evm; using Nethermind.Core.Specs; using System.Text.Json; +using Nethermind.Consensus.Processing; namespace Nethermind.AuRa.Test.Validators; @@ -43,7 +44,7 @@ public class ContractBasedValidatorTests private AuRaParameters.Validator _validator; private Block _block; private BlockHeader _parentHeader; - private IReadOnlyTransactionProcessor _transactionProcessor; + private ITransactionProcessor _transactionProcessor; private IAuRaBlockFinalizationManager _blockFinalizationManager; private static readonly Address _contractAddress = Address.FromNumber(1000); private (Address Sender, byte[] TransactionData) _getValidatorsData = (Address.Zero, new byte[] { 0, 1, 2 }); @@ -74,11 +75,12 @@ public void SetUp() }; _block = new Block(Build.A.BlockHeader.WithNumber(1).WithAura(1, Array.Empty()).TestObject, new BlockBody()); - _transactionProcessor = Substitute.For(); - _transactionProcessor.IsContractDeployed(_contractAddress).Returns(true); - _readOnlyTxProcessorSource = Substitute.For(); - _readOnlyTxProcessorSource.Build(Arg.Any()).Returns(_transactionProcessor); + _transactionProcessor = Substitute.For(); _stateProvider.StateRoot.Returns(TestItem.KeccakA); + _stateProvider.IsContract(_contractAddress).Returns(true); + + _readOnlyTxProcessorSource = Substitute.For(); + _readOnlyTxProcessorSource.Build(Arg.Any()).Returns(new ReadOnlyTxProcessingScope(_transactionProcessor, _stateProvider, Keccak.EmptyTreeHash)); _blockTree.Head.Returns(_block); _abiEncoder @@ -96,7 +98,6 @@ public void SetUp() public void TearDown() { _blockFinalizationManager?.Dispose(); - _transactionProcessor?.Dispose(); } [Test] diff --git a/src/Nethermind/Nethermind.Benchmark/Evm/JumpDestinationsBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Evm/JumpDestinationsBenchmark.cs index b77cc017fa4..8ee151d0343 100644 --- a/src/Nethermind/Nethermind.Benchmark/Evm/JumpDestinationsBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Evm/JumpDestinationsBenchmark.cs @@ -29,7 +29,7 @@ public void Setup() [Benchmark] public bool Current() { - return _codeInfo.ValidateJump(0, false); + return _codeInfo.ValidateJump(0); } } } diff --git a/src/Nethermind/Nethermind.Blockchain.Test.Runner/BlockchainTestsBugHunter.cs b/src/Nethermind/Nethermind.Blockchain.Test.Runner/BlockchainTestsBugHunter.cs index e3a38660ba0..ce6593f4751 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test.Runner/BlockchainTestsBugHunter.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test.Runner/BlockchainTestsBugHunter.cs @@ -32,7 +32,7 @@ public async Task> RunTestsAsync() Setup(); Console.Write($"{test,-120} "); - if (test.LoadFailure != null) + if (test.LoadFailure is not null) { WriteRed(test.LoadFailure); testResults.Add(new EthereumTestResult(test.Name, test.LoadFailure)); diff --git a/src/Nethermind/Nethermind.Blockchain.Test.Runner/PerfTest.cs b/src/Nethermind/Nethermind.Blockchain.Test.Runner/PerfTest.cs index c94b78867b1..a25bfb6038a 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test.Runner/PerfTest.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test.Runner/PerfTest.cs @@ -28,7 +28,7 @@ public IEnumerable RunTests() bool isNewLine = true; foreach (GeneralStateTest test in tests) { - if (test.LoadFailure != null) + if (test.LoadFailure is not null) { continue; } diff --git a/src/Nethermind/Nethermind.Blockchain.Test.Runner/StateTestsBugHunter.cs b/src/Nethermind/Nethermind.Blockchain.Test.Runner/StateTestsBugHunter.cs index d98679e02b9..9dd9cf56c7a 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test.Runner/StateTestsBugHunter.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test.Runner/StateTestsBugHunter.cs @@ -32,7 +32,7 @@ public IEnumerable RunTests() Setup(LimboLogs.Instance); Console.Write($"{test,-120} "); - if (test.LoadFailure != null) + if (test.LoadFailure is not null) { WriteRed(test.LoadFailure); testResults.Add(new EthereumTestResult(test.Name, test.ForkName, test.LoadFailure)); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs index 0cc724cfccc..8e8172f1b0a 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs @@ -49,7 +49,6 @@ public void Prepared_block_contains_author_field() new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider), stateProvider, NullReceiptStorage.Instance, - NullWitnessCollector.Instance, Substitute.For(), transactionProcessor, LimboLogs.Instance); @@ -65,39 +64,6 @@ public void Prepared_block_contains_author_field() Assert.That(processedBlocks[0].Author, Is.EqualTo(block.Author), "author"); } - [Test, Timeout(Timeout.MaxTestTime)] - public void Can_store_a_witness() - { - IDb stateDb = new MemDb(); - IDb codeDb = new MemDb(); - TrieStore trieStore = new TrieStore(stateDb, LimboLogs.Instance); - - IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - ITransactionProcessor transactionProcessor = Substitute.For(); - IWitnessCollector witnessCollector = Substitute.For(); - BlockProcessor processor = new( - HoleskySpecProvider.Instance, - TestBlockValidator.AlwaysValid, - NoBlockRewards.Instance, - new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider), - stateProvider, - NullReceiptStorage.Instance, - witnessCollector, - Substitute.For(), - transactionProcessor, - LimboLogs.Instance); - - BlockHeader header = Build.A.BlockHeader.WithAuthor(TestItem.AddressD).TestObject; - Block block = Build.A.Block.WithHeader(header).TestObject; - _ = processor.Process( - Keccak.EmptyTreeHash, - new List { block }, - ProcessingOptions.None, - NullBlockTracer.Instance); - - witnessCollector.Received(1).Persist(block.Hash!); - } - [Test, Timeout(Timeout.MaxTestTime)] public void Recovers_state_on_cancel() { @@ -113,7 +79,6 @@ public void Recovers_state_on_cancel() new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider), stateProvider, NullReceiptStorage.Instance, - NullWitnessCollector.Instance, Substitute.For(), transactionProcessor, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Consensus/ClefSignerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Consensus/ClefSignerTests.cs new file mode 100644 index 00000000000..b4ce5520b71 --- /dev/null +++ b/src/Nethermind/Nethermind.Blockchain.Test/Consensus/ClefSignerTests.cs @@ -0,0 +1,101 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Threading.Tasks; +using FluentAssertions; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Test.Builders; +using Nethermind.JsonRpc; +using Nethermind.JsonRpc.Client; +using NSubstitute; +using NUnit.Framework; + +namespace Nethermind.Blockchain.Test.Consensus +{ + [TestFixture] + public class ClefSignerTests + { + [Test] + public async Task Sign_SigningHash_RequestHasCorrectParameters() + { + IJsonRpcClient client = Substitute.For(); + client.Post("account_list").Returns(Task.FromResult([TestItem.AddressA!.ToString()])); + Task postMethod = client.Post("account_signData", "text/plain", Arg.Any(), Keccak.Zero); + var returnValue = (new byte[65]).ToHexString(); + postMethod.Returns(returnValue); + ClefSigner sut = await ClefSigner.Create(client); + + var result = sut.Sign(Keccak.Zero); + + Assert.That(new Signature(returnValue).Bytes, Is.EqualTo(result.Bytes)); + } + + [Test] + public async Task Sign_SigningCliqueHeader_PassingCorrectClefParametersForRequest() + { + IJsonRpcClient client = Substitute.For(); + client.Post("account_list").Returns(Task.FromResult([TestItem.AddressA!.ToString()])); + Task postMethod = client.Post(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()); + var returnValue = (new byte[65]).ToHexString(); + postMethod.Returns(returnValue); + BlockHeader blockHeader = Build.A.BlockHeader.TestObject; + ClefSigner sut = await ClefSigner.Create(client); + + sut.Sign(blockHeader); + + await client.Received().Post("account_signData", "application/x-clique-header", Arg.Any(), Arg.Any()); + } + + + [TestCase(0, 27)] + [TestCase(1, 28)] + public async Task Sign_RecoveryIdIsSetToCliqueValues_RecoveryIdIsAdjusted(byte recId, byte expected) + { + IJsonRpcClient client = Substitute.For(); + client.Post("account_list").Returns(Task.FromResult([TestItem.AddressA!.ToString()])); + Task postMethod = client.Post("account_signData", "application/x-clique-header", Arg.Any(), Arg.Any()); + var returnValue = (new byte[65]); + returnValue[64] = recId; + postMethod.Returns(returnValue.ToHexString()); + BlockHeader blockHeader = Build.A.BlockHeader.TestObject; + ClefSigner sut = await ClefSigner.Create(client); + + var result = sut.Sign(blockHeader); + + Assert.That(result.V, Is.EqualTo(expected)); + } + + [Test] + public async Task Create_SignerAddressSpecified_CorrectAddressIsSet() + { + IJsonRpcClient client = Substitute.For(); + client.Post("account_list").Returns(Task.FromResult([TestItem.AddressA!.ToString(), TestItem.AddressB!.ToString()])); + + ClefSigner sut = await ClefSigner.Create(client, TestItem.AddressB); + + Assert.That(sut.Address, Is.EqualTo(TestItem.AddressB)); + } + + [Test] + public void Create_SignerAddressDoesNotExists_ThrowInvalidOperationException() + { + IJsonRpcClient client = Substitute.For(); + client.Post("account_list").Returns(Task.FromResult([TestItem.AddressA!.ToString(), TestItem.AddressB!.ToString()])); + + Assert.That(async () => await ClefSigner.Create(client, TestItem.AddressC), Throws.InstanceOf()); + } + + [Test] + public async Task SetSigner_TryingToASigner_ThrowInvalidOperationException() + { + IJsonRpcClient client = Substitute.For(); + client.Post("account_list").Returns(Task.FromResult([TestItem.AddressA!.ToString()])); + ClefSigner sut = await ClefSigner.Create(client); + + Assert.That(() => sut.SetSigner(Build.A.PrivateKey.TestObject), Throws.InstanceOf()); + } + } +} diff --git a/src/Nethermind/Nethermind.Blockchain.Test/KnownChainSizesTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/KnownChainSizesTests.cs index d17d8d06f79..9367267797b 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/KnownChainSizesTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/KnownChainSizesTests.cs @@ -14,8 +14,8 @@ public class KnownChainSizesTests public void Update_known_chain_sizes() { // Pruning size have to be updated frequently - ChainSizes.CreateChainSizeInfo(BlockchainIds.Mainnet).PruningSize.Should().BeLessThan(220.GB()); - ChainSizes.CreateChainSizeInfo(BlockchainIds.Sepolia).PruningSize.Should().BeLessThan(20.GB()); + ChainSizes.CreateChainSizeInfo(BlockchainIds.Mainnet).PruningSize.Should().BeLessThan(240.GB()); + ChainSizes.CreateChainSizeInfo(BlockchainIds.Sepolia).PruningSize.Should().BeLessThan(24.GB()); ChainSizes.CreateChainSizeInfo(BlockchainIds.Chiado).PruningSize.Should().Be(null); ChainSizes.CreateChainSizeInfo(BlockchainIds.Gnosis).PruningSize.Should().Be(null); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Nethermind.Blockchain.Test.csproj b/src/Nethermind/Nethermind.Blockchain.Test/Nethermind.Blockchain.Test.csproj index a4aa0b53879..caa031ac836 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Nethermind.Blockchain.Test.csproj +++ b/src/Nethermind/Nethermind.Blockchain.Test/Nethermind.Blockchain.Test.csproj @@ -26,6 +26,7 @@ + diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/BlockProducerBaseTests.IsProducingBlocks.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/BlockProducerBaseTests.IsProducingBlocks.cs index 49e67f7c50b..3735ff1bc1b 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/BlockProducerBaseTests.IsProducingBlocks.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/BlockProducerBaseTests.IsProducingBlocks.cs @@ -42,12 +42,13 @@ public async Task DevBlockProducer_IsProducingBlocks_returns_expected_results() testRpc.BlockchainProcessor, testRpc.State, testRpc.BlockTree, - Substitute.For(), testRpc.Timestamper, testRpc.SpecProvider, new BlocksConfig(), LimboLogs.Instance); - await AssertIsProducingBlocks(blockProducer); + StandardBlockProducerRunner runner = new StandardBlockProducerRunner( + Substitute.For(), testRpc.BlockTree, blockProducer); + await AssertIsProducingBlocks(runner); } [Test, Timeout(Timeout.MaxTestTime)] @@ -61,12 +62,13 @@ public async Task TestBlockProducer_IsProducingBlocks_returns_expected_results() testRpc.State, Substitute.For(), testRpc.BlockTree, - Substitute.For(), testRpc.Timestamper, testRpc.SpecProvider, LimboLogs.Instance, blocksConfig); - await AssertIsProducingBlocks(blockProducer); + StandardBlockProducerRunner runner = new StandardBlockProducerRunner( + Substitute.For(), testRpc.BlockTree, blockProducer); + await AssertIsProducingBlocks(runner); } [Test, Timeout(Timeout.MaxTestTime)] @@ -79,14 +81,15 @@ public async Task MinedBlockProducer_IsProducingBlocks_returns_expected_results( testRpc.BlockchainProcessor, Substitute.For(), testRpc.BlockTree, - Substitute.For(), testRpc.State, Substitute.For(), testRpc.Timestamper, testRpc.SpecProvider, LimboLogs.Instance, blocksConfig); - await AssertIsProducingBlocks(blockProducer); + StandardBlockProducerRunner runner = new StandardBlockProducerRunner( + Substitute.For(), testRpc.BlockTree, blockProducer); + await AssertIsProducingBlocks(runner); } [Test, Timeout(Timeout.MaxTestTime)] @@ -97,7 +100,6 @@ public async Task AuraTestBlockProducer_IsProducingBlocks_returns_expected_resul AuRaBlockProducer blockProducer = new( Substitute.For(), Substitute.For(), - Substitute.For(), Substitute.For(), Substitute.For(), Substitute.For(), @@ -109,7 +111,9 @@ public async Task AuraTestBlockProducer_IsProducingBlocks_returns_expected_resul Substitute.For(), LimboLogs.Instance, Substitute.For()); - await AssertIsProducingBlocks(blockProducer); + StandardBlockProducerRunner runner = new StandardBlockProducerRunner( + Substitute.For(), Substitute.For(), blockProducer); + await AssertIsProducingBlocks(runner); } [Test, Timeout(Timeout.MaxTestTime)] @@ -120,7 +124,6 @@ public async Task CliqueBlockProducer_IsProducingBlocks_returns_expected_results Substitute.For(), testRpc.BlockchainProcessor, testRpc.State, - testRpc.BlockTree, testRpc.Timestamper, Substitute.For(), Substitute.For(), @@ -129,7 +132,17 @@ public async Task CliqueBlockProducer_IsProducingBlocks_returns_expected_results Substitute.For(), new CliqueConfig(), LimboLogs.Instance); - await AssertIsProducingBlocks(blockProducer); + + CliqueBlockProducerRunner runner = new CliqueBlockProducerRunner( + testRpc.BlockTree, + testRpc.Timestamper, + Substitute.For(), + Substitute.For(), + blockProducer, + new CliqueConfig(), + LimboLogs.Instance); + + await AssertIsProducingBlocks(runner); } private async Task CreateTestRpc() @@ -143,10 +156,10 @@ private async Task CreateTestRpc() return testRpc; } - private async Task AssertIsProducingBlocks(IBlockProducer blockProducer) + private async Task AssertIsProducingBlocks(IBlockProducerRunner blockProducer) { Assert.That(blockProducer.IsProducingBlocks(null), Is.EqualTo(false)); - await blockProducer.Start(); + blockProducer.Start(); Assert.That(blockProducer.IsProducingBlocks(null), Is.EqualTo(true)); Thread.Sleep(5000); Assert.That(blockProducer.IsProducingBlocks(1), Is.EqualTo(false)); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/BlockProducerBaseTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/BlockProducerBaseTests.cs index 4b8b6ef14b7..e4edbe07823 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/BlockProducerBaseTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/BlockProducerBaseTests.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Threading.Tasks; using FluentAssertions; using Nethermind.Config; using Nethermind.Consensus; @@ -30,7 +29,6 @@ public ProducerUnderTest( IBlockchainProcessor processor, ISealer sealer, IBlockTree blockTree, - IBlockProductionTrigger blockProductionTrigger, IWorldState stateProvider, IGasLimitCalculator gasLimitCalculator, ITimestamper timestamper, @@ -41,7 +39,6 @@ public ProducerUnderTest( processor, sealer, blockTree, - blockProductionTrigger, stateProvider, gasLimitCalculator, timestamper, @@ -52,16 +49,10 @@ public ProducerUnderTest( { } - public override Task Start() { return Task.CompletedTask; } - - public override Task StopAsync() => Task.CompletedTask; - public Block Prepare() => PrepareBlock(Build.A.BlockHeader.TestObject); public Block Prepare(BlockHeader header) => PrepareBlock(header); - protected override bool IsRunning() => true; - private class TimestampDifficultyCalculator : IDifficultyCalculator { public UInt256 Calculate(BlockHeader header, BlockHeader parent) => header.Timestamp; @@ -78,7 +69,6 @@ public void Time_passing_does_not_break_the_block() Substitute.For(), NullSealEngine.Instance, Build.A.BlockTree().TestObject, - Substitute.For(), Substitute.For(), Substitute.For(), timestamper, @@ -101,7 +91,6 @@ public void Parent_timestamp_is_used_consistently() Substitute.For(), NullSealEngine.Instance, Build.A.BlockTree().TestObject, - Substitute.For(), Substitute.For(), Substitute.For(), timestamper, diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs index 4d492270c74..ae107c08af5 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs @@ -6,6 +6,7 @@ using Nethermind.Blockchain.Blocks; using Nethermind.Blockchain.Receipts; using Nethermind.Config; +using Nethermind.Consensus; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; using Nethermind.Consensus.Rewards; @@ -57,14 +58,17 @@ public void Test() LimboLogs.Instance); StateReader stateReader = new(trieStore, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); BlockhashProvider blockhashProvider = new(blockTree, specProvider, stateProvider, LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new( blockhashProvider, specProvider, + codeInfoRepository, LimboLogs.Instance); TransactionProcessor txProcessor = new( specProvider, stateProvider, virtualMachine, + codeInfoRepository, LimboLogs.Instance); BlockProcessor blockProcessor = new( specProvider, @@ -73,7 +77,6 @@ public void Test() new BlockProcessor.BlockValidationTransactionsExecutor(txProcessor, stateProvider), stateProvider, NullReceiptStorage.Instance, - NullWitnessCollector.Instance, new BlockhashStore(blockTree, specProvider, stateProvider), txProcessor, LimboLogs.Instance); @@ -91,15 +94,16 @@ public void Test() blockchainProcessor, stateProvider, blockTree, - trigger, timestamper, specProvider, new BlocksConfig(), LimboLogs.Instance); + StandardBlockProducerRunner blockProducerRunner = new StandardBlockProducerRunner(trigger, blockTree, devBlockProducer); + blockchainProcessor.Start(); - devBlockProducer.Start(); - ProducedBlockSuggester _ = new ProducedBlockSuggester(blockTree, devBlockProducer); + blockProducerRunner.Start(); + ProducedBlockSuggester _ = new ProducedBlockSuggester(blockTree, blockProducerRunner); AutoResetEvent autoResetEvent = new(false); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Proofs/ReceiptTrieTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Proofs/ReceiptTrieTests.cs index 1fbaa51be02..6ee424c6b38 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Proofs/ReceiptTrieTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Proofs/ReceiptTrieTests.cs @@ -19,12 +19,14 @@ namespace Nethermind.Blockchain.Test.Proofs { public class ReceiptTrieTests { + private static readonly IRlpStreamDecoder _decoder = Rlp.GetStreamDecoder()!; + [Test, Timeout(Timeout.MaxTestTime)] public void Can_calculate_root_no_eip_658() { TxReceipt receipt = Build.A.Receipt.WithAllFieldsFilled.TestObject; Hash256 rootHash = ReceiptTrie.CalculateRoot(MainnetSpecProvider.Instance.GetSpec((1, null)), - new[] { receipt }, ReceiptMessageDecoder.Instance); + [receipt], _decoder); Assert.That(rootHash.ToString(), Is.EqualTo("0xe51a2d9f986d68628990c9d65e45c36128ec7bb697bd426b0bb4d18a3f3321be")); } @@ -35,7 +37,7 @@ public void Can_calculate_root() TxReceipt receipt = Build.A.Receipt.WithAllFieldsFilled.TestObject; Hash256 rootHash = ReceiptTrie.CalculateRoot( MainnetSpecProvider.Instance.GetSpec((MainnetSpecProvider.MuirGlacierBlockNumber, null)), - new[] { receipt }, ReceiptMessageDecoder.Instance); + [receipt], _decoder); Assert.That(rootHash.ToString(), Is.EqualTo("0x2e6d89c5b539e72409f2e587730643986c2ef33db5e817a4223aa1bb996476d5")); } @@ -46,7 +48,7 @@ public void Can_collect_proof_with_branch() TxReceipt receipt1 = Build.A.Receipt.WithAllFieldsFilled.TestObject; TxReceipt receipt2 = Build.A.Receipt.WithAllFieldsFilled.TestObject; ReceiptTrie trie = new(MainnetSpecProvider.Instance.GetSpec((ForkActivation)1), - new[] { receipt1, receipt2 }, ReceiptMessageDecoder.Instance, true); + [receipt1, receipt2], _decoder, true); byte[][] proof = trie.BuildProof(0); Assert.That(proof.Length, Is.EqualTo(2)); @@ -54,11 +56,11 @@ public void Can_collect_proof_with_branch() VerifyProof(proof, trie.RootHash); } - private static void VerifyProof(byte[][] proof, Hash256 receiptRoot) + private void VerifyProof(byte[][] proof, Hash256 receiptRoot) { TrieNode node = new(NodeType.Unknown, proof.Last()); node.ResolveNode(Substitute.For(), TreePath.Empty); - TxReceipt receipt = new ReceiptMessageDecoder().Decode(node.Value.AsRlpStream()); + TxReceipt receipt = _decoder.Decode(node.Value.AsRlpStream()); Assert.NotNull(receipt.Bloom); for (int i = proof.Length; i > 0; i--) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsIteratorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsIteratorTests.cs index e56498db73a..da658279ddc 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsIteratorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsIteratorTests.cs @@ -112,7 +112,7 @@ private ReceiptsIterator CreateIterator(TxReceipt[] receipts, Block block) false ); - ReceiptsIterator iterator = new ReceiptsIterator(span, blockDb, () => recovery.CreateRecoveryContext(new ReceiptRecoveryBlock(block)), ReceiptArrayStorageDecoder.GetRefDecoder(span)); + ReceiptsIterator iterator = new ReceiptsIterator(span, blockDb, () => recovery.CreateRecoveryContext(new ReceiptRecoveryBlock(block)), _decoder.GetRefDecoder(span)); return iterator; } } diff --git a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs index 912cfd4f100..63e4bc13cdc 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs @@ -19,7 +19,6 @@ using Nethermind.Logging; using Nethermind.Specs; using Nethermind.State; -using Nethermind.State.Witnesses; using Nethermind.Trie.Pruning; using Nethermind.TxPool; using NUnit.Framework; @@ -58,14 +57,17 @@ public void Setup() LimboLogs.Instance, transactionComparerProvider.GetDefaultComparer()); BlockhashProvider blockhashProvider = new(_blockTree, specProvider, stateProvider, LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new( blockhashProvider, specProvider, + codeInfoRepository, LimboLogs.Instance); TransactionProcessor transactionProcessor = new( specProvider, stateProvider, virtualMachine, + codeInfoRepository, LimboLogs.Instance); BlockProcessor blockProcessor = new( @@ -75,7 +77,6 @@ public void Setup() new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider), stateProvider, NullReceiptStorage.Instance, - new WitnessCollector(memDbProvider.StateDb, LimboLogs.Instance), new BlockhashStore(_blockTree, MainnetSpecProvider.Instance, stateProvider), transactionProcessor, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/TransactionSelectorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/TransactionSelectorTests.cs index bb730fa4b20..6b833e60048 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/TransactionSelectorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/TransactionSelectorTests.cs @@ -195,7 +195,7 @@ public void Proper_transactions_selected(ProperTransactionsSelectedTestCase test MemDb stateDb = new(); MemDb codeDb = new(); TrieStore trieStore = new(stateDb, LimboLogs.Instance); - WorldState stateProvider = new(trieStore, codeDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); StateReader _ = new(new TrieStore(stateDb, LimboLogs.Instance), codeDb, LimboLogs.Instance); ISpecProvider specProvider = Substitute.For(); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/TransactionsExecutorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/TransactionsExecutorTests.cs index f43d92ead95..8799490191a 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/TransactionsExecutorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/TransactionsExecutorTests.cs @@ -262,7 +262,7 @@ public void Proper_transactions_selected(TransactionSelectorTests.ProperTransact MemDb stateDb = new(); MemDb codeDb = new(); TrieStore trieStore = new(stateDb, LimboLogs.Instance); - WorldState stateProvider = new(trieStore, codeDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); ISpecProvider specProvider = Substitute.For(); IReleaseSpec spec = testCase.ReleaseSpec; diff --git a/src/Nethermind/Nethermind.Blockchain/BlockTree.cs b/src/Nethermind/Nethermind.Blockchain/BlockTree.cs index d2a96800259..c7338fa2aec 100644 --- a/src/Nethermind/Nethermind.Blockchain/BlockTree.cs +++ b/src/Nethermind/Nethermind.Blockchain/BlockTree.cs @@ -628,32 +628,6 @@ as it does not require the step of resolving number -> hash */ return result; } - public BlockHeader? FindLowestCommonAncestor(BlockHeader firstDescendant, BlockHeader secondDescendant, - long maxSearchDepth) - { - if (firstDescendant.Number > secondDescendant.Number) - { - firstDescendant = GetAncestorAtNumber(firstDescendant, secondDescendant.Number); - } - else if (secondDescendant.Number > firstDescendant.Number) - { - secondDescendant = GetAncestorAtNumber(secondDescendant, firstDescendant.Number); - } - - long currentSearchDepth = 0; - while ( - firstDescendant is not null - && secondDescendant is not null - && firstDescendant.Hash != secondDescendant.Hash) - { - if (currentSearchDepth++ >= maxSearchDepth) return null; - firstDescendant = this.FindParentHeader(firstDescendant, BlockTreeLookupOptions.TotalDifficultyNotNeeded); - secondDescendant = this.FindParentHeader(secondDescendant, BlockTreeLookupOptions.TotalDifficultyNotNeeded); - } - - return firstDescendant; - } - private BlockHeader? GetAncestorAtNumber(BlockHeader header, long number) { BlockHeader? result = header; @@ -827,22 +801,17 @@ private void DeleteBlocks(Hash256 deletePointer) return childHash; } - public bool IsMainChain(BlockHeader blockHeader) - { - ChainLevelInfo? chainLevelInfo = LoadLevel(blockHeader.Number); - bool isMain = chainLevelInfo is not null && chainLevelInfo.MainChainBlock?.BlockHash.Equals(blockHeader.Hash) == true; - return isMain; - } + public bool IsMainChain(BlockHeader blockHeader) => + LoadLevel(blockHeader.Number)?.MainChainBlock?.BlockHash.Equals(blockHeader.Hash) == true; - public bool IsMainChain(Hash256 blockHash) + public bool IsMainChain(Hash256 blockHash, bool throwOnMissingHash = true) { BlockHeader? header = FindHeader(blockHash, BlockTreeLookupOptions.TotalDifficultyNotNeeded); - if (header is null) - { - throw new InvalidOperationException($"Not able to retrieve block number for an unknown block {blockHash}"); - } - - return IsMainChain(header); + return header is not null + ? IsMainChain(header) + : throwOnMissingHash + ? throw new InvalidOperationException($"Not able to retrieve block number for an unknown block {blockHash}") + : false; } public BlockHeader? FindBestSuggestedHeader() => BestSuggestedHeader; @@ -1279,7 +1248,7 @@ private ChainLevelInfo UpdateOrCreateLevel(long number, Hash256 hash, BlockInfo /// private bool ShouldCache(long number) { - return number == 0L || Head is null || number >= Head.Number - HeaderStore.CacheSize; + return number == 0L || Head is null || number >= Head.Number - BlockStore.CacheSize; } public ChainLevelInfo? FindLevel(long number) diff --git a/src/Nethermind/Nethermind.Blockchain/BlockTreeOverlay.cs b/src/Nethermind/Nethermind.Blockchain/BlockTreeOverlay.cs new file mode 100644 index 00000000000..c16834f63a8 --- /dev/null +++ b/src/Nethermind/Nethermind.Blockchain/BlockTreeOverlay.cs @@ -0,0 +1,251 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Nethermind.Blockchain.Visitors; +using Nethermind.Core; +using Nethermind.Core.Collections; +using Nethermind.Core.Crypto; + +namespace Nethermind.Blockchain; + +public class BlockTreeOverlay : IBlockTree +{ + private readonly IBlockTree _baseTree; + private readonly IBlockTree _overlayTree; + + public BlockTreeOverlay(IReadOnlyBlockTree baseTree, IBlockTree overlayTree) + { + _baseTree = baseTree ?? throw new ArgumentNullException(nameof(baseTree)); + _overlayTree = overlayTree ?? throw new ArgumentNullException(nameof(overlayTree)); + _overlayTree.UpdateMainChain(new[] { _baseTree.Head }, true, true); + } + + public ulong NetworkId => _baseTree.NetworkId; + public ulong ChainId => _baseTree.ChainId; + public BlockHeader? Genesis => _baseTree.Genesis; + public BlockHeader? BestSuggestedHeader => _overlayTree.BestSuggestedHeader ?? _baseTree.BestSuggestedHeader; + public Block? BestSuggestedBody => _overlayTree.BestSuggestedBody ?? _baseTree.BestSuggestedBody; + public BlockHeader? BestSuggestedBeaconHeader => _overlayTree.BestSuggestedBeaconHeader ?? _baseTree.BestSuggestedBeaconHeader; + public BlockHeader? LowestInsertedHeader => _overlayTree.LowestInsertedHeader ?? _baseTree.LowestInsertedHeader; + + public long? LowestInsertedBodyNumber + { + get => _overlayTree.LowestInsertedBodyNumber ?? _baseTree.LowestInsertedBodyNumber; + set => _overlayTree.LowestInsertedBodyNumber = value; + } + + public BlockHeader? LowestInsertedBeaconHeader + { + get => _overlayTree.LowestInsertedBeaconHeader ?? _baseTree.LowestInsertedBeaconHeader; + set => _overlayTree.LowestInsertedBeaconHeader = value; + } + + public long BestKnownNumber => Math.Max(_overlayTree.BestKnownNumber, _baseTree.BestKnownNumber); + public long BestKnownBeaconNumber => Math.Max(_overlayTree.BestKnownBeaconNumber, _baseTree.BestKnownBeaconNumber); + public Hash256 HeadHash => _overlayTree.HeadHash ?? _baseTree.HeadHash; + public Hash256 GenesisHash => _baseTree.GenesisHash; + public Hash256? PendingHash => _overlayTree.PendingHash ?? _baseTree.PendingHash; + public Hash256? FinalizedHash => _overlayTree.FinalizedHash ?? _baseTree.FinalizedHash; + public Hash256? SafeHash => _overlayTree.SafeHash ?? _baseTree.SafeHash; + public Block? Head => _overlayTree.Head ?? _baseTree.Head; + public long? BestPersistedState { get => _overlayTree.BestPersistedState; set => _overlayTree.BestPersistedState = value; } + + public AddBlockResult Insert(BlockHeader header, BlockTreeInsertHeaderOptions headerOptions = BlockTreeInsertHeaderOptions.None) => + _overlayTree.Insert(header, headerOptions); + + public AddBlockResult Insert(Block block, + BlockTreeInsertBlockOptions insertBlockOptions = BlockTreeInsertBlockOptions.None, + BlockTreeInsertHeaderOptions insertHeaderOptions = BlockTreeInsertHeaderOptions.None, + WriteFlags bodiesWriteFlags = WriteFlags.None) => + _overlayTree.Insert(block, insertBlockOptions, insertHeaderOptions, bodiesWriteFlags); + + public void UpdateHeadBlock(Hash256 blockHash) => + _overlayTree.UpdateHeadBlock(blockHash); + + public AddBlockResult SuggestBlock(Block block, + BlockTreeSuggestOptions options = BlockTreeSuggestOptions.ShouldProcess) => + _overlayTree.SuggestBlock(block, options); + + public ValueTask SuggestBlockAsync(Block block, + BlockTreeSuggestOptions options = BlockTreeSuggestOptions.ShouldProcess) => + _overlayTree.SuggestBlockAsync(block, options); + + public AddBlockResult SuggestHeader(BlockHeader header) => _overlayTree.SuggestHeader(header); + + public bool IsKnownBlock(long number, Hash256 blockHash) => _overlayTree.IsKnownBlock(number, blockHash) || _baseTree.IsKnownBlock(number, blockHash); + + public bool IsKnownBeaconBlock(long number, Hash256 blockHash) => _overlayTree.IsKnownBeaconBlock(number, blockHash) || _baseTree.IsKnownBeaconBlock(number, blockHash); + + public bool WasProcessed(long number, Hash256 blockHash) => _overlayTree.WasProcessed(number, blockHash) || _baseTree.WasProcessed(number, blockHash); + + public void UpdateMainChain(IReadOnlyList blocks, bool wereProcessed, bool forceHeadBlock = false) => + _overlayTree.UpdateMainChain(blocks, wereProcessed, forceHeadBlock); + + public void MarkChainAsProcessed(IReadOnlyList blocks) => _overlayTree.MarkChainAsProcessed(blocks); + + public bool CanAcceptNewBlocks => _overlayTree.CanAcceptNewBlocks; + + public Task Accept(IBlockTreeVisitor blockTreeVisitor, CancellationToken cancellationToken) => _overlayTree.Accept(blockTreeVisitor, cancellationToken); + + public (BlockInfo? Info, ChainLevelInfo? Level) GetInfo(long number, Hash256 blockHash) + { + (BlockInfo Info, ChainLevelInfo Level) overlayInfo = _overlayTree.GetInfo(number, blockHash); + return overlayInfo.Info is not null || overlayInfo.Level is not null ? overlayInfo : _baseTree.GetInfo(number, blockHash); + } + + public ChainLevelInfo? FindLevel(long number) => _overlayTree.FindLevel(number) ?? _baseTree.FindLevel(number); + + public BlockInfo FindCanonicalBlockInfo(long blockNumber) => _overlayTree.FindCanonicalBlockInfo(blockNumber) ?? _baseTree.FindCanonicalBlockInfo(blockNumber); + + public Hash256 FindHash(long blockNumber) => _overlayTree.FindHash(blockNumber) ?? _baseTree.FindHash(blockNumber); + + public IOwnedReadOnlyList FindHeaders(Hash256 hash, int numberOfBlocks, int skip, bool reverse) + { + IOwnedReadOnlyList overlayHeaders = _overlayTree.FindHeaders(hash, numberOfBlocks, skip, reverse); + return overlayHeaders.Count > 0 ? overlayHeaders : _baseTree.FindHeaders(hash, numberOfBlocks, skip, reverse); + } + + public void DeleteInvalidBlock(Block invalidBlock) => + _overlayTree.DeleteInvalidBlock(invalidBlock); + + public void ForkChoiceUpdated(Hash256? finalizedBlockHash, Hash256? safeBlockBlockHash) => + _overlayTree.ForkChoiceUpdated(finalizedBlockHash, safeBlockBlockHash); + + public event EventHandler? NewBestSuggestedBlock + { + add + { + if (value is not null) + { + _baseTree.NewBestSuggestedBlock += value; + _overlayTree.NewBestSuggestedBlock += value; + } + } + remove + { + if (value is not null) + { + _baseTree.NewBestSuggestedBlock -= value; + _overlayTree.NewBestSuggestedBlock -= value; + } + } + } + + public event EventHandler? NewSuggestedBlock + { + add + { + if (value is not null) + { + _baseTree.NewSuggestedBlock += value; + _overlayTree.NewSuggestedBlock += value; + } + } + remove + { + if (value is not null) + { + _baseTree.NewSuggestedBlock -= value; + _overlayTree.NewSuggestedBlock -= value; + } + } + } + + public event EventHandler? BlockAddedToMain + { + add + { + if (value is not null) + { + _baseTree.BlockAddedToMain += value; + _overlayTree.BlockAddedToMain += value; + } + } + remove + { + if (value is not null) + { + _baseTree.BlockAddedToMain -= value; + _overlayTree.BlockAddedToMain -= value; + } + } + } + + public event EventHandler? NewHeadBlock + { + add + { + if (value is not null) + { + _baseTree.NewHeadBlock += value; + _overlayTree.NewHeadBlock += value; + } + } + remove + { + if (value is not null) + { + _baseTree.NewHeadBlock -= value; + _overlayTree.NewHeadBlock -= value; + } + } + } + + public event EventHandler? OnUpdateMainChain + { + add + { + if (value is not null) + { + _baseTree.OnUpdateMainChain += value; + _overlayTree.OnUpdateMainChain += value; + } + } + remove + { + if (value is not null) + { + _baseTree.OnUpdateMainChain -= value; + _overlayTree.OnUpdateMainChain -= value; + } + } + } + + public int DeleteChainSlice(in long startNumber, long? endNumber = null, bool force = false) => + _overlayTree.DeleteChainSlice(startNumber, endNumber, force); + + public bool IsBetterThanHead(BlockHeader? header) => _overlayTree.IsBetterThanHead(header) || _baseTree.IsBetterThanHead(header); + + public void UpdateBeaconMainChain(BlockInfo[]? blockInfos, long clearBeaconMainChainStartPoint) => + _overlayTree.UpdateBeaconMainChain(blockInfos, clearBeaconMainChainStartPoint); + + public void RecalculateTreeLevels() => _overlayTree.RecalculateTreeLevels(); + + public Block? FindBlock(Hash256 blockHash, BlockTreeLookupOptions options, long? blockNumber = null) => + _overlayTree.FindBlock(blockHash, options, blockNumber) ?? _baseTree.FindBlock(blockHash, options, blockNumber); + + public Block? FindBlock(long blockNumber, BlockTreeLookupOptions options) => + _overlayTree.FindBlock(blockNumber, options) ?? _baseTree.FindBlock(blockNumber, options); + + public BlockHeader? FindHeader(Hash256 blockHash, BlockTreeLookupOptions options, long? blockNumber = null) => + _overlayTree.FindHeader(blockHash, options, blockNumber) ?? _baseTree.FindHeader(blockHash, options, blockNumber); + + public BlockHeader? FindHeader(long blockNumber, BlockTreeLookupOptions options) => + _overlayTree.FindHeader(blockNumber, options) ?? _baseTree.FindHeader(blockNumber, options); + + public Hash256? FindBlockHash(long blockNumber) => + _overlayTree.FindBlockHash(blockNumber) ?? _baseTree.FindBlockHash(blockNumber); + + public bool IsMainChain(BlockHeader blockHeader) => + _baseTree.IsMainChain(blockHeader) || _overlayTree.IsMainChain(blockHeader); + + public bool IsMainChain(Hash256 blockHash, bool throwOnMissingHash = true) => + _baseTree.IsMainChain(blockHash, false) || _overlayTree.IsMainChain(blockHash, throwOnMissingHash); + + public BlockHeader FindBestSuggestedHeader() => + _overlayTree.FindBestSuggestedHeader() ?? _baseTree.FindBestSuggestedHeader(); +} diff --git a/src/Nethermind/Nethermind.Blockchain/Blocks/BlockStore.cs b/src/Nethermind/Nethermind.Blockchain/Blocks/BlockStore.cs index 29fcdcf5d33..20aee80ea04 100644 --- a/src/Nethermind/Nethermind.Blockchain/Blocks/BlockStore.cs +++ b/src/Nethermind/Nethermind.Blockchain/Blocks/BlockStore.cs @@ -18,7 +18,7 @@ public class BlockStore : IBlockStore { private readonly IDb _blockDb; private readonly BlockDecoder _blockDecoder = new(); - private const int CacheSize = 128 + 32; + public const int CacheSize = 128 + 32; private readonly LruCache _blockCache = new(CacheSize, CacheSize, "blocks"); diff --git a/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.ConstantContract.cs b/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.ConstantContract.cs index 2d2255b0045..d8b3f164d50 100644 --- a/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.ConstantContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.ConstantContract.cs @@ -58,7 +58,7 @@ protected ConstantContractBase(Contract contract) protected Transaction GenerateTransaction(CallInfo callInfo) => _contract.GenerateTransaction(callInfo.ContractAddress, callInfo.FunctionName, callInfo.Sender, DefaultConstantContractGasLimit, callInfo.ParentHeader, callInfo.Arguments); - protected byte[] CallCore(CallInfo callInfo, IReadOnlyTransactionProcessor readOnlyTransactionProcessor, Transaction transaction) => + protected byte[] CallCore(CallInfo callInfo, ITransactionProcessor readOnlyTransactionProcessor, Transaction transaction) => _contract.CallCore(readOnlyTransactionProcessor, callInfo.ParentHeader, callInfo.FunctionName, transaction, true); protected object[] DecodeReturnData(string functionName, byte[] data) => _contract.DecodeReturnData(functionName, data); @@ -85,17 +85,17 @@ public override object[] Call(CallInfo callInfo) lock (_readOnlyTxProcessorSource) { - using var readOnlyTransactionProcessor = _readOnlyTxProcessorSource.Build(GetState(callInfo.ParentHeader)); - return CallRaw(callInfo, readOnlyTransactionProcessor); + using var scope = _readOnlyTxProcessorSource.Build(GetState(callInfo.ParentHeader)); + return CallRaw(callInfo, scope); } } - protected virtual object[] CallRaw(CallInfo callInfo, IReadOnlyTransactionProcessor readOnlyTransactionProcessor) + protected virtual object[] CallRaw(CallInfo callInfo, IReadOnlyTxProcessingScope scope) { var transaction = GenerateTransaction(callInfo); - if (_contract.ContractAddress is not null && readOnlyTransactionProcessor.IsContractDeployed(_contract.ContractAddress)) + if (_contract.ContractAddress is not null && scope.WorldState.IsContract(_contract.ContractAddress)) { - var result = CallCore(callInfo, readOnlyTransactionProcessor, transaction); + var result = CallCore(callInfo, scope.TransactionProcessor, transaction); return callInfo.Result = _contract.DecodeReturnData(callInfo.FunctionName, result); } else if (callInfo.MissingContractResult is not null) diff --git a/src/Nethermind/Nethermind.Blockchain/Find/IBlockFinder.cs b/src/Nethermind/Nethermind.Blockchain/Find/IBlockFinder.cs index 69299ab7dda..e65b57f8c49 100644 --- a/src/Nethermind/Nethermind.Blockchain/Find/IBlockFinder.cs +++ b/src/Nethermind/Nethermind.Blockchain/Find/IBlockFinder.cs @@ -43,8 +43,9 @@ public interface IBlockFinder /// Checks if the block is currently in the canonical chain /// /// Hash of the block to check + /// If should throw when hash is not found /// True if part of the canonical chain, otherwise False - bool IsMainChain(Hash256 blockHash); + bool IsMainChain(Hash256 blockHash, bool throwOnMissingHash = true); public Block? FindBlock(Hash256 blockHash, long? blockNumber = null) => FindBlock(blockHash, BlockTreeLookupOptions.None, blockNumber); diff --git a/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs b/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs index 33e86022f79..e951e03226a 100644 --- a/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs +++ b/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs @@ -254,6 +254,16 @@ private async Task CopyTrie(IPruningContext pruning, Hash256 stateRoot, Cancella targetNodeStorage.Scheme = INodeStorage.KeyScheme.HalfPath; } + if (originalKeyScheme == INodeStorage.KeyScheme.Hash && targetNodeStorage.Scheme == INodeStorage.KeyScheme.HalfPath) + { + if (_logger.IsInfo) _logger.Info($"Converting from Hash key scheme to HalfPath key scheme"); + + if (_pruningConfig.FullPruningMemoryBudgetMb < 8000) + { + if (_logger.IsWarn) _logger.Warn($"Full pruning memory budget is less than 8 GB. Full pruning from Hash to HalfPath require more memory budget for efficient copy. Consider increasing full pruning memory budget to at least 8GB."); + } + } + VisitingOptions visitingOptions = new() { MaxDegreeOfParallelism = _pruningConfig.FullPruningMaxDegreeOfParallelism, diff --git a/src/Nethermind/Nethermind.Blockchain/IBlockTree.cs b/src/Nethermind/Nethermind.Blockchain/IBlockTree.cs index 1bfbfaa6f87..006f2de938b 100644 --- a/src/Nethermind/Nethermind.Blockchain/IBlockTree.cs +++ b/src/Nethermind/Nethermind.Blockchain/IBlockTree.cs @@ -153,8 +153,6 @@ AddBlockResult Insert(Block block, BlockTreeInsertBlockOptions insertBlockOption IOwnedReadOnlyList FindHeaders(Hash256 hash, int numberOfBlocks, int skip, bool reverse); - BlockHeader FindLowestCommonAncestor(BlockHeader firstDescendant, BlockHeader secondDescendant, long maxSearchDepth); - void DeleteInvalidBlock(Block invalidBlock); void ForkChoiceUpdated(Hash256? finalizedBlockHash, Hash256? safeBlockBlockHash); diff --git a/src/Nethermind/Nethermind.Blockchain/Processing/WitnessPruner.cs b/src/Nethermind/Nethermind.Blockchain/Processing/WitnessPruner.cs deleted file mode 100644 index c2863c3e354..00000000000 --- a/src/Nethermind/Nethermind.Blockchain/Processing/WitnessPruner.cs +++ /dev/null @@ -1,67 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Blockchain; -using Nethermind.Core; -using Nethermind.Logging; -using Nethermind.State; - -namespace Nethermind.Synchronization.Witness -{ - public static class WitnessCollectorExtensions - { - public static IWitnessRepository WithPruning( - this IWitnessRepository repository, - IBlockTree blockTree, - ILogManager logManager, - int followDistance = 16) - { - new WitnessPruner(blockTree, repository, logManager, followDistance).Start(); - return repository; - } - } - - public class WitnessPruner - { - private readonly IBlockTree _blockTree; - private readonly IWitnessRepository _witnessRepository; - private readonly int _followDistance; - private readonly ILogger _logger; - - public WitnessPruner(IBlockTree blockTree, IWitnessRepository witnessRepository, ILogManager logManager, int followDistance = 16) - { - _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); - _witnessRepository = witnessRepository ?? throw new ArgumentNullException(nameof(witnessRepository)); - _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - _followDistance = followDistance; - } - - public void Start() - { - _blockTree.NewHeadBlock += OnNewHeadBlock; - } - - private void OnNewHeadBlock(object? sender, BlockEventArgs e) - { - long toPrune = e.Block.Number - _followDistance; - if (toPrune > 0) - { - var level = _blockTree.FindLevel(toPrune); - if (level is not null) - { - if (_logger.IsTrace) _logger.Trace($"Pruning witness from blocks with number {toPrune}"); - - for (int i = 0; i < level.BlockInfos.Length; i++) - { - var blockInfo = level.BlockInfos[i]; - if (blockInfo.BlockHash is not null) - { - _witnessRepository.Delete(blockInfo.BlockHash); - } - } - } - } - } - } -} diff --git a/src/Nethermind/Nethermind.Blockchain/ReadOnlyBlockTree.cs b/src/Nethermind/Nethermind.Blockchain/ReadOnlyBlockTree.cs index 5ceaacf2495..4fc9e1077e8 100644 --- a/src/Nethermind/Nethermind.Blockchain/ReadOnlyBlockTree.cs +++ b/src/Nethermind/Nethermind.Blockchain/ReadOnlyBlockTree.cs @@ -106,13 +106,11 @@ public void UpdateHeadBlock(Hash256 blockHash) public IOwnedReadOnlyList FindHeaders(Hash256 hash, int numberOfBlocks, int skip, bool reverse) => _wrapped.FindHeaders(hash, numberOfBlocks, skip, reverse); - public BlockHeader FindLowestCommonAncestor(BlockHeader firstDescendant, BlockHeader secondDescendant, long maxSearchDepth) => _wrapped.FindLowestCommonAncestor(firstDescendant, secondDescendant, maxSearchDepth); - public Block FindBlock(long blockNumber, BlockTreeLookupOptions options) => _wrapped.FindBlock(blockNumber, options); public void DeleteInvalidBlock(Block invalidBlock) => throw new InvalidOperationException($"{nameof(ReadOnlyBlockTree)} does not expect {nameof(DeleteInvalidBlock)} calls"); - public bool IsMainChain(Hash256 blockHash) => _wrapped.IsMainChain(blockHash); + public bool IsMainChain(Hash256 blockHash, bool throwOnMissingHash = true) => _wrapped.IsMainChain(blockHash, throwOnMissingHash); public BlockHeader FindBestSuggestedHeader() => _wrapped.FindBestSuggestedHeader(); diff --git a/src/Nethermind/Nethermind.Blockchain/Receipts/PersistentReceiptStorage.cs b/src/Nethermind/Nethermind.Blockchain/Receipts/PersistentReceiptStorage.cs index 2d2ef1695c4..7a3ce9593f4 100644 --- a/src/Nethermind/Nethermind.Blockchain/Receipts/PersistentReceiptStorage.cs +++ b/src/Nethermind/Nethermind.Blockchain/Receipts/PersistentReceiptStorage.cs @@ -256,7 +256,7 @@ public bool TryGetReceiptsIterator(long blockNumber, Hash256 blockHash, out Rece }; } - IReceiptRefDecoder refDecoder = ReceiptArrayStorageDecoder.GetRefDecoder(receiptsData); + IReceiptRefDecoder refDecoder = _storageDecoder.GetRefDecoder(receiptsData); iterator = result ? new ReceiptsIterator(receiptsData, _blocksDb, recoveryContextFactory, refDecoder) : new ReceiptsIterator(); return result; diff --git a/src/Nethermind/Nethermind.Blockchain/Receipts/ReceiptsRootCalculator.cs b/src/Nethermind/Nethermind.Blockchain/Receipts/ReceiptsRootCalculator.cs index a70f397f827..5bd7d32bb59 100644 --- a/src/Nethermind/Nethermind.Blockchain/Receipts/ReceiptsRootCalculator.cs +++ b/src/Nethermind/Nethermind.Blockchain/Receipts/ReceiptsRootCalculator.cs @@ -13,6 +13,8 @@ public class ReceiptsRootCalculator : IReceiptsRootCalculator { public static readonly ReceiptsRootCalculator Instance = new(); + private static readonly IRlpStreamDecoder _decoder = Rlp.GetStreamDecoder(RlpDecoderKey.Trie); + public Hash256 GetReceiptsRoot(TxReceipt[] receipts, IReceiptSpec spec, Hash256? suggestedRoot) { Hash256 SkipStateAndStatusReceiptsRoot() @@ -20,7 +22,7 @@ Hash256 SkipStateAndStatusReceiptsRoot() receipts.SetSkipStateAndStatusInRlp(true); try { - return ReceiptTrie.CalculateRoot(spec, receipts, ReceiptMessageDecoder.Instance); + return ReceiptTrie.CalculateRoot(spec, receipts, _decoder); } finally { @@ -28,7 +30,7 @@ Hash256 SkipStateAndStatusReceiptsRoot() } } - Hash256 receiptsRoot = ReceiptTrie.CalculateRoot(spec, receipts, ReceiptMessageDecoder.Instance); + Hash256 receiptsRoot = ReceiptTrie.CalculateRoot(spec, receipts, _decoder); if (!spec.ValidateReceipts && receiptsRoot != suggestedRoot) { var skipStateAndStatusReceiptsRoot = SkipStateAndStatusReceiptsRoot(); diff --git a/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncConfig.cs b/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncConfig.cs index a647aa0988c..551a9856a33 100644 --- a/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncConfig.cs +++ b/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncConfig.cs @@ -93,9 +93,6 @@ public interface ISyncConfig : IConfig [ConfigItem(DisabledForCli = true, HiddenFromDocs = true, DefaultValue = "1")] public long AncientReceiptsBarrierCalc => Math.Max(1, Math.Min(PivotNumberParsed, Math.Max(AncientBodiesBarrier, AncientReceiptsBarrier))); - [ConfigItem(Description = "Whether to enable the Witness protocol.", DefaultValue = "false")] - public bool WitnessProtocolEnabled { get; set; } - [ConfigItem(Description = "Whether to use the Snap sync mode.", DefaultValue = "false")] public bool SnapSync { get; set; } diff --git a/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncPeer.cs b/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncPeer.cs index a51275ff58c..82e52beb0ef 100644 --- a/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncPeer.cs +++ b/src/Nethermind/Nethermind.Blockchain/Synchronization/ISyncPeer.cs @@ -13,11 +13,6 @@ namespace Nethermind.Blockchain.Synchronization { - public interface IWitnessPeer - { - Task GetBlockWitnessHashes(Hash256 blockHash, CancellationToken token); - } - public interface ISyncPeer : ITxPoolPeer, IPeerWithSatelliteProtocol { Node Node { get; } diff --git a/src/Nethermind/Nethermind.Blockchain/Synchronization/SyncConfig.cs b/src/Nethermind/Nethermind.Blockchain/Synchronization/SyncConfig.cs index c896c206c75..d2645336586 100644 --- a/src/Nethermind/Nethermind.Blockchain/Synchronization/SyncConfig.cs +++ b/src/Nethermind/Nethermind.Blockchain/Synchronization/SyncConfig.cs @@ -48,7 +48,6 @@ public string? PivotHash set => _pivotHash = value; } public int MaxAttemptsToUpdatePivot { get; set; } = int.MaxValue; - public bool WitnessProtocolEnabled { get; set; } = false; public bool SnapSync { get; set; } = false; public int SnapSyncAccountRangePartitionCount { get; set; } = 8; public bool FixReceipts { get; set; } = false; diff --git a/src/Nethermind/Nethermind.Blockchain/Utils/LastNStateRootTracker.cs b/src/Nethermind/Nethermind.Blockchain/Utils/LastNStateRootTracker.cs index 9a15de970ce..b9ca08c0792 100644 --- a/src/Nethermind/Nethermind.Blockchain/Utils/LastNStateRootTracker.cs +++ b/src/Nethermind/Nethermind.Blockchain/Utils/LastNStateRootTracker.cs @@ -29,7 +29,7 @@ public LastNStateRootTracker(IBlockTree blockTree, int lastN) _lastN = lastN; _blockTree.BlockAddedToMain += BlockTreeOnNewHeadBlock; - if (_blockTree.Head != null) ResetAvailableStateRoots(_blockTree.Head.Header, true); + if (_blockTree.Head is not null) ResetAvailableStateRoots(_blockTree.Head.Header, true); } private void BlockTreeOnNewHeadBlock(object? sender, BlockEventArgs e) diff --git a/src/Nethermind/Nethermind.Cli.Test/ProofCliModuleTests.cs b/src/Nethermind/Nethermind.Cli.Test/ProofCliModuleTests.cs index dac449f4a53..3eac4d9207c 100644 --- a/src/Nethermind/Nethermind.Cli.Test/ProofCliModuleTests.cs +++ b/src/Nethermind/Nethermind.Cli.Test/ProofCliModuleTests.cs @@ -7,6 +7,7 @@ using Nethermind.Cli.Modules; using Nethermind.Core.Crypto; using Nethermind.Core.Test.Builders; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc; using Nethermind.JsonRpc.Client; using Nethermind.JsonRpc.Data; diff --git a/src/Nethermind/Nethermind.Cli/Modules/EthCliModule.cs b/src/Nethermind/Nethermind.Cli/Modules/EthCliModule.cs index adba54d9821..961ce37bfe9 100644 --- a/src/Nethermind/Nethermind.Cli/Modules/EthCliModule.cs +++ b/src/Nethermind/Nethermind.Cli/Modules/EthCliModule.cs @@ -7,6 +7,7 @@ using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; +using Nethermind.Facade.Eth; using Nethermind.Int256; using Nethermind.JsonRpc.Data; @@ -49,6 +50,10 @@ public JsValue GetProof(string address, string[] storageKeys, string? blockParam return NodeManager.Post("eth_call", tx, blockParameter ?? "latest").Result; } + [CliFunction("eth", "simulateV1")] + public JsValue SimulateV1(ulong version, object[] blockCalls, string? blockParameter = null, bool traceTransfers = true) => + NodeManager.PostJint("eth_simulateV1", 1, blockCalls, blockParameter ?? "latest", traceTransfers).Result; + [CliFunction("eth", "getBlockByHash")] public JsValue GetBlockByHash(string hash, bool returnFullTransactionObjects) { diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs index d30115175e0..a21d6bf5c45 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; +using FluentAssertions; using Nethermind.Blockchain; using Nethermind.Blockchain.Blocks; using Nethermind.Blockchain.Receipts; @@ -55,7 +56,7 @@ private class On private readonly Dictionary _snapshotManager = new(); private readonly Dictionary _blockTrees = new(); private readonly Dictionary _blockEvents = new(); - private readonly Dictionary _producers = new(); + private readonly Dictionary _producers = new(); private readonly Dictionary _pools = new(); private On() @@ -127,8 +128,10 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f _genesis.Header.Hash = _genesis.Header.CalculateHash(); _genesis3Validators.Header.Hash = _genesis3Validators.Header.CalculateHash(); + CodeInfoRepository codeInfoRepository = new(); TransactionProcessor transactionProcessor = new(goerliSpecProvider, stateProvider, - new VirtualMachine(blockhashProvider, specProvider, nodeLogManager), + new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, nodeLogManager), + codeInfoRepository, nodeLogManager); BlockProcessor blockProcessor = new( goerliSpecProvider, @@ -137,7 +140,6 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider), stateProvider, NullReceiptStorage.Instance, - NullWitnessCollector.Instance, new BlockhashStore(blockTree, goerliSpecProvider, stateProvider), transactionProcessor, nodeLogManager); @@ -148,8 +150,8 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f IReadOnlyTrieStore minerTrieStore = trieStore.AsReadOnly(); WorldState minerStateProvider = new(minerTrieStore, codeDb, nodeLogManager); - VirtualMachine minerVirtualMachine = new(blockhashProvider, specProvider, nodeLogManager); - TransactionProcessor minerTransactionProcessor = new(goerliSpecProvider, minerStateProvider, minerVirtualMachine, nodeLogManager); + VirtualMachine minerVirtualMachine = new(blockhashProvider, specProvider, codeInfoRepository, nodeLogManager); + TransactionProcessor minerTransactionProcessor = new(goerliSpecProvider, minerStateProvider, minerVirtualMachine, codeInfoRepository, nodeLogManager); BlockProcessor minerBlockProcessor = new( goerliSpecProvider, @@ -158,7 +160,6 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f new BlockProcessor.BlockProductionTransactionsExecutor(minerTransactionProcessor, minerStateProvider, goerliSpecProvider, _logManager), minerStateProvider, NullReceiptStorage.Instance, - NullWitnessCollector.Instance, new BlockhashStore(blockTree, goerliSpecProvider, minerStateProvider), minerTransactionProcessor, nodeLogManager); @@ -179,7 +180,6 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f txPoolTxSource, minerProcessor, minerStateProvider, - blockTree, _timestamper, new CryptoRandom(), snapshotManager, @@ -188,11 +188,21 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f MainnetSpecProvider.Instance, _cliqueConfig, nodeLogManager); - blockProducer.Start(); - ProducedBlockSuggester suggester = new ProducedBlockSuggester(blockTree, blockProducer); + CliqueBlockProducerRunner producerRunner = new CliqueBlockProducerRunner( + blockTree, + _timestamper, + new CryptoRandom(), + snapshotManager, + blockProducer, + _cliqueConfig, + LimboLogs.Instance); + + producerRunner.Start(); + + ProducedBlockSuggester suggester = new ProducedBlockSuggester(blockTree, producerRunner); - _producers.Add(privateKey, blockProducer); + _producers.Add(privateKey, producerRunner); return this; } @@ -253,7 +263,7 @@ public On UncastVote(PrivateKey nodeId, Address address) public On IsProducingBlocks(PrivateKey nodeId, bool expected, ulong? maxInterval) { if (_logger.IsInfo) _logger.Info($"IsProducingBlocks"); - Assert.That(((IBlockProducer)_producers[nodeId]).IsProducingBlocks(maxInterval), Is.EqualTo(expected)); + Assert.That(((IBlockProducerRunner)_producers[nodeId]).IsProducingBlocks(maxInterval), Is.EqualTo(expected)); return this; } diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueRpcModuleTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueRpcModuleTests.cs index b1f68c90b37..cf8cc178f51 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueRpcModuleTests.cs @@ -36,7 +36,6 @@ public void Sets_clique_block_producer_properly() Substitute.For(), Substitute.For(), Substitute.For(), - blockTree, Substitute.For(), Substitute.For(), Substitute.For(), @@ -48,7 +47,16 @@ public void Sets_clique_block_producer_properly() SnapshotManager snapshotManager = new(CliqueConfig.Default, new MemDb(), Substitute.For(), NullEthereumEcdsa.Instance, LimboLogs.Instance); - CliqueRpcModule bridge = new(producer, snapshotManager, blockTree); + CliqueBlockProducerRunner producerRunner = new CliqueBlockProducerRunner( + blockTree, + Substitute.For(), + Substitute.For(), + snapshotManager, + producer, + cliqueConfig, + LimboLogs.Instance); + + CliqueRpcModule bridge = new(producerRunner, snapshotManager, blockTree); Assert.DoesNotThrow(() => bridge.CastVote(TestItem.AddressB, true)); Assert.DoesNotThrow(() => bridge.UncastVote(TestItem.AddressB)); Assert.DoesNotThrow(() => bridge.CastVote(TestItem.AddressB, false)); @@ -63,7 +71,7 @@ public void Can_ask_for_block_signer() BlockHeader header = Build.A.BlockHeader.TestObject; blockFinder.FindHeader(Arg.Any()).Returns(header); snapshotManager.GetBlockSealer(header).Returns(TestItem.AddressA); - CliqueRpcModule rpcModule = new(Substitute.For(), snapshotManager, blockFinder); + CliqueRpcModule rpcModule = new(Substitute.For(), snapshotManager, blockFinder); rpcModule.clique_getBlockSigner(Keccak.Zero).Result.ResultType.Should().Be(ResultType.Success); rpcModule.clique_getBlockSigner(Keccak.Zero).Data.Should().Be(TestItem.AddressA); } @@ -74,7 +82,7 @@ public void Can_ask_for_block_signer_when_block_is_unknown() ISnapshotManager snapshotManager = Substitute.For(); IBlockFinder blockFinder = Substitute.For(); blockFinder.FindHeader(Arg.Any()).Returns((BlockHeader)null); - CliqueRpcModule rpcModule = new(Substitute.For(), snapshotManager, blockFinder); + CliqueRpcModule rpcModule = new(Substitute.For(), snapshotManager, blockFinder); rpcModule.clique_getBlockSigner(Keccak.Zero).Result.ResultType.Should().Be(ResultType.Failure); } @@ -83,7 +91,7 @@ public void Can_ask_for_block_signer_when_hash_is_null() { ISnapshotManager snapshotManager = Substitute.For(); IBlockFinder blockFinder = Substitute.For(); - CliqueRpcModule rpcModule = new(Substitute.For(), snapshotManager, blockFinder); + CliqueRpcModule rpcModule = new(Substitute.For(), snapshotManager, blockFinder); rpcModule.clique_getBlockSigner(null).Result.ResultType.Should().Be(ResultType.Failure); } } diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueTests.cs index 56bc5325969..21c436e18ca 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueTests.cs @@ -13,7 +13,9 @@ using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Serialization.Rlp; +using NSubstitute; using NUnit.Framework; +using System.Threading.Tasks; using BlockTree = Nethermind.Blockchain.BlockTree; namespace Nethermind.Clique.Test @@ -91,6 +93,37 @@ public void Test_no_signer_data_at_epoch_fails(string blockRlp) Assert.True(validSeal); } + [TestCase(Block4Rlp)] + public async Task SealBlock_SignerCanSignHeader_FullHeaderIsUsedToSign(string blockRlp) + { + IHeaderSigner signer = Substitute.For(); + signer.CanSignHeader.Returns(true); + signer.CanSign.Returns(true); + signer.Address.Returns(new Address("0x7ffc57839b00206d1ad20c69a1981b489f772031")); + signer.Sign(Arg.Any()).Returns(new Signature(new byte[65])); + CliqueSealer sut = new CliqueSealer(signer, new CliqueConfig(), _snapshotManager, LimboLogs.Instance); + Block block = Rlp.Decode(new Rlp(Bytes.FromHexString(blockRlp))); + + await sut.SealBlock(block, System.Threading.CancellationToken.None); + + signer.Received().Sign(Arg.Any()); + } + + [TestCase(Block4Rlp)] + public async Task SealBlock_SignerCannotSignHeader_HashIsUsedToSign(string blockRlp) + { + ISigner signer = Substitute.For(); + signer.CanSign.Returns(true); + signer.Address.Returns(new Address("0x7ffc57839b00206d1ad20c69a1981b489f772031")); + signer.Sign(Arg.Any()).Returns(new Signature(new byte[65])); + CliqueSealer sut = new CliqueSealer(signer, new CliqueConfig(), _snapshotManager, LimboLogs.Instance); + Block block = Rlp.Decode(new Rlp(Bytes.FromHexString(blockRlp))); + + await sut.SealBlock(block, System.Threading.CancellationToken.None); + + signer.Received().Sign(Arg.Any()); + } + public static Block GetGenesis() { Hash256 parentHash = Keccak.Zero; diff --git a/src/Nethermind/Nethermind.Config/BlocksConfig.cs b/src/Nethermind/Nethermind.Config/BlocksConfig.cs index 4a6334f40b4..9a12edfb5d4 100644 --- a/src/Nethermind/Nethermind.Config/BlocksConfig.cs +++ b/src/Nethermind/Nethermind.Config/BlocksConfig.cs @@ -24,6 +24,7 @@ public class BlocksConfig : IBlocksConfig public ulong SecondsPerSlot { get; set; } = 12; + public bool PreWarmStateOnBlockProcessing { get; set; } = true; public string ExtraData { diff --git a/src/Nethermind/Nethermind.Config/IBlocksConfig.cs b/src/Nethermind/Nethermind.Config/IBlocksConfig.cs index a78820f5f56..8f232cf2b02 100644 --- a/src/Nethermind/Nethermind.Config/IBlocksConfig.cs +++ b/src/Nethermind/Nethermind.Config/IBlocksConfig.cs @@ -34,5 +34,8 @@ public interface IBlocksConfig : IConfig [ConfigItem(Description = "The block time slot, in seconds.", DefaultValue = "12")] ulong SecondsPerSlot { get; set; } + [ConfigItem(Description = "Try to pre-warm the state when processing blocks. Can lead to 2x speedup in main loop block processing.", DefaultValue = "True")] + bool PreWarmStateOnBlockProcessing { get; set; } + byte[] GetExtraDataBytes(); } diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index a926ebdb7c7..6d259b36940 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -57,7 +57,6 @@ public AuRaBlockProcessor( blockTransactionsExecutor, stateProvider, receiptStorage, - NullWitnessCollector.Instance, new BlockhashStore(blockTree, specProvider, stateProvider), transactionProcessor, logManager, diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProducer.cs index 3db92361804..b74ae8cc935 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProducer.cs @@ -27,7 +27,6 @@ public class AuRaBlockProducer : BlockProducerBase public AuRaBlockProducer(ITxSource txSource, IBlockchainProcessor processor, - IBlockProductionTrigger blockProductionTrigger, IWorldState stateProvider, ISealer sealer, IBlockTree blockTree, @@ -44,7 +43,6 @@ public AuRaBlockProducer(ITxSource txSource, processor, sealer, blockTree, - blockProductionTrigger, stateProvider, gasLimitCalculator, timestamper, diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaPlugin.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaPlugin.cs index 558433e9e78..f3c766da5f0 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaPlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaPlugin.cs @@ -31,6 +31,8 @@ public class AuRaPlugin : IConsensusPlugin, ISynchronizationPlugin, IInitializat public string SealEngineType => Core.SealEngineType.AuRa; + private StartBlockProducerAuRa? _blockProducerStarter; + public ValueTask DisposeAsync() { @@ -40,16 +42,10 @@ public ValueTask DisposeAsync() public Task Init(INethermindApi nethermindApi) { _nethermindApi = nethermindApi as AuRaNethermindApi; - return Task.CompletedTask; - } - - public Task InitNetworkProtocol() - { - return Task.CompletedTask; - } - - public Task InitRpcModules() - { + if (_nethermindApi is not null) + { + _blockProducerStarter = new(_nethermindApi); + } return Task.CompletedTask; } @@ -63,19 +59,23 @@ public Task InitSynchronization() return Task.CompletedTask; } - public Task InitBlockProducer(IBlockProductionTrigger? blockProductionTrigger = null, ITxSource? additionalTxSource = null) + public IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null) { if (_nethermindApi is not null) { - StartBlockProducerAuRa blockProducerStarter = new(_nethermindApi); - DefaultBlockProductionTrigger ??= blockProducerStarter.CreateTrigger(); - return blockProducerStarter.BuildProducer(blockProductionTrigger ?? DefaultBlockProductionTrigger, additionalTxSource); + return _blockProducerStarter!.BuildProducer(additionalTxSource); } - return Task.FromResult(null); + return null; } - public IBlockProductionTrigger? DefaultBlockProductionTrigger { get; private set; } + public IBlockProducerRunner CreateBlockProducerRunner() + { + return new StandardBlockProducerRunner( + _blockProducerStarter.CreateTrigger(), + _nethermindApi.BlockTree, + _nethermindApi.BlockProducer!); + } public INethermindApi CreateApi(IConfigProvider configProvider, IJsonSerializer jsonSerializer, ILogManager logManager, ChainSpec chainSpec) => new AuRaNethermindApi(configProvider, jsonSerializer, logManager, chainSpec); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Contracts/TransactionPermissionContract.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Contracts/TransactionPermissionContract.cs index 8efb2163ab2..28f57bded5d 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Contracts/TransactionPermissionContract.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Contracts/TransactionPermissionContract.cs @@ -109,14 +109,14 @@ public PermissionConstantContract(Contract contract, IReadOnlyTxProcessorSource { } - protected override object[] CallRaw(CallInfo callInfo, IReadOnlyTransactionProcessor readOnlyTransactionProcessor) + protected override object[] CallRaw(CallInfo callInfo, IReadOnlyTxProcessingScope scope) { if (callInfo is PermissionCallInfo transactionPermissionCallInfo) { - transactionPermissionCallInfo.ToIsContract = readOnlyTransactionProcessor.IsContractDeployed(transactionPermissionCallInfo.To); + transactionPermissionCallInfo.ToIsContract = scope.WorldState.IsContract(transactionPermissionCallInfo.To); } - return base.CallRaw(callInfo, readOnlyTransactionProcessor); + return base.CallRaw(callInfo, scope); } public class PermissionCallInfo : CallInfo diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/AuRaNethermindApi.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/AuRaNethermindApi.cs index 12151507209..c3822f5edd0 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/AuRaNethermindApi.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/AuRaNethermindApi.cs @@ -56,7 +56,7 @@ public TxPriorityContract.LocalDataSource? TxPriorityContractLocalDataSource { get { - if (_txPriorityContractLocalDataSource != null) return _txPriorityContractLocalDataSource; + if (_txPriorityContractLocalDataSource is not null) return _txPriorityContractLocalDataSource; IAuraConfig config = this.Config(); string? auraConfigTxPriorityConfigFilePath = config.TxPriorityConfigFilePath; diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs index a6a8d0ff24f..4abf23d082e 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs @@ -20,6 +20,7 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Transactions; using Nethermind.Core; +using Nethermind.Core.Crypto; using Nethermind.Crypto; using Nethermind.Evm.TransactionProcessing; using Nethermind.Init.Steps; @@ -72,7 +73,7 @@ public IBlockProductionTrigger CreateTrigger() return onlyWhenNotProcessing; } - public Task BuildProducer(IBlockProductionTrigger blockProductionTrigger, ITxSource? additionalTxSource = null) + public IBlockProducer BuildProducer(ITxSource? additionalTxSource = null) { if (_api.EngineSigner is null) throw new StepDependencyException(nameof(_api.EngineSigner)); if (_api.ChainSpec is null) throw new StepDependencyException(nameof(_api.ChainSpec)); @@ -87,7 +88,6 @@ public Task BuildProducer(IBlockProductionTrigger blockProductio IBlockProducer blockProducer = new AuRaBlockProducer( producerEnv.TxSource, producerEnv.ChainProcessor, - blockProductionTrigger, producerEnv.ReadOnlyStateProvider, _api.Sealer, _api.BlockTree, @@ -100,10 +100,10 @@ public Task BuildProducer(IBlockProductionTrigger blockProductio _api.LogManager, _api.ConfigProvider.GetConfig()); - return Task.FromResult(blockProducer); + return blockProducer; } - private BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv changeableTxProcessingEnv) + private BlockProcessor CreateBlockProcessor(IReadOnlyTxProcessingScope changeableTxProcessingEnv) { if (_api.RewardCalculatorSource is null) throw new StepDependencyException(nameof(_api.RewardCalculatorSource)); if (_api.ValidatorStore is null) throw new StepDependencyException(nameof(_api.ValidatorStore)); @@ -120,9 +120,9 @@ private BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv changeableTx new LocalTxFilter(_api.EngineSigner)); _validator = new AuRaValidatorFactory(_api.AbiEncoder, - changeableTxProcessingEnv.StateProvider, + changeableTxProcessingEnv.WorldState, changeableTxProcessingEnv.TransactionProcessor, - changeableTxProcessingEnv.BlockTree, + _api.BlockTree, _api.CreateReadOnlyTransactionProcessorSource(), _api.ReceiptStorage, _api.ValidatorStore, @@ -152,10 +152,10 @@ private BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv changeableTx _api.BlockValidator, _api.RewardCalculatorSource.Get(changeableTxProcessingEnv.TransactionProcessor), _api.BlockProducerEnvFactory.TransactionsExecutorFactory.Create(changeableTxProcessingEnv), - changeableTxProcessingEnv.StateProvider, + changeableTxProcessingEnv.WorldState, _api.ReceiptStorage, _api.LogManager, - changeableTxProcessingEnv.BlockTree, + _api.BlockTree, NullWithdrawalProcessor.Instance, _api.TransactionProcessor, _validator, @@ -164,7 +164,7 @@ private BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv changeableTx contractRewriter); } - internal TxPoolTxSource CreateTxPoolTxSource(ReadOnlyTxProcessingEnv processingEnv) + internal TxPoolTxSource CreateTxPoolTxSource() { _txPriorityContract = TxAuRaFilterBuilders.CreateTxPrioritySources(_api); _localDataSource = _api.TxPriorityContractLocalDataSource; @@ -205,7 +205,7 @@ internal TxPoolTxSource CreateTxPoolTxSource(ReadOnlyTxProcessingEnv processingE return new TxPriorityTxSource( _api.TxPool, - processingEnv.StateReader, + _api.StateReader, _api.LogManager, txFilterPipeline, whitelistContractDataStore, @@ -227,27 +227,28 @@ BlockProducerEnv Create() ReadOnlyBlockTree readOnlyBlockTree = _api.BlockTree.AsReadOnly(); ReadOnlyTxProcessingEnv txProcessingEnv = _api.CreateReadOnlyTransactionProcessorSource(); - BlockProcessor blockProcessor = CreateBlockProcessor(txProcessingEnv); + IReadOnlyTxProcessingScope scope = txProcessingEnv.Build(Keccak.EmptyTreeHash); + BlockProcessor blockProcessor = CreateBlockProcessor(scope); IBlockchainProcessor blockchainProcessor = new BlockchainProcessor( readOnlyBlockTree, blockProcessor, _api.BlockPreprocessor, - txProcessingEnv.StateReader, + _api.StateReader, _api.LogManager, BlockchainProcessor.Options.NoReceipts); OneTimeChainProcessor chainProcessor = new( - txProcessingEnv.StateProvider, + scope.WorldState, blockchainProcessor); return new BlockProducerEnv() { BlockTree = readOnlyBlockTree, ChainProcessor = chainProcessor, - ReadOnlyStateProvider = txProcessingEnv.StateProvider, - TxSource = CreateTxSourceForProducer(txProcessingEnv, additionalTxSource), + ReadOnlyStateProvider = scope.WorldState, + TxSource = CreateTxSourceForProducer(additionalTxSource), ReadOnlyTxProcessingEnv = _api.CreateReadOnlyTransactionProcessorSource(), }; } @@ -255,8 +256,8 @@ BlockProducerEnv Create() return _blockProducerContext ??= Create(); } - private ITxSource CreateStandardTxSourceForProducer(ReadOnlyTxProcessingEnv processingEnv) => - CreateTxPoolTxSource(processingEnv); + private ITxSource CreateStandardTxSourceForProducer() => + CreateTxPoolTxSource(); private TxPoolTxSource CreateStandardTxPoolTxSource() { @@ -270,7 +271,7 @@ private TxPoolTxSource CreateStandardTxPoolTxSource() private ITxFilter CreateAuraTxFilterForProducer() => TxAuRaFilterBuilders.CreateAuRaTxFilterForProducer(_api, _minGasPricesContractDataStore); - private ITxSource CreateTxSourceForProducer(ReadOnlyTxProcessingEnv processingEnv, ITxSource? additionalTxSource) + private ITxSource CreateTxSourceForProducer(ITxSource? additionalTxSource) { bool CheckAddPosdaoTransactions(IList list, long auRaPosdaoTransition) { @@ -322,7 +323,7 @@ IList GetRandomContracts( if (_api.BlockTree is null) throw new StepDependencyException(nameof(_api.BlockTree)); if (_api.EngineSigner is null) throw new StepDependencyException(nameof(_api.EngineSigner)); - IList txSources = new List { CreateStandardTxSourceForProducer(processingEnv) }; + IList txSources = new List { CreateStandardTxSourceForProducer() }; bool needSigner = false; if (additionalTxSource is not null) @@ -337,7 +338,7 @@ IList GetRandomContracts( if (needSigner) { TxSealer transactionSealer = new TxSealer(_api.EngineSigner, _api.Timestamper); - txSource = new GeneratedTxSource(txSource, transactionSealer, processingEnv.StateReader, _api.LogManager); + txSource = new GeneratedTxSource(txSource, transactionSealer, _api.StateReader, _api.LogManager); } ITxFilter? txPermissionFilter = TxAuRaFilterBuilders.CreateTxPermissionFilter(_api); diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index 53d798834a8..8d9fb4007a1 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -27,54 +27,38 @@ namespace Nethermind.Consensus.Clique; -public class CliqueBlockProducer : ICliqueBlockProducer, IDisposable +public class CliqueBlockProducerRunner : ICliqueBlockProducerRunner, IDisposable { private readonly IBlockTree _blockTree; - private readonly IWorldState _stateProvider; private readonly ITimestamper _timestamper; private readonly ILogger _logger; private readonly ICryptoRandom _cryptoRandom; private readonly WiggleRandomizer _wiggle; - private readonly ITxSource _txSource; - private readonly IBlockchainProcessor _processor; - private readonly ISealer _sealer; - private readonly IGasLimitCalculator _gasLimitCalculator; - private readonly ISpecProvider _specProvider; private readonly ISnapshotManager _snapshotManager; private readonly ICliqueConfig _config; - private readonly ConcurrentDictionary _proposals = new(); - private readonly CancellationTokenSource _cancellationTokenSource = new(); private readonly System.Timers.Timer _timer = new(); private DateTime _lastProducedBlock; - public CliqueBlockProducer( - ITxSource txSource, - IBlockchainProcessor blockchainProcessor, - IWorldState stateProvider, + private CliqueBlockProducer _blockProducer; + + public CliqueBlockProducerRunner( IBlockTree blockTree, ITimestamper timestamper, ICryptoRandom cryptoRandom, ISnapshotManager snapshotManager, - ISealer cliqueSealer, - IGasLimitCalculator gasLimitCalculator, - ISpecProvider? specProvider, + CliqueBlockProducer blockProducer, ICliqueConfig config, ILogManager logManager) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - _txSource = txSource ?? throw new ArgumentNullException(nameof(txSource)); - _processor = blockchainProcessor ?? throw new ArgumentNullException(nameof(blockchainProcessor)); _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); - _stateProvider = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider)); _timestamper = timestamper ?? throw new ArgumentNullException(nameof(timestamper)); _cryptoRandom = cryptoRandom ?? throw new ArgumentNullException(nameof(cryptoRandom)); - _sealer = cliqueSealer ?? throw new ArgumentNullException(nameof(cliqueSealer)); - _gasLimitCalculator = gasLimitCalculator ?? throw new ArgumentNullException(nameof(gasLimitCalculator)); - _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _snapshotManager = snapshotManager ?? throw new ArgumentNullException(nameof(snapshotManager)); + _blockProducer = blockProducer; _config = config ?? throw new ArgumentNullException(nameof(config)); _wiggle = new WiggleRandomizer(_cryptoRandom, _snapshotManager); @@ -91,7 +75,7 @@ public CliqueBlockProducer( public void CastVote(Address signer, bool vote) { - bool success = _proposals.TryAdd(signer, vote); + bool success = _blockProducer.Proposals.TryAdd(signer, vote); if (!success) { throw new InvalidOperationException($"A vote for {signer} has already been cast."); @@ -102,7 +86,7 @@ public void CastVote(Address signer, bool vote) public void UncastVote(Address signer) { - bool success = _proposals.TryRemove(signer, out _); + bool success = _blockProducer.Proposals.TryRemove(signer, out _); if (!success) { throw new InvalidOperationException("Cannot uncast vote"); @@ -189,11 +173,10 @@ private void TimerOnElapsed(object sender, ElapsedEventArgs e) private Task? _producerTask; - public Task Start() + public void Start() { _blockTree.NewHeadBlock += BlockTreeOnNewHeadBlock; _producerTask = RunConsumeSignal(); - return Task.CompletedTask; } private Task RunConsumeSignal() @@ -204,7 +187,7 @@ private Task RunConsumeSignal() { try { - ConsumeSignal(); + ConsumeSignal().Wait(); if (_logger.IsDebug) _logger.Debug("Clique block producer complete."); } catch (OperationCanceledException) @@ -236,11 +219,12 @@ private void BlockTreeOnNewHeadBlock(object? sender, BlockEventArgs e) _signalsQueue.Add(e.Block); } - private void ConsumeSignal() + private async Task ConsumeSignal() { _lastProducedBlock = DateTime.UtcNow; foreach (Block signal in _signalsQueue.GetConsumingEnumerable(_cancellationTokenSource.Token)) { + // TODO: Maybe use IBlockProducer specific to clique? Block parentBlock = signal; while (_signalsQueue.TryTake(out Block? nextSignal)) { @@ -252,59 +236,12 @@ private void ConsumeSignal() try { - Block? block = PrepareBlock(parentBlock); - if (block is null) + Block? block = await _blockProducer.BuildBlock(parentBlock?.Header, token: CancellationToken.None); + if (block is not null) { - if (_logger.IsTrace) _logger.Trace("Skipping block production or block production failed"); - Metrics.FailedBlockSeals++; - continue; + _scheduledBlock = block; + _lastProducedBlock = DateTime.UtcNow; } - - if (_logger.IsInfo) _logger.Info($"Processing prepared block {block.Number}"); - Block? processedBlock = _processor.Process( - block, - ProcessingOptions.ProducingBlock, - NullBlockTracer.Instance); - if (processedBlock is null) - { - if (_logger.IsInfo) _logger.Info($"Prepared block has lost the race"); - Metrics.FailedBlockSeals++; - continue; - } - - if (_logger.IsDebug) _logger.Debug($"Sealing prepared block {processedBlock.Number}"); - - _sealer.SealBlock(processedBlock, _cancellationTokenSource.Token).ContinueWith(t => - { - if (t.IsCompletedSuccessfully) - { - if (t.Result is not null) - { - if (_logger.IsInfo) - _logger.Info($"Sealed block {t.Result.ToString(Block.Format.HashNumberDiffAndTx)}"); - _scheduledBlock = t.Result; - _lastProducedBlock = DateTime.UtcNow; - Metrics.BlocksSealed++; - } - else - { - if (_logger.IsInfo) - _logger.Info( - $"Failed to seal block {processedBlock.ToString(Block.Format.HashNumberDiffAndTx)} (null seal)"); - Metrics.FailedBlockSeals++; - } - } - else if (t.IsFaulted) - { - if (_logger.IsError) _logger.Error("Mining failed", t.Exception); - Metrics.FailedBlockSeals++; - } - else if (t.IsCanceled) - { - if (_logger.IsInfo) _logger.Info($"Sealing block {processedBlock.Number} cancelled"); - Metrics.FailedBlockSeals++; - } - }, _cancellationTokenSource.Token); } catch (Exception e) { @@ -324,7 +261,7 @@ public async Task StopAsync() await (_producerTask ?? Task.CompletedTask); } - bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) + bool IBlockProducerRunner.IsProducingBlocks(ulong? maxProducingInterval) { if (_producerTask is null || _producerTask.IsCompleted) return false; @@ -336,11 +273,122 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) public event EventHandler? BlockProduced; + + public void Dispose() + { + _cancellationTokenSource?.Dispose(); + _timer?.Dispose(); + } +} + +public class CliqueBlockProducer : IBlockProducer +{ + private readonly IWorldState _stateProvider; + private readonly ITxSource _txSource; + private readonly IBlockchainProcessor _processor; + private readonly ISealer _sealer; + private readonly IGasLimitCalculator _gasLimitCalculator; + private readonly ISpecProvider _specProvider; + private readonly ISnapshotManager _snapshotManager; + private readonly ILogger _logger; + private readonly ITimestamper _timestamper; + private readonly ICryptoRandom _cryptoRandom; + private readonly ICliqueConfig _config; + private readonly ConcurrentDictionary _proposals = new(); + + public CliqueBlockProducer( + ITxSource txSource, + IBlockchainProcessor blockchainProcessor, + IWorldState stateProvider, + ITimestamper timestamper, + ICryptoRandom cryptoRandom, + ISnapshotManager snapshotManager, + ISealer cliqueSealer, + IGasLimitCalculator gasLimitCalculator, + ISpecProvider? specProvider, + ICliqueConfig config, + ILogManager logManager + ) + { + _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); + _txSource = txSource ?? throw new ArgumentNullException(nameof(txSource)); + _processor = blockchainProcessor ?? throw new ArgumentNullException(nameof(blockchainProcessor)); + _stateProvider = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider)); + _timestamper = timestamper ?? throw new ArgumentNullException(nameof(timestamper)); + _cryptoRandom = cryptoRandom ?? throw new ArgumentNullException(nameof(cryptoRandom)); + _sealer = cliqueSealer ?? throw new ArgumentNullException(nameof(cliqueSealer)); + _gasLimitCalculator = gasLimitCalculator ?? throw new ArgumentNullException(nameof(gasLimitCalculator)); + _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); + _snapshotManager = snapshotManager ?? throw new ArgumentNullException(nameof(snapshotManager)); + _config = config ?? throw new ArgumentNullException(nameof(config)); + _logger = logManager.GetClassLogger(); + } + + public ConcurrentDictionary Proposals => _proposals; + + public async Task BuildBlock(BlockHeader? parentHeader, IBlockTracer? blockTracer = null, + PayloadAttributes? payloadAttributes = null, CancellationToken? token = null) + { + token ??= default; + Block? block = PrepareBlock(parentHeader); + if (block is null) + { + if (_logger.IsTrace) _logger.Trace("Skipping block production or block production failed"); + Metrics.FailedBlockSeals++; + return null; + } + + if (_logger.IsInfo) _logger.Info($"Processing prepared block {block.Number}"); + Block? processedBlock = _processor.Process( + block, + ProcessingOptions.ProducingBlock, + NullBlockTracer.Instance); + if (processedBlock is null) + { + if (_logger.IsInfo) _logger.Info($"Prepared block has lost the race"); + Metrics.FailedBlockSeals++; + return null; + } + + if (_logger.IsDebug) _logger.Debug($"Sealing prepared block {processedBlock.Number}"); + + try + { + Block? sealedBlock = await _sealer.SealBlock(processedBlock, token.Value); + if (sealedBlock is not null) + { + if (_logger.IsInfo) + _logger.Info($"Sealed block {sealedBlock.ToString(Block.Format.HashNumberDiffAndTx)}"); + Metrics.BlocksSealed++; + } + else + { + if (_logger.IsInfo) + _logger.Info( + $"Failed to seal block {processedBlock.ToString(Block.Format.HashNumberDiffAndTx)} (null seal)"); + Metrics.FailedBlockSeals++; + } + + return sealedBlock; + } + catch (OperationCanceledException) + { + if (_logger.IsInfo) _logger.Info($"Sealing block {processedBlock.Number} cancelled"); + Metrics.FailedBlockSeals++; + } + catch (Exception e) + { + if (_logger.IsError) _logger.Error("Mining failed", e); + Metrics.FailedBlockSeals++; + } + + return null; + } + private Hash256? _recentNotAllowedParent; - private Block? PrepareBlock(Block parentBlock) + private Block? PrepareBlock(BlockHeader parentHeader) { - BlockHeader parentHeader = parentBlock.Header; if (parentHeader.Hash is null) { if (_logger.IsError) _logger.Error( @@ -348,20 +396,20 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) return null; } - if (_recentNotAllowedParent == parentBlock.Hash) + if (_recentNotAllowedParent == parentHeader.Hash) { return null; } if (!_sealer.CanSeal(parentHeader.Number + 1, parentHeader.Hash)) { - if (_logger.IsTrace) _logger.Trace($"Not allowed to sign block ({parentBlock.Number + 1})"); + if (_logger.IsTrace) _logger.Trace($"Not allowed to sign block ({parentHeader.Number + 1})"); _recentNotAllowedParent = parentHeader.Hash; return null; } if (_logger.IsInfo) - _logger.Info($"Preparing new block on top of {parentBlock.ToString(Block.Format.Short)}"); + _logger.Info($"Preparing new block on top of {parentHeader}"); ulong timestamp = _timestamper.UnixTime.Seconds; @@ -370,9 +418,9 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) Keccak.OfAnEmptySequenceRlp, Address.Zero, 1, - parentBlock.Number + 1, - _gasLimitCalculator.GetGasLimit(parentBlock.Header), - timestamp > parentBlock.Timestamp ? timestamp : parentBlock.Timestamp + 1, + parentHeader.Number + 1, + _gasLimitCalculator.GetGasLimit(parentHeader), + timestamp > parentHeader.Timestamp ? timestamp : parentHeader.Timestamp + 1, Array.Empty()); // If the block isn't a checkpoint, cast a random vote (good enough for now) @@ -404,16 +452,16 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) } // Ensure the timestamp has the correct delay - header.Timestamp = Math.Max(parentBlock.Timestamp + _config.BlockPeriod, _timestamper.UnixTime.Seconds); + header.Timestamp = Math.Max(parentHeader.Timestamp + _config.BlockPeriod, _timestamper.UnixTime.Seconds); var spec = _specProvider.GetSpec(header); header.BaseFeePerGas = BaseFeeCalculator.Calculate(parentHeader, spec); // Set the correct difficulty header.Difficulty = CalculateDifficulty(snapshot, _sealer.Address); - header.TotalDifficulty = parentBlock.TotalDifficulty + header.Difficulty; + header.TotalDifficulty = parentHeader.TotalDifficulty + header.Difficulty; if (_logger.IsDebug) - _logger.Debug($"Setting total difficulty to {parentBlock.TotalDifficulty} + {header.Difficulty}."); + _logger.Debug($"Setting total difficulty to {parentHeader.TotalDifficulty} + {header.Difficulty}."); // Set extra data int mainBytesLength = Clique.ExtraVanityLength + Clique.ExtraSealLength; @@ -441,14 +489,14 @@ bool IBlockProducer.IsProducingBlocks(ulong? maxProducingInterval) _stateProvider.StateRoot = parentHeader.StateRoot!; - IEnumerable selectedTxs = _txSource.GetTransactions(parentBlock.Header, header.GasLimit); + IEnumerable selectedTxs = _txSource.GetTransactions(parentHeader, header.GasLimit); Block block = new BlockToProduce( header, selectedTxs, Array.Empty(), spec.WithdrawalsEnabled ? Enumerable.Empty() : null, spec.ConsensusRequestsEnabled ? Enumerable.Empty() : null - ); + ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; return block; @@ -465,10 +513,4 @@ private UInt256 CalculateDifficulty(Snapshot snapshot, Address signer) if (_logger.IsInfo) _logger.Info("Producing out of turn block"); return Clique.DifficultyNoTurn; } - - public void Dispose() - { - _cancellationTokenSource?.Dispose(); - _timer?.Dispose(); - } } diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index d5bc352e850..6ff7e436189 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -16,6 +16,9 @@ using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Withdrawals; using Nethermind.Core.Attributes; +using Nethermind.Core.Crypto; +using Nethermind.Db; +using Nethermind.Evm.TransactionProcessing; using Nethermind.JsonRpc.Modules; using Nethermind.State; @@ -67,11 +70,11 @@ public Task Init(INethermindApi nethermindApi) return Task.CompletedTask; } - public Task InitBlockProducer(IBlockProductionTrigger? blockProductionTrigger = null, ITxSource? additionalTxSource = null) + public IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null) { if (_nethermindApi!.SealEngineType != Nethermind.Core.SealEngineType.Clique) { - return Task.FromResult((IBlockProducer)null); + return null; } (IApiWithBlockchain getFromApi, IApiWithBlockchain setInApi) = _nethermindApi!.ForProducer; @@ -99,18 +102,19 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd getFromApi.SpecProvider, getFromApi.LogManager); + IReadOnlyTxProcessingScope scope = producerEnv.Build(Keccak.EmptyTreeHash); + BlockProcessor producerProcessor = new( getFromApi!.SpecProvider, getFromApi!.BlockValidator, NoBlockRewards.Instance, - getFromApi.BlockProducerEnvFactory.TransactionsExecutorFactory.Create(producerEnv), - producerEnv.StateProvider, + getFromApi.BlockProducerEnvFactory.TransactionsExecutorFactory.Create(scope), + scope.WorldState, NullReceiptStorage.Instance, - NullWitnessCollector.Instance, - new BlockhashStore(getFromApi.BlockTree, getFromApi.SpecProvider, producerEnv.StateProvider), + new BlockhashStore(getFromApi.BlockTree, getFromApi.SpecProvider, scope.WorldState), getFromApi.TransactionProcessor, getFromApi.LogManager, - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(producerEnv.StateProvider, getFromApi.LogManager))); + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(scope.WorldState, getFromApi.LogManager))); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( readOnlyBlockTree, @@ -121,7 +125,7 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd BlockchainProcessor.Options.NoReceipts); OneTimeChainProcessor chainProcessor = new( - producerEnv.StateProvider, + scope.WorldState, producerChainProcessor); ITxFilterPipeline txFilterPipeline = @@ -142,8 +146,7 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd CliqueBlockProducer blockProducer = new( additionalTxSource.Then(txPoolTxSource), chainProcessor, - producerEnv.StateProvider, - getFromApi.BlockTree!, + scope.WorldState, getFromApi.Timestamper, getFromApi.CryptoRandom, _snapshotManager!, @@ -153,14 +156,21 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd _cliqueConfig!, getFromApi.LogManager); - getFromApi.DisposeStack.Push(blockProducer); - - return Task.FromResult((IBlockProducer)blockProducer); + return blockProducer; } - public Task InitNetworkProtocol() + public IBlockProducerRunner CreateBlockProducerRunner() { - return Task.CompletedTask; + _blockProducerRunner = new CliqueBlockProducerRunner( + _nethermindApi.BlockTree, + _nethermindApi.Timestamper, + _nethermindApi.CryptoRandom, + _snapshotManager, + (CliqueBlockProducer)_nethermindApi.BlockProducer!, + _cliqueConfig, + _nethermindApi.LogManager); + _nethermindApi.DisposeStack.Push(_blockProducerRunner); + return _blockProducerRunner; } public Task InitRpcModules() @@ -172,7 +182,7 @@ public Task InitRpcModules() (IApiWithNetwork getFromApi, _) = _nethermindApi!.ForRpc; CliqueRpcModule cliqueRpcModule = new( - getFromApi!.BlockProducer as ICliqueBlockProducer, + _blockProducerRunner, _snapshotManager!, getFromApi.BlockTree!); @@ -184,9 +194,6 @@ public Task InitRpcModules() public string SealEngineType => Nethermind.Core.SealEngineType.Clique; - [Todo("Redo clique producer to support triggers and MEV")] - public IBlockProductionTrigger DefaultBlockProductionTrigger => _nethermindApi!.ManualBlockProductionTrigger; - public ValueTask DisposeAsync() { return ValueTask.CompletedTask; } private INethermindApi? _nethermindApi; @@ -196,5 +203,6 @@ public Task InitRpcModules() private ICliqueConfig? _cliqueConfig; private IBlocksConfig? _blocksConfig; + private CliqueBlockProducerRunner _blockProducerRunner = null!; } } diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueRpcModule.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueRpcModule.cs index 82581295402..07142a25b7a 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueRpcModule.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueRpcModule.cs @@ -15,11 +15,11 @@ public class CliqueRpcModule : ICliqueRpcModule { private const string CannotVoteOnNonValidatorMessage = "Not a signer node - cannot vote"; - private readonly ICliqueBlockProducer? _cliqueBlockProducer; + private readonly ICliqueBlockProducerRunner? _cliqueBlockProducer; private readonly ISnapshotManager _snapshotManager; private readonly IBlockFinder _blockTree; - public CliqueRpcModule(ICliqueBlockProducer? cliqueBlockProducer, ISnapshotManager snapshotManager, IBlockFinder blockTree) + public CliqueRpcModule(ICliqueBlockProducerRunner? cliqueBlockProducer, ISnapshotManager snapshotManager, IBlockFinder blockTree) { _cliqueBlockProducer = cliqueBlockProducer; _snapshotManager = snapshotManager ?? throw new ArgumentNullException(nameof(snapshotManager)); diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueSealer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueSealer.cs index 584a1194956..2e47118d42e 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueSealer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueSealer.cs @@ -7,8 +7,11 @@ using System.Threading.Tasks; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; using Nethermind.Crypto; +using Nethermind.JsonRpc; using Nethermind.Logging; +using Nethermind.Serialization.Rlp; [assembly: InternalsVisibleTo("Nethermind.Clique.Test")] @@ -27,7 +30,6 @@ public CliqueSealer(ISigner signer, ICliqueConfig config, ISnapshotManager snaps _snapshotManager = snapshotManager ?? throw new ArgumentNullException(nameof(snapshotManager)); _config = config ?? throw new ArgumentNullException(nameof(config)); _signer = signer ?? throw new ArgumentNullException(nameof(signer)); - if (config.Epoch == 0) config.Epoch = Clique.DefaultEpochLength; } @@ -64,7 +66,19 @@ public CliqueSealer(ISigner signer, ICliqueConfig config, ISnapshotManager snaps // Sign all the things! Hash256 headerHash = SnapshotManager.CalculateCliqueHeaderHash(header); - Signature signature = _signer.Sign(headerHash); + Signature signature; + if (_signer is IHeaderSigner headerSigner) + { + BlockHeader clone = header.Clone(); + clone.ExtraData = SnapshotManager.SliceExtraSealFromExtraData(clone.ExtraData); + clone.Hash = headerHash; + signature = headerSigner.Sign(clone); + } + else + { + signature = _signer.Sign(headerHash); + } + // Copy signature bytes (R and S) byte[] signatureBytes = signature.Bytes; Array.Copy(signatureBytes, 0, header.ExtraData, header.ExtraData.Length - Clique.ExtraSealLength, signatureBytes.Length); diff --git a/src/Nethermind/Nethermind.Consensus.Clique/ICliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/ICliqueBlockProducer.cs index e5e6b742c41..e2fbc43492e 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/ICliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/ICliqueBlockProducer.cs @@ -6,7 +6,7 @@ namespace Nethermind.Consensus.Clique { - public interface ICliqueBlockProducer : IBlockProducer + public interface ICliqueBlockProducerRunner : IBlockProducerRunner { void CastVote(Address signer, bool vote); void UncastVote(Address signer); diff --git a/src/Nethermind/Nethermind.Consensus.Clique/SnapshotManager.cs b/src/Nethermind/Nethermind.Consensus.Clique/SnapshotManager.cs index 99e68471b15..29b8e19a91f 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/SnapshotManager.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/SnapshotManager.cs @@ -75,16 +75,21 @@ private int CalculateSignersCount(BlockHeader blockHeader) public static Hash256 CalculateCliqueHeaderHash(BlockHeader blockHeader) { - int extraSeal = 65; - int shortExtraLength = blockHeader.ExtraData.Length - extraSeal; byte[] fullExtraData = blockHeader.ExtraData; - byte[] shortExtraData = blockHeader.ExtraData.Slice(0, shortExtraLength); + byte[] shortExtraData = SliceExtraSealFromExtraData(blockHeader.ExtraData); blockHeader.ExtraData = shortExtraData; Hash256 sigHash = blockHeader.CalculateHash(); blockHeader.ExtraData = fullExtraData; return sigHash; } + public static byte[] SliceExtraSealFromExtraData(byte[] extraData) + { + if (extraData.Length < Clique.ExtraSealLength) + new ArgumentException($"Cannot be less than extra seal length ({Clique.ExtraSealLength}).", nameof(extraData)); + return extraData.Slice(0, extraData.Length - Clique.ExtraSealLength); + } + private readonly object _snapshotCreationLock = new(); public ulong GetLastSignersCount() => _lastSignersCount; diff --git a/src/Nethermind/Nethermind.Consensus.Ethash/EthashPlugin.cs b/src/Nethermind/Nethermind.Consensus.Ethash/EthashPlugin.cs index 89207009a90..dae39105746 100644 --- a/src/Nethermind/Nethermind.Consensus.Ethash/EthashPlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Ethash/EthashPlugin.cs @@ -46,23 +46,19 @@ public Task Init(INethermindApi nethermindApi) return Task.CompletedTask; } - public Task InitBlockProducer(IBlockProductionTrigger? blockProductionTrigger = null, ITxSource? additionalTxSource = null) + public IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null) { - return Task.FromResult((IBlockProducer)null); + return null; } - public Task InitNetworkProtocol() - { - return Task.CompletedTask; - } + public string SealEngineType => Core.SealEngineType.Ethash; - public Task InitRpcModules() + public IBlockProducerRunner CreateBlockProducerRunner() { - return Task.CompletedTask; + return new StandardBlockProducerRunner( + _nethermindApi.ManualBlockProductionTrigger, + _nethermindApi.BlockTree, + _nethermindApi.BlockProducer!); } - - public string SealEngineType => Nethermind.Core.SealEngineType.Ethash; - - public IBlockProductionTrigger DefaultBlockProductionTrigger => _nethermindApi.ManualBlockProductionTrigger; } } diff --git a/src/Nethermind/Nethermind.Consensus.Ethash/MinedBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Ethash/MinedBlockProducer.cs index 80b111c77ad..2aaa8e1a62e 100644 --- a/src/Nethermind/Nethermind.Consensus.Ethash/MinedBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Ethash/MinedBlockProducer.cs @@ -19,7 +19,6 @@ public MinedBlockProducer(ITxSource txSource, IBlockchainProcessor processor, ISealer sealer, IBlockTree blockTree, - IBlockProductionTrigger blockProductionTrigger, IWorldState stateProvider, IGasLimitCalculator gasLimitCalculator, ITimestamper timestamper, @@ -31,7 +30,6 @@ public MinedBlockProducer(ITxSource txSource, processor, sealer, blockTree, - blockProductionTrigger, stateProvider, gasLimitCalculator, timestamper, diff --git a/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs b/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs index 931fc547172..e1ddd19a420 100644 --- a/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs @@ -13,7 +13,9 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; +using Nethermind.Core.Crypto; using Nethermind.Db; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; @@ -37,11 +39,11 @@ public Task Init(INethermindApi nethermindApi) return Task.CompletedTask; } - public Task InitBlockProducer(IBlockProductionTrigger? blockProductionTrigger = null, ITxSource? additionalTxSource = null) + public IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null) { if (_nethermindApi!.SealEngineType != Nethermind.Core.SealEngineType.NethDev) { - return Task.FromResult((IBlockProducer)null); + return null; } var (getFromApi, _) = _nethermindApi!.ForProducer; @@ -70,15 +72,16 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd getFromApi.SpecProvider, getFromApi.LogManager); + IReadOnlyTxProcessingScope scope = producerEnv.Build(Keccak.EmptyTreeHash); + BlockProcessor producerProcessor = new( getFromApi!.SpecProvider, getFromApi!.BlockValidator, NoBlockRewards.Instance, - new BlockProcessor.BlockProductionTransactionsExecutor(producerEnv, getFromApi!.SpecProvider, getFromApi.LogManager), - producerEnv.StateProvider, + new BlockProcessor.BlockProductionTransactionsExecutor(scope, getFromApi!.SpecProvider, getFromApi.LogManager), + scope.WorldState, NullReceiptStorage.Instance, - NullWitnessCollector.Instance, - new BlockhashStore(getFromApi.BlockTree, getFromApi.SpecProvider, producerEnv.StateProvider), + new BlockhashStore(getFromApi.BlockTree, getFromApi.SpecProvider, scope.WorldState), getFromApi.TransactionProcessor, getFromApi.LogManager); @@ -90,35 +93,29 @@ public Task InitBlockProducer(IBlockProductionTrigger? blockProd getFromApi.LogManager, BlockchainProcessor.Options.NoReceipts); - DefaultBlockProductionTrigger = new BuildBlocksRegularly(TimeSpan.FromMilliseconds(200)) - .IfPoolIsNotEmpty(getFromApi.TxPool) - .Or(getFromApi.ManualBlockProductionTrigger); - IBlockProducer blockProducer = new DevBlockProducer( additionalTxSource.Then(txPoolTxSource).ServeTxsOneByOne(), producerChainProcessor, - producerEnv.StateProvider, + scope.WorldState, getFromApi.BlockTree, - blockProductionTrigger ?? DefaultBlockProductionTrigger, getFromApi.Timestamper, getFromApi.SpecProvider, getFromApi.Config(), getFromApi.LogManager); - return Task.FromResult(blockProducer); + return blockProducer; } public string SealEngineType => Nethermind.Core.SealEngineType.NethDev; - public IBlockProductionTrigger DefaultBlockProductionTrigger { get; private set; } - - public Task InitNetworkProtocol() - { - return Task.CompletedTask; - } - - public Task InitRpcModules() + public IBlockProducerRunner CreateBlockProducerRunner() { - return Task.CompletedTask; + IBlockProductionTrigger trigger = new BuildBlocksRegularly(TimeSpan.FromMilliseconds(200)) + .IfPoolIsNotEmpty(_nethermindApi.TxPool) + .Or(_nethermindApi.ManualBlockProductionTrigger); + return new StandardBlockProducerRunner( + trigger, + _nethermindApi.BlockTree, + _nethermindApi.BlockProducer!); } } } diff --git a/src/Nethermind/Nethermind.Consensus.Test/ReadOnlyTxProcessingScopeTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ReadOnlyTxProcessingScopeTests.cs new file mode 100644 index 00000000000..399523f0e56 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus.Test/ReadOnlyTxProcessingScopeTests.cs @@ -0,0 +1,28 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Consensus.Processing; +using Nethermind.Core.Test.Builders; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.State; +using NSubstitute; +using NUnit.Framework; + +namespace Nethermind.Consensus.Test; + +public class ReadOnlyTxProcessingScopeTests +{ + [Test] + public void Test_WhenDispose_ThenStateRootWillRevert() + { + ReadOnlyTxProcessingScope env = new ReadOnlyTxProcessingScope( + Substitute.For(), + Substitute.For(), + TestItem.KeccakB + ); + + env.Dispose(); + + env.WorldState.Received().StateRoot = TestItem.KeccakB; + } +} diff --git a/src/Nethermind/Nethermind.Consensus/IBlockProducer.cs b/src/Nethermind/Nethermind.Consensus/IBlockProducer.cs index 2ad56e537c8..ff868005e66 100644 --- a/src/Nethermind/Nethermind.Consensus/IBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus/IBlockProducer.cs @@ -1,16 +1,19 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; +using System.Threading; using System.Threading.Tasks; +using Nethermind.Consensus.Producers; using Nethermind.Core; +using Nethermind.Evm.Tracing; namespace Nethermind.Consensus; public interface IBlockProducer { - Task Start(); - Task StopAsync(); - bool IsProducingBlocks(ulong? maxProducingInterval); - event EventHandler BlockProduced; + Task BuildBlock( + BlockHeader? parentHeader = null, + IBlockTracer? blockTracer = null, + PayloadAttributes? payloadAttributes = null, + CancellationToken? cancellationToken = null); } diff --git a/src/Nethermind/Nethermind.Consensus/IBlockProducerFactory.cs b/src/Nethermind/Nethermind.Consensus/IBlockProducerFactory.cs index 9897ba185d7..46735b2501a 100644 --- a/src/Nethermind/Nethermind.Consensus/IBlockProducerFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/IBlockProducerFactory.cs @@ -12,12 +12,9 @@ public interface IBlockProducerFactory /// /// Creates a block producer. /// - /// Optional parameter. If present this should be the only block production trigger for created block producer. If absent should be used. /// Optional parameter. If present this transaction source should be used before any other transaction sources, except consensus ones. Plugin still should use their own transaction sources. /// /// Can be called many times, with different parameters, each time should create a new instance. Example usage in MEV plugin. /// - Task InitBlockProducer( - IBlockProductionTrigger blockProductionTrigger, - ITxSource? additionalTxSource = null); + IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null); } diff --git a/src/Nethermind/Nethermind.Consensus/IBlockProducerRunner.cs b/src/Nethermind/Nethermind.Consensus/IBlockProducerRunner.cs new file mode 100644 index 00000000000..e2a1992bb63 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/IBlockProducerRunner.cs @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Threading.Tasks; +using Nethermind.Core; + +namespace Nethermind.Consensus; + +public interface IBlockProducerRunner +{ + void Start(); + Task StopAsync(); + bool IsProducingBlocks(ulong? maxProducingInterval); + event EventHandler BlockProduced; +} diff --git a/src/Nethermind/Nethermind.Consensus/IHeaderSigner.cs b/src/Nethermind/Nethermind.Consensus/IHeaderSigner.cs new file mode 100644 index 00000000000..a51b1ca800a --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/IHeaderSigner.cs @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Crypto; + +namespace Nethermind.Consensus; +public interface IHeaderSigner : ISigner +{ + bool CanSignHeader { get; } + Signature Sign(BlockHeader header); +} diff --git a/src/Nethermind/Nethermind.Consensus/IMiningConfig.cs b/src/Nethermind/Nethermind.Consensus/IMiningConfig.cs index 9881cf09b8f..4562ab03327 100644 --- a/src/Nethermind/Nethermind.Consensus/IMiningConfig.cs +++ b/src/Nethermind/Nethermind.Consensus/IMiningConfig.cs @@ -52,4 +52,9 @@ public interface IMiningConfig : IConfig [ConfigItem(HiddenFromDocs = true, DisabledForCli = true, DefaultValue = "null")] IBlocksConfig? BlocksConfig { get; } + [ConfigItem( + Description = "Url for an external signer like clef: https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/tutorial.md", + HiddenFromDocs = false, + DefaultValue = "null")] + string Signer { get; set; } } diff --git a/src/Nethermind/Nethermind.Consensus/ISigner.cs b/src/Nethermind/Nethermind.Consensus/ISigner.cs index 1174e68a1d0..ec34eafa187 100644 --- a/src/Nethermind/Nethermind.Consensus/ISigner.cs +++ b/src/Nethermind/Nethermind.Consensus/ISigner.cs @@ -5,6 +5,7 @@ using Nethermind.Core.Crypto; using Nethermind.Crypto; using Nethermind.TxPool; +using System; namespace Nethermind.Consensus { diff --git a/src/Nethermind/Nethermind.Consensus/MiningConfig.cs b/src/Nethermind/Nethermind.Consensus/MiningConfig.cs index b3abd0b054e..dbf2398286a 100644 --- a/src/Nethermind/Nethermind.Consensus/MiningConfig.cs +++ b/src/Nethermind/Nethermind.Consensus/MiningConfig.cs @@ -70,4 +70,6 @@ public IBlocksConfig? BlocksConfig return _blocksConfig; } } + + public string Signer { get; set; } } diff --git a/src/Nethermind/Nethermind.Consensus/NullSigner.cs b/src/Nethermind/Nethermind.Consensus/NullSigner.cs index a6028d49dec..f4976cac687 100644 --- a/src/Nethermind/Nethermind.Consensus/NullSigner.cs +++ b/src/Nethermind/Nethermind.Consensus/NullSigner.cs @@ -22,8 +22,12 @@ public class NullSigner : ISigner, ISignerStore public PrivateKey? Key { get; } = null; + public bool CanSignHeader => false; + public void SetSigner(PrivateKey key) { } public void SetSigner(ProtectedPrivateKey key) { } + + public Signature Sign(BlockHeader header) { return new(new byte[65]); } } } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockCachePreWarmer.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockCachePreWarmer.cs new file mode 100644 index 00000000000..93f3e7a556c --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockCachePreWarmer.cs @@ -0,0 +1,137 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.ObjectPool; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Core.Threading; +using Nethermind.Core.Cpu; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Logging; +using Nethermind.State; + +namespace Nethermind.Consensus.Processing; + +public class BlockCachePreWarmer(ReadOnlyTxProcessingEnvFactory envFactory, ISpecProvider specProvider, ILogManager logManager, IWorldState? targetWorldState = null) : IBlockCachePreWarmer +{ + private readonly ObjectPool _envPool = new DefaultObjectPool(new ReadOnlyTxProcessingEnvPooledObjectPolicy(envFactory), Environment.ProcessorCount); + private readonly ObjectPool _systemTransactionPool = new DefaultObjectPool(new DefaultPooledObjectPolicy(), Environment.ProcessorCount); + private readonly ILogger _logger = logManager.GetClassLogger(); + + public Task PreWarmCaches(Block suggestedBlock, Hash256? parentStateRoot, CancellationToken cancellationToken = default) + { + if (targetWorldState is not null) + { + if (targetWorldState.ClearCache()) + { + if (_logger.IsWarn) _logger.Warn("Cashes are not empty. Clearing them."); + } + + if (!IsGenesisBlock(parentStateRoot) && Environment.ProcessorCount > 2 && !cancellationToken.IsCancellationRequested) + { + // Do not pass cancellation token to the task, we don't want exceptions to be thrown in main processing thread + return Task.Run(() => PreWarmCachesParallel(suggestedBlock, parentStateRoot, cancellationToken)); + } + } + + return Task.CompletedTask; + } + + // Parent state root is null for genesis block + private bool IsGenesisBlock(Hash256? parentStateRoot) => parentStateRoot is null; + + public void ClearCaches() => targetWorldState?.ClearCache(); + + private void PreWarmCachesParallel(Block suggestedBlock, Hash256 parentStateRoot, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) return; + + try + { + ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = Math.Max(1, RuntimeInformation.PhysicalCoreCount - 2), CancellationToken = cancellationToken }; + IReleaseSpec spec = specProvider.GetSpec(suggestedBlock.Header); + + WarmupTransactions(parallelOptions, spec, suggestedBlock, parentStateRoot); + WarmupWithdrawals(parallelOptions, spec, suggestedBlock, parentStateRoot); + + if (_logger.IsDebug) _logger.Debug($"Finished pre-warming caches for block {suggestedBlock.Number}."); + } + catch (OperationCanceledException) + { + if (_logger.IsDebug) _logger.Debug($"Pre-warming caches cancelled for block {suggestedBlock.Number}."); + } + + void WarmupWithdrawals(ParallelOptions parallelOptions, IReleaseSpec spec, Block block, Hash256 stateRoot) + { + if (parallelOptions.CancellationToken.IsCancellationRequested) return; + if (spec.WithdrawalsEnabled && block.Withdrawals is not null) + { + Parallel.For(0, block.Withdrawals.Length, parallelOptions, + i => + { + IReadOnlyTxProcessorSource env = _envPool.Get(); + using IReadOnlyTxProcessingScope scope = env.Build(stateRoot); + try + { + scope.WorldState.WarmUp(block.Withdrawals[i].Address); + } + catch (Exception ex) + { + if (_logger.IsDebug) _logger.Error($"Error pre-warming withdrawal {i}", ex); + } + finally + { + _envPool.Return(env); + } + }); + } + } + + void WarmupTransactions(ParallelOptions parallelOptions, IReleaseSpec spec, Block block, Hash256 stateRoot) + { + if (parallelOptions.CancellationToken.IsCancellationRequested) return; + Parallel.For(0, block.Transactions.Length, parallelOptions, i => + { + // If the transaction has already been processed or being processed, exit early + if (block.TransactionProcessed >= i) return; + + using ThreadExtensions.Disposable handle = Thread.CurrentThread.BoostPriority(); + Transaction tx = block.Transactions[i]; + IReadOnlyTxProcessorSource env = _envPool.Get(); + SystemTransaction systemTransaction = _systemTransactionPool.Get(); + try + { + tx.CopyTo(systemTransaction); + using IReadOnlyTxProcessingScope scope = env.Build(stateRoot); + if (spec.UseTxAccessLists) + { + scope.WorldState.WarmUp(tx.AccessList); // eip-2930 + } + TransactionResult result = scope.TransactionProcessor.Trace(systemTransaction, new BlockExecutionContext(block.Header.Clone()), NullTxTracer.Instance); + if (_logger.IsTrace) _logger.Trace($"Finished pre-warming cache for tx {tx.Hash} with {result}"); + } + catch (Exception ex) + { + if (_logger.IsDebug) _logger.Error($"Error pre-warming cache {tx.Hash}", ex); + } + finally + { + _systemTransactionPool.Return(systemTransaction); + _envPool.Return(env); + } + }); + } + } + + private class ReadOnlyTxProcessingEnvPooledObjectPolicy(ReadOnlyTxProcessingEnvFactory envFactory) : IPooledObjectPolicy + { + public IReadOnlyTxProcessorSource Create() => envFactory.Create(); + public bool Return(IReadOnlyTxProcessorSource obj) => true; + } +} diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionPicker.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionPicker.cs index 10aa4a3a9e2..e5c1c8d1543 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionPicker.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionPicker.cs @@ -16,10 +16,12 @@ public partial class BlockProcessor public class BlockProductionTransactionPicker : IBlockProductionTransactionPicker { protected readonly ISpecProvider _specProvider; + private readonly bool _ignoreEip3607; - public BlockProductionTransactionPicker(ISpecProvider specProvider) + public BlockProductionTransactionPicker(ISpecProvider specProvider, bool ignoreEip3607 = false) { _specProvider = specProvider; + _ignoreEip3607 = ignoreEip3607; } public event EventHandler? AddingTransaction; @@ -63,7 +65,7 @@ public virtual AddingTxEventArgs CanAddTransaction(Block block, Transaction curr return args.Set(TxAction.Skip, $"EIP-3860 - transaction size over max init code size"); } - if (stateProvider.IsInvalidContractSender(spec, currentTx.SenderAddress)) + if (!_ignoreEip3607 && stateProvider.IsInvalidContractSender(spec, currentTx.SenderAddress)) { return args.Set(TxAction.Skip, $"Sender is contract"); } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionsExecutor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionsExecutor.cs index 161dd665971..bd8740c7c2f 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionsExecutor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockProductionTransactionsExecutor.cs @@ -26,12 +26,12 @@ public class BlockProductionTransactionsExecutor : IBlockProductionTransactionsE private readonly ILogger _logger; public BlockProductionTransactionsExecutor( - ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv, + IReadOnlyTxProcessingScope readOnlyTxProcessingEnv, ISpecProvider specProvider, ILogManager logManager) : this( readOnlyTxProcessingEnv.TransactionProcessor, - readOnlyTxProcessingEnv.StateProvider, + readOnlyTxProcessingEnv.WorldState, specProvider, logManager) { diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs index e2e7eb42592..d487cda83fa 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.BlockValidationTransactionsExecutor.cs @@ -42,13 +42,14 @@ public TxReceipt[] ProcessTransactions(Block block, ProcessingOptions processing BlockExecutionContext blkCtx = new(block.Header); for (int i = 0; i < block.Transactions.Length; i++) { + block.TransactionProcessed = i; Transaction currentTx = block.Transactions[i]; ProcessTransaction(in blkCtx, currentTx, i, receiptsTracer, processingOptions); } return receiptsTracer.TxReceipts.ToArray(); } - private void ProcessTransaction(in BlockExecutionContext blkCtx, Transaction currentTx, int index, BlockReceiptsTracer receiptsTracer, ProcessingOptions processingOptions) + protected virtual void ProcessTransaction(in BlockExecutionContext blkCtx, Transaction currentTx, int index, BlockReceiptsTracer receiptsTracer, ProcessingOptions processingOptions) { TransactionResult result = _transactionProcessor.ProcessTransaction(in blkCtx, currentTx, receiptsTracer, processingOptions, _stateProvider); if (!result) ThrowInvalidBlockException(result, blkCtx.Header, currentTx, index); diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index 1c7d85000ee..7614f95188b 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -2,10 +2,12 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Numerics; using System.Runtime.InteropServices; using System.Threading; +using System.Threading.Tasks; using Nethermind.Blockchain; using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Blockchain.Blocks; @@ -37,7 +39,6 @@ public partial class BlockProcessor : IBlockProcessor protected readonly IWorldState _stateProvider; private readonly IReceiptStorage _receiptStorage; private readonly IReceiptsRootCalculator _receiptsRootCalculator; - private readonly IWitnessCollector _witnessCollector; private readonly IWithdrawalProcessor _withdrawalProcessor; private readonly IBeaconBlockRootHandler _beaconBlockRootHandler; private readonly IBlockValidator _blockValidator; @@ -46,6 +47,7 @@ public partial class BlockProcessor : IBlockProcessor private readonly IConsensusRequestsProcessor _consensusRequestsProcessor; private readonly IBlockhashStore _blockhashStore; + private readonly IBlockCachePreWarmer? _preWarmer; private const int MaxUncommittedBlocks = 64; /// @@ -61,13 +63,13 @@ public BlockProcessor( IBlockProcessor.IBlockTransactionsExecutor? blockTransactionsExecutor, IWorldState? stateProvider, IReceiptStorage? receiptStorage, - IWitnessCollector? witnessCollector, IBlockhashStore? blockHashStore, ITransactionProcessor transactionProcessor, ILogManager? logManager, IWithdrawalProcessor? withdrawalProcessor = null, IBeaconBlockRootHandler? beaconBlockRootHandler = null, IReceiptsRootCalculator? receiptsRootCalculator = null, + IBlockCachePreWarmer? preWarmer = null, IConsensusRequestsProcessor? consensusRequestsProcessor = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); @@ -75,7 +77,6 @@ public BlockProcessor( _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator)); _stateProvider = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); - _witnessCollector = witnessCollector ?? throw new ArgumentNullException(nameof(witnessCollector)); _withdrawalProcessor = withdrawalProcessor ?? new WithdrawalProcessor(stateProvider, logManager); _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); @@ -84,10 +85,11 @@ public BlockProcessor( _consensusRequestsProcessor = consensusRequestsProcessor ?? new ConsensusRequestsProcessor(transactionProcessor); _blockhashStore = blockHashStore ?? throw new ArgumentNullException(nameof(blockHashStore)); + _preWarmer = preWarmer; ReceiptsTracer = new BlockReceiptsTracer(); } - public event EventHandler BlockProcessed; + public event EventHandler? BlockProcessed; public event EventHandler TransactionProcessed { @@ -108,30 +110,34 @@ public Block[] Process(Hash256 newBranchStateRoot, List suggestedBlocks, the previous head state.*/ Hash256 previousBranchStateRoot = CreateCheckpoint(); InitBranch(newBranchStateRoot); + Hash256 preBlockStateRoot = newBranchStateRoot; bool notReadOnly = !options.ContainsFlag(ProcessingOptions.ReadOnlyChain); int blocksCount = suggestedBlocks.Count; Block[] processedBlocks = new Block[blocksCount]; - using IDisposable tracker = _witnessCollector.TrackOnThisThread(); try { for (int i = 0; i < blocksCount; i++) { + Block suggestedBlock = suggestedBlocks[i]; if (blocksCount > 64 && i % 8 == 0) { - if (_logger.IsInfo) _logger.Info($"Processing part of a long blocks branch {i}/{blocksCount}. Block: {suggestedBlocks[i]}"); + if (_logger.IsInfo) _logger.Info($"Processing part of a long blocks branch {i}/{blocksCount}. Block: {suggestedBlock}"); } - _witnessCollector.Reset(); - (Block processedBlock, TxReceipt[] receipts) = ProcessOne(suggestedBlocks[i], options, blockTracer); + using CancellationTokenSource cancellationTokenSource = new(); + Task? preWarmTask = suggestedBlock.Transactions.Length < 3 ? + null : + _preWarmer?.PreWarmCaches(suggestedBlock, preBlockStateRoot!, cancellationTokenSource.Token); + (Block processedBlock, TxReceipt[] receipts) = ProcessOne(suggestedBlock, options, blockTracer); + cancellationTokenSource.Cancel(); + preWarmTask?.GetAwaiter().GetResult(); processedBlocks[i] = processedBlock; // be cautious here as AuRa depends on processing - PreCommitBlock(newBranchStateRoot, suggestedBlocks[i].Number); - + PreCommitBlock(newBranchStateRoot, suggestedBlock.Number); if (notReadOnly) { - _witnessCollector.Persist(processedBlock.Hash!); BlockProcessed?.Invoke(this, new BlockProcessedEventArgs(processedBlock, receipts)); } @@ -144,9 +150,12 @@ the previous head state.*/ { if (_logger.IsInfo) _logger.Info($"Commit part of a long blocks branch {i}/{blocksCount}"); previousBranchStateRoot = CreateCheckpoint(); - Hash256? newStateRoot = suggestedBlocks[i].StateRoot; + Hash256? newStateRoot = suggestedBlock.StateRoot; InitBranch(newStateRoot, false); } + + preBlockStateRoot = processedBlock.StateRoot; + _stateProvider.Reset(resizeCollections: true); } if (options.ContainsFlag(ProcessingOptions.DoNotUpdateHead)) @@ -160,6 +169,7 @@ the previous head state.*/ { _logger.Trace($"Encountered exception {ex} while processing blocks."); RestoreBranch(previousBranchStateRoot); + _preWarmer?.ClearCaches(); throw; } } @@ -232,6 +242,9 @@ private void ValidateProcessedBlock(Block suggestedBlock, ProcessingOptions opti if (_logger.IsWarn) _logger.Warn($"Suggested block TD: {suggestedBlock.TotalDifficulty}, Suggested block IsPostMerge {suggestedBlock.IsPostMerge}, Block TD: {block.TotalDifficulty}, Block IsPostMerge {block.IsPostMerge}"); throw new InvalidBlockException(suggestedBlock, error); } + + // Block is valid, copy the account changes as we use the suggested block not the processed one + suggestedBlock.AccountChanges = block.AccountChanges; } private bool ShouldComputeStateRoot(BlockHeader header) => @@ -251,7 +264,7 @@ protected virtual TxReceipt[] ProcessBlock( _beaconBlockRootHandler.ExecuteSystemCall(block, spec); _blockhashStore.ApplyHistoryBlockHashes(block.Header); - _stateProvider.Commit(spec); + _stateProvider.Commit(spec, commitStorageRoots: false); TxReceipt[] receipts = _blockTransactionsExecutor.ProcessTransactions(block, options, ReceiptsTracer, spec); @@ -267,7 +280,13 @@ protected virtual TxReceipt[] ProcessBlock( ReceiptsTracer.EndBlockTrace(); - _stateProvider.Commit(spec); + _stateProvider.Commit(spec, commitStorageRoots: true); + + if (BlockchainProcessor.IsMainProcessingThread) + { + // Get the accounts that have been changed + block.AccountChanges = _stateProvider.GetAccountChanges(); + } if (ShouldComputeStateRoot(block.Header)) { diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockchainProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockchainProcessor.cs index 97249d25a39..c3cfb0b7234 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockchainProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockchainProcessor.cs @@ -430,7 +430,9 @@ private void FireProcessingQueueEmpty() if (!readonlyChain) { - _stats.UpdateStats(lastProcessed, _blockTree, _recoveryQueue.Count, _blockQueue.Count, _stopwatch.ElapsedMicroseconds()); + Metrics.RecoveryQueueSize = _recoveryQueue.Count; + Metrics.ProcessingQueueSize = _blockQueue.Count; + _stats.UpdateStats(lastProcessed, _blockTree, _stopwatch.ElapsedMicroseconds()); } return lastProcessed; diff --git a/src/Nethermind/Nethermind.Consensus/Processing/IBlockCachePreWarmer.cs b/src/Nethermind/Nethermind.Consensus/Processing/IBlockCachePreWarmer.cs new file mode 100644 index 00000000000..609e802d44c --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Processing/IBlockCachePreWarmer.cs @@ -0,0 +1,15 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Threading; +using System.Threading.Tasks; +using Nethermind.Core; +using Nethermind.Core.Crypto; + +namespace Nethermind.Consensus.Processing; + +public interface IBlockCachePreWarmer +{ + Task PreWarmCaches(Block suggestedBlock, Hash256 parentStateRoot, CancellationToken cancellationToken = default); + void ClearCaches(); +} diff --git a/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs index ceb8da16d7c..88aba737926 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/IBlockProcessor.cs @@ -18,9 +18,7 @@ public interface IBlockProcessor /// Initial state for the processed branch. /// List of blocks to be processed. /// Options to use for processor and transaction processor. - /// - /// Block tracer to use. By default either or - /// + /// Block tracer to use. By default either or /// List of processed blocks. Block[] Process( Hash256 newBranchStateRoot, diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ProcessingStats.cs b/src/Nethermind/Nethermind.Consensus/Processing/ProcessingStats.cs index 7ef3faaecb1..d44884f538b 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ProcessingStats.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ProcessingStats.cs @@ -2,8 +2,8 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Generic; using System.Diagnostics; +using System.Threading; using Nethermind.Blockchain; using Nethermind.Core; using Nethermind.Core.Extensions; @@ -13,7 +13,7 @@ namespace Nethermind.Consensus.Processing { //TODO Consult on disabling of such metrics from configuration - internal class ProcessingStats + internal class ProcessingStats : IThreadPoolWorkItem { private readonly ILogger _logger; private readonly Stopwatch _processingStopwatch = new(); @@ -26,19 +26,25 @@ internal class ProcessingStats private long _lastTotalEmptyCalls; private long _lastTotalSLoad; private long _lastTotalSStore; - private long _lastStateDbReads; - private long _lastStateDbWrites; - private long _lastGen0; - private long _lastGen1; - private long _lastGen2; - private long _lastTreeNodeRlp; - private long _lastEvmExceptions; private long _lastSelfDestructs; - private long _maxMemory; private long _totalBlocks; - private long _processingMicroseconds; + private long _chunkProcessingMicroseconds; private long _lastTotalCreates; private long _lastReportMs; + private long _lastContractsAnalysed; + private long _lastCachedContractsUsed; + private long _blockProcessingMicroseconds; + private long _runningMicroseconds; + private long _runMicroseconds; + private long _reportMs; + private Block? _lastBlock; + private long _sloadOpcodeProcessing; + private long _sstoreOpcodeProcessing; + private long _callsProcessing; + private long _emptyCallsProcessing; + private long _codeDbCacheProcessing; + private long _contractAnalysedProcessing; + private long _createsProcessing; public ProcessingStats(ILogger logger) { @@ -51,19 +57,8 @@ public ProcessingStats(ILogger logger) #endif } - public void UpdateStats(Block? block, IBlockTree blockTreeCtx, int recoveryQueueSize, int blockQueueSize, long blockProcessingTimeInMicros) + public void UpdateStats(Block? block, IBlockTree blockTreeCtx, long blockProcessingTimeInMicros) { - const string resetColor = "\u001b[37m"; - const string whiteText = "\u001b[97m"; - const string yellowText = "\u001b[93m"; - const string orangeText = "\u001b[38;5;208m"; - const string redText = "\u001b[38;5;196m"; - const string greenText = "\u001b[92m"; - const string darkGreenText = "\u001b[32m"; - const string darkCyanText = "\u001b[36m"; - const string blueText = "\u001b[94m"; - const string darkGreyText = resetColor; // "\u001b[90m"; - if (block is null) { return; @@ -76,7 +71,7 @@ public void UpdateStats(Block? block, IBlockTree blockTreeCtx, int recoveryQueue _lastBlockNumber = block.Number; } - _processingMicroseconds += blockProcessingTimeInMicros; + _chunkProcessingMicroseconds += blockProcessingTimeInMicros; Metrics.Mgas += block.GasUsed / 1_000_000.0; Metrics.Transactions += block.Transactions.Length; @@ -85,161 +80,192 @@ public void UpdateStats(Block? block, IBlockTree blockTreeCtx, int recoveryQueue Metrics.LastDifficulty = block.Difficulty; Metrics.GasUsed = block.GasUsed; Metrics.GasLimit = block.GasLimit; - Metrics.RecoveryQueueSize = recoveryQueueSize; - Metrics.ProcessingQueueSize = blockQueueSize; Metrics.BlockchainHeight = block.Header.Number; Metrics.BestKnownBlockNumber = blockTreeCtx.BestKnownNumber; - long processingMicroseconds = _processingStopwatch.ElapsedMicroseconds(); - long runningMicroseconds = _runStopwatch.ElapsedMicroseconds(); - long runMicroseconds = (runningMicroseconds - _lastElapsedRunningMicroseconds); + _blockProcessingMicroseconds = _processingStopwatch.ElapsedMicroseconds(); + _runningMicroseconds = _runStopwatch.ElapsedMicroseconds(); + _runMicroseconds = (_runningMicroseconds - _lastElapsedRunningMicroseconds); - long reportMs = Environment.TickCount64; + long reportMs = _reportMs = Environment.TickCount64; if (reportMs - _lastReportMs > 1000) { - long currentStateDbReads = Db.Metrics.DbReads.GetValueOrDefault("StateDb"); - long currentStateDbWrites = Db.Metrics.DbWrites.GetValueOrDefault("StateDb"); - long currentTreeNodeRlp = Trie.Metrics.TreeNodeRlpEncodings + Trie.Metrics.TreeNodeRlpDecodings; - long evmExceptions = Evm.Metrics.EvmExceptions; - long currentSelfDestructs = Evm.Metrics.SelfDestructs; + _lastReportMs = _reportMs; + _lastBlock = block; + _sloadOpcodeProcessing = Evm.Metrics.ThreadLocalSLoadOpcode; + _sstoreOpcodeProcessing = Evm.Metrics.ThreadLocalSStoreOpcode; + _callsProcessing = Evm.Metrics.ThreadLocalCalls; + _emptyCallsProcessing = Evm.Metrics.ThreadLocalEmptyCalls; + _codeDbCacheProcessing = Db.Metrics.ThreadLocalCodeDbCache; + _contractAnalysedProcessing = Evm.Metrics.ThreadLocalContractsAnalysed; + _createsProcessing = Evm.Metrics.ThreadLocalCreates; + GenerateReport(); + } + } - long chunkBlocks = Metrics.Blocks - _lastBlockNumber; - _totalBlocks += chunkBlocks; + private void GenerateReport() => ThreadPool.UnsafeQueueUserWorkItem(this, preferLocal: false); - if (_logger.IsInfo) - { - double chunkMicroseconds = _processingMicroseconds; - double totalMicroseconds = processingMicroseconds; - long chunkTx = Metrics.Transactions - _lastTotalTx; - long chunkCalls = Evm.Metrics.Calls - _lastTotalCalls; - long chunkEmptyCalls = Evm.Metrics.EmptyCalls - _lastTotalEmptyCalls; - long chunkCreates = Evm.Metrics.Creates - _lastTotalCreates; - long chunkSload = Evm.Metrics.SloadOpcode - _lastTotalSLoad; - long chunkSstore = Evm.Metrics.SstoreOpcode - _lastTotalSStore; - double chunkMGas = Metrics.Mgas - _lastTotalMGas; - double mgasPerSecond = chunkMicroseconds == 0 ? -1 : chunkMGas / chunkMicroseconds * 1_000_000.0; - double totalMgasPerSecond = totalMicroseconds == 0 ? -1 : Metrics.Mgas / totalMicroseconds * 1_000_000.0; - double totalTxPerSecond = totalMicroseconds == 0 ? -1 : Metrics.Transactions / totalMicroseconds * 1_000_000.0; - double totalBlocksPerSecond = totalMicroseconds == 0 ? -1 : _totalBlocks / totalMicroseconds * 1_000_000.0; - double txps = chunkMicroseconds == 0 ? -1 : chunkTx / chunkMicroseconds * 1_000_000.0; - double bps = chunkMicroseconds == 0 ? -1 : chunkBlocks / chunkMicroseconds * 1_000_000.0; - double chunkMs = (chunkMicroseconds == 0 ? -1 : chunkMicroseconds / 1000.0); - double runMs = (runMicroseconds == 0 ? -1 : runMicroseconds / 1000.0); - string blockGas = Evm.Metrics.BlockMinGasPrice != float.MaxValue ? $"⛽ Gas gwei: {Evm.Metrics.BlockMinGasPrice:N2} .. {whiteText}{Math.Max(Evm.Metrics.BlockMinGasPrice, Evm.Metrics.BlockEstMedianGasPrice):N2}{resetColor} ({Evm.Metrics.BlockAveGasPrice:N2}) .. {Evm.Metrics.BlockMaxGasPrice:N2}" : ""; - string mgasColor = whiteText; + void IThreadPoolWorkItem.Execute() + { + const string resetColor = "\u001b[37m"; + const string whiteText = "\u001b[97m"; + const string yellowText = "\u001b[93m"; + const string orangeText = "\u001b[38;5;208m"; + const string redText = "\u001b[38;5;196m"; + const string greenText = "\u001b[92m"; + const string darkGreenText = "\u001b[32m"; + const string darkCyanText = "\u001b[36m"; + const string blueText = "\u001b[94m"; + const string darkGreyText = resetColor; // "\u001b[90m"; + + long currentSelfDestructs = Evm.Metrics.SelfDestructs; + + long chunkBlocks = Metrics.Blocks - _lastBlockNumber; + _totalBlocks += chunkBlocks; + + double chunkMicroseconds = _chunkProcessingMicroseconds; + double chunkMGas = Metrics.Mgas - _lastTotalMGas; + double mgasPerSecond; + if (chunkMicroseconds == 0) + { + mgasPerSecond = -1; + } + else + { + mgasPerSecond = chunkMGas / chunkMicroseconds * 1_000_000.0; + if (chunkMGas != 0) + { Metrics.MgasPerSec = mgasPerSecond; + } + } - if (chunkBlocks > 1) - { - _logger.Info($"Processed {block.Number - chunkBlocks + 1,9}...{block.Number,9} | {chunkMs,9:N2} ms | slot {runMs,7:N0} ms |{blockGas}"); - } - else - { - mgasColor = (chunkMGas / (block.GasLimit / 16_000_000.0)) switch - { - // At 30M gas limit the values are in comments - > 15 => redText, // 28.125 MGas - > 14 => orangeText, // 26.25 MGas - > 13 => yellowText, // 24.375 MGas - > 10 => darkGreenText, // 18.75 MGas - > 7 => greenText, // 13.125 MGas - > 6 => darkGreenText, // 11.25 MGas - > 5 => whiteText, // 9.375 MGas - > 4 => resetColor, // 7.5 MGas - > 3 => darkCyanText, // 5.625 MGas - _ => blueText - }; - var chunkColor = chunkMs switch - { - < 200 => greenText, - < 300 => darkGreenText, - < 500 => whiteText, - < 1000 => yellowText, - < 2000 => orangeText, - _ => redText - }; - _logger.Info($"Processed {block.Number,9} | {chunkColor}{chunkMs,9:N2}{resetColor} ms | slot {runMs,7:N0} ms |{blockGas}"); - } - - string mgasPerSecondColor = (mgasPerSecond / (block.GasLimit / 1_000_000.0)) switch + Block? block = Interlocked.Exchange(ref _lastBlock, null); + if (block is not null && _logger.IsInfo) + { + double totalMicroseconds = _blockProcessingMicroseconds; + long chunkTx = Metrics.Transactions - _lastTotalTx; + long chunkCalls = _callsProcessing - _lastTotalCalls; + long chunkEmptyCalls = _emptyCallsProcessing - _lastTotalEmptyCalls; + long chunkCreates = _createsProcessing - _lastTotalCreates; + long chunkSload = _sloadOpcodeProcessing - _lastTotalSLoad; + long chunkSstore = _sstoreOpcodeProcessing - _lastTotalSStore; + long contractsAnalysed = _contractAnalysedProcessing - _lastContractsAnalysed; + long cachedContractsUsed = _codeDbCacheProcessing - _lastCachedContractsUsed; + double totalMgasPerSecond = totalMicroseconds == 0 ? -1 : Metrics.Mgas / totalMicroseconds * 1_000_000.0; + double totalTxPerSecond = totalMicroseconds == 0 ? -1 : Metrics.Transactions / totalMicroseconds * 1_000_000.0; + double totalBlocksPerSecond = totalMicroseconds == 0 ? -1 : _totalBlocks / totalMicroseconds * 1_000_000.0; + double txps = chunkMicroseconds == 0 ? -1 : chunkTx / chunkMicroseconds * 1_000_000.0; + double bps = chunkMicroseconds == 0 ? -1 : chunkBlocks / chunkMicroseconds * 1_000_000.0; + double chunkMs = (chunkMicroseconds == 0 ? -1 : chunkMicroseconds / 1000.0); + double runMs = (_runMicroseconds == 0 ? -1 : _runMicroseconds / 1000.0); + string blockGas = Evm.Metrics.BlockMinGasPrice != float.MaxValue ? $"⛽ Gas gwei: {Evm.Metrics.BlockMinGasPrice:N2} .. {whiteText}{Math.Max(Evm.Metrics.BlockMinGasPrice, Evm.Metrics.BlockEstMedianGasPrice):N2}{resetColor} ({Evm.Metrics.BlockAveGasPrice:N2}) .. {Evm.Metrics.BlockMaxGasPrice:N2}" : ""; + string mgasColor = whiteText; + + if (chunkBlocks > 1) + { + _logger.Info($"Processed {block.Number - chunkBlocks + 1,10}...{block.Number,9} | {chunkMs,9:N2} ms | slot {runMs,7:N0} ms |{blockGas}"); + } + else + { + mgasColor = (chunkMGas / (block.GasLimit / 16_000_000.0)) switch { // At 30M gas limit the values are in comments - > 3 => greenText, // 90 MGas/s - > 2.5f => darkGreenText, // 75 MGas/s - > 2 => whiteText, // 60 MGas/s - > 1.5f => resetColor, // 45 MGas/s - > 1 => yellowText, // 30 MGas/s - > 0.5f => orangeText, // 15 MGas/s - _ => redText - }; - var sstoreColor = chunkBlocks > 1 ? "" : chunkSstore switch - { - > 3500 => redText, - > 2500 => orangeText, - > 2000 => yellowText, - > 1500 => whiteText, - > 900 when chunkCalls > 900 => whiteText, - _ => "" - }; - var callsColor = chunkBlocks > 1 ? "" : chunkCalls switch - { - > 3500 => redText, - > 2500 => orangeText, - > 2000 => yellowText, - > 1500 => whiteText, - > 900 when chunkSstore > 900 => whiteText, - _ => "" + > 15 => redText, // 28.125 MGas + > 14 => orangeText, // 26.25 MGas + > 13 => yellowText, // 24.375 MGas + > 10 => darkGreenText, // 18.75 MGas + > 7 => greenText, // 13.125 MGas + > 6 => darkGreenText, // 11.25 MGas + > 5 => whiteText, // 9.375 MGas + > 4 => resetColor, // 7.5 MGas + > 3 => darkCyanText, // 5.625 MGas + _ => blueText }; - var createsColor = chunkBlocks > 1 ? "" : chunkCreates switch + var chunkColor = chunkMs switch { - > 300 => redText, - > 200 => orangeText, - > 150 => yellowText, - > 75 => whiteText, - _ => "" + < 200 => greenText, + < 300 => darkGreenText, + < 500 => whiteText, + < 1000 => yellowText, + < 2000 => orangeText, + _ => redText }; - _logger.Info($"- Block{(chunkBlocks > 1 ? $"s {chunkBlocks,-9:N0}" : " ")}{(chunkBlocks == 1 ? mgasColor : "")} {chunkMGas,7:F2}{resetColor} MGas | {chunkTx,6:N0} txs | calls {callsColor}{chunkCalls,6:N0}{resetColor} {darkGreyText}({chunkEmptyCalls,3:N0}){resetColor} | sload {chunkSload,7:N0} | sstore {sstoreColor}{chunkSstore,6:N0}{resetColor} | create {createsColor}{chunkCreates,3:N0}{resetColor}{(currentSelfDestructs - _lastSelfDestructs > 0 ? $"{darkGreyText}({-(currentSelfDestructs - _lastSelfDestructs),3:N0}){resetColor}" : "")}"); - _logger.Info($"- Block throughput {mgasPerSecondColor}{mgasPerSecond,7:F2}{resetColor} MGas/s | {txps,9:F2} t/s | {bps,7:F2} Blk/s | recv {recoveryQueueSize,7:N0} | proc {blockQueueSize,6:N0}"); - // Only output the total throughput in debug mode - if (_logger.IsDebug) - { - _logger.Debug($"- Total throughput {totalMgasPerSecond,7:F2} MGas/s | {totalTxPerSecond,9:F2} t/s | {totalBlocksPerSecond,7:F2} Blk/s |⛽ Gas gwei: {Evm.Metrics.MinGasPrice:N2} .. {Math.Max(Evm.Metrics.MinGasPrice, Evm.Metrics.EstMedianGasPrice):N2} ({Evm.Metrics.AveGasPrice:N2}) .. {Evm.Metrics.MaxGasPrice:N2}"); - } + _logger.Info($"Processed {block.Number,10} | {chunkColor}{chunkMs,9:N2}{resetColor} ms | slot {runMs,7:N0} ms |{blockGas}"); + } - if (_logger.IsTrace) - { - long currentGen0 = GC.CollectionCount(0); - long currentGen1 = GC.CollectionCount(1); - long currentGen2 = GC.CollectionCount(2); - long currentMemory = GC.GetTotalMemory(false); - _maxMemory = Math.Max(_maxMemory, currentMemory); - _logger.Trace($"Gen0 {currentGen0 - _lastGen0,6}, Gen1 {currentGen1 - _lastGen1,6}, Gen2 {currentGen2 - _lastGen2,6}, maxmem {_maxMemory / 1000000,5}, mem {currentMemory / 1000000,5}, reads {currentStateDbReads - _lastStateDbReads,9}, writes {currentStateDbWrites - _lastStateDbWrites,9}, rlp {currentTreeNodeRlp - _lastTreeNodeRlp,9}, exceptions {evmExceptions - _lastEvmExceptions}, selfdstrcs {currentSelfDestructs - _lastSelfDestructs}"); - _lastGen0 = currentGen0; - _lastGen1 = currentGen1; - _lastGen2 = currentGen2; - } + string mgasPerSecondColor = (mgasPerSecond / (block.GasLimit / 1_000_000.0)) switch + { + // At 30M gas limit the values are in comments + > 3 => greenText, // 90 MGas/s + > 2.5f => darkGreenText, // 75 MGas/s + > 2 => whiteText, // 60 MGas/s + > 1.5f => resetColor, // 45 MGas/s + > 1 => yellowText, // 30 MGas/s + > 0.5f => orangeText, // 15 MGas/s + _ => redText + }; + var sstoreColor = chunkBlocks > 1 ? "" : chunkSstore switch + { + > 3500 => redText, + > 2500 => orangeText, + > 2000 => yellowText, + > 1500 => whiteText, + > 900 when chunkCalls > 900 => whiteText, + _ => "" + }; + var callsColor = chunkBlocks > 1 ? "" : chunkCalls switch + { + > 3500 => redText, + > 2500 => orangeText, + > 2000 => yellowText, + > 1500 => whiteText, + > 900 when chunkSstore > 900 => whiteText, + _ => "" + }; + var createsColor = chunkBlocks > 1 ? "" : chunkCreates switch + { + > 300 => redText, + > 200 => orangeText, + > 150 => yellowText, + > 75 => whiteText, + _ => "" + }; + var recoveryQueue = Metrics.RecoveryQueueSize; + var processingQueue = Metrics.ProcessingQueueSize; + + _logger.Info($"- Block{(chunkBlocks > 1 ? $"s {chunkBlocks,-9:N0}" : " ")}{(chunkBlocks == 1 ? mgasColor : "")} {chunkMGas,9:F2}{resetColor} MGas | {chunkTx,6:N0} txs | calls {callsColor}{chunkCalls,6:N0}{resetColor} {darkGreyText}({chunkEmptyCalls,3:N0}){resetColor} | sload {chunkSload,7:N0} | sstore {sstoreColor}{chunkSstore,6:N0}{resetColor} | create {createsColor}{chunkCreates,3:N0}{resetColor}{(currentSelfDestructs - _lastSelfDestructs > 0 ? $"{darkGreyText}({-(currentSelfDestructs - _lastSelfDestructs),3:N0}){resetColor}" : "")}"); + if (recoveryQueue > 0 || processingQueue > 0) + { + _logger.Info($"- Block throughput {mgasPerSecondColor}{mgasPerSecond,9:F2}{resetColor} MGas/s{(mgasPerSecond > 1000 ? "🔥" : " ")}| {txps,9:F2} t/s | {bps,7:F2} Blk/s | recover {recoveryQueue,5:N0} | process {processingQueue,5:N0}"); + } + else + { + _logger.Info($"- Block throughput {mgasPerSecondColor}{mgasPerSecond,9:F2}{resetColor} MGas/s{(mgasPerSecond > 1000 ? "🔥" : " ")}| {txps,9:F2} t/s | {bps,7:F2} Blk/s | exec code {resetColor} from cache {cachedContractsUsed,7:N0} |{resetColor} new {contractsAnalysed,6:N0}"); } - _lastReportMs = reportMs; - _lastBlockNumber = Metrics.Blocks; - _lastTotalMGas = Metrics.Mgas; - _lastElapsedRunningMicroseconds = runningMicroseconds; - _lastTotalTx = Metrics.Transactions; - _lastTotalCalls = Evm.Metrics.Calls; - _lastTotalEmptyCalls = Evm.Metrics.EmptyCalls; - _lastTotalCreates = Evm.Metrics.Creates; - _lastTotalSLoad = Evm.Metrics.SloadOpcode; - _lastTotalSStore = Evm.Metrics.SstoreOpcode; - _lastStateDbReads = currentStateDbReads; - _lastStateDbWrites = currentStateDbWrites; - _lastTreeNodeRlp = currentTreeNodeRlp; - _lastEvmExceptions = evmExceptions; - _lastSelfDestructs = currentSelfDestructs; - _processingMicroseconds = 0; + // Only output the total throughput in debug mode + if (_logger.IsDebug) + { + _logger.Debug($"- Total throughput {totalMgasPerSecond,9:F2} MGas/s | {totalTxPerSecond,9:F2} t/s | {totalBlocksPerSecond,7:F2} Blk/s |⛽ Gas gwei: {Evm.Metrics.MinGasPrice:N2} .. {Math.Max(Evm.Metrics.MinGasPrice, Evm.Metrics.EstMedianGasPrice):N2} ({Evm.Metrics.AveGasPrice:N2}) .. {Evm.Metrics.MaxGasPrice:N2}"); + } } + + _lastCachedContractsUsed = _codeDbCacheProcessing; + _lastContractsAnalysed = _contractAnalysedProcessing; + _lastBlockNumber = Metrics.Blocks; + _lastTotalMGas = Metrics.Mgas; + _lastElapsedRunningMicroseconds = _runningMicroseconds; + _lastTotalTx = Metrics.Transactions; + _lastTotalCalls = _callsProcessing; + _lastTotalEmptyCalls = _emptyCallsProcessing; + _lastTotalCreates = _createsProcessing; + _lastTotalSLoad = _sloadOpcodeProcessing; + _lastTotalSStore = _sstoreOpcodeProcessing; + _lastSelfDestructs = currentSelfDestructs; + _chunkProcessingMicroseconds = 0; } public void Start() diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs index 483a410e3ac..9d09f3a888e 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs @@ -2,12 +2,13 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using Nethermind.Blockchain; using Nethermind.Blockchain.Blocks; using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Core.Specs; -using Nethermind.Db; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; @@ -18,44 +19,57 @@ namespace Nethermind.Consensus.Processing /// public class ReadOnlyChainProcessingEnv : IDisposable { - private readonly ReadOnlyTxProcessingEnv _txEnv; - private readonly BlockchainProcessor _blockProcessingQueue; public IBlockProcessor BlockProcessor { get; } public IBlockchainProcessor ChainProcessor { get; } public IBlockProcessingQueue BlockProcessingQueue { get; } - public IWorldState StateProvider => _txEnv.StateProvider; public ReadOnlyChainProcessingEnv( - ReadOnlyTxProcessingEnv txEnv, + IReadOnlyTxProcessingScope scope, IBlockValidator blockValidator, IBlockPreprocessorStep recoveryStep, IRewardCalculator rewardCalculator, IReceiptStorage receiptStorage, ISpecProvider specProvider, + IBlockTree blockTree, + IStateReader stateReader, ILogManager logManager, IBlockProcessor.IBlockTransactionsExecutor? blockTransactionsExecutor = null) { - _txEnv = txEnv; - IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor = - blockTransactionsExecutor ?? new BlockProcessor.BlockValidationTransactionsExecutor(_txEnv.TransactionProcessor, StateProvider); + blockTransactionsExecutor ?? new BlockProcessor.BlockValidationTransactionsExecutor(scope.TransactionProcessor, scope.WorldState); + + BlockProcessor = CreateBlockProcessor(scope, blockTree, blockValidator, rewardCalculator, receiptStorage, specProvider, logManager, transactionsExecutor); + + _blockProcessingQueue = new BlockchainProcessor(blockTree, BlockProcessor, recoveryStep, stateReader, logManager, BlockchainProcessor.Options.NoReceipts); + BlockProcessingQueue = _blockProcessingQueue; + ChainProcessor = new OneTimeChainProcessor(scope.WorldState, _blockProcessingQueue); + _blockProcessingQueue = new BlockchainProcessor(blockTree, BlockProcessor, recoveryStep, stateReader, logManager, BlockchainProcessor.Options.NoReceipts); + BlockProcessingQueue = _blockProcessingQueue; + ChainProcessor = new OneTimeChainProcessor(scope.WorldState, _blockProcessingQueue); + } - BlockProcessor = new BlockProcessor( + protected virtual IBlockProcessor CreateBlockProcessor( + IReadOnlyTxProcessingScope scope, + IBlockTree blockTree, + IBlockValidator blockValidator, + IRewardCalculator rewardCalculator, + IReceiptStorage receiptStorage, + ISpecProvider specProvider, + ILogManager logManager, + IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor + ) + { + return new BlockProcessor( specProvider, blockValidator, rewardCalculator, transactionsExecutor, - StateProvider, + scope.WorldState, receiptStorage, - NullWitnessCollector.Instance, - new BlockhashStore(txEnv.BlockTree, specProvider, StateProvider), - _txEnv.TransactionProcessor, + new BlockhashStore(blockTree, specProvider, scope.WorldState), + scope.TransactionProcessor, logManager); - - _blockProcessingQueue = new BlockchainProcessor(_txEnv.BlockTree, BlockProcessor, recoveryStep, _txEnv.StateReader, logManager, BlockchainProcessor.Options.NoReceipts); - BlockProcessingQueue = _blockProcessingQueue; - ChainProcessor = new OneTimeChainProcessor(txEnv.StateProvider, _blockProcessingQueue); } public void Dispose() diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs index 47671734515..dc13eca75dc 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs @@ -14,43 +14,58 @@ // ReSharper disable UnusedAutoPropertyAccessor.Global namespace Nethermind.Consensus.Processing { - public class ReadOnlyTxProcessingEnv : IReadOnlyTxProcessorSource + public class ReadOnlyTxProcessingEnv : ReadOnlyTxProcessingEnvBase, IReadOnlyTxProcessorSource { - public IStateReader StateReader { get; } - public IWorldState StateProvider { get; } - public ITransactionProcessor TransactionProcessor { get; set; } - public IBlockTree BlockTree { get; } - public IBlockhashProvider BlockhashProvider { get; } + protected readonly ILogManager _logManager; + + protected ITransactionProcessor? _transactionProcessor; + protected ITransactionProcessor TransactionProcessor + { + get + { + return _transactionProcessor ??= CreateTransactionProcessor(); + } + } + public IVirtualMachine Machine { get; } + public ICodeInfoRepository CodeInfoRepository { get; } public ReadOnlyTxProcessingEnv( IWorldStateManager worldStateManager, - IBlockTree? blockTree, + IBlockTree blockTree, ISpecProvider? specProvider, - ILogManager? logManager) - : this(worldStateManager, blockTree?.AsReadOnly(), specProvider, logManager) + ILogManager? logManager, + IWorldState? worldStateToWarmUp = null) + : this(worldStateManager, blockTree.AsReadOnly(), specProvider, logManager, worldStateToWarmUp) { } public ReadOnlyTxProcessingEnv( IWorldStateManager worldStateManager, - IReadOnlyBlockTree? readOnlyBlockTree, + IReadOnlyBlockTree readOnlyBlockTree, ISpecProvider? specProvider, - ILogManager? logManager) + ILogManager? logManager, + IWorldState? worldStateToWarmUp = null + ) : base(worldStateManager, readOnlyBlockTree, specProvider, logManager, worldStateToWarmUp) { - ArgumentNullException.ThrowIfNull(specProvider); - ArgumentNullException.ThrowIfNull(worldStateManager); - - StateReader = worldStateManager.GlobalStateReader; - StateProvider = worldStateManager.CreateResettableWorldState(); - + CodeInfoRepository = new CodeInfoRepository(); + Machine = new VirtualMachine(BlockhashProvider, specProvider, CodeInfoRepository, logManager); BlockTree = readOnlyBlockTree ?? throw new ArgumentNullException(nameof(readOnlyBlockTree)); BlockhashProvider = new BlockhashProvider(BlockTree, specProvider, StateProvider, logManager); - Machine = new VirtualMachine(BlockhashProvider, specProvider, logManager); - TransactionProcessor = new TransactionProcessor(specProvider, StateProvider, Machine, logManager); + _logManager = logManager; } - public IReadOnlyTransactionProcessor Build(Hash256 stateRoot) => new ReadOnlyTransactionProcessor(TransactionProcessor, StateProvider, stateRoot); + protected virtual TransactionProcessor CreateTransactionProcessor() + { + return new TransactionProcessor(SpecProvider, StateProvider, Machine, CodeInfoRepository, _logManager); + } + + public IReadOnlyTxProcessingScope Build(Hash256 stateRoot) + { + Hash256 originalStateRoot = StateProvider.StateRoot; + StateProvider.StateRoot = stateRoot; + return new ReadOnlyTxProcessingScope(TransactionProcessor, StateProvider, originalStateRoot); + } } } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnvBase.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnvBase.cs new file mode 100644 index 00000000000..058aca9f9c2 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnvBase.cs @@ -0,0 +1,40 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Blockchain; +using Nethermind.Core.Specs; +using Nethermind.Evm; +using Nethermind.Logging; +using Nethermind.State; + +namespace Nethermind.Consensus.Processing; + +public class ReadOnlyTxProcessingEnvBase +{ + public IStateReader StateReader { get; protected set; } + protected IWorldState StateProvider { get; set; } + public IBlockTree BlockTree { get; protected set; } + public IBlockhashProvider BlockhashProvider { get; protected set; } + + public ISpecProvider SpecProvider { get; } + public ILogManager? LogManager { get; set; } + + protected ReadOnlyTxProcessingEnvBase( + IWorldStateManager worldStateManager, + IBlockTree readOnlyBlockTree, + ISpecProvider? specProvider, + ILogManager? logManager, + IWorldState? worldStateToWarmUp = null + ) + { + ArgumentNullException.ThrowIfNull(specProvider); + ArgumentNullException.ThrowIfNull(worldStateManager); + SpecProvider = specProvider; + StateReader = worldStateManager.GlobalStateReader; + StateProvider = worldStateManager.CreateResettableWorldState(worldStateToWarmUp); + BlockTree = readOnlyBlockTree ?? throw new ArgumentNullException(nameof(readOnlyBlockTree)); + BlockhashProvider = new BlockhashProvider(BlockTree, specProvider, StateProvider, logManager); + LogManager = logManager; + } +} diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnvFactory.cs index 1408e3c547e..93c214be0cd 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnvFactory.cs @@ -3,40 +3,27 @@ using Nethermind.Blockchain; using Nethermind.Core.Specs; -using Nethermind.Db; using Nethermind.Logging; using Nethermind.State; -using Nethermind.Trie.Pruning; namespace Nethermind.Consensus.Processing; -public class ReadOnlyTxProcessingEnvFactory +public class ReadOnlyTxProcessingEnvFactory( + IWorldStateManager worldStateManager, + IReadOnlyBlockTree readOnlyBlockTree, + ISpecProvider? specProvider, + ILogManager? logManager, + IWorldState? worldStateToWarmUp = null) { - private readonly IWorldStateManager _worldStateManager; - private readonly IReadOnlyBlockTree? _readOnlyBlockTree; - private readonly ISpecProvider? _specProvider; - private readonly ILogManager? _logManager; - - public ReadOnlyTxProcessingEnvFactory( - IWorldStateManager worldStateManager, - IBlockTree? blockTree, - ISpecProvider? specProvider, - ILogManager? logManager) - : this(worldStateManager, blockTree?.AsReadOnly(), specProvider, logManager) - { - } - public ReadOnlyTxProcessingEnvFactory( IWorldStateManager worldStateManager, - IReadOnlyBlockTree? readOnlyBlockTree, + IBlockTree blockTree, ISpecProvider? specProvider, - ILogManager? logManager) + ILogManager? logManager, + IWorldState? worldStateToWarmUp = null) + : this(worldStateManager, blockTree.AsReadOnly(), specProvider, logManager, worldStateToWarmUp) { - _worldStateManager = worldStateManager; - _readOnlyBlockTree = readOnlyBlockTree; - _specProvider = specProvider; - _logManager = logManager; } - public ReadOnlyTxProcessingEnv Create() => new(_worldStateManager, _readOnlyBlockTree, _specProvider, _logManager); + public ReadOnlyTxProcessingEnv Create() => new(worldStateManager, readOnlyBlockTree, specProvider, logManager, worldStateToWarmUp); } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingScope.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingScope.cs new file mode 100644 index 00000000000..bf14441b48b --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingScope.cs @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Crypto; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.State; + +namespace Nethermind.Consensus.Processing; + +public class ReadOnlyTxProcessingScope( + ITransactionProcessor transactionProcessor, + IWorldState worldState, + Hash256 originalStateRoot +) : IReadOnlyTxProcessingScope +{ + public void Dispose() + { + worldState.StateRoot = originalStateRoot; + worldState.Reset(); + } + + public ITransactionProcessor TransactionProcessor => transactionProcessor; + public IWorldState WorldState => worldState; +} diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs index 2aa2abc4e57..94ae0ee38f0 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerBase.cs @@ -16,14 +16,12 @@ using Nethermind.Int256; using Nethermind.Logging; using Nethermind.State; -using Nethermind.Trie; using Metrics = Nethermind.Blockchain.Metrics; namespace Nethermind.Consensus.Producers { /// /// I think this class can be significantly simplified if we split the block production into a pipeline: - /// * signal block needed /// * prepare block frame /// * select transactions /// * seal @@ -36,7 +34,6 @@ public abstract class BlockProducerBase : IBlockProducer private IBlockchainProcessor Processor { get; } protected IBlockTree BlockTree { get; } private ITimestamper Timestamper { get; } - public event EventHandler? BlockProduced; private ISealer Sealer { get; } private IWorldState StateProvider { get; } @@ -44,13 +41,8 @@ public abstract class BlockProducerBase : IBlockProducer private readonly IDifficultyCalculator _difficultyCalculator; protected readonly ISpecProvider _specProvider; private readonly ITxSource _txSource; - private readonly IBlockProductionTrigger _trigger; - private bool _isRunning; - protected readonly SemaphoreSlim _producingBlockLock = new(1); - private CancellationTokenSource? _producerCancellationToken; - - private DateTime _lastProducedBlockDateTime; protected const int BlockProductionTimeout = 2000; + protected readonly SemaphoreSlim _producingBlockLock = new(1); protected ILogger Logger { get; } protected readonly IBlocksConfig _blocksConfig; @@ -59,7 +51,6 @@ protected BlockProducerBase( IBlockchainProcessor? processor, ISealer? sealer, IBlockTree? blockTree, - IBlockProductionTrigger? trigger, IWorldState? stateProvider, IGasLimitCalculator? gasLimitCalculator, ITimestamper? timestamper, @@ -76,59 +67,21 @@ protected BlockProducerBase( _gasLimitCalculator = gasLimitCalculator ?? throw new ArgumentNullException(nameof(gasLimitCalculator)); Timestamper = timestamper ?? throw new ArgumentNullException(nameof(timestamper)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); - _trigger = trigger ?? throw new ArgumentNullException(nameof(trigger)); _difficultyCalculator = difficultyCalculator ?? throw new ArgumentNullException(nameof(difficultyCalculator)); Logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _blocksConfig = blocksConfig ?? throw new ArgumentNullException(nameof(blocksConfig)); } - private void OnTriggerBlockProduction(object? sender, BlockProductionEventArgs e) - { - BlockHeader? parent = BlockTree.GetProducedBlockParent(e.ParentHeader); - e.BlockProductionTask = TryProduceAndAnnounceNewBlock(e.CancellationToken, parent, e.BlockTracer, e.PayloadAttributes); - } - - public virtual Task Start() + public async Task BuildBlock(BlockHeader? parentHeader = null, IBlockTracer? blockTracer = null, + PayloadAttributes? payloadAttributes = null, CancellationToken? token = null) { - _producerCancellationToken = new CancellationTokenSource(); - _isRunning = true; - _trigger.TriggerBlockProduction += OnTriggerBlockProduction; - _lastProducedBlockDateTime = DateTime.UtcNow; - return Task.CompletedTask; - } - - public virtual Task StopAsync() - { - _producerCancellationToken?.Cancel(); - _isRunning = false; - _trigger.TriggerBlockProduction -= OnTriggerBlockProduction; - _producerCancellationToken?.Dispose(); - return Task.CompletedTask; - } - - protected virtual bool IsRunning() => _isRunning; - - public bool IsProducingBlocks(ulong? maxProducingInterval) - { - if (Logger.IsTrace) Logger.Trace($"Checking IsProducingBlocks: maxProducingInterval {maxProducingInterval}, _lastProducedBlock {_lastProducedBlockDateTime}, IsRunning() {IsRunning()}"); - return IsRunning() && (maxProducingInterval is null || _lastProducedBlockDateTime.AddSeconds(maxProducingInterval.Value) > DateTime.UtcNow); - } - - private async Task TryProduceAndAnnounceNewBlock(CancellationToken token, BlockHeader? parentHeader, IBlockTracer? blockTracer = null, PayloadAttributes? payloadAttributes = null) - { - using CancellationTokenSource tokenSource = CancellationTokenSource.CreateLinkedTokenSource(token, _producerCancellationToken!.Token); - token = tokenSource.Token; - + token ??= default; Block? block = null; - if (await _producingBlockLock.WaitAsync(BlockProductionTimeout, token)) + if (await _producingBlockLock.WaitAsync(BlockProductionTimeout, token.Value)) { try { - block = await TryProduceNewBlock(token, parentHeader, blockTracer, payloadAttributes); - if (block is not null) - { - BlockProduced?.Invoke(this, new BlockEventArgs(block)); - } + block = await TryProduceNewBlock(token.Value, parentHeader, blockTracer, payloadAttributes); } catch (Exception e) when (!(e is TaskCanceledException)) { @@ -196,7 +149,6 @@ public bool IsProducingBlocks(ulong? maxProducingInterval) if (Logger.IsInfo) Logger.Info($"Produced block {t.Result.ToString(Block.Format.HashNumberDiffAndTx)}"); Metrics.BlocksSealed++; - _lastProducedBlockDateTime = DateTime.UtcNow; return t.Result; } else diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index 9c6270a5e19..3cc5cfde05a 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -12,7 +12,9 @@ using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; +using Nethermind.Core.Crypto; using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; using Nethermind.TxPool; @@ -73,8 +75,11 @@ public virtual BlockProducerEnv Create(ITxSource? additionalTxSource = null) ReadOnlyTxProcessingEnv txProcessingEnv = CreateReadonlyTxProcessingEnv(_worldStateManager, readOnlyBlockTree); + IReadOnlyTxProcessingScope scope = txProcessingEnv.Build(Keccak.EmptyTreeHash); + BlockProcessor blockProcessor = - CreateBlockProcessor(txProcessingEnv, + CreateBlockProcessor( + scope, _specProvider, _blockValidator, _rewardCalculatorSource, @@ -92,14 +97,14 @@ public virtual BlockProducerEnv Create(ITxSource? additionalTxSource = null) BlockchainProcessor.Options.NoReceipts); OneTimeChainProcessor chainProcessor = new( - txProcessingEnv.StateProvider, + scope.WorldState, blockchainProcessor); return new BlockProducerEnv { BlockTree = readOnlyBlockTree, ChainProcessor = chainProcessor, - ReadOnlyStateProvider = txProcessingEnv.StateProvider, + ReadOnlyStateProvider = scope.WorldState, TxSource = CreateTxSourceForProducer(additionalTxSource, txProcessingEnv, _txPool, _blocksConfig, _transactionComparerProvider, _logManager), ReadOnlyTxProcessingEnv = txProcessingEnv }; @@ -134,7 +139,8 @@ protected virtual TxPoolTxSource CreateTxPoolTxSource( protected virtual ITxFilterPipeline CreateTxSourceFilter(IBlocksConfig blocksConfig) => TxFilterPipelineBuilder.CreateStandardFilteringPipeline(_logManager, _specProvider, blocksConfig); - protected virtual BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv, + protected virtual BlockProcessor CreateBlockProcessor( + IReadOnlyTxProcessingScope readOnlyTxProcessingEnv, ISpecProvider specProvider, IBlockValidator blockValidator, IRewardCalculatorSource rewardCalculatorSource, @@ -144,14 +150,13 @@ protected virtual BlockProcessor CreateBlockProcessor(ReadOnlyTxProcessingEnv re blockValidator, rewardCalculatorSource.Get(readOnlyTxProcessingEnv.TransactionProcessor), TransactionsExecutorFactory.Create(readOnlyTxProcessingEnv), - readOnlyTxProcessingEnv.StateProvider, + readOnlyTxProcessingEnv.WorldState, receiptStorage, - NullWitnessCollector.Instance, - new BlockhashStore(_blockTree, _specProvider, readOnlyTxProcessingEnv.StateProvider), + new BlockhashStore(_blockTree, _specProvider, readOnlyTxProcessingEnv.WorldState), readOnlyTxProcessingEnv.TransactionProcessor, logManager, - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager)), - consensusRequestsProcessor: _consensusRequestsProcessor); - + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.WorldState, logManager)), + consensusRequestsProcessor: _consensusRequestsProcessor + ); } } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerTransactionsExecutorFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerTransactionsExecutorFactory.cs index 3f509d1eb45..5f00e0e76a0 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerTransactionsExecutorFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerTransactionsExecutorFactory.cs @@ -3,6 +3,7 @@ using Nethermind.Consensus.Processing; using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; namespace Nethermind.Consensus.Producers @@ -19,7 +20,7 @@ public BlockProducerTransactionsExecutorFactory(ISpecProvider specProvider, ILog _logManager = logManager; } - public IBlockProcessor.IBlockTransactionsExecutor Create(ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv) => + public IBlockProcessor.IBlockTransactionsExecutor Create(IReadOnlyTxProcessingScope readOnlyTxProcessingEnv) => new BlockProcessor.BlockProductionTransactionsExecutor(readOnlyTxProcessingEnv, _specProvider, _logManager); } } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/DevBlockProducer.cs b/src/Nethermind/Nethermind.Consensus/Producers/DevBlockProducer.cs index 162a9e2dfcb..d164fda7537 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/DevBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/DevBlockProducer.cs @@ -23,7 +23,6 @@ public DevBlockProducer( IBlockchainProcessor? processor, IWorldState? stateProvider, IBlockTree? blockTree, - IBlockProductionTrigger? trigger, ITimestamper? timestamper, ISpecProvider? specProvider, IBlocksConfig? blockConfig, @@ -33,7 +32,6 @@ public DevBlockProducer( processor, new NethDevSealEngine(), blockTree, - trigger, stateProvider, new FollowOtherMiners(specProvider!), timestamper, diff --git a/src/Nethermind/Nethermind.Consensus/Producers/IBlockProducerInfo.cs b/src/Nethermind/Nethermind.Consensus/Producers/IBlockProducerInfo.cs index 53c35e52ab8..1df7ce39e70 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/IBlockProducerInfo.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/IBlockProducerInfo.cs @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; +using Nethermind.Core; using Nethermind.Evm.Tracing; namespace Nethermind.Consensus.Producers @@ -8,7 +10,7 @@ namespace Nethermind.Consensus.Producers public interface IBlockProducerInfo { IBlockProducer BlockProducer { get; } - IManualBlockProductionTrigger BlockProductionTrigger { get; } + IBlockProductionCondition Condition { get; } IBlockTracer BlockTracer => NullBlockTracer.Instance; } } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/IBlockProductionCondition.cs b/src/Nethermind/Nethermind.Consensus/Producers/IBlockProductionCondition.cs new file mode 100644 index 00000000000..2c0feb2755d --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Producers/IBlockProductionCondition.cs @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; + +namespace Nethermind.Consensus.Producers; + +public interface IBlockProductionCondition +{ + bool CanProduce(BlockHeader parentHeader); +} + +public class AlwaysOkBlockProductionCondition : IBlockProductionCondition +{ + public static IBlockProductionCondition Instance = new AlwaysOkBlockProductionCondition(); + + public bool CanProduce(BlockHeader parentHeader) + { + return true; + } +} diff --git a/src/Nethermind/Nethermind.Consensus/Producers/IBlockTransactionsExecutorFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/IBlockTransactionsExecutorFactory.cs index 9ffd775764e..d3164780c86 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/IBlockTransactionsExecutorFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/IBlockTransactionsExecutorFactory.cs @@ -2,11 +2,12 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Consensus.Processing; +using Nethermind.Evm.TransactionProcessing; namespace Nethermind.Consensus.Producers { public interface IBlockTransactionsExecutorFactory { - IBlockProcessor.IBlockTransactionsExecutor Create(ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv); + IBlockProcessor.IBlockTransactionsExecutor Create(IReadOnlyTxProcessingScope readOnlyTxProcessingEnv); } } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/MultipleBlockProducer.cs b/src/Nethermind/Nethermind.Consensus/Producers/MultipleBlockProducer.cs index 116e55bb3e7..57836b2e474 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/MultipleBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/MultipleBlockProducer.cs @@ -7,84 +7,41 @@ using System.Threading; using System.Threading.Tasks; using Nethermind.Core; +using Nethermind.Evm.Tracing; using Nethermind.Logging; namespace Nethermind.Consensus.Producers { public abstract class MultipleBlockProducer : IBlockProducer where T : IBlockProducerInfo { - private readonly IBlockProductionTrigger _blockProductionTrigger; private readonly IBestBlockPicker _bestBlockPicker; private readonly T[] _blockProducers; private readonly ILogger _logger; protected MultipleBlockProducer( - IBlockProductionTrigger blockProductionTrigger, IBestBlockPicker bestBlockPicker, ILogManager logManager, params T[] blockProducers) { if (blockProducers.Length == 0) throw new ArgumentException("Collection cannot be empty.", nameof(blockProducers)); - _blockProductionTrigger = blockProductionTrigger; _bestBlockPicker = bestBlockPicker; _blockProducers = blockProducers; _logger = logManager.GetClassLogger(); } - public Task Start() - { - for (int index = 0; index < _blockProducers.Length; index++) - { - IBlockProducer blockProducer = _blockProducers[index].BlockProducer; - blockProducer.Start(); - } - - _blockProductionTrigger.TriggerBlockProduction += OnBlockProduction; - return Task.CompletedTask; - } - - public Task StopAsync() - { - _blockProductionTrigger.TriggerBlockProduction -= OnBlockProduction; - - IList stopTasks = new List(); - for (int index = 0; index < _blockProducers.Length; index++) - { - IBlockProducer blockProducer = _blockProducers[index].BlockProducer; - stopTasks.Add(blockProducer.StopAsync()); - } - - return Task.WhenAll(stopTasks); - } - - public bool IsProducingBlocks(ulong? maxProducingInterval) - { - for (int index = 0; index < _blockProducers.Length; index++) - { - IBlockProducer blockProducer = _blockProducers[index].BlockProducer; - if (blockProducer.IsProducingBlocks(maxProducingInterval)) - { - return true; - } - } - - return false; - } - - public event EventHandler? BlockProduced; - - private void OnBlockProduction(object? sender, BlockProductionEventArgs e) - { - e.BlockProductionTask = TryProduceBlock(e.ParentHeader, e.CancellationToken); - } - - private async Task TryProduceBlock(BlockHeader? parentHeader, CancellationToken cancellationToken = default) + public async Task BuildBlock(BlockHeader? parentHeader, IBlockTracer? blockTracer = null, + PayloadAttributes? payloadAttributes = null, CancellationToken? token = null) { Task[] produceTasks = new Task[_blockProducers.Length]; for (int i = 0; i < _blockProducers.Length; i++) { T blockProducerInfo = _blockProducers[i]; - produceTasks[i] = blockProducerInfo.BlockProductionTrigger.BuildBlock(parentHeader, cancellationToken, blockProducerInfo.BlockTracer); + if (!blockProducerInfo.Condition.CanProduce(parentHeader)) + { + produceTasks[i] = Task.FromResult(null); + continue; + } + produceTasks[i] = blockProducerInfo.BlockProducer.BuildBlock(parentHeader, blockProducerInfo.BlockTracer, cancellationToken: token); } IEnumerable<(Block? Block, T BlockProducer)> blocksWithProducers; @@ -109,8 +66,6 @@ private void OnBlockProduction(object? sender, BlockProductionEventArgs e) { if (_logger.IsInfo) _logger.Info($"Picked block {bestBlock} to be included to the chain."); } - - BlockProduced?.Invoke(this, new BlockEventArgs(bestBlock)); } return bestBlock; diff --git a/src/Nethermind/Nethermind.Consensus/Producers/ProducedBlockSuggester.cs b/src/Nethermind/Nethermind.Consensus/Producers/ProducedBlockSuggester.cs index 94c1abbaecc..a061e7f6e8c 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/ProducedBlockSuggester.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/ProducedBlockSuggester.cs @@ -10,13 +10,13 @@ namespace Nethermind.Consensus.Producers public class ProducedBlockSuggester : IDisposable { private readonly IBlockTree _blockTree; - private readonly IBlockProducer _blockProducer; + private readonly IBlockProducerRunner _blockProducerRunner; - public ProducedBlockSuggester(IBlockTree blockTree, IBlockProducer blockProducer) + public ProducedBlockSuggester(IBlockTree blockTree, IBlockProducerRunner blockProducer) { _blockTree = blockTree; - _blockProducer = blockProducer; - _blockProducer.BlockProduced += OnBlockProduced; + _blockProducerRunner = blockProducer; + _blockProducerRunner.BlockProduced += OnBlockProduced; } private void OnBlockProduced(object? sender, BlockEventArgs e) @@ -28,6 +28,6 @@ private void OnBlockProduced(object? sender, BlockEventArgs e) } } - public void Dispose() => _blockProducer.BlockProduced -= OnBlockProduced; + public void Dispose() => _blockProducerRunner.BlockProduced -= OnBlockProduced; } } diff --git a/src/Nethermind/Nethermind.Consensus/Signer.cs b/src/Nethermind/Nethermind.Consensus/Signer.cs index 3a48950a129..0a22c939499 100644 --- a/src/Nethermind/Nethermind.Consensus/Signer.cs +++ b/src/Nethermind/Nethermind.Consensus/Signer.cs @@ -21,6 +21,8 @@ public class Signer : ISigner, ISignerStore public bool CanSign => _key is not null; + public bool CanSignHeader => false; + public Signer(ulong chainId, PrivateKey? key, ILogManager logManager) { _chainId = chainId; @@ -42,6 +44,11 @@ public Signature Sign(Hash256 message) return new Signature(rs, v); } + public Signature Sign(BlockHeader header) + { + return Sign(header.Hash); + } + public ValueTask Sign(Transaction tx) { Hash256 hash = Keccak.Compute(Rlp.Encode(tx, true, true, _chainId).Bytes); diff --git a/src/Nethermind/Nethermind.Consensus/StandardBlockProducerRunner.cs b/src/Nethermind/Nethermind.Consensus/StandardBlockProducerRunner.cs new file mode 100644 index 00000000000..25dc0cb8a03 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/StandardBlockProducerRunner.cs @@ -0,0 +1,79 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Threading; +using System.Threading.Tasks; +using Nethermind.Blockchain; +using Nethermind.Consensus.Producers; +using Nethermind.Core; +using Nethermind.Evm.Tracing; +using Nethermind.Logging; + +namespace Nethermind.Consensus; + +public class StandardBlockProducerRunner(IBlockProductionTrigger trigger, IBlockTree blockTree, IBlockProducer blockProducer) : IBlockProducerRunner +{ + private bool _isRunning; + private CancellationTokenSource? _producerCancellationToken; + private DateTime _lastProducedBlockDateTime; + public ILogger Logger { get; } + + private void OnTriggerBlockProduction(object? sender, BlockProductionEventArgs e) + { + BlockHeader? parent = blockTree.GetProducedBlockParent(e.ParentHeader); + e.BlockProductionTask = TryProduceAndAnnounceNewBlock(e.CancellationToken, parent, e.BlockTracer, e.PayloadAttributes); + } + + private async Task TryProduceAndAnnounceNewBlock(CancellationToken token, BlockHeader? parentHeader, IBlockTracer? blockTracer = null, PayloadAttributes? payloadAttributes = null) + { + using CancellationTokenSource tokenSource = CancellationTokenSource.CreateLinkedTokenSource(token, _producerCancellationToken!.Token); + token = tokenSource.Token; + + Block? block = null; + try + { + block = await blockProducer.BuildBlock(parentHeader, blockTracer, payloadAttributes, token); + if (block is not null) + { + _lastProducedBlockDateTime = DateTime.UtcNow; + BlockProduced?.Invoke(this, new BlockEventArgs(block)); + } + } + catch (Exception e) when (!(e is TaskCanceledException)) + { + if (Logger.IsError) Logger.Error("Failed to produce block", e); + Metrics.FailedBlockSeals++; + throw; + } + + return block; + } + + public virtual void Start() + { + _producerCancellationToken = new CancellationTokenSource(); + _isRunning = true; + trigger.TriggerBlockProduction += OnTriggerBlockProduction; + _lastProducedBlockDateTime = DateTime.UtcNow; + } + + public virtual Task StopAsync() + { + _producerCancellationToken?.Cancel(); + _isRunning = false; + trigger.TriggerBlockProduction -= OnTriggerBlockProduction; + _producerCancellationToken?.Dispose(); + return Task.CompletedTask; + } + + protected virtual bool IsRunning() => _isRunning; + + public bool IsProducingBlocks(ulong? maxProducingInterval) + { + if (Logger.IsTrace) Logger.Trace($"Checking IsProducingBlocks: maxProducingInterval {maxProducingInterval}, _lastProducedBlock {_lastProducedBlockDateTime}, IsRunning() {IsRunning()}"); + return IsRunning() && (maxProducingInterval is null || _lastProducedBlockDateTime.AddSeconds(maxProducingInterval.Value) > DateTime.UtcNow); + } + + public event EventHandler? BlockProduced; +} diff --git a/src/Nethermind/Nethermind.Consensus/Validators/SimulateBlockValidatorProxy.cs b/src/Nethermind/Nethermind.Consensus/Validators/SimulateBlockValidatorProxy.cs new file mode 100644 index 00000000000..83381ed2271 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Validators/SimulateBlockValidatorProxy.cs @@ -0,0 +1,30 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; + +namespace Nethermind.Consensus.Validators; + +public class SimulateBlockValidatorProxy(IBlockValidator baseBlockValidator) : IBlockValidator +{ + public bool ValidateWithdrawals(Block block, out string? error) => + baseBlockValidator.ValidateWithdrawals(block, out error); + + public bool ValidateOrphanedBlock(Block block, out string? error) => + baseBlockValidator.ValidateOrphanedBlock(block, out error); + + public bool ValidateSuggestedBlock(Block block, out string? error, bool validateHashes = true) => + baseBlockValidator.ValidateSuggestedBlock(block, out error, validateHashes); + + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, out string? error) + { + error = ""; + return true; + } + + public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle, out string? error) => + baseBlockValidator.Validate(header, parent, isUncle, out error); + + public bool Validate(BlockHeader header, bool isUncle, out string? error) => + baseBlockValidator.Validate(header, isUncle, out error); +} diff --git a/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs b/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs index c9fe1bddde3..e315c5a5a8e 100644 --- a/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Withdrawals/WithdrawalProcessor.cs @@ -31,8 +31,10 @@ public void ProcessWithdrawals(Block block, IReleaseSpec spec) if (block.Withdrawals is not null) { - foreach (var withdrawal in block.Withdrawals) + Withdrawal[] blockWithdrawals = block.Withdrawals; + for (int i = 0; i < blockWithdrawals.Length; i++) { + Withdrawal withdrawal = blockWithdrawals[i]; if (_logger.IsTrace) _logger.Trace($" {withdrawal.AmountInGwei} GWei to account {withdrawal.Address}"); // Consensus clients are using Gwei for withdrawals amount. We need to convert it to Wei before applying state changes https://github.com/ethereum/execution-apis/pull/354 diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockProducer.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockProducer.cs index bb4676e4d03..7aa64141a0d 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockProducer.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockProducer.cs @@ -24,7 +24,6 @@ public TestBlockProducer( IWorldState stateProvider, ISealer sealer, IBlockTree blockTree, - IBlockProductionTrigger blockProductionTrigger, ITimestamper timestamper, ISpecProvider specProvider, ILogManager logManager, @@ -34,7 +33,6 @@ public TestBlockProducer( processor, sealer, blockTree, - blockProductionTrigger, stateProvider, new FollowOtherMiners(specProvider), timestamper, diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 715cca275de..8e0d79aff7e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -9,7 +9,10 @@ using Nethermind.Blockchain.Blocks; using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Blockchain.Find; +using Nethermind.Blockchain.FullPruning; +using Nethermind.Blockchain.Headers; using Nethermind.Blockchain.Receipts; +using Nethermind.Blockchain.Synchronization; using Nethermind.Config; using Nethermind.Consensus; using Nethermind.Consensus.Comparers; @@ -76,6 +79,7 @@ public IBlockFinder BlockFinder public IDb StateDb => DbProvider.StateDb; public TrieStore TrieStore { get; set; } = null!; public IBlockProducer BlockProducer { get; private set; } = null!; + public IBlockProducerRunner BlockProducerRunner { get; protected set; } = null!; public IDbProvider DbProvider { get; set; } = null!; public ISpecProvider SpecProvider { get; set; } = null!; @@ -117,6 +121,7 @@ protected TestBlockchain() public ProducedBlockSuggester Suggester { get; protected set; } = null!; public IConsensusRequestsProcessor? ConsensusRequestsProcessor { get; protected set; } = null!; + public ChainLevelInfoRepository ChainLevelInfoRepository { get; protected set; } = null!; public static TransactionBuilder BuildSimpleTransaction => Builders.Build.A.Transaction.SignedAndResolved(TestItem.PrivateKeyA).To(AccountB); @@ -128,7 +133,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = EthereumEcdsa = new EthereumEcdsa(SpecProvider.ChainId, LogManager); DbProvider = await CreateDbProvider(); TrieStore = new TrieStore(StateDb, LogManager); - State = new WorldState(TrieStore, DbProvider.CodeDb, LogManager); + State = new WorldState(TrieStore, DbProvider.CodeDb, LogManager, new PreBlockCaches()); // Eip4788 precompile state account if (specProvider?.GenesisSpec?.IsBeaconBlockRootAvailable ?? false) @@ -161,10 +166,17 @@ protected virtual async Task Build(ISpecProvider? specProvider = WorldStateManager = new WorldStateManager(State, TrieStore, DbProvider, LimboLogs.Instance); StateReader = new StateReader(ReadOnlyTrieStore, CodeDb, LogManager); - BlockTree = Builders.Build.A.BlockTree() - .WithSpecProvider(SpecProvider) - .WithoutSettingHead - .TestObject; + ChainLevelInfoRepository = new ChainLevelInfoRepository(this.DbProvider.BlockInfosDb); + BlockTree = new BlockTree(new BlockStore(DbProvider.BlocksDb), + new HeaderStore(DbProvider.HeadersDb, DbProvider.BlockNumbersDb), + DbProvider.BlockInfosDb, + DbProvider.MetadataDb, + new BlockStore(new TestMemDb(), 100), + ChainLevelInfoRepository, + SpecProvider, + NullBloomStorage.Instance, + new SyncConfig(), + LimboLogs.Instance); ReadOnlyState = new ChainHeadReadOnlyStateProvider(BlockTree, StateReader); TransactionComparerProvider = new TransactionComparerProvider(SpecProvider, BlockTree); @@ -176,10 +188,11 @@ protected virtual async Task Build(ISpecProvider? specProvider = NonceManager = new NonceManager(chainHeadInfoProvider.AccountStateProvider); _trieStoreWatcher = new TrieStoreBoundaryWatcher(WorldStateManager, BlockTree, LogManager); - + CodeInfoRepository codeInfoRepository = new(); ReceiptStorage = new InMemoryReceiptStorage(blockTree: BlockTree); - VirtualMachine virtualMachine = new(new BlockhashProvider(BlockTree, SpecProvider, State, LogManager), SpecProvider, LogManager); - TxProcessor = new TransactionProcessor(SpecProvider, State, virtualMachine, LogManager); + VirtualMachine virtualMachine = new(new BlockhashProvider(BlockTree, SpecProvider, State, LogManager), SpecProvider, codeInfoRepository, LogManager); + TxProcessor = new TransactionProcessor(SpecProvider, State, virtualMachine, codeInfoRepository, LogManager); + BlockPreprocessorStep = new RecoverSignatures(EthereumEcdsa, TxPool, SpecProvider, LogManager); HeaderValidator = new HeaderValidator(BlockTree, Always.Valid, SpecProvider, LogManager); @@ -211,13 +224,14 @@ protected virtual async Task Build(ISpecProvider? specProvider = TxPoolTxSource txPoolTxSource = CreateTxPoolTxSource(); ITransactionComparerProvider transactionComparerProvider = new TransactionComparerProvider(SpecProvider, BlockFinder); BlockProducer = CreateTestBlockProducer(txPoolTxSource, sealer, transactionComparerProvider); - await BlockProducer.Start(); - Suggester = new ProducedBlockSuggester(BlockTree, BlockProducer); + BlockProducerRunner ??= CreateBlockProducerRunner(); + BlockProducerRunner.Start(); + Suggester = new ProducedBlockSuggester(BlockTree, BlockProducerRunner); _resetEvent = new SemaphoreSlim(0); _suggestedBlockResetEvent = new ManualResetEvent(true); BlockTree.BlockAddedToMain += BlockAddedToMain; - BlockProducer.BlockProduced += (s, e) => + BlockProducerRunner.BlockProduced += (s, e) => { _suggestedBlockResetEvent.Set(); }; @@ -287,13 +301,17 @@ protected virtual IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolTx env.ReadOnlyStateProvider, sealer, BlockTree, - BlockProductionTrigger, Timestamper, SpecProvider, LogManager, blocksConfig); } + protected virtual IBlockProducerRunner CreateBlockProducerRunner() + { + return new StandardBlockProducerRunner(BlockProductionTrigger, BlockTree, BlockProducer); + } + public virtual ILogManager LogManager { get; set; } = LimboLogs.Instance; protected virtual TxPool.TxPool CreateTxPool() => @@ -369,7 +387,6 @@ protected virtual IBlockProcessor CreateBlockProcessor() => new BlockProcessor.BlockValidationTransactionsExecutor(TxProcessor, State), State, ReceiptStorage, - NullWitnessCollector.Instance, new BlockhashStore(BlockTree, SpecProvider, State), TxProcessor, LogManager, @@ -429,7 +446,7 @@ public void AddTransactions(params Transaction[] txs) public virtual void Dispose() { - BlockProducer?.StopAsync(); + BlockProducerRunner?.StopAsync(); if (DbProvider is not null) { CodeDb?.Dispose(); diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index c8596e8021e..a43039ef8af 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -97,7 +97,7 @@ public BlockBuilder WithTransactions(int txCount, ISpecProvider specProvider) } BlockBuilder result = WithTransactions(txs); - Hash256 receiptHash = ReceiptTrie.CalculateRoot(specProvider.GetSpec(TestObjectInternal.Header), receipts, ReceiptMessageDecoder.Instance); + Hash256 receiptHash = ReceiptTrie.CalculateRoot(specProvider.GetSpec(TestObjectInternal.Header), receipts, Rlp.GetStreamDecoder()!); TestObjectInternal.Header.ReceiptsRoot = receiptHash; return result; } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockTreeBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockTreeBuilder.cs index 39cbca5aa2b..1f509b8e621 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockTreeBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockTreeBuilder.cs @@ -299,8 +299,7 @@ private Block CreateBlock(int splitVariant, int splitFrom, int blockIndex, Block currentBlock.Header.TxRoot = TxTrie.CalculateRoot(currentBlock.Transactions); TxReceipt[] txReceipts = receipts.ToArray(); currentBlock.Header.ReceiptsRoot = - ReceiptTrie.CalculateRoot(_specProvider.GetSpec(currentBlock.Header), txReceipts, - ReceiptMessageDecoder.Instance); + ReceiptTrie.CalculateRoot(_specProvider.GetSpec(currentBlock.Header), txReceipts, Rlp.GetStreamDecoder()!); currentBlock.Header.Hash = currentBlock.CalculateHash(); foreach (TxReceipt txReceipt in txReceipts) { diff --git a/src/Nethermind/Nethermind.Core.Test/Caching/LruCacheLowObjectTests.cs b/src/Nethermind/Nethermind.Core.Test/Caching/LruCacheLowObjectTests.cs new file mode 100644 index 00000000000..de3864b84f8 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Caching/LruCacheLowObjectTests.cs @@ -0,0 +1,182 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using FluentAssertions; +using Nethermind.Core; +using Nethermind.Core.Caching; +using Nethermind.Core.Test.Builders; +using Nethermind.Int256; +using NUnit.Framework; + +using Cache = Nethermind.Core.Caching.LruCacheLowObject; + +namespace Nethermind.Core.Test.Caching +{ + public class LruCacheLowObjectTests + { + private static Cache Create() + { + return new Cache(Capacity, "test")!; + } + + private const int Capacity = 16; + + private readonly Account[] _accounts = new Account[Capacity * 2]; + private readonly Address[] _addresses = new Address[Capacity * 2]; + + [SetUp] + public void Setup() + { + for (int i = 0; i < Capacity * 2; i++) + { + _accounts[i] = Build.An.Account.WithBalance((UInt256)i).TestObject; + _addresses[i] = Build.An.Address.FromNumber(i).TestObject; + } + } + + [Test] + public void At_capacity() + { + Cache cache = Create(); + for (int i = 0; i < Capacity; i++) + { + cache.Set(_addresses[i], _accounts[i]).Should().BeTrue(); + } + + Account? account = cache.Get(_addresses[Capacity - 1]); + Assert.That(account, Is.EqualTo(_accounts[Capacity - 1])); + } + + [Test] + public void Can_reset() + { + Cache cache = Create(); + cache.Set(_addresses[0], _accounts[0]).Should().BeTrue(); + cache.Set(_addresses[0], _accounts[1]).Should().BeFalse(); + cache.Get(_addresses[0]).Should().Be(_accounts[1]); + } + + [Test] + public void Can_ask_before_first_set() + { + Cache cache = Create(); + cache.Get(_addresses[0]).Should().BeNull(); + } + + [Test] + public void Can_clear() + { + Cache cache = Create(); + cache.Set(_addresses[0], _accounts[0]).Should().BeTrue(); + cache.Clear(); + cache.Get(_addresses[0]).Should().BeNull(); + cache.Set(_addresses[0], _accounts[1]).Should().BeTrue(); + cache.Get(_addresses[0]).Should().Be(_accounts[1]); + } + + [Test] + public void Beyond_capacity() + { + Cache cache = Create(); + for (int i = 0; i < Capacity * 2; i++) + { + cache.Set(_addresses[i], _accounts[i]).Should().BeTrue(); + } + + Account? account = cache.Get(_addresses[Capacity]); + account.Should().Be(_accounts[Capacity]); + } + + [Test] + public void Beyond_capacity_lru() + { + Cache cache = Create(); + for (int i = 0; i < Capacity * 2; i++) + { + for (int ii = 0; ii < Capacity / 2; ii++) + { + cache.Set(_addresses[i], _accounts[i]); + } + cache.Set(_addresses[i], _accounts[i]); + } + } + + [Test] + public void Can_set_and_then_set_null() + { + Cache cache = Create(); + cache.Set(_addresses[0], _accounts[0]).Should().BeTrue(); + cache.Set(_addresses[0], _accounts[0]).Should().BeFalse(); + cache.Set(_addresses[0], null!).Should().BeTrue(); + cache.Get(_addresses[0]).Should().Be(null); + } + + [Test] + public void Can_delete() + { + Cache cache = Create(); + cache.Set(_addresses[0], _accounts[0]); + cache.Delete(_addresses[0]).Should().BeTrue(); + cache.Get(_addresses[0]).Should().Be(null); + cache.Delete(_addresses[0]).Should().BeFalse(); + } + + [Test] + public void Clear_should_free_all_capacity() + { + Cache cache = Create(); + for (int i = 0; i < Capacity; i++) + { + cache.Set(_addresses[i], _accounts[i]).Should().BeTrue(); + } + + cache.Clear(); + + static int MapForRefill(int index) => (index + 1) % Capacity; + + // fill again + for (int i = 0; i < Capacity; i++) + { + cache.Set(_addresses[i], _accounts[MapForRefill(i)]).Should().BeTrue(); + } + + // validate + for (int i = 0; i < Capacity; i++) + { + cache.Get(_addresses[i]).Should().Be(_accounts[MapForRefill(i)]); + } + } + + [Test] + public void Delete_keeps_internal_structure() + { + int maxCapacity = 32; + int itemsToKeep = 10; + int iterations = 40; + + LruCacheLowObject cache = new(maxCapacity, "test"); + + for (int i = 0; i < iterations; i++) + { + cache.Set(i, i).Should().BeTrue(); + var remove = i - itemsToKeep; + if (remove >= 0) + cache.Delete(remove).Should().BeTrue(); + } + + int count = 0; + + for (int i = 0; i < iterations; i++) + { + if (cache.TryGet(i, out int val)) + { + count++; + val.Should().Be(i); + } + } + + count.Should().Be(itemsToKeep); + } + } +} diff --git a/src/Nethermind/Nethermind.Core.Test/Caching/LruCacheTests.cs b/src/Nethermind/Nethermind.Core.Test/Caching/LruCacheTests.cs index 35399b9e56d..95e37aa7c91 100755 --- a/src/Nethermind/Nethermind.Core.Test/Caching/LruCacheTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Caching/LruCacheTests.cs @@ -39,7 +39,7 @@ public void At_capacity() ICache cache = Create(); for (int i = 0; i < Capacity; i++) { - cache.Set(_addresses[i], _accounts[i]); + cache.Set(_addresses[i], _accounts[i]).Should().BeTrue(); } Account? account = cache.Get(_addresses[Capacity - 1]); @@ -50,8 +50,8 @@ public void At_capacity() public void Can_reset() { ICache cache = Create(); - cache.Set(_addresses[0], _accounts[0]); - cache.Set(_addresses[0], _accounts[1]); + cache.Set(_addresses[0], _accounts[0]).Should().BeTrue(); + cache.Set(_addresses[0], _accounts[1]).Should().BeFalse(); cache.Get(_addresses[0]).Should().Be(_accounts[1]); } @@ -66,21 +66,35 @@ public void Can_ask_before_first_set() public void Can_clear() { ICache cache = Create(); - cache.Set(_addresses[0], _accounts[0]); + cache.Set(_addresses[0], _accounts[0]).Should().BeTrue(); cache.Clear(); cache.Get(_addresses[0]).Should().BeNull(); - cache.Set(_addresses[0], _accounts[1]); + cache.Set(_addresses[0], _accounts[1]).Should().BeTrue(); cache.Get(_addresses[0]).Should().Be(_accounts[1]); } [Test] - public void Beyond_capacity() + public void Beyond_capacity_lru() { ICache cache = Create(); for (int i = 0; i < Capacity * 2; i++) { + for (int ii = 0; ii < Capacity / 2; ii++) + { + cache.Set(_addresses[i], _accounts[i]); + } cache.Set(_addresses[i], _accounts[i]); } + } + + [Test] + public void Beyond_capacity() + { + ICache cache = Create(); + for (int i = 0; i < Capacity * 2; i++) + { + cache.Set(_addresses[i], _accounts[i]).Should().BeTrue(); + } Account? account = cache.Get(_addresses[Capacity]); account.Should().Be(_accounts[Capacity]); diff --git a/src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheLowObjectTests.cs b/src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheLowObjectTests.cs new file mode 100644 index 00000000000..cb8b07dc324 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheLowObjectTests.cs @@ -0,0 +1,104 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using FluentAssertions; +using Nethermind.Core.Caching; +using Nethermind.Core.Test.Builders; +using Nethermind.Int256; +using NUnit.Framework; + +namespace Nethermind.Core.Test.Caching +{ + [TestFixture] + public class LruKeyCacheLowObjectTests + { + private const int Capacity = 16; + + private readonly Account[] _accounts = new Account[Capacity * 2]; + private readonly Address[] _addresses = new Address[Capacity * 2]; + + [SetUp] + public void Setup() + { + for (int i = 0; i < Capacity * 2; i++) + { + _accounts[i] = Build.An.Account.WithBalance((UInt256)i).TestObject; + _addresses[i] = Build.An.Address.FromNumber(i).TestObject; + } + } + + [Test] + public void At_capacity() + { + LruKeyCacheLowObject cache = new(Capacity, "test"); + for (int i = 0; i < Capacity; i++) + { + cache.Set(_addresses[i]); + } + + cache.Get(_addresses[Capacity - 1]).Should().BeTrue(); + } + + [Test] + public void Can_reset() + { + LruKeyCacheLowObject cache = new(Capacity, "test"); + cache.Set(_addresses[0]).Should().BeTrue(); + cache.Set(_addresses[0]).Should().BeFalse(); + cache.Get(_addresses[0]).Should().BeTrue(); + } + + [Test] + public void Can_ask_before_first_set() + { + LruKeyCacheLowObject cache = new(Capacity, "test"); + cache.Get(_addresses[0]).Should().BeFalse(); + } + + [Test] + public void Can_clear() + { + LruKeyCacheLowObject cache = new(Capacity, "test"); + cache.Set(_addresses[0]).Should().BeTrue(); + cache.Clear(); + cache.Get(_addresses[0]).Should().BeFalse(); + cache.Set(_addresses[0]).Should().BeTrue(); + cache.Get(_addresses[0]).Should().BeTrue(); + } + + [Test] + public void Beyond_capacity() + { + LruKeyCacheLowObject cache = new(Capacity, "test"); + for (int i = 0; i < Capacity * 2; i++) + { + cache.Set(_addresses[i]); + } + + cache.Get(_addresses[Capacity]).Should().BeTrue(); + } + + [Test] + public void Beyond_capacity_lru() + { + LruKeyCacheLowObject cache = new(Capacity, "test"); + for (int i = 0; i < Capacity * 2; i++) + { + for (int ii = 0; ii < Capacity / 2; ii++) + { + cache.Set(_addresses[i]); + } + cache.Set(_addresses[i]); + } + } + + [Test] + public void Can_delete() + { + LruKeyCacheLowObject cache = new(Capacity, "test"); + cache.Set(_addresses[0]); + cache.Delete(_addresses[0]); + cache.Get(_addresses[0]).Should().BeFalse(); + } + } +} diff --git a/src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheNonConcurrentTests.cs b/src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheNonConcurrentTests.cs new file mode 100644 index 00000000000..614ba3cfa4e --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheNonConcurrentTests.cs @@ -0,0 +1,104 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using FluentAssertions; +using Nethermind.Core.Caching; +using Nethermind.Core.Test.Builders; +using Nethermind.Int256; +using NUnit.Framework; + +namespace Nethermind.Core.Test.Caching +{ + [TestFixture] + public class LruKeyCacheNonConcurrentTests + { + private const int Capacity = 16; + + private readonly Account[] _accounts = new Account[Capacity * 2]; + private readonly Address[] _addresses = new Address[Capacity * 2]; + + [SetUp] + public void Setup() + { + for (int i = 0; i < Capacity * 2; i++) + { + _accounts[i] = Build.An.Account.WithBalance((UInt256)i).TestObject; + _addresses[i] = Build.An.Address.FromNumber(i).TestObject; + } + } + + [Test] + public void At_capacity() + { + LruKeyCacheNonConcurrent
cache = new(Capacity, "test"); + for (int i = 0; i < Capacity; i++) + { + cache.Set(_addresses[i]).Should().BeTrue(); + } + + cache.Get(_addresses[Capacity - 1]).Should().BeTrue(); + } + + [Test] + public void Can_reset() + { + LruKeyCacheNonConcurrent
cache = new(Capacity, "test"); + cache.Set(_addresses[0]).Should().BeTrue(); + cache.Set(_addresses[0]).Should().BeFalse(); + cache.Get(_addresses[0]).Should().BeTrue(); + } + + [Test] + public void Can_ask_before_first_set() + { + LruKeyCacheNonConcurrent
cache = new(Capacity, "test"); + cache.Get(_addresses[0]).Should().BeFalse(); + } + + [Test] + public void Can_clear() + { + LruKeyCacheNonConcurrent
cache = new(Capacity, "test"); + cache.Set(_addresses[0]).Should().BeTrue(); + cache.Clear(); + cache.Get(_addresses[0]).Should().BeFalse(); + cache.Set(_addresses[0]).Should().BeTrue(); + cache.Get(_addresses[0]).Should().BeTrue(); + } + + [Test] + public void Beyond_capacity() + { + LruKeyCacheNonConcurrent
cache = new(Capacity, "test"); + for (int i = 0; i < Capacity * 2; i++) + { + cache.Set(_addresses[i]); + } + + cache.Get(_addresses[Capacity]).Should().BeTrue(); + } + + [Test] + public void Beyond_capacity_lru() + { + LruKeyCacheNonConcurrent cache = new(Capacity, "test"); + for (int i = 0; i < Capacity * 2; i++) + { + for (int ii = 0; ii < Capacity / 2; ii++) + { + cache.Set(_addresses[i]); + } + cache.Set(_addresses[i]); + } + } + + [Test] + public void Can_delete() + { + LruKeyCacheNonConcurrent
cache = new(Capacity, "test"); + cache.Set(_addresses[0]).Should().BeTrue(); + cache.Delete(_addresses[0]); + cache.Get(_addresses[0]).Should().BeFalse(); + } + } +} diff --git a/src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheTests.cs b/src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheTests.cs index 05185bfa433..5cf04410450 100644 --- a/src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Caching/LruKeyCacheTests.cs @@ -33,7 +33,7 @@ public void At_capacity() LruKeyCache
cache = new(Capacity, "test"); for (int i = 0; i < Capacity; i++) { - cache.Set(_addresses[i]); + cache.Set(_addresses[i]).Should().BeTrue(); } cache.Get(_addresses[Capacity - 1]).Should().BeTrue(); @@ -72,17 +72,31 @@ public void Beyond_capacity() LruKeyCache
cache = new(Capacity, "test"); for (int i = 0; i < Capacity * 2; i++) { - cache.Set(_addresses[i]); + cache.Set(_addresses[i]).Should().BeTrue(); } cache.Get(_addresses[Capacity]).Should().BeTrue(); } + [Test] + public void Beyond_capacity_lru() + { + LruKeyCache cache = new(Capacity, "test"); + for (int i = 0; i < Capacity * 2; i++) + { + for (int ii = 0; ii < Capacity / 2; ii++) + { + cache.Set(_addresses[i]); + } + cache.Set(_addresses[i]); + } + } + [Test] public void Can_delete() { LruKeyCache
cache = new(Capacity, "test"); - cache.Set(_addresses[0]); + cache.Set(_addresses[0]).Should().BeTrue(); cache.Delete(_addresses[0]); cache.Get(_addresses[0]).Should().BeFalse(); } diff --git a/src/Nethermind/Nethermind.Core.Test/Caching/SpanLruCacheTests.cs b/src/Nethermind/Nethermind.Core.Test/Caching/SpanLruCacheTests.cs index f30d930bf53..5cf255515f4 100755 --- a/src/Nethermind/Nethermind.Core.Test/Caching/SpanLruCacheTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Caching/SpanLruCacheTests.cs @@ -40,7 +40,7 @@ public void At_capacity() ISpanCache cache = Create(); for (int i = 0; i < Capacity; i++) { - cache.Set(_addresses[i].Bytes, _accounts[i]); + cache.Set(_addresses[i].Bytes, _accounts[i]).Should().BeTrue(); } Account? account = cache.Get(_addresses[Capacity - 1].Bytes); @@ -51,8 +51,8 @@ public void At_capacity() public void Can_reset() { ISpanCache cache = Create(); - cache.Set(_addresses[0].Bytes, _accounts[0]); - cache.Set(_addresses[0].Bytes, _accounts[1]); + cache.Set(_addresses[0].Bytes, _accounts[0]).Should().BeTrue(); + cache.Set(_addresses[0].Bytes, _accounts[1]).Should().BeFalse(); cache.Get(_addresses[0].Bytes).Should().Be(_accounts[1]); } @@ -67,10 +67,10 @@ public void Can_ask_before_first_set() public void Can_clear() { ISpanCache cache = Create(); - cache.Set(_addresses[0].Bytes, _accounts[0]); + cache.Set(_addresses[0].Bytes, _accounts[0]).Should().BeTrue(); cache.Clear(); cache.Get(_addresses[0].Bytes).Should().BeNull(); - cache.Set(_addresses[0].Bytes, _accounts[1]); + cache.Set(_addresses[0].Bytes, _accounts[1]).Should().BeTrue(); cache.Get(_addresses[0].Bytes).Should().Be(_accounts[1]); } @@ -80,13 +80,27 @@ public void Beyond_capacity() ISpanCache cache = Create(); for (int i = 0; i < Capacity * 2; i++) { - cache.Set(_addresses[i].Bytes, _accounts[i]); + cache.Set(_addresses[i].Bytes, _accounts[i]).Should().BeTrue(); } Account? account = cache.Get(_addresses[Capacity].Bytes); account.Should().Be(_accounts[Capacity]); } + [Test] + public void Beyond_capacity_lru() + { + ISpanCache cache = Create(); + for (int i = 0; i < Capacity * 2; i++) + { + for (int ii = 0; ii < Capacity / 2; ii++) + { + cache.Set(_addresses[i].Bytes, _accounts[i]); + } + cache.Set(_addresses[i].Bytes, _accounts[i]); + } + } + [Test] public void Can_set_and_then_set_null() { @@ -101,7 +115,7 @@ public void Can_set_and_then_set_null() public void Can_delete() { ISpanCache cache = Create(); - cache.Set(_addresses[0].Bytes, _accounts[0]); + cache.Set(_addresses[0].Bytes, _accounts[0]).Should().BeTrue(); cache.Delete(_addresses[0].Bytes).Should().BeTrue(); cache.Get(_addresses[0].Bytes).Should().Be(null); cache.Delete(_addresses[0].Bytes).Should().BeFalse(); diff --git a/src/Nethermind/Nethermind.Core.Test/Json/UInt256DictionaryKeyConverterTests.cs b/src/Nethermind/Nethermind.Core.Test/Json/UInt256DictionaryKeyConverterTests.cs index 533e777f8af..2f37bd6b572 100644 --- a/src/Nethermind/Nethermind.Core.Test/Json/UInt256DictionaryKeyConverterTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Json/UInt256DictionaryKeyConverterTests.cs @@ -115,7 +115,7 @@ public void WriteJson_Dictionary_SerializedCorrectly() { new UInt256(1), new UInt256(12345) } }; string serialised = JsonSerializer.Serialize(dictionary, Options); - + serialised = serialised.Replace("\r\n", "\n"); string expected = """ { "0x1": "0x3039" diff --git a/src/Nethermind/Nethermind.Core.Test/KeccakTests.cs b/src/Nethermind/Nethermind.Core.Test/KeccakTests.cs index a02f5663e31..d0bfa06581a 100644 --- a/src/Nethermind/Nethermind.Core.Test/KeccakTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/KeccakTests.cs @@ -110,5 +110,13 @@ public void Span() Assert.That(Keccak.Compute(byteArray.AsSpan()), Is.EqualTo(Keccak.Compute(byteArray))); } + + [TestCase("0xAAAAAAAAAAAA", "f8e06bc47a06f221f1523d3b646226e6cdb322619be1da7bafd113e459bf4140")] + public void Sanity_check(string hexString, string expected) + { + byte[] bytes = Bytes.FromHexString(hexString); + ValueHash256 h = ValueKeccak.Compute(bytes); + h.Bytes.ToHexString().Should().Be(expected); + } } } diff --git a/src/Nethermind/Nethermind.Core.Test/SequenceTests.cs b/src/Nethermind/Nethermind.Core.Test/SequenceTests.cs new file mode 100644 index 00000000000..d44ba71dda4 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/SequenceTests.cs @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Buffers; +using FluentAssertions; +using Nethermind.Core.Extensions; +using NUnit.Framework; + +namespace Nethermind.Core.Test; + +public class SequenceTests +{ + [Test] + public void Sequence_whitespace_slice() + { + var end = new TestReadOnlySequenceSegment("\r\nabc"u8.ToArray(), 2); + var start = new TestReadOnlySequenceSegment(" "u8.ToArray(), 0, end); + ReadOnlySequence sequence = new ReadOnlySequence(start, 0, end, 5); + + sequence.TrimStart().ToArray().Should().Equal("abc"u8.ToArray()); + } + + private class TestReadOnlySequenceSegment : ReadOnlySequenceSegment + { + public TestReadOnlySequenceSegment(Memory memory, long runningIndex = 0, ReadOnlySequenceSegment? next = null) + { + Memory = memory; + Next = next; + RunningIndex = runningIndex; + } + } +} diff --git a/src/Nethermind/Nethermind.Core/Account.cs b/src/Nethermind/Nethermind.Core/Account.cs index 41279ec2b7b..dbe8d959740 100644 --- a/src/Nethermind/Nethermind.Core/Account.cs +++ b/src/Nethermind/Nethermind.Core/Account.cs @@ -154,8 +154,8 @@ public bool IsNull // // Method Nethermind.Core.AccountStruct:get_IsNull():bool:this (FullOpts) // G_M000_IG01: - // vzeroupper - // + // vzeroupper + // // G_M000_IG02: // vmovups ymm0, ymmword ptr [rcx] // vpor ymm0, ymm0, ymmword ptr [rcx+0x20] @@ -164,10 +164,10 @@ public bool IsNull // vptest ymm0, ymm0 // sete al // movzx rax, al - // + // // G_M000_IG03: ;; offset=0x0021 - // vzeroupper - // ret + // vzeroupper + // ret // ; Total bytes of code: 37 return (Unsafe.As>(ref Unsafe.AsRef(in _balance)) | diff --git a/src/Nethermind/Nethermind.Core/Address.cs b/src/Nethermind/Nethermind.Core/Address.cs index d56cda23269..79acbe7d5ff 100644 --- a/src/Nethermind/Nethermind.Core/Address.cs +++ b/src/Nethermind/Nethermind.Core/Address.cs @@ -35,9 +35,9 @@ public class Address : IEquatable
, IComparable
public byte[] Bytes { get; } - public Address(Hash256 keccak) : this(keccak.Bytes.Slice(12, Size).ToArray()) { } + public Address(Hash256 hash) : this(hash.Bytes.Slice(12, Size).ToArray()) { } - public Address(in ValueHash256 keccak) : this(keccak.BytesAsSpan.Slice(12, Size).ToArray()) { } + public Address(in ValueHash256 hash) : this(hash.BytesAsSpan.Slice(12, Size).ToArray()) { } public byte this[int index] => Bytes[index]; @@ -235,6 +235,14 @@ public override bool CanConvertTo(ITypeDescriptorContext? context, Type? destina } public Hash256 ToAccountPath => Keccak.Compute(Bytes); + + [SkipLocalsInit] + public ValueHash256 ToHash() + { + Span addressBytes = stackalloc byte[Hash256.Size]; + Bytes.CopyTo(addressBytes.Slice(Hash256.Size - Address.Size)); + return new ValueHash256(addressBytes); + } } public readonly struct AddressAsKey(Address key) : IEquatable diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index c77e9c27c5c..609455b96d3 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -7,6 +7,8 @@ using System.Linq; using System.Text; using Nethermind.Core.ConsensusRequests; +using System.Text.Json.Serialization; +using Nethermind.Core.Collections; using Nethermind.Core.Crypto; using Nethermind.Int256; @@ -117,6 +119,10 @@ public Transaction[] Transactions public Hash256? RequestsRoot => Header.RequestsRoot; // do not add setter here + [JsonIgnore] + public ArrayPoolList? AccountChanges { get; set; } + [JsonIgnore] + internal volatile int TransactionProcessed; public override string ToString() => ToString(Format.Short); diff --git a/src/Nethermind/Nethermind.Core/Bloom.cs b/src/Nethermind/Nethermind.Core/Bloom.cs index 7437a25286c..f980e1b4a0e 100644 --- a/src/Nethermind/Nethermind.Core/Bloom.cs +++ b/src/Nethermind/Nethermind.Core/Bloom.cs @@ -126,9 +126,10 @@ public void Add(LogEntry[] logEntries, Bloom? blockBloom = null) LogEntry logEntry = logEntries[entryIndex]; byte[] addressBytes = logEntry.LoggersAddress.Bytes; Set(addressBytes, blockBloom); - for (int topicIndex = 0; topicIndex < logEntry.Topics.Length; topicIndex++) + Hash256[] topics = logEntry.Topics; + for (int topicIndex = 0; topicIndex < topics.Length; topicIndex++) { - Hash256 topic = logEntry.Topics[topicIndex]; + Hash256 topic = topics[topicIndex]; Set(topic.Bytes, blockBloom); } } @@ -148,9 +149,10 @@ public bool Matches(LogEntry logEntry) { if (Matches(logEntry.LoggersAddress)) { - for (int topicIndex = 0; topicIndex < logEntry.Topics.Length; topicIndex++) + Hash256[] topics = logEntry.Topics; + for (int topicIndex = 0; topicIndex < topics.Length; topicIndex++) { - if (!Matches(logEntry.Topics[topicIndex])) + if (!Matches(topics[topicIndex])) { return false; } @@ -285,9 +287,10 @@ public readonly bool Matches(LogEntry logEntry) { if (Matches(logEntry.LoggersAddress)) { - for (int topicIndex = 0; topicIndex < logEntry.Topics.Length; topicIndex++) + Hash256[] topics = logEntry.Topics; + for (int topicIndex = 0; topicIndex < topics.Length; topicIndex++) { - if (!Matches(logEntry.Topics[topicIndex])) + if (!Matches(topics[topicIndex])) { return false; } diff --git a/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs b/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs index 0d909d05077..9dfa54cf9a0 100644 --- a/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs +++ b/src/Nethermind/Nethermind.Core/Buffers/CappedArray.cs @@ -110,4 +110,14 @@ public readonly Span AsSpan(int start, int length) if (_length == array.Length) return array; return AsSpan().ToArray(); } + + public readonly ArraySegment AsArraySegment() + { + return AsArraySegment(0, _length); + } + + public readonly ArraySegment AsArraySegment(int start, int length) + { + return new ArraySegment(_array!, start, length); + } } diff --git a/src/Nethermind/Nethermind.Core/Caching/LinkedListNode.cs b/src/Nethermind/Nethermind.Core/Caching/LinkedListNode.cs index 93011a77bb6..7a882123e39 100644 --- a/src/Nethermind/Nethermind.Core/Caching/LinkedListNode.cs +++ b/src/Nethermind/Nethermind.Core/Caching/LinkedListNode.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; @@ -21,7 +22,10 @@ public static void MoveToMostRecent([NotNull] ref LinkedListNode? leastRecent { if (node.Next == node) { - Debug.Assert(leastRecentlyUsed == node, "this should only be true for a list with only one node"); + if (leastRecentlyUsed != node) + { + InvalidNotSingleNodeList(); + } // Do nothing only one node } else @@ -33,10 +37,16 @@ public static void MoveToMostRecent([NotNull] ref LinkedListNode? leastRecent public static void Remove(ref LinkedListNode? leastRecentlyUsed, LinkedListNode node) { - Debug.Assert(leastRecentlyUsed is not null, "This method shouldn't be called on empty list!"); + if (leastRecentlyUsed is null) + { + InvalidRemoveFromEmptyList(); + } if (node.Next == node) { - Debug.Assert(leastRecentlyUsed == node, "this should only be true for a list with only one node"); + if (leastRecentlyUsed != node) + { + InvalidNotSingleNodeList(); + } leastRecentlyUsed = null; } else @@ -48,6 +58,20 @@ public static void Remove(ref LinkedListNode? leastRecentlyUsed, LinkedListNo leastRecentlyUsed = node.Next; } } + + [DoesNotReturn] + [StackTraceHidden] + static void InvalidRemoveFromEmptyList() + { + throw new InvalidOperationException("This method shouldn't be called on empty list"); + } + } + + [DoesNotReturn] + [StackTraceHidden] + static void InvalidNotSingleNodeList() + { + throw new InvalidOperationException("This should only be true for a list with only one node"); } public static void AddMostRecent([NotNull] ref LinkedListNode? leastRecentlyUsed, LinkedListNode node) diff --git a/src/Nethermind/Nethermind.Core/Caching/LruCacheLowObject.cs b/src/Nethermind/Nethermind.Core/Caching/LruCacheLowObject.cs new file mode 100644 index 00000000000..bbdceab425f --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Caching/LruCacheLowObject.cs @@ -0,0 +1,274 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; +using Nethermind.Core.Threading; + +namespace Nethermind.Core.Caching +{ + public sealed class LruCacheLowObject + where TKey : struct, IEquatable + { + private readonly int _maxCapacity; + private readonly Dictionary _cacheMap; + private readonly McsLock _lock = new(); + private readonly string _name; + private int _leastRecentlyUsed = -1; + private Stack _freeOffsets = new(); + private readonly LruCacheItem[] _items; + + public LruCacheLowObject(int maxCapacity, string name) + { + ArgumentOutOfRangeException.ThrowIfLessThan(maxCapacity, 1); + + _name = name; + _maxCapacity = maxCapacity; + _cacheMap = new Dictionary(maxCapacity / 2); + _items = new LruCacheItem[maxCapacity]; + } + + public void Clear() + { + using var lockRelease = _lock.Acquire(); + + _leastRecentlyUsed = -1; + _cacheMap.Clear(); + _freeOffsets.Clear(); + if (RuntimeHelpers.IsReferenceOrContainsReferences()) + { + _items.AsSpan().Clear(); + } + } + + public TValue Get(TKey key) + { + using var lockRelease = _lock.Acquire(); + + if (_cacheMap.TryGetValue(key, out int offset)) + { + ref var node = ref _items[offset]; + TValue value = node.Value; + MoveToMostRecent(ref node, offset); + return value; + } + + return default!; + } + + public bool TryGet(TKey key, out TValue value) + { + using var lockRelease = _lock.Acquire(); + + if (_cacheMap.TryGetValue(key, out int offset)) + { + ref var node = ref _items[offset]; + value = node.Value; + MoveToMostRecent(ref node, offset); + return true; + } + + value = default!; + return false; + } + + public bool Set(TKey key, TValue val) + { + using var lockRelease = _lock.Acquire(); + + if (val is null) + { + return DeleteNoLock(key); + } + + if (_cacheMap.TryGetValue(key, out int offset)) + { + ref var node = ref _items[offset]; + node.Value = val; + MoveToMostRecent(ref node, offset); + return false; + } + + if (_cacheMap.Count >= _maxCapacity) + { + Replace(key, val); + } + else + { + if (_freeOffsets.Count > 0) + { + offset = _freeOffsets.Pop(); + } + else + { + offset = _cacheMap.Count; + } + ref LruCacheItem newNode = ref _items[offset]; + newNode = new(key, val); + AddMostRecent(ref newNode, offset); + _cacheMap.Add(key, offset); + } + + return true; + } + + public bool Delete(TKey key) + { + using var lockRelease = _lock.Acquire(); + + return DeleteNoLock(key); + } + + private bool DeleteNoLock(TKey key) + { + if (_cacheMap.TryGetValue(key, out int offset)) + { + ref var node = ref _items[offset]; + Remove(ref node, offset); + _cacheMap.Remove(key); + node = default; + _freeOffsets.Push(offset); + return true; + } + + return false; + } + + public bool Contains(TKey key) + { + using var lockRelease = _lock.Acquire(); + + return _cacheMap.ContainsKey(key); + } + + public int Size + { + get + { + return _cacheMap.Count; + } + } + + private void Replace(TKey key, TValue value) + { + if (_leastRecentlyUsed < 0) + { + ThrowInvalidOperationException(); + } + + int offset = _leastRecentlyUsed; + ref var node = ref _items[offset]; + + _cacheMap.Remove(node.Key); + node = new(key, value) + { + Next = node.Next, + Prev = node.Prev + }; + + MoveToMostRecent(ref node, offset); + _cacheMap.Add(key, offset); + + [DoesNotReturn] + static void ThrowInvalidOperationException() + { + throw new InvalidOperationException( + $"{nameof(LruCache)} called {nameof(Replace)} when empty."); + } + } + + + private void MoveToMostRecent(ref LruCacheItem node, int offset) + { + if (node.Next == offset) + { + if (_leastRecentlyUsed != offset) + { + InvalidNotSingleNodeList(); + } + // Do nothing only one node + } + else + { + Remove(ref node, offset); + AddMostRecent(ref node, offset); + } + } + + private void Remove(ref LruCacheItem node, int offset) + { + if (_leastRecentlyUsed < 0) + { + InvalidRemoveFromEmptyList(); + } + if (node.Next == offset) + { + if (_leastRecentlyUsed != offset) + { + InvalidNotSingleNodeList(); + } + _leastRecentlyUsed = -1; + } + else + { + _items[node.Next].Prev = node.Prev; + _items[node.Prev].Next = node.Next; + if (_leastRecentlyUsed == offset) + { + _leastRecentlyUsed = node.Next; + } + } + + static void InvalidRemoveFromEmptyList() + { + throw new InvalidOperationException("This method shouldn't be called on empty list"); + } + } + + [DoesNotReturn] + [StackTraceHidden] + static void InvalidNotSingleNodeList() + { + throw new InvalidOperationException("This should only be true for a list with only one node"); + } + + private void AddMostRecent(ref LruCacheItem node, int offset) + { + if (_leastRecentlyUsed < 0) + { + SetFirst(ref node, offset); + } + else + { + InsertMostRecent(ref node, offset); + } + } + + private void InsertMostRecent(ref LruCacheItem newNode, int offset) + { + newNode.Next = _leastRecentlyUsed; + ref var node = ref _items[_leastRecentlyUsed]; + newNode.Prev = node.Prev; + _items[node.Prev].Next = offset; + node.Prev = offset; + } + + private void SetFirst(ref LruCacheItem newNode, int offset) + { + newNode.Next = offset; + newNode.Prev = offset; + _leastRecentlyUsed = offset; + } + + private struct LruCacheItem(TKey k, TValue v) + { + public readonly TKey Key = k; + public TValue Value = v; + public int Next; + public int Prev; + } + } +} diff --git a/src/Nethermind/Nethermind.Core/Caching/LruKeyCache.cs b/src/Nethermind/Nethermind.Core/Caching/LruKeyCache.cs index cc58f807a16..d5f25705b0b 100644 --- a/src/Nethermind/Nethermind.Core/Caching/LruKeyCache.cs +++ b/src/Nethermind/Nethermind.Core/Caching/LruKeyCache.cs @@ -109,17 +109,5 @@ static void ThrowInvalidOperation() $"{nameof(LruKeyCache)} called {nameof(Replace)} when empty."); } } - - public long MemorySize => CalculateMemorySize(0, _cacheMap.Count); - - // TODO: memory size on the KeyCache will be smaller because we do not create LruCacheItems - public static long CalculateMemorySize(int keyPlusValueSize, int currentItemsCount) - { - // it may actually be different if the initial capacity not equal to max (depending on the dictionary growth path) - - const int preInit = 48 /* LinkedList */ + 80 /* Dictionary */ + 24; - int postInit = 52 /* lazy init of two internal dictionary arrays + dictionary size times (entry size + int) */ + MemorySizes.FindNextPrime(currentItemsCount) * 28 + currentItemsCount * 80 /* LinkedListNode and CacheItem times items count */; - return MemorySizes.Align(preInit + postInit + keyPlusValueSize * currentItemsCount); - } } } diff --git a/src/Nethermind/Nethermind.Core/Caching/LruKeyCacheLowObject.cs b/src/Nethermind/Nethermind.Core/Caching/LruKeyCacheLowObject.cs new file mode 100644 index 00000000000..dd8e3af89eb --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Caching/LruKeyCacheLowObject.cs @@ -0,0 +1,248 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; +using Nethermind.Core.Threading; + +namespace Nethermind.Core.Caching +{ + public sealed class LruKeyCacheLowObject + where TKey : struct, IEquatable + { + private readonly int _maxCapacity; + private readonly Dictionary _cacheMap; + private readonly McsLock _lock = new(); + private readonly string _name; + private int _leastRecentlyUsed = -1; + private Stack _freeOffsets = new(); + private readonly LruCacheItem[] _items; + + public LruKeyCacheLowObject(int maxCapacity, string name) + { + ArgumentOutOfRangeException.ThrowIfLessThan(maxCapacity, 1); + + _name = name; + _maxCapacity = maxCapacity; + _cacheMap = new Dictionary(maxCapacity / 2); // do not initialize it at the full capacity + _items = new LruCacheItem[maxCapacity]; + } + + public void Clear() + { + using var lockRelease = _lock.Acquire(); + + _leastRecentlyUsed = -1; + _cacheMap.Clear(); + _freeOffsets.Clear(); + if (RuntimeHelpers.IsReferenceOrContainsReferences()) + { + _items.AsSpan().Clear(); + } + } + + public bool Get(TKey key) + { + using var lockRelease = _lock.Acquire(); + + if (_cacheMap.TryGetValue(key, out int offset)) + { + ref var node = ref _items[offset]; + MoveToMostRecent(ref node, offset); + return true; + } + + return false!; + } + + public bool Set(TKey key) + { + using var lockRelease = _lock.Acquire(); + + if (_cacheMap.TryGetValue(key, out int offset)) + { + ref var node = ref _items[offset]; + MoveToMostRecent(ref node, offset); + return false; + } + + if (_cacheMap.Count >= _maxCapacity) + { + Replace(key); + } + else + { + if (_freeOffsets.Count > 0) + { + offset = _freeOffsets.Pop(); + } + else + { + offset = _cacheMap.Count; + } + ref LruCacheItem newNode = ref _items[offset]; + newNode = new(key); + AddMostRecent(ref newNode, offset); + _cacheMap.Add(key, offset); + } + + return true; + } + + public void Delete(TKey key) + { + using var lockRelease = _lock.Acquire(); + + DeleteNoLock(key); + } + + private bool DeleteNoLock(TKey key) + { + if (_cacheMap.TryGetValue(key, out int offset)) + { + ref var node = ref _items[offset]; + Remove(ref node, offset); + _cacheMap.Remove(key); + node = default; + _freeOffsets.Push(offset); + return true; + } + + return false; + } + + public bool Contains(TKey key) + { + using var lockRelease = _lock.Acquire(); + + return _cacheMap.ContainsKey(key); + } + + public int Size + { + get + { + return _cacheMap.Count; + } + } + + private void Replace(TKey key) + { + if (_leastRecentlyUsed < 0) + { + ThrowInvalidOperationException(); + } + + int offset = _leastRecentlyUsed; + ref var node = ref _items[offset]; + + _cacheMap.Remove(node.Key); + node = new(key) + { + Next = node.Next, + Prev = node.Prev + }; + + MoveToMostRecent(ref node, offset); + _cacheMap.Add(key, offset); + + [DoesNotReturn] + static void ThrowInvalidOperationException() + { + throw new InvalidOperationException($"Called {nameof(Replace)} when empty."); + } + } + + private void MoveToMostRecent(ref LruCacheItem node, int offset) + { + if (node.Next == offset) + { + if (_leastRecentlyUsed != offset) + { + InvalidNotSingleNodeList(); + } + // Do nothing only one node + } + else + { + Remove(ref node, offset); + AddMostRecent(ref node, offset); + } + } + + private void Remove(ref LruCacheItem node, int offset) + { + if (_leastRecentlyUsed < 0) + { + InvalidRemoveFromEmptyList(); + } + if (node.Next == offset) + { + if (_leastRecentlyUsed != offset) + { + InvalidNotSingleNodeList(); + } + _leastRecentlyUsed = -1; + } + else + { + _items[node.Next].Prev = node.Prev; + _items[node.Prev].Next = node.Next; + if (_leastRecentlyUsed == offset) + { + _leastRecentlyUsed = node.Next; + } + } + + static void InvalidRemoveFromEmptyList() + { + throw new InvalidOperationException("This method shouldn't be called on empty list"); + } + } + + [DoesNotReturn] + [StackTraceHidden] + static void InvalidNotSingleNodeList() + { + throw new InvalidOperationException("This should only be true for a list with only one node"); + } + + private void AddMostRecent(ref LruCacheItem node, int offset) + { + if (_leastRecentlyUsed < 0) + { + SetFirst(ref node, offset); + } + else + { + InsertMostRecent(ref node, offset); + } + } + + private void InsertMostRecent(ref LruCacheItem newNode, int offset) + { + newNode.Next = _leastRecentlyUsed; + ref var node = ref _items[_leastRecentlyUsed]; + newNode.Prev = node.Prev; + _items[node.Prev].Next = offset; + node.Prev = offset; + } + + private void SetFirst(ref LruCacheItem newNode, int offset) + { + newNode.Next = offset; + newNode.Prev = offset; + _leastRecentlyUsed = offset; + } + + private struct LruCacheItem(TKey k) + { + public readonly TKey Key = k; + public int Next; + public int Prev; + } + } +} diff --git a/src/Nethermind/Nethermind.Core/Caching/LruKeyCacheNonConcurrent.cs b/src/Nethermind/Nethermind.Core/Caching/LruKeyCacheNonConcurrent.cs new file mode 100644 index 00000000000..ef5a2e49d2b --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Caching/LruKeyCacheNonConcurrent.cs @@ -0,0 +1,115 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using Nethermind.Core.Extensions; + +namespace Nethermind.Core.Caching +{ + public sealed class LruKeyCacheNonConcurrent where TKey : notnull + { + private readonly int _maxCapacity; + private readonly string _name; + private readonly Dictionary> _cacheMap; + private LinkedListNode? _leastRecentlyUsed; + + public LruKeyCacheNonConcurrent(int maxCapacity, int startCapacity, string name) + { + _maxCapacity = maxCapacity; + _name = name ?? throw new ArgumentNullException(nameof(name)); + _cacheMap = typeof(TKey) == typeof(byte[]) + ? new Dictionary>((IEqualityComparer)Bytes.EqualityComparer) + : new Dictionary>(startCapacity); // do not initialize it at the full capacity + } + + public LruKeyCacheNonConcurrent(int maxCapacity, string name) + : this(maxCapacity, 0, name) + { + } + + public void Clear() + { + _leastRecentlyUsed = null; + _cacheMap.Clear(); + } + + public bool Get(TKey key) + { + if (_cacheMap.TryGetValue(key, out LinkedListNode? node)) + { + LinkedListNode.MoveToMostRecent(ref _leastRecentlyUsed, node); + return true; + } + + return false; + } + + public bool Set(TKey key) + { + if (_cacheMap.TryGetValue(key, out LinkedListNode? node)) + { + LinkedListNode.MoveToMostRecent(ref _leastRecentlyUsed, node); + return false; + } + else + { + if (_cacheMap.Count >= _maxCapacity) + { + Replace(key); + } + else + { + LinkedListNode newNode = new(key); + LinkedListNode.AddMostRecent(ref _leastRecentlyUsed, newNode); + _cacheMap.Add(key, newNode); + } + + return true; + } + } + + public void Delete(TKey key) + { + if (_cacheMap.TryGetValue(key, out LinkedListNode? node)) + { + LinkedListNode.Remove(ref _leastRecentlyUsed, node); + _cacheMap.Remove(key); + } + } + + private void Replace(TKey key) + { + LinkedListNode? node = _leastRecentlyUsed; + if (node is null) + { + ThrowInvalidOperation(); + } + + _cacheMap.Remove(node.Value); + node.Value = key; + LinkedListNode.MoveToMostRecent(ref _leastRecentlyUsed, node); + _cacheMap.Add(key, node); + + [DoesNotReturn] + static void ThrowInvalidOperation() + { + throw new InvalidOperationException( + $"{nameof(LruKeyCache)} called {nameof(Replace)} when empty."); + } + } + + public long MemorySize => CalculateMemorySize(0, _cacheMap.Count); + + // TODO: memory size on the KeyCache will be smaller because we do not create LruCacheItems + public static long CalculateMemorySize(int keyPlusValueSize, int currentItemsCount) + { + // it may actually be different if the initial capacity not equal to max (depending on the dictionary growth path) + + const int preInit = 48 /* LinkedList */ + 80 /* Dictionary */ + 24; + int postInit = 52 /* lazy init of two internal dictionary arrays + dictionary size times (entry size + int) */ + MemorySizes.FindNextPrime(currentItemsCount) * 28 + currentItemsCount * 80 /* LinkedListNode and CacheItem times items count */; + return MemorySizes.Align(preInit + postInit + keyPlusValueSize * currentItemsCount); + } + } +} diff --git a/src/Nethermind/Nethermind.Core/CappedArrayMemoryManager.cs b/src/Nethermind/Nethermind.Core/CappedArrayMemoryManager.cs new file mode 100644 index 00000000000..65d52241f0b --- /dev/null +++ b/src/Nethermind/Nethermind.Core/CappedArrayMemoryManager.cs @@ -0,0 +1,63 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Buffers; + +namespace Nethermind.Core.Buffers; + +public class CappedArrayMemoryManager(CappedArray? data) : MemoryManager +{ + private readonly CappedArray _data = data ?? throw new ArgumentNullException(nameof(data)); + private bool _isDisposed; + + public override Span GetSpan() + { + if (_isDisposed) + { + throw new ObjectDisposedException(nameof(CappedArrayMemoryManager)); + } + + return _data.AsSpan(); + } + + public override MemoryHandle Pin(int elementIndex = 0) + { + if (_isDisposed) + { + throw new ObjectDisposedException(nameof(CappedArrayMemoryManager)); + } + + if (elementIndex < 0 || elementIndex >= _data.Length) + { + throw new ArgumentOutOfRangeException(nameof(elementIndex)); + } + // Pinning is a no-op in this managed implementation + return new MemoryHandle(); + } + + public override void Unpin() + { + if (_isDisposed) + { + throw new ObjectDisposedException(nameof(CappedArrayMemoryManager)); + } + // Unpinning is a no-op in this managed implementation + } + + protected override void Dispose(bool disposing) + { + _isDisposed = true; + } + + protected override bool TryGetArray(out ArraySegment segment) + { + if (_isDisposed) + { + throw new ObjectDisposedException(nameof(CappedArrayMemoryManager)); + } + + segment = _data.AsArraySegment(); + return true; + } +} diff --git a/src/Nethermind/Nethermind.Core/Collections/LinkedHashSet.cs b/src/Nethermind/Nethermind.Core/Collections/LinkedHashSet.cs index 7ebcb0ad518..553448f9c60 100644 --- a/src/Nethermind/Nethermind.Core/Collections/LinkedHashSet.cs +++ b/src/Nethermind/Nethermind.Core/Collections/LinkedHashSet.cs @@ -196,7 +196,6 @@ public void UnionWith(IEnumerable? other) #endregion - #region ICollection public int Count => _dict.Count; diff --git a/src/Nethermind/Nethermind.Core/Collections/ThrowHelper.cs b/src/Nethermind/Nethermind.Core/Collections/ThrowHelper.cs index 81a93cd1935..b0d136b07f7 100644 --- a/src/Nethermind/Nethermind.Core/Collections/ThrowHelper.cs +++ b/src/Nethermind/Nethermind.Core/Collections/ThrowHelper.cs @@ -51,13 +51,6 @@ public static void ThrowArgumentOutOfRangeException_SizeHint() throw new ArgumentOutOfRangeException("sizeHint"); } - [DoesNotReturn] - [StackTraceHidden] - public static void ThrowArgumentNullException_Options() - { - throw new ArgumentNullException("options"); - } - [DoesNotReturn] [StackTraceHidden] public static void ThrowArgumentNullException_WritingStream() diff --git a/src/Nethermind/Nethermind.Init/Cpu/ConsoleExitHandler.cs b/src/Nethermind/Nethermind.Core/Cpu/ConsoleExitHandler.cs similarity index 98% rename from src/Nethermind/Nethermind.Init/Cpu/ConsoleExitHandler.cs rename to src/Nethermind/Nethermind.Core/Cpu/ConsoleExitHandler.cs index 53f6c8d2890..5b5dabc4d07 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/ConsoleExitHandler.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/ConsoleExitHandler.cs @@ -7,7 +7,7 @@ using System; using System.Diagnostics; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; internal class ConsoleExitHandler : IDisposable { diff --git a/src/Nethermind/Nethermind.Init/Cpu/CpuInfo.cs b/src/Nethermind/Nethermind.Core/Cpu/CpuInfo.cs similarity index 95% rename from src/Nethermind/Nethermind.Init/Cpu/CpuInfo.cs rename to src/Nethermind/Nethermind.Core/Cpu/CpuInfo.cs index 8e374810f34..a0c3eaadb48 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/CpuInfo.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/CpuInfo.cs @@ -4,9 +4,9 @@ // Derived from https://github.com/dotnet/BenchmarkDotNet // Licensed under the MIT License -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; -internal class CpuInfo +public class CpuInfo { public string ProcessorName { get; } public int? PhysicalProcessorCount { get; } diff --git a/src/Nethermind/Nethermind.Init/Cpu/DefaultCultureInfo.cs b/src/Nethermind/Nethermind.Core/Cpu/DefaultCultureInfo.cs similarity index 94% rename from src/Nethermind/Nethermind.Init/Cpu/DefaultCultureInfo.cs rename to src/Nethermind/Nethermind.Core/Cpu/DefaultCultureInfo.cs index 060243b5849..23465e1ceac 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/DefaultCultureInfo.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/DefaultCultureInfo.cs @@ -6,7 +6,7 @@ using System.Globalization; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; internal static class DefaultCultureInfo { diff --git a/src/Nethermind/Nethermind.Init/Cpu/Frequency.cs b/src/Nethermind/Nethermind.Core/Cpu/Frequency.cs similarity index 98% rename from src/Nethermind/Nethermind.Init/Cpu/Frequency.cs rename to src/Nethermind/Nethermind.Core/Cpu/Frequency.cs index 32e2a60a958..e2c8328b83f 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/Frequency.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/Frequency.cs @@ -6,9 +6,9 @@ using System.Globalization; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; -internal readonly struct Frequency +public readonly struct Frequency { public static readonly Frequency Zero = new Frequency(0.0); diff --git a/src/Nethermind/Nethermind.Init/Cpu/FrequencyUnit.cs b/src/Nethermind/Nethermind.Core/Cpu/FrequencyUnit.cs similarity index 94% rename from src/Nethermind/Nethermind.Init/Cpu/FrequencyUnit.cs rename to src/Nethermind/Nethermind.Core/Cpu/FrequencyUnit.cs index 9239c1e55cb..2b0de6bce90 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/FrequencyUnit.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/FrequencyUnit.cs @@ -4,9 +4,9 @@ // Derived from https://github.com/AndreyAkinshin/perfolizer // Licensed under the MIT License -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; -internal class FrequencyUnit +public class FrequencyUnit { public static readonly FrequencyUnit Hz = new FrequencyUnit("Hz", "Hertz", 1L); diff --git a/src/Nethermind/Nethermind.Init/Cpu/ProcCpuInfoKeyNames.cs b/src/Nethermind/Nethermind.Core/Cpu/ProcCpuInfoKeyNames.cs similarity index 94% rename from src/Nethermind/Nethermind.Init/Cpu/ProcCpuInfoKeyNames.cs rename to src/Nethermind/Nethermind.Core/Cpu/ProcCpuInfoKeyNames.cs index 8f2555a629b..49960868ff5 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/ProcCpuInfoKeyNames.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/ProcCpuInfoKeyNames.cs @@ -4,7 +4,7 @@ // Derived from https://github.com/dotnet/BenchmarkDotNet // Licensed under the MIT License -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; internal static class ProcCpuInfoKeyNames { diff --git a/src/Nethermind/Nethermind.Init/Cpu/ProcCpuInfoParser.cs b/src/Nethermind/Nethermind.Core/Cpu/ProcCpuInfoParser.cs similarity index 99% rename from src/Nethermind/Nethermind.Init/Cpu/ProcCpuInfoParser.cs rename to src/Nethermind/Nethermind.Core/Cpu/ProcCpuInfoParser.cs index 8db1a4c52f4..f27aa681861 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/ProcCpuInfoParser.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/ProcCpuInfoParser.cs @@ -8,7 +8,7 @@ using System.Linq; using System.Text.RegularExpressions; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; internal static partial class ProcCpuInfoParser { diff --git a/src/Nethermind/Nethermind.Init/Cpu/ProcCpuInfoProvider.cs b/src/Nethermind/Nethermind.Core/Cpu/ProcCpuInfoProvider.cs similarity index 98% rename from src/Nethermind/Nethermind.Init/Cpu/ProcCpuInfoProvider.cs rename to src/Nethermind/Nethermind.Core/Cpu/ProcCpuInfoProvider.cs index 5fc0d320b4e..c2d6fd770a7 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/ProcCpuInfoProvider.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/ProcCpuInfoProvider.cs @@ -7,7 +7,7 @@ using System; using System.Linq; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; /// /// CPU information from output of the `cat /proc/info` command. diff --git a/src/Nethermind/Nethermind.Init/Cpu/ProcessExtensions.cs b/src/Nethermind/Nethermind.Core/Cpu/ProcessExtensions.cs similarity index 99% rename from src/Nethermind/Nethermind.Init/Cpu/ProcessExtensions.cs rename to src/Nethermind/Nethermind.Core/Cpu/ProcessExtensions.cs index de38f80de2c..d725868961b 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/ProcessExtensions.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/ProcessExtensions.cs @@ -10,7 +10,7 @@ using System.Diagnostics; using System.IO; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; // we need it public to reuse it in the auto-generated dll // but we hide it from intellisense with following attribute diff --git a/src/Nethermind/Nethermind.Init/Cpu/ProcessHelper.cs b/src/Nethermind/Nethermind.Core/Cpu/ProcessHelper.cs similarity index 97% rename from src/Nethermind/Nethermind.Init/Cpu/ProcessHelper.cs rename to src/Nethermind/Nethermind.Core/Cpu/ProcessHelper.cs index 1c3bf460459..a4a3291e3f9 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/ProcessHelper.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/ProcessHelper.cs @@ -7,7 +7,7 @@ using System; using System.Diagnostics; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; internal static class ProcessHelper { diff --git a/src/Nethermind/Nethermind.Init/Cpu/RuntimeInformation.cs b/src/Nethermind/Nethermind.Core/Cpu/RuntimeInformation.cs similarity index 66% rename from src/Nethermind/Nethermind.Init/Cpu/RuntimeInformation.cs rename to src/Nethermind/Nethermind.Core/Cpu/RuntimeInformation.cs index 4dbbacf6869..f1ed2b7c93d 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/RuntimeInformation.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/RuntimeInformation.cs @@ -5,10 +5,11 @@ // Licensed under the MIT License using System; +using System.Threading.Tasks; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; -internal static class RuntimeInformation +public static class RuntimeInformation { [System.Runtime.Versioning.SupportedOSPlatformGuard("windows")] internal static bool IsWindows() => OperatingSystem.IsWindows(); // prefer linker-friendly OperatingSystem APIs @@ -19,7 +20,7 @@ internal static class RuntimeInformation [System.Runtime.Versioning.SupportedOSPlatformGuard("macos")] internal static bool IsMacOS() => OperatingSystem.IsMacOS(); - internal static CpuInfo? GetCpuInfo() + public static CpuInfo? GetCpuInfo() { if (IsWindows()) return WmicCpuInfoProvider.WmicCpuInfo.Value; @@ -31,5 +32,9 @@ internal static class RuntimeInformation return null; } + public static int PhysicalCoreCount { get; } = GetCpuInfo()?.PhysicalCoreCount ?? Environment.ProcessorCount; + public static ParallelOptions ParallelOptionsPhysicalCores { get; } = new() { MaxDegreeOfParallelism = PhysicalCoreCount }; + public static ParallelOptions ParallelOptionsLogicalCores { get; } = new() { MaxDegreeOfParallelism = Environment.ProcessorCount }; + public static bool Is64BitPlatform() => IntPtr.Size == 8; } diff --git a/src/Nethermind/Nethermind.Init/Cpu/SectionsHelper.cs b/src/Nethermind/Nethermind.Core/Cpu/SectionsHelper.cs similarity index 98% rename from src/Nethermind/Nethermind.Init/Cpu/SectionsHelper.cs rename to src/Nethermind/Nethermind.Core/Cpu/SectionsHelper.cs index f65f1a432c2..34e3cec0847 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/SectionsHelper.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/SectionsHelper.cs @@ -9,7 +9,7 @@ using System.Linq; using System.Text.RegularExpressions; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; internal static partial class SectionsHelper { diff --git a/src/Nethermind/Nethermind.Init/Cpu/SysctlCpuInfoParser.cs b/src/Nethermind/Nethermind.Core/Cpu/SysctlCpuInfoParser.cs similarity index 98% rename from src/Nethermind/Nethermind.Init/Cpu/SysctlCpuInfoParser.cs rename to src/Nethermind/Nethermind.Core/Cpu/SysctlCpuInfoParser.cs index af67becb1fb..08071d70553 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/SysctlCpuInfoParser.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/SysctlCpuInfoParser.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; internal static class SysctlCpuInfoParser { diff --git a/src/Nethermind/Nethermind.Init/Cpu/SysctlCpuInfoProvider.cs b/src/Nethermind/Nethermind.Core/Cpu/SysctlCpuInfoProvider.cs similarity index 95% rename from src/Nethermind/Nethermind.Init/Cpu/SysctlCpuInfoProvider.cs rename to src/Nethermind/Nethermind.Core/Cpu/SysctlCpuInfoProvider.cs index 2bdd6909b5c..00b1c8b1dfb 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/SysctlCpuInfoProvider.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/SysctlCpuInfoProvider.cs @@ -6,7 +6,7 @@ using System; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; /// /// CPU information from output of the `sysctl -a` command. diff --git a/src/Nethermind/Nethermind.Init/Cpu/TimeInterval.cs b/src/Nethermind/Nethermind.Core/Cpu/TimeInterval.cs similarity index 98% rename from src/Nethermind/Nethermind.Init/Cpu/TimeInterval.cs rename to src/Nethermind/Nethermind.Core/Cpu/TimeInterval.cs index da44e32dc7c..690508a072f 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/TimeInterval.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/TimeInterval.cs @@ -6,9 +6,9 @@ using System.Globalization; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; -internal readonly struct TimeInterval +public readonly struct TimeInterval { public static readonly TimeInterval Nanosecond = TimeUnit.Nanosecond.ToInterval(1L); diff --git a/src/Nethermind/Nethermind.Init/Cpu/TimeUnit.cs b/src/Nethermind/Nethermind.Core/Cpu/TimeUnit.cs similarity index 97% rename from src/Nethermind/Nethermind.Init/Cpu/TimeUnit.cs rename to src/Nethermind/Nethermind.Core/Cpu/TimeUnit.cs index dfaea152de0..821b8a90514 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/TimeUnit.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/TimeUnit.cs @@ -7,9 +7,9 @@ using System; using System.Linq; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; -internal class TimeUnit : IEquatable +public class TimeUnit : IEquatable { public static readonly TimeUnit Nanosecond = new TimeUnit("ns", "Nanosecond", 1L); diff --git a/src/Nethermind/Nethermind.Init/Cpu/UnitPresentation.cs b/src/Nethermind/Nethermind.Core/Cpu/UnitPresentation.cs similarity index 93% rename from src/Nethermind/Nethermind.Init/Cpu/UnitPresentation.cs rename to src/Nethermind/Nethermind.Core/Cpu/UnitPresentation.cs index 900a07f78a1..bc67eaf180d 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/UnitPresentation.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/UnitPresentation.cs @@ -4,9 +4,9 @@ // Derived from https://github.com/AndreyAkinshin/perfolizer // Licensed under the MIT License -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; -internal class UnitPresentation +public class UnitPresentation { public static readonly UnitPresentation Default = new UnitPresentation(isVisible: true, 0); diff --git a/src/Nethermind/Nethermind.Init/Cpu/WmicCpuInfoKeyNames.cs b/src/Nethermind/Nethermind.Core/Cpu/WmicCpuInfoKeyNames.cs similarity index 93% rename from src/Nethermind/Nethermind.Init/Cpu/WmicCpuInfoKeyNames.cs rename to src/Nethermind/Nethermind.Core/Cpu/WmicCpuInfoKeyNames.cs index 6f690f673f9..38069667866 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/WmicCpuInfoKeyNames.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/WmicCpuInfoKeyNames.cs @@ -4,7 +4,7 @@ // Derived from https://github.com/dotnet/BenchmarkDotNet // Licensed under the MIT License -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; internal static class WmicCpuInfoKeyNames { diff --git a/src/Nethermind/Nethermind.Init/Cpu/WmicCpuInfoParser.cs b/src/Nethermind/Nethermind.Core/Cpu/WmicCpuInfoParser.cs similarity index 98% rename from src/Nethermind/Nethermind.Init/Cpu/WmicCpuInfoParser.cs rename to src/Nethermind/Nethermind.Core/Cpu/WmicCpuInfoParser.cs index f13d3819713..51d9b77bc79 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/WmicCpuInfoParser.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/WmicCpuInfoParser.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; internal static class WmicCpuInfoParser { diff --git a/src/Nethermind/Nethermind.Init/Cpu/WmicCpuInfoProvider.cs b/src/Nethermind/Nethermind.Core/Cpu/WmicCpuInfoProvider.cs similarity index 96% rename from src/Nethermind/Nethermind.Init/Cpu/WmicCpuInfoProvider.cs rename to src/Nethermind/Nethermind.Core/Cpu/WmicCpuInfoProvider.cs index 882fc2cd970..e5e4d35a27a 100644 --- a/src/Nethermind/Nethermind.Init/Cpu/WmicCpuInfoProvider.cs +++ b/src/Nethermind/Nethermind.Core/Cpu/WmicCpuInfoProvider.cs @@ -6,7 +6,7 @@ using System; -namespace Nethermind.Init.Cpu; +namespace Nethermind.Core.Cpu; /// /// CPU information from output of the `wmic cpu get Name, NumberOfCores, NumberOfLogicalProcessors /Format:List` command. diff --git a/src/Nethermind/Nethermind.Core/Crypto/Hash256.cs b/src/Nethermind/Nethermind.Core/Crypto/Hash256.cs index b2002f8936f..6b123e45158 100644 --- a/src/Nethermind/Nethermind.Core/Crypto/Hash256.cs +++ b/src/Nethermind/Nethermind.Core/Crypto/Hash256.cs @@ -117,12 +117,12 @@ public Hash256 ToCommitment() } public static bool operator ==(in ValueHash256 left, in ValueHash256 right) => left.Equals(in right); - public static bool operator !=(in ValueHash256 left, in ValueHash256 right) => !(left == right); public static bool operator >(in ValueHash256 left, in ValueHash256 right) => left.CompareTo(in right) > 0; public static bool operator <(in ValueHash256 left, in ValueHash256 right) => left.CompareTo(in right) < 0; public static bool operator >=(in ValueHash256 left, in ValueHash256 right) => left.CompareTo(in right) >= 0; public static bool operator <=(in ValueHash256 left, in ValueHash256 right) => left.CompareTo(in right) <= 0; + public static implicit operator Hash256(in ValueHash256 keccak) => new(keccak); } public readonly struct Hash256AsKey(Hash256 key) : IEquatable diff --git a/src/Nethermind/Nethermind.Core/Crypto/KeccakHash.cs b/src/Nethermind/Nethermind.Core/Crypto/KeccakHash.cs index 4d8f15203f6..f3cca085977 100644 --- a/src/Nethermind/Nethermind.Core/Crypto/KeccakHash.cs +++ b/src/Nethermind/Nethermind.Core/Crypto/KeccakHash.cs @@ -104,36 +104,31 @@ private static void KeccakF(Span st) ulong ema, eme, emi, emo, emu; ulong esa, ese, esi, eso, esu; - { - // Access last element to perform range check once - // and not for every ascending access - _ = st[24]; - } - aba = st[0]; - abe = st[1]; - abi = st[2]; - abo = st[3]; - abu = st[4]; - aga = st[5]; - age = st[6]; - agi = st[7]; - ago = st[8]; - agu = st[9]; - aka = st[10]; - ake = st[11]; - aki = st[12]; - ako = st[13]; - aku = st[14]; - ama = st[15]; - ame = st[16]; - ami = st[17]; - amo = st[18]; - amu = st[19]; - asa = st[20]; - ase = st[21]; - asi = st[22]; - aso = st[23]; asu = st[24]; + aso = st[23]; + asi = st[22]; + ase = st[21]; + asa = st[20]; + amu = st[19]; + amo = st[18]; + ami = st[17]; + ame = st[16]; + ama = st[15]; + aku = st[14]; + ako = st[13]; + aki = st[12]; + ake = st[11]; + aka = st[10]; + agu = st[9]; + ago = st[8]; + agi = st[7]; + age = st[6]; + aga = st[5]; + abu = st[4]; + abo = st[3]; + abi = st[2]; + abe = st[1]; + aba = st[0]; for (int round = 0; round < ROUNDS; round += 2) { @@ -151,209 +146,158 @@ private static void KeccakF(Span st) @do = bCi ^ RotateLeft(bCu, 1); du = bCo ^ RotateLeft(bCa, 1); - aba ^= da; - bCa = aba; - age ^= de; - bCe = RotateLeft(age, 44); - aki ^= di; - bCi = RotateLeft(aki, 43); - amo ^= @do; - bCo = RotateLeft(amo, 21); - asu ^= du; - bCu = RotateLeft(asu, 14); - eba = bCa ^ ((~bCe) & bCi); - eba ^= RoundConstants[round]; + bCa = aba ^ da; + bCe = RotateLeft(age ^ de, 44); + bCi = RotateLeft(aki ^ di, 43); + eba = bCa ^ ((~bCe) & bCi) ^ RoundConstants[round]; + bCo = RotateLeft(amo ^ @do, 21); ebe = bCe ^ ((~bCi) & bCo); + bCu = RotateLeft(asu ^ du, 14); ebi = bCi ^ ((~bCo) & bCu); ebo = bCo ^ ((~bCu) & bCa); ebu = bCu ^ ((~bCa) & bCe); - abo ^= @do; - bCa = RotateLeft(abo, 28); - agu ^= du; - bCe = RotateLeft(agu, 20); - aka ^= da; - bCi = RotateLeft(aka, 3); - ame ^= de; - bCo = RotateLeft(ame, 45); - asi ^= di; - bCu = RotateLeft(asi, 61); + bCa = RotateLeft(abo ^ @do, 28); + bCe = RotateLeft(agu ^ du, 20); + bCi = RotateLeft(aka ^ da, 3); ega = bCa ^ ((~bCe) & bCi); + bCo = RotateLeft(ame ^ de, 45); ege = bCe ^ ((~bCi) & bCo); + bCu = RotateLeft(asi ^ di, 61); egi = bCi ^ ((~bCo) & bCu); ego = bCo ^ ((~bCu) & bCa); egu = bCu ^ ((~bCa) & bCe); - abe ^= de; - bCa = RotateLeft(abe, 1); - agi ^= di; - bCe = RotateLeft(agi, 6); - ako ^= @do; - bCi = RotateLeft(ako, 25); - amu ^= du; - bCo = RotateLeft(amu, 8); - asa ^= da; - bCu = RotateLeft(asa, 18); + bCa = RotateLeft(abe ^ de, 1); + bCe = RotateLeft(agi ^ di, 6); + bCi = RotateLeft(ako ^ @do, 25); eka = bCa ^ ((~bCe) & bCi); + bCo = RotateLeft(amu ^ du, 8); eke = bCe ^ ((~bCi) & bCo); + bCu = RotateLeft(asa ^ da, 18); eki = bCi ^ ((~bCo) & bCu); eko = bCo ^ ((~bCu) & bCa); eku = bCu ^ ((~bCa) & bCe); - abu ^= du; - bCa = RotateLeft(abu, 27); - aga ^= da; - bCe = RotateLeft(aga, 36); - ake ^= de; - bCi = RotateLeft(ake, 10); - ami ^= di; - bCo = RotateLeft(ami, 15); - aso ^= @do; - bCu = RotateLeft(aso, 56); + bCa = RotateLeft(abu ^ du, 27); + bCe = RotateLeft(aga ^ da, 36); + bCi = RotateLeft(ake ^ de, 10); ema = bCa ^ ((~bCe) & bCi); + bCo = RotateLeft(ami ^ di, 15); eme = bCe ^ ((~bCi) & bCo); + bCu = RotateLeft(aso ^ @do, 56); emi = bCi ^ ((~bCo) & bCu); emo = bCo ^ ((~bCu) & bCa); emu = bCu ^ ((~bCa) & bCe); - abi ^= di; - bCa = RotateLeft(abi, 62); - ago ^= @do; - bCe = RotateLeft(ago, 55); - aku ^= du; - bCi = RotateLeft(aku, 39); - ama ^= da; - bCo = RotateLeft(ama, 41); - ase ^= de; - bCu = RotateLeft(ase, 2); + bCa = RotateLeft(abi ^ di, 62); + bCe = RotateLeft(ago ^ @do, 55); + bCi = RotateLeft(aku ^ du, 39); esa = bCa ^ ((~bCe) & bCi); + bCo = RotateLeft(ama ^ da, 41); ese = bCe ^ ((~bCi) & bCo); + bCu = RotateLeft(ase ^ de, 2); esi = bCi ^ ((~bCo) & bCu); eso = bCo ^ ((~bCu) & bCa); esu = bCu ^ ((~bCa) & bCe); // prepareTheta - bCa = eba ^ ega ^ eka ^ ema ^ esa; + bCe = ebe ^ ege ^ eke ^ eme ^ ese; - bCi = ebi ^ egi ^ eki ^ emi ^ esi; - bCo = ebo ^ ego ^ eko ^ emo ^ eso; bCu = ebu ^ egu ^ eku ^ emu ^ esu; - //thetaRhoPiChiIotaPrepareTheta(round+1, E, A) da = bCu ^ RotateLeft(bCe, 1); + bCa = eba ^ ega ^ eka ^ ema ^ esa; + bCi = ebi ^ egi ^ eki ^ emi ^ esi; de = bCa ^ RotateLeft(bCi, 1); + bCo = ebo ^ ego ^ eko ^ emo ^ eso; di = bCe ^ RotateLeft(bCo, 1); @do = bCi ^ RotateLeft(bCu, 1); du = bCo ^ RotateLeft(bCa, 1); - eba ^= da; - bCa = eba; - ege ^= de; - bCe = RotateLeft(ege, 44); - eki ^= di; - bCi = RotateLeft(eki, 43); - emo ^= @do; - bCo = RotateLeft(emo, 21); - esu ^= du; - bCu = RotateLeft(esu, 14); - aba = bCa ^ ((~bCe) & bCi); - aba ^= RoundConstants[round + 1]; + + bCi = RotateLeft(eki ^ di, 43); + bCe = RotateLeft(ege ^ de, 44); + bCa = eba ^ da; + aba = bCa ^ ((~bCe) & bCi) ^ RoundConstants[round + 1]; + bCo = RotateLeft(emo ^ @do, 21); abe = bCe ^ ((~bCi) & bCo); + bCu = RotateLeft(esu ^ du, 14); abi = bCi ^ ((~bCo) & bCu); abo = bCo ^ ((~bCu) & bCa); abu = bCu ^ ((~bCa) & bCe); - ebo ^= @do; - bCa = RotateLeft(ebo, 28); - egu ^= du; - bCe = RotateLeft(egu, 20); - eka ^= da; - bCi = RotateLeft(eka, 3); - eme ^= de; - bCo = RotateLeft(eme, 45); - esi ^= di; - bCu = RotateLeft(esi, 61); + bCa = RotateLeft(ebo ^ @do, 28); + bCe = RotateLeft(egu ^ du, 20); + bCi = RotateLeft(eka ^ da, 3); aga = bCa ^ ((~bCe) & bCi); + bCo = RotateLeft(eme ^ de, 45); age = bCe ^ ((~bCi) & bCo); + bCu = RotateLeft(esi ^ di, 61); agi = bCi ^ ((~bCo) & bCu); ago = bCo ^ ((~bCu) & bCa); agu = bCu ^ ((~bCa) & bCe); - ebe ^= de; - bCa = RotateLeft(ebe, 1); - egi ^= di; - bCe = RotateLeft(egi, 6); - eko ^= @do; - bCi = RotateLeft(eko, 25); - emu ^= du; - bCo = RotateLeft(emu, 8); - esa ^= da; - bCu = RotateLeft(esa, 18); + bCa = RotateLeft(ebe ^ de, 1); + bCe = RotateLeft(egi ^ di, 6); + bCi = RotateLeft(eko ^ @do, 25); aka = bCa ^ ((~bCe) & bCi); + bCo = RotateLeft(emu ^ du, 8); ake = bCe ^ ((~bCi) & bCo); + bCu = RotateLeft(esa ^ da, 18); aki = bCi ^ ((~bCo) & bCu); ako = bCo ^ ((~bCu) & bCa); aku = bCu ^ ((~bCa) & bCe); - ebu ^= du; - bCa = RotateLeft(ebu, 27); - ega ^= da; - bCe = RotateLeft(ega, 36); - eke ^= de; - bCi = RotateLeft(eke, 10); - emi ^= di; - bCo = RotateLeft(emi, 15); - eso ^= @do; - bCu = RotateLeft(eso, 56); + bCa = RotateLeft(ebu ^ du, 27); + bCe = RotateLeft(ega ^ da, 36); + bCi = RotateLeft(eke ^ de, 10); ama = bCa ^ ((~bCe) & bCi); + bCo = RotateLeft(emi ^ di, 15); ame = bCe ^ ((~bCi) & bCo); + bCu = RotateLeft(eso ^ @do, 56); ami = bCi ^ ((~bCo) & bCu); amo = bCo ^ ((~bCu) & bCa); amu = bCu ^ ((~bCa) & bCe); - ebi ^= di; - bCa = RotateLeft(ebi, 62); - ego ^= @do; - bCe = RotateLeft(ego, 55); - eku ^= du; - bCi = RotateLeft(eku, 39); - ema ^= da; - bCo = RotateLeft(ema, 41); - ese ^= de; - bCu = RotateLeft(ese, 2); + bCa = RotateLeft(ebi ^ di, 62); + bCe = RotateLeft(ego ^ @do, 55); + bCi = RotateLeft(eku ^ du, 39); asa = bCa ^ ((~bCe) & bCi); + bCo = RotateLeft(ema ^ da, 41); ase = bCe ^ ((~bCi) & bCo); + bCu = RotateLeft(ese ^ de, 2); asi = bCi ^ ((~bCo) & bCu); aso = bCo ^ ((~bCu) & bCa); asu = bCu ^ ((~bCa) & bCe); } //copyToState(state, A) - st[0] = aba; - st[1] = abe; - st[2] = abi; - st[3] = abo; - st[4] = abu; - st[5] = aga; - st[6] = age; - st[7] = agi; - st[8] = ago; - st[9] = agu; - st[10] = aka; - st[11] = ake; - st[12] = aki; - st[13] = ako; - st[14] = aku; - st[15] = ama; - st[16] = ame; - st[17] = ami; - st[18] = amo; - st[19] = amu; - st[20] = asa; - st[21] = ase; - st[22] = asi; - st[23] = aso; st[24] = asu; + st[23] = aso; + st[22] = asi; + st[21] = ase; + st[20] = asa; + st[19] = amu; + st[18] = amo; + st[17] = ami; + st[16] = ame; + st[15] = ama; + st[14] = aku; + st[13] = ako; + st[12] = aki; + st[11] = ake; + st[10] = aka; + st[9] = agu; + st[8] = ago; + st[7] = agi; + st[6] = age; + st[5] = aga; + st[4] = abu; + st[3] = abo; + st[2] = abi; + st[1] = abe; + st[0] = aba; } public static Span ComputeHash(ReadOnlySpan input, int size = HASH_SIZE) diff --git a/src/Nethermind/Nethermind.Core/Extensions/ReadOnlySequenceExtensions.cs b/src/Nethermind/Nethermind.Core/Extensions/ReadOnlySequenceExtensions.cs new file mode 100644 index 00000000000..f53858d950b --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Extensions/ReadOnlySequenceExtensions.cs @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Buffers; + +namespace Nethermind.Core.Extensions; + +public static class ReadOnlySequenceExtensions +{ + private static readonly byte[] WhitespaceChars = " \t\r\n"u8.ToArray(); + + public static ReadOnlySequence TrimStart(this ReadOnlySequence sequence, byte[]? chars = null) + { + SequencePosition position = sequence.Start; + ReadOnlySpan charsSpan = chars ?? WhitespaceChars; + while (sequence.TryGet(ref position, out ReadOnlyMemory memory)) + { + ReadOnlySpan span = memory.Span; + int index = span.IndexOfAnyExcept(charsSpan); + + if (index != 0) + { + // if index == -1, then the whole span is whitespace + sequence = sequence.Slice(index != -1 ? index : span.Length); + } + else + { + return sequence; + } + } + + return sequence; + } +} diff --git a/src/Nethermind/Nethermind.Core/IKeyValueStore.cs b/src/Nethermind/Nethermind.Core/IKeyValueStore.cs index 6d0a81ce13b..717ae542c71 100644 --- a/src/Nethermind/Nethermind.Core/IKeyValueStore.cs +++ b/src/Nethermind/Nethermind.Core/IKeyValueStore.cs @@ -33,7 +33,7 @@ public interface IReadOnlyKeyValueStore bool KeyExists(ReadOnlySpan key) { Span span = GetSpan(key); - bool result = span.IsNull(); + bool result = !span.IsNull(); DangerousReleaseMemory(span); return result; } @@ -55,7 +55,7 @@ public interface IWriteOnlyKeyValueStore /// is preferable. Unless you plan to reuse the array somehow (pool), then you'd just use span. /// public bool PreferWriteByArray => false; - void PutSpan(ReadOnlySpan key, ReadOnlySpan value, WriteFlags flags = WriteFlags.None) => Set(key, value.ToArray(), flags); + void PutSpan(ReadOnlySpan key, ReadOnlySpan value, WriteFlags flags = WriteFlags.None) => Set(key, value.IsNull() ? null : value.ToArray(), flags); void Remove(ReadOnlySpan key) => Set(key, null); } diff --git a/src/Nethermind/Nethermind.Core/ProductInfo.cs b/src/Nethermind/Nethermind.Core/ProductInfo.cs index 70a72ab5b2a..b23e63c3006 100644 --- a/src/Nethermind/Nethermind.Core/ProductInfo.cs +++ b/src/Nethermind/Nethermind.Core/ProductInfo.cs @@ -12,24 +12,29 @@ public static class ProductInfo { static ProductInfo() { - var assembly = Assembly.GetEntryAssembly(); - var infoAttr = assembly?.GetCustomAttribute(); - var metadataAttrs = assembly?.GetCustomAttributes(); - var productAttr = assembly?.GetCustomAttribute(); - var commit = metadataAttrs?.FirstOrDefault(a => a.Key.Equals("Commit", StringComparison.Ordinal))?.Value; + var assembly = Assembly.GetEntryAssembly()!; + var metadataAttrs = assembly.GetCustomAttributes()!; + var productAttr = assembly.GetCustomAttribute()!; + var versionAttr = assembly.GetCustomAttribute()!; var timestamp = metadataAttrs?.FirstOrDefault(a => a.Key.Equals("BuildTimestamp", StringComparison.Ordinal))?.Value; BuildTimestamp = long.TryParse(timestamp, out var t) ? DateTimeOffset.FromUnixTimeSeconds(t) : DateTimeOffset.MinValue; - Commit = commit ?? string.Empty; Name = productAttr?.Product ?? "Nethermind"; OS = Platform.GetPlatformName(); OSArchitecture = RuntimeInformation.OSArchitecture.ToString().ToLowerInvariant(); Runtime = RuntimeInformation.FrameworkDescription; - Version = infoAttr?.InformationalVersion ?? string.Empty; + Version = versionAttr.InformationalVersion; + + var index = Version.IndexOf('+', StringComparison.Ordinal); + + if (index != -1) + { + Commit = Version[(index + 1)..]; + Version = Version[..Math.Min(index + 9, Version.Length - 1)]; + } - ClientCode = "NM"; ClientId = $"{Name}/v{Version}/{OS.ToLowerInvariant()}-{OSArchitecture}/dotnet{Runtime[5..]}"; } @@ -37,9 +42,9 @@ static ProductInfo() public static string ClientId { get; } - public static string ClientCode { get; } + public static string ClientCode { get; } = "NM"; - public static string Commit { get; } + public static string Commit { get; set; } = string.Empty; public static string Name { get; } @@ -51,11 +56,11 @@ static ProductInfo() public static string Version { get; } - public static string Network { get; set; } = ""; + public static string Network { get; set; } = string.Empty; - public static string Instance { get; set; } = ""; + public static string Instance { get; set; } = string.Empty; - public static string SyncType { get; set; } = ""; + public static string SyncType { get; set; } = string.Empty; - public static string PruningMode { get; set; } = ""; + public static string PruningMode { get; set; } = string.Empty; } diff --git a/src/Nethermind/Nethermind.Core/Resettables/ResettableDictionary.cs b/src/Nethermind/Nethermind.Core/Resettables/ResettableDictionary.cs index 7dd63feef16..04607484640 100644 --- a/src/Nethermind/Nethermind.Core/Resettables/ResettableDictionary.cs +++ b/src/Nethermind/Nethermind.Core/Resettables/ResettableDictionary.cs @@ -111,13 +111,19 @@ public TValue this[TKey key] public ICollection Keys => _wrapped.Keys; public ICollection Values => _wrapped.Values; - public void Reset() + public void Reset(bool resizeCollections = true) { if (_wrapped.Count == 0) { return; } + if (!resizeCollections) + { + _wrapped.Clear(); + return; + } + if (_wrapped.Count < _currentCapacity / _resetRatio && _currentCapacity != _startCapacity) { _currentCapacity = Math.Max(_startCapacity, _currentCapacity / _resetRatio); diff --git a/src/Nethermind/Nethermind.Core/Resettables/ResettableHashSet.cs b/src/Nethermind/Nethermind.Core/Resettables/ResettableHashSet.cs index c3f81bd7f57..4db6c75bd79 100644 --- a/src/Nethermind/Nethermind.Core/Resettables/ResettableHashSet.cs +++ b/src/Nethermind/Nethermind.Core/Resettables/ResettableHashSet.cs @@ -61,12 +61,17 @@ public bool Remove(T item) public int Count => _wrapped.Count; public bool IsReadOnly => false; - public void Reset() + public void Reset(bool resizeCollections = true) { if (_wrapped.Count == 0) { return; } + if (!resizeCollections) + { + _wrapped.Clear(); + return; + } if (_wrapped.Count < _currentCapacity / _resetRatio && _currentCapacity != _startCapacity) { diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index f5f20d2eb93..b3b5d0ee5ac 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -176,11 +176,6 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// bool IsEip2200Enabled { get; } - /// - /// Berlin subroutines -> https://github.com/ethereum/EIPs/issues/2315 - /// - bool IsEip2315Enabled { get; } - /// /// Berlin BLS crypto precompiles /// @@ -356,8 +351,6 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool ShiftOpcodesEnabled => IsEip145Enabled; - public bool SubroutinesEnabled => IsEip2315Enabled; - public bool RevertOpcodeEnabled => IsEip140Enabled; public bool ExtCodeHashOpcodeEnabled => IsEip1052Enabled; diff --git a/src/Nethermind/Nethermind.Core/Threading/ThreadExtensions.cs b/src/Nethermind/Nethermind.Core/Threading/ThreadExtensions.cs index 31d892ba8b6..002c6dadbe5 100644 --- a/src/Nethermind/Nethermind.Core/Threading/ThreadExtensions.cs +++ b/src/Nethermind/Nethermind.Core/Threading/ThreadExtensions.cs @@ -10,7 +10,7 @@ public static class ThreadExtensions { public readonly struct Disposable : IDisposable { - private readonly Thread _thread; + private readonly Thread? _thread; private readonly ThreadPriority _previousPriority; internal Disposable(Thread thread) @@ -22,7 +22,10 @@ internal Disposable(Thread thread) public void Dispose() { - _thread.Priority = _previousPriority; + if (_thread is not null && Thread.CurrentThread == _thread) + { + _thread.Priority = _previousPriority; + } } } diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index f83f0ea5d75..1371eba41de 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -266,6 +266,33 @@ public bool Return(Transaction obj) return true; } } + + public void CopyTo(Transaction tx) + { + tx.ChainId = ChainId; + tx.Type = Type; + tx.SourceHash = SourceHash; + tx.Mint = Mint; + tx.IsOPSystemTransaction = IsOPSystemTransaction; + tx.Nonce = Nonce; + tx.GasPrice = GasPrice; + tx.GasBottleneck = GasBottleneck; + tx.DecodedMaxFeePerGas = DecodedMaxFeePerGas; + tx.GasLimit = GasLimit; + tx.To = To; + tx.Value = Value; + tx.Data = Data; + tx.SenderAddress = SenderAddress; + tx.Signature = Signature; + tx.Timestamp = Timestamp; + tx.AccessList = AccessList; + tx.MaxFeePerBlobGas = MaxFeePerBlobGas; + tx.BlobVersionedHashes = BlobVersionedHashes; + tx.NetworkWrapper = NetworkWrapper; + tx.IsServiceTransaction = IsServiceTransaction; + tx.PoolIndex = PoolIndex; + tx._size = _size; + } } /// diff --git a/src/Nethermind/Nethermind.Crypto/AesEngineX86Intrinsic.cs b/src/Nethermind/Nethermind.Crypto/AesEngineX86Intrinsic.cs deleted file mode 100644 index 1f5751eaf3e..00000000000 --- a/src/Nethermind/Nethermind.Crypto/AesEngineX86Intrinsic.cs +++ /dev/null @@ -1,425 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only -// Modified from BouncyCastle MIT - -#pragma warning disable CA1857 // A constant is expected for the parameter - -using System; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Runtime.Intrinsics; - -using Org.BouncyCastle.Crypto; -using Org.BouncyCastle.Crypto.Parameters; - -using Aes = System.Runtime.Intrinsics.X86.Aes; -using Sse2 = System.Runtime.Intrinsics.X86.Sse2; - -namespace Nethermind.Crypto; - -public sealed class AesEngineX86Intrinsic : IBlockCipher -{ - public static bool IsSupported => Aes.IsSupported; - public bool IsPartialBlockOkay => false; - public void Reset() { } - - public AesEngineX86Intrinsic() - { - if (!IsSupported) - throw new PlatformNotSupportedException(nameof(AesEngineX86Intrinsic)); - } - - public string AlgorithmName => "AES"; - - public int GetBlockSize() => 16; - - private AesEncoderDecoder _implementation; - - public void Init(bool forEncryption, ICipherParameters parameters) - { - if (parameters is not KeyParameter keyParameter) - { - ArgumentNullException.ThrowIfNull(parameters, nameof(parameters)); - throw new ArgumentException("invalid type: " + parameters.GetType(), nameof(parameters)); - } - - Vector128[] roundKeys = CreateRoundKeys(keyParameter.GetKey(), forEncryption); - _implementation = AesEncoderDecoder.Init(forEncryption, roundKeys); - } - - public int ProcessBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff) - { - Check.DataLength(inBuf, inOff, 16); - Check.OutputLength(outBuf, outOff, 16); - - Vector128 state = Unsafe.As>(ref Unsafe.Add(ref MemoryMarshal.GetArrayDataReference(inBuf), inOff)); - - _implementation.ProcessRounds(ref state); - - Unsafe.As>(ref Unsafe.Add(ref MemoryMarshal.GetArrayDataReference(outBuf), outOff)) = state; - - return 16; - } - - private static Vector128[] CreateRoundKeys(byte[] key, bool forEncryption) - { - Vector128[] K = key.Length switch - { - 16 => KeyLength16(key), - 24 => KeyLength24(key), - 32 => KeyLength32(key), - _ => throw new ArgumentException("Key length not 128/192/256 bits.") - }; - - if (!forEncryption) - { - for (int i = 1, last = K.Length - 1; i < last; ++i) - { - K[i] = Aes.InverseMixColumns(K[i]); - } - - Array.Reverse(K); - } - - return K; - - [SkipLocalsInit] - static Vector128[] KeyLength16(byte[] key) - { - ReadOnlySpan rcon = stackalloc byte[] { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 }; - - Vector128 s = MemoryMarshal.Read>(key.AsSpan(0, 16)); - Vector128[] K = new Vector128[11]; - K[0] = s; - - for (int round = 0; round < 10;) - { - Vector128 t = Aes.KeygenAssist(s, rcon[round++]); - t = Sse2.Shuffle(t.AsInt32(), 0xFF).AsByte(); - s = Sse2.Xor(s, Sse2.ShiftLeftLogical128BitLane(s, 8)); - s = Sse2.Xor(s, Sse2.ShiftLeftLogical128BitLane(s, 4)); - s = Sse2.Xor(s, t); - K[round] = s; - } - - return K; - } - - static Vector128[] KeyLength24(byte[] key) - { - Vector128 s1 = MemoryMarshal.Read>(key.AsSpan(0, 16)); - Vector128 s2 = MemoryMarshal.Read>(key.AsSpan(16, 8)).ToVector128(); - Vector128[] K = new Vector128[13]; - K[0] = s1; - - byte rcon = 0x01; - for (int round = 0; ;) - { - Vector128 t1 = Aes.KeygenAssist(s2, rcon); rcon <<= 1; - t1 = Sse2.Shuffle(t1.AsInt32(), 0x55).AsByte(); - - s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 8)); - s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 4)); - s1 = Sse2.Xor(s1, t1); - - K[++round] = Sse2.Xor(s2, Sse2.ShiftLeftLogical128BitLane(s1, 8)); - - Vector128 s3 = Sse2.Xor(s2, Sse2.ShiftRightLogical128BitLane(s1, 12)); - s3 = Sse2.Xor(s3, Sse2.ShiftLeftLogical128BitLane(s3, 4)); - - K[++round] = Sse2.Xor( - Sse2.ShiftRightLogical128BitLane(s1, 8), - Sse2.ShiftLeftLogical128BitLane(s3, 8)); - - Vector128 t2 = Aes.KeygenAssist(s3, rcon); rcon <<= 1; - t2 = Sse2.Shuffle(t2.AsInt32(), 0x55).AsByte(); - - s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 8)); - s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 4)); - s1 = Sse2.Xor(s1, t2); - - K[++round] = s1; - - if (round == 12) - break; - - s2 = Sse2.Xor(s3, Sse2.ShiftRightLogical128BitLane(s1, 12)); - s2 = Sse2.Xor(s2, Sse2.ShiftLeftLogical128BitLane(s2, 4)); - s2 = s2.WithUpper(Vector64.Zero); - } - - return K; - } - - static Vector128[] KeyLength32(byte[] key) - { - Vector128 s1 = MemoryMarshal.Read>(key.AsSpan(0, 16)); - Vector128 s2 = MemoryMarshal.Read>(key.AsSpan(16, 16)); - Vector128[] K = new Vector128[15]; - K[0] = s1; - K[1] = s2; - - byte rcon = 0x01; - for (int round = 1; ;) - { - Vector128 t1 = Aes.KeygenAssist(s2, rcon); rcon <<= 1; - t1 = Sse2.Shuffle(t1.AsInt32(), 0xFF).AsByte(); - s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 8)); - s1 = Sse2.Xor(s1, Sse2.ShiftLeftLogical128BitLane(s1, 4)); - s1 = Sse2.Xor(s1, t1); - K[++round] = s1; - - if (round == 14) - break; - - Vector128 t2 = Aes.KeygenAssist(s1, 0x00); - t2 = Sse2.Shuffle(t2.AsInt32(), 0xAA).AsByte(); - s2 = Sse2.Xor(s2, Sse2.ShiftLeftLogical128BitLane(s2, 8)); - s2 = Sse2.Xor(s2, Sse2.ShiftLeftLogical128BitLane(s2, 4)); - s2 = Sse2.Xor(s2, t2); - K[++round] = s2; - } - - return K; - } - } - - private abstract class AesEncoderDecoder - { - protected readonly Vector128[] _roundKeys; - - public AesEncoderDecoder(Vector128[] roundKeys) - { - _roundKeys = roundKeys; - } - - public static AesEncoderDecoder Init(bool forEncryption, Vector128[] roundKeys) - { - if (roundKeys.Length == 11) - { - return forEncryption ? new Encode128(roundKeys) : new Decode128(roundKeys); - } - else if (roundKeys.Length == 13) - { - return forEncryption ? new Encode192(roundKeys) : new Decode192(roundKeys); - } - else - { - return forEncryption ? new Encode256(roundKeys) : new Decode256(roundKeys); - } - } - - public abstract void ProcessRounds(ref Vector128 state); - - private sealed class Encode128 : AesEncoderDecoder - { - public Encode128(Vector128[] roundKeys) : base(roundKeys) { } - - public override void ProcessRounds(ref Vector128 state) - { - // Take local reference to array so Jit can reason length doesn't change in method - Vector128[] roundKeys = _roundKeys; - { - // Get the Jit to bounds check once rather than each increasing array access - Vector128 temp = roundKeys[10]; - } - - // Operate on non-ref local so it remains in register rather than operating on memory - Vector128 state2 = Sse2.Xor(state, roundKeys[0]); - state2 = Aes.Encrypt(state2, roundKeys[1]); - state2 = Aes.Encrypt(state2, roundKeys[2]); - state2 = Aes.Encrypt(state2, roundKeys[3]); - state2 = Aes.Encrypt(state2, roundKeys[4]); - state2 = Aes.Encrypt(state2, roundKeys[5]); - state2 = Aes.Encrypt(state2, roundKeys[6]); - state2 = Aes.Encrypt(state2, roundKeys[7]); - state2 = Aes.Encrypt(state2, roundKeys[8]); - state2 = Aes.Encrypt(state2, roundKeys[9]); - state2 = Aes.EncryptLast(state2, roundKeys[10]); - // Copy back to ref - state = state2; - } - } - - private sealed class Decode128 : AesEncoderDecoder - { - public Decode128(Vector128[] roundKeys) : base(roundKeys) { } - - public override void ProcessRounds(ref Vector128 state) - { - // Take local reference to array so Jit can reason length doesn't change in method - Vector128[] roundKeys = _roundKeys; - { - // Get the Jit to bounds check once rather than each increasing array access - Vector128 temp = roundKeys[10]; - } - - // Operate on non-ref local so it remains in register rather than operating on memory - Vector128 state2 = Sse2.Xor(state, roundKeys[0]); - state2 = Aes.Decrypt(state2, roundKeys[1]); - state2 = Aes.Decrypt(state2, roundKeys[2]); - state2 = Aes.Decrypt(state2, roundKeys[3]); - state2 = Aes.Decrypt(state2, roundKeys[4]); - state2 = Aes.Decrypt(state2, roundKeys[5]); - state2 = Aes.Decrypt(state2, roundKeys[6]); - state2 = Aes.Decrypt(state2, roundKeys[7]); - state2 = Aes.Decrypt(state2, roundKeys[8]); - state2 = Aes.Decrypt(state2, roundKeys[9]); - state2 = Aes.DecryptLast(state2, roundKeys[10]); - // Copy back to ref - state = state2; - } - } - - private sealed class Encode192 : AesEncoderDecoder - { - public Encode192(Vector128[] roundKeys) : base(roundKeys) { } - - public override void ProcessRounds(ref Vector128 state) - { - // Take local reference to array so Jit can reason length doesn't change in method - Vector128[] roundKeys = _roundKeys; - { - // Get the Jit to bounds check once rather than each increasing array access - Vector128 temp = roundKeys[12]; - } - - // Operate on non-ref local so it remains in register rather than operating on memory - Vector128 state2 = Sse2.Xor(state, roundKeys[0]); - state2 = Aes.Encrypt(state2, roundKeys[1]); - state2 = Aes.Encrypt(state2, roundKeys[2]); - state2 = Aes.Encrypt(state2, roundKeys[3]); - state2 = Aes.Encrypt(state2, roundKeys[4]); - state2 = Aes.Encrypt(state2, roundKeys[5]); - state2 = Aes.Encrypt(state2, roundKeys[6]); - state2 = Aes.Encrypt(state2, roundKeys[7]); - state2 = Aes.Encrypt(state2, roundKeys[8]); - state2 = Aes.Encrypt(state2, roundKeys[9]); - state2 = Aes.Encrypt(state2, roundKeys[10]); - state2 = Aes.Encrypt(state2, roundKeys[11]); - state2 = Aes.EncryptLast(state2, roundKeys[12]); - // Copy back to ref - state = state2; - } - } - - private sealed class Decode192 : AesEncoderDecoder - { - public Decode192(Vector128[] roundKeys) : base(roundKeys) { } - - public override void ProcessRounds(ref Vector128 state) - { - // Take local reference to array so Jit can reason length doesn't change in method - Vector128[] roundKeys = _roundKeys; - { - // Get the Jit to bounds check once rather than each increasing array access - Vector128 temp = roundKeys[12]; - } - - // Operate on non-ref local so it remains in register rather than operating on memory - Vector128 state2 = Sse2.Xor(state, roundKeys[0]); - state2 = Aes.Decrypt(state2, roundKeys[1]); - state2 = Aes.Decrypt(state2, roundKeys[2]); - state2 = Aes.Decrypt(state2, roundKeys[3]); - state2 = Aes.Decrypt(state2, roundKeys[4]); - state2 = Aes.Decrypt(state2, roundKeys[5]); - state2 = Aes.Decrypt(state2, roundKeys[6]); - state2 = Aes.Decrypt(state2, roundKeys[7]); - state2 = Aes.Decrypt(state2, roundKeys[8]); - state2 = Aes.Decrypt(state2, roundKeys[9]); - state2 = Aes.Decrypt(state2, roundKeys[10]); - state2 = Aes.Decrypt(state2, roundKeys[11]); - state2 = Aes.DecryptLast(state2, roundKeys[12]); - // Copy back to ref - state = state2; - } - } - - private sealed class Encode256 : AesEncoderDecoder - { - public Encode256(Vector128[] roundKeys) : base(roundKeys) { } - - public override void ProcessRounds(ref Vector128 state) - { - // Take local reference to array so Jit can reason length doesn't change in method - Vector128[] roundKeys = _roundKeys; - { - // Get the Jit to bounds check once rather than each increasing array access - Vector128 temp = roundKeys[14]; - } - - // Operate on non-ref local so it remains in register rather than operating on memory - Vector128 state2 = Sse2.Xor(state, roundKeys[0]); - state2 = Aes.Encrypt(state2, roundKeys[1]); - state2 = Aes.Encrypt(state2, roundKeys[2]); - state2 = Aes.Encrypt(state2, roundKeys[3]); - state2 = Aes.Encrypt(state2, roundKeys[4]); - state2 = Aes.Encrypt(state2, roundKeys[5]); - state2 = Aes.Encrypt(state2, roundKeys[6]); - state2 = Aes.Encrypt(state2, roundKeys[7]); - state2 = Aes.Encrypt(state2, roundKeys[8]); - state2 = Aes.Encrypt(state2, roundKeys[9]); - state2 = Aes.Encrypt(state2, roundKeys[10]); - state2 = Aes.Encrypt(state2, roundKeys[11]); - state2 = Aes.Encrypt(state2, roundKeys[12]); - state2 = Aes.Encrypt(state2, roundKeys[13]); - state2 = Aes.EncryptLast(state2, roundKeys[14]); - // Copy back to ref - state = state2; - } - } - - private sealed class Decode256 : AesEncoderDecoder - { - public Decode256(Vector128[] roundKeys) : base(roundKeys) { } - - public override void ProcessRounds(ref Vector128 state) - { - // Take local reference to array so Jit can reason length doesn't change in method - Vector128[] roundKeys = _roundKeys; - { - // Get the Jit to bounds check once rather than each increasing array access - Vector128 temp = roundKeys[14]; - } - - // Operate on non-ref local so it remains in register rather than operating on memory - Vector128 state2 = Sse2.Xor(state, roundKeys[0]); - state2 = Aes.Decrypt(state2, roundKeys[1]); - state2 = Aes.Decrypt(state2, roundKeys[2]); - state2 = Aes.Decrypt(state2, roundKeys[3]); - state2 = Aes.Decrypt(state2, roundKeys[4]); - state2 = Aes.Decrypt(state2, roundKeys[5]); - state2 = Aes.Decrypt(state2, roundKeys[6]); - state2 = Aes.Decrypt(state2, roundKeys[7]); - state2 = Aes.Decrypt(state2, roundKeys[8]); - state2 = Aes.Decrypt(state2, roundKeys[9]); - state2 = Aes.Decrypt(state2, roundKeys[10]); - state2 = Aes.Decrypt(state2, roundKeys[11]); - state2 = Aes.Decrypt(state2, roundKeys[12]); - state2 = Aes.Decrypt(state2, roundKeys[13]); - state2 = Aes.DecryptLast(state2, roundKeys[14]); - // Copy back to ref - state = state2; - } - } - } - - private static class Check - { - public static void DataLength(byte[] buf, int off, int len) - { - if (off > (buf.Length - len)) ThrowDataLengthException(); - - static void ThrowDataLengthException() => throw new DataLengthException("input buffer too short"); - } - - public static void OutputLength(byte[] buf, int off, int len) - { - if (off > (buf.Length - len)) ThrowOutputLengthException(); - - static void ThrowOutputLengthException() => throw new OutputLengthException("output buffer too short"); - } - } -} - -#pragma warning restore CA1857 // A constant is expected for the parameter diff --git a/src/Nethermind/Nethermind.Crypto/EciesCipher.cs b/src/Nethermind/Nethermind.Crypto/EciesCipher.cs index 078ccd9666b..7e9f1d89409 100644 --- a/src/Nethermind/Nethermind.Crypto/EciesCipher.cs +++ b/src/Nethermind/Nethermind.Crypto/EciesCipher.cs @@ -6,91 +6,89 @@ using Nethermind.Core.Extensions; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Digests; -using Org.BouncyCastle.Crypto.Engines; using Org.BouncyCastle.Crypto.Macs; using Org.BouncyCastle.Crypto.Modes; using Org.BouncyCastle.Crypto.Parameters; -namespace Nethermind.Crypto +namespace Nethermind.Crypto; + +/// +/// Code adapted from ethereumJ (https://github.com/ethereum/ethereumj) +/// +public class EciesCipher : IEciesCipher { - /// - /// Code adapted from ethereumJ (https://github.com/ethereum/ethereumj) - /// - public class EciesCipher : IEciesCipher - { - private const int KeySize = 128; - private readonly ICryptoRandom _cryptoRandom; - private readonly PrivateKeyGenerator _keyGenerator; + private const int KeySize = 128; + private readonly ICryptoRandom _cryptoRandom; + private readonly PrivateKeyGenerator _keyGenerator; - public EciesCipher(ICryptoRandom cryptoRandom) - { - _cryptoRandom = cryptoRandom; - _keyGenerator = new PrivateKeyGenerator(cryptoRandom); - } + public EciesCipher(ICryptoRandom cryptoRandom) + { + _cryptoRandom = cryptoRandom; + _keyGenerator = new PrivateKeyGenerator(cryptoRandom); + } - private static readonly int ephemBytesLength = 2 * ((BouncyCrypto.DomainParameters.Curve.FieldSize + 7) / 8) + 1; + private static readonly int ephemBytesLength = 2 * ((BouncyCrypto.DomainParameters.Curve.FieldSize + 7) / 8) + 1; - public (bool, byte[]) Decrypt(PrivateKey privateKey, byte[] cipherText, byte[]? macData = null) + public (bool, byte[]) Decrypt(PrivateKey privateKey, byte[] cipherText, byte[]? macData = null) + { + if (cipherText[0] != 4) // if not a compressed public key then probably we need to use EIP8 { - if (cipherText[0] != 4) // if not a compressed public key then probably we need to use EIP8 - { - return (false, null); - } + return (false, null); + } - Span ephemBytes = cipherText.AsSpan(0, ephemBytesLength); - byte[] iv = cipherText.Slice(ephemBytesLength, KeySize / 8); - byte[] cipherBody = cipherText.Slice(ephemBytesLength + KeySize / 8); + Span ephemBytes = cipherText.AsSpan(0, ephemBytesLength); + byte[] iv = cipherText.Slice(ephemBytesLength, KeySize / 8); + byte[] cipherBody = cipherText.Slice(ephemBytesLength + KeySize / 8); - byte[] plaintext = Decrypt(new PublicKey(ephemBytes), privateKey, iv, cipherBody, macData); - return (true, plaintext); - } + byte[] plaintext = Decrypt(new PublicKey(ephemBytes), privateKey, iv, cipherBody, macData); + return (true, plaintext); + } - public byte[] Encrypt(PublicKey recipientPublicKey, byte[] plainText, byte[] macData) - { - byte[] iv = _cryptoRandom.GenerateRandomBytes(KeySize / 8); - PrivateKey ephemeralPrivateKey = _keyGenerator.Generate(); - IIesEngine iesEngine = MakeIesEngine(true, recipientPublicKey, ephemeralPrivateKey, iv); - byte[] cipher = iesEngine.ProcessBlock(plainText, 0, plainText.Length, macData); + public byte[] Encrypt(PublicKey recipientPublicKey, byte[] plainText, byte[] macData) + { + byte[] iv = _cryptoRandom.GenerateRandomBytes(KeySize / 8); + PrivateKey ephemeralPrivateKey = _keyGenerator.Generate(); + IIesEngine iesEngine = MakeIesEngine(true, recipientPublicKey, ephemeralPrivateKey, iv); + byte[] cipher = iesEngine.ProcessBlock(plainText, 0, plainText.Length, macData); - byte[] prefixedBytes = ephemeralPrivateKey.PublicKey.PrefixedBytes; + byte[] prefixedBytes = ephemeralPrivateKey.PublicKey.PrefixedBytes; - byte[] outputArray = new byte[prefixedBytes.Length + iv.Length + cipher.Length]; - Span outputSpan = outputArray; + byte[] outputArray = new byte[prefixedBytes.Length + iv.Length + cipher.Length]; + Span outputSpan = outputArray; - prefixedBytes.AsSpan().CopyTo(outputSpan); - outputSpan = outputSpan[prefixedBytes.Length..]; + prefixedBytes.AsSpan().CopyTo(outputSpan); + outputSpan = outputSpan[prefixedBytes.Length..]; - iv.AsSpan().CopyTo(outputSpan); - outputSpan = outputSpan[iv.Length..]; + iv.AsSpan().CopyTo(outputSpan); + outputSpan = outputSpan[iv.Length..]; - cipher.AsSpan().CopyTo(outputSpan); + cipher.AsSpan().CopyTo(outputSpan); - return outputArray; - } + return outputArray; + } - private readonly OptimizedKdf _optimizedKdf = new(); + private readonly OptimizedKdf _optimizedKdf = new(); - private static byte[] Decrypt(PublicKey ephemeralPublicKey, PrivateKey privateKey, byte[] iv, byte[] ciphertextBody, byte[] macData) - { - IIesEngine iesEngine = MakeIesEngine(false, ephemeralPublicKey, privateKey, iv); - return iesEngine.ProcessBlock(ciphertextBody, 0, ciphertextBody.Length, macData); - } + private static byte[] Decrypt(PublicKey ephemeralPublicKey, PrivateKey privateKey, byte[] iv, byte[] ciphertextBody, byte[] macData) + { + IIesEngine iesEngine = MakeIesEngine(false, ephemeralPublicKey, privateKey, iv); + return iesEngine.ProcessBlock(ciphertextBody, 0, ciphertextBody.Length, macData); + } - private static readonly IesParameters _iesParameters = new IesWithCipherParameters(Array.Empty(), Array.Empty(), KeySize, KeySize); + private static readonly IesParameters _iesParameters = new IesWithCipherParameters(Array.Empty(), Array.Empty(), KeySize, KeySize); - private static IIesEngine MakeIesEngine(bool isEncrypt, PublicKey publicKey, PrivateKey privateKey, byte[] iv) - { - IBlockCipher aesFastEngine = AesEngineX86Intrinsic.IsSupported ? new AesEngineX86Intrinsic() : new AesEngine(); + private static IIesEngine MakeIesEngine(bool isEncrypt, PublicKey publicKey, PrivateKey privateKey, byte[] iv) + { + IBlockCipher aesFastEngine = AesUtilities.CreateEngine(); - EthereumIesEngine iesEngine = new( - new HMac(new Sha256Digest()), - new Sha256Digest(), - new BufferedBlockCipher(new SicBlockCipher(aesFastEngine))); + EthereumIesEngine iesEngine = new( + new HMac(new Sha256Digest()), + new Sha256Digest(), + new BufferedBlockCipher(new SicBlockCipher(aesFastEngine))); - ParametersWithIV parametersWithIV = new(_iesParameters, iv); - byte[] secret = SecP256k1.EcdhSerialized(publicKey.Bytes, privateKey.KeyBytes); - iesEngine.Init(isEncrypt, OptimizedKdf.Derive(secret), parametersWithIV); - return iesEngine; - } + ParametersWithIV parametersWithIV = new(_iesParameters, iv); + byte[] secret = SecP256k1.EcdhSerialized(publicKey.Bytes, privateKey.KeyBytes); + iesEngine.Init(isEncrypt, OptimizedKdf.Derive(secret), parametersWithIV); + return iesEngine; } } diff --git a/src/Nethermind/Nethermind.Crypto/EthereumIesEngine.cs b/src/Nethermind/Nethermind.Crypto/EthereumIesEngine.cs index 5520deab0fc..d50a2631c97 100644 --- a/src/Nethermind/Nethermind.Crypto/EthereumIesEngine.cs +++ b/src/Nethermind/Nethermind.Crypto/EthereumIesEngine.cs @@ -158,7 +158,7 @@ private byte[] DecryptBlock(byte[] inEnc, int inOff, int inLen, byte[]? macData) _mac.DoFinal(t2, 0); - if (!Arrays.ConstantTimeAreEqual(t1, t2)) + if (!Arrays.FixedTimeEquals(t1, t2)) { throw new InvalidCipherTextException("Invalid MAC."); } diff --git a/src/Nethermind/Nethermind.Crypto/KzgPolynomialCommitments.cs b/src/Nethermind/Nethermind.Crypto/KzgPolynomialCommitments.cs index d6abf80311d..758a5fe86e2 100644 --- a/src/Nethermind/Nethermind.Crypto/KzgPolynomialCommitments.cs +++ b/src/Nethermind/Nethermind.Crypto/KzgPolynomialCommitments.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Buffers; using System.IO; using System.Security.Cryptography; using System.Threading; @@ -90,15 +91,35 @@ public static bool VerifyProof(ReadOnlySpan commitment, ReadOnlySpan public static bool AreProofsValid(byte[][] blobs, byte[][] commitments, byte[][] proofs) { - byte[] flatBlobs = new byte[blobs.Length * Ckzg.Ckzg.BytesPerBlob]; - byte[] flatCommitments = new byte[blobs.Length * Ckzg.Ckzg.BytesPerCommitment]; - byte[] flatProofs = new byte[blobs.Length * Ckzg.Ckzg.BytesPerProof]; + if (blobs.Length is 1 && commitments.Length is 1 && proofs.Length is 1) + { + try + { + return Ckzg.Ckzg.VerifyBlobKzgProof(blobs[0], commitments[0], proofs[0], _ckzgSetup); + } + catch (Exception e) when (e is ArgumentException or ApplicationException or InsufficientMemoryException) + { + return false; + } + } + + int length = blobs.Length * Ckzg.Ckzg.BytesPerBlob; + byte[] flatBlobsArray = ArrayPool.Shared.Rent(length); + Span flatBlobs = new(flatBlobsArray, 0, length); + + length = blobs.Length * Ckzg.Ckzg.BytesPerCommitment; + byte[] flatCommitmentsArray = ArrayPool.Shared.Rent(length); + Span flatCommitments = new(flatCommitmentsArray, 0, length); + + length = blobs.Length * Ckzg.Ckzg.BytesPerProof; + byte[] flatProofsArray = ArrayPool.Shared.Rent(length); + Span flatProofs = new(flatProofsArray, 0, length); for (int i = 0; i < blobs.Length; i++) { - Array.Copy(blobs[i], 0, flatBlobs, i * Ckzg.Ckzg.BytesPerBlob, Ckzg.Ckzg.BytesPerBlob); - Array.Copy(commitments[i], 0, flatCommitments, i * Ckzg.Ckzg.BytesPerCommitment, Ckzg.Ckzg.BytesPerCommitment); - Array.Copy(proofs[i], 0, flatProofs, i * Ckzg.Ckzg.BytesPerProof, Ckzg.Ckzg.BytesPerProof); + blobs[i].CopyTo(flatBlobs.Slice(i * Ckzg.Ckzg.BytesPerBlob, Ckzg.Ckzg.BytesPerBlob)); + commitments[i].CopyTo(flatCommitments.Slice(i * Ckzg.Ckzg.BytesPerCommitment, Ckzg.Ckzg.BytesPerCommitment)); + proofs[i].CopyTo(flatProofs.Slice(i * Ckzg.Ckzg.BytesPerProof, Ckzg.Ckzg.BytesPerProof)); } try @@ -110,10 +131,16 @@ public static bool AreProofsValid(byte[][] blobs, byte[][] commitments, byte[][] { return false; } + finally + { + ArrayPool.Shared.Return(flatBlobsArray); + ArrayPool.Shared.Return(flatCommitmentsArray); + ArrayPool.Shared.Return(flatProofsArray); + } } /// - /// Method to genereate correct data for tests only, not safe + /// Method to generate correct data for tests only, not safe /// public static void KzgifyBlob(ReadOnlySpan blob, Span commitment, Span proof, Span hashV1) { diff --git a/src/Nethermind/Nethermind.Crypto/Nethermind.Crypto.csproj b/src/Nethermind/Nethermind.Crypto/Nethermind.Crypto.csproj index 0c5702026d5..cbd9d76af1a 100644 --- a/src/Nethermind/Nethermind.Crypto/Nethermind.Crypto.csproj +++ b/src/Nethermind/Nethermind.Crypto/Nethermind.Crypto.csproj @@ -11,10 +11,10 @@ + - diff --git a/src/Nethermind/Nethermind.Db.Rocks/Config/DbConfig.cs b/src/Nethermind/Nethermind.Db.Rocks/Config/DbConfig.cs index c4d54c4ece6..b18a43b70b5 100644 --- a/src/Nethermind/Nethermind.Db.Rocks/Config/DbConfig.cs +++ b/src/Nethermind/Nethermind.Db.Rocks/Config/DbConfig.cs @@ -26,7 +26,7 @@ public class DbConfig : IDbConfig public bool? DisableCompression { get; set; } = false; public bool? UseLz4 { get; set; } = false; public ulong? CompactionReadAhead { get; set; } = (ulong)256.KiB(); - public IDictionary? AdditionalRocksDbOptions { get; set; } + public string? AdditionalRocksDbOptions { get; set; } public ulong? MaxBytesForLevelBase { get; set; } = (ulong)256.MiB(); public ulong TargetFileSizeBase { get; set; } = (ulong)64.MiB(); public int TargetFileSizeMultiplier { get; set; } = 1; @@ -36,7 +36,7 @@ public class DbConfig : IDbConfig public bool AllowMmapReads { get; set; } = false; public bool? VerifyChecksum { get; set; } = true; public double MaxBytesForLevelMultiplier { get; set; } = 10; - public ulong? MaxCompactionBytes { get; set; } = null; + public ulong? MaxCompactionBytes { get; set; } = (ulong)4.GiB(); public int MinWriteBufferNumberToMerge { get; set; } = 1; public ulong? RowCacheSize { get; set; } = null; public bool OptimizeFiltersForHits { get; set; } = true; @@ -51,6 +51,10 @@ public class DbConfig : IDbConfig public int? UseRibbonFilterStartingFromLevel { get; set; } public ulong BytesPerSync { get; set; } = 0; public double? DataBlockIndexUtilRatio { get; set; } + public bool EnableFileWarmer { get; set; } = false; + public double CompressibilityHint { get; set; } = 1.0; + + public ulong BlobTransactionsDbBlockCacheSize { get; set; } = (ulong)32.MiB(); public ulong ReceiptsDbWriteBufferSize { get; set; } = (ulong)2.MiB(); public uint ReceiptsDbWriteBufferNumber { get; set; } = 2; @@ -62,8 +66,9 @@ public class DbConfig : IDbConfig public bool? ReceiptsDbUseDirectReads { get; set; } public bool? ReceiptsDbUseDirectIoForFlushAndCompactions { get; set; } public ulong? ReceiptsDbCompactionReadAhead { get; set; } - public ulong ReceiptsDbTargetFileSizeBase { get; set; } = (ulong)256.MiB(); - public IDictionary? ReceiptsDbAdditionalRocksDbOptions { get; set; } + public ulong ReceiptsDbTargetFileSizeBase { get; set; } = (ulong)64.MiB(); + public double ReceiptsDbCompressibilityHint { get; set; } = 0.35; + public string? ReceiptsDbAdditionalRocksDbOptions { get; set; } = "compaction_pri=kOldestLargestSeqFirst"; public ulong BlocksDbWriteBufferSize { get; set; } = (ulong)64.MiB(); public uint BlocksDbWriteBufferNumber { get; set; } = 2; @@ -75,7 +80,7 @@ public class DbConfig : IDbConfig public bool? BlocksDbUseDirectReads { get; set; } public bool? BlocksDbUseDirectIoForFlushAndCompactions { get; set; } public ulong? BlocksDbCompactionReadAhead { get; set; } - public IDictionary? BlocksDbAdditionalRocksDbOptions { get; set; } + public string? BlocksDbAdditionalRocksDbOptions { get; set; } = "compaction_pri=kOldestLargestSeqFirst"; public ulong HeadersDbWriteBufferSize { get; set; } = (ulong)8.MiB(); public uint HeadersDbWriteBufferNumber { get; set; } = 2; @@ -87,7 +92,7 @@ public class DbConfig : IDbConfig public bool? HeadersDbUseDirectReads { get; set; } public bool? HeadersDbUseDirectIoForFlushAndCompactions { get; set; } public ulong? HeadersDbCompactionReadAhead { get; set; } - public IDictionary? HeadersDbAdditionalRocksDbOptions { get; set; } + public string? HeadersDbAdditionalRocksDbOptions { get; set; } = "compaction_pri=kOldestLargestSeqFirst"; public ulong? HeadersDbMaxBytesForLevelBase { get; set; } = (ulong)128.MiB(); public ulong BlockNumbersDbWriteBufferSize { get; set; } = (ulong)8.MiB(); @@ -103,7 +108,7 @@ public class DbConfig : IDbConfig public bool? BlockNumbersDbUseDirectReads { get; set; } public bool? BlockNumbersDbUseDirectIoForFlushAndCompactions { get; set; } public ulong? BlockNumbersDbCompactionReadAhead { get; set; } - public IDictionary? BlockNumbersDbAdditionalRocksDbOptions { get; set; } + public string? BlockNumbersDbAdditionalRocksDbOptions { get; set; } public ulong? BlockNumbersDbMaxBytesForLevelBase { get; set; } = (ulong)16.MiB(); public ulong BlockInfosDbWriteBufferSize { get; set; } = (ulong)4.MiB(); @@ -116,7 +121,7 @@ public class DbConfig : IDbConfig public bool? BlockInfosDbUseDirectReads { get; set; } public bool? BlockInfosDbUseDirectIoForFlushAndCompactions { get; set; } public ulong? BlockInfosDbCompactionReadAhead { get; set; } - public IDictionary? BlockInfosDbAdditionalRocksDbOptions { get; set; } + public string? BlockInfosDbAdditionalRocksDbOptions { get; set; } = "compaction_pri=kOldestLargestSeqFirst"; public ulong PendingTxsDbWriteBufferSize { get; set; } = (ulong)4.MiB(); public uint PendingTxsDbWriteBufferNumber { get; set; } = 4; @@ -128,7 +133,7 @@ public class DbConfig : IDbConfig public bool? PendingTxsDbUseDirectReads { get; set; } public bool? PendingTxsDbUseDirectIoForFlushAndCompactions { get; set; } public ulong? PendingTxsDbCompactionReadAhead { get; set; } - public IDictionary? PendingTxsDbAdditionalRocksDbOptions { get; set; } + public string? PendingTxsDbAdditionalRocksDbOptions { get; set; } public ulong CodeDbWriteBufferSize { get; set; } = (ulong)1.MiB(); public uint CodeDbWriteBufferNumber { get; set; } = 2; @@ -143,7 +148,7 @@ public class DbConfig : IDbConfig public bool? CodeUseDirectReads { get; set; } public bool? CodeUseDirectIoForFlushAndCompactions { get; set; } public ulong? CodeCompactionReadAhead { get; set; } - public IDictionary? CodeDbAdditionalRocksDbOptions { get; set; } + public string? CodeDbAdditionalRocksDbOptions { get; set; } public ulong BloomDbWriteBufferSize { get; set; } = (ulong)1.KiB(); public uint BloomDbWriteBufferNumber { get; set; } = 4; @@ -151,32 +156,7 @@ public class DbConfig : IDbConfig public bool BloomDbCacheIndexAndFilterBlocks { get; set; } = false; public int? BloomDbMaxOpenFiles { get; set; } public long? BloomDbMaxBytesPerSec { get; set; } - public IDictionary? BloomDbAdditionalRocksDbOptions { get; set; } - - public ulong WitnessDbWriteBufferSize { get; set; } = (ulong)1.KiB(); - public uint WitnessDbWriteBufferNumber { get; set; } = 4; - public ulong WitnessDbBlockCacheSize { get; set; } = 0; - public bool WitnessDbCacheIndexAndFilterBlocks { get; set; } = false; - public int? WitnessDbMaxOpenFiles { get; set; } - public long? WitnessDbMaxBytesPerSec { get; set; } - public int? WitnessDbBlockSize { get; set; } - public bool? WitnessUseDirectReads { get; set; } - public bool? WitnessUseDirectIoForFlushAndCompactions { get; set; } - public ulong? WitnessCompactionReadAhead { get; set; } - public IDictionary? WitnessDbAdditionalRocksDbOptions { get; set; } - - // TODO - profile and customize - public ulong CanonicalHashTrieDbWriteBufferSize { get; set; } = (ulong)2.MB(); - public uint CanonicalHashTrieDbWriteBufferNumber { get; set; } = 4; - public ulong CanonicalHashTrieDbBlockCacheSize { get; set; } = 0; - public bool CanonicalHashTrieDbCacheIndexAndFilterBlocks { get; set; } = false; - public int? CanonicalHashTrieDbMaxOpenFiles { get; set; } - public long? CanonicalHashTrieDbMaxBytesPerSec { get; set; } - public int? CanonicalHashTrieDbBlockSize { get; set; } - public bool? CanonicalHashTrieUseDirectReads { get; set; } - public bool? CanonicalHashTrieUseDirectIoForFlushAndCompactions { get; set; } - public ulong? CanonicalHashTrieCompactionReadAhead { get; set; } - public IDictionary? CanonicalHashTrieDbAdditionalRocksDbOptions { get; set; } + public string? BloomDbAdditionalRocksDbOptions { get; set; } public ulong MetadataDbWriteBufferSize { get; set; } = (ulong)1.KiB(); public uint MetadataDbWriteBufferNumber { get; set; } = 4; @@ -188,7 +168,7 @@ public class DbConfig : IDbConfig public bool? MetadataUseDirectReads { get; set; } public bool? MetadataUseDirectIoForFlushAndCompactions { get; set; } public ulong? MetadataCompactionReadAhead { get; set; } - public IDictionary? MetadataDbAdditionalRocksDbOptions { get; set; } + public string? MetadataDbAdditionalRocksDbOptions { get; set; } public ulong StateDbWriteBufferSize { get; set; } = (ulong)64.MB(); public uint StateDbWriteBufferNumber { get; set; } = 4; @@ -223,7 +203,9 @@ public class DbConfig : IDbConfig public int? StateDbBloomFilterBitsPerKey { get; set; } = 15; public int? StateDbUseRibbonFilterStartingFromLevel { get; set; } = 2; public double? StateDbDataBlockIndexUtilRatio { get; set; } = 0.5; - public IDictionary? StateDbAdditionalRocksDbOptions { get; set; } + public bool StateDbEnableFileWarmer { get; set; } = false; + public double StateDbCompressibilityHint { get; set; } = 0.45; + public string? StateDbAdditionalRocksDbOptions { get; set; } public uint RecycleLogFileNum { get; set; } = 0; public bool WriteAheadLogSync { get; set; } = false; diff --git a/src/Nethermind/Nethermind.Db.Rocks/Config/IDbConfig.cs b/src/Nethermind/Nethermind.Db.Rocks/Config/IDbConfig.cs index 8cb1fa84edb..b19730fdf50 100644 --- a/src/Nethermind/Nethermind.Db.Rocks/Config/IDbConfig.cs +++ b/src/Nethermind/Nethermind.Db.Rocks/Config/IDbConfig.cs @@ -27,7 +27,7 @@ public interface IDbConfig : IConfig bool? DisableCompression { get; set; } bool? UseLz4 { get; set; } ulong? CompactionReadAhead { get; set; } - IDictionary? AdditionalRocksDbOptions { get; set; } + string? AdditionalRocksDbOptions { get; set; } ulong? MaxBytesForLevelBase { get; set; } ulong TargetFileSizeBase { get; set; } int TargetFileSizeMultiplier { get; set; } @@ -52,6 +52,10 @@ public interface IDbConfig : IConfig int? UseRibbonFilterStartingFromLevel { get; set; } ulong BytesPerSync { get; set; } double? DataBlockIndexUtilRatio { get; set; } + bool EnableFileWarmer { get; set; } + double CompressibilityHint { get; set; } + + ulong BlobTransactionsDbBlockCacheSize { get; set; } ulong ReceiptsDbWriteBufferSize { get; set; } uint ReceiptsDbWriteBufferNumber { get; set; } @@ -64,7 +68,8 @@ public interface IDbConfig : IConfig bool? ReceiptsDbUseDirectIoForFlushAndCompactions { get; set; } ulong? ReceiptsDbCompactionReadAhead { get; set; } ulong ReceiptsDbTargetFileSizeBase { get; set; } - IDictionary? ReceiptsDbAdditionalRocksDbOptions { get; set; } + double ReceiptsDbCompressibilityHint { get; set; } + string? ReceiptsDbAdditionalRocksDbOptions { get; set; } ulong BlocksDbWriteBufferSize { get; set; } uint BlocksDbWriteBufferNumber { get; set; } @@ -76,7 +81,7 @@ public interface IDbConfig : IConfig bool? BlocksDbUseDirectReads { get; set; } bool? BlocksDbUseDirectIoForFlushAndCompactions { get; set; } ulong? BlocksDbCompactionReadAhead { get; set; } - IDictionary? BlocksDbAdditionalRocksDbOptions { get; set; } + string? BlocksDbAdditionalRocksDbOptions { get; set; } ulong HeadersDbWriteBufferSize { get; set; } uint HeadersDbWriteBufferNumber { get; set; } @@ -88,7 +93,7 @@ public interface IDbConfig : IConfig bool? HeadersDbUseDirectReads { get; set; } bool? HeadersDbUseDirectIoForFlushAndCompactions { get; set; } ulong? HeadersDbCompactionReadAhead { get; set; } - IDictionary? HeadersDbAdditionalRocksDbOptions { get; set; } + string? HeadersDbAdditionalRocksDbOptions { get; set; } ulong? HeadersDbMaxBytesForLevelBase { get; set; } ulong BlockNumbersDbWriteBufferSize { get; set; } @@ -104,7 +109,7 @@ public interface IDbConfig : IConfig bool? BlockNumbersDbUseDirectReads { get; set; } bool? BlockNumbersDbUseDirectIoForFlushAndCompactions { get; set; } ulong? BlockNumbersDbCompactionReadAhead { get; set; } - IDictionary? BlockNumbersDbAdditionalRocksDbOptions { get; set; } + string? BlockNumbersDbAdditionalRocksDbOptions { get; set; } ulong? BlockNumbersDbMaxBytesForLevelBase { get; set; } ulong BlockInfosDbWriteBufferSize { get; set; } @@ -117,7 +122,7 @@ public interface IDbConfig : IConfig bool? BlockInfosDbUseDirectReads { get; set; } bool? BlockInfosDbUseDirectIoForFlushAndCompactions { get; set; } ulong? BlockInfosDbCompactionReadAhead { get; set; } - IDictionary? BlockInfosDbAdditionalRocksDbOptions { get; set; } + string? BlockInfosDbAdditionalRocksDbOptions { get; set; } ulong PendingTxsDbWriteBufferSize { get; set; } uint PendingTxsDbWriteBufferNumber { get; set; } @@ -129,7 +134,7 @@ public interface IDbConfig : IConfig bool? PendingTxsDbUseDirectReads { get; set; } bool? PendingTxsDbUseDirectIoForFlushAndCompactions { get; set; } ulong? PendingTxsDbCompactionReadAhead { get; set; } - IDictionary? PendingTxsDbAdditionalRocksDbOptions { get; set; } + string? PendingTxsDbAdditionalRocksDbOptions { get; set; } ulong CodeDbWriteBufferSize { get; set; } uint CodeDbWriteBufferNumber { get; set; } @@ -144,7 +149,7 @@ public interface IDbConfig : IConfig bool? CodeUseDirectReads { get; set; } bool? CodeUseDirectIoForFlushAndCompactions { get; set; } ulong? CodeCompactionReadAhead { get; set; } - IDictionary? CodeDbAdditionalRocksDbOptions { get; set; } + string? CodeDbAdditionalRocksDbOptions { get; set; } ulong BloomDbWriteBufferSize { get; set; } uint BloomDbWriteBufferNumber { get; set; } @@ -152,31 +157,7 @@ public interface IDbConfig : IConfig bool BloomDbCacheIndexAndFilterBlocks { get; set; } int? BloomDbMaxOpenFiles { get; set; } long? BloomDbMaxBytesPerSec { get; set; } - IDictionary? BloomDbAdditionalRocksDbOptions { get; set; } - - ulong WitnessDbWriteBufferSize { get; set; } - uint WitnessDbWriteBufferNumber { get; set; } - ulong WitnessDbBlockCacheSize { get; set; } - bool WitnessDbCacheIndexAndFilterBlocks { get; set; } - int? WitnessDbMaxOpenFiles { get; set; } - long? WitnessDbMaxBytesPerSec { get; set; } - int? WitnessDbBlockSize { get; set; } - bool? WitnessUseDirectReads { get; set; } - bool? WitnessUseDirectIoForFlushAndCompactions { get; set; } - ulong? WitnessCompactionReadAhead { get; set; } - IDictionary? WitnessDbAdditionalRocksDbOptions { get; set; } - - ulong CanonicalHashTrieDbWriteBufferSize { get; set; } - uint CanonicalHashTrieDbWriteBufferNumber { get; set; } - ulong CanonicalHashTrieDbBlockCacheSize { get; set; } - bool CanonicalHashTrieDbCacheIndexAndFilterBlocks { get; set; } - int? CanonicalHashTrieDbMaxOpenFiles { get; set; } - long? CanonicalHashTrieDbMaxBytesPerSec { get; set; } - int? CanonicalHashTrieDbBlockSize { get; set; } - bool? CanonicalHashTrieUseDirectReads { get; set; } - bool? CanonicalHashTrieUseDirectIoForFlushAndCompactions { get; set; } - ulong? CanonicalHashTrieCompactionReadAhead { get; set; } - IDictionary? CanonicalHashTrieDbAdditionalRocksDbOptions { get; set; } + string? BloomDbAdditionalRocksDbOptions { get; set; } ulong MetadataDbWriteBufferSize { get; set; } uint MetadataDbWriteBufferNumber { get; set; } @@ -188,7 +169,7 @@ public interface IDbConfig : IConfig bool? MetadataUseDirectReads { get; set; } bool? MetadataUseDirectIoForFlushAndCompactions { get; set; } ulong? MetadataCompactionReadAhead { get; set; } - IDictionary? MetadataDbAdditionalRocksDbOptions { get; set; } + string? MetadataDbAdditionalRocksDbOptions { get; set; } ulong StateDbWriteBufferSize { get; set; } uint StateDbWriteBufferNumber { get; set; } @@ -223,7 +204,9 @@ public interface IDbConfig : IConfig int? StateDbBloomFilterBitsPerKey { get; set; } int? StateDbUseRibbonFilterStartingFromLevel { get; set; } double? StateDbDataBlockIndexUtilRatio { get; set; } - IDictionary? StateDbAdditionalRocksDbOptions { get; set; } + bool StateDbEnableFileWarmer { get; set; } + double StateDbCompressibilityHint { get; set; } + string? StateDbAdditionalRocksDbOptions { get; set; } /// /// Enables DB Statistics - https://github.com/facebook/rocksdb/wiki/Statistics diff --git a/src/Nethermind/Nethermind.Db.Rocks/Config/PerTableDbConfig.cs b/src/Nethermind/Nethermind.Db.Rocks/Config/PerTableDbConfig.cs index 9628a384789..5ca7bb5a6de 100644 --- a/src/Nethermind/Nethermind.Db.Rocks/Config/PerTableDbConfig.cs +++ b/src/Nethermind/Nethermind.Db.Rocks/Config/PerTableDbConfig.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Generic; using System.IO; using System.Reflection; using Nethermind.Core.Extensions; @@ -12,6 +11,7 @@ namespace Nethermind.Db.Rocks.Config; public class PerTableDbConfig { private readonly string _tableName; + private readonly string? _columnName; private readonly IDbConfig _dbConfig; private readonly DbSettings _settings; @@ -20,10 +20,7 @@ public PerTableDbConfig(IDbConfig dbConfig, DbSettings dbSettings, string? colum _dbConfig = dbConfig; _settings = dbSettings; _tableName = _settings.DbName; - if (columnName is not null) - { - _tableName += columnName; - } + _columnName = columnName; } public bool CacheIndexAndFilterBlocks => _settings.CacheIndexAndFilterBlocks ?? ReadConfig(nameof(CacheIndexAndFilterBlocks)); @@ -34,7 +31,7 @@ public PerTableDbConfig(IDbConfig dbConfig, DbSettings dbSettings, string? colum public ulong WriteBufferNumber => _settings.WriteBufferNumber ?? ReadConfig(nameof(WriteBufferNumber)); - public IDictionary? AdditionalRocksDbOptions => ReadConfig?>(nameof(AdditionalRocksDbOptions)); + public string? AdditionalRocksDbOptions => ReadConfig(nameof(AdditionalRocksDbOptions)); public int? MaxOpenFiles => ReadConfig(nameof(MaxOpenFiles)); public long? MaxBytesPerSec => ReadConfig(nameof(MaxBytesPerSec)); @@ -73,46 +70,74 @@ public PerTableDbConfig(IDbConfig dbConfig, DbSettings dbSettings, string? colum public int? UseRibbonFilterStartingFromLevel => ReadConfig(nameof(UseRibbonFilterStartingFromLevel)); public ulong BytesPerSync => ReadConfig(nameof(BytesPerSync)); public double? DataBlockIndexUtilRatio => ReadConfig(nameof(DataBlockIndexUtilRatio)); + public bool EnableFileWarmer => ReadConfig(nameof(EnableFileWarmer)); + public double CompressibilityHint => ReadConfig(nameof(CompressibilityHint)); private T? ReadConfig(string propertyName) { - return ReadConfig(_dbConfig, propertyName, GetPrefix()); + return ReadConfig(_dbConfig, propertyName, GetPrefixes()); } - private string GetPrefix() + private string[] GetPrefixes() { - return _tableName.StartsWith("State") ? "StateDb" : string.Concat(_tableName, "Db"); + if (_tableName.StartsWith("State")) + { + return ["StateDb"]; + } + + if (_columnName != null) + { + return [ + string.Concat(_tableName, _columnName, "Db"), + string.Concat(_tableName, "Db"), + ]; + } + + return [string.Concat(_tableName, "Db")]; } - private static T? ReadConfig(IDbConfig dbConfig, string propertyName, string prefix) + private static T? ReadConfig(IDbConfig dbConfig, string propertyName, string[] prefixes) { - string prefixed = string.Concat(prefix, propertyName); - try { Type type = dbConfig.GetType(); - PropertyInfo? propertyInfo = type.GetProperty(prefixed, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); + PropertyInfo? propertyInfo; - if (propertyInfo is not null && propertyInfo.PropertyType.CanBeAssignedNull()) + foreach (var prefix in prefixes) { - // If its nullable check if its null first - T? val = (T?)propertyInfo?.GetValue(dbConfig); - if (val is not null) + string prefixed = string.Concat(prefix, propertyName); + + propertyInfo = type.GetProperty(prefixed, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); + if (propertyInfo is not null) { - return val; + if (propertyInfo.PropertyType.CanBeAssignedNull()) + { + // If its nullable check if its null first + object? valObj = propertyInfo.GetValue(dbConfig); + if (valObj is not null) + { + T? val = (T?)valObj; + if (val is not null) + { + return val; + } + } + } + else + { + // If not nullable just use it directly + return (T?)propertyInfo.GetValue(dbConfig); + } } - - // Use generic one even if its available - propertyInfo = type.GetProperty(propertyName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); } - // if no custom db property default to generic one - propertyInfo ??= type.GetProperty(propertyName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); + // Use generic one even if its available + propertyInfo = type.GetProperty(propertyName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); return (T?)propertyInfo?.GetValue(dbConfig); } catch (Exception e) { - throw new InvalidDataException($"Unable to read {prefixed} property from DB config", e); + throw new InvalidDataException($"Unable to read property from DB config. Prefixes: ${prefixes}", e); } } } diff --git a/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs b/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs index 6be2d3c4abe..8b5ac589718 100644 --- a/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs +++ b/src/Nethermind/Nethermind.Db.Rocks/DbOnTheRocks.cs @@ -7,8 +7,12 @@ using System.Collections.Generic; using System.IO; using System.IO.Abstractions; +using System.Linq; using System.Reflection; +using System.Runtime.InteropServices; using System.Threading; +using System.Threading.Channels; +using System.Threading.Tasks; using ConcurrentCollections; using Nethermind.Config; using Nethermind.Core; @@ -96,12 +100,6 @@ public DbOnTheRocks( _rocksDbNative = rocksDbNative ?? RocksDbSharp.Native.Instance; _perTableDbConfig = new PerTableDbConfig(dbConfig, _settings); _db = Init(basePath, dbSettings.DbPath, dbConfig, logManager, columnFamilies, dbSettings.DeleteOnStart, sharedCache); - - if (_perTableDbConfig.AdditionalRocksDbOptions is not null) - { - ApplyOptions(_perTableDbConfig.AdditionalRocksDbOptions); - } - _iteratorManager = new IteratorManager(_db, null, _readAheadReadOptions); } @@ -183,6 +181,11 @@ private RocksDb Init(string basePath, string dbPath, IDbConfig dbConfig, ILogMan } } + if (_perTableDbConfig.EnableFileWarmer) + { + WarmupFile(_fullPath, db); + } + return db; } catch (DllNotFoundException e) when (e.Message.Contains("libdl")) @@ -202,6 +205,81 @@ private RocksDb Init(string basePath, string dbPath, IDbConfig dbConfig, ILogMan } + private void WarmupFile(string basePath, RocksDb db) + { + long availableMemory = GC.GetGCMemoryInfo().TotalAvailableMemoryBytes; + _logger.Info($"Warming up database {Name} assuming {availableMemory} bytes of available memory"); + List<(FileMetadata metadata, DateTime creationTime)> fileMetadatas = new(); + + foreach (LiveFileMetadata liveFileMetadata in db.GetLiveFilesMetadata()) + { + string fullPath = Path.Join(basePath, liveFileMetadata.FileMetadata.FileName); + try + { + DateTime creationTime = File.GetCreationTimeUtc(fullPath); + fileMetadatas.Add((liveFileMetadata.FileMetadata, creationTime)); + } + catch (IOException) + { + // Maybe the file is gone or something. We ignore it. + } + } + + fileMetadatas.Sort((item1, item2) => + { + // Sort them by level so that lower level get priority + int levelDiff = item1.metadata.FileLevel - item2.metadata.FileLevel; + if (levelDiff != 0) return levelDiff; + + // Otherwise, we pick which file is newest. + return item2.creationTime.CompareTo(item1.creationTime); + }); + + long totalSize = 0; + fileMetadatas = fileMetadatas.TakeWhile(metadata => + { + availableMemory -= (long)metadata.metadata.FileSize; + bool take = availableMemory > 0; + if (take) + { + totalSize += (long)metadata.metadata.FileSize; + } + return take; + }) + // We reverse them again so that lower level goes last so that it is the freshest. + // Not all of the available memory is actually available so we are probably over reading things. + .Reverse() + .ToList(); + + long totalRead = 0; + Parallel.ForEach(fileMetadatas, (task) => + { + string fullPath = Path.Join(basePath, task.metadata.FileName); + _logger.Info($"{(totalRead * 100 / (double)totalSize):00.00}% Warming up file {fullPath}"); + + try + { + byte[] buffer = new byte[512.KiB()]; + using FileStream stream = File.OpenRead(fullPath); + int readCount = buffer.Length; + while (readCount == buffer.Length) + { + readCount = stream.Read(buffer); + Interlocked.Add(ref totalRead, readCount); + } + } + catch (FileNotFoundException) + { + // Happens sometimes. We do nothing here. + } + catch (IOException e) + { + // Something unusual, but nothing noteworthy. + _logger.Warn($"Exception warming up {fullPath} {e}"); + } + }); + } + private void CreateMarkerIfCorrupt(RocksDbSharpException rocksDbException) { if (rocksDbException.Message.Contains("Corruption:")) @@ -625,6 +703,20 @@ protected virtual void BuildOptions(PerTableDbConfig dbConfig, Options opt options.EnableStatistics(); } options.SetStatsDumpPeriodSec(dbConfig.StatsDumpPeriodSec); + + if (dbConfig.AdditionalRocksDbOptions is not null) + { + IntPtr optsPtr = Marshal.StringToHGlobalAnsi(dbConfig.AdditionalRocksDbOptions); + try + { + _rocksDbNative.rocksdb_get_options_from_string(options.Handle, optsPtr, options.Handle); + } + finally + { + Marshal.FreeHGlobal(optsPtr); + } + } + #endregion #region read-write options @@ -1408,7 +1500,7 @@ public virtual void Tune(ITunableDb.TuneType type) case ITunableDb.TuneType.HeavyWrite: // Compaction spikes are clear at this point. Will definitely affect attestation performance. // Its unclear if it improve or slow down sync time. Seems to be the sweet spot. - ApplyOptions(GetHeavyWriteOptions((ulong)4.GiB())); + ApplyOptions(GetHeavyWriteOptions((ulong)2.GiB())); break; case ITunableDb.TuneType.AggressiveHeavyWrite: // For when, you are desperate, but don't wanna disable compaction completely, because you don't want @@ -1517,8 +1609,10 @@ private IDictionary GetHeavyWriteOptions(ulong l0SizeTarget) // but no io, only cpu. // bufferSize*maxBufferNumber = 128MB, which is the max memory used, which tend to be the case as its now // stalled by compaction instead of flush. - ulong bufferSize = (ulong)16.MiB(); - ulong l0FileSize = bufferSize * (ulong)_perTableDbConfig.MinWriteBufferNumberToMerge; + // The buffer is not compressed unlike l0File, so to account for it, its size need to be slightly larger. + ulong targetFileSize = (ulong)16.MiB(); + ulong bufferSize = (ulong)(targetFileSize / _perTableDbConfig.CompressibilityHint); + ulong l0FileSize = targetFileSize * (ulong)_perTableDbConfig.MinWriteBufferNumberToMerge; ulong maxBufferNumber = 8; // Guide recommend to have l0 and l1 to be the same size. They have to be compacted together so if l1 is larger, @@ -1680,7 +1774,7 @@ private void Return(Iterator iterator, ReadFlags flags) holder.Usage++; Iterator? oldIterator = Interlocked.Exchange(ref holder.Iterator, iterator); - if (oldIterator != null) + if (oldIterator is not null) { // Well... this is weird. I'll just dispose it. oldIterator.Dispose(); diff --git a/src/Nethermind/Nethermind.Db.Test/Config/PerTableDbConfigTests.cs b/src/Nethermind/Nethermind.Db.Test/Config/PerTableDbConfigTests.cs index 75e9b29a07e..d9d65b1d024 100644 --- a/src/Nethermind/Nethermind.Db.Test/Config/PerTableDbConfigTests.cs +++ b/src/Nethermind/Nethermind.Db.Test/Config/PerTableDbConfigTests.cs @@ -13,8 +13,8 @@ public class PerTableDbConfigTests public void CanReadAllConfigForAllTable() { DbConfig dbConfig = new DbConfig(); - string[] tables = new[] - { + string[] tables = + [ DbNames.Storage, DbNames.State, DbNames.Code, @@ -23,10 +23,8 @@ public void CanReadAllConfigForAllTable() DbNames.Receipts, DbNames.BlockInfos, DbNames.Bloom, - DbNames.Witness, - DbNames.CHT, - DbNames.Metadata, - }; + DbNames.Metadata + ]; foreach (string table in tables) { @@ -40,6 +38,17 @@ public void CanReadAllConfigForAllTable() } } + [Test] + public void When_ColumnDb_UsePerTableConfig() + { + DbConfig dbConfig = new DbConfig(); + dbConfig.MaxOpenFiles = 2; + dbConfig.ReceiptsDbMaxOpenFiles = 3; + + PerTableDbConfig config = new PerTableDbConfig(dbConfig, new DbSettings(DbNames.Receipts, ""), "Blocks"); + config.MaxOpenFiles.Should().Be(3); + } + [Test] public void When_PerTableConfigIsAvailable_UsePerTableConfig() { diff --git a/src/Nethermind/Nethermind.Db.Test/DbOnTheRocksTests.cs b/src/Nethermind/Nethermind.Db.Test/DbOnTheRocksTests.cs index 359f6a3bd48..7b7ff34f41c 100644 --- a/src/Nethermind/Nethermind.Db.Test/DbOnTheRocksTests.cs +++ b/src/Nethermind/Nethermind.Db.Test/DbOnTheRocksTests.cs @@ -19,6 +19,7 @@ using Nethermind.Db.Rocks.Config; using Nethermind.Logging; using NSubstitute; +using NSubstitute.ExceptionExtensions; using NUnit.Framework; using RocksDbSharp; using IWriteBatch = Nethermind.Core.IWriteBatch; @@ -47,7 +48,7 @@ public void TearDown() public void WriteOptions_is_correct() { IDbConfig config = new DbConfig(); - DbOnTheRocks db = new(DbPath, GetRocksDbSettings(DbPath, "Blocks"), config, LimboLogs.Instance); + using DbOnTheRocks db = new(DbPath, GetRocksDbSettings(DbPath, "Blocks"), config, LimboLogs.Instance); WriteOptions? options = db.WriteFlagsToWriteOptions(WriteFlags.LowPriority); Native.Instance.rocksdb_writeoptions_get_low_pri(options.Handle).Should().BeTrue(); @@ -129,6 +130,47 @@ public void Dispose_wont_cause_ObjectDisposedException_when_batch_is_still_open( db.Dispose(); } + [Test] + public void CanOpenWithFileWarmer() + { + IDbConfig config = new DbConfig(); + config.EnableFileWarmer = true; + { + using DbOnTheRocks db = new("testFileWarmer", GetRocksDbSettings("testFileWarmer", "FileWarmerTest"), config, LimboLogs.Instance); + for (int i = 0; i < 1000; i++) + { + db[i.ToBigEndianByteArray()] = i.ToBigEndianByteArray(); + } + } + + { + using DbOnTheRocks db = new("testFileWarmer", GetRocksDbSettings("testFileWarmer", "FileWarmerTest"), config, LimboLogs.Instance); + } + } + + [TestCase("compaction_pri=kByCompensatedSize", true)] + [TestCase("compaction_pri=kByCompensatedSize;num_levels=4", true)] + [TestCase("compaction_pri=kSomethingElse", false)] + public void CanOpenWithAdditionalConfig(string opts, bool success) + { + IDbConfig config = new DbConfig(); + config.AdditionalRocksDbOptions = opts; + + Action act = () => + { + using DbOnTheRocks db = new("testFileWarmer", GetRocksDbSettings("testFileWarmer", "FileWarmerTest"), config, LimboLogs.Instance); + }; + + if (success) + { + act.Should().NotThrow(); + } + else + { + act.Should().Throw(); + } + } + [Test] public void Corrupted_exception_on_open_would_create_marker() { diff --git a/src/Nethermind/Nethermind.Db.Test/StandardDbInitializerTests.cs b/src/Nethermind/Nethermind.Db.Test/StandardDbInitializerTests.cs index 7c5dd5f1582..6b927954aae 100644 --- a/src/Nethermind/Nethermind.Db.Test/StandardDbInitializerTests.cs +++ b/src/Nethermind/Nethermind.Db.Test/StandardDbInitializerTests.cs @@ -85,7 +85,6 @@ private void AssertStandardDbs(IDbProvider dbProvider, Type dbType, Type receipt dbProvider.BlockInfosDb.Should().BeOfType(dbType); dbProvider.BlocksDb.Should().BeOfType(dbType); dbProvider.BloomDb.Should().BeOfType(dbType); - dbProvider.ChtDb.Should().BeOfType(dbType); dbProvider.HeadersDb.Should().BeOfType(dbType); dbProvider.ReceiptsDb.Should().BeOfType(receiptsDb); dbProvider.CodeDb.Should().BeOfType(dbType); diff --git a/src/Nethermind/Nethermind.Db/DbNames.cs b/src/Nethermind/Nethermind.Db/DbNames.cs index c6004120c0b..7b8459430f9 100644 --- a/src/Nethermind/Nethermind.Db/DbNames.cs +++ b/src/Nethermind/Nethermind.Db/DbNames.cs @@ -15,8 +15,6 @@ public static class DbNames public const string BlockInfos = "blockInfos"; public const string BadBlocks = "badBlocks"; public const string Bloom = "bloom"; - public const string Witness = "witness"; - public const string CHT = "canonicalHashTrie"; public const string Metadata = "metadata"; public const string BlobTransactions = "blobTransactions"; } diff --git a/src/Nethermind/Nethermind.Db/IDbProvider.cs b/src/Nethermind/Nethermind.Db/IDbProvider.cs index b54121bf3a7..7786271bc74 100644 --- a/src/Nethermind/Nethermind.Db/IDbProvider.cs +++ b/src/Nethermind/Nethermind.Db/IDbProvider.cs @@ -20,11 +20,6 @@ public interface IDbProvider : IDisposable // BloomDB progress / config (does not contain blooms - they are kept in bloom storage) public IDb BloomDb => GetDb(DbNames.Bloom); - // LES (ignore) - public IDb ChtDb => GetDb(DbNames.CHT); - - public IDb WitnessDb => GetDb(DbNames.Witness); - public IDb MetadataDb => GetDb(DbNames.Metadata); public IColumnsDb BlobTransactionsDb => GetColumnDb(DbNames.BlobTransactions); diff --git a/src/Nethermind/Nethermind.Db/Metrics.cs b/src/Nethermind/Nethermind.Db/Metrics.cs index 2d9a7c5ad0e..7a2fdb8dc06 100644 --- a/src/Nethermind/Nethermind.Db/Metrics.cs +++ b/src/Nethermind/Nethermind.Db/Metrics.cs @@ -1,9 +1,9 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System.Collections.Concurrent; -using System.Collections.Generic; using System.ComponentModel; +using System.Threading; + using Nethermind.Core.Attributes; namespace Nethermind.Db @@ -12,11 +12,76 @@ public static class Metrics { [CounterMetric] [Description("Number of Code DB cache reads.")] - public static long CodeDbCache { get; set; } + public static long CodeDbCache + { + get + { + long total = 0; + foreach (var value in _codeDbCache.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _codeDbCache = new(trackAllValues: true); + [Description("Number of Code DB cache reads on thread.")] + public static long ThreadLocalCodeDbCache => _codeDbCache.Value; + public static void IncrementCodeDbCache() => _codeDbCache.Value++; + + [CounterMetric] + [Description("Number of State Trie cache hits.")] + public static long StateTreeCache + { + get + { + long total = 0; + foreach (var value in _stateTreeCacheHits.Values) + { + total += value; + } + return total; + } + } + + private static ThreadLocal _stateTreeCacheHits = new(trackAllValues: true); + public static void IncrementStateTreeCacheHits() => _stateTreeCacheHits.Value++; [CounterMetric] [Description("Number of State Trie reads.")] - public static long StateTreeReads { get; set; } + public static long StateTreeReads + { + get + { + long total = 0; + foreach (var value in _stateTreeReads.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _stateTreeReads = new(trackAllValues: true); + [Description("Number of State Trie reads on thread.")] + public static long ThreadLocalStateTreeReads => _stateTreeReads.Value; + public static void IncrementStateTreeReads() => _stateTreeReads.Value++; + + [CounterMetric] + [Description("Number of State Reader reads.")] + public static long StateReaderReads + { + get + { + long total = 0; + foreach (var value in _stateReaderReads.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _stateReaderReads = new(trackAllValues: true); + public static void IncrementStateReaderReads() => _stateReaderReads.Value++; [CounterMetric] [Description("Number of Blocks Trie writes.")] @@ -26,9 +91,45 @@ public static class Metrics [Description("Number of State DB duplicate writes during full pruning.")] public static int StateDbInPruningWrites; + [CounterMetric] + [Description("Number of storage trie cache hits.")] + public static long StorageTreeCache + { + get + { + long total = 0; + foreach (var value in _storageTreeCache.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _storageTreeCache = new(trackAllValues: true); + public static void IncrementStorageTreeCache() => _storageTreeCache.Value++; + [CounterMetric] [Description("Number of storage trie reads.")] - public static long StorageTreeReads { get; set; } + public static long StorageTreeReads + { + get + { + long total = 0; + foreach (var value in _storageTreeReads.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _storageTreeReads = new(trackAllValues: true); + [Description("Number of storage trie reads on thread.")] + public static long ThreadLocalStorageTreeReads => _storageTreeReads.Value; + public static void IncrementStorageTreeReads() => _storageTreeReads.Value++; + + [CounterMetric] + [Description("Number of storage reader reads.")] + public static long StorageReaderReads { get; set; } [CounterMetric] [Description("Number of storage trie writes.")] diff --git a/src/Nethermind/Nethermind.Db/ReadOnlyDb.cs b/src/Nethermind/Nethermind.Db/ReadOnlyDb.cs index 6feee30504c..495a51fbe5e 100644 --- a/src/Nethermind/Nethermind.Db/ReadOnlyDb.cs +++ b/src/Nethermind/Nethermind.Db/ReadOnlyDb.cs @@ -3,38 +3,30 @@ using System; using System.Collections.Generic; +using System.Linq; using Nethermind.Core; namespace Nethermind.Db { - public class ReadOnlyDb : IReadOnlyDb + public class ReadOnlyDb(IDb wrappedDb, bool createInMemWriteStore) : IReadOnlyDb { private readonly MemDb _memDb = new(); - private readonly IDb _wrappedDb; - private readonly bool _createInMemWriteStore; - - public ReadOnlyDb(IDb wrappedDb, bool createInMemWriteStore) - { - _wrappedDb = wrappedDb; - _createInMemWriteStore = createInMemWriteStore; - } - public void Dispose() { _memDb.Dispose(); } - public string Name { get; } = "ReadOnlyDb"; + public string Name { get => wrappedDb.Name; } public byte[]? Get(ReadOnlySpan key, ReadFlags flags = ReadFlags.None) { - return _memDb.Get(key, flags) ?? _wrappedDb.Get(key, flags); + return _memDb.Get(key, flags) ?? wrappedDb.Get(key, flags); } public void Set(ReadOnlySpan key, byte[]? value, WriteFlags flags = WriteFlags.None) { - if (!_createInMemWriteStore) + if (!createInMemWriteStore) { throw new InvalidOperationException($"This {nameof(ReadOnlyDb)} did not expect any writes."); } @@ -46,7 +38,7 @@ public KeyValuePair[] this[byte[][] keys] { get { - var result = _wrappedDb[keys]; + var result = wrappedDb[keys]; var memResult = _memDb[keys]; for (int i = 0; i < memResult.Length; i++) { @@ -61,43 +53,34 @@ public KeyValuePair[] this[byte[][] keys] } } - public IEnumerable> GetAll(bool ordered = false) => _memDb.GetAll(); + public IEnumerable> GetAll(bool ordered = false) => _memDb.GetAll().Union(wrappedDb.GetAll()); - public IEnumerable GetAllKeys(bool ordered = false) => _memDb.GetAllKeys(); + public IEnumerable GetAllKeys(bool ordered = false) => _memDb.GetAllKeys().Union(wrappedDb.GetAllKeys()); - public IEnumerable GetAllValues(bool ordered = false) => _memDb.GetAllValues(); + public IEnumerable GetAllValues(bool ordered = false) => _memDb.GetAllValues().Union(wrappedDb.GetAllValues()); - public IWriteBatch StartWriteBatch() - { - return this.LikeABatch(); - } + public IWriteBatch StartWriteBatch() => this.LikeABatch(); - public IDbMeta.DbMetric GatherMetric(bool includeSharedCache = false) => _wrappedDb.GatherMetric(includeSharedCache); + public IDbMeta.DbMetric GatherMetric(bool includeSharedCache = false) => wrappedDb.GatherMetric(includeSharedCache); public void Remove(ReadOnlySpan key) { } - public bool KeyExists(ReadOnlySpan key) - { - return _memDb.KeyExists(key) || _wrappedDb.KeyExists(key); - } + public bool KeyExists(ReadOnlySpan key) => _memDb.KeyExists(key) || wrappedDb.KeyExists(key); public void Flush() { - _wrappedDb.Flush(); + wrappedDb.Flush(); _memDb.Flush(); } - public void Clear() { throw new InvalidOperationException(); } + public void Clear() => throw new InvalidOperationException(); - public virtual void ClearTempChanges() - { - _memDb.Clear(); - } + public virtual void ClearTempChanges() => _memDb.Clear(); - public Span GetSpan(ReadOnlySpan key) => _memDb.Get(key).AsSpan(); + public Span GetSpan(ReadOnlySpan key) => Get(key).AsSpan(); public void PutSpan(ReadOnlySpan keyBytes, ReadOnlySpan value, WriteFlags writeFlags = WriteFlags.None) { - if (!_createInMemWriteStore) + if (!createInMemWriteStore) { throw new InvalidOperationException($"This {nameof(ReadOnlyDb)} did not expect any writes."); } diff --git a/src/Nethermind/Nethermind.Db/StandardDbInitializer.cs b/src/Nethermind/Nethermind.Db/StandardDbInitializer.cs index e87d5bb4e48..c5fe7f0bf3d 100644 --- a/src/Nethermind/Nethermind.Db/StandardDbInitializer.cs +++ b/src/Nethermind/Nethermind.Db/StandardDbInitializer.cs @@ -52,8 +52,6 @@ DbFactory is not MemDbFactory RegisterDb(BuildDbSettings(DbNames.Code)); RegisterDb(BuildDbSettings(DbNames.Bloom)); - RegisterDb(BuildDbSettings(DbNames.CHT)); - RegisterDb(BuildDbSettings(DbNames.Witness)); if (useReceiptsDb) { RegisterColumnsDb(BuildDbSettings(DbNames.Receipts)); diff --git a/src/Nethermind/Nethermind.EthStats.Test/EthStatsPluginTests.cs b/src/Nethermind/Nethermind.EthStats.Test/EthStatsPluginTests.cs index 06092269a99..2deefaa5e7e 100644 --- a/src/Nethermind/Nethermind.EthStats.Test/EthStatsPluginTests.cs +++ b/src/Nethermind/Nethermind.EthStats.Test/EthStatsPluginTests.cs @@ -1,8 +1,8 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System.Threading.Tasks; using Nethermind.Api; +using Nethermind.Api.Extensions; using Nethermind.EthStats.Configs; using Nethermind.Runner.Test.Ethereum; using NUnit.Framework; @@ -14,7 +14,7 @@ public class EthStatsPluginTests public IEthStatsConfig StatsConfig { get; private set; } = null!; private NethermindApi _context = null!; #pragma warning disable NUnit1032 - private EthStatsPlugin _plugin = null!; + private INethermindPlugin _plugin = null!; #pragma warning restore NUnit1032 [SetUp] @@ -32,6 +32,7 @@ public void Setup() public void Init_eth_stats_plugin_does_not_throw_exception(bool enabled) { StatsConfig = new EthStatsConfig() { Enabled = enabled }; + Assert.DoesNotThrow(() => _plugin.InitRlpDecoders(_context)); Assert.DoesNotThrowAsync(async () => await _plugin.Init(_context)); Assert.DoesNotThrowAsync(async () => await _plugin.InitNetworkProtocol()); Assert.DoesNotThrowAsync(async () => await _plugin.InitRpcModules()); diff --git a/src/Nethermind/Nethermind.EthStats/EthStatsPlugin.cs b/src/Nethermind/Nethermind.EthStats/EthStatsPlugin.cs index 0bb60072a5e..b57e083dbe6 100644 --- a/src/Nethermind/Nethermind.EthStats/EthStatsPlugin.cs +++ b/src/Nethermind/Nethermind.EthStats/EthStatsPlugin.cs @@ -118,6 +118,4 @@ public async Task InitNetworkProtocol() await _ethStatsIntegration.InitAsync(); } } - - public Task InitRpcModules() => Task.CompletedTask; } diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs index 4d16a92e69d..4399d6eaca1 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs @@ -44,8 +44,8 @@ public void GlobalSetup() _stateProvider = new WorldState(trieStore, codeDb, new OneLoggerLogManager(NullLogger.Instance)); _stateProvider.CreateAccount(Address.Zero, 1000.Ether()); _stateProvider.Commit(_spec); - - _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); + _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, LimboLogs.Instance); _environment = new ExecutionEnvironment ( diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs index 75d82db72fb..9f400db12dc 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs @@ -76,7 +76,8 @@ public void GlobalSetup() _stateProvider.Commit(_spec); Console.WriteLine(MuirGlacier.Instance); - _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, new OneLoggerLogManager(NullLogger.Instance)); + CodeInfoRepository codeInfoRepository = new(); + _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, new OneLoggerLogManager(NullLogger.Instance)); _environment = new ExecutionEnvironment ( diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs index c559f5d52fd..ca0bad688ec 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs @@ -87,7 +87,8 @@ public void GlobalSetup() _stateProvider.Commit(_spec); Console.WriteLine(MuirGlacier.Instance); - _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, new OneLoggerLogManager(NullLogger.Instance)); + CodeInfoRepository codeInfoRepository = new(); + _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, new OneLoggerLogManager(NullLogger.Instance)); _environment = new ExecutionEnvironment ( diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeAnalysis/CodeInfoTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeAnalysis/CodeInfoTests.cs index a76c67e2eb6..67490a397e1 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeAnalysis/CodeInfoTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeAnalysis/CodeInfoTests.cs @@ -28,23 +28,7 @@ public void Validates_when_only_jump_dest_present(int destination, bool isValid) CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(destination, false).Should().Be(isValid); - } - - [TestCase(-1, false)] - [TestCase(0, true)] - [TestCase(1, false)] - public void Validates_when_only_begin_sub_present(int destination, bool isValid) - { - byte[] code = - { - (byte)Instruction.BEGINSUB - }; - - CodeInfo codeInfo = new(code); - - - codeInfo.ValidateJump(destination, true).Should().Be(isValid); + codeInfo.ValidateJump(destination).Should().Be(isValid); } [Test] @@ -58,23 +42,7 @@ public void Validates_when_push_with_data_like_jump_dest() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(1, true).Should().BeFalse(); - codeInfo.ValidateJump(1, false).Should().BeFalse(); - } - - [Test] - public void Validates_when_push_with_data_like_begin_sub() - { - byte[] code = - { - (byte)Instruction.PUSH1, - (byte)Instruction.BEGINSUB - }; - - CodeInfo codeInfo = new(code); - - codeInfo.ValidateJump(1, true).Should().BeFalse(); - codeInfo.ValidateJump(1, false).Should().BeFalse(); + codeInfo.ValidateJump(1).Should().BeFalse(); } [Test] @@ -89,7 +57,7 @@ public void Validate_CodeBitmap_With_Push10() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(11, false).Should().BeTrue(); + codeInfo.ValidateJump(11).Should().BeTrue(); } [Test] @@ -104,7 +72,7 @@ public void Validate_CodeBitmap_With_Push30() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(31, false).Should().BeTrue(); + codeInfo.ValidateJump(31).Should().BeTrue(); } [Test] @@ -117,7 +85,7 @@ public void Small_Jumpdest() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(10, false).Should().BeTrue(); + codeInfo.ValidateJump(10).Should().BeTrue(); } [Test] @@ -130,7 +98,7 @@ public void Small_Push1() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(10, false).Should().BeFalse(); + codeInfo.ValidateJump(10).Should().BeFalse(); } [Test] @@ -140,7 +108,7 @@ public void Jumpdest_Over10k() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(10, false).Should().BeTrue(); + codeInfo.ValidateJump(10).Should().BeTrue(); } [Test] @@ -150,7 +118,7 @@ public void Push1_Over10k() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(10, false).Should().BeFalse(); + codeInfo.ValidateJump(10).Should().BeFalse(); } [Test] @@ -164,8 +132,8 @@ public void Push1Jumpdest_Over10k() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(10, false).Should().BeFalse(); - codeInfo.ValidateJump(11, false).Should().BeFalse(); // 0x5b but not JUMPDEST but data + codeInfo.ValidateJump(10).Should().BeFalse(); + codeInfo.ValidateJump(11).Should().BeFalse(); // 0x5b but not JUMPDEST but data } [TestCase(1)] @@ -231,15 +199,15 @@ public void PushNJumpdest_Over10k(int n) for (i = 0; i < Vector256.Count * 2 + Vector128.Count; i++) { - codeInfo.ValidateJump(i, false).Should().BeTrue(); + codeInfo.ValidateJump(i).Should().BeTrue(); } for (; i < Vector256.Count * 3; i++) { - codeInfo.ValidateJump(i, false).Should().BeFalse(); + codeInfo.ValidateJump(i).Should().BeFalse(); } for (; i < code.Length; i++) { - codeInfo.ValidateJump(i, false).Should().BeFalse(); // Are 0x5b but not JUMPDEST but data + codeInfo.ValidateJump(i).Should().BeFalse(); // Are 0x5b but not JUMPDEST but data } } } diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3198BaseFeeTests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3198BaseFeeTests.cs index 6b20654a11f..75430c258c1 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3198BaseFeeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3198BaseFeeTests.cs @@ -26,7 +26,7 @@ public class Eip3198BaseFeeTests : VirtualMachineTestsBase [TestCase(false, 0, false)] public void Base_fee_opcode_should_return_expected_results(bool eip3198Enabled, int baseFee, bool send1559Tx) { - _processor = new TransactionProcessor(SpecProvider, TestState, Machine, LimboLogs.Instance); + _processor = new TransactionProcessor(SpecProvider, TestState, Machine, CodeInfoRepository, LimboLogs.Instance); byte[] code = Prepare.EvmCode .Op(Instruction.BASEFEE) .PushData(0) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3529RefundsTests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3529RefundsTests.cs index fe3e7a58e32..81c276ef05d 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3529RefundsTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3529RefundsTests.cs @@ -73,7 +73,7 @@ private void Test(string codeHex, long gasUsed, long refund, byte originalValue, TestState.CreateAccount(Recipient, 1.Ether()); TestState.Set(new StorageCell(Recipient, 0), new[] { originalValue }); TestState.Commit(eip3529Enabled ? London.Instance : Berlin.Instance); - _processor = new TransactionProcessor(SpecProvider, TestState, Machine, LimboLogs.Instance); + _processor = new TransactionProcessor(SpecProvider, TestState, Machine, CodeInfoRepository, LimboLogs.Instance); long blockNumber = eip3529Enabled ? MainnetSpecProvider.LondonBlockNumber : MainnetSpecProvider.LondonBlockNumber - 1; (Block block, Transaction transaction) = PrepareTx(blockNumber, 100000, Bytes.FromHexString(codeHex)); diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3541Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3541Tests.cs index 4154e94f095..0c5f2219dd3 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3541Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3541Tests.cs @@ -96,7 +96,7 @@ void DeployCodeAndAssertTx(string code, bool eip3541Enabled, ContractDeployment break; } - _processor = new TransactionProcessor(SpecProvider, TestState, Machine, LimboLogs.Instance); + _processor = new TransactionProcessor(SpecProvider, TestState, Machine, CodeInfoRepository, LimboLogs.Instance); long blockNumber = eip3541Enabled ? MainnetSpecProvider.LondonBlockNumber : MainnetSpecProvider.LondonBlockNumber - 1; (Block block, Transaction transaction) = PrepareTx(blockNumber, 100000, createContract); diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip7516BlobBaseFeeTests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip7516BlobBaseFeeTests.cs index 1a1036de336..f62d8c595f6 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip7516BlobBaseFeeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip7516BlobBaseFeeTests.cs @@ -27,7 +27,7 @@ public class Eip7516BlobBaseFeeTests : VirtualMachineTestsBase [TestCase(false, 0ul)] public void Blob_Base_fee_opcode_should_return_expected_results(bool eip7516Enabled, ulong excessBlobGas) { - _processor = new TransactionProcessor(SpecProvider, TestState, Machine, LimboLogs.Instance); + _processor = new TransactionProcessor(SpecProvider, TestState, Machine, CodeInfoRepository, LimboLogs.Instance); byte[] code = Prepare.EvmCode .Op(Instruction.BLOBBASEFEE) .PushData(0) diff --git a/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs index 18529a85794..ab88c978cae 100644 --- a/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs @@ -158,14 +158,17 @@ private static string run(byte[] input) new MemDb(), LimboLogs.Instance); ISpecProvider specProvider = new TestSpecProvider(London.Instance); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new( new TestBlockhashProvider(specProvider), specProvider, + codeInfoRepository, LimboLogs.Instance); TransactionProcessor transactionProcessor = new TransactionProcessor( specProvider, stateProvider, virtualMachine, + codeInfoRepository, LimboLogs.Instance); stateProvider.CreateAccount(to, 123); diff --git a/src/Nethermind/Nethermind.Evm.Test/InstructionTests.cs b/src/Nethermind/Nethermind.Evm.Test/InstructionTests.cs index 2a9f1677613..74ea7de35c1 100644 --- a/src/Nethermind/Nethermind.Evm.Test/InstructionTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/InstructionTests.cs @@ -20,42 +20,5 @@ public void Return_prevrandao_name_for_prevrandao_opcode_for_post_merge() { Instruction.PREVRANDAO.GetName(true, Cancun.Instance).Should().Be("PREVRANDAO"); } - - [Test] - public void Return_tload_name_for_beginsub_opcode_for_eip1153() - { - Instruction.BEGINSUB.GetName(true, Cancun.Instance).Should().Be("TLOAD"); - } - - [Test] - public void Return_beginsub_name_for_beginsub_opcode_for_eip1153() - { - Instruction.BEGINSUB.GetName(true, Shanghai.Instance).Should().Be("BEGINSUB"); - } - - [Test] - public void Return_returnsub_name_for_returnsub_opcode_for_eip1153() - { - Instruction.RETURNSUB.GetName(true, Shanghai.Instance).Should().Be("RETURNSUB"); - } - - [Test] - public void Return_tstore_name_for_returnsub_opcode_for_eip1153() - { - Instruction.RETURNSUB.GetName(true, Cancun.Instance).Should().Be("TSTORE"); - } - - - [Test] - public void Return_mcopy_name_for_mcopy_opcode_post_eip_5656() - { - Instruction.MCOPY.GetName(true, Cancun.Instance).Should().Be("MCOPY"); - } - - [Test] - public void Return_jumpsub_name_for_mcopy_opcode_pre_eip_5656() - { - Instruction.MCOPY.GetName(true, Shanghai.Instance).Should().Be("JUMPSUB"); - } } } diff --git a/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs b/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs index 2e41c2443ed..def68b3ca1d 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs @@ -362,9 +362,9 @@ public TestEnvironment() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, LimboLogs.Instance); - _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, - virtualMachine, LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); + VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); + _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); tracer = new(); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs index 7312cf923f7..562b27e937e 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs @@ -23,10 +23,10 @@ namespace Nethermind.Evm.Test; [TestFixture] internal class TransactionProcessorEip4844Tests { - private ISpecProvider _specProvider; - private IEthereumEcdsa _ethereumEcdsa; - private TransactionProcessor _transactionProcessor; - private IWorldState _stateProvider; + private ISpecProvider _specProvider = null!; + private IEthereumEcdsa _ethereumEcdsa = null!; + private TransactionProcessor _transactionProcessor = null!; + private IWorldState _stateProvider = null!; [SetUp] public void Setup() @@ -35,8 +35,9 @@ public void Setup() _specProvider = new TestSpecProvider(Cancun.Instance); TrieStore trieStore = new(stateDb, LimboLogs.Instance); _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, LimboLogs.Instance); - _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); + VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); + _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); } diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs index 09d61e31b55..e0185255a0b 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs @@ -42,8 +42,9 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, LimboLogs.Instance); - _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); + VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); + _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); } diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs index 5d30cc00eee..3a7139dc4b6 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs @@ -58,8 +58,9 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, LimboLogs.Instance); - _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); + VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); + _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); } diff --git a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs index f914566a102..9cafd39c208 100644 --- a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs +++ b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs @@ -35,6 +35,7 @@ public class VirtualMachineTestsBase private IDb _stateDb; protected VirtualMachine Machine { get; private set; } + protected CodeInfoRepository CodeInfoRepository { get; private set; } protected IWorldState TestState { get; private set; } protected static Address Contract { get; } = new("0xd75a3a95360e44a3874e691fb48d77855f127069"); protected static Address Sender { get; } = TestItem.AddressA; @@ -67,8 +68,9 @@ public virtual void Setup() TestState = new WorldState(trieStore, codeDb, logManager); _ethereumEcdsa = new EthereumEcdsa(SpecProvider.ChainId, logManager); IBlockhashProvider blockhashProvider = new TestBlockhashProvider(SpecProvider); - Machine = new VirtualMachine(blockhashProvider, SpecProvider, logManager); - _processor = new TransactionProcessor(SpecProvider, TestState, Machine, logManager); + CodeInfoRepository = new CodeInfoRepository(); + Machine = new VirtualMachine(blockhashProvider, SpecProvider, CodeInfoRepository, logManager); + _processor = new TransactionProcessor(SpecProvider, TestState, Machine, CodeInfoRepository, logManager); } [TearDown] diff --git a/src/Nethermind/Nethermind.Evm/ByteCodeBuilder.cs b/src/Nethermind/Nethermind.Evm/ByteCodeBuilder.cs index 3f1407b117c..a44ab9dae90 100644 --- a/src/Nethermind/Nethermind.Evm/ByteCodeBuilder.cs +++ b/src/Nethermind/Nethermind.Evm/ByteCodeBuilder.cs @@ -274,10 +274,10 @@ public Prepare PushData(string data) return this; } - public Prepare PushData(byte[] data) + public Prepare PushData(ReadOnlyMemory data) { _byteCode.Add((byte)(Instruction.PUSH1 + (byte)data.Length - 1)); - _byteCode.AddRange(data); + _byteCode.AddRange(data.Span); return this; } diff --git a/src/Nethermind/Nethermind.Evm/ByteCodeBuilderExtensions.cs b/src/Nethermind/Nethermind.Evm/ByteCodeBuilderExtensions.cs index 8ceccf331af..b94b33475f3 100644 --- a/src/Nethermind/Nethermind.Evm/ByteCodeBuilderExtensions.cs +++ b/src/Nethermind/Nethermind.Evm/ByteCodeBuilderExtensions.cs @@ -101,10 +101,6 @@ public static Prepare SWAPx(this Prepare @this, byte i) => @this.Op(Instruction.SWAP1 + i - 1); public static Prepare DUPx(this Prepare @this, byte i) => @this.Op(Instruction.DUP1 + i - 1); - public static Prepare BEGINSUB(this Prepare @this) - => @this.Op(Instruction.BEGINSUB); - public static Prepare RETURNSUB(this Prepare @this) - => @this.Op(Instruction.RETURNSUB); public static Prepare INVALID(this Prepare @this) => @this.Op(Instruction.INVALID); #endregion @@ -116,9 +112,6 @@ public static Prepare SELFDESTRUCT(this Prepare @this, Address? address = null) public static Prepare EXTCODEHASH(this Prepare @this, Address? address = null) => @this.PushSingle(address) .Op(Instruction.EXTCODEHASH); - public static Prepare JUMPSUB(this Prepare @this, UInt256? pos = null) - => @this.PushSingle(pos) - .Op(Instruction.JUMPSUB); public static Prepare PUSHx(this Prepare @this, byte[] args) => @this.PushData(args); public static Prepare MLOAD(this Prepare @this, UInt256? pos = null) diff --git a/src/Nethermind/Nethermind.Evm/CodeAnalysis/CodeInfo.cs b/src/Nethermind/Nethermind.Evm/CodeAnalysis/CodeInfo.cs index 6d167abac09..e1bb762bceb 100644 --- a/src/Nethermind/Nethermind.Evm/CodeAnalysis/CodeInfo.cs +++ b/src/Nethermind/Nethermind.Evm/CodeAnalysis/CodeInfo.cs @@ -29,6 +29,7 @@ public CodeInfo(ReadOnlyMemory code) } public bool IsPrecompile => Precompile is not null; + public bool IsEmpty => ReferenceEquals(_analyzer, _emptyAnalyzer) && !IsPrecompile; public CodeInfo(IPrecompile precompile) { @@ -37,14 +38,22 @@ public CodeInfo(IPrecompile precompile) _analyzer = _emptyAnalyzer; } - public bool ValidateJump(int destination, bool isSubroutine) + public bool ValidateJump(int destination) { - return _analyzer.ValidateJump(destination, isSubroutine); + return _analyzer.ValidateJump(destination); } void IThreadPoolWorkItem.Execute() { _analyzer.Execute(); } + + public void AnalyseInBackgroundIfRequired() + { + if (!ReferenceEquals(_analyzer, _emptyAnalyzer) && _analyzer.RequiresAnalysis) + { + ThreadPool.UnsafeQueueUserWorkItem(this, preferLocal: false); + } + } } } diff --git a/src/Nethermind/Nethermind.Evm/CodeAnalysis/JumpDestinationAnalyzer.cs b/src/Nethermind/Nethermind.Evm/CodeAnalysis/JumpDestinationAnalyzer.cs index 8e944c18101..8ed08d2a21a 100644 --- a/src/Nethermind/Nethermind.Evm/CodeAnalysis/JumpDestinationAnalyzer.cs +++ b/src/Nethermind/Nethermind.Evm/CodeAnalysis/JumpDestinationAnalyzer.cs @@ -6,39 +6,76 @@ using System.Runtime.InteropServices; using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; +using System.Threading; namespace Nethermind.Evm.CodeAnalysis { public sealed class JumpDestinationAnalyzer(ReadOnlyMemory code) { - private const int PUSH1 = 0x60; + private const int PUSH1 = (int)Instruction.PUSH1; private const int PUSHx = PUSH1 - 1; - private const int JUMPDEST = 0x5b; - private const int BEGINSUB = 0x5c; + private const int JUMPDEST = (int)Instruction.JUMPDEST; private const int BitShiftPerInt64 = 6; private static readonly long[]? _emptyJumpDestinationBitmap = new long[1]; private long[]? _jumpDestinationBitmap = code.Length == 0 ? _emptyJumpDestinationBitmap : null; + private object? _analysisComplete; private ReadOnlyMemory MachineCode { get; } = code; - public bool ValidateJump(int destination, bool isSubroutine) + public bool ValidateJump(int destination) { - ReadOnlySpan machineCode = MachineCode.Span; - _jumpDestinationBitmap ??= CreateJumpDestinationBitmap(machineCode); + _jumpDestinationBitmap ??= CreateOrWaitForJumpDestinationBitmap(); - var result = false; // Cast to uint to change negative numbers to very int high numbers // Then do length check, this both reduces check by 1 and eliminates the bounds // check from accessing the span. - if ((uint)destination < (uint)machineCode.Length && IsJumpDestination(_jumpDestinationBitmap, destination)) + return (uint)destination < (uint)MachineCode.Length && IsJumpDestination(_jumpDestinationBitmap, destination); + } + + private long[] CreateOrWaitForJumpDestinationBitmap() + { + object? previous = Volatile.Read(ref _analysisComplete); + if (previous is null) { - // Store byte to int, as less expensive operations at word size - int codeByte = machineCode[destination]; - result = isSubroutine ? codeByte == BEGINSUB : codeByte == JUMPDEST; + ManualResetEventSlim analysisComplete = new(initialState: false); + previous = Interlocked.CompareExchange(ref _analysisComplete, analysisComplete, null); + if (previous is null) + { + // Not already in progress, so start it. + var bitmap = CreateJumpDestinationBitmap(); + _jumpDestinationBitmap = bitmap; + // Release the MRES to be GC'd + _analysisComplete = bitmap; + // Signal complete. + analysisComplete.Set(); + return bitmap; + } + } + + if (previous is ManualResetEventSlim resetEvent) + { + Thread thread = Thread.CurrentThread; + ThreadPriority priority = thread.Priority; + try + { + // We are waiting, so drop priority to normal (BlockProcessing runs at higher priority). + thread.Priority = ThreadPriority.Normal; + + // Already in progress, wait for completion. + resetEvent.Wait(); + } + finally + { + // Restore the priority of the thread. + thread.Priority = priority; + } + + return _jumpDestinationBitmap; } - return result; + // Must be the bitmap, and lost check->create benign data race + return (long[])previous; } /// @@ -64,8 +101,10 @@ private static int GetInt64ArrayLengthFromBitLength(int n) => /// Collects data locations in code. /// An unset bit means the byte is an opcode, a set bit means it's data. /// - private static long[] CreateJumpDestinationBitmap(ReadOnlySpan code) + private long[] CreateJumpDestinationBitmap() { + Metrics.IncrementContractsAnalysed(); + ReadOnlySpan code = MachineCode.Span; long[] jumpDestinationBitmap = new long[GetInt64ArrayLengthFromBitLength(code.Length)]; int programCounter = 0; // We accumulate each array segment to a register and then flush to memory when we move to next. @@ -90,12 +129,8 @@ private static long[] CreateJumpDestinationBitmap(ReadOnlySpan code) { // Check the bytes for any JUMPDESTs. Vector128 dest = Sse2.CompareEqual(data, Vector128.Create((sbyte)JUMPDEST)); - // Check the bytes for any BEGINSUBs. - Vector128 sub = Sse2.CompareEqual(data, Vector128.Create((sbyte)BEGINSUB)); - // Merge the two results. - Vector128 combined = Sse2.Or(dest, sub); // Extract the checks as a set of int flags. - int flags = Sse2.MoveMask(combined); + int flags = Sse2.MoveMask(dest); // Shift up flags by depending which side of long we are on, and merge to current set. currentFlags |= (long)flags << (programCounter & (32 + 16)); // Forward programCounter by Vector128 stride. @@ -110,7 +145,7 @@ private static long[] CreateJumpDestinationBitmap(ReadOnlySpan code) // access here. int op = Unsafe.Add(ref MemoryMarshal.GetReference(code), programCounter); - if ((uint)op - JUMPDEST <= BEGINSUB - JUMPDEST) + if (op == JUMPDEST) { // Accumulate Jump Destinations to register, shift will wrap and single bit // so can shift by the whole programCounter. @@ -159,6 +194,7 @@ private static long[] CreateJumpDestinationBitmap(ReadOnlySpan code) /// /// Checks if the position is in a code segment. /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] private static bool IsJumpDestination(long[] bitvec, int pos) { int vecIndex = pos >> BitShiftPerInt64; @@ -177,8 +213,34 @@ private static void MarkJumpDestinations(long[] jumpDestinationBitmap, int pos, public void Execute() { - // This is to support background thread preparation of the bitmap. - _jumpDestinationBitmap ??= CreateJumpDestinationBitmap(MachineCode.Span); + if (_jumpDestinationBitmap is null && Volatile.Read(ref _analysisComplete) is null) + { + ManualResetEventSlim analysisComplete = new(initialState: false); + if (Interlocked.CompareExchange(ref _analysisComplete, analysisComplete, null) is null) + { + Thread thread = Thread.CurrentThread; + ThreadPriority priority = thread.Priority; + try + { + // Boost the priority of the thread as block processing may be waiting on this. + thread.Priority = ThreadPriority.AboveNormal; + + _jumpDestinationBitmap ??= CreateJumpDestinationBitmap(); + + // Release the MRES to be GC'd + _analysisComplete = _jumpDestinationBitmap; + // Signal complete. + analysisComplete.Set(); + } + finally + { + // Restore the priority of the thread. + thread.Priority = priority; + } + } + } } + + public bool RequiresAnalysis => _jumpDestinationBitmap is null; } } diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs new file mode 100644 index 00000000000..2cff92aa7ca --- /dev/null +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -0,0 +1,161 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Diagnostics; +using System.Threading; +using Nethermind.Core; +using Nethermind.Core.Caching; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Evm.CodeAnalysis; +using Nethermind.Evm.Precompiles; +using Nethermind.Evm.Precompiles.Bls; +using Nethermind.Evm.Precompiles.Snarks; +using Nethermind.State; + +namespace Nethermind.Evm; + +public class CodeInfoRepository : ICodeInfoRepository +{ + internal sealed class CodeLruCache + { + private const int CacheCount = 16; + private const int CacheMax = CacheCount - 1; + private readonly LruCacheLowObject[] _caches; + + public CodeLruCache() + { + _caches = new LruCacheLowObject[CacheCount]; + for (int i = 0; i < _caches.Length; i++) + { + // Cache per nibble to reduce contention as TxPool is very parallel + _caches[i] = new LruCacheLowObject(MemoryAllowance.CodeCacheSize / CacheCount, $"VM bytecodes {i}"); + } + } + + public CodeInfo? Get(in ValueHash256 codeHash) + { + LruCacheLowObject cache = _caches[GetCacheIndex(codeHash)]; + return cache.Get(codeHash); + } + + public bool Set(in ValueHash256 codeHash, CodeInfo codeInfo) + { + LruCacheLowObject cache = _caches[GetCacheIndex(codeHash)]; + return cache.Set(codeHash, codeInfo); + } + + private static int GetCacheIndex(in ValueHash256 codeHash) => codeHash.Bytes[^1] & CacheMax; + + public bool TryGet(in ValueHash256 codeHash, [NotNullWhen(true)] out CodeInfo? codeInfo) + { + codeInfo = Get(codeHash); + return codeInfo is not null; + } + } + + + private static readonly FrozenDictionary _precompiles = InitializePrecompiledContracts(); + private static readonly CodeLruCache _codeCache = new(); + + private static FrozenDictionary InitializePrecompiledContracts() + { + return new Dictionary + { + [EcRecoverPrecompile.Address] = new(EcRecoverPrecompile.Instance), + [Sha256Precompile.Address] = new(Sha256Precompile.Instance), + [Ripemd160Precompile.Address] = new(Ripemd160Precompile.Instance), + [IdentityPrecompile.Address] = new(IdentityPrecompile.Instance), + + [Bn254AddPrecompile.Address] = new(Bn254AddPrecompile.Instance), + [Bn254MulPrecompile.Address] = new(Bn254MulPrecompile.Instance), + [Bn254PairingPrecompile.Address] = new(Bn254PairingPrecompile.Instance), + [ModExpPrecompile.Address] = new(ModExpPrecompile.Instance), + + [Blake2FPrecompile.Address] = new(Blake2FPrecompile.Instance), + + [G1AddPrecompile.Address] = new(G1AddPrecompile.Instance), + [G1MulPrecompile.Address] = new(G1MulPrecompile.Instance), + [G1MultiExpPrecompile.Address] = new(G1MultiExpPrecompile.Instance), + [G2AddPrecompile.Address] = new(G2AddPrecompile.Instance), + [G2MulPrecompile.Address] = new(G2MulPrecompile.Instance), + [G2MultiExpPrecompile.Address] = new(G2MultiExpPrecompile.Instance), + [PairingPrecompile.Address] = new(PairingPrecompile.Instance), + [MapToG1Precompile.Address] = new(MapToG1Precompile.Instance), + [MapToG2Precompile.Address] = new(MapToG2Precompile.Instance), + + [PointEvaluationPrecompile.Address] = new(PointEvaluationPrecompile.Instance), + }.ToFrozenDictionary(); + } + + public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) + { + if (codeSource.IsPrecompile(vmSpec)) + { + return _precompiles[codeSource]; + } + + CodeInfo? cachedCodeInfo = null; + ValueHash256 codeHash = worldState.GetCodeHash(codeSource); + if (codeHash == Keccak.OfAnEmptyString.ValueHash256) + { + cachedCodeInfo = CodeInfo.Empty; + } + + cachedCodeInfo ??= _codeCache.Get(codeHash); + if (cachedCodeInfo is null) + { + byte[]? code = worldState.GetCode(codeHash); + + if (code is null) + { + MissingCode(codeSource, codeHash); + } + + cachedCodeInfo = new CodeInfo(code); + cachedCodeInfo.AnalyseInBackgroundIfRequired(); + _codeCache.Set(codeHash, cachedCodeInfo); + } + else + { + Db.Metrics.IncrementCodeDbCache(); + } + + return cachedCodeInfo; + + [DoesNotReturn] + [StackTraceHidden] + static void MissingCode(Address codeSource, in ValueHash256 codeHash) + { + throw new NullReferenceException($"Code {codeHash} missing in the state for address {codeSource}"); + } + } + + public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) + { + if (!_codeCache.TryGet(codeHash, out CodeInfo? codeInfo)) + { + codeInfo = new(initCode.ToArray()); + + // Prime the code cache as likely to be used by more txs + _codeCache.Set(codeHash, codeInfo); + } + + return codeInfo; + } + + + public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv) + { + CodeInfo codeInfo = new(code); + codeInfo.AnalyseInBackgroundIfRequired(); + + Hash256 codeHash = code.Length == 0 ? Keccak.OfAnEmptyString : Keccak.Compute(code.Span); + state.InsertCode(codeOwner, codeHash, code, spec, isSystemEnv); + _codeCache.Set(codeHash, codeInfo); + } +} diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs new file mode 100644 index 00000000000..ec8da29ca6a --- /dev/null +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Evm.CodeAnalysis; +using Nethermind.State; + +namespace Nethermind.Evm; + +public interface ICodeInfoRepository +{ + CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); + CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); + void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv); +} diff --git a/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs b/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs index 112e31251cc..8099d6d7b6c 100644 --- a/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs @@ -17,8 +17,5 @@ public interface IVirtualMachine { TransactionSubstate Run(EvmState state, IWorldState worldState, ITxTracer txTracer) where TTracingActions : struct, IIsTracing; - - CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec spec); - void InsertCode(ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv); } } diff --git a/src/Nethermind/Nethermind.Evm/Instruction.cs b/src/Nethermind/Nethermind.Evm/Instruction.cs index 08aad72e235..61d5f1e2502 100644 --- a/src/Nethermind/Nethermind.Evm/Instruction.cs +++ b/src/Nethermind/Nethermind.Evm/Instruction.cs @@ -81,9 +81,6 @@ public enum Instruction : byte MSIZE = 0x59, GAS = 0x5a, JUMPDEST = 0x5b, - BEGINSUB = 0x5c, - RETURNSUB = 0x5d, - JUMPSUB = 0x5e, MCOPY = 0x5e, PUSH0 = 0x5f, // EIP-3855 @@ -184,9 +181,6 @@ public static class InstructionExtensions instruction switch { Instruction.PREVRANDAO when !isPostMerge => "DIFFICULTY", - Instruction.TLOAD or Instruction.BEGINSUB => spec?.TransientStorageEnabled == true ? "TLOAD" : "BEGINSUB", - Instruction.TSTORE or Instruction.RETURNSUB => spec?.TransientStorageEnabled == true ? "TSTORE" : "RETURNSUB", - Instruction.JUMPSUB or Instruction.MCOPY => spec?.IsEip5656Enabled == true ? "MCOPY" : "JUMPSUB", _ => FastEnum.IsDefined(instruction) ? FastEnum.GetName(instruction) : null }; } diff --git a/src/Nethermind/Nethermind.Evm/MemoryAllowance.cs b/src/Nethermind/Nethermind.Evm/MemoryAllowance.cs index 22c3c95140c..3cc5a7983b1 100644 --- a/src/Nethermind/Nethermind.Evm/MemoryAllowance.cs +++ b/src/Nethermind/Nethermind.Evm/MemoryAllowance.cs @@ -5,6 +5,6 @@ namespace Nethermind.Evm { public static class MemoryAllowance { - public static int CodeCacheSize { get; } = 16_384; + public static int CodeCacheSize { get; } = 4_096 + 1_024; } } diff --git a/src/Nethermind/Nethermind.Evm/Metrics.cs b/src/Nethermind/Nethermind.Evm/Metrics.cs index 06147b13d47..8c3286facc9 100644 --- a/src/Nethermind/Nethermind.Evm/Metrics.cs +++ b/src/Nethermind/Nethermind.Evm/Metrics.cs @@ -3,6 +3,7 @@ using System.ComponentModel; using System.Runtime.CompilerServices; +using System.Threading; using Nethermind.Core.Attributes; @@ -21,15 +22,60 @@ public class Metrics [CounterMetric] [Description("Number of calls to other contracts.")] - public static long Calls { get; set; } + public static long Calls + { + get + { + long total = 0; + foreach (var value in _calls.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _calls = new(trackAllValues: true); + [Description("Number of calls to other contracts on thread.")] + public static long ThreadLocalCalls => _calls.Value; + public static void IncrementCalls() => _calls.Value++; [CounterMetric] [Description("Number of SLOAD opcodes executed.")] - public static long SloadOpcode { get; set; } + public static long SloadOpcode + { + get + { + long total = 0; + foreach (var value in _sLoadOpcode.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _sLoadOpcode = new(trackAllValues: true); + [Description("Number of SLOAD opcodes executed on thread.")] + public static long ThreadLocalSLoadOpcode => _sLoadOpcode.Value; + public static void IncrementSLoadOpcode() => _sLoadOpcode.Value++; [CounterMetric] [Description("Number of SSTORE opcodes executed.")] - public static long SstoreOpcode { get; set; } + public static long SstoreOpcode + { + get + { + long total = 0; + foreach (var value in _sStoreOpcode.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _sStoreOpcode = new(trackAllValues: true); + [Description("Number of SSTORE opcodes executed on thread.")] + public static long ThreadLocalSStoreOpcode => _sStoreOpcode.Value; + public static void IncrementSStoreOpcode() => _sStoreOpcode.Value++; [Description("Number of TLOAD opcodes executed.")] public static long TloadOpcode { get; set; } @@ -40,8 +86,8 @@ public class Metrics [Description("Number of MCOPY opcodes executed.")] public static long MCopyOpcode { get; set; } - [Description("Number of MODEXP precompiles executed.")] - public static long ModExpOpcode { get; set; } + [Description("Number of EXP opcodes executed.")] + public static long ExpOpcode { get; set; } [Description("Number of BLOCKHASH opcodes executed.")] public static long BlockhashOpcode { get; set; } @@ -72,11 +118,60 @@ public class Metrics [CounterMetric] [Description("Number of calls made to addresses without code.")] - public static long EmptyCalls { get; set; } + public static long EmptyCalls + { + get + { + long total = 0; + foreach (var value in _emptyCalls.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _emptyCalls = new(trackAllValues: true); + [Description("Number of calls made to addresses without code on thread.")] + public static long ThreadLocalEmptyCalls => _emptyCalls.Value; + public static void IncrementEmptyCalls() => _emptyCalls.Value++; [CounterMetric] [Description("Number of contract create calls.")] - public static long Creates { get; set; } + public static long Creates + { + get + { + long total = 0; + foreach (var value in _creates.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _creates = new(trackAllValues: true); + [Description("Number of contract create calls on thread.")] + public static long ThreadLocalCreates => _creates.Value; + public static void IncrementCreates() => _creates.Value++; + + [Description("Number of contracts' code analysed for jump destinations.")] + public static long ContractsAnalysed + { + get + { + long total = 0; + foreach (var value in _contractsAnalysed.Values) + { + total += value; + } + return total; + } + } + private static ThreadLocal _contractsAnalysed = new(trackAllValues: true); + [Description("Number of contracts' code analysed for jump destinations on thread.")] + public static long ThreadLocalContractsAnalysed => _contractsAnalysed.Value; + public static void IncrementContractsAnalysed() => _contractsAnalysed.Value++; + internal static long Transactions { get; set; } internal static float AveGasPrice { get; set; } internal static float MinGasPrice { get; set; } = float.MaxValue; diff --git a/src/Nethermind/Nethermind.Evm/Precompiles/IdentityPrecompile.cs b/src/Nethermind/Nethermind.Evm/Precompiles/IdentityPrecompile.cs index e26dc714acc..4b9273a7c1d 100644 --- a/src/Nethermind/Nethermind.Evm/Precompiles/IdentityPrecompile.cs +++ b/src/Nethermind/Nethermind.Evm/Precompiles/IdentityPrecompile.cs @@ -29,7 +29,7 @@ public long DataGasCost(in ReadOnlyMemory inputData, IReleaseSpec releaseS public (ReadOnlyMemory, bool) Run(in ReadOnlyMemory inputData, IReleaseSpec releaseSpec) { - return (inputData, true); + return (inputData.ToArray(), true); } } } diff --git a/src/Nethermind/Nethermind.Evm/Tracing/BlockReceiptsTracer.cs b/src/Nethermind/Nethermind.Evm/Tracing/BlockReceiptsTracer.cs index f319531a9f0..4a8587a7690 100644 --- a/src/Nethermind/Nethermind.Evm/Tracing/BlockReceiptsTracer.cs +++ b/src/Nethermind/Nethermind.Evm/Tracing/BlockReceiptsTracer.cs @@ -12,6 +12,7 @@ namespace Nethermind.Evm.Tracing; public class BlockReceiptsTracer : IBlockTracer, ITxTracer, IJournal, ITxTracerWrapper { + private IBlockTracer _otherTracer = NullBlockTracer.Instance; protected Block Block = null!; public bool IsTracingReceipt => true; public bool IsTracingActions => _currentTxTracer.IsTracingActions; @@ -29,8 +30,6 @@ public class BlockReceiptsTracer : IBlockTracer, ITxTracer, IJournal, ITxTr public bool IsTracingFees => _currentTxTracer.IsTracingFees; public bool IsTracingLogs => _currentTxTracer.IsTracingLogs; - private IBlockTracer _otherTracer = NullBlockTracer.Instance; - public void MarkAsSuccess(Address recipient, long gasSpent, byte[] output, LogEntry[] logs, Hash256? stateRoot = null) { _txReceipts.Add(BuildReceipt(recipient, gasSpent, StatusCode.Success, logs, stateRoot)); diff --git a/src/Nethermind/Nethermind.Evm/Tracing/CancellationBlockTracer.cs b/src/Nethermind/Nethermind.Evm/Tracing/CancellationBlockTracer.cs index 2fabb220ca2..311a2fedd26 100644 --- a/src/Nethermind/Nethermind.Evm/Tracing/CancellationBlockTracer.cs +++ b/src/Nethermind/Nethermind.Evm/Tracing/CancellationBlockTracer.cs @@ -7,54 +7,46 @@ namespace Nethermind.Evm.Tracing { - public class CancellationBlockTracer : IBlockTracer + public class CancellationBlockTracer(IBlockTracer innerTracer, CancellationToken token = default) : IBlockTracer { - private readonly IBlockTracer _innerTracer; - private readonly CancellationToken _token; private bool _isTracingRewards; - public CancellationBlockTracer(IBlockTracer innerTracer, CancellationToken token = default) - { - _innerTracer = innerTracer; - _token = token; - } - public bool IsTracingRewards { - get => _isTracingRewards || _innerTracer.IsTracingRewards; + get => _isTracingRewards || innerTracer.IsTracingRewards; set => _isTracingRewards = value; } public void ReportReward(Address author, string rewardType, UInt256 rewardValue) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingRewards) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingRewards) { - _innerTracer.ReportReward(author, rewardType, rewardValue); + innerTracer.ReportReward(author, rewardType, rewardValue); } } public void StartNewBlockTrace(Block block) { - _token.ThrowIfCancellationRequested(); - _innerTracer.StartNewBlockTrace(block); + token.ThrowIfCancellationRequested(); + innerTracer.StartNewBlockTrace(block); } public ITxTracer StartNewTxTrace(Transaction? tx) { - _token.ThrowIfCancellationRequested(); - return _innerTracer.StartNewTxTrace(tx).WithCancellation(_token); + token.ThrowIfCancellationRequested(); + return innerTracer.StartNewTxTrace(tx).WithCancellation(token); } public void EndTxTrace() { - _token.ThrowIfCancellationRequested(); - _innerTracer.EndTxTrace(); + token.ThrowIfCancellationRequested(); + innerTracer.EndTxTrace(); } public void EndBlockTrace() { - _innerTracer.EndBlockTrace(); + innerTracer.EndBlockTrace(); } } } diff --git a/src/Nethermind/Nethermind.Evm/Tracing/CancellationTxTracer.cs b/src/Nethermind/Nethermind.Evm/Tracing/CancellationTxTracer.cs index bc6badef0df..5bfd05b9d4a 100644 --- a/src/Nethermind/Nethermind.Evm/Tracing/CancellationTxTracer.cs +++ b/src/Nethermind/Nethermind.Evm/Tracing/CancellationTxTracer.cs @@ -4,16 +4,15 @@ using System; using System.Collections.Generic; using System.Threading; +using System.Linq; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Int256; namespace Nethermind.Evm.Tracing; -public class CancellationTxTracer : ITxTracer, ITxTracerWrapper +public class CancellationTxTracer(ITxTracer innerTracer, CancellationToken token = default) : ITxTracer, ITxTracerWrapper { - private readonly ITxTracer _innerTracer; - private readonly CancellationToken _token; private readonly bool _isTracingReceipt; private readonly bool _isTracingActions; private readonly bool _isTracingOpLevelStorage; @@ -29,435 +28,431 @@ public class CancellationTxTracer : ITxTracer, ITxTracerWrapper private readonly bool _isTracingFees; private readonly bool _isTracingOpLevelLogs; - public ITxTracer InnerTracer => _innerTracer; - - public CancellationTxTracer(ITxTracer innerTracer, CancellationToken token = default) - { - _innerTracer = innerTracer; - _token = token; - } + public ITxTracer InnerTracer => innerTracer; public bool IsCancelable => true; - public bool IsCancelled => _token.IsCancellationRequested; + public bool IsCancelled => token.IsCancellationRequested; public bool IsTracingReceipt { - get => _isTracingReceipt || _innerTracer.IsTracingReceipt; + get => _isTracingReceipt || innerTracer.IsTracingReceipt; init => _isTracingReceipt = value; } public bool IsTracingActions { - get => _isTracingActions || _innerTracer.IsTracingActions; + get => _isTracingActions || innerTracer.IsTracingActions; init => _isTracingActions = value; } public bool IsTracingOpLevelStorage { - get => _isTracingOpLevelStorage || _innerTracer.IsTracingOpLevelStorage; + get => _isTracingOpLevelStorage || innerTracer.IsTracingOpLevelStorage; init => _isTracingOpLevelStorage = value; } public bool IsTracingMemory { - get => _isTracingMemory || _innerTracer.IsTracingMemory; + get => _isTracingMemory || innerTracer.IsTracingMemory; init => _isTracingMemory = value; } public bool IsTracingInstructions { - get => _isTracingInstructions || _innerTracer.IsTracingInstructions; + get => _isTracingInstructions || innerTracer.IsTracingInstructions; init => _isTracingInstructions = value; } public bool IsTracingRefunds { - get => _isTracingRefunds || _innerTracer.IsTracingRefunds; + get => _isTracingRefunds || innerTracer.IsTracingRefunds; init => _isTracingRefunds = value; } public bool IsTracingCode { - get => _isTracingCode || _innerTracer.IsTracingCode; + get => _isTracingCode || innerTracer.IsTracingCode; init => _isTracingCode = value; } public bool IsTracingStack { - get => _isTracingStack || _innerTracer.IsTracingStack; + get => _isTracingStack || innerTracer.IsTracingStack; init => _isTracingStack = value; } public bool IsTracingState { - get => _isTracingState || _innerTracer.IsTracingState; + get => _isTracingState || innerTracer.IsTracingState; init => _isTracingState = value; } public bool IsTracingStorage { - get => _isTracingStorage || _innerTracer.IsTracingStorage; + get => _isTracingStorage || innerTracer.IsTracingStorage; init => _isTracingStorage = value; } public bool IsTracingBlockHash { - get => _isTracingBlockHash || _innerTracer.IsTracingBlockHash; + get => _isTracingBlockHash || innerTracer.IsTracingBlockHash; init => _isTracingBlockHash = value; } public bool IsTracingAccess { - get => _isTracingBlockAccess || _innerTracer.IsTracingAccess; + get => _isTracingBlockAccess || innerTracer.IsTracingAccess; init => _isTracingBlockAccess = value; } public bool IsTracingFees { - get => _isTracingFees || _innerTracer.IsTracingFees; + get => _isTracingFees || innerTracer.IsTracingFees; init => _isTracingFees = value; } + public bool IsTracingLogs { - get => _isTracingOpLevelLogs || _innerTracer.IsTracingLogs; + get => _isTracingOpLevelLogs || innerTracer.IsTracingLogs; init => _isTracingOpLevelLogs = value; } + public void ReportBalanceChange(Address address, UInt256? before, UInt256? after) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingState) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingState) { - _innerTracer.ReportBalanceChange(address, before, after); + innerTracer.ReportBalanceChange(address, before, after); } } public void ReportCodeChange(Address address, byte[] before, byte[] after) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingState) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingState) { - _innerTracer.ReportCodeChange(address, before, after); + innerTracer.ReportCodeChange(address, before, after); } } public void ReportNonceChange(Address address, UInt256? before, UInt256? after) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingState) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingState) { - _innerTracer.ReportNonceChange(address, before, after); + innerTracer.ReportNonceChange(address, before, after); } } public void ReportAccountRead(Address address) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingState) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingState) { - _innerTracer.ReportAccountRead(address); + innerTracer.ReportAccountRead(address); } } public void ReportStorageChange(in StorageCell storageCell, byte[] before, byte[] after) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingStorage) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingStorage) { - _innerTracer.ReportStorageChange(storageCell, before, after); + innerTracer.ReportStorageChange(storageCell, before, after); } } public void ReportStorageRead(in StorageCell storageCell) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingStorage) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingStorage) { - _innerTracer.ReportStorageRead(storageCell); + innerTracer.ReportStorageRead(storageCell); } } public void MarkAsSuccess(Address recipient, long gasSpent, byte[] output, LogEntry[] logs, Hash256? stateRoot = null) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingReceipt) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingReceipt) { - _innerTracer.MarkAsSuccess(recipient, gasSpent, output, logs, stateRoot); + innerTracer.MarkAsSuccess(recipient, gasSpent, output, logs, stateRoot); } } public void MarkAsFailed(Address recipient, long gasSpent, byte[] output, string error, Hash256? stateRoot = null) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingReceipt) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingReceipt) { - _innerTracer.MarkAsFailed(recipient, gasSpent, output, error, stateRoot); + innerTracer.MarkAsFailed(recipient, gasSpent, output, error, stateRoot); } } public void StartOperation(int pc, Instruction opcode, long gas, in ExecutionEnvironment env) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.StartOperation(pc, opcode, gas, env); + innerTracer.StartOperation(pc, opcode, gas, env); } } public void ReportOperationError(EvmExceptionType error) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.ReportOperationError(error); + innerTracer.ReportOperationError(error); } } public void ReportOperationRemainingGas(long gas) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.ReportOperationRemainingGas(gas); + innerTracer.ReportOperationRemainingGas(gas); } } public void ReportLog(LogEntry log) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingLogs) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingLogs) { - _innerTracer.ReportLog(log); + innerTracer.ReportLog(log); } } public void SetOperationStack(TraceStack stack) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingStack) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingStack) { - _innerTracer.SetOperationStack(stack); + innerTracer.SetOperationStack(stack); } } public void ReportStackPush(in ReadOnlySpan stackItem) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.ReportStackPush(stackItem); + innerTracer.ReportStackPush(stackItem); } } public void ReportStackPush(in ZeroPaddedSpan stackItem) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.ReportStackPush(stackItem); + innerTracer.ReportStackPush(stackItem); } } public void ReportStackPush(byte stackItem) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.ReportStackPush(stackItem); + innerTracer.ReportStackPush(stackItem); } } public void SetOperationMemory(TraceMemory memoryTrace) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingMemory) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingMemory) { - _innerTracer.SetOperationMemory(memoryTrace); + innerTracer.SetOperationMemory(memoryTrace); } } public void SetOperationMemorySize(ulong newSize) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingMemory) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingMemory) { - _innerTracer.SetOperationMemorySize(newSize); + innerTracer.SetOperationMemorySize(newSize); } } public void ReportMemoryChange(long offset, in ReadOnlySpan data) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.ReportMemoryChange(offset, data); + innerTracer.ReportMemoryChange(offset, data); } } public void ReportMemoryChange(long offset, in ZeroPaddedSpan data) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.ReportMemoryChange(offset, data); + innerTracer.ReportMemoryChange(offset, data); } } public void ReportMemoryChange(long offset, byte data) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.ReportMemoryChange(offset, data); + innerTracer.ReportMemoryChange(offset, data); } } public void ReportStorageChange(in ReadOnlySpan key, in ReadOnlySpan value) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.ReportStorageChange(key, value); + innerTracer.ReportStorageChange(key, value); } } public void SetOperationStorage(Address address, UInt256 storageIndex, ReadOnlySpan newValue, ReadOnlySpan currentValue) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingOpLevelStorage) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingOpLevelStorage) { - _innerTracer.SetOperationStorage(address, storageIndex, newValue, currentValue); + innerTracer.SetOperationStorage(address, storageIndex, newValue, currentValue); } } public void LoadOperationStorage(Address address, UInt256 storageIndex, ReadOnlySpan value) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingOpLevelStorage) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingOpLevelStorage) { - _innerTracer.LoadOperationStorage(address, storageIndex, value); + innerTracer.LoadOperationStorage(address, storageIndex, value); } } public void ReportSelfDestruct(Address address, UInt256 balance, Address refundAddress) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingActions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingActions) { - _innerTracer.ReportSelfDestruct(address, balance, refundAddress); + innerTracer.ReportSelfDestruct(address, balance, refundAddress); } } public void ReportAction(long gas, UInt256 value, Address from, Address to, ReadOnlyMemory input, ExecutionType callType, bool isPrecompileCall = false) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingActions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingActions) { - _innerTracer.ReportAction(gas, value, from, to, input, callType, isPrecompileCall); + innerTracer.ReportAction(gas, value, from, to, input, callType, isPrecompileCall); } } public void ReportActionEnd(long gas, ReadOnlyMemory output) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingActions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingActions) { - _innerTracer.ReportActionEnd(gas, output); + innerTracer.ReportActionEnd(gas, output); } } public void ReportActionError(EvmExceptionType evmExceptionType) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingActions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingActions) { - _innerTracer.ReportActionError(evmExceptionType); + innerTracer.ReportActionError(evmExceptionType); } } public void ReportActionRevert(long gasLeft, ReadOnlyMemory output) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingActions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingActions) { - _innerTracer.ReportActionRevert(gasLeft, output); + innerTracer.ReportActionRevert(gasLeft, output); } } public void ReportActionEnd(long gas, Address deploymentAddress, ReadOnlyMemory deployedCode) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingActions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingActions) { - _innerTracer.ReportActionEnd(gas, deploymentAddress, deployedCode); + innerTracer.ReportActionEnd(gas, deploymentAddress, deployedCode); } } public void ReportBlockHash(Hash256 blockHash) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingBlockHash) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingBlockHash) { - _innerTracer.ReportBlockHash(blockHash); + innerTracer.ReportBlockHash(blockHash); } } public void ReportByteCode(ReadOnlyMemory byteCode) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingCode) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingCode) { - _innerTracer.ReportByteCode(byteCode); + innerTracer.ReportByteCode(byteCode); } } public void ReportGasUpdateForVmTrace(long refund, long gasAvailable) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingInstructions) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingInstructions) { - _innerTracer.ReportGasUpdateForVmTrace(refund, gasAvailable); + innerTracer.ReportGasUpdateForVmTrace(refund, gasAvailable); } } public void ReportRefund(long refund) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingRefunds) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingRefunds) { - _innerTracer.ReportRefund(refund); + innerTracer.ReportRefund(refund); } } public void ReportExtraGasPressure(long extraGasPressure) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingRefunds) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingRefunds) { - _innerTracer.ReportExtraGasPressure(extraGasPressure); + innerTracer.ReportExtraGasPressure(extraGasPressure); } } public void ReportAccess(IReadOnlySet
accessedAddresses, IReadOnlySet accessedStorageCells) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingAccess) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingAccess) { - _innerTracer.ReportAccess(accessedAddresses, accessedStorageCells); + innerTracer.ReportAccess(accessedAddresses, accessedStorageCells); } } public void ReportFees(UInt256 fees, UInt256 burntFees) { - _token.ThrowIfCancellationRequested(); - if (_innerTracer.IsTracingFees) + token.ThrowIfCancellationRequested(); + if (innerTracer.IsTracingFees) { - _innerTracer.ReportFees(fees, burntFees); + innerTracer.ReportFees(fees, burntFees); } } public void Dispose() { - _innerTracer.Dispose(); + innerTracer.Dispose(); } } diff --git a/src/Nethermind/Nethermind.Evm/Tracing/ITxLogsMutator.cs b/src/Nethermind/Nethermind.Evm/Tracing/ITxLogsMutator.cs new file mode 100644 index 00000000000..fad85dc3b1f --- /dev/null +++ b/src/Nethermind/Nethermind.Evm/Tracing/ITxLogsMutator.cs @@ -0,0 +1,14 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Nethermind.Core; + +namespace Nethermind.Evm.Tracing; + +public interface ITxLogsMutator +{ + bool IsMutatingLogs { get; } + + void SetLogsToMutate(ICollection logsToMutate); +} diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/BuildUpTransactionProcessorAdapter.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/BuildUpTransactionProcessorAdapter.cs index d0215a41aa3..2ac0a3b8fcb 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/BuildUpTransactionProcessorAdapter.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/BuildUpTransactionProcessorAdapter.cs @@ -6,16 +6,9 @@ namespace Nethermind.Evm.TransactionProcessing { - public class BuildUpTransactionProcessorAdapter : ITransactionProcessorAdapter + public class BuildUpTransactionProcessorAdapter(ITransactionProcessor transactionProcessor) : ITransactionProcessorAdapter { - private readonly ITransactionProcessor _transactionProcessor; - - public BuildUpTransactionProcessorAdapter(ITransactionProcessor transactionProcessor) - { - _transactionProcessor = transactionProcessor; - } - public TransactionResult Execute(Transaction transaction, in BlockExecutionContext blkCtx, ITxTracer txTracer) => - _transactionProcessor.BuildUp(transaction, in blkCtx, txTracer); + transactionProcessor.BuildUp(transaction, in blkCtx, txTracer); } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTransactionProcessor.cs deleted file mode 100644 index 20b46e3c280..00000000000 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTransactionProcessor.cs +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core; - -namespace Nethermind.Evm.TransactionProcessing -{ - public interface IReadOnlyTransactionProcessor : ITransactionProcessor, IDisposable - { - bool IsContractDeployed(Address address); - } -} diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTxProcessingScope.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTxProcessingScope.cs new file mode 100644 index 00000000000..ce7bb61e8c3 --- /dev/null +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTxProcessingScope.cs @@ -0,0 +1,13 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.State; + +namespace Nethermind.Evm.TransactionProcessing; + +public interface IReadOnlyTxProcessingScope : IDisposable +{ + ITransactionProcessor TransactionProcessor { get; } + IWorldState WorldState { get; } +} diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTxProcessorSource.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTxProcessorSource.cs index 65d44d66986..97f7f5f960a 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTxProcessorSource.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/IReadOnlyTxProcessorSource.cs @@ -7,6 +7,6 @@ namespace Nethermind.Evm.TransactionProcessing { public interface IReadOnlyTxProcessorSource { - IReadOnlyTransactionProcessor Build(Hash256 stateRoot); + IReadOnlyTxProcessingScope Build(Hash256 stateRoot); } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ReadOnlyTransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ReadOnlyTransactionProcessor.cs deleted file mode 100644 index 026427b6413..00000000000 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ReadOnlyTransactionProcessor.cs +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core; -using Nethermind.Core.Crypto; -using Nethermind.Evm.Tracing; -using Nethermind.State; - -namespace Nethermind.Evm.TransactionProcessing -{ - public class ReadOnlyTransactionProcessor : IReadOnlyTransactionProcessor - { - private readonly ITransactionProcessor _transactionProcessor; - private readonly IWorldState _stateProvider; - private readonly Hash256 _stateBefore; - - public ReadOnlyTransactionProcessor(ITransactionProcessor transactionProcessor, IWorldState stateProvider, Hash256 startState) - { - _transactionProcessor = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor)); - _stateProvider = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider)); - _stateBefore = _stateProvider.StateRoot; - _stateProvider.StateRoot = startState ?? throw new ArgumentNullException(nameof(startState)); - } - - public TransactionResult Execute(Transaction transaction, in BlockExecutionContext blCtx, ITxTracer txTracer) => - _transactionProcessor.Execute(transaction, in blCtx, txTracer); - - public TransactionResult CallAndRestore(Transaction transaction, in BlockExecutionContext blCtx, ITxTracer txTracer) => - _transactionProcessor.CallAndRestore(transaction, in blCtx, txTracer); - - public TransactionResult BuildUp(Transaction transaction, in BlockExecutionContext blCtx, ITxTracer txTracer) => - _transactionProcessor.BuildUp(transaction, in blCtx, txTracer); - - public TransactionResult Trace(Transaction transaction, in BlockExecutionContext blCtx, ITxTracer txTracer) => - _transactionProcessor.Trace(transaction, in blCtx, txTracer); - - - public bool IsContractDeployed(Address address) => _stateProvider.IsContract(address); - - public void Dispose() - { - _stateProvider.StateRoot = _stateBefore; - _stateProvider.Reset(); - } - } -} diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs index f16eaa22c15..333ce0dcd88 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs @@ -32,10 +32,12 @@ public class SystemTxProcessor : ITransactionProcessor protected IWorldState WorldState { get; private init; } protected IVirtualMachine VirtualMachine { get; private init; } + private readonly ICodeInfoRepository _codeInfoRepository; public SystemTxProcessor( IReleaseSpec? spec, IWorldState? worldState, IVirtualMachine? virtualMachine, + ICodeInfoRepository? codeInfoRepository, EthereumEcdsa? ecdsa, ILogger? logger) { @@ -43,6 +45,7 @@ public SystemTxProcessor( Spec = spec ?? throw new ArgumentNullException(nameof(spec)); WorldState = worldState ?? throw new ArgumentNullException(nameof(worldState)); VirtualMachine = virtualMachine ?? throw new ArgumentNullException(nameof(virtualMachine)); + _codeInfoRepository = codeInfoRepository ?? throw new ArgumentNullException(nameof(codeInfoRepository)); Ecdsa = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa)); } public TransactionResult CallAndRestore(Transaction transaction, in BlockExecutionContext blCtx, ITxTracer txTracer) => @@ -304,7 +307,7 @@ protected virtual ExecutionEnvironment BuildExecutionEnvironment( TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data?.AsArray() ?? Array.Empty()) - : VirtualMachine.GetCachedCodeInfo(WorldState, recipient, spec); + : _codeInfoRepository.GetCachedCodeInfo(WorldState, recipient, spec); byte[] inputData = tx.IsMessageCall ? tx.Data.AsArray() ?? Array.Empty() : Array.Empty(); @@ -415,7 +418,7 @@ protected void ExecuteEvmCall( if (unspentGas >= codeDepositGasCost) { var code = substate.Output.ToArray(); - VirtualMachine.InsertCode(code, env.ExecutingAccount, spec, env.IsSystemEnv); + _codeInfoRepository.InsertCode(WorldState, code, env.ExecutingAccount, spec, env.IsSystemEnv); unspentGas -= codeDepositGasCost; } @@ -454,7 +457,7 @@ protected void PrepareAccountForContractDeployment(Address contractAddress, IRel { if (WorldState.AccountExists(contractAddress)) { - CodeInfo codeInfo = VirtualMachine.GetCachedCodeInfo(WorldState, contractAddress, spec); + CodeInfo codeInfo = _codeInfoRepository.GetCachedCodeInfo(WorldState, contractAddress, spec); bool codeIsNotEmpty = codeInfo.MachineCode.Length != 0; bool accountNonceIsNotZero = WorldState.GetNonce(contractAddress) != 0; diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index fd6bb9cd4d1..b6ee586f42a 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -7,8 +7,6 @@ using System.IO; using System.Linq; using System.Runtime.CompilerServices; -using System.Threading; - using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -33,22 +31,27 @@ public class TransactionProcessor : ITransactionProcessor protected ISpecProvider SpecProvider { get; private init; } protected IWorldState WorldState { get; private init; } protected IVirtualMachine VirtualMachine { get; private init; } + private readonly ICodeInfoRepository _codeInfoRepository; public TransactionProcessor( ISpecProvider? specProvider, IWorldState? worldState, IVirtualMachine? virtualMachine, + ICodeInfoRepository? codeInfoRepository, ILogManager? logManager) { ArgumentNullException.ThrowIfNull(logManager, nameof(logManager)); ArgumentNullException.ThrowIfNull(specProvider, nameof(specProvider)); ArgumentNullException.ThrowIfNull(worldState, nameof(worldState)); ArgumentNullException.ThrowIfNull(virtualMachine, nameof(virtualMachine)); + ArgumentNullException.ThrowIfNull(codeInfoRepository, nameof(codeInfoRepository)); Logger = logManager.GetClassLogger(); SpecProvider = specProvider; WorldState = worldState; VirtualMachine = virtualMachine; + _codeInfoRepository = codeInfoRepository; + Ecdsa = new EthereumEcdsa(specProvider.ChainId, logManager); } @@ -75,7 +78,7 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (tx.IsSystem()) { - ITransactionProcessor systemProcessor = new SystemTxProcessor(spec, WorldState, VirtualMachine, Ecdsa, Logger); + ITransactionProcessor systemProcessor = new SystemTxProcessor(spec, WorldState, VirtualMachine, _codeInfoRepository, Ecdsa, Logger); return systemProcessor.Execute(tx, blCtx, tracer); } @@ -99,7 +102,7 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (!(result = BuyGas(tx, header, spec, tracer, opts, effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment))) return result; if (!(result = IncrementNonce(tx, header, spec, tracer, opts))) return result; - if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance); + if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice); @@ -127,7 +130,7 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon } else if (commit) { - WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullStateTracer.Instance); + WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullStateTracer.Instance, commitStorageRoots: !spec.IsEip658Enabled); } if (tracer.IsTracingReceipt) @@ -389,7 +392,9 @@ protected ExecutionEnvironment BuildExecutionEnvironment( CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data ?? Memory.Empty) - : VirtualMachine.GetCachedCodeInfo(WorldState, recipient, spec); + : _codeInfoRepository.GetCachedCodeInfo(WorldState, recipient, spec); + + codeInfo.AnalyseInBackgroundIfRequired(); byte[] inputData = tx.IsMessageCall ? tx.Data.AsArray() ?? Array.Empty() : Array.Empty(); @@ -499,7 +504,8 @@ protected void ExecuteEvmCall( if (unspentGas >= codeDepositGasCost) { var code = substate.Output.ToArray(); - VirtualMachine.InsertCode(code, env.ExecutingAccount, spec, env.IsSystemEnv); + _codeInfoRepository.InsertCode(WorldState, code, env.ExecutingAccount, spec, env.IsSystemEnv); + unspentGas -= codeDepositGasCost; } } @@ -553,7 +559,7 @@ protected void PrepareAccountForContractDeployment(Address contractAddress, IRel { if (WorldState.AccountExists(contractAddress)) { - CodeInfo codeInfo = VirtualMachine.GetCachedCodeInfo(WorldState, contractAddress, spec); + CodeInfo codeInfo = _codeInfoRepository.GetCachedCodeInfo(WorldState, contractAddress, spec); bool codeIsNotEmpty = codeInfo.MachineCode.Length != 0; bool accountNonceIsNotZero = WorldState.GetNonce(contractAddress) != 0; diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index b219520dfb3..51b7b742fbf 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -6,23 +6,18 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using Nethermind.Core; -using Nethermind.Core.Caching; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Evm.CodeAnalysis; using Nethermind.Evm.Precompiles; -using Nethermind.Evm.Precompiles.Bls; -using Nethermind.Evm.Precompiles.Snarks; using Nethermind.Evm.Tracing; using Nethermind.Logging; using Nethermind.State; using System.Diagnostics.CodeAnalysis; -using System.Diagnostics; using System.Runtime.Intrinsics; using static Nethermind.Evm.VirtualMachine; using static System.Runtime.CompilerServices.Unsafe; -using ValueHash256 = Nethermind.Core.Crypto.ValueHash256; #if DEBUG using Nethermind.Evm.Tracing.Debugger; @@ -34,23 +29,23 @@ namespace Nethermind.Evm; using System.Collections.Frozen; using System.Linq; +using System.Runtime.InteropServices; using System.Threading; using Int256; using Nethermind.Crypto; +using Nethermind.Core.Collections; + public class VirtualMachine : IVirtualMachine { public const int MaxCallDepth = 1024; - internal static FrozenDictionary PrecompileCode { get; } = InitializePrecompiledContracts(); - internal static LruCache CodeCache { get; } = new(MemoryAllowance.CodeCacheSize, MemoryAllowance.CodeCacheSize, "VM bytecodes"); - - private readonly static UInt256 P255Int = (UInt256)System.Numerics.BigInteger.Pow(2, 255); + private static readonly UInt256 P255Int = (UInt256)System.Numerics.BigInteger.Pow(2, 255); internal static ref readonly UInt256 P255 => ref P255Int; internal static readonly UInt256 BigInt256 = 256; internal static readonly UInt256 BigInt32 = 32; - internal static readonly byte[] BytesZero = { 0 }; + internal static readonly byte[] BytesZero = [0]; internal static readonly byte[] BytesZero32 = { @@ -73,61 +68,19 @@ public class VirtualMachine : IVirtualMachine public VirtualMachine( IBlockhashProvider? blockhashProvider, ISpecProvider? specProvider, + ICodeInfoRepository codeInfoRepository, ILogManager? logManager) { ILogger logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - if (!logger.IsTrace) - { - _evm = new VirtualMachine(blockhashProvider, specProvider, logger); - } - else - { - _evm = new VirtualMachine(blockhashProvider, specProvider, logger); - } - } - - public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec spec) - => _evm.GetCachedCodeInfo(worldState, codeSource, spec); - - public void InsertCode(ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv) - { - _evm.InsertCode(code, codeOwner, spec, isSystemEnv); + _evm = logger.IsTrace + ? new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, logger) + : new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, logger); } public TransactionSubstate Run(EvmState state, IWorldState worldState, ITxTracer txTracer) where TTracingActions : struct, VirtualMachine.IIsTracing => _evm.Run(state, worldState, txTracer); - private static FrozenDictionary InitializePrecompiledContracts() - { - return new Dictionary - { - [EcRecoverPrecompile.Address] = new(EcRecoverPrecompile.Instance), - [Sha256Precompile.Address] = new(Sha256Precompile.Instance), - [Ripemd160Precompile.Address] = new(Ripemd160Precompile.Instance), - [IdentityPrecompile.Address] = new(IdentityPrecompile.Instance), - - [Bn254AddPrecompile.Address] = new(Bn254AddPrecompile.Instance), - [Bn254MulPrecompile.Address] = new(Bn254MulPrecompile.Instance), - [Bn254PairingPrecompile.Address] = new(Bn254PairingPrecompile.Instance), - [ModExpPrecompile.Address] = new(ModExpPrecompile.Instance), - - [Blake2FPrecompile.Address] = new(Blake2FPrecompile.Instance), - - [G1AddPrecompile.Address] = new(G1AddPrecompile.Instance), - [G1MulPrecompile.Address] = new(G1MulPrecompile.Instance), - [G1MultiExpPrecompile.Address] = new(G1MultiExpPrecompile.Instance), - [G2AddPrecompile.Address] = new(G2AddPrecompile.Instance), - [G2MulPrecompile.Address] = new(G2MulPrecompile.Instance), - [G2MultiExpPrecompile.Address] = new(G2MultiExpPrecompile.Instance), - [PairingPrecompile.Address] = new(PairingPrecompile.Instance), - [MapToG1Precompile.Address] = new(MapToG1Precompile.Instance), - [MapToG2Precompile.Address] = new(MapToG2Precompile.Instance), - - [PointEvaluationPrecompile.Address] = new(PointEvaluationPrecompile.Instance), - }.ToFrozenDictionary(); - } - internal readonly ref struct CallResult { public static CallResult InvalidSubroutineEntry => new(EvmExceptionType.InvalidSubroutineEntry); @@ -141,8 +94,8 @@ internal readonly ref struct CallResult public static CallResult StackUnderflowException => new(EvmExceptionType.StackUnderflow); // TODO: use these to avoid CALL POP attacks public static CallResult InvalidCodeException => new(EvmExceptionType.InvalidCode); public static CallResult AuthorizedNotSet => new(EvmExceptionType.AuthorizedNotSet); - - public static CallResult Empty => new(Array.Empty(), null); + public static CallResult Empty => new(default, null); + public static object BoxedEmpty { get; } = new object(); public CallResult(EvmState stateToExecute) { @@ -162,7 +115,7 @@ private CallResult(EvmExceptionType exceptionType) ExceptionType = exceptionType; } - public CallResult(byte[] output, bool? precompileSuccess, bool shouldRevert = false, EvmExceptionType exceptionType = EvmExceptionType.None) + public CallResult(ReadOnlyMemory output, bool? precompileSuccess, bool shouldRevert = false, EvmExceptionType exceptionType = EvmExceptionType.None) { StateToExecute = null; Output = output; @@ -193,22 +146,25 @@ internal sealed class VirtualMachine : IVirtualMachine where TLogger : private readonly ISpecProvider _specProvider; private readonly ILogger _logger; private IWorldState _worldState; - private IWorldState _state; + private IWorldState _state = null!; private readonly Stack _stateStack = new(); private (Address Address, bool ShouldDelete) _parityTouchBugAccount = (Address.FromNumber(3), false); private ReadOnlyMemory _returnDataBuffer = Array.Empty(); private ITxTracer _txTracer = NullTxTracer.Instance; + private readonly ICodeInfoRepository _codeInfoRepository; private EthereumEcdsa _ecdsa; public VirtualMachine( IBlockhashProvider? blockhashProvider, ISpecProvider? specProvider, - ILogger logger) + ICodeInfoRepository codeInfoRepository, + ILogger? logger) { - _logger = logger; + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _blockhashProvider = blockhashProvider ?? throw new ArgumentNullException(nameof(blockhashProvider)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); + _codeInfoRepository = codeInfoRepository ?? throw new ArgumentNullException(nameof(codeInfoRepository)); _chainId = ((UInt256)specProvider.ChainId).ToBigEndian(); _ecdsa = new EthereumEcdsa(specProvider.ChainId, LimboLogs.Instance); } @@ -263,18 +219,21 @@ public TransactionSubstate Run(EvmState state, IWorldState worl { if (typeof(TTracingActions) == typeof(IsTracing) && !currentState.IsContinuation) { - _txTracer.ReportAction(currentState.GasAvailable, currentState.Env.Value, currentState.From, currentState.To, currentState.ExecutionType.IsAnyCreate() ? currentState.Env.CodeInfo.MachineCode : currentState.Env.InputData, currentState.ExecutionType); + _txTracer.ReportAction(currentState.GasAvailable, + currentState.Env.Value, + currentState.From, + currentState.To, + currentState.ExecutionType.IsAnyCreate() + ? currentState.Env.CodeInfo.MachineCode + : currentState.Env.InputData, + currentState.ExecutionType); + if (_txTracer.IsTracingCode) _txTracer.ReportByteCode(currentState.Env.CodeInfo.MachineCode); } - if (!_txTracer.IsTracingInstructions) - { - callResult = ExecuteCall(currentState, previousCallResult, previousCallOutput, previousCallOutputDestination, spec); - } - else - { - callResult = ExecuteCall(currentState, previousCallResult, previousCallOutput, previousCallOutputDestination, spec); - } + callResult = !_txTracer.IsTracingInstructions + ? ExecuteCall(currentState, previousCallResult, previousCallOutput, previousCallOutputDestination, spec) + : ExecuteCall(currentState, previousCallResult, previousCallOutput, previousCallOutputDestination, spec); if (!callResult.IsReturn) { @@ -391,7 +350,8 @@ public TransactionSubstate Run(EvmState state, IWorldState worl if (gasAvailableForCodeDeposit >= codeDepositGasCost && !invalidCode) { ReadOnlyMemory code = callResult.Output; - InsertCode(code, callCodeOwner, spec, state.Env.IsSystemEnv); + _codeInfoRepository.InsertCode(_state, code, callCodeOwner, spec, state.Env.IsSystemEnv); + currentState.GasAvailable -= codeDepositGasCost; if (typeof(TTracingActions) == typeof(IsTracing)) @@ -499,17 +459,6 @@ public TransactionSubstate Run(EvmState state, IWorldState worl } } - public void InsertCode(ReadOnlyMemory code, Address callCodeOwner, IReleaseSpec spec, bool IsSystemTxEnv) - { - var codeInfo = new CodeInfo(code); - // Start generating the JumpDestinationBitmap in background. - ThreadPool.UnsafeQueueUserWorkItem(codeInfo, preferLocal: false); - - Hash256 codeHash = code.Length == 0 ? Keccak.OfAnEmptyString : Keccak.Compute(code.Span); - _state.InsertCode(callCodeOwner, codeHash, code, spec, IsSystemTxEnv); - CodeCache.Set(codeHash, codeInfo); - } - private void RevertParityTouchBugAccount(IReleaseSpec spec, bool isSystemEnv) { if (_parityTouchBugAccount.ShouldDelete) @@ -523,50 +472,6 @@ private void RevertParityTouchBugAccount(IReleaseSpec spec, bool isSystemEnv) } } - public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) - { - if (codeSource.IsPrecompile(vmSpec)) - { - return PrecompileCode[codeSource]; - } - - CodeInfo cachedCodeInfo = null; - ValueHash256 codeHash = worldState.GetCodeHash(codeSource); - if (codeHash == Keccak.OfAnEmptyString.ValueHash256) - { - cachedCodeInfo = CodeInfo.Empty; - } - - cachedCodeInfo ??= CodeCache.Get(codeHash); - if (cachedCodeInfo is null) - { - byte[]? code = worldState.GetCode(codeHash); - - if (code is null) - { - MissingCode(codeSource, codeHash); - } - - cachedCodeInfo = new CodeInfo(code); - CodeCache.Set(codeHash, cachedCodeInfo); - } - else - { - Db.Metrics.CodeDbCache++; - // need to touch code so that any collectors that track database access are informed - worldState.TouchCode(codeHash); - } - - return cachedCodeInfo; - - [DoesNotReturn] - [StackTraceHidden] - static void MissingCode(Address codeSource, in ValueHash256 codeHash) - { - throw new NullReferenceException($"Code {codeHash} missing in the state for address {codeSource}"); - } - } - private static bool UpdateGas(long gasCost, ref long gasAvailable) { if (gasAvailable < gasCost) @@ -695,7 +600,7 @@ private CallResult ExecutePrecompile(EvmState state, IReleaseSpec spec) try { (ReadOnlyMemory output, bool success) = precompile.Run(callData, spec); - CallResult callResult = new(output.ToArray(), success, !success); + CallResult callResult = new(output, success, !success); return callResult; } catch (DllNotFoundException exception) @@ -706,7 +611,7 @@ private CallResult ExecutePrecompile(EvmState state, IReleaseSpec spec) catch (Exception exception) { if (_logger.IsError) _logger.Error($"Precompiled contract ({precompile.GetType()}) execution exception", exception); - CallResult callResult = new(Array.Empty(), false, true); + CallResult callResult = new(default, false, true); return callResult; } } @@ -742,7 +647,7 @@ private CallResult ExecuteCall(EvmState vmState, ReadOnlyM { if (!vmState.IsTopLevel) { - Metrics.EmptyCalls++; + Metrics.IncrementEmptyCalls(); } goto Empty; } @@ -986,7 +891,7 @@ private CallResult ExecuteCode externalCode = GetCachedCodeInfo(_worldState, address, spec).MachineCode; + ReadOnlyMemory externalCode = _codeInfoRepository.GetCachedCodeInfo(_worldState, address, spec).MachineCode; slice = externalCode.SliceWithZeroPadding(b, (int)result); vmState.Memory.Save(in a, in slice); if (typeof(TTracingInstructions) == typeof(IsTracing)) @@ -1843,7 +1748,7 @@ private CallResult ExecuteCode value = _state.GetTransientState(in storageCell); - stack.PushBytes(value); + if (!stack.PopUInt256(out result)) goto StackUnderflow; + storageCell = new(env.ExecutingAccount, result); - if (typeof(TTracingStorage) == typeof(IsTracing)) - { - if (gasAvailable < 0) goto OutOfGas; - _txTracer.LoadOperationTransientStorage(storageCell.Address, result, value); - } + ReadOnlySpan value = _state.GetTransientState(in storageCell); + stack.PushBytes(value); - break; - } - else + if (typeof(TTracingStorage) == typeof(IsTracing)) { - if (!spec.SubroutinesEnabled) goto InvalidInstruction; - - // why do we even need the cost of it? - gasAvailable -= GasCostOf.Base; - - goto InvalidSubroutineEntry; + if (gasAvailable < 0) goto OutOfGas; + _txTracer.LoadOperationTransientStorage(storageCell.Address, result, value); } + break; } - case Instruction.RETURNSUB | Instruction.TSTORE: + case Instruction.TSTORE: { - if (spec.TransientStorageEnabled) + if (!spec.TransientStorageEnabled) goto InvalidInstruction; { Metrics.TstoreOpcode++; @@ -2055,24 +1954,10 @@ private CallResult ExecuteCode(EvmState vmState, [MethodImpl(MethodImplOptions.NoInlining)] private void InstructionExtCodeSize(Address address, ref EvmStack stack, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing { - int codeLength = GetCachedCodeInfo(_worldState, address, spec).MachineCode.Span.Length; - UInt256 result = (UInt256)codeLength; + ReadOnlyMemory accountCode = _codeInfoRepository.GetCachedCodeInfo(_worldState, address, spec).MachineCode; + UInt256 result = (UInt256)accountCode.Span.Length; stack.PushUInt256(in result); } @@ -2309,7 +2169,7 @@ private EvmExceptionType InstructionCall( returnData = null; ref readonly ExecutionEnvironment env = ref vmState.Env; - Metrics.Calls++; + Metrics.IncrementCalls(); if (instruction == Instruction.DELEGATECALL && !spec.DelegateCallEnabled || instruction == Instruction.STATICCALL && !spec.StaticCallEnabled || @@ -2361,11 +2221,7 @@ private EvmExceptionType InstructionCall( if (typeof(TLogger) == typeof(IsTracing)) { - _logger.Trace($"caller {caller}"); - _logger.Trace($"code source {codeSource}"); - _logger.Trace($"target {target}"); - _logger.Trace($"value {callValue}"); - _logger.Trace($"transfer value {transferValue}"); + TraceCallDetails(codeSource, ref callValue, ref transferValue, caller, target); } long gasExtra = 0L; @@ -2389,6 +2245,9 @@ private EvmExceptionType InstructionCall( !UpdateMemoryCost(vmState, ref gasAvailable, in outputOffset, outputLength) || !UpdateGas(gasExtra, ref gasAvailable)) return EvmExceptionType.OutOfGas; + CodeInfo codeInfo = _codeInfoRepository.GetCachedCodeInfo(_worldState, codeSource, spec); + codeInfo.AnalyseInBackgroundIfRequired(); + if (spec.Use63Over64Rule) { UInt256 sixtyFourthDeducted = (UInt256)(gasAvailable - gasAvailable / 64); @@ -2436,11 +2295,19 @@ private EvmExceptionType InstructionCall( return EvmExceptionType.None; } - ReadOnlyMemory callData = vmState.Memory.Load(in dataOffset, dataLength); - Snapshot snapshot = _worldState.TakeSnapshot(); _state.SubtractFromBalance(caller, transferValue, spec, env.IsSystemEnv); + if (codeInfo.IsEmpty && typeof(TTracingInstructions) != typeof(IsTracing) && !_txTracer.IsTracingActions) + { + // Non contract call, no need to construct call frame can just credit balance and return gas + _returnDataBuffer = default; + stack.PushBytes(StatusCode.SuccessBytes.Span); + UpdateGasUp(gasLimitUl, ref gasAvailable); + return FastCall(spec, out returnData, in transferValue, target); + } + + ReadOnlyMemory callData = vmState.Memory.Load(in dataOffset, dataLength); ExecutionEnvironment callEnv = new ( txExecutionContext: in env.TxExecutionContext, @@ -2451,7 +2318,7 @@ private EvmExceptionType InstructionCall( transferValue: transferValue, value: callValue, inputData: callData, - codeInfo: GetCachedCodeInfo(_worldState, codeSource, spec), + codeInfo: codeInfo, isSystemExecutionEnv: env.IsSystemEnv ); if (typeof(TLogger) == typeof(IsTracing)) _logger.Trace($"Tx call gas {gasLimitUl}"); @@ -2477,6 +2344,32 @@ private EvmExceptionType InstructionCall( isCreateOnPreExistingAccount: false); return EvmExceptionType.None; + + EvmExceptionType FastCall(IReleaseSpec spec, out object returnData, in UInt256 transferValue, Address target) + { + if (!_state.AccountExists(target)) + { + _state.CreateAccount(target, transferValue); + } + else + { + _state.AddToBalance(target, transferValue, spec); + } + Metrics.IncrementEmptyCalls(); + + returnData = CallResult.BoxedEmpty; + return EvmExceptionType.None; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + void TraceCallDetails(Address codeSource, ref UInt256 callValue, ref UInt256 transferValue, Address caller, Address target) + { + _logger.Trace($"caller {caller}"); + _logger.Trace($"code source {codeSource}"); + _logger.Trace($"target {target}"); + _logger.Trace($"value {callValue}"); + _logger.Trace($"transfer value {transferValue}"); + } } [SkipLocalsInit] @@ -2650,7 +2543,7 @@ private EvmExceptionType InstructionSelfDestruct(EvmState vmState, ref Snapshot snapshot = _worldState.TakeSnapshot(); bool accountExists = _state.AccountExists(contractAddress); - if (accountExists && (GetCachedCodeInfo(_worldState, contractAddress, spec).MachineCode.Length != 0 || + if (accountExists && (_codeInfoRepository.GetCachedCodeInfo(_worldState, contractAddress, spec).MachineCode.Length != 0 || _state.GetNonce(contractAddress) != 0)) { /* we get the snapshot before this as there is a possibility with that we will touch an empty account and remove it even if the REVERT operation follows */ @@ -2675,6 +2568,7 @@ private EvmExceptionType InstructionSelfDestruct(EvmState vmState, ref // pointing to data in this tx and will become invalid // for another tx as returned to pool. CodeInfo codeInfo = new(initCode); + codeInfo.AnalyseInBackgroundIfRequired(); ExecutionEnvironment callEnv = new ( @@ -2743,7 +2637,7 @@ private EvmExceptionType InstructionSLoad where TTracingInstructions : struct, IIsTracing where TTracingStorage : struct, IIsTracing { - Metrics.SloadOpcode++; + Metrics.IncrementSLoadOpcode(); gasAvailable -= spec.GetSLoadCost(); if (!stack.PopUInt256(out UInt256 result)) return EvmExceptionType.StackUnderflow; @@ -2771,7 +2665,7 @@ private EvmExceptionType InstructionSStore int.MaxValue) { @@ -2962,7 +2856,7 @@ private static bool Jump(in UInt256 jumpDest, ref int programCounter, in Executi } int jumpDestInt = (int)jumpDest; - if (!env.CodeInfo.ValidateJump(jumpDestInt, isSubroutine)) + if (!env.CodeInfo.ValidateJump(jumpDestInt)) { // https://github.com/NethermindEth/nethermind/issues/140 // TODO: add a test, validating inside the condition was not covered by existing tests and fails on 61363 Ropsten diff --git a/src/Nethermind/Nethermind.ExternalSigner.Plugin/ClefSigner.cs b/src/Nethermind/Nethermind.ExternalSigner.Plugin/ClefSigner.cs new file mode 100644 index 00000000000..16b5c8c0026 --- /dev/null +++ b/src/Nethermind/Nethermind.ExternalSigner.Plugin/ClefSigner.cs @@ -0,0 +1,140 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using DotNetty.Buffers; +using Nethermind.Consensus; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Crypto; +using Nethermind.JsonRpc.Client; +using Nethermind.Serialization.Rlp; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; + +namespace Nethermind.JsonRpc; +public class ClefSigner : IHeaderSigner, ISignerStore +{ + private readonly IJsonRpcClient rpcClient; + private HeaderDecoder _headerDecoder; + + private ClefSigner(IJsonRpcClient rpcClient, Address author) + { + this.rpcClient = rpcClient; + Address = author; + _headerDecoder = new HeaderDecoder(); + } + + public static async Task Create(IJsonRpcClient jsonRpcClient, Address? blockAuthorAccount = null) + { + ClefSigner signer = new(jsonRpcClient, await GetSignerAddress(jsonRpcClient, blockAuthorAccount)); + return signer; + } + + public Address Address { get; private set; } + + public bool CanSign => true; + + public bool CanSignHeader => true; + + public PrivateKey? Key => throw new InvalidOperationException("Cannot get private keys from remote signer."); + + /// + /// Clef will not sign data directly, but will parse and sign data in the format: + /// keccak256("\x19Ethereum Signed Message:\n${message length}${message}") + /// + /// Message to be signed. + /// of . + public Signature Sign(Hash256 message) + { + var signed = rpcClient.Post( + "account_signData", + "text/plain", + Address.ToString(), + message).GetAwaiter().GetResult(); + if (signed == null) + ThrowInvalidOperationSignFailed(); + var bytes = Bytes.FromHexString(signed); + return new Signature(bytes); + } + + /// + /// Used to sign a clique header. The full Rlp of the header has to be sent, + /// since clef does not sign data directly, but will parse and decide itself what to sign. + /// + /// Full Rlp of the clique header. + /// of the hash of the clique header. + public Signature Sign(BlockHeader header) + { + if (header is null) throw new ArgumentNullException(nameof(header)); + int contentLength = _headerDecoder.GetLength(header, RlpBehaviors.None); + IByteBuffer buffer = PooledByteBufferAllocator.Default.Buffer(contentLength); + try + { + RlpStream rlpStream = new NettyRlpStream(buffer); + rlpStream.Encode(header); + string? signed = rpcClient.Post( + "account_signData", + "application/x-clique-header", + Address.ToString(), + buffer.AsSpan().ToHexString(true)).GetAwaiter().GetResult(); + if (signed is null) + ThrowInvalidOperationSignFailed(); + byte[] bytes = Bytes.FromHexString(signed); + + //Clef will set recid to 0/1, without the VOffset + if (bytes.Length == 65 && (bytes[64] == 0 || bytes[64] == 1)) + return new Signature(bytes.AsSpan(0, 64), bytes[64]); + return new Signature(bytes); + } + finally + { + buffer.Release(); + } + } + + public ValueTask Sign(Transaction tx) => + throw new NotImplementedException("Remote signing of transactions is not supported."); + + private async static Task
GetSignerAddress(IJsonRpcClient rpcClient, Address? blockAuthorAccount) + { + var accounts = await rpcClient.Post("account_list"); + if (accounts is null) + throw new InvalidOperationException("Remote signer 'account_list' response is invalid."); + if (!accounts.Any()) + throw new InvalidOperationException("Remote signer has not been configured with any signers."); + if (blockAuthorAccount != null) + { + if (accounts.Any(a => new Address(a).Bytes.SequenceEqual(blockAuthorAccount.Bytes))) + return blockAuthorAccount; + else + throw new InvalidOperationException($"Remote signer cannot sign for {blockAuthorAccount}."); + } + else + { + return new Address(accounts[0]); + } + } + + public void SetSigner(PrivateKey key) + { + ThrowInvalidOperationSetSigner(); + } + + public void SetSigner(ProtectedPrivateKey key) + { + ThrowInvalidOperationSetSigner(); + } + + [DoesNotReturn] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ThrowInvalidOperationSignFailed() => + throw new InvalidOperationException("Remote signer failed to sign the request."); + + [DoesNotReturn] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ThrowInvalidOperationSetSigner() => + throw new InvalidOperationException("Cannot set a signer when using a remote signer."); +} + + diff --git a/src/Nethermind/Nethermind.ExternalSigner.Plugin/ClefSignerPlugin.cs b/src/Nethermind/Nethermind.ExternalSigner.Plugin/ClefSignerPlugin.cs new file mode 100644 index 00000000000..19daea61b1d --- /dev/null +++ b/src/Nethermind/Nethermind.ExternalSigner.Plugin/ClefSignerPlugin.cs @@ -0,0 +1,80 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Api; +using Nethermind.Api.Extensions; +using Nethermind.Core; +using Nethermind.JsonRpc.Client; +using Nethermind.JsonRpc; +using Nethermind.Network; +using Nethermind.Consensus; +using Nethermind.KeyStore.Config; +using System.Configuration; + +namespace Nethermind.ExternalSigner.Plugin; + +public class ClefSignerPlugin : INethermindPlugin +{ + private INethermindApi? _nethermindApi; + + public string Name => "Clef signer"; + + public string Description => "Enabled signing from a remote Clef instance over Json RPC."; + + public string Author => "Nethermind"; + + public ValueTask DisposeAsync() + { + return ValueTask.CompletedTask; + } + + public async Task Init(INethermindApi nethermindApi) + { + _nethermindApi = nethermindApi ?? throw new ArgumentNullException(nameof(nethermindApi)); + + if (_nethermindApi == null) + throw new InvalidOperationException("Init() must be called first."); + + IMiningConfig miningConfig = _nethermindApi.Config(); + if (miningConfig.Enabled) + { + if (!string.IsNullOrEmpty(miningConfig.Signer)) + { + Uri? uri; + if (!Uri.TryCreate(miningConfig.Signer, UriKind.Absolute, out uri)) + { + throw new ConfigurationErrorsException($"{miningConfig.Signer} must have be a valid uri."); + } + ClefSigner signer = + await SetupExternalSigner(uri, _nethermindApi.Config().BlockAuthorAccount); + _nethermindApi.EngineSigner = signer; + } + } + + } + + public Task InitNetworkProtocol() + { + return Task.CompletedTask; + } + + public Task InitRpcModules() + { + return Task.CompletedTask; + } + + private async Task SetupExternalSigner(Uri urlSigner, string blockAuthorAccount) + { + try + { + Address? address = string.IsNullOrEmpty(blockAuthorAccount) ? null : new Address(blockAuthorAccount); + BasicJsonRpcClient rpcClient = new(urlSigner, _nethermindApi!.EthereumJsonSerializer, _nethermindApi.LogManager, TimeSpan.FromSeconds(10)); + _nethermindApi.DisposeStack.Push(rpcClient); + return await ClefSigner.Create(rpcClient, address); + } + catch (HttpRequestException e) + { + throw new NetworkingException($"Remote signer at {urlSigner} did not respond.", NetworkExceptionType.TargetUnreachable, e); + } + } +} diff --git a/src/Nethermind/Nethermind.ExternalSigner.Plugin/Nethermind.ExternalSigner.Plugin.csproj b/src/Nethermind/Nethermind.ExternalSigner.Plugin/Nethermind.ExternalSigner.Plugin.csproj new file mode 100644 index 00000000000..31ecca4eede --- /dev/null +++ b/src/Nethermind/Nethermind.ExternalSigner.Plugin/Nethermind.ExternalSigner.Plugin.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + enable + enable + + + + + + + + diff --git a/src/Nethermind/Nethermind.Facade.Test/BlockchainBridgeTests.cs b/src/Nethermind/Nethermind.Facade.Test/BlockchainBridgeTests.cs index 69d8ef8077c..77fa79f865b 100644 --- a/src/Nethermind/Nethermind.Facade.Test/BlockchainBridgeTests.cs +++ b/src/Nethermind/Nethermind.Facade.Test/BlockchainBridgeTests.cs @@ -29,6 +29,7 @@ using NUnit.Framework; using Nethermind.Config; using Nethermind.Evm; +using Nethermind.Facade.Simulate; using Nethermind.State; namespace Nethermind.Facade.Test @@ -47,6 +48,20 @@ public class BlockchainBridgeTests private ISpecProvider _specProvider; private IDbProvider _dbProvider; + private class TestReadOnlyTxProcessingEnv : ReadOnlyTxProcessingEnv + { + public TestReadOnlyTxProcessingEnv( + IWorldStateManager worldStateManager, + IBlockTree blockTree, + ISpecProvider specProvider, + ILogManager logManager, + ITransactionProcessor transactionProcessor) : + base(worldStateManager, blockTree, specProvider, logManager) + { + _transactionProcessor = transactionProcessor; + } + } + [SetUp] public async Task SetUp() { @@ -67,16 +82,24 @@ public async Task SetUp() IWorldStateManager readOnlyWorldStateManager = new ReadOnlyWorldStateManager(dbProvider, trieStore, LimboLogs.Instance); - ReadOnlyTxProcessingEnv processingEnv = new( + IReadOnlyBlockTree readOnlyBlockTree = _blockTree.AsReadOnly(); + ReadOnlyTxProcessingEnv processingEnv = new TestReadOnlyTxProcessingEnv( readOnlyWorldStateManager, - new ReadOnlyBlockTree(_blockTree), + readOnlyBlockTree, _specProvider, - LimboLogs.Instance); + LimboLogs.Instance, + _transactionProcessor); - processingEnv.TransactionProcessor = _transactionProcessor; + SimulateReadOnlyBlocksProcessingEnvFactory simulateProcessingEnvFactory = new SimulateReadOnlyBlocksProcessingEnvFactory( + readOnlyWorldStateManager, + readOnlyBlockTree, + new ReadOnlyDbProvider(_dbProvider, true), + _specProvider, + LimboLogs.Instance); _blockchainBridge = new BlockchainBridge( processingEnv, + simulateProcessingEnvFactory, _txPool, _receiptStorage, _filterStore, @@ -195,10 +218,17 @@ public void Bridge_head_is_correct(long headNumber) IWorldStateManager readOnlyWorldStateManager = new ReadOnlyWorldStateManager(dbProvider, trieStore, LimboLogs.Instance); - + IReadOnlyBlockTree roBlockTree = _blockTree.AsReadOnly(); ReadOnlyTxProcessingEnv processingEnv = new( readOnlyWorldStateManager, - new ReadOnlyBlockTree(_blockTree), + roBlockTree, + _specProvider, + LimboLogs.Instance); + + SimulateReadOnlyBlocksProcessingEnvFactory simulateProcessingEnv = new SimulateReadOnlyBlocksProcessingEnvFactory( + readOnlyWorldStateManager, + roBlockTree, + new ReadOnlyDbProvider(_dbProvider, true), _specProvider, LimboLogs.Instance); @@ -210,6 +240,7 @@ public void Bridge_head_is_correct(long headNumber) _blockchainBridge = new BlockchainBridge( processingEnv, + simulateProcessingEnv, _txPool, _receiptStorage, _filterStore, diff --git a/src/Nethermind/Nethermind.Facade/BlockchainBridge.cs b/src/Nethermind/Nethermind.Facade/BlockchainBridge.cs index 5c82dede5a9..91675b757e1 100644 --- a/src/Nethermind/Nethermind.Facade/BlockchainBridge.cs +++ b/src/Nethermind/Nethermind.Facade/BlockchainBridge.cs @@ -19,13 +19,15 @@ using Block = Nethermind.Core.Block; using System.Threading; using Nethermind.Consensus.Processing; -using Nethermind.Core.Eip2930; using Nethermind.Core.Specs; using Nethermind.Evm.TransactionProcessing; using Nethermind.Facade.Filters; using Nethermind.State; using Nethermind.Core.Extensions; using Nethermind.Config; +using Nethermind.Facade.Proxy.Models.Simulate; +using Nethermind.Facade.Simulate; +using Transaction = Nethermind.Core.Transaction; namespace Nethermind.Facade { @@ -37,7 +39,9 @@ public interface IBlockchainBridgeFactory [Todo(Improve.Refactor, "I want to remove BlockchainBridge, split it into something with logging, state and tx processing. Then we can start using independent modules.")] public class BlockchainBridge : IBlockchainBridge { - private readonly ReadOnlyTxProcessingEnv _processingEnv; + private readonly IReadOnlyTxProcessorSource _processingEnv; + private readonly IBlockTree _blockTree; + private readonly IStateReader _stateReader; private readonly ITxPool _txPool; private readonly IFilterStore _filterStore; private readonly IEthereumEcdsa _ecdsa; @@ -47,8 +51,10 @@ public class BlockchainBridge : IBlockchainBridge private readonly ILogFinder _logFinder; private readonly ISpecProvider _specProvider; private readonly IBlocksConfig _blocksConfig; + private readonly SimulateBridgeHelper _simulateBridgeHelper; public BlockchainBridge(ReadOnlyTxProcessingEnv processingEnv, + SimulateReadOnlyBlocksProcessingEnvFactory simulateProcessingEnvFactory, ITxPool? txPool, IReceiptFinder? receiptStorage, IFilterStore? filterStore, @@ -61,6 +67,8 @@ public BlockchainBridge(ReadOnlyTxProcessingEnv processingEnv, bool isMining) { _processingEnv = processingEnv ?? throw new ArgumentNullException(nameof(processingEnv)); + _blockTree = processingEnv.BlockTree; + _stateReader = processingEnv.StateReader; _txPool = txPool ?? throw new ArgumentNullException(nameof(_txPool)); _receiptFinder = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _filterStore = filterStore ?? throw new ArgumentNullException(nameof(filterStore)); @@ -71,13 +79,16 @@ public BlockchainBridge(ReadOnlyTxProcessingEnv processingEnv, _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _blocksConfig = blocksConfig; IsMining = isMining; + _simulateBridgeHelper = new SimulateBridgeHelper( + simulateProcessingEnvFactory ?? throw new ArgumentNullException(nameof(simulateProcessingEnvFactory)), + _blocksConfig); } public Block? HeadBlock { get { - return _processingEnv.BlockTree.Head; + return _blockTree.Head; } } @@ -88,7 +99,7 @@ public Block? HeadBlock Hash256 blockHash = _receiptFinder.FindBlockHash(txHash); if (blockHash is not null) { - Block? block = _processingEnv.BlockTree.FindBlock(blockHash, BlockTreeLookupOptions.RequireCanonical); + Block? block = _blockTree.FindBlock(blockHash, BlockTreeLookupOptions.RequireCanonical); if (block is not null) { TxReceipt[] txReceipts = _receiptFinder.Get(block); @@ -108,7 +119,7 @@ public Block? HeadBlock Hash256 blockHash = _receiptFinder.FindBlockHash(txHash); if (blockHash is not null) { - Block block = _processingEnv.BlockTree.FindBlock(blockHash, BlockTreeLookupOptions.TotalDifficultyNotNeeded); + Block block = _blockTree.FindBlock(blockHash, BlockTreeLookupOptions.TotalDifficultyNotNeeded); TxReceipt txReceipt = _receiptFinder.Get(block).ForTransaction(txHash); return (txReceipt, block?.Transactions[txReceipt.Index], block?.BaseFeePerGas); } @@ -127,31 +138,6 @@ public Block? HeadBlock return blockHash is not null ? _receiptFinder.Get(blockHash).ForTransaction(txHash) : null; } - public class CallOutput - { - public CallOutput() - { - } - - public CallOutput(byte[] outputData, long gasSpent, string error, bool inputError = false) - { - Error = error; - OutputData = outputData; - GasSpent = gasSpent; - InputError = inputError; - } - - public string? Error { get; set; } - - public byte[] OutputData { get; set; } - - public long GasSpent { get; set; } - - public bool InputError { get; set; } - - public AccessList? AccessList { get; set; } - } - public CallOutput Call(BlockHeader header, Transaction tx, CancellationToken cancellationToken) { CallOutputTracer callOutputTracer = new(); @@ -166,9 +152,31 @@ public CallOutput Call(BlockHeader header, Transaction tx, CancellationToken can }; } + public SimulateOutput Simulate(BlockHeader header, SimulatePayload payload, CancellationToken cancellationToken) + { + SimulateBlockTracer simulateOutputTracer = new(payload.TraceTransfers, payload.ReturnFullTransactionObjects, _specProvider); + BlockReceiptsTracer tracer = new(); + tracer.SetOtherTracer(simulateOutputTracer); + SimulateOutput result = new(); + try + { + if (!_simulateBridgeHelper.TrySimulate(header, payload, new CancellationBlockTracer(tracer, cancellationToken), out string error)) + { + result.Error = error; + } + } + catch (Exception ex) + { + result.Error = ex.ToString(); + } + + result.Items = simulateOutputTracer.Results; + return result; + } + public CallOutput EstimateGas(BlockHeader header, Transaction tx, int errorMargin, CancellationToken cancellationToken) { - using IReadOnlyTransactionProcessor? readOnlyTransactionProcessor = _processingEnv.Build(header.StateRoot!); + using IReadOnlyTxProcessingScope scope = _processingEnv.Build(header.StateRoot!); EstimateGasTracer estimateGasTracer = new(); TransactionResult tryCallResult = TryCallAndRestore( @@ -177,7 +185,7 @@ public CallOutput EstimateGas(BlockHeader header, Transaction tx, int errorMargi true, estimateGasTracer.WithCancellation(cancellationToken)); - GasEstimator gasEstimator = new(readOnlyTransactionProcessor, _processingEnv.StateProvider, + GasEstimator gasEstimator = new(scope.TransactionProcessor, scope.WorldState, _specProvider, _blocksConfig); long estimate = gasEstimator.Estimate(tx, header, estimateGasTracer, errorMargin, cancellationToken); @@ -194,7 +202,7 @@ public CallOutput CreateAccessList(BlockHeader header, Transaction tx, Cancellat CallOutputTracer callOutputTracer = new(); AccessTxTracer accessTxTracer = optimize ? new(tx.SenderAddress, - tx.GetRecipient(tx.IsContractCreation ? _processingEnv.StateReader.GetNonce(header.StateRoot, tx.SenderAddress) : 0), header.GasBeneficiary) + tx.GetRecipient(tx.IsContractCreation ? _stateReader.GetNonce(header.StateRoot, tx.SenderAddress) : 0), header.GasBeneficiary) : new(header.GasBeneficiary); TransactionResult tryCallResult = TryCallAndRestore(header, tx, false, @@ -235,7 +243,7 @@ private TransactionResult CallAndRestore( transaction.SenderAddress ??= Address.SystemUser; Hash256 stateRoot = blockHeader.StateRoot!; - using IReadOnlyTransactionProcessor transactionProcessor = _processingEnv.Build(stateRoot); + using IReadOnlyTxProcessingScope scope = _processingEnv.Build(stateRoot); if (transaction.Nonce == 0) { @@ -277,17 +285,17 @@ private TransactionResult CallAndRestore( callHeader.MixHash = blockHeader.MixHash; callHeader.IsPostMerge = blockHeader.Difficulty == 0; transaction.Hash = transaction.CalculateHash(); - return transactionProcessor.CallAndRestore(transaction, new(callHeader), tracer); + return scope.TransactionProcessor.CallAndRestore(transaction, new(callHeader), tracer); } public ulong GetChainId() { - return _processingEnv.BlockTree.ChainId; + return _blockTree.ChainId; } private UInt256 GetNonce(Hash256 stateRoot, Address address) { - return _processingEnv.StateReader.GetNonce(stateRoot, address); + return _stateReader.GetNonce(stateRoot, address); } public bool FilterExists(int filterId) => _filterStore.FilterExists(filterId); @@ -343,7 +351,7 @@ public int NewFilter(BlockParameter? fromBlock, BlockParameter? toBlock, public int NewBlockFilter() { - BlockFilter filter = _filterStore.CreateBlockFilter(_processingEnv.BlockTree.Head!.Number); + BlockFilter filter = _filterStore.CreateBlockFilter(_blockTree.Head!.Number); _filterStore.SaveFilter(filter); return filter.Id; } @@ -388,12 +396,12 @@ public Hash256[] GetPendingTransactionFilterChanges(int filterId) => public void RunTreeVisitor(ITreeVisitor treeVisitor, Hash256 stateRoot) { - _processingEnv.StateReader.RunTreeVisitor(treeVisitor, stateRoot); + _stateReader.RunTreeVisitor(treeVisitor, stateRoot); } public bool HasStateForRoot(Hash256 stateRoot) { - return _processingEnv.StateReader.HasStateForRoot(stateRoot); + return _stateReader.HasStateForRoot(stateRoot); } public IEnumerable FindLogs(LogFilter filter, BlockHeader fromBlock, BlockHeader toBlock, CancellationToken cancellationToken = default) diff --git a/src/Nethermind/Nethermind.Facade/BlockchainBridgeExtensions.cs b/src/Nethermind/Nethermind.Facade/BlockchainBridgeExtensions.cs new file mode 100644 index 00000000000..a5af9f8b625 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/BlockchainBridgeExtensions.cs @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; + +namespace Nethermind.Facade; + +public static class BlockchainBridgeExtensions +{ + public static bool HasStateForBlock(this IBlockchainBridge blockchainBridge, BlockHeader header) => + blockchainBridge.HasStateForRoot(header.StateRoot!); +} diff --git a/src/Nethermind/Nethermind.Facade/CallOutput.cs b/src/Nethermind/Nethermind.Facade/CallOutput.cs new file mode 100644 index 00000000000..42034a699a0 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/CallOutput.cs @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core.Eip2930; + +namespace Nethermind.Facade; + +public class CallOutput +{ + public string? Error { get; set; } + + public byte[] OutputData { get; set; } = Array.Empty(); + + public long GasSpent { get; set; } + + public bool InputError { get; set; } + + public AccessList? AccessList { get; set; } +} diff --git a/src/Nethermind/Nethermind.JsonRpc/Data/AccessListItemForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/AccessListItemForRpc.cs similarity index 98% rename from src/Nethermind/Nethermind.JsonRpc/Data/AccessListItemForRpc.cs rename to src/Nethermind/Nethermind.Facade/Eth/AccessListItemForRpc.cs index 17533dd0f25..0269aeeb0e6 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Data/AccessListItemForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/AccessListItemForRpc.cs @@ -12,7 +12,7 @@ using System.Text.Json; using System.Text.Json.Serialization; -namespace Nethermind.JsonRpc.Data +namespace Nethermind.Facade.Eth { public struct AccessListItemForRpc : IEquatable { diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs similarity index 99% rename from src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs rename to src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs index 6c29b8f76cb..21ea75ed6d4 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BlockForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs @@ -15,7 +15,7 @@ using System.Runtime.CompilerServices; using Nethermind.Core.ConsensusRequests; -namespace Nethermind.JsonRpc.Modules.Eth; +namespace Nethermind.Facade.Eth; public class BlockForRpc { diff --git a/src/Nethermind/Nethermind.JsonRpc/Data/TransactionForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs similarity index 99% rename from src/Nethermind/Nethermind.JsonRpc/Data/TransactionForRpc.cs rename to src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs index 9806860fad7..ab7a7bbc8ba 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Data/TransactionForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs @@ -10,8 +10,9 @@ using Nethermind.Core.Eip2930; using Nethermind.Core.Extensions; using Nethermind.Int256; +using Nethermind.JsonRpc.Data; -namespace Nethermind.JsonRpc.Data; +namespace Nethermind.Facade.Eth; public class TransactionForRpc { diff --git a/src/Nethermind/Nethermind.Facade/IBlockchainBridge.cs b/src/Nethermind/Nethermind.Facade/IBlockchainBridge.cs index f998ae99fd0..ab0ffa8d309 100644 --- a/src/Nethermind/Nethermind.Facade/IBlockchainBridge.cs +++ b/src/Nethermind/Nethermind.Facade/IBlockchainBridge.cs @@ -9,8 +9,11 @@ using Nethermind.Core.Crypto; using Nethermind.Evm; using Nethermind.Facade.Filters; +using Nethermind.Facade.Simulate; +using Nethermind.Facade.Proxy.Models.Simulate; using Nethermind.Int256; using Nethermind.Trie; +using static Nethermind.Facade.BlockchainBridge; using Block = Nethermind.Core.Block; namespace Nethermind.Facade @@ -24,9 +27,11 @@ public interface IBlockchainBridge : ILogFinder TxReceipt GetReceipt(Hash256 txHash); (TxReceipt? Receipt, TxGasInfo? GasInfo, int LogIndexStart) GetReceiptAndGasInfo(Hash256 txHash); (TxReceipt? Receipt, Transaction Transaction, UInt256? baseFee) GetTransaction(Hash256 txHash, bool checkTxnPool = true); - BlockchainBridge.CallOutput Call(BlockHeader header, Transaction tx, CancellationToken cancellationToken); - BlockchainBridge.CallOutput EstimateGas(BlockHeader header, Transaction tx, int errorMarginBasisPoints, CancellationToken cancellationToken); - BlockchainBridge.CallOutput CreateAccessList(BlockHeader header, Transaction tx, CancellationToken cancellationToken, bool optimize); + CallOutput Call(BlockHeader header, Transaction tx, CancellationToken cancellationToken); + SimulateOutput Simulate(BlockHeader header, SimulatePayload payload, CancellationToken cancellationToken); + CallOutput EstimateGas(BlockHeader header, Transaction tx, int errorMarginBasisPoints, CancellationToken cancellationToken); + + CallOutput CreateAccessList(BlockHeader header, Transaction tx, CancellationToken cancellationToken, bool optimize); ulong GetChainId(); int NewBlockFilter(); diff --git a/src/Nethermind/Nethermind.Facade/Nethermind.Facade.csproj b/src/Nethermind/Nethermind.Facade/Nethermind.Facade.csproj index 200aa01482e..7a90f4758a8 100644 --- a/src/Nethermind/Nethermind.Facade/Nethermind.Facade.csproj +++ b/src/Nethermind/Nethermind.Facade/Nethermind.Facade.csproj @@ -2,6 +2,7 @@ annotations + True diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs new file mode 100644 index 00000000000..3df49a9e594 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Evm; +using Nethermind.Evm.CodeAnalysis; +using Nethermind.State; + +namespace Nethermind.Facade; + +public class OverridableCodeInfoRepository(ICodeInfoRepository codeInfoRepository) : ICodeInfoRepository +{ + private readonly Dictionary _codeOverwrites = new(); + + public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => + _codeOverwrites.TryGetValue(codeSource, out CodeInfo result) + ? result + : codeInfoRepository.GetCachedCodeInfo(worldState, codeSource, vmSpec); + + public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) => codeInfoRepository.GetOrAdd(codeHash, initCode); + + public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv) => + codeInfoRepository.InsertCode(state, code, codeOwner, spec, isSystemEnv); + + + public void SetCodeOverwrite( + IWorldState worldState, + IReleaseSpec vmSpec, + Address key, + CodeInfo value, + Address? redirectAddress = null) + { + if (redirectAddress is not null) + { + _codeOverwrites[redirectAddress] = GetCachedCodeInfo(worldState, key, vmSpec); + } + + _codeOverwrites[key] = value; + } +} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/AccountOverride.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/AccountOverride.cs new file mode 100644 index 00000000000..5b8a26ab431 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Proxy/Models/AccountOverride.cs @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Int256; + +namespace Nethermind.Facade.Proxy.Models; + +public class AccountOverride +{ + public UInt256? Nonce { get; set; } + public UInt256? Balance { get; set; } + public byte[]? Code { get; set; } + public Address? MovePrecompileToAddress { get; set; } + + /// + /// Storage for AccountOverrideState + /// + public Dictionary? State { get; set; } + + /// + /// Storage difference for AccountOverrideStateDiff + /// + public Dictionary? StateDiff { get; set; } +} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/CallTransactionModel.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/CallTransactionModel.cs deleted file mode 100644 index 697b11eb3d7..00000000000 --- a/src/Nethermind/Nethermind.Facade/Proxy/Models/CallTransactionModel.cs +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core; -using Nethermind.Int256; -using static Nethermind.Core.Extensions.MemoryExtensions; - -namespace Nethermind.Facade.Proxy.Models -{ - public class CallTransactionModel - { - public Address From { get; set; } - public Address To { get; set; } - public UInt256 Gas { get; set; } - public UInt256 GasPrice { get; set; } - public UInt256 Value { get; set; } - public byte[] Data { get; set; } - - public static CallTransactionModel FromTransaction(Transaction transaction) - => new() - { - From = transaction.SenderAddress, - To = transaction.To, - Data = transaction.Data.AsArray(), - Value = transaction.Value, - Gas = (UInt256)transaction.GasLimit, - GasPrice = transaction.GasPrice - }; - } -} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/BlockOverride.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/BlockOverride.cs new file mode 100644 index 00000000000..ad017bec29e --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/BlockOverride.cs @@ -0,0 +1,61 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Config; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Int256; + +namespace Nethermind.Facade.Proxy.Models.Simulate; + +public class BlockOverride +{ + public ulong? Number { get; set; } + public Hash256 PrevRandao { get; set; } = Keccak.Zero; + public ulong? Time { get; set; } + public ulong? GasLimit { get; set; } + public Address? FeeRecipient { get; set; } + public UInt256? BaseFeePerGas { get; set; } + + public BlockHeader GetBlockHeader(BlockHeader parent, IBlocksConfig cfg, IReleaseSpec spec) + { + ulong newTime = Time ?? checked(parent.Timestamp + cfg.SecondsPerSlot); + + long newGasLimit = GasLimit switch + { + null => parent.GasLimit, + <= long.MaxValue => (long)GasLimit, + _ => throw new OverflowException($"GasLimit value is too large, max value {ulong.MaxValue}") + }; + + long newBlockNumber = Number switch + { + null => checked(parent.Number + 1), + <= long.MaxValue => (long)Number, + _ => throw new OverflowException($"Block Number value is too large, max value {ulong.MaxValue}") + }; + + Address newFeeRecipientAddress = FeeRecipient ?? parent.Beneficiary!; + UInt256 newDifficulty = parent.Difficulty == 0 ? 0 : parent.Difficulty + 1; + BlockHeader result = new( + parent.Hash!, + Keccak.OfAnEmptySequenceRlp, + newFeeRecipientAddress, + newDifficulty, + newBlockNumber, + newGasLimit, + newTime, + Array.Empty()) + { + BaseFeePerGas = BaseFeePerGas ?? BaseFeeCalculator.Calculate(parent, spec), + MixHash = PrevRandao, + IsPostMerge = parent.Difficulty == 0, + TotalDifficulty = parent.TotalDifficulty + newDifficulty, + SealEngineType = parent.SealEngineType + }; + + return result; + } +} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/BlockStateCall.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/BlockStateCall.cs new file mode 100644 index 00000000000..db4efb549ba --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/BlockStateCall.cs @@ -0,0 +1,15 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using Nethermind.Core; + +namespace Nethermind.Facade.Proxy.Models.Simulate; + +public class BlockStateCall +{ + public BlockOverride? BlockOverrides { get; set; } + public Dictionary? StateOverrides { get; set; } + public T[]? Calls { get; set; } = Array.Empty(); +} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/Error.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/Error.cs new file mode 100644 index 00000000000..a53bdd9a9e5 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/Error.cs @@ -0,0 +1,11 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Facade.Proxy.Models.Simulate; + +public class Error +{ + public int Code { get; set; } + public string Message { get; set; } + public string Data { get; set; } +} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/Log.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/Log.cs new file mode 100644 index 00000000000..1e0f05d12c3 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/Log.cs @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Crypto; + +namespace Nethermind.Facade.Proxy.Models.Simulate; + +public class Log +{ + public Address Address { get; set; } + public Hash256[] Topics { get; set; } + public byte[] Data { get; set; } + public ulong BlockNumber { get; set; } + public Hash256 TransactionHash { get; set; } + public ulong TransactionIndex { get; set; } + public Hash256 BlockHash { get; set; } + + public ulong LogIndex { get; set; } + public bool Removed { get; set; } = false; +} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/ResultType.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/ResultType.cs new file mode 100644 index 00000000000..78e8707e914 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/ResultType.cs @@ -0,0 +1,11 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Facade.Proxy.Models.Simulate; + +public enum ResultType +{ + Failure, + Success, + Invalid +} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulateBlockResult.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulateBlockResult.cs new file mode 100644 index 00000000000..4b4e300fe10 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulateBlockResult.cs @@ -0,0 +1,19 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Reflection; +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.Facade.Eth; +using Nethermind.Int256; + +namespace Nethermind.Facade.Proxy.Models.Simulate; + +public class SimulateBlockResult(Block source, bool includeFullTransactionData, ISpecProvider specProvider) + : BlockForRpc(source, includeFullTransactionData, specProvider) +{ + public List Calls { get; set; } = new(); + public UInt256 BlobBaseFee { get; set; } +} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulateCallResult.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulateCallResult.cs new file mode 100644 index 00000000000..e07ec128b4d --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulateCallResult.cs @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Linq; + +namespace Nethermind.Facade.Proxy.Models.Simulate; + +public class SimulateCallResult +{ + public ulong Status { get; set; } + public byte[]? ReturnData { get; set; } + public ulong? GasUsed { get; set; } + public Error? Error { get; set; } + public IEnumerable Logs { get; set; } = Enumerable.Empty(); +} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulatePayload.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulatePayload.cs new file mode 100644 index 00000000000..ad81f77158e --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/SimulatePayload.cs @@ -0,0 +1,30 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; + +namespace Nethermind.Facade.Proxy.Models.Simulate; + +public class SimulatePayload +{ + /// + /// Definition of blocks that can contain calls and overrides + /// + public List>? BlockStateCalls { get; set; } + + /// + /// Should trace ETH Transfers + /// + public bool TraceTransfers { get; set; } = false; + + /// + /// When true, the simulate does all validations that a normal EVM would do, except contract sender and signature + /// checks. When false, multicall behaves like eth_call. + /// + public bool Validation { get; set; } = false; + + /// + /// When true, the simulate returns Full Tx Objects + /// + public bool ReturnFullTransactionObjects { get; set; } = false; +} diff --git a/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/TransactionWithSourceDetails.cs b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/TransactionWithSourceDetails.cs new file mode 100644 index 00000000000..b3fed70ba7c --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Proxy/Models/Simulate/TransactionWithSourceDetails.cs @@ -0,0 +1,13 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; + +namespace Nethermind.Facade.Proxy.Models.Simulate; + +public class TransactionWithSourceDetails +{ + public bool HadGasLimitInRequest; + public bool HadNonceInRequest; + public Transaction Transaction { get; set; } +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateBlockTracer.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateBlockTracer.cs new file mode 100644 index 00000000000..c6ab396eedc --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateBlockTracer.cs @@ -0,0 +1,60 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Linq; +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Facade.Proxy.Models.Simulate; +using Nethermind.Int256; + +namespace Nethermind.Facade.Simulate; + +public class SimulateBlockTracer(bool isTracingLogs, bool includeFullTxData, ISpecProvider spec) : BlockTracer +{ + private readonly List _txTracers = new(); + + private Block _currentBlock = null!; + public List Results { get; } = new(); + + public override void StartNewBlockTrace(Block block) + { + _txTracers.Clear(); + _currentBlock = block; + } + + public override ITxTracer StartNewTxTrace(Transaction? tx) + { + + if (tx?.Hash is not null) + { + ulong txIndex = (ulong)_txTracers.Count; + SimulateTxMutatorTracer result = new(isTracingLogs, tx.Hash, (ulong)_currentBlock.Number, + _currentBlock.Hash, txIndex); + _txTracers.Add(result); + return result; + } + + return NullTxTracer.Instance; + } + + public override void EndBlockTrace() + { + SimulateBlockResult? result = new(_currentBlock, includeFullTxData, spec) + { + Calls = _txTracers.Select(t => t.TraceResult).ToList(), + }; + if (_currentBlock.Header.ExcessBlobGas is not null) + { + if (!BlobGasCalculator.TryCalculateBlobGasPricePerUnit(_currentBlock.Header.ExcessBlobGas.Value, + out UInt256 blobGasPricePerUnit)) + { + result.BlobBaseFee = blobGasPricePerUnit; + } + } + + Results.Add(result); + } +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateBlockhashProvider.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateBlockhashProvider.cs new file mode 100644 index 00000000000..8f054a809ca --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateBlockhashProvider.cs @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Blockchain; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Evm; + +namespace Nethermind.Facade.Simulate; + +public sealed class SimulateBlockhashProvider(IBlockhashProvider blockhashProvider, IBlockTree blockTree) + : IBlockhashProvider +{ + public Hash256? GetBlockhash(BlockHeader currentBlock, in long number) + { + long bestKnown = blockTree.BestKnownNumber; + return bestKnown < number && blockTree.BestSuggestedHeader is not null + ? blockhashProvider.GetBlockhash(blockTree.BestSuggestedHeader!, in bestKnown) + : blockhashProvider.GetBlockhash(currentBlock, in number); + } +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateBridgeHelper.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateBridgeHelper.cs new file mode 100644 index 00000000000..4993b53ec6e --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateBridgeHelper.cs @@ -0,0 +1,285 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.InteropServices; +using Nethermind.Blockchain; +using Nethermind.Config; +using Nethermind.Consensus.Processing; +using Nethermind.Core; +using Nethermind.Core.Collections; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Facade.Proxy.Models.Simulate; +using Nethermind.Int256; +using Nethermind.State; +using Transaction = Nethermind.Core.Transaction; + +namespace Nethermind.Facade.Simulate; + +public class SimulateBridgeHelper(SimulateReadOnlyBlocksProcessingEnvFactory simulateProcessingEnvFactory, IBlocksConfig blocksConfig) +{ + private const ProcessingOptions SimulateProcessingOptions = + ProcessingOptions.ForceProcessing + | ProcessingOptions.IgnoreParentNotOnMainChain + | ProcessingOptions.MarkAsProcessed + | ProcessingOptions.StoreReceipts; + + private void PrepareState(BlockHeader blockHeader, + BlockHeader parent, + BlockStateCall blockStateCall, + IWorldState stateProvider, + OverridableCodeInfoRepository codeInfoRepository, + IReleaseSpec releaseSpec) + { + stateProvider.StateRoot = parent.StateRoot!; + stateProvider.ApplyStateOverrides(codeInfoRepository, blockStateCall.StateOverrides, releaseSpec, blockHeader.Number); + + IEnumerable
senders = blockStateCall.Calls?.Select(details => details.Transaction.SenderAddress) ?? Enumerable.Empty(); + IEnumerable
targets = blockStateCall.Calls?.Select(details => details.Transaction.To!) ?? Enumerable.Empty(); + foreach (Address address in senders.Union(targets).Where(t => t is not null)) + { + stateProvider.CreateAccountIfNotExists(address, 0, 1); + } + + stateProvider.Commit(releaseSpec); + stateProvider.CommitTree(blockHeader.Number - 1); + stateProvider.RecalculateStateRoot(); + + blockHeader.StateRoot = stateProvider.StateRoot; + } + + public bool TrySimulate( + BlockHeader parent, + SimulatePayload payload, + IBlockTracer tracer, + [NotNullWhen(false)] out string? error) => + TrySimulate(parent, payload, tracer, simulateProcessingEnvFactory.Create(payload.Validation), out error); + + + private bool TrySimulate( + BlockHeader parent, + SimulatePayload payload, + IBlockTracer tracer, + SimulateReadOnlyBlocksProcessingEnv env, + [NotNullWhen(false)] out string? error) + { + IBlockTree blockTree = env.BlockTree; + IWorldState stateProvider = env.WorldState; + parent = GetParent(parent, payload, blockTree); + IReleaseSpec spec = env.SpecProvider.GetSpec(parent); + + if (payload.BlockStateCalls is not null) + { + Dictionary nonceCache = new(); + List suggestedBlocks = [null]; + + foreach (BlockStateCall blockCall in payload.BlockStateCalls) + { + nonceCache.Clear(); + BlockHeader callHeader = GetCallHeader(blockCall, parent, payload.Validation, spec); //currentSpec is still parent spec + spec = env.SpecProvider.GetSpec(callHeader); + PrepareState(callHeader, parent, blockCall, env.WorldState, env.CodeInfoRepository, spec); + + if (blockCall.BlockOverrides is { BaseFeePerGas: not null }) + { + callHeader.BaseFeePerGas = blockCall.BlockOverrides.BaseFeePerGas.Value; + } + else if (!payload.Validation) + { + callHeader.BaseFeePerGas = 0; + } + callHeader.Hash = callHeader.CalculateHash(); + + Transaction[] transactions = CreateTransactions(payload, blockCall, callHeader, stateProvider, nonceCache); + if (!TryGetBlock(payload, env, callHeader, transactions, out Block currentBlock, out error)) + { + return false; + } + + ProcessingOptions processingFlags = SimulateProcessingOptions; + + if (!payload.Validation) + { + processingFlags |= ProcessingOptions.NoValidation; + } + + suggestedBlocks[0] = currentBlock; + + IBlockProcessor processor = env.GetProcessor(payload.Validation); + Block processedBlock = + processor.Process(stateProvider.StateRoot, suggestedBlocks, processingFlags, tracer)[0]; + + FinalizeStateAndBlock(stateProvider, processedBlock, spec, currentBlock, blockTree); + parent = processedBlock.Header; + } + } + + error = null; + return true; + } + + private static void FinalizeStateAndBlock(IWorldState stateProvider, Block processedBlock, IReleaseSpec currentSpec, Block currentBlock, IBlockTree blockTree) + { + stateProvider.StateRoot = processedBlock.StateRoot!; + stateProvider.Commit(currentSpec); + stateProvider.CommitTree(currentBlock.Number); + blockTree.SuggestBlock(processedBlock, BlockTreeSuggestOptions.ForceSetAsMain); + blockTree.UpdateHeadBlock(processedBlock.Hash!); + } + + private static BlockHeader GetParent(BlockHeader parent, SimulatePayload payload, IBlockTree blockTree) + { + Block? latestBlock = blockTree.FindLatestBlock(); + long latestBlockNumber = latestBlock?.Number ?? 0; + + if (latestBlockNumber < parent.Number) + { + parent = latestBlock?.Header ?? blockTree.Head!.Header; + } + + BlockStateCall? firstBlock = payload.BlockStateCalls?.FirstOrDefault(); + + ulong lastKnown = (ulong)latestBlockNumber; + if (firstBlock?.BlockOverrides?.Number > 0 && firstBlock.BlockOverrides?.Number < lastKnown) + { + Block? searchResult = blockTree.FindBlock((long)firstBlock.BlockOverrides.Number); + if (searchResult is not null) + { + parent = searchResult.Header; + } + } + + return parent; + } + + private static bool TryGetBlock( + SimulatePayload payload, + SimulateReadOnlyBlocksProcessingEnv env, + BlockHeader callHeader, + Transaction[] transactions, + out Block currentBlock, + [NotNullWhen(false)] out string? error) + { + IWorldState stateProvider = env.WorldState; + Snapshot shoot = stateProvider.TakeSnapshot(); + currentBlock = new Block(callHeader); + LinkedHashSet testedTxs = new(); + for (int index = 0; index < transactions.Length; index++) + { + Transaction transaction = transactions[index]; + BlockProcessor.AddingTxEventArgs? args = env.BlockTransactionPicker.CanAddTransaction(currentBlock, transaction, testedTxs, stateProvider); + + if (args.Action is BlockProcessor.TxAction.Stop or BlockProcessor.TxAction.Skip && payload.Validation) + { + error = $"invalid transaction index: {index} at block number: {callHeader.Number}, Reason: {args.Reason}"; + return false; + } + + stateProvider.IncrementNonce(transaction.SenderAddress!); + testedTxs.Add(transaction); + } + + stateProvider.Restore(shoot); + stateProvider.RecalculateStateRoot(); + + currentBlock = currentBlock.WithReplacedBody(currentBlock.Body.WithChangedTransactions(testedTxs.ToArray())); + error = null; + return true; + } + + private Transaction[] CreateTransactions(SimulatePayload payload, + BlockStateCall callInputBlock, + BlockHeader callHeader, + IWorldState stateProvider, + Dictionary nonceCache) + { + int notSpecifiedGasTxsCount = callInputBlock.Calls?.Count(details => !details.HadGasLimitInRequest) ?? 0; + long gasSpecified = callInputBlock.Calls?.Where(details => details.HadGasLimitInRequest).Sum(details => details.Transaction.GasLimit) ?? 0; + if (notSpecifiedGasTxsCount > 0) + { + long gasPerTx = callHeader.GasLimit - gasSpecified / notSpecifiedGasTxsCount; + IEnumerable notSpecifiedGasTxs = callInputBlock.Calls?.Where(details => !details.HadGasLimitInRequest) ?? Enumerable.Empty(); + foreach (TransactionWithSourceDetails call in notSpecifiedGasTxs) + { + call.Transaction.GasLimit = gasPerTx; + } + } + + return callInputBlock.Calls?.Select(t => CreateTransaction(t, callHeader, stateProvider, nonceCache, payload.Validation)).ToArray() ?? Array.Empty(); + } + + private Transaction CreateTransaction(TransactionWithSourceDetails transactionDetails, + BlockHeader callHeader, + IWorldState stateProvider, + Dictionary nonceCache, + bool validate) + { + Transaction? transaction = transactionDetails.Transaction; + transaction.SenderAddress ??= Address.Zero; + transaction.To ??= Address.Zero; + transaction.Data ??= Memory.Empty; + + if (!transactionDetails.HadNonceInRequest) + { + ref UInt256 cachedNonce = ref CollectionsMarshal.GetValueRefOrAddDefault(nonceCache, transaction.SenderAddress, out bool exist); + if (!exist) + { + if (stateProvider.TryGetAccount(transaction.SenderAddress, out AccountStruct test)) + { + cachedNonce = test.Nonce; + } + // else // Todo think if we shall create account here + } + else + { + cachedNonce++; + } + + transaction.Nonce = cachedNonce; + } + + if (validate) + { + if (transaction.GasPrice == 0) + { + transaction.GasPrice = callHeader.BaseFeePerGas; + } + + if (transaction.Type == TxType.EIP1559 && transaction.DecodedMaxFeePerGas == 0) + { + transaction.DecodedMaxFeePerGas = transaction.GasPrice == 0 + ? callHeader.BaseFeePerGas + 1 + : transaction.GasPrice; + } + } + + transaction.Hash ??= transaction.CalculateHash(); + + return transaction; + } + + private BlockHeader GetCallHeader(BlockStateCall block, BlockHeader parent, bool payloadValidation, IReleaseSpec parentSpec) => + block.BlockOverrides is not null + ? block.BlockOverrides.GetBlockHeader(parent, blocksConfig, parentSpec) + : new BlockHeader( + parent.Hash!, + Keccak.OfAnEmptySequenceRlp, + Address.Zero, + UInt256.Zero, + parent.Number + 1, + parent.GasLimit, + parent.Timestamp + 1, + Array.Empty()) + { + BaseFeePerGas = !payloadValidation ? 0 : BaseFeeCalculator.Calculate(parent, parentSpec), + MixHash = parent.MixHash, + IsPostMerge = parent.Difficulty == 0 + }; +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateDictionaryBlockStore.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateDictionaryBlockStore.cs new file mode 100644 index 00000000000..4b76d9bcdb5 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateDictionaryBlockStore.cs @@ -0,0 +1,94 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Nethermind.Blockchain.Blocks; +using Nethermind.Core; +using Nethermind.Core.Buffers; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Serialization.Rlp; + +namespace Nethermind.Facade.Simulate; + +public class SimulateDictionaryBlockStore(IBlockStore readonlyBaseBlockStore) : IBlockStore +{ + private readonly Dictionary _blockDict = new(); + private readonly Dictionary _blockNumDict = new(); + private readonly Dictionary _metadataDict = new(Bytes.EqualityComparer); + private readonly BlockDecoder _blockDecoder = new(); + + public void Insert(Block block, WriteFlags writeFlags = WriteFlags.None) + { + _blockDict[block.Hash] = block; + _blockNumDict[block.Number] = block; + } + + public void Delete(long blockNumber, Hash256 blockHash) + { + _blockDict.Remove(blockHash); + _blockNumDict.Remove(blockNumber); + } + + public Block? Get(long blockNumber, Hash256 blockHash, RlpBehaviors rlpBehaviors = RlpBehaviors.None, bool shouldCache = true) + { + if (_blockNumDict.TryGetValue(blockNumber, out Block block)) + { + return block; + } + + block = readonlyBaseBlockStore.Get(blockNumber, blockHash, rlpBehaviors, false); + if (block is not null && shouldCache) + { + Cache(block); + } + return block; + } + + public byte[]? GetRaw(long blockNumber, Hash256 blockHash) + { + if (_blockNumDict.TryGetValue(blockNumber, out Block block)) + { + using NettyRlpStream newRlp = _blockDecoder.EncodeToNewNettyStream(block); + return newRlp.AsSpan().ToArray(); + } + return readonlyBaseBlockStore.GetRaw(blockNumber, blockHash); + } + + public IEnumerable GetAll() + { + var allBlocks = new HashSet(readonlyBaseBlockStore.GetAll()); + foreach (Block block in _blockDict.Values) + { + allBlocks.Add(block); + } + return allBlocks; + } + + public ReceiptRecoveryBlock? GetReceiptRecoveryBlock(long blockNumber, Hash256 blockHash) + { + if (_blockNumDict.TryGetValue(blockNumber, out Block block)) + { + using NettyRlpStream newRlp = _blockDecoder.EncodeToNewNettyStream(block); + using var memoryManager = new CappedArrayMemoryManager(newRlp.Data); + return BlockDecoder.DecodeToReceiptRecoveryBlock(memoryManager, memoryManager.Memory, RlpBehaviors.None); + } + return readonlyBaseBlockStore.GetReceiptRecoveryBlock(blockNumber, blockHash); + } + + public void Cache(Block block) + { + Insert(block); + } + + public void SetMetadata(byte[] key, byte[] value) + { + _metadataDict[key] = value; + readonlyBaseBlockStore.SetMetadata(key, value); + } + + public byte[]? GetMetadata(byte[] key) + { + return _metadataDict.TryGetValue(key, out var value) ? value : readonlyBaseBlockStore.GetMetadata(key); + } +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateDictionaryHeaderStore.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateDictionaryHeaderStore.cs new file mode 100644 index 00000000000..715df65eabb --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateDictionaryHeaderStore.cs @@ -0,0 +1,72 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Nethermind.Blockchain.Headers; +using Nethermind.Core; +using Nethermind.Core.Crypto; + +namespace Nethermind.Facade.Simulate; + +/// +/// This type is needed for two things: +/// - Bypass issue of networking compatibility and RLPs not supporting BaseFeePerGas of 0 +/// - Improve performance to get faster local caching without re-encoding of data in Simulate blocks +/// +/// +public class SimulateDictionaryHeaderStore(IHeaderStore readonlyBaseHeaderStore) : IHeaderStore +{ + private readonly Dictionary _headerDict = new(); + private readonly Dictionary _blockNumberDict = new(); + + public void Insert(BlockHeader header) + { + _headerDict[header.Hash] = header; + InsertBlockNumber(header.Hash, header.Number); + } + + public BlockHeader? Get(Hash256 blockHash, bool shouldCache = false, long? blockNumber = null) + { + if (blockNumber is null) + { + blockNumber = GetBlockNumber(blockHash); + } + + if (blockNumber.HasValue && _headerDict.TryGetValue(blockHash, out BlockHeader? header)) + { + if (shouldCache) + { + Cache(header); + } + return header; + } + + header = readonlyBaseHeaderStore.Get(blockHash, false, blockNumber); + if (header is not null && shouldCache) + { + Cache(header); + } + return header; + } + + public void Cache(BlockHeader header) + { + Insert(header); + } + + public void Delete(Hash256 blockHash) + { + _headerDict.Remove(blockHash); + _blockNumberDict.Remove(blockHash); + } + + public void InsertBlockNumber(Hash256 blockHash, long blockNumber) + { + _blockNumberDict[blockHash] = blockNumber; + } + + public long? GetBlockNumber(Hash256 blockHash) + { + return _blockNumberDict.TryGetValue(blockHash, out var blockNumber) ? blockNumber : readonlyBaseHeaderStore.GetBlockNumber(blockHash); + } +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateOutput.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateOutput.cs new file mode 100644 index 00000000000..939de8f3021 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateOutput.cs @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Nethermind.Facade.Proxy.Models.Simulate; + +namespace Nethermind.Facade.Simulate; + +public class SimulateOutput +{ + + public string? Error { get; set; } + public int? ErrorCode { get; set; } + + public IReadOnlyList Items { get; set; } +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs new file mode 100644 index 00000000000..8d152eb201d --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs @@ -0,0 +1,117 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Blockchain; +using Nethermind.Blockchain.Blocks; +using Nethermind.Blockchain.Receipts; +using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Rewards; +using Nethermind.Consensus.Validators; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Db; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Logging; +using Nethermind.State; +using static Nethermind.Consensus.Processing.BlockProcessor; + +namespace Nethermind.Facade.Simulate; + +public class SimulateBlockValidationTransactionsExecutor : BlockValidationTransactionsExecutor +{ + public SimulateBlockValidationTransactionsExecutor(ITransactionProcessor transactionProcessor, IWorldState stateProvider) : base(transactionProcessor, stateProvider) + { + } + + public SimulateBlockValidationTransactionsExecutor(ITransactionProcessorAdapter transactionProcessor, IWorldState stateProvider) : base(transactionProcessor, stateProvider) + { + } + + protected override void ProcessTransaction(in BlockExecutionContext blkCtx, Transaction currentTx, int index, + BlockReceiptsTracer receiptsTracer, ProcessingOptions processingOptions) + { + processingOptions |= ProcessingOptions.ForceProcessing | ProcessingOptions.DoNotVerifyNonce | ProcessingOptions.NoValidation; + base.ProcessTransaction(in blkCtx, currentTx, index, receiptsTracer, processingOptions); + } +} + +public class SimulateReadOnlyBlocksProcessingEnv : ReadOnlyTxProcessingEnvBase, IDisposable +{ + private readonly IBlockValidator _blockValidator; + private readonly ILogManager? _logManager; + private readonly TransactionProcessor _transactionProcessor; + public IWorldState WorldState => StateProvider; + + public SimulateReadOnlyBlocksProcessingEnv( + IWorldStateManager worldStateManager, + IReadOnlyBlockTree baseBlockTree, + IReadOnlyDbProvider readOnlyDbProvider, + IBlockTree blockTree, + ISpecProvider specProvider, + ILogManager? logManager = null, + bool validate = false) + : base(worldStateManager, blockTree, specProvider, logManager) + { + ReadOnlyBlockTree = baseBlockTree; + DbProvider = readOnlyDbProvider; + WorldStateManager = worldStateManager; + _logManager = logManager; + + BlockTree = new BlockTreeOverlay(ReadOnlyBlockTree, blockTree); + BlockhashProvider = new SimulateBlockhashProvider(new BlockhashProvider(BlockTree, specProvider, StateProvider, logManager), BlockTree); + StateProvider = WorldStateManager.GlobalWorldState; + StateReader = WorldStateManager.GlobalStateReader; + CodeInfoRepository = new OverridableCodeInfoRepository(new CodeInfoRepository()); + VirtualMachine = new SimulateVirtualMachine(new VirtualMachine(BlockhashProvider, specProvider, CodeInfoRepository, logManager)); + _transactionProcessor = new SimulateTransactionProcessor(SpecProvider, StateProvider, VirtualMachine, CodeInfoRepository, _logManager, validate); + _blockValidator = CreateValidator(); + BlockTransactionPicker = new BlockProductionTransactionPicker(specProvider, true); + } + + public IWorldStateManager WorldStateManager { get; } + public IVirtualMachine VirtualMachine { get; } + public IReadOnlyDbProvider DbProvider { get; } + public IReadOnlyBlockTree ReadOnlyBlockTree { get; set; } + public OverridableCodeInfoRepository CodeInfoRepository { get; } + public BlockProductionTransactionPicker BlockTransactionPicker { get; } + + public void Dispose() + { + DbProvider.Dispose(); + } + + private SimulateBlockValidatorProxy CreateValidator() + { + HeaderValidator headerValidator = new( + BlockTree, + Always.Valid, + SpecProvider, + _logManager); + + BlockValidator blockValidator = new( + new TxValidator(SpecProvider!.ChainId), + headerValidator, + Always.Valid, + SpecProvider, + _logManager); + + return new SimulateBlockValidatorProxy(blockValidator); + } + + public IBlockProcessor GetProcessor(bool validate) => + new BlockProcessor(SpecProvider, + _blockValidator, + NoBlockRewards.Instance, + validate + ? new BlockValidationTransactionsExecutor(_transactionProcessor, StateProvider) + : new SimulateBlockValidationTransactionsExecutor(_transactionProcessor, StateProvider), + StateProvider, + NullReceiptStorage.Instance, + new BlockhashStore(BlockTree, SpecProvider, StateProvider), + _transactionProcessor, + _logManager); +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnvFactory.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnvFactory.cs new file mode 100644 index 00000000000..99078525673 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnvFactory.cs @@ -0,0 +1,63 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Blockchain; +using Nethermind.Blockchain.Blocks; +using Nethermind.Blockchain.Headers; +using Nethermind.Blockchain.Synchronization; +using Nethermind.Core.Specs; +using Nethermind.Db; +using Nethermind.Db.Blooms; +using Nethermind.Logging; +using Nethermind.State; +using Nethermind.State.Repositories; +using Nethermind.Trie.Pruning; + +namespace Nethermind.Facade.Simulate; + +public class SimulateReadOnlyBlocksProcessingEnvFactory( + IWorldStateManager worldStateManager, + IReadOnlyBlockTree baseBlockTree, + IDbProvider dbProvider, + ISpecProvider specProvider, + ILogManager? logManager = null) +{ + public SimulateReadOnlyBlocksProcessingEnv Create(bool validate) + { + IReadOnlyDbProvider editableDbProvider = new ReadOnlyDbProvider(dbProvider, true); + OverlayTrieStore overlayTrieStore = new(editableDbProvider.StateDb, worldStateManager.TrieStore, logManager); + OverlayWorldStateManager overlayWorldStateManager = new(editableDbProvider, overlayTrieStore, logManager); + BlockTree tempBlockTree = CreateTempBlockTree(editableDbProvider, specProvider, logManager, editableDbProvider); + + return new SimulateReadOnlyBlocksProcessingEnv( + overlayWorldStateManager, + baseBlockTree, + editableDbProvider, + tempBlockTree, + specProvider, + logManager, + validate); + } + + private static BlockTree CreateTempBlockTree(IReadOnlyDbProvider readOnlyDbProvider, ISpecProvider? specProvider, ILogManager? logManager, IReadOnlyDbProvider editableDbProvider) + { + IBlockStore mainblockStore = new BlockStore(editableDbProvider.BlocksDb); + IHeaderStore mainHeaderStore = new HeaderStore(editableDbProvider.HeadersDb, editableDbProvider.BlockNumbersDb); + SimulateDictionaryHeaderStore tmpHeaderStore = new(mainHeaderStore); + const int badBlocksStored = 1; + + SimulateDictionaryBlockStore tmpBlockStore = new(mainblockStore); + IBlockStore badBlockStore = new BlockStore(editableDbProvider.BadBlocksDb, badBlocksStored); + + return new(tmpBlockStore, + tmpHeaderStore, + editableDbProvider.BlockInfosDb, + editableDbProvider.MetadataDb, + badBlockStore, + new ChainLevelInfoRepository(readOnlyDbProvider.BlockInfosDb), + specProvider, + NullBloomStorage.Instance, + new SyncConfig(), + logManager); + } +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateTransactionProcessor.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateTransactionProcessor.cs new file mode 100644 index 00000000000..79499458247 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateTransactionProcessor.cs @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Logging; +using Nethermind.State; + +namespace Nethermind.Facade.Simulate; + +public class SimulateTransactionProcessor( + ISpecProvider? specProvider, + IWorldState? worldState, + IVirtualMachine? virtualMachine, + ICodeInfoRepository? codeInfoRepository, + ILogManager? logManager, + bool validate) + : TransactionProcessor(specProvider, worldState, virtualMachine, codeInfoRepository, logManager), ITransactionProcessor +{ + protected override TransactionResult Execute(Transaction tx, in BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) + { + if (!validate) + { + opts |= ExecutionOptions.NoValidation; + } + + return base.Execute(tx, in blCtx, tracer, opts); + } +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateTxMutatorTracer.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateTxMutatorTracer.cs new file mode 100644 index 00000000000..4234b78edf9 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateTxMutatorTracer.cs @@ -0,0 +1,97 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using Nethermind.Abi; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Facade.Proxy.Models.Simulate; +using Nethermind.Int256; +using Log = Nethermind.Facade.Proxy.Models.Simulate.Log; + +namespace Nethermind.Facade.Simulate; + +internal sealed class SimulateTxMutatorTracer : TxTracer, ITxLogsMutator +{ + public const int ExecutionError = -32015; + + private static readonly Hash256 transferSignature = + new AbiSignature("Transfer", AbiType.Address, AbiType.Address, AbiType.UInt256).Hash; + + private static readonly Address Erc20Sender = new("0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); + private readonly Hash256 _currentBlockHash; + private readonly ulong _currentBlockNumber; + private readonly Hash256 _txHash; + private readonly ulong _txIndex; + private ICollection? _logsToMutate; + + public SimulateTxMutatorTracer(bool isTracingTransfers, Hash256 txHash, ulong currentBlockNumber, Hash256 currentBlockHash, + ulong txIndex) + { + _txHash = txHash; + _currentBlockNumber = currentBlockNumber; + _currentBlockHash = currentBlockHash; + _txIndex = txIndex; + IsTracingReceipt = true; + IsTracingActions = IsMutatingLogs = isTracingTransfers; + } + + public SimulateCallResult? TraceResult { get; set; } + + public bool IsMutatingLogs { get; } + + public void SetLogsToMutate(ICollection logsToMutate) => _logsToMutate = logsToMutate; + + public override void ReportAction(long gas, UInt256 value, Address from, Address to, ReadOnlyMemory input, ExecutionType callType, bool isPrecompileCall = false) + { + base.ReportAction(gas, value, from, to, input, callType, isPrecompileCall); + if (value > UInt256.Zero) + { + var data = AbiEncoder.Instance.Encode(AbiEncodingStyle.Packed, new AbiSignature("", AbiType.UInt256), + value); + _logsToMutate?.Add(new LogEntry(Erc20Sender, data, [transferSignature, from.ToHash(), to.ToHash()])); + } + } + + public override void MarkAsSuccess(Address recipient, long gasSpent, byte[] output, LogEntry[] logs, + Hash256? stateRoot = null) + { + TraceResult = new SimulateCallResult + { + GasUsed = (ulong)gasSpent, + ReturnData = output, + Status = StatusCode.Success, + Logs = logs.Select((entry, i) => new Log + { + Address = entry.LoggersAddress, + Topics = entry.Topics, + Data = entry.Data, + LogIndex = (ulong)i, + TransactionHash = _txHash, + TransactionIndex = _txIndex, + BlockHash = _currentBlockHash, + BlockNumber = _currentBlockNumber + }).ToList() + }; + } + + public override void MarkAsFailed(Address recipient, long gasSpent, byte[] output, string error, + Hash256? stateRoot = null) + { + TraceResult = new SimulateCallResult + { + GasUsed = (ulong)gasSpent, + Error = new Error + { + Code = ExecutionError, // revert error code stub + Message = error + }, + ReturnData = null, + Status = StatusCode.Failure + }; + } +} diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateVirtualMachine.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateVirtualMachine.cs new file mode 100644 index 00000000000..5ea81093e80 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateVirtualMachine.cs @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Diagnostics.CodeAnalysis; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.State; + +namespace Nethermind.Facade.Simulate; + +public class SimulateVirtualMachine(IVirtualMachine virtualMachine) : IVirtualMachine +{ + public TransactionSubstate Run(EvmState state, IWorldState worldState, ITxTracer txTracer) where TTracingActions : struct, VirtualMachine.IIsTracing + { + if (typeof(TTracingActions) == typeof(VirtualMachine.IsTracing) && TryGetLogsMutator(txTracer, out ITxLogsMutator logsMutator)) + { + logsMutator.SetLogsToMutate(state.Logs); + } + + return virtualMachine.Run(state, worldState, txTracer); + } + + private static bool TryGetLogsMutator(ITxTracer txTracer, [NotNullWhen(true)] out ITxLogsMutator? txLogsMutator) + { + switch (txTracer) + { + case ITxLogsMutator { IsMutatingLogs: true } logsMutator: + txLogsMutator = logsMutator; + return true; + case ITxTracerWrapper txTracerWrapper: + return TryGetLogsMutator(txTracerWrapper.InnerTracer, out txLogsMutator); + default: + txLogsMutator = null; + return false; + } + } +} diff --git a/src/Nethermind/Nethermind.Facade/StateOverridesExtensions.cs b/src/Nethermind/Nethermind.Facade/StateOverridesExtensions.cs new file mode 100644 index 00000000000..080e6c2a81b --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/StateOverridesExtensions.cs @@ -0,0 +1,132 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Evm.CodeAnalysis; +using Nethermind.Facade.Proxy.Models; +using Nethermind.Int256; +using Nethermind.State; +using Nethermind.Trie; + +namespace Nethermind.Facade; + +public static class StateOverridesExtensions +{ + public static void ApplyStateOverrides( + this IWorldState state, + OverridableCodeInfoRepository overridableCodeInfoRepository, + Dictionary? overrides, + IReleaseSpec spec, + long blockNumber) + { + if (overrides is not null) + { + foreach ((Address address, AccountOverride accountOverride) in overrides) + { + if (!state.TryGetAccount(address, out AccountStruct account)) + { + state.CreateAccount(address, accountOverride.Balance ?? UInt256.Zero, accountOverride.Nonce ?? UInt256.Zero); + } + else + { + state.UpdateBalance(spec, account, accountOverride, address); + state.UpdateNonce(account, accountOverride, address); + } + + state.UpdateCode(overridableCodeInfoRepository, spec, accountOverride, address); + state.UpdateState(accountOverride, address); + } + } + + state.Commit(spec); + state.CommitTree(blockNumber); + state.RecalculateStateRoot(); + } + + private static void UpdateState(this IWorldState stateProvider, AccountOverride accountOverride, Address address) + { + void ApplyState(Dictionary diff) + { + foreach ((UInt256 index, Hash256 value) in diff) + { + stateProvider.Set(new StorageCell(address, index), value.Bytes.WithoutLeadingZeros().ToArray()); + } + } + + if (accountOverride.State is not null) + { + stateProvider.ClearStorage(address); + ApplyState(accountOverride.State); + } + else if (accountOverride.StateDiff is not null) + { + ApplyState(accountOverride.StateDiff); + } + } + + private static void UpdateCode( + this IWorldState stateProvider, + OverridableCodeInfoRepository overridableCodeInfoRepository, + IReleaseSpec currentSpec, + AccountOverride accountOverride, + Address address) + { + if (accountOverride.Code is not null) + { + overridableCodeInfoRepository.SetCodeOverwrite( + stateProvider, + currentSpec, + address, + new CodeInfo(accountOverride.Code), + accountOverride.MovePrecompileToAddress); + } + } + + private static void UpdateNonce( + this IWorldState stateProvider, + in AccountStruct account, + AccountOverride accountOverride, + Address address) + { + if (accountOverride.Nonce is not null) + { + UInt256 nonce = account.Nonce; + UInt256 newNonce = accountOverride.Nonce.Value; + if (nonce > newNonce) + { + stateProvider.DecrementNonce(address, nonce - newNonce); + } + else if (nonce < accountOverride.Nonce) + { + stateProvider.IncrementNonce(address, newNonce - nonce); + } + } + } + + private static void UpdateBalance( + this IWorldState stateProvider, + IReleaseSpec spec, + in AccountStruct account, + AccountOverride accountOverride, + Address address) + { + if (accountOverride.Balance is not null) + { + UInt256 balance = account.Balance; + UInt256 newBalance = accountOverride.Balance.Value; + if (balance > newBalance) + { + stateProvider.SubtractFromBalance(address, balance - newBalance, spec); + } + else if (balance < newBalance) + { + stateProvider.AddToBalance(address, newBalance - balance, spec); + } + } + } +} diff --git a/src/Nethermind/Nethermind.HealthChecks.Test/NodeHealthServiceTests.cs b/src/Nethermind/Nethermind.HealthChecks.Test/NodeHealthServiceTests.cs index 93bd1a17196..c3336e8370a 100644 --- a/src/Nethermind/Nethermind.HealthChecks.Test/NodeHealthServiceTests.cs +++ b/src/Nethermind/Nethermind.HealthChecks.Test/NodeHealthServiceTests.cs @@ -38,13 +38,13 @@ public void CheckHealth_returns_expected_results([ValueSource(nameof(CheckHealth ISyncServer syncServer = Substitute.For(); IReceiptStorage receiptStorage = Substitute.For(); IBlockchainProcessor blockchainProcessor = Substitute.For(); - IBlockProducer blockProducer = Substitute.For(); + IBlockProducerRunner blockProducerRunner = Substitute.For(); ISyncConfig syncConfig = Substitute.For(); IHealthHintService healthHintService = Substitute.For(); INethermindApi api = Substitute.For(); api.SpecProvider = Substitute.For(); blockchainProcessor.IsProcessingBlocks(Arg.Any()).Returns(test.IsProcessingBlocks); - blockProducer.IsProducingBlocks(Arg.Any()).Returns(test.IsProducingBlocks); + blockProducerRunner.IsProducingBlocks(Arg.Any()).Returns(test.IsProducingBlocks); syncServer.GetPeerCount().Returns(test.PeerCount); IDriveInfo drive = Substitute.For(); @@ -65,7 +65,7 @@ public void CheckHealth_returns_expected_results([ValueSource(nameof(CheckHealth IEthSyncingInfo ethSyncingInfo = new EthSyncingInfo(blockFinder, receiptStorage, syncConfig, Substitute.For(), Substitute.For(), LimboLogs.Instance); NodeHealthService nodeHealthService = - new(syncServer, blockchainProcessor, blockProducer, new HealthChecksConfig(), + new(syncServer, blockchainProcessor, blockProducerRunner, new HealthChecksConfig(), healthHintService, ethSyncingInfo, new EngineRpcCapabilitiesProvider(api.SpecProvider), api, new[] { drive }, test.IsMining); CheckHealthResult result = nodeHealthService.CheckHealth(); Assert.That(result.Healthy, Is.EqualTo(test.ExpectedHealthy)); @@ -84,7 +84,7 @@ public void post_merge_health_checks([ValueSource(nameof(CheckHealthPostMergeTes IBlockTree blockFinder = Substitute.For(); ISyncServer syncServer = Substitute.For(); IBlockchainProcessor blockchainProcessor = Substitute.For(); - IBlockProducer blockProducer = Substitute.For(); + IBlockProducerRunner blockProducerRunner = Substitute.For(); IHealthHintService healthHintService = Substitute.For(); ISyncModeSelector syncModeSelector = new StaticSelector(test.SyncMode); INethermindApi api = Substitute.For(); @@ -133,7 +133,7 @@ public void post_merge_health_checks([ValueSource(nameof(CheckHealthPostMergeTes IEthSyncingInfo ethSyncingInfo = new EthSyncingInfo(blockFinder, new InMemoryReceiptStorage(), new SyncConfig(), syncModeSelector, Substitute.For(), new TestLogManager()); NodeHealthService nodeHealthService = - new(syncServer, blockchainProcessor, blockProducer, new HealthChecksConfig(), + new(syncServer, blockchainProcessor, blockProducerRunner, new HealthChecksConfig(), healthHintService, ethSyncingInfo, customProvider, api, new[] { drive }, false); nodeHealthService.CheckHealth(); diff --git a/src/Nethermind/Nethermind.HealthChecks/HealthChecksPlugin.cs b/src/Nethermind/Nethermind.HealthChecks/HealthChecksPlugin.cs index 3b4478eb748..e56363a30e3 100644 --- a/src/Nethermind/Nethermind.HealthChecks/HealthChecksPlugin.cs +++ b/src/Nethermind/Nethermind.HealthChecks/HealthChecksPlugin.cs @@ -119,10 +119,6 @@ public void AddServices(IServiceCollection service) .AddInMemoryStorage(); } } - public Task InitNetworkProtocol() - { - return Task.CompletedTask; - } public Task InitRpcModules() { @@ -142,7 +138,7 @@ public Task InitRpcModules() } _nodeHealthService = new NodeHealthService(_api.SyncServer, - _api.BlockchainProcessor!, _api.BlockProducer!, _healthChecksConfig, _api.HealthHintService!, + _api.BlockchainProcessor!, _api.BlockProducerRunner!, _healthChecksConfig, _api.HealthHintService!, _api.EthSyncingInfo!, _api.RpcCapabilitiesProvider, _api, drives, _initConfig.IsMining); if (_healthChecksConfig.Enabled) diff --git a/src/Nethermind/Nethermind.HealthChecks/NodeHealthService.cs b/src/Nethermind/Nethermind.HealthChecks/NodeHealthService.cs index f31ca24636f..4f11d3ea5f9 100644 --- a/src/Nethermind/Nethermind.HealthChecks/NodeHealthService.cs +++ b/src/Nethermind/Nethermind.HealthChecks/NodeHealthService.cs @@ -28,7 +28,7 @@ public class NodeHealthService : INodeHealthService { private readonly ISyncServer _syncServer; private readonly IBlockchainProcessor _blockchainProcessor; - private readonly IBlockProducer _blockProducer; + private readonly IBlockProducerRunner _blockProducerRunner; private readonly IHealthChecksConfig _healthChecksConfig; private readonly IHealthHintService _healthHintService; private readonly IEthSyncingInfo _ethSyncingInfo; @@ -39,7 +39,7 @@ public class NodeHealthService : INodeHealthService public NodeHealthService(ISyncServer syncServer, IBlockchainProcessor blockchainProcessor, - IBlockProducer blockProducer, + IBlockProducerRunner blockProducerRunner, IHealthChecksConfig healthChecksConfig, IHealthHintService healthHintService, IEthSyncingInfo ethSyncingInfo, @@ -53,7 +53,7 @@ public NodeHealthService(ISyncServer syncServer, _healthChecksConfig = healthChecksConfig; _healthHintService = healthHintService; _blockchainProcessor = blockchainProcessor; - _blockProducer = blockProducer; + _blockProducerRunner = blockProducerRunner; _ethSyncingInfo = ethSyncingInfo; _rpcCapabilitiesProvider = rpcCapabilitiesProvider; _api = api; @@ -232,7 +232,7 @@ private static bool CheckPeers(ICollection<(string Description, string LongDescr private bool IsProducingBlocks(ICollection<(string Description, string LongDescription)> messages, ICollection errors) { ulong? maxIntervalHint = GetBlockProducerIntervalHint(); - bool producingBlocks = _blockProducer.IsProducingBlocks(maxIntervalHint); + bool producingBlocks = _blockProducerRunner.IsProducingBlocks(maxIntervalHint); if (producingBlocks == false) { errors.Add(ErrorStrings.NotProducingBlocks); diff --git a/src/Nethermind/Nethermind.Init/InitializeStateDb.cs b/src/Nethermind/Nethermind.Init/InitializeStateDb.cs index f220854d2f3..96680ddbade 100644 --- a/src/Nethermind/Nethermind.Init/InitializeStateDb.cs +++ b/src/Nethermind/Nethermind.Init/InitializeStateDb.cs @@ -10,6 +10,7 @@ using Nethermind.Blockchain; using Nethermind.Blockchain.FullPruning; using Nethermind.Blockchain.Synchronization; +using Nethermind.Config; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -20,9 +21,7 @@ using Nethermind.Logging; using Nethermind.Serialization.Json; using Nethermind.State; -using Nethermind.State.Witnesses; using Nethermind.Synchronization.Trie; -using Nethermind.Synchronization.Witness; using Nethermind.Trie; using Nethermind.Trie.Pruning; @@ -54,6 +53,7 @@ public Task Execute(CancellationToken cancellationToken) ISyncConfig syncConfig = getApi.Config(); IPruningConfig pruningConfig = getApi.Config(); IInitConfig initConfig = getApi.Config(); + IBlocksConfig blockConfig = getApi.Config(); _api.NodeStorageFactory.DetectCurrentKeySchemeFrom(getApi.DbProvider.StateDb); @@ -76,7 +76,7 @@ public Task Execute(CancellationToken cancellationToken) if (pruningConfig.PruningBoundary < 64) { - if (_logger.IsWarn) _logger.Warn($"Prunig boundary must be at least 64. Setting to 64."); + if (_logger.IsWarn) _logger.Warn($"Pruning boundary must be at least 64. Setting to 64."); pruningConfig.PruningBoundary = 64; } @@ -86,23 +86,9 @@ public Task Execute(CancellationToken cancellationToken) syncConfig.DownloadBodiesInFastSync = true; } - IWitnessCollector witnessCollector; - if (syncConfig.WitnessProtocolEnabled) - { - WitnessCollector witnessCollectorImpl = new(getApi.DbProvider.WitnessDb, _api.LogManager); - witnessCollector = setApi.WitnessCollector = witnessCollectorImpl; - setApi.WitnessRepository = witnessCollectorImpl.WithPruning(getApi.BlockTree!, getApi.LogManager); - } - else - { - witnessCollector = setApi.WitnessCollector = NullWitnessCollector.Instance; - setApi.WitnessRepository = NullWitnessCollector.Instance; - } - _api.NodeStorageFactory.DetectCurrentKeySchemeFrom(getApi.DbProvider.StateDb); - IKeyValueStore codeDb = getApi.DbProvider.CodeDb - .WitnessedBy(witnessCollector); - IKeyValueStoreWithBatching stateWitnessedBy = getApi.DbProvider.StateDb.WitnessedBy(witnessCollector); + IKeyValueStore codeDb = getApi.DbProvider.CodeDb; + IKeyValueStoreWithBatching stateDb = getApi.DbProvider.StateDb; IPersistenceStrategy persistenceStrategy; IPruningStrategy pruningStrategy; if (pruningConfig.Mode.IsMemory()) @@ -115,6 +101,12 @@ public Task Execute(CancellationToken cancellationToken) persistenceStrategy = persistenceStrategy.Or(triggerPersistenceStrategy); } + if ((_api.NodeStorageFactory.CurrentKeyScheme != INodeStorage.KeyScheme.Hash || initConfig.StateDbKeyScheme == INodeStorage.KeyScheme.HalfPath) + && pruningConfig.CacheMb > 2000) + { + if (_logger.IsWarn) _logger.Warn($"Detected {pruningConfig.CacheMb}MB of pruning cache config. Pruning cache more than 2000MB is not recommended as it may cause long memory pruning time which affect attestation."); + } + pruningStrategy = Prune .WhenCacheReaches(pruningConfig.CacheMb.MB()) // Use of ratio, as the effectiveness highly correlate with the amount of keys per snapshot save which @@ -128,7 +120,7 @@ public Task Execute(CancellationToken cancellationToken) persistenceStrategy = Persist.EveryBlock; } - INodeStorage mainNodeStorage = _api.NodeStorageFactory.WrapKeyValueStore(stateWitnessedBy); + INodeStorage mainNodeStorage = _api.NodeStorageFactory.WrapKeyValueStore(stateDb); TrieStore trieStore = syncConfig.TrieHealing ? new HealingTrieStore( @@ -145,15 +137,25 @@ public Task Execute(CancellationToken cancellationToken) // TODO: Needed by node serving. Probably should use `StateReader` instead. setApi.TrieStore = trieStore; + ITrieStore mainWorldTrieStore = trieStore; + PreBlockCaches? preBlockCaches = null; + if (blockConfig.PreWarmStateOnBlockProcessing) + { + preBlockCaches = new PreBlockCaches(); + mainWorldTrieStore = new PreCachedTrieStore(trieStore, preBlockCaches.RlpCache); + } + IWorldState worldState = syncConfig.TrieHealing ? new HealingWorldState( - trieStore, + mainWorldTrieStore, codeDb, - getApi.LogManager) + getApi.LogManager, + preBlockCaches) : new WorldState( - trieStore, + mainWorldTrieStore, codeDb, - getApi.LogManager); + getApi.LogManager, + preBlockCaches); // This is probably the point where a different state implementation would switch. IWorldStateManager stateManager = setApi.WorldStateManager = new WorldStateManager( @@ -165,7 +167,7 @@ public Task Execute(CancellationToken cancellationToken) // TODO: Don't forget this TrieStoreBoundaryWatcher trieStoreBoundaryWatcher = new(stateManager, _api.BlockTree!, _api.LogManager); getApi.DisposeStack.Push(trieStoreBoundaryWatcher); - getApi.DisposeStack.Push(trieStore); + getApi.DisposeStack.Push(mainWorldTrieStore); setApi.WorldState = stateManager.GlobalWorldState; setApi.StateReader = stateManager.GlobalStateReader; diff --git a/src/Nethermind/Nethermind.Init/Steps/InitRlp.cs b/src/Nethermind/Nethermind.Init/Steps/InitRlp.cs index 81b8516e3e2..9a8d7ec4051 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitRlp.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitRlp.cs @@ -6,6 +6,7 @@ using System.Threading; using System.Threading.Tasks; using Nethermind.Api; +using Nethermind.Api.Extensions; using Nethermind.Core.Attributes; using Nethermind.Network; using Nethermind.Serialization.Rlp; @@ -33,6 +34,11 @@ public virtual Task Execute(CancellationToken _) Rlp.RegisterDecoders(assembly); } + foreach (INethermindPlugin plugin in _api.Plugins) + { + plugin.InitRlpDecoders(_api); + } + return Task.CompletedTask; } } diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockProducer.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockProducer.cs index e7e2b9225a0..380c4baa4f1 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockProducer.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockProducer.cs @@ -24,15 +24,24 @@ public InitializeBlockProducer(INethermindApi api) _api = api; } - public async Task Execute(CancellationToken _) + public Task Execute(CancellationToken _) { if (_api.BlockProductionPolicy!.ShouldStartBlockProduction()) { - _api.BlockProducer = await BuildProducer(); + _api.BlockProducer = BuildProducer(); + + _api.BlockProducerRunner = _api.GetConsensusPlugin()!.CreateBlockProducerRunner(); + + foreach (IConsensusWrapperPlugin wrapperPlugin in _api.GetConsensusWrapperPlugins().OrderBy((p) => p.Priority)) + { + _api.BlockProducerRunner = wrapperPlugin.InitBlockProducerRunner(_api.BlockProducerRunner); + } } + + return Task.CompletedTask; } - protected virtual async Task BuildProducer() + protected virtual IBlockProducer BuildProducer() { _api.BlockProducerEnvFactory = new BlockProducerEnvFactory( _api.WorldStateManager!, @@ -59,7 +68,7 @@ protected virtual async Task BuildProducer() blockProducerFactory = new ConsensusWrapperToBlockProducerFactoryAdapter(wrapperPlugin, blockProducerFactory); } - return await blockProducerFactory.InitBlockProducer(consensusPlugin.DefaultBlockProductionTrigger); + return blockProducerFactory.InitBlockProducer(); } else { @@ -71,9 +80,9 @@ private class ConsensusWrapperToBlockProducerFactoryAdapter( IConsensusWrapperPlugin consensusWrapperPlugin, IBlockProducerFactory baseBlockProducerFactory) : IBlockProducerFactory { - public Task InitBlockProducer(IBlockProductionTrigger blockProductionTrigger, ITxSource? additionalTxSource = null) + public IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null) { - return consensusWrapperPlugin.InitBlockProducer(baseBlockProducerFactory, blockProductionTrigger, additionalTxSource); + return consensusWrapperPlugin.InitBlockProducer(baseBlockProducerFactory, additionalTxSource); } } } diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs index b6c9aa3c61a..b90e73e2e63 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs @@ -37,9 +37,7 @@ using Nethermind.Logging; using Nethermind.Serialization.Json; using Nethermind.State; -using Nethermind.State.Witnesses; using Nethermind.Synchronization.Trie; -using Nethermind.Synchronization.Witness; using Nethermind.Trie; using Nethermind.Trie.Pruning; using Nethermind.TxPool; @@ -163,16 +161,20 @@ protected virtual ITransactionProcessor CreateTransactionProcessor() { if (_api.SpecProvider is null) throw new StepDependencyException(nameof(_api.SpecProvider)); - VirtualMachine virtualMachine = CreateVirtualMachine(); + CodeInfoRepository codeInfoRepository = new(); + VirtualMachine virtualMachine = CreateVirtualMachine(codeInfoRepository); - return new TransactionProcessor( + TransactionProcessor transactionProcessor = new( _api.SpecProvider, _api.WorldState, virtualMachine, + codeInfoRepository, _api.LogManager); + + return transactionProcessor; } - protected virtual VirtualMachine CreateVirtualMachine() + protected VirtualMachine CreateVirtualMachine(CodeInfoRepository codeInfoRepository) { if (_api.BlockTree is null) throw new StepDependencyException(nameof(_api.BlockTree)); if (_api.SpecProvider is null) throw new StepDependencyException(nameof(_api.SpecProvider)); @@ -182,10 +184,13 @@ protected virtual VirtualMachine CreateVirtualMachine() BlockhashProvider blockhashProvider = new( _api.BlockTree, _api.SpecProvider, _api.WorldState, _api.LogManager); - return new VirtualMachine( + VirtualMachine virtualMachine = new( blockhashProvider, _api.SpecProvider, + codeInfoRepository, _api.LogManager); + + return virtualMachine; } protected virtual IHealthHintService CreateHealthHintService() => @@ -220,9 +225,16 @@ protected virtual BlockProcessor CreateBlockProcessor() if (_api.RewardCalculatorSource is null) throw new StepDependencyException(nameof(_api.RewardCalculatorSource)); if (_api.TransactionProcessor is null) throw new StepDependencyException(nameof(_api.TransactionProcessor)); if (_api.BlockTree is null) throw new StepDependencyException(nameof(_api.BlockTree)); + if (_api.WorldStateManager is null) throw new StepDependencyException(nameof(_api.WorldStateManager)); + if (_api.SpecProvider is null) throw new StepDependencyException(nameof(_api.SpecProvider)); + IBlocksConfig blocksConfig = _api.Config(); IWorldState worldState = _api.WorldState!; + BlockCachePreWarmer? preWarmer = blocksConfig.PreWarmStateOnBlockProcessing + ? new(new(_api.WorldStateManager, _api.BlockTree, _api.SpecProvider, _api.LogManager, worldState), _api.SpecProvider, _api.LogManager, worldState) + : null; + return new BlockProcessor( _api.SpecProvider, _api.BlockValidator, @@ -230,10 +242,11 @@ protected virtual BlockProcessor CreateBlockProcessor() new BlockProcessor.BlockValidationTransactionsExecutor(_api.TransactionProcessor, worldState), worldState, _api.ReceiptStorage, - _api.WitnessCollector, new BlockhashStore(_api.BlockTree, _api.SpecProvider!, worldState), _api.TransactionProcessor, - _api.LogManager); + _api.LogManager, + preWarmer: preWarmer + ); } // TODO: remove from here - move to consensus? diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeNetwork.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeNetwork.cs index 35bd10e7e2b..c3c79865a07 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeNetwork.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeNetwork.cs @@ -35,10 +35,8 @@ using Nethermind.Stats.Model; using Nethermind.Synchronization; using Nethermind.Synchronization.Blocks; -using Nethermind.Synchronization.LesSync; using Nethermind.Synchronization.ParallelSync; using Nethermind.Synchronization.Peers; -using Nethermind.Synchronization.Reporting; using Nethermind.Synchronization.SnapSync; using Nethermind.Synchronization.Trie; using Nethermind.TxPool; @@ -102,8 +100,6 @@ private async Task Initialize(CancellationToken cancellationToken) NetworkDiagTracer.Start(_api.LogManager); } - CanonicalHashTrie cht = new CanonicalHashTrie(_api.DbProvider!.ChtDb); - _api.BetterPeerStrategy = new TotalDifficultyBetterPeerStrategy(_api.LogManager); int maxPeersCount = _networkConfig.ActivePeersMaxCount; @@ -179,13 +175,10 @@ private async Task Initialize(CancellationToken cancellationToken) _api.SyncPeerPool, _api.SyncModeSelector, _api.Config(), - _api.WitnessRepository, _api.GossipPolicy, _api.SpecProvider!, - _api.LogManager, - cht); + _api.LogManager); - _ = syncServer.BuildCHT(); _api.DisposeStack.Push(syncServer); InitDiscovery(); @@ -534,11 +527,6 @@ private async Task InitPeer() _api.ProtocolsManager!.AddSupportedCapability(new Capability(Protocol.Snap, 1)); } - if (_syncConfig.WitnessProtocolEnabled) - { - _api.ProtocolsManager.AddSupportedCapability(new Capability(Protocol.Wit, 0)); - } - _api.ProtocolValidator = protocolValidator; NodesLoader nodesLoader = new(_networkConfig, _api.NodeStatsManager, peerStorage, _api.RlpxPeer, _api.LogManager); diff --git a/src/Nethermind/Nethermind.Init/Steps/LogHardwareInfo.cs b/src/Nethermind/Nethermind.Init/Steps/LogHardwareInfo.cs index 41619882327..3132f1b30ba 100644 --- a/src/Nethermind/Nethermind.Init/Steps/LogHardwareInfo.cs +++ b/src/Nethermind/Nethermind.Init/Steps/LogHardwareInfo.cs @@ -4,6 +4,7 @@ using System.Threading; using System.Threading.Tasks; using Nethermind.Api; +using Nethermind.Core.Cpu; using ILogger = Nethermind.Logging.ILogger; namespace Nethermind.Init.Steps; @@ -25,7 +26,7 @@ public Task Execute(CancellationToken cancellationToken) try { - var cpu = Cpu.RuntimeInformation.GetCpuInfo(); + var cpu = RuntimeInformation.GetCpuInfo(); if (cpu is not null) { _logger.Info($"CPU: {cpu.ProcessorName} ({cpu.PhysicalCoreCount}C{cpu.LogicalCoreCount}T)"); diff --git a/src/Nethermind/Nethermind.Init/Steps/RegisterPluginRpcModules.cs b/src/Nethermind/Nethermind.Init/Steps/RegisterPluginRpcModules.cs index 82d0110ee91..84dccd3ea34 100644 --- a/src/Nethermind/Nethermind.Init/Steps/RegisterPluginRpcModules.cs +++ b/src/Nethermind/Nethermind.Init/Steps/RegisterPluginRpcModules.cs @@ -1,33 +1,12 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; -using System.Linq; using System.Threading; using System.Threading.Tasks; using Nethermind.Api; using Nethermind.Api.Extensions; -using Nethermind.Blockchain.FullPruning; -using Nethermind.Core; -using Nethermind.Init.Steps.Migrations; -using Nethermind.JsonRpc; using Nethermind.JsonRpc.Modules; -using Nethermind.JsonRpc.Modules.Admin; -using Nethermind.JsonRpc.Modules.DebugModule; -using Nethermind.JsonRpc.Modules.Eth; using Nethermind.JsonRpc.Modules.Evm; -using Nethermind.JsonRpc.Modules.Net; -using Nethermind.JsonRpc.Modules.Parity; -using Nethermind.JsonRpc.Modules.Personal; -using Nethermind.JsonRpc.Modules.Proof; -using Nethermind.JsonRpc.Modules.Subscribe; -using Nethermind.JsonRpc.Modules.Trace; -using Nethermind.JsonRpc.Modules.TxPool; -using Nethermind.JsonRpc.Modules.Web3; -using Nethermind.JsonRpc.Modules.Witness; -using Nethermind.Logging; -using Nethermind.Network.Config; -using Nethermind.JsonRpc.Modules.Rpc; namespace Nethermind.Init.Steps; diff --git a/src/Nethermind/Nethermind.Init/Steps/RegisterRpcModules.cs b/src/Nethermind/Nethermind.Init/Steps/RegisterRpcModules.cs index f1756256fd1..db5341d33b4 100644 --- a/src/Nethermind/Nethermind.Init/Steps/RegisterRpcModules.cs +++ b/src/Nethermind/Nethermind.Init/Steps/RegisterRpcModules.cs @@ -6,8 +6,8 @@ using System.Threading; using System.Threading.Tasks; using Nethermind.Api; -using Nethermind.Api.Extensions; using Nethermind.Blockchain.FullPruning; +using Nethermind.Config; using Nethermind.Core; using Nethermind.Init.Steps.Migrations; using Nethermind.JsonRpc; @@ -16,7 +16,6 @@ using Nethermind.JsonRpc.Modules.DebugModule; using Nethermind.JsonRpc.Modules.Eth; using Nethermind.JsonRpc.Modules.Eth.FeeHistory; -using Nethermind.JsonRpc.Modules.Evm; using Nethermind.JsonRpc.Modules.Net; using Nethermind.JsonRpc.Modules.Parity; using Nethermind.JsonRpc.Modules.Personal; @@ -25,11 +24,9 @@ using Nethermind.JsonRpc.Modules.Trace; using Nethermind.JsonRpc.Modules.TxPool; using Nethermind.JsonRpc.Modules.Web3; -using Nethermind.JsonRpc.Modules.Witness; using Nethermind.Logging; using Nethermind.Network.Config; using Nethermind.JsonRpc.Modules.Rpc; -using Nethermind.Serialization.Json; namespace Nethermind.Init.Steps; @@ -37,43 +34,37 @@ namespace Nethermind.Init.Steps; public class RegisterRpcModules : IStep { private readonly INethermindApi _api; + private readonly IJsonRpcConfig _jsonRpcConfig; public RegisterRpcModules(INethermindApi api) { _api = api; + _jsonRpcConfig = _api.Config(); } public virtual async Task Execute(CancellationToken cancellationToken) { - if (_api.BlockTree is null) throw new StepDependencyException(nameof(_api.BlockTree)); - if (_api.ReceiptFinder is null) throw new StepDependencyException(nameof(_api.ReceiptFinder)); - if (_api.BloomStorage is null) throw new StepDependencyException(nameof(_api.BloomStorage)); - if (_api.LogManager is null) throw new StepDependencyException(nameof(_api.LogManager)); + StepDependencyException.ThrowIfNull(_api.BlockTree); + StepDependencyException.ThrowIfNull(_api.ReceiptFinder); + StepDependencyException.ThrowIfNull(_api.BloomStorage); + StepDependencyException.ThrowIfNull(_api.LogManager); - IJsonRpcConfig jsonRpcConfig = _api.Config(); - if (!jsonRpcConfig.Enabled) + if (!_jsonRpcConfig.Enabled) { return; } - if (_api.FileSystem is null) throw new StepDependencyException(nameof(_api.FileSystem)); - if (_api.TxPool is null) throw new StepDependencyException(nameof(_api.TxPool)); - if (_api.Wallet is null) throw new StepDependencyException(nameof(_api.Wallet)); - if (_api.SpecProvider is null) throw new StepDependencyException(nameof(_api.SpecProvider)); - if (_api.SyncModeSelector is null) throw new StepDependencyException(nameof(_api.SyncModeSelector)); - if (_api.TxSender is null) throw new StepDependencyException(nameof(_api.TxSender)); - if (_api.StateReader is null) throw new StepDependencyException(nameof(_api.StateReader)); - if (_api.WorldStateManager is null) throw new StepDependencyException(nameof(_api.WorldStateManager)); - if (_api.PeerManager is null) throw new StepDependencyException(nameof(_api.PeerManager)); - - if (jsonRpcConfig.Enabled) - { - _api.RpcModuleProvider = new RpcModuleProvider(_api.FileSystem, jsonRpcConfig, _api.LogManager); - } - else - { - _api.RpcModuleProvider ??= NullModuleProvider.Instance; - } + StepDependencyException.ThrowIfNull(_api.FileSystem); + StepDependencyException.ThrowIfNull(_api.TxPool); + StepDependencyException.ThrowIfNull(_api.Wallet); + StepDependencyException.ThrowIfNull(_api.SpecProvider); + StepDependencyException.ThrowIfNull(_api.SyncModeSelector); + StepDependencyException.ThrowIfNull(_api.TxSender); + StepDependencyException.ThrowIfNull(_api.StateReader); + StepDependencyException.ThrowIfNull(_api.WorldStateManager); + StepDependencyException.ThrowIfNull(_api.PeerManager); + + _api.RpcModuleProvider = new RpcModuleProvider(_api.FileSystem, _jsonRpcConfig, _api.LogManager); IRpcModuleProvider rpcModuleProvider = _api.RpcModuleProvider; @@ -81,55 +72,37 @@ public virtual async Task Execute(CancellationToken cancellationToken) ILogger logger = _api.LogManager.GetClassLogger(); IInitConfig initConfig = _api.Config(); - IJsonRpcConfig rpcConfig = _api.Config(); INetworkConfig networkConfig = _api.Config(); + // lets add threads to support parallel eth_getLogs ThreadPool.GetMinThreads(out int workerThreads, out int completionPortThreads); ThreadPool.SetMinThreads(workerThreads + Environment.ProcessorCount, completionPortThreads + Environment.ProcessorCount); - if (_api.ReceiptStorage is null) throw new StepDependencyException(nameof(_api.ReceiptStorage)); - if (_api.GasPriceOracle is null) throw new StepDependencyException(nameof(_api.GasPriceOracle)); - if (_api.EthSyncingInfo is null) throw new StepDependencyException(nameof(_api.EthSyncingInfo)); + StepDependencyException.ThrowIfNull(_api.ReceiptStorage); + StepDependencyException.ThrowIfNull(_api.GasPriceOracle); + StepDependencyException.ThrowIfNull(_api.EthSyncingInfo); + RpcLimits.Init(_jsonRpcConfig.RequestQueueLimit); + RegisterEthRpcModule(rpcModuleProvider); - var feeHistoryOracle = new FeeHistoryOracle(_api.BlockTree, _api.ReceiptStorage, _api.SpecProvider); - _api.DisposeStack.Push(feeHistoryOracle); - EthModuleFactory ethModuleFactory = new( - _api.TxPool, - _api.TxSender, - _api.Wallet, - _api.BlockTree, - rpcConfig, - _api.LogManager, - _api.StateReader, - _api, - _api.SpecProvider, - _api.ReceiptStorage, - _api.GasPriceOracle, - _api.EthSyncingInfo, - feeHistoryOracle); - - RpcLimits.Init(rpcConfig.RequestQueueLimit); - rpcModuleProvider.RegisterBounded(ethModuleFactory, rpcConfig.EthModuleConcurrentInstances ?? Environment.ProcessorCount, rpcConfig.Timeout); - if (_api.DbProvider is null) throw new StepDependencyException(nameof(_api.DbProvider)); - if (_api.BlockPreprocessor is null) throw new StepDependencyException(nameof(_api.BlockPreprocessor)); - if (_api.BlockValidator is null) throw new StepDependencyException(nameof(_api.BlockValidator)); - if (_api.RewardCalculatorSource is null) throw new StepDependencyException(nameof(_api.RewardCalculatorSource)); - if (_api.KeyStore is null) throw new StepDependencyException(nameof(_api.KeyStore)); - if (_api.PeerPool is null) throw new StepDependencyException(nameof(_api.PeerPool)); - if (_api.WitnessRepository is null) throw new StepDependencyException(nameof(_api.WitnessRepository)); - if (_api.BadBlocksStore is null) throw new StepDependencyException(nameof(_api.BadBlocksStore)); + StepDependencyException.ThrowIfNull(_api.DbProvider); + StepDependencyException.ThrowIfNull(_api.BlockPreprocessor); + StepDependencyException.ThrowIfNull(_api.BlockValidator); + StepDependencyException.ThrowIfNull(_api.RewardCalculatorSource); + StepDependencyException.ThrowIfNull(_api.KeyStore); + StepDependencyException.ThrowIfNull(_api.PeerPool); + StepDependencyException.ThrowIfNull(_api.BadBlocksStore); ProofModuleFactory proofModuleFactory = new(_api.WorldStateManager, _api.BlockTree, _api.BlockPreprocessor, _api.ReceiptFinder, _api.SpecProvider, _api.LogManager); - rpcModuleProvider.RegisterBounded(proofModuleFactory, 2, rpcConfig.Timeout); + rpcModuleProvider.RegisterBounded(proofModuleFactory, 2, _jsonRpcConfig.Timeout); DebugModuleFactory debugModuleFactory = new( _api.WorldStateManager, _api.DbProvider, _api.BlockTree, - rpcConfig, + _jsonRpcConfig, _api.BlockValidator, _api.BlockPreprocessor, _api.RewardCalculatorSource, @@ -141,23 +114,11 @@ public virtual async Task Execute(CancellationToken cancellationToken) _api.BadBlocksStore, _api.FileSystem, _api.LogManager); - rpcModuleProvider.RegisterBoundedByCpuCount(debugModuleFactory, rpcConfig.Timeout); + rpcModuleProvider.RegisterBoundedByCpuCount(debugModuleFactory, _jsonRpcConfig.Timeout); - TraceModuleFactory traceModuleFactory = new( - _api.WorldStateManager, - _api.BlockTree, - rpcConfig, - _api.BlockPreprocessor, - _api.RewardCalculatorSource, - _api.ReceiptStorage, - _api.SpecProvider, - _api.PoSSwitcher, - _api.LogManager); - - rpcModuleProvider.RegisterBoundedByCpuCount(traceModuleFactory, rpcConfig.Timeout); + RegisterTraceRpcModule(rpcModuleProvider); - if (_api.EthereumEcdsa is null) throw new StepDependencyException(nameof(_api.EthereumEcdsa)); - if (_api.Wallet is null) throw new StepDependencyException(nameof(_api.Wallet)); + StepDependencyException.ThrowIfNull(_api.EthereumEcdsa); PersonalRpcModule personalRpcModule = new( _api.EthereumEcdsa, @@ -165,9 +126,9 @@ public virtual async Task Execute(CancellationToken cancellationToken) _api.KeyStore); rpcModuleProvider.RegisterSingle(personalRpcModule); - if (_api.PeerManager is null) throw new StepDependencyException(nameof(_api.PeerManager)); - if (_api.StaticNodesManager is null) throw new StepDependencyException(nameof(_api.StaticNodesManager)); - if (_api.Enode is null) throw new StepDependencyException(nameof(_api.Enode)); + StepDependencyException.ThrowIfNull(_api.PeerManager); + StepDependencyException.ThrowIfNull(_api.StaticNodesManager); + StepDependencyException.ThrowIfNull(_api.Enode); ManualPruningTrigger pruningTrigger = new(); _api.PruningTrigger.Add(pruningTrigger); @@ -181,13 +142,13 @@ public virtual async Task Execute(CancellationToken cancellationToken) pruningTrigger); rpcModuleProvider.RegisterSingle(adminRpcModule); - if (_api.TxPoolInfoProvider is null) throw new StepDependencyException(nameof(_api.TxPoolInfoProvider)); + StepDependencyException.ThrowIfNull(_api.TxPoolInfoProvider); TxPoolRpcModule txPoolRpcModule = new(_api.TxPoolInfoProvider, _api.LogManager); rpcModuleProvider.RegisterSingle(txPoolRpcModule); - if (_api.SyncServer is null) throw new StepDependencyException(nameof(_api.SyncServer)); - if (_api.EngineSignerStore is null) throw new StepDependencyException(nameof(_api.EngineSignerStore)); + StepDependencyException.ThrowIfNull(_api.SyncServer); + StepDependencyException.ThrowIfNull(_api.EngineSignerStore); NetRpcModule netRpcModule = new(_api.LogManager, new NetBridge(_api.Enode, _api.SyncServer)); rpcModuleProvider.RegisterSingle(netRpcModule); @@ -204,14 +165,11 @@ public virtual async Task Execute(CancellationToken cancellationToken) _api.PeerManager); rpcModuleProvider.RegisterSingle(parityRpcModule); - WitnessRpcModule witnessRpcModule = new(_api.WitnessRepository, _api.BlockTree); - rpcModuleProvider.RegisterSingle(witnessRpcModule); - - if (_api.ReceiptMonitor is null) throw new StepDependencyException(nameof(_api.ReceiptMonitor)); + StepDependencyException.ThrowIfNull(_api.ReceiptMonitor); JsonRpcLocalStats jsonRpcLocalStats = new( _api.Timestamper, - jsonRpcConfig, + _jsonRpcConfig, _api.LogManager); _api.JsonRpcLocalStats = jsonRpcLocalStats; @@ -244,4 +202,75 @@ public virtual async Task Execute(CancellationToken cancellationToken) await Task.CompletedTask; } + + protected ModuleFactoryBase CreateEthModuleFactory() + { + StepDependencyException.ThrowIfNull(_api.BlockTree); + StepDependencyException.ThrowIfNull(_api.ReceiptStorage); + StepDependencyException.ThrowIfNull(_api.SpecProvider); + StepDependencyException.ThrowIfNull(_api.TxPool); + StepDependencyException.ThrowIfNull(_api.TxSender); + StepDependencyException.ThrowIfNull(_api.Wallet); + StepDependencyException.ThrowIfNull(_api.StateReader); + StepDependencyException.ThrowIfNull(_api.GasPriceOracle); + StepDependencyException.ThrowIfNull(_api.EthSyncingInfo); + StepDependencyException.ThrowIfNull(_api.EthSyncingInfo); + + var feeHistoryOracle = new FeeHistoryOracle(_api.BlockTree, _api.ReceiptStorage, _api.SpecProvider); + _api.DisposeStack.Push(feeHistoryOracle); + + IBlocksConfig blockConfig = _api.Config(); + ulong secondsPerSlot = blockConfig.SecondsPerSlot; + + return new EthModuleFactory( + _api.TxPool, + _api.TxSender, + _api.Wallet, + _api.BlockTree, + _jsonRpcConfig, + _api.LogManager, + _api.StateReader, + _api, + _api.SpecProvider, + _api.ReceiptStorage, + _api.GasPriceOracle, + _api.EthSyncingInfo, + feeHistoryOracle, + secondsPerSlot); + } + + protected virtual void RegisterEthRpcModule(IRpcModuleProvider rpcModuleProvider) + { + ModuleFactoryBase ethModuleFactory = CreateEthModuleFactory(); + + rpcModuleProvider.RegisterBounded(ethModuleFactory, + _jsonRpcConfig.EthModuleConcurrentInstances ?? Environment.ProcessorCount, _jsonRpcConfig.Timeout); + } + + protected ModuleFactoryBase CreateTraceModuleFactory() + { + StepDependencyException.ThrowIfNull(_api.WorldStateManager); + StepDependencyException.ThrowIfNull(_api.BlockTree); + StepDependencyException.ThrowIfNull(_api.RewardCalculatorSource); + StepDependencyException.ThrowIfNull(_api.ReceiptStorage); + StepDependencyException.ThrowIfNull(_api.SpecProvider); + + return new TraceModuleFactory( + _api.WorldStateManager, + _api.BlockTree, + _jsonRpcConfig, + _api.BlockPreprocessor, + _api.RewardCalculatorSource, + _api.ReceiptStorage, + _api.SpecProvider, + _api.PoSSwitcher, + _api.LogManager); + } + + protected virtual void RegisterTraceRpcModule(IRpcModuleProvider rpcModuleProvider) + { + ModuleFactoryBase traceModuleFactory = CreateTraceModuleFactory(); + + rpcModuleProvider.RegisterBoundedByCpuCount(traceModuleFactory, _jsonRpcConfig.Timeout); + } } diff --git a/src/Nethermind/Nethermind.Init/Steps/SetupKeyStore.cs b/src/Nethermind/Nethermind.Init/Steps/SetupKeyStore.cs index 8250541cbe4..cd181ef667b 100644 --- a/src/Nethermind/Nethermind.Init/Steps/SetupKeyStore.cs +++ b/src/Nethermind/Nethermind.Init/Steps/SetupKeyStore.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Nethermind.Api; using Nethermind.Config; +using Nethermind.Consensus; using Nethermind.Crypto; using Nethermind.KeyStore; using Nethermind.KeyStore.Config; @@ -60,7 +61,11 @@ await Task.Run(() => INodeKeyManager nodeKeyManager = new NodeKeyManager(get.CryptoRandom, get.KeyStore, keyStoreConfig, get.LogManager, passwordProvider, get.FileSystem); ProtectedPrivateKey? nodeKey = set.NodeKey = nodeKeyManager.LoadNodeKey(); - set.OriginalSignerKey = nodeKeyManager.LoadSignerKey(); + IMiningConfig miningConfig = get.Config(); + //Don't load the local key if an external signer is configured + if (!miningConfig.Enabled && string.IsNullOrEmpty(miningConfig.Signer)) + set.OriginalSignerKey = nodeKeyManager.LoadSignerKey(); + IPAddress ipAddress = networkConfig.ExternalIp is not null ? IPAddress.Parse(networkConfig.ExternalIp) : IPAddress.Loopback; IEnode enode = set.Enode = new Enode(nodeKey.PublicKey, ipAddress, networkConfig.P2PPort); diff --git a/src/Nethermind/Nethermind.Init/Steps/StartBlockProducer.cs b/src/Nethermind/Nethermind.Init/Steps/StartBlockProducer.cs index e0041cd6e53..bd744143ee5 100644 --- a/src/Nethermind/Nethermind.Init/Steps/StartBlockProducer.cs +++ b/src/Nethermind/Nethermind.Init/Steps/StartBlockProducer.cs @@ -24,18 +24,21 @@ public StartBlockProducer(INethermindApi api) _api = api; } - public async Task Execute(CancellationToken _) + public Task Execute(CancellationToken _) { if (_api.BlockProductionPolicy!.ShouldStartBlockProduction() && _api.BlockProducer is not null) { if (_api.BlockTree is null) throw new StepDependencyException(nameof(_api.BlockTree)); + if (_api.BlockProducerRunner is null) throw new StepDependencyException(nameof(_api.BlockProducerRunner)); ILogger logger = _api.LogManager.GetClassLogger(); if (logger.IsInfo) logger.Info($"Starting {_api.SealEngineType} block producer & sealer"); - ProducedBlockSuggester suggester = new(_api.BlockTree, _api.BlockProducer); + ProducedBlockSuggester suggester = new(_api.BlockTree, _api.BlockProducerRunner); _api.DisposeStack.Push(suggester); - await _api.BlockProducer.Start(); + _api.BlockProducerRunner.Start(); } + + return Task.CompletedTask; } } } diff --git a/src/Nethermind/Nethermind.Init/Steps/StepInitializationException.cs b/src/Nethermind/Nethermind.Init/Steps/StepInitializationException.cs index f6fda099528..8fe0e62a4f3 100644 --- a/src/Nethermind/Nethermind.Init/Steps/StepInitializationException.cs +++ b/src/Nethermind/Nethermind.Init/Steps/StepInitializationException.cs @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; namespace Nethermind.Init.Steps { @@ -15,5 +17,12 @@ public StepDependencyException(string message) : base(message) { } + + public static void ThrowIfNull([NotNull] object? argument, [CallerArgumentExpression(nameof(argument))] string? paramName = null) + { + if (argument is not null) + return; + throw new StepDependencyException(paramName ?? ""); + } } } diff --git a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs index 8abef2c22b8..998c379a216 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs @@ -36,6 +36,7 @@ using BlockTree = Nethermind.Blockchain.BlockTree; using Nethermind.Blockchain.Synchronization; using Nethermind.Config; +using Nethermind.Facade.Simulate; using Nethermind.Synchronization.ParallelSync; namespace Nethermind.JsonRpc.Benchmark @@ -80,7 +81,8 @@ public void GlobalSetup() new SyncConfig(), LimboLogs.Instance); _blockhashProvider = new BlockhashProvider(blockTree, specProvider, stateProvider, LimboLogs.Instance); - _virtualMachine = new VirtualMachine(_blockhashProvider, specProvider, LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); + _virtualMachine = new VirtualMachine(_blockhashProvider, specProvider, codeInfoRepository, LimboLogs.Instance); Block genesisBlock = Build.A.Block.Genesis.TestObject; blockTree.SuggestBlock(genesisBlock); @@ -89,11 +91,11 @@ public void GlobalSetup() blockTree.SuggestBlock(block1); TransactionProcessor transactionProcessor - = new(MainnetSpecProvider.Instance, stateProvider, _virtualMachine, LimboLogs.Instance); + = new(MainnetSpecProvider.Instance, stateProvider, _virtualMachine, codeInfoRepository, LimboLogs.Instance); IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor = new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider); BlockProcessor blockProcessor = new(specProvider, Always.Valid, new RewardCalculator(specProvider), transactionsExecutor, - stateProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, new BlockhashStore(blockTree, specProvider, stateProvider), transactionProcessor, LimboLogs.Instance); + stateProvider, NullReceiptStorage.Instance, new BlockhashStore(blockTree, specProvider, stateProvider), transactionProcessor, LimboLogs.Instance); EthereumEcdsa ecdsa = new(specProvider.ChainId, LimboLogs.Instance); BlockchainProcessor blockchainProcessor = new( @@ -127,6 +129,12 @@ TransactionProcessor transactionProcessor new ReadOnlyBlockTree(blockTree), specProvider, LimboLogs.Instance), + new SimulateReadOnlyBlocksProcessingEnvFactory( + stateManager, + new ReadOnlyBlockTree(blockTree), + new ReadOnlyDbProvider(dbProvider, true), + specProvider, + LimboLogs.Instance), NullTxPool.Instance, NullReceiptStorage.Instance, NullFilterStore.Instance, @@ -158,7 +166,8 @@ TransactionProcessor transactionProcessor specProvider, gasPriceOracle, ethSyncingInfo, - feeHistoryOracle); + feeHistoryOracle, + new BlocksConfig().SecondsPerSlot); } [Benchmark] diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/ConsensusHelperTests.ReceiptsJsonRpcDataSource.cs b/src/Nethermind/Nethermind.JsonRpc.Test/ConsensusHelperTests.ReceiptsJsonRpcDataSource.cs index 081ebeddd34..fe635d2b871 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/ConsensusHelperTests.ReceiptsJsonRpcDataSource.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/ConsensusHelperTests.ReceiptsJsonRpcDataSource.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Threading.Tasks; using Nethermind.Core.Crypto; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Modules.Eth; using Nethermind.Serialization.Json; diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Data/AccessListItemForRpcTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Data/AccessListItemForRpcTests.cs index 31345ac4e63..ae948e1d693 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Data/AccessListItemForRpcTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Data/AccessListItemForRpcTests.cs @@ -6,6 +6,7 @@ using Nethermind.Core; using Nethermind.Core.Eip2930; using Nethermind.Core.Test.Builders; +using Nethermind.Facade.Eth; using Nethermind.Int256; using Nethermind.JsonRpc.Data; using NUnit.Framework; diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Data/Eip2930Tests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Data/Eip2930Tests.cs index a9176491bdf..f34daa6963f 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Data/Eip2930Tests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Data/Eip2930Tests.cs @@ -8,6 +8,7 @@ using Nethermind.Core.Eip2930; using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; +using Nethermind.Facade.Eth; using Nethermind.Int256; using Nethermind.JsonRpc.Data; using Nethermind.Serialization.Json; diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/JsonRpcProcessorTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/JsonRpcProcessorTests.cs index 56eeed59f67..77ea1ccbba1 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/JsonRpcProcessorTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/JsonRpcProcessorTests.cs @@ -208,7 +208,7 @@ public async Task Can_process_batch_request_with_some_params_missing() [Test] public async Task Can_process_batch_request_with_two_requests() { - IList result = await ProcessAsync("{\"id\":67,\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionCount\",\"params\":[\"0x7f01d9b227593e033bf8d6fc86e634d27aa85568\",\"0x668c24\"]}{\"id\":68,\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionCount\",\"params\":[\"0x7f01d9b227593e033bf8d6fc86e634d27aa85568\",\"0x668c24\"]}"); + IList result = await ProcessAsync("{\"id\":67,\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionCount\",\"params\":[\"0x7f01d9b227593e033bf8d6fc86e634d27aa85568\",\"0x668c24\"]}\r\n{\"id\":68,\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionCount\",\"params\":[\"0x7f01d9b227593e033bf8d6fc86e634d27aa85568\",\"0x668c24\"]}"); result.Should().HaveCount(2); result[0].Response.Should().NotBeNull(); result[0].BatchedResponses.Should().BeNull(); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/JsonRpcServiceTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/JsonRpcServiceTests.cs index 6748030a5bf..00b2e77d735 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/JsonRpcServiceTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/JsonRpcServiceTests.cs @@ -16,6 +16,8 @@ using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Core.Test.Builders; +using Nethermind.Facade.Eth; +using Nethermind.Facade.Proxy.Models.Simulate; using Nethermind.Int256; using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Modules; @@ -38,12 +40,17 @@ public class JsonRpcServiceTests [SetUp] public void Initialize() { - Assembly jConfig = typeof(JsonRpcConfig).Assembly; _configurationProvider = new ConfigProvider(); _logManager = LimboLogs.Instance; _context = new JsonRpcContext(RpcEndpoint.Http); } + [TearDown] + public void TearDown() + { + _context?.Dispose(); + } + private IJsonRpcService _jsonRpcService = null!; private IConfigProvider _configurationProvider = null!; private ILogManager _logManager = null!; @@ -87,13 +94,27 @@ public void Eth_module_populates_size_when_returning_block_data() Assert.That((response?.Result as BlockForRpc)?.Size, Is.EqualTo(513L)); } + + [Test] + public void CanRunEthSimulateV1Empty() + { + SimulatePayload payload = new() { BlockStateCalls = new List>() }; + string serializedCall = new EthereumJsonSerializer().Serialize(payload); + IEthRpcModule ethRpcModule = Substitute.For(); + ethRpcModule.eth_simulateV1(payload).ReturnsForAnyArgs(_ => + ResultWrapper>.Success(Array.Empty())); + JsonRpcSuccessResponse? response = TestRequest(ethRpcModule, "eth_simulateV1", serializedCall) as JsonRpcSuccessResponse; + Assert.That(response?.Result, Is.EqualTo(Array.Empty())); + } + + [Test] public void CanHandleOptionalArguments() { EthereumJsonSerializer serializer = new(); string serialized = serializer.Serialize(new TransactionForRpc()); IEthRpcModule ethRpcModule = Substitute.For(); - ethRpcModule.eth_call(Arg.Any()).ReturnsForAnyArgs(x => ResultWrapper.Success("0x1")); + ethRpcModule.eth_call(Arg.Any()).ReturnsForAnyArgs(_ => ResultWrapper.Success("0x1")); JsonRpcSuccessResponse? response = TestRequest(ethRpcModule, "eth_call", serialized) as JsonRpcSuccessResponse; Assert.That(response?.Result, Is.EqualTo("0x1")); } diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/BoundedModulePoolTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/BoundedModulePoolTests.cs index 341c574c4dd..5a09f99127e 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/BoundedModulePoolTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/BoundedModulePoolTests.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Nethermind.Blockchain.Receipts; using Nethermind.Blockchain.Synchronization; +using Nethermind.Config; using Nethermind.Core.Specs; using Nethermind.Core.Test.Builders; using Nethermind.Db; @@ -56,7 +57,8 @@ public Task Initialize() Substitute.For(), Substitute.For(), Substitute.For(), - Substitute.For()), + Substitute.For(), + new BlocksConfig().SecondsPerSlot), 1, 1000); return Task.CompletedTask; diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs index 064fff4e886..e66d93d334f 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs @@ -19,6 +19,7 @@ using Nethermind.Db; using Nethermind.Evm.Tracing.GethStyle; using Nethermind.Evm.Tracing.GethStyle.Custom; +using Nethermind.Facade.Eth; using Nethermind.Int256; using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Modules.DebugModule; diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.EstimateGas.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.EstimateGas.cs index e40b064b796..0bc1a37fb09 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.EstimateGas.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.EstimateGas.cs @@ -10,6 +10,7 @@ using Nethermind.Core.Test.Builders; using Nethermind.Evm; using Nethermind.Evm.Tracing; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.Specs; using Nethermind.Specs.Forks; diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.EthCall.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.EthCall.cs index cd7fb615ec8..ed73767fcf1 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.EthCall.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.EthCall.cs @@ -8,6 +8,7 @@ using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; using Nethermind.Evm; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.Specs; using Nethermind.Specs.Forks; diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs index 107e473b58b..b613c75e75c 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs @@ -22,6 +22,7 @@ using Nethermind.Evm; using Nethermind.Evm.Tracing; using Nethermind.Facade; +using Nethermind.Facade.Eth; using Nethermind.Facade.Filters; using Nethermind.Int256; using Nethermind.JsonRpc.Data; @@ -64,6 +65,7 @@ public async Task Eth_get_balance_default_block() } [Test] + [SetCulture("en-US")] public async Task Eth_get_eth_feeHistory() { using Context ctx = await Context.Create(); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcSimulateTestsBase.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcSimulateTestsBase.cs new file mode 100644 index 00000000000..b3d887961c1 --- /dev/null +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcSimulateTestsBase.cs @@ -0,0 +1,149 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Linq; +using System.Threading.Tasks; +using FluentAssertions; +using Nethermind.Abi; +using Nethermind.Blockchain.Contracts.Json; +using Nethermind.Blockchain.Find; +using Nethermind.Consensus; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Facade.Eth; +using Nethermind.Int256; +using Nethermind.JsonRpc.Data; +using Nethermind.Logging; +using Nethermind.Specs; +using Nethermind.Specs.Forks; +using Nethermind.TxPool; + +namespace Nethermind.JsonRpc.Test.Modules.Eth; + +public class EthRpcSimulateTestsBase +{ + public static Task CreateChain(IReleaseSpec? releaseSpec = null) + { + TestRpcBlockchain testMevRpcBlockchain = new(); + TestSpecProvider testSpecProvider = releaseSpec is not null + ? new TestSpecProvider(releaseSpec) + : new TestSpecProvider(London.Instance); + return TestRpcBlockchain.ForTest(testMevRpcBlockchain).Build(testSpecProvider); + } + + private static string GetEcRecoverContractJsonAbi(string name = "recover") + { + return $@" +[ + {{ + ""payable"": false, + ""inputs"": [ + {{ + ""internalType"": ""bytes32"", + ""name"": ""hash"", + ""type"": ""bytes32"" + }}, + {{ + ""internalType"": ""uint8"", + ""name"": ""v"", + ""type"": ""uint8"" + + }}, + {{ + ""internalType"": ""bytes32"", + ""name"": ""r"", + ""type"": ""bytes32"" + }}, + {{ + ""internalType"": ""bytes32"", + ""name"": ""s"", + ""type"": ""bytes32"" + }} + ], + ""name"": ""{name}"", + ""outputs"": [ + {{ + ""internalType"": ""address"", + ""name"": """", + ""type"": ""address"" + }} + ], + ""stateMutability"": ""pure"", + ""type"": ""function"" + }} +]"; + } + + public static byte[] GetTxData(TestRpcBlockchain chain, PrivateKey account, string name = "recover") + { + // Step 1: Hash the message + Hash256 messageHash = Keccak.Compute("Hello, world!"); + // Step 2: Sign the hash + Signature signature = chain.EthereumEcdsa.Sign(account, messageHash); + + //Check real address + return GenerateTransactionDataForEcRecover(messageHash, signature, name); + } + + public static async Task
DeployEcRecoverContract(TestRpcBlockchain chain, PrivateKey privateKey, string contractBytecode) + { + byte[] bytecode = Bytes.FromHexString(contractBytecode); + Transaction tx = new() + { + Value = UInt256.Zero, + Nonce = 0, + Data = bytecode, + GasLimit = 3_000_000, + SenderAddress = privateKey.Address, + To = null, + GasPrice = 20.GWei() + }; + + TxPoolSender txSender = new(chain.TxPool, + new TxSealer(new Signer(chain.SpecProvider.ChainId, privateKey, LimboLogs.Instance), chain.Timestamper), + chain.NonceManager, + chain.EthereumEcdsa); + + (Hash256 hash, AcceptTxResult? code) = await txSender.SendTransaction(tx, TxHandlingOptions.ManagedNonce | TxHandlingOptions.PersistentBroadcast); + + code?.Should().Be(AcceptTxResult.Accepted); + Transaction[] txs = chain.TxPool.GetPendingTransactions(); + await chain.AddBlock(true, txs); + + TxReceipt? createContractTxReceipt = null; + while (createContractTxReceipt is null) + { + await Task.Delay(100); + createContractTxReceipt = chain.Bridge.GetReceipt(hash); + } + + createContractTxReceipt.ContractAddress.Should().NotBeNull($"Contract transaction {tx.Hash!} was not deployed."); + return createContractTxReceipt.ContractAddress!; + } + + protected static byte[] GenerateTransactionDataForEcRecover(Hash256 keccak, Signature signature, string name = "recover") + { + AbiDefinition call = new AbiDefinitionParser().Parse(GetEcRecoverContractJsonAbi(name)); + AbiEncodingInfo functionInfo = call.GetFunction(name).GetCallInfo(); + return AbiEncoder.Instance.Encode(functionInfo.EncodingStyle, functionInfo.Signature, keccak, signature.V, signature.R, signature.S); + } + + private static Address? ParseEcRecoverAddress(byte[] data, string name = "recover") + { + AbiDefinition call = new AbiDefinitionParser().Parse(GetEcRecoverContractJsonAbi(name)); + AbiEncodingInfo functionInfo = call.GetFunction(name).GetReturnInfo(); + return AbiEncoder.Instance.Decode(functionInfo.EncodingStyle, functionInfo.Signature, data).FirstOrDefault() as Address; + } + + public static Address? EcRecoverCall(TestRpcBlockchain testRpcBlockchain, Address senderAddress, byte[] bytes, Address? toAddress = null) + { + SystemTransaction transaction = new() { Data = bytes, To = toAddress, SenderAddress = senderAddress }; + transaction.Hash = transaction.CalculateHash(); + TransactionForRpc transactionForRpc = new(transaction); + ResultWrapper mainChainResult = testRpcBlockchain.EthRpcModule.eth_call(transactionForRpc, BlockParameter.Pending); + return ParseEcRecoverAddress(Bytes.FromHexString(mainChainResult.Data)); + } +} diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthSimulateTestsPrecompilesWithRedirection.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthSimulateTestsPrecompilesWithRedirection.cs new file mode 100644 index 00000000000..33d80a28d30 --- /dev/null +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthSimulateTestsPrecompilesWithRedirection.cs @@ -0,0 +1,194 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +using Nethermind.Blockchain.Find; +using Nethermind.Config; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Test.Builders; +using Nethermind.Evm; +using Nethermind.Evm.Precompiles; +using Nethermind.Facade.Eth; +using Nethermind.Facade.Proxy.Models; +using Nethermind.Facade.Proxy.Models.Simulate; +using Nethermind.JsonRpc.Data; +using Nethermind.JsonRpc.Modules.Eth; +using NUnit.Framework; + +namespace Nethermind.JsonRpc.Test.Modules.Eth; + +public class EthSimulateTestsPrecompilesWithRedirection +{ + [Test] + public async Task Test_eth_simulate_create() + { + TestRpcBlockchain chain = await EthRpcSimulateTestsBase.CreateChain(); + + Transaction systemTransactionForModifiedVm = new() + { + SenderAddress = TestItem.AddressB, + Data = Bytes.FromHexString("0xee82ac5e0000000000000000000000000000000000000000000000000000000000000001"), + To = TestItem.AddressA, + GasLimit = 3_500_000, + GasPrice = 20.GWei() + }; + + TransactionForRpc transactionForRpc = new(systemTransactionForModifiedVm) { Nonce = null }; + + SimulatePayload payload = new() + { + BlockStateCalls = + [ + new() + { + StateOverrides = new Dictionary + { + { + TestItem.AddressA, + new AccountOverride + { + Code = Bytes.FromHexString("0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063ee82ac5e14602d575b600080fd5b60436004803603810190603f91906098565b6057565b604051604e919060d7565b60405180910390f35b600081409050919050565b600080fd5b6000819050919050565b6078816067565b8114608257600080fd5b50565b6000813590506092816071565b92915050565b60006020828403121560ab5760aa6062565b5b600060b7848285016085565b91505092915050565b6000819050919050565b60d18160c0565b82525050565b600060208201905060ea600083018460ca565b9291505056fea2646970667358221220a4d7face162688805e99e86526524ac3dadfb01cc29366d0d68b70dadcf01afe64736f6c63430008120033") + } + }, + }, + Calls = [transactionForRpc] + } + ] + }; + + //will mock our GetCachedCodeInfo function - it shall be called 3 times if redirect is working, 2 times if not + SimulateTxExecutor executor = new(chain.Bridge, chain.BlockFinder, new JsonRpcConfig(), new BlocksConfig().SecondsPerSlot); + + ResultWrapper> result = executor.Execute(payload, BlockParameter.Latest); + + //Check results + byte[]? returnData = result.Data[0].Calls.First().ReturnData; + Assert.IsNotNull(returnData); + } + + + /// + /// This test verifies that a temporary forked blockchain can redirect precompiles + /// + [Test] + public async Task Test_eth_simulate_ecr_moved() + { + TestRpcBlockchain chain = await EthRpcSimulateTestsBase.CreateChain(); + //The following opcodes code is based on the following contract compiled: + /* + function ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) public returns(address) + { + + address redirectedToAddress = 0x0000000000000000000000000000000000000666; + + assembly { + // Copy msg.data. We take full control of memory in this inline assembly + // block because it will not return to Solidity code. We overwrite the + // Solidity scratch pad at memory position 0. + calldatacopy(0, 0, calldatasize()) + + // Call the implementation. + // out and outsize are 0 because we don't know the size yet. + let result := delegatecall(gas(), redirectedToAddress, 0, calldatasize(), 0, 0) + + // Copy the returned data. + returndatacopy(0, 0, returndatasize()) + + return (0, returndatasize()) + } + } + */ + + byte[] code = Prepare.EvmCode + .JUMPDEST() + .PushData(Bytes.ZeroByte) + .Op(Instruction.DUP1) + .PushData(TestItem.AddressB.Bytes) + .Op(Instruction.SWAP1) + .Op(Instruction.POP) + .Op(Instruction.CALLDATASIZE) + .PushData(Bytes.ZeroByte) + .Op(Instruction.DUP1) + .Op(Instruction.CALLDATACOPY) + .PushData(Bytes.ZeroByte) + .Op(Instruction.DUP1) + .Op(Instruction.CALLDATASIZE) + .PushData(Bytes.ZeroByte) + .Op(Instruction.DUP5) + .Op(Instruction.GAS) + .Op(Instruction.DELEGATECALL) + .Op(Instruction.RETURNDATASIZE) + .PushData(Bytes.ZeroByte) + .Op(Instruction.DUP1) + .Op(Instruction.RETURNDATACOPY) + .Op(Instruction.RETURNDATASIZE) + .PushData(Bytes.ZeroByte) + .Op(Instruction.RETURN) + .Done; + + byte[] transactionData = EthRpcSimulateTestsBase.GetTxData(chain, TestItem.PrivateKeyA); + + Hash256 headHash = chain.BlockFinder.Head!.Hash!; + Address contractAddress = await EthRpcSimulateTestsBase.DeployEcRecoverContract(chain, TestItem.PrivateKeyB, EthSimulateTestsSimplePrecompiles.EcRecoverCallerContractBytecode); + + EthRpcSimulateTestsBase.EcRecoverCall(chain, TestItem.AddressB, transactionData, contractAddress); + + chain.BlockTree.UpdateMainChain(new List { chain.BlockFinder.Head! }, true, true); + chain.BlockTree.UpdateHeadBlock(chain.BlockFinder.Head!.Hash!); + + Assert.That(headHash != chain.BlockFinder.Head!.Hash!); + chain.State.StateRoot = chain.BlockFinder.Head!.StateRoot!; + + TransactionForRpc transactionForRpc = new(new Transaction + { + Data = transactionData, + To = contractAddress, + SenderAddress = TestItem.AddressA, + GasLimit = 3_500_000, + GasPrice = 20.GWei() + }) + { + Nonce = null + }; + + SimulatePayload payload = new() + { + BlockStateCalls = + [ + new() + { + StateOverrides = new Dictionary + { + { + EcRecoverPrecompile.Address, + new AccountOverride + { + Code = code, + MovePrecompileToAddress = TestItem.AddressB + } + } + }, + Calls = [transactionForRpc] + } + ] + }; + + //will mock our GetCachedCodeInfo function - it shall be called 3 times if redirect is working, 2 times if not + SimulateTxExecutor executor = new(chain.Bridge, chain.BlockFinder, new JsonRpcConfig(), new BlocksConfig().SecondsPerSlot); + + Debug.Assert(contractAddress is not null, nameof(contractAddress) + " is not null"); + Assert.IsTrue(chain.State.AccountExists(contractAddress)); + + ResultWrapper> result = executor.Execute(payload, BlockParameter.Latest); + + //Check results + byte[] addressBytes = result.Data[0].Calls[0].ReturnData!.SliceWithZeroPaddingEmptyOnError(12, 20); + Address resultingAddress = new(addressBytes); + Assert.That(resultingAddress, Is.EqualTo(TestItem.AddressA)); + } +} diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsBlocksAndTransactions.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsBlocksAndTransactions.cs new file mode 100644 index 00000000000..28a28e68803 --- /dev/null +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsBlocksAndTransactions.cs @@ -0,0 +1,281 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using FluentAssertions; +using Nethermind.Blockchain.Find; +using Nethermind.Config; +using Nethermind.Core; +using Nethermind.Core.Extensions; +using Nethermind.Core.Test.Builders; +using Nethermind.Crypto; +using Nethermind.Facade.Eth; +using Nethermind.Facade.Proxy.Models; +using Nethermind.Facade.Proxy.Models.Simulate; +using Nethermind.Int256; +using Nethermind.JsonRpc.Data; +using Nethermind.JsonRpc.Modules.Eth; +using Nethermind.Serialization.Json; +using NUnit.Framework; +using ResultType = Nethermind.Facade.Proxy.Models.Simulate.ResultType; + +namespace Nethermind.JsonRpc.Test.Modules.Eth; + +public class EthSimulateTestsBlocksAndTransactions +{ + private static Transaction GetTransferTxData(UInt256 nonce, IEthereumEcdsa ethereumEcdsa, PrivateKey from, Address to, UInt256 amount) + { + Transaction tx = new() + { + Value = amount, + Nonce = nonce, + GasLimit = 50_000, + SenderAddress = from.Address, + To = to, + GasPrice = 20.GWei() + }; + + ethereumEcdsa.Sign(from, tx); + tx.Hash = tx.CalculateHash(); + return tx; + } + + [Test] + public async Task Test_eth_simulate_serialisation() + { + TestRpcBlockchain chain = await EthRpcSimulateTestsBase.CreateChain(); + + UInt256 nonceA = chain.State.GetNonce(TestItem.AddressA); + Transaction txToFail = GetTransferTxData(nonceA, chain.EthereumEcdsa, TestItem.PrivateKeyA, TestItem.AddressB, 10_000_000); + UInt256 nextNonceA = ++nonceA; + Transaction tx = GetTransferTxData(nextNonceA, chain.EthereumEcdsa, TestItem.PrivateKeyA, TestItem.AddressB, 4_000_000); + + SimulatePayload payload = new() + { + BlockStateCalls = + [ + new() + { + BlockOverrides = new BlockOverride { Number = 10 }, + Calls = [new TransactionForRpc(txToFail), new TransactionForRpc(tx)], + StateOverrides = new Dictionary + { + { TestItem.AddressA, new AccountOverride { Balance = Math.Max(420_000_004_000_001UL, 1_000_000_004_000_001UL) } } + } + } + ], + TraceTransfers = true, + Validation = true + }; + + //Force persistence of head block in main chain + chain.BlockTree.UpdateMainChain(new List { chain.BlockFinder.Head! }, true, true); + chain.BlockTree.UpdateHeadBlock(chain.BlockFinder.Head!.Hash!); + + //will mock our GetCachedCodeInfo function - it shall be called 3 times if redirect is working, 2 times if not + SimulateTxExecutor executor = new(chain.Bridge, chain.BlockFinder, new JsonRpcConfig(), new BlocksConfig().SecondsPerSlot); + ResultWrapper> result = executor.Execute(payload, BlockParameter.Latest); + IReadOnlyList data = result.Data; + Assert.That(data.Count, Is.EqualTo(7)); + + SimulateBlockResult blockResult = data.Last(); + blockResult.Calls.Select(c => c.Status).Should().BeEquivalentTo(new[] { (ulong)ResultType.Success, (ulong)ResultType.Success }); + + } + + + /// + /// This test verifies that a temporary forked blockchain can make transactions, blocks and report on them + /// We test on blocks before current head and after it, + /// Note that if we get blocks before head we set simulation start state to one of that first block + /// + [Test] + public async Task Test_eth_simulate_eth_moved() + { + TestRpcBlockchain chain = await EthRpcSimulateTestsBase.CreateChain(); + + UInt256 nonceA = chain.State.GetNonce(TestItem.AddressA); + Transaction txMainnetAtoB = GetTransferTxData(nonceA, chain.EthereumEcdsa, TestItem.PrivateKeyA, TestItem.AddressB, 1); + Transaction txAtoB1 = GetTransferTxData(nonceA + 1, chain.EthereumEcdsa, TestItem.PrivateKeyA, TestItem.AddressB, 1); + Transaction txAtoB2 = GetTransferTxData(nonceA + 2, chain.EthereumEcdsa, TestItem.PrivateKeyA, TestItem.AddressB, 1); + Transaction txAtoB3 = GetTransferTxData(nonceA + 3, chain.EthereumEcdsa, TestItem.PrivateKeyA, TestItem.AddressB, 1); + Transaction txAtoB4 = GetTransferTxData(nonceA + 4, chain.EthereumEcdsa, TestItem.PrivateKeyA, TestItem.AddressB, 1); + + SimulatePayload payload = new() + { + BlockStateCalls = new List> + { + new() + { + BlockOverrides = + new BlockOverride + { + Number = (ulong)chain.BlockFinder.Head!.Number+2, + GasLimit = 5_000_000, + FeeRecipient = TestItem.AddressC, + BaseFeePerGas = 0 + }, + Calls = new[] { new TransactionForRpc(txAtoB1), new TransactionForRpc(txAtoB2) } + }, + new() + { + BlockOverrides = + new BlockOverride + { + Number = (ulong)checked(chain.Bridge.HeadBlock.Number + 10), + GasLimit = 5_000_000, + FeeRecipient = TestItem.AddressC, + BaseFeePerGas = 0 + }, + Calls = new[] { new TransactionForRpc(txAtoB3), new TransactionForRpc(txAtoB4) } + } + }, + TraceTransfers = true + }; + + //Test that transfer tx works on mainchain + UInt256 before = chain.State.GetBalance(TestItem.AddressA); + await chain.AddBlock(true, txMainnetAtoB); + UInt256 after = chain.State.GetBalance(TestItem.AddressA); + Assert.Less(after, before); + + chain.Bridge.GetReceipt(txMainnetAtoB.Hash!); + + //Force persistancy of head block in main chain + chain.BlockTree.UpdateMainChain(new List { chain.BlockFinder.Head! }, true, true); + chain.BlockTree.UpdateHeadBlock(chain.BlockFinder.Head!.Hash!); + + //will mock our GetCachedCodeInfo function - it shall be called 3 times if redirect is working, 2 times if not + SimulateTxExecutor executor = new(chain.Bridge, chain.BlockFinder, new JsonRpcConfig(), new BlocksConfig().SecondsPerSlot); + ResultWrapper> result = + executor.Execute(payload, BlockParameter.Latest); + IReadOnlyList data = result.Data; + + Assert.That(data.Count, Is.EqualTo(9)); + + SimulateBlockResult blockResult = data[0]; + Assert.That(blockResult.Calls.Count(), Is.EqualTo(2)); + blockResult = data.Last(); + Assert.That(blockResult.Calls.Count(), Is.EqualTo(2)); + } + + /// + /// This test verifies that a temporary forked blockchain can make transactions, blocks and report on them + /// + [Test] + public async Task Test_eth_simulate_transactions_forced_fail() + { + TestRpcBlockchain chain = await EthRpcSimulateTestsBase.CreateChain(); + + UInt256 nonceA = chain.State.GetNonce(TestItem.AddressA); + + Transaction txMainnetAtoB = + GetTransferTxData(nonceA, chain.EthereumEcdsa, TestItem.PrivateKeyA, TestItem.AddressB, 1); + //shall be Ok + Transaction txAtoB1 = + GetTransferTxData(nonceA + 1, chain.EthereumEcdsa, TestItem.PrivateKeyA, TestItem.AddressB, 1); + + //shall fail + Transaction txAtoB2 = + GetTransferTxData(nonceA + 2, chain.EthereumEcdsa, TestItem.PrivateKeyA, TestItem.AddressB, UInt256.MaxValue); + TransactionForRpc transactionForRpc = new(txAtoB2) { Nonce = null }; + TransactionForRpc transactionForRpc2 = new(txAtoB1) { Nonce = null }; + SimulatePayload payload = new() + { + BlockStateCalls = new List> + { + new() + { + BlockOverrides = + new BlockOverride + { + Number = (ulong)checked(chain.Bridge.HeadBlock.Number + 10), + GasLimit = 5_000_000, + FeeRecipient = TestItem.AddressC, + BaseFeePerGas = 0 + }, + Calls = new[] { transactionForRpc2 } + }, + new() + { + BlockOverrides = + new BlockOverride + { + Number = 123, + GasLimit = 5_000_000, + FeeRecipient = TestItem.AddressC, + BaseFeePerGas = 0 + }, + Calls = new[] { transactionForRpc } + } + }, + TraceTransfers = true, + Validation = true + }; + + //Test that transfer tx works on mainchain + UInt256 before = chain.State.GetBalance(TestItem.AddressA); + await chain.AddBlock(true, txMainnetAtoB); + UInt256 after = chain.State.GetBalance(TestItem.AddressA); + Assert.Less(after, before); + + chain.Bridge.GetReceipt(txMainnetAtoB.Hash!); + + //Force persistancy of head block in main chain + chain.BlockTree.UpdateMainChain(new List { chain.BlockFinder.Head! }, true, true); + chain.BlockTree.UpdateHeadBlock(chain.BlockFinder.Head!.Hash!); + + //will mock our GetCachedCodeInfo function - it shall be called 3 times if redirect is working, 2 times if not + SimulateTxExecutor executor = new(chain.Bridge, chain.BlockFinder, new JsonRpcConfig(), new BlocksConfig().SecondsPerSlot); + + ResultWrapper> result = + executor.Execute(payload, BlockParameter.Latest); + Assert.IsTrue(result.Result!.Error!.Contains("higher than sender balance")); + } + + + [Test] + public async Task TestTransferLogsAddress() + { + EthereumJsonSerializer serializer = new(); + string input = """ + { + "traceTransfers": true, + "blockStateCalls": [ + { + "blockOverrides": { + "baseFeePerGas": "0xa" + }, + "stateOverrides": { + "0xc000000000000000000000000000000000000000": { + "balance": "0x35a4ece8" + } + }, + "calls": [ + { + "from": "0xc000000000000000000000000000000000000000", + "to": "0xc100000000000000000000000000000000000000", + "gas": "0x5208", + "maxFeePerGas": "0x14", + "maxPriorityFeePerGas": "0x1", + "maxFeePerBlobGas": "0x0", + "value": "0x65", + "nonce": "0x0", + "input": "0x" + } + ] + } + ] + } + """; + var payload = serializer.Deserialize>(input); + TestRpcBlockchain chain = await EthRpcSimulateTestsBase.CreateChain(); + Console.WriteLine("current test: simulateTransferOverBlockStateCalls"); + var result = chain.EthRpcModule.eth_simulateV1(payload!, BlockParameter.Latest); + var logs = result.Data.First().Calls.First().Logs.ToArray(); + Assert.That(logs.First().Address == new Address("0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE")); + } +} diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsHiveBase.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsHiveBase.cs new file mode 100644 index 00000000000..7c1b85e4325 --- /dev/null +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsHiveBase.cs @@ -0,0 +1,82 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Nethermind.Blockchain.Find; +using Nethermind.Facade.Eth; +using Nethermind.Facade.Proxy.Models.Simulate; +using Nethermind.JsonRpc.Data; +using Nethermind.Serialization.Json; +using NUnit.Framework; +using ResultType = Nethermind.Core.ResultType; + +namespace Nethermind.JsonRpc.Test.Modules.Eth; + +public class EthSimulateTestsHiveBase +{ + private static readonly object[] HiveTestCases = + { +new object[] {"multicall-add-more-non-defined-BlockStateCalls-than-fit-but-now-with-fit", "{\"blockStateCalls\": [{\"blockOverrides\": {\"number\": \"0xa\"}, \"stateOverrides\": {\"0xc100000000000000000000000000000000000000\": {\"code\": \"0x608060405234801561001057600080fd5b506000366060484641444543425a3a60014361002c919061009b565b406040516020016100469a99989796959493929190610138565b6040516020818303038152906040529050915050805190602001f35b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006100a682610062565b91506100b183610062565b92508282039050818111156100c9576100c861006c565b5b92915050565b6100d881610062565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610109826100de565b9050919050565b610119816100fe565b82525050565b6000819050919050565b6101328161011f565b82525050565b60006101408201905061014e600083018d6100cf565b61015b602083018c6100cf565b610168604083018b610110565b610175606083018a6100cf565b61018260808301896100cf565b61018f60a08301886100cf565b61019c60c08301876100cf565b6101a960e08301866100cf565b6101b76101008301856100cf565b6101c5610120830184610129565b9b9a505050505050505050505056fea26469706673582212205139ae3ba8d46d11c29815d001b725f9840c90e330884ed070958d5af4813d8764736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x\"}]}, {\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x\"}]}, {\"blockOverrides\": {\"number\": \"0x14\"}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x\"}]}, {\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x\"}]}]}"}, +new object[] {"multicall-basefee-too-low-without-validation-38012", "{\"blockStateCalls\": [{\"blockOverrides\": {\"baseFeePerGas\": \"0xa\"}, \"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}}, \"calls\": [{\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"maxFeePerGas\": \"0x0\", \"maxPriorityFeePerGas\": \"0x0\"}]}]}"}, +//new object[] {"multicall-block-override-reflected-in-contract-simple", "{\"blockStateCalls\": [{\"blockOverrides\": {\"number\": \"0x12a\", \"time\": \"0x64\"}}, {\"blockOverrides\": {\"number\": \"0x14\", \"time\": \"0x65\"}}, {\"blockOverrides\": {\"number\": \"0x15\", \"time\": \"0xc8\"}}]}"}, +//new object[] {"multicall-block-timestamps-incrementing", "{\"blockStateCalls\": [{\"blockOverrides\": {\"time\": \"0x12b\"}}, {\"blockOverrides\": {\"time\": \"0x12c\"}}]}"}, +new object[] {"multicall-blockhash-complex", "{\"blockStateCalls\": [{\"blockOverrides\": {\"number\": \"0xa\"}, \"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x1e8480\"}, \"0xc200000000000000000000000000000000000000\": {\"code\": \"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063ee82ac5e14602d575b600080fd5b60436004803603810190603f91906098565b6057565b604051604e919060d7565b60405180910390f35b600081409050919050565b600080fd5b6000819050919050565b6078816067565b8114608257600080fd5b50565b6000813590506092816071565b92915050565b60006020828403121560ab5760aa6062565b5b600060b7848285016085565b91505092915050565b6000819050919050565b60d18160c0565b82525050565b600060208201905060ea600083018460ca565b9291505056fea2646970667358221220a4d7face162688805e99e86526524ac3dadfb01cc29366d0d68b70dadcf01afe64736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xee82ac5e0000000000000000000000000000000000000000000000000000000000000001\"}]}, {\"blockOverrides\": {\"number\": \"0x14\"}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xee82ac5e000000000000000000000000000000000000000000000000000000000000000a\"}]}, {\"blockOverrides\": {\"number\": \"0x1e\"}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xee82ac5e000000000000000000000000000000000000000000000000000000000000001d\"}]}]}"}, +new object[] {"multicall-blockhash-simple", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc200000000000000000000000000000000000000\": {\"code\": \"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063ee82ac5e14602d575b600080fd5b60436004803603810190603f91906098565b6057565b604051604e919060d7565b60405180910390f35b600081409050919050565b600080fd5b6000819050919050565b6078816067565b8114608257600080fd5b50565b6000813590506092816071565b92915050565b60006020828403121560ab5760aa6062565b5b600060b7848285016085565b91505092915050565b6000819050919050565b60d18160c0565b82525050565b600060208201905060ea600083018460ca565b9291505056fea2646970667358221220a4d7face162688805e99e86526524ac3dadfb01cc29366d0d68b70dadcf01afe64736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xee82ac5e0000000000000000000000000000000000000000000000000000000000000001\"}]}]}"}, +new object[] {"multicall-blockhash-start-before-head", "{\"blockStateCalls\": [{\"blockOverrides\": {\"number\": \"0xa\"}, \"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x1e8480\"}, \"0xc200000000000000000000000000000000000000\": {\"code\": \"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063ee82ac5e14602d575b600080fd5b60436004803603810190603f91906098565b6057565b604051604e919060d7565b60405180910390f35b600081409050919050565b600080fd5b6000819050919050565b6078816067565b8114608257600080fd5b50565b6000813590506092816071565b92915050565b60006020828403121560ab5760aa6062565b5b600060b7848285016085565b91505092915050565b6000819050919050565b60d18160c0565b82525050565b600060208201905060ea600083018460ca565b9291505056fea2646970667358221220a4d7face162688805e99e86526524ac3dadfb01cc29366d0d68b70dadcf01afe64736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xee82ac5e0000000000000000000000000000000000000000000000000000000000000001\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xee82ac5e0000000000000000000000000000000000000000000000000000000000000002\"}]}, {\"blockOverrides\": {\"number\": \"0x14\"}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xee82ac5e0000000000000000000000000000000000000000000000000000000000000013\"}]}]}"}, +new object[] {"multicall-check-that-balance-is-there-after-new-block", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x2710\"}, \"0xc200000000000000000000000000000000000000\": {\"code\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8b2cb4f14610030575b600080fd5b61004a600480360381019061004591906100e4565b610060565b604051610057919061012a565b60405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100b182610086565b9050919050565b6100c1816100a6565b81146100cc57600080fd5b50565b6000813590506100de816100b8565b92915050565b6000602082840312156100fa576100f9610081565b5b6000610108848285016100cf565b91505092915050565b6000819050919050565b61012481610111565b82525050565b600060208201905061013f600083018461011b565b9291505056fea2646970667358221220172c443a163d8a43e018c339d1b749c312c94b6de22835953d960985daf228c764736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xf8b2cb4f000000000000000000000000c000000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xf8b2cb4f000000000000000000000000c100000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\"}]}, {\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xf8b2cb4f000000000000000000000000c000000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0xf8b2cb4f000000000000000000000000c100000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\"}]}]}"}, +new object[] {"multicall-contract-calls-itself", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"code\": \"0x608060405234801561001057600080fd5b506000366060484641444543425a3a60014361002c919061009b565b406040516020016100469a99989796959493929190610138565b6040516020818303038152906040529050915050805190602001f35b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006100a682610062565b91506100b183610062565b92508282039050818111156100c9576100c861006c565b5b92915050565b6100d881610062565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610109826100de565b9050919050565b610119816100fe565b82525050565b6000819050919050565b6101328161011f565b82525050565b60006101408201905061014e600083018d6100cf565b61015b602083018c6100cf565b610168604083018b610110565b610175606083018a6100cf565b61018260808301896100cf565b61018f60a08301886100cf565b61019c60c08301876100cf565b6101a960e08301866100cf565b6101b76101008301856100cf565b6101c5610120830184610129565b9b9a505050505050505050505056fea26469706673582212205139ae3ba8d46d11c29815d001b725f9840c90e330884ed070958d5af4813d8764736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc000000000000000000000000000000000000000\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-empty-calls-and-overrides-multicall", "{\"blockStateCalls\": [{\"stateOverrides\": {}, \"calls\": [{}]}, {\"stateOverrides\": {}, \"calls\": [{}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-eth-send-should-not-produce-logs-by-default", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\"}]}]}"}, +new object[] {"multicall-eth-send-should-not-produce-logs-on-revert", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}, \"0xc100000000000000000000000000000000000000\": {\"code\": \"0x608060405260006042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401603990609d565b60405180910390fd5b005b600082825260208201905092915050565b7f416c7761797320726576657274696e6720636f6e747261637400000000000000600082015250565b600060896019836044565b91506092826055565b602082019050919050565b6000602082019050818103600083015260b481607e565b905091905056fea264697066735822122005cbbbc709291f66fadc17416c1b0ed4d72941840db11468a21b8e1a0362024c64736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-eth-send-should-produce-logs", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-eth-send-should-produce-more-logs-on-forward", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}, \"0xc100000000000000000000000000000000000000\": {\"code\": \"0x60806040526004361061001e5760003560e01c80634b64e49214610023575b600080fd5b61003d6004803603810190610038919061011f565b61003f565b005b60008173ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050509050806100b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100af906101a9565b60405180910390fd5b5050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ec826100c1565b9050919050565b6100fc816100e1565b811461010757600080fd5b50565b600081359050610119816100f3565b92915050565b600060208284031215610135576101346100bc565b5b60006101438482850161010a565b91505092915050565b600082825260208201905092915050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b600061019360148361014c565b915061019e8261015d565b602082019050919050565b600060208201905081810360008301526101c281610186565b905091905056fea2646970667358221220563acd6f5b8ad06a3faf5c27fddd0ecbc198408b99290ce50d15c2cf7043694964736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\", \"input\": \"0x4b64e4920000000000000000000000000000000000000000000000000000000000000100\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-eth-send-should-produce-no-logs-on-forward-revert", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}, \"0xc100000000000000000000000000000000000000\": {\"code\": \"0x60806040526004361061001e5760003560e01c80634b64e49214610023575b600080fd5b61003d6004803603810190610038919061011f565b61003f565b005b60008173ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050509050806100b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100af906101a9565b60405180910390fd5b5050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ec826100c1565b9050919050565b6100fc816100e1565b811461010757600080fd5b50565b600081359050610119816100f3565b92915050565b600060208284031215610135576101346100bc565b5b60006101438482850161010a565b91505092915050565b600082825260208201905092915050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b600061019360148361014c565b915061019e8261015d565b602082019050919050565b600060208201905081810360008301526101c281610186565b905091905056fea2646970667358221220563acd6f5b8ad06a3faf5c27fddd0ecbc198408b99290ce50d15c2cf7043694964736f6c63430008120033\"}, \"0xc200000000000000000000000000000000000000\": {\"code\": \"0x608060405260006042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401603990609d565b60405180910390fd5b005b600082825260208201905092915050565b7f416c7761797320726576657274696e6720636f6e747261637400000000000000600082015250565b600060896019836044565b91506092826055565b602082019050919050565b6000602082019050818103600083015260b481607e565b905091905056fea264697066735822122005cbbbc709291f66fadc17416c1b0ed4d72941840db11468a21b8e1a0362024c64736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\", \"input\": \"0x4b64e492c200000000000000000000000000000000000000000000000000000000000000\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-get-block-properties", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc100000000000000000000000000000000000000\": {\"code\": \"0x608060405234801561001057600080fd5b506000366060484641444543425a3a60014361002c919061009b565b406040516020016100469a99989796959493929190610138565b6040516020818303038152906040529050915050805190602001f35b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006100a682610062565b91506100b183610062565b92508282039050818111156100c9576100c861006c565b5b92915050565b6100d881610062565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610109826100de565b9050919050565b610119816100fe565b82525050565b6000819050919050565b6101328161011f565b82525050565b60006101408201905061014e600083018d6100cf565b61015b602083018c6100cf565b610168604083018b610110565b610175606083018a6100cf565b61018260808301896100cf565b61018f60a08301886100cf565b61019c60c08301876100cf565b6101a960e08301866100cf565b6101b76101008301856100cf565b6101c5610120830184610129565b9b9a505050505050505050505056fea26469706673582212205139ae3ba8d46d11c29815d001b725f9840c90e330884ed070958d5af4813d8764736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x\"}]}]}"}, +new object[] {"multicall-instrict-gas-38013", "{\"blockStateCalls\": [{\"calls\": [{\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"gas\": \"0x0\"}]}]}"}, +new object[] {"multicall-logs", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc200000000000000000000000000000000000000\": {\"code\": \"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600080a1600080f3\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x6057361d0000000000000000000000000000000000000000000000000000000000000005\"}]}]}"}, +new object[] {"multicall-move-account-twice", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x3e8\"}, \"0xc200000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}, \"0xc300000000000000000000000000000000000000\": {\"balance\": \"0xbb8\"}, \"0xc400000000000000000000000000000000000000\": {\"code\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8b2cb4f14610030575b600080fd5b61004a600480360381019061004591906100e4565b610060565b604051610057919061012a565b60405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100b182610086565b9050919050565b6100c1816100a6565b81146100cc57600080fd5b50565b6000813590506100de816100b8565b92915050565b6000602082840312156100fa576100f9610081565b5b6000610108848285016100cf565b91505092915050565b6000819050919050565b61012481610111565b82525050565b600060208201905061013f600083018461011b565b9291505056fea2646970667358221220172c443a163d8a43e018c339d1b749c312c94b6de22835953d960985daf228c764736f6c63430008120033\"}}}, {\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0xbb8\", \"MovePrecompileToAddress\": \"0xc200000000000000000000000000000000000000\"}, \"0xc200000000000000000000000000000000000000\": {\"balance\": \"0xfa0\", \"MovePrecompileToAddress\": \"0xc300000000000000000000000000000000000000\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc400000000000000000000000000000000000000\", \"input\": \"0xf8b2cb4f000000000000000000000000c000000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc400000000000000000000000000000000000000\", \"input\": \"0xf8b2cb4f000000000000000000000000c200000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc400000000000000000000000000000000000000\", \"input\": \"0xf8b2cb4f000000000000000000000000c300000000000000000000000000000000000000\"}]}]}"}, +new object[] {"multicall-move-ecrecover-and-call", "{\"blockStateCalls\": [{\"calls\": [{\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000000001\", \"input\": \"0x4554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b45544800000000000000000000000000000000000000000000000000000000004554480000000000000000000000000000000000000000000000000000000000\"}, {\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000000001\", \"input\": \"0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8000000000000000000000000000000000000000000000000000000000000001cb7cf302145348387b9e69fde82d8e634a0f8761e78da3bfa059efced97cbed0d2a66b69167cafe0ccfc726aec6ee393fea3cf0e4f3f9c394705e0f56d9bfe1c9\"}]}, {\"stateOverrides\": {\"0x0000000000000000000000000000000000000001\": {\"MovePrecompileToAddress\": \"0x0000000000000000000000000000000000123456\"}}, \"calls\": [{\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000123456\", \"input\": \"0x4554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b45544800000000000000000000000000000000000000000000000000000000004554480000000000000000000000000000000000000000000000000000000000\"}, {\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000123456\", \"input\": \"0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8000000000000000000000000000000000000000000000000000000000000001cb7cf302145348387b9e69fde82d8e634a0f8761e78da3bfa059efced97cbed0d2a66b69167cafe0ccfc726aec6ee393fea3cf0e4f3f9c394705e0f56d9bfe1c9\"}]}]}"}, +new object[] {"multicall-move-to-address-itself-reference-38022", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x30d40\"}, \"0xc100000000000000000000000000000000000000\": {\"MovePrecompileToAddress\": \"0xc100000000000000000000000000000000000000\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x1\"}]}]}"}, +new object[] {"multicall-move-two-accounts-to-same-38023", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0x0000000000000000000000000000000000000001\": {\"MovePrecompileToAddress\": \"0xc200000000000000000000000000000000000000\"}, \"0x0000000000000000000000000000000000000002\": {\"MovePrecompileToAddress\": \"0xc200000000000000000000000000000000000000\"}}}]}"}, +new object[] {"multicall-move-two-non-precompiles-accounts-to-same", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0x0100000000000000000000000000000000000000\": {\"MovePrecompileToAddress\": \"0xc200000000000000000000000000000000000000\"}, \"0x0200000000000000000000000000000000000000\": {\"MovePrecompileToAddress\": \"0xc200000000000000000000000000000000000000\"}}}]}"}, +new object[] {"multicall-no-fields-call", "{\"blockStateCalls\": [{\"calls\": [{}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-only-from-to-transaction", "{\"blockStateCalls\": [{\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-only-from-transaction", "{\"blockStateCalls\": [{\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-override-address-twice-in-separate-BlockStateCalls", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\"}]}, {\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\"}]}], \"traceTransfers\": true}"}, +//new object[] {"multicall-override-all-in-BlockStateCalls", "{\"blockStateCalls\": [{\"blockOverrides\": {\"number\": \"0x3e9\", \"time\": \"0x3eb\", \"gasLimit\": \"0x3ec\", \"feeRecipient\": \"0xc200000000000000000000000000000000000000\", \"prevRandao\": \"0xc300000000000000000000000000000000000000000000000000000000000000\", \"baseFeePerGas\": \"0x3ef\"}}]}"}, +new object[] {"multicall-override-block-num", "{\"blockStateCalls\": [{\"blockOverrides\": {\"number\": \"0xb\"}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"input\": \"0x4360005260206000f3\"}]}, {\"blockOverrides\": {\"number\": \"0xc\"}, \"calls\": [{\"from\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x4360005260206000f3\"}]}]}"}, +new object[] {"multicall-override-ecrecover", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0x0000000000000000000000000000000000000001\": {\"code\": \"0x608060405234801561001057600080fd5b506004361061003a5760003560e01c806305fdbc81146101ee578063c00692601461020a5761003b565b5b600036606060008060008086868101906100559190610462565b93509350935093506000806000868686866040516020016100799493929190610520565b60405160208183030381529060405280519060200120815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101bb576000806212345673ffffffffffffffffffffffffffffffffffffffff166127108b8b6040516101249291906105ad565b60006040518083038160008787f1925050503d8060008114610162576040519150601f19603f3d011682016040523d82523d6000602084013e610167565b606091505b5091509150816101ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a39061066f565b60405180910390fd5b809750505050505050506101e3565b806040516020016101cc9190610709565b604051602081830303815290604052955050505050505b915050805190602001f35b6102086004803603810190610203919061093a565b610226565b005b610224600480360381019061021f9190610983565b6102ec565b005b60005b81518110156102e8576102d5828281518110610248576102476109fe565b5b602002602001015160000151838381518110610267576102666109fe565b5b602002602001015160200151848481518110610286576102856109fe565b5b6020026020010151604001518585815181106102a5576102a46109fe565b5b6020026020010151606001518686815181106102c4576102c36109fe565b5b6020026020010151608001516102ec565b80806102e090610a66565b915050610229565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361035b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035290610afa565b60405180910390fd5b80600080878787876040516020016103769493929190610520565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b610406816103f3565b811461041157600080fd5b50565b600081359050610423816103fd565b92915050565b600060ff82169050919050565b61043f81610429565b811461044a57600080fd5b50565b60008135905061045c81610436565b92915050565b6000806000806080858703121561047c5761047b6103e9565b5b600061048a87828801610414565b945050602061049b8782880161044d565b93505060406104ac87828801610414565b92505060606104bd87828801610414565b91505092959194509250565b6000819050919050565b6104e46104df826103f3565b6104c9565b82525050565b60008160f81b9050919050565b6000610502826104ea565b9050919050565b61051a61051582610429565b6104f7565b82525050565b600061052c82876104d3565b60208201915061053c8286610509565b60018201915061054c82856104d3565b60208201915061055c82846104d3565b60208201915081905095945050505050565b600081905092915050565b82818337600083830152505050565b6000610594838561056e565b93506105a1838584610579565b82840190509392505050565b60006105ba828486610588565b91508190509392505050565b600082825260208201905092915050565b7f6661696c656420746f2063616c6c206d6f7665642065637265636f766572206160008201527f742061646472657373203078303030303030303030303030303030303030303060208201527f3030303030303030303030303030313233343536000000000000000000000000604082015250565b60006106596054836105c6565b9150610664826105d7565b606082019050919050565b600060208201905081810360008301526106888161064c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106ba8261068f565b9050919050565b60008160601b9050919050565b60006106d9826106c1565b9050919050565b60006106eb826106ce565b9050919050565b6107036106fe826106af565b6106e0565b82525050565b600061071582846106f2565b60148201915081905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61077282610729565b810181811067ffffffffffffffff821117156107915761079061073a565b5b80604052505050565b60006107a46103df565b90506107b08282610769565b919050565b600067ffffffffffffffff8211156107d0576107cf61073a565b5b602082029050602081019050919050565b600080fd5b600080fd5b6107f4816106af565b81146107ff57600080fd5b50565b600081359050610811816107eb565b92915050565b600060a0828403121561082d5761082c6107e6565b5b61083760a061079a565b9050600061084784828501610414565b600083015250602061085b8482850161044d565b602083015250604061086f84828501610414565b604083015250606061088384828501610414565b606083015250608061089784828501610802565b60808301525092915050565b60006108b66108b1846107b5565b61079a565b90508083825260208201905060a084028301858111156108d9576108d86107e1565b5b835b8181101561090257806108ee8882610817565b84526020840193505060a0810190506108db565b5050509392505050565b600082601f83011261092157610920610724565b5b81356109318482602086016108a3565b91505092915050565b6000602082840312156109505761094f6103e9565b5b600082013567ffffffffffffffff81111561096e5761096d6103ee565b5b61097a8482850161090c565b91505092915050565b600080600080600060a0868803121561099f5761099e6103e9565b5b60006109ad88828901610414565b95505060206109be8882890161044d565b94505060406109cf88828901610414565b93505060606109e088828901610414565b92505060806109f188828901610802565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000610a7182610a5c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610aa357610aa2610a2d565b5b600182019050919050565b7f72657475726e20616464726573732063616e6e6f742062652030783000000000600082015250565b6000610ae4601c836105c6565b9150610aef82610aae565b602082019050919050565b60006020820190508181036000830152610b1381610ad7565b905091905056fea2646970667358221220154f5b68ccfa5be744e7245765a3530dac4035052284a68b5dded1945b45075e64736f6c63430008120033\", \"MovePrecompileToAddress\": \"0x0000000000000000000000000000000000123456\"}, \"0xc100000000000000000000000000000000000000\": {\"balance\": \"0x30d40\"}}, \"calls\": [{\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000123456\", \"input\": \"0x4554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b45544800000000000000000000000000000000000000000000000000000000004554480000000000000000000000000000000000000000000000000000000000\"}, {\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000123456\", \"input\": \"0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8000000000000000000000000000000000000000000000000000000000000001cb7cf302145348387b9e69fde82d8e634a0f8761e78da3bfa059efced97cbed0d2a66b69167cafe0ccfc726aec6ee393fea3cf0e4f3f9c394705e0f56d9bfe1c9\"}, {\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000000001\", \"input\": \"0xc00692604554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b45544800000000000000000000000000000000000000000000000000000000004554480000000000000000000000000000000000000000000000000000000000000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045\"}, {\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000000001\", \"input\": \"0x4554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b45544800000000000000000000000000000000000000000000000000000000004554480000000000000000000000000000000000000000000000000000000000\"}, {\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000000001\", \"input\": \"0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8000000000000000000000000000000000000000000000000000000000000001cb7cf302145348387b9e69fde82d8e634a0f8761e78da3bfa059efced97cbed0d2a66b69167cafe0ccfc726aec6ee393fea3cf0e4f3f9c394705e0f56d9bfe1c9\"}, {\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000000001\", \"input\": \"0x4554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b45544800000000000000000000000000000000000000000000000000000000004554490000000000000000000000000000000000000000000000000000000000\"}]}]}"}, +new object[] {"multicall-override-identity", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0x0000000000000000000000000000000000000004\": {\"code\": \"0x\", \"MovePrecompileToAddress\": \"0x0000000000000000000000000000000000123456\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000123456\", \"input\": \"0x1234\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000000004\", \"input\": \"0x1234\"}]}]}"}, +new object[] {"multicall-override-sha256", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0x0000000000000000000000000000000000000002\": {\"code\": \"0x\", \"MovePrecompileToAddress\": \"0x0000000000000000000000000000000000123456\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000123456\", \"input\": \"0x1234\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0x0000000000000000000000000000000000000002\", \"input\": \"0x1234\"}]}]}"}, +new object[] {"multicall-override-storage-slots", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}, \"0xc100000000000000000000000000000000000000\": {\"code\": \"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630ff4c916146100515780633033413b1461008157806344e12f871461009f5780637b8d56e3146100bd575b600080fd5b61006b600480360381019061006691906101f6565b6100d9565b6040516100789190610232565b60405180910390f35b61008961013f565b6040516100969190610232565b60405180910390f35b6100a7610145565b6040516100b49190610232565b60405180910390f35b6100d760048036038101906100d2919061024d565b61014b565b005b60006002821061011e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610115906102ea565b60405180910390fd5b6000820361012c5760005490505b6001820361013a5760015490505b919050565b60015481565b60005481565b6002821061018e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610185906102ea565b60405180910390fd5b600082036101a257806000819055506101b7565b600182036101b657806001819055506101b7565b5b5050565b600080fd5b6000819050919050565b6101d3816101c0565b81146101de57600080fd5b50565b6000813590506101f0816101ca565b92915050565b60006020828403121561020c5761020b6101bb565b5b600061021a848285016101e1565b91505092915050565b61022c816101c0565b82525050565b60006020820190506102476000830184610223565b92915050565b60008060408385031215610264576102636101bb565b5b6000610272858286016101e1565b9250506020610283858286016101e1565b9150509250929050565b600082825260208201905092915050565b7f746f6f2062696720736c6f740000000000000000000000000000000000000000600082015250565b60006102d4600c8361028d565b91506102df8261029e565b602082019050919050565b60006020820190508181036000830152610303816102c7565b905091905056fea2646970667358221220ceea194bb66b5b9f52c83e5bf5a1989255de8cb7157838eff98f970c3a04cb3064736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x7b8d56e300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x7b8d56e300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x0ff4c9160000000000000000000000000000000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x0ff4c9160000000000000000000000000000000000000000000000000000000000000001\"}]}, {\"stateOverrides\": {\"0xc100000000000000000000000000000000000000\": {\"stateDiff\": {\"0x0000000000000000000000000000000000000000000000000000000000000000\": \"0x1200000000000000000000000000000000000000000000000000000000000000\"}}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x0ff4c9160000000000000000000000000000000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x0ff4c9160000000000000000000000000000000000000000000000000000000000000001\"}]}, {\"stateOverrides\": {\"0xc100000000000000000000000000000000000000\": {\"state\": {\"0x0000000000000000000000000000000000000000000000000000000000000000\": \"0x1200000000000000000000000000000000000000000000000000000000000000\"}}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x0ff4c9160000000000000000000000000000000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x0ff4c9160000000000000000000000000000000000000000000000000000000000000001\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-precompile-is-sending-transaction", "{\"blockStateCalls\": [{\"calls\": [{\"from\": \"0x0000000000000000000000000000000000000004\", \"to\": \"0x0000000000000000000000000000000000000002\", \"input\": \"0x1234\"}]}]}"}, +new object[] {"multicall-run-gas-spending", "{\"blockStateCalls\": [{\"blockOverrides\": {\"gasLimit\": \"0x16e360\"}, \"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x1e8480\"}, \"0xc200000000000000000000000000000000000000\": {\"code\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063815b8ab414610030575b600080fd5b61004a600480360381019061004591906100b6565b61004c565b005b60005a90505b60011561007657815a826100669190610112565b106100715750610078565b610052565b505b50565b600080fd5b6000819050919050565b61009381610080565b811461009e57600080fd5b50565b6000813590506100b08161008a565b92915050565b6000602082840312156100cc576100cb61007b565b5b60006100da848285016100a1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061011d82610080565b915061012883610080565b92508282039050818111156101405761013f6100e3565b5b9291505056fea2646970667358221220a659ba4db729a6ee4db02fcc5c1118db53246b0e5e686534fc9add6f2e93faec64736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x815b8ab40000000000000000000000000000000000000000000000000000000000000000\"}]}, {\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x815b8ab40000000000000000000000000000000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x815b8ab400000000000000000000000000000000000000000000000000000000000f4240\"}]}, {\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x815b8ab40000000000000000000000000000000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x815b8ab400000000000000000000000000000000000000000000000000000000000f4240\"}]}]}"}, +new object[] {"multicall-run-out-of-gas-in-block-38015", "{\"blockStateCalls\": [{\"blockOverrides\": {\"gasLimit\": \"0x16e360\"}, \"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x1e8480\"}, \"0xc200000000000000000000000000000000000000\": {\"code\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063815b8ab414610030575b600080fd5b61004a600480360381019061004591906100b6565b61004c565b005b60005a90505b60011561007657815a826100669190610112565b106100715750610078565b610052565b505b50565b600080fd5b6000819050919050565b61009381610080565b811461009e57600080fd5b50565b6000813590506100b08161008a565b92915050565b6000602082840312156100cc576100cb61007b565b5b60006100da848285016100a1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061011d82610080565b915061012883610080565b92508282039050818111156101405761013f6100e3565b5b9291505056fea2646970667358221220a659ba4db729a6ee4db02fcc5c1118db53246b0e5e686534fc9add6f2e93faec64736f6c63430008120033\"}}}, {\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x815b8ab400000000000000000000000000000000000000000000000000000000000f4240\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x815b8ab400000000000000000000000000000000000000000000000000000000000f4240\"}]}]}"}, +new object[] {"multicall-self-destructing-state-override", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc200000000000000000000000000000000000000\": {\"code\": \"0x6080604052348015600f57600080fd5b506004361060285760003560e01c806383197ef014602d575b600080fd5b60336035565b005b600073ffffffffffffffffffffffffffffffffffffffff16fffea26469706673582212208e566fde20a17fff9658b9b1db37e27876fd8934ccf9b2aa308cabd37698681f64736f6c63430008120033\"}, \"0xc300000000000000000000000000000000000000\": {\"code\": \"0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063dce4a4471461003a575b600080fd5b610054600480360381019061004f91906100f8565b61006a565b60405161006191906101b5565b60405180910390f35b6060813b6040519150601f19601f602083010116820160405280825280600060208401853c50919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100c58261009a565b9050919050565b6100d5816100ba565b81146100e057600080fd5b50565b6000813590506100f2816100cc565b92915050565b60006020828403121561010e5761010d610095565b5b600061011c848285016100e3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561015f578082015181840152602081019050610144565b60008484015250505050565b6000601f19601f8301169050919050565b600061018782610125565b6101918185610130565b93506101a1818560208601610141565b6101aa8161016b565b840191505092915050565b600060208201905081810360008301526101cf818461017c565b90509291505056fea26469706673582212206a5f0cd9f230619fa520fc4b9d4b518643258cad412f2fa33945ce528b4b895164736f6c63430008120033\"}}}, {\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc300000000000000000000000000000000000000\", \"input\": \"0xdce4a447000000000000000000000000c200000000000000000000000000000000000000\"}]}, {\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x83197ef0\"}]}, {\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc300000000000000000000000000000000000000\", \"input\": \"0xdce4a447000000000000000000000000c200000000000000000000000000000000000000\"}]}, {\"stateOverrides\": {\"0xc200000000000000000000000000000000000000\": {\"code\": \"0x6080604052348015600f57600080fd5b506004361060285760003560e01c806383197ef014602d575b600080fd5b60336035565b005b600073ffffffffffffffffffffffffffffffffffffffff16fffea26469706673582212208e566fde20a17fff9658b9b1db37e27876fd8934ccf9b2aa308cabd37698681f64736f6c63430008120033\"}}}, {\"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc300000000000000000000000000000000000000\", \"input\": \"0xdce4a447000000000000000000000000c200000000000000000000000000000000000000\"}]}]}"}, +new object[] {"multicall-self-destructive-contract-produces-logs", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc200000000000000000000000000000000000000\": {\"code\": \"0x6080604052348015600f57600080fd5b506004361060285760003560e01c806383197ef014602d575b600080fd5b60336035565b005b600073ffffffffffffffffffffffffffffffffffffffff16fffea26469706673582212208e566fde20a17fff9658b9b1db37e27876fd8934ccf9b2aa308cabd37698681f64736f6c63430008120033\", \"balance\": \"0x1e8480\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x83197ef0\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-set-read-storage", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc200000000000000000000000000000000000000\": {\"code\": \"0x608060405234801561001057600080fd5b50600436106100365760003560e01c80632e64cec11461003b5780636057361d14610059575b600080fd5b610043610075565b60405161005091906100d9565b60405180910390f35b610073600480360381019061006e919061009d565b61007e565b005b60008054905090565b8060008190555050565b60008135905061009781610103565b92915050565b6000602082840312156100b3576100b26100fe565b5b60006100c184828501610088565b91505092915050565b6100d3816100f4565b82525050565b60006020820190506100ee60008301846100ca565b92915050565b6000819050919050565b600080fd5b61010c816100f4565b811461011757600080fd5b5056fea2646970667358221220404e37f487a89a932dca5e77faaf6ca2de3b991f93d230604b1b8daaef64766264736f6c63430008070033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x6057361d0000000000000000000000000000000000000000000000000000000000000005\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"input\": \"0x2e64cec1\"}]}]}"}, +new object[] {"multicall-simple", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x3e8\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\"}, {\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"value\": \"0x3e8\"}]}]}"}, +new object[] {"multicall-simple-send-from-contract", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"code\": \"0x60806040526004361061001e5760003560e01c80634b64e49214610023575b600080fd5b61003d6004803603810190610038919061011f565b61003f565b005b60008173ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050509050806100b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100af906101a9565b60405180910390fd5b5050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100ec826100c1565b9050919050565b6100fc816100e1565b811461010757600080fd5b50565b600081359050610119816100f3565b92915050565b600060208284031215610135576101346100bc565b5b60006101438482850161010a565b91505092915050565b600082825260208201905092915050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b600061019360148361014c565b915061019e8261015d565b602082019050919050565b600060208201905081810360008301526101c281610186565b905091905056fea2646970667358221220563acd6f5b8ad06a3faf5c27fddd0ecbc198408b99290ce50d15c2cf7043694964736f6c63430008120033\", \"balance\": \"0x3e8\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-simple-state-diff", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x7d0\"}, \"0xc100000000000000000000000000000000000000\": {\"code\": \"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630ff4c916146100515780633033413b1461008157806344e12f871461009f5780637b8d56e3146100bd575b600080fd5b61006b600480360381019061006691906101f6565b6100d9565b6040516100789190610232565b60405180910390f35b61008961013f565b6040516100969190610232565b60405180910390f35b6100a7610145565b6040516100b49190610232565b60405180910390f35b6100d760048036038101906100d2919061024d565b61014b565b005b60006002821061011e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610115906102ea565b60405180910390fd5b6000820361012c5760005490505b6001820361013a5760015490505b919050565b60015481565b60005481565b6002821061018e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610185906102ea565b60405180910390fd5b600082036101a257806000819055506101b7565b600182036101b657806001819055506101b7565b5b5050565b600080fd5b6000819050919050565b6101d3816101c0565b81146101de57600080fd5b50565b6000813590506101f0816101ca565b92915050565b60006020828403121561020c5761020b6101bb565b5b600061021a848285016101e1565b91505092915050565b61022c816101c0565b82525050565b60006020820190506102476000830184610223565b92915050565b60008060408385031215610264576102636101bb565b5b6000610272858286016101e1565b9250506020610283858286016101e1565b9150509250929050565b600082825260208201905092915050565b7f746f6f2062696720736c6f740000000000000000000000000000000000000000600082015250565b60006102d4600c8361028d565b91506102df8261029e565b602082019050919050565b60006020820190508181036000830152610303816102c7565b905091905056fea2646970667358221220ceea194bb66b5b9f52c83e5bf5a1989255de8cb7157838eff98f970c3a04cb3064736f6c63430008120033\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x7b8d56e300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x7b8d56e300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002\"}]}, {\"stateOverrides\": {\"0xc100000000000000000000000000000000000000\": {\"state\": {\"0x0000000000000000000000000000000000000000000000000000000000000000\": \"0x1200000000000000000000000000000000000000000000000000000000000000\"}}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x0ff4c9160000000000000000000000000000000000000000000000000000000000000000\"}, {\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"input\": \"0x0ff4c9160000000000000000000000000000000000000000000000000000000000000001\"}]}], \"traceTransfers\": true}"}, +new object[] {"multicall-simple-with-validation-no-funds", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"balance\": \"0x3e8\"}}, \"calls\": [{\"from\": \"0xc000000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"value\": \"0x3e8\"}, {\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0xc200000000000000000000000000000000000000\", \"value\": \"0x3e8\"}]}]}"}, +new object[] {"multicall-transaction-too-high-nonce", "{\"blockStateCalls\": [{\"calls\": [{\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"nonce\": \"0x64\"}]}]}"}, +new object[] {"multicall-transaction-too-low-nonce-38010", "{\"blockStateCalls\": [{\"stateOverrides\": {\"0xc000000000000000000000000000000000000000\": {\"nonce\": \"0xa\"}}, \"calls\": [{\"from\": \"0xc100000000000000000000000000000000000000\", \"to\": \"0xc100000000000000000000000000000000000000\", \"nonce\": \"0x0\"}]}]}"}, +}; + + [Test, TestCaseSource(nameof(HiveTestCases)), Parallelizable(ParallelScope.All)] + public async Task TestsimulateHive(string name, string data) + { + EthereumJsonSerializer serializer = new(); + SimulatePayload? payload = serializer.Deserialize>(data); + TestRpcBlockchain chain = await EthRpcSimulateTestsBase.CreateChain(); + Console.WriteLine($"current test: {name}"); + ResultWrapper> result = + chain.EthRpcModule.eth_simulateV1(payload!, BlockParameter.Latest); + + Console.WriteLine(); + Assert.That(result.Result.ResultType, Is.EqualTo(ResultType.Success)); + Assert.IsNotNull(result.Data); + } +} diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsSimplePrecompiles.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsSimplePrecompiles.cs new file mode 100644 index 00000000000..b362a5439fd --- /dev/null +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/Simulate/EthSimulateTestsSimplePrecompiles.cs @@ -0,0 +1,108 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Test.Builders; +using Nethermind.Crypto; +using Nethermind.Evm; +using Nethermind.Evm.Precompiles; +using Nethermind.Facade.Proxy.Models; +using Nethermind.Facade.Proxy.Models.Simulate; +using Nethermind.Facade.Simulate; +using NUnit.Framework; + +namespace Nethermind.JsonRpc.Test.Modules.Eth; + +public class EthSimulateTestsSimplePrecompiles : EthRpcSimulateTestsBase +{ + /* Compiled contract + * Call example for TestItem.AddressA + * recover 0xb6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4 28 0x7b8b1991eb44757bc688016d27940df8fb971d7c87f77a6bc4e938e3202c4403 0x7e9267b0aeaa82fa765361918f2d8abd9cdd86e64aa6f2b81d3c4e0b69a7b055 + * returns address: 0xb7705aE4c6F81B66cdB323C65f4E8133690fC099 + + pragma solidity ^0.8.7; + + contract EcrecoverProxy { + function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) public pure returns (address) { + return ecrecover(hash, v, r, s); + } + } + */ + + //Taken from contract compiler output metadata + public const string EcRecoverCallerContractBytecode = + "608060405234801561001057600080fd5b5061028b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c2bf17b014610030575b600080fd5b61004a6004803603810190610045919061012f565b610060565b60405161005791906101d7565b60405180910390f35b6000600185858585604051600081526020016040526040516100859493929190610210565b6020604051602081039080840390855afa1580156100a7573d6000803e3d6000fd5b505050602060405103519050949350505050565b600080fd5b6000819050919050565b6100d3816100c0565b81146100de57600080fd5b50565b6000813590506100f0816100ca565b92915050565b600060ff82169050919050565b61010c816100f6565b811461011757600080fd5b50565b60008135905061012981610103565b92915050565b60008060008060808587031215610149576101486100bb565b5b6000610157878288016100e1565b94505060206101688782880161011a565b9350506040610179878288016100e1565b925050606061018a878288016100e1565b91505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101c182610196565b9050919050565b6101d1816101b6565b82525050565b60006020820190506101ec60008301846101c8565b92915050565b6101fb816100c0565b82525050565b61020a816100f6565b82525050565b600060808201905061022560008301876101f2565b6102326020830186610201565b61023f60408301856101f2565b61024c60608301846101f2565b9594505050505056fea26469706673582212204855668ab62273dde1249722b61c57ad057ef3d17384f21233e1b7bb309db7e464736f6c63430008120033"; + + + /// + /// This test verifies that a temporary forked blockchain can updates precompiles + /// + [Test] + public async Task Test_eth_simulate_erc() + { + TestRpcBlockchain chain = await CreateChain(); + + //Impose Opcode instead of EcRecoverPrecompile, it returns const TestItem.AddressE address + byte[] code = Prepare.EvmCode + .StoreDataInMemory(0, TestItem.AddressE + .ToString(false, false) + .PadLeft(64, '0')) + .PushData(Bytes.FromHexString("0x20")) + .PushData(Bytes.FromHexString("0x0")) + .Op(Instruction.RETURN).Done; + + // Step 1: Hash the message + Hash256 messageHash = Keccak.Compute("Hello, world!"); + // Step 2: Sign the hash + Signature signature = chain.EthereumEcdsa.Sign(TestItem.PrivateKeyA, messageHash); + + Address contractAddress = await DeployEcRecoverContract(chain, TestItem.PrivateKeyB, EcRecoverCallerContractBytecode); + byte[] transactionData = GenerateTransactionDataForEcRecover(messageHash, signature); + + SystemTransaction tx = new() + { + Data = transactionData, + To = contractAddress, + SenderAddress = TestItem.PublicKeyB.Address + }; + tx.Hash = tx.CalculateHash(); + + TransactionWithSourceDetails txDetails = new() + { + Transaction = tx, + HadGasLimitInRequest = false, + HadNonceInRequest = false + }; + + SimulatePayload payload = new() + { + BlockStateCalls = + [ + new BlockStateCall + { + StateOverrides = new Dictionary + { + { EcRecoverPrecompile.Address, new AccountOverride { Code = code } } + }, + Calls = [txDetails] + } + ], + TraceTransfers = true + }; + + SimulateOutput result = chain.Bridge.Simulate(chain.BlockFinder.Head?.Header!, payload, CancellationToken.None); + + byte[] addressBytes = result.Items[0].Calls[0].ReturnData!.SliceWithZeroPaddingEmptyOnError(12, 20); + Address resultingAddress = new(addressBytes); + Assert.That(resultingAddress, Is.EqualTo(TestItem.AddressE)); + + //Check that initial VM is intact + Address? mainChainRpcAddress = EcRecoverCall(chain, TestItem.AddressB, transactionData, contractAddress); + Assert.That(mainChainRpcAddress, Is.EqualTo(TestItem.AddressA)); + } +} diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/NetModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/NetModuleTests.cs index baadbcb415f..f652a3ad149 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/NetModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/NetModuleTests.cs @@ -57,7 +57,6 @@ public async Task NetVersionSuccessTest() Substitute.For(), Substitute.For(), syncConfig, - Substitute.For(), Substitute.For(), Substitute.For(), Substitute.For()); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index 6868f02c725..231725b4b37 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -29,6 +29,7 @@ using FluentAssertions; using Nethermind.Consensus.Processing; using Nethermind.Core.Buffers; +using Nethermind.Facade.Eth; using Nethermind.State.Tracing; using NSubstitute; diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/RpcModuleProviderTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/RpcModuleProviderTests.cs index 980d8f169c2..707fff9b4e0 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/RpcModuleProviderTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/RpcModuleProviderTests.cs @@ -28,6 +28,12 @@ public void Initialize() _context = new JsonRpcContext(RpcEndpoint.Http); } + [TearDown] + public void TearDown() + { + _context?.Dispose(); + } + [Test] public void Module_provider_will_recognize_disabled_modules() { diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/SingletonModulePoolTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/SingletonModulePoolTests.cs index bc06fd5cb57..1ffb4b32cdb 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/SingletonModulePoolTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/SingletonModulePoolTests.cs @@ -24,6 +24,7 @@ using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Modules.Eth.FeeHistory; using Nethermind.JsonRpc.Modules.Eth.GasPrice; +using Nethermind.Config; namespace Nethermind.JsonRpc.Test.Modules { @@ -55,7 +56,8 @@ public Task Initialize() Substitute.For(), Substitute.For(), Substitute.For(), - Substitute.For()); + Substitute.For(), + new BlocksConfig().SecondsPerSlot); return Task.CompletedTask; } diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/SubscribeModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/SubscribeModuleTests.cs index 7e3248e927e..5134da7c20b 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/SubscribeModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/SubscribeModuleTests.cs @@ -137,7 +137,7 @@ private List GetLogsSubscriptionResult(Filter filter, BlockReplac _blockTree.BlockAddedToMain += Raise.EventWith(new object(), blockEventArgs); _receiptStorage.ReceiptsInserted += Raise.EventWith(new object(), blockEventArgs); - semaphoreSlim.Wait(TimeSpan.FromMilliseconds(100)); + semaphoreSlim.Wait(TimeSpan.FromMilliseconds(500)); subscriptionId = logsSubscription.Id; return jsonRpcResults; diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TestRpcBlockchain.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TestRpcBlockchain.cs index c112755087c..6fba1d025d9 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TestRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TestRpcBlockchain.cs @@ -29,6 +29,8 @@ using Nethermind.Wallet; using Nethermind.Config; +using Nethermind.Db; +using Nethermind.Facade.Simulate; using Nethermind.Synchronization.ParallelSync; using NSubstitute; @@ -58,14 +60,9 @@ public class TestRpcBlockchain : TestBlockchain public static Builder ForTest(T blockchain) where T : TestRpcBlockchain => new(blockchain); - public class Builder where T : TestRpcBlockchain + public class Builder(T blockchain) where T : TestRpcBlockchain { - private readonly TestRpcBlockchain _blockchain; - - public Builder(T blockchain) - { - _blockchain = blockchain; - } + private readonly TestRpcBlockchain _blockchain = blockchain; public Builder WithBlockchainBridge(IBlockchainBridge blockchainBridge) { @@ -108,31 +105,41 @@ public Builder WithConfig(IJsonRpcConfig config) return this; } - public async Task Build(ISpecProvider? specProvider = null, UInt256? initialValues = null) - { - return (T)(await _blockchain.Build(specProvider, initialValues)); - } + public async Task Build( + ISpecProvider? specProvider = null, + UInt256? initialValues = null) => + (T)(await _blockchain.Build(specProvider, initialValues, true)); } - protected override async Task Build(ISpecProvider? specProvider = null, UInt256? initialValues = null, bool addBlockOnStart = true) + protected override async Task Build( + ISpecProvider? specProvider = null, + UInt256? initialValues = null, + bool addBlockOnStart = true) { specProvider ??= new TestSpecProvider(Berlin.Instance); - await base.Build(specProvider, initialValues); + await base.Build(specProvider, initialValues, addBlockOnStart); IFilterStore filterStore = new FilterStore(); IFilterManager filterManager = new FilterManager(filterStore, BlockProcessor, TxPool, LimboLogs.Instance); - + var dbProvider = new ReadOnlyDbProvider(DbProvider, false); + IReadOnlyBlockTree? roBlockTree = BlockTree!.AsReadOnly(); ReadOnlyTxProcessingEnv processingEnv = new( WorldStateManager, - new ReadOnlyBlockTree(BlockTree), + roBlockTree, + SpecProvider, + LimboLogs.Instance); + SimulateReadOnlyBlocksProcessingEnvFactory simulateProcessingEnvFactory = new SimulateReadOnlyBlocksProcessingEnvFactory( + WorldStateManager, + roBlockTree, + new ReadOnlyDbProvider(dbProvider, true), SpecProvider, LimboLogs.Instance); + BlocksConfig blocksConfig = new BlocksConfig(); ReceiptFinder ??= ReceiptStorage; - Bridge ??= new BlockchainBridge(processingEnv, TxPool, ReceiptFinder, filterStore, filterManager, EthereumEcdsa, Timestamper, LogFinder, SpecProvider, new BlocksConfig(), false); + Bridge ??= new BlockchainBridge(processingEnv, simulateProcessingEnvFactory, TxPool, ReceiptFinder, filterStore, filterManager, EthereumEcdsa, Timestamper, LogFinder, SpecProvider, blocksConfig, false); BlockFinder ??= BlockTree; GasPriceOracle ??= new GasPriceOracle(BlockFinder, SpecProvider, LogManager); - ITxSigner txSigner = new WalletTxSigner(TestWallet, specProvider.ChainId); TxSealer = new TxSealer(txSigner, Timestamper); TxSender ??= new TxPoolSender(TxPool, TxSealer, NonceManager, EthereumEcdsa ?? new EthereumEcdsa(specProvider.ChainId, LogManager)); @@ -153,7 +160,8 @@ protected override async Task Build(ISpecProvider? specProvider GasPriceOracle, new EthSyncingInfo(BlockTree, ReceiptStorage, syncConfig, new StaticSelector(SyncMode.All), Substitute.For(), LogManager), - FeeHistoryOracle); + FeeHistoryOracle, + blocksConfig.SecondsPerSlot); return this; } diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs index f6e285624ad..239fef3b75c 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs @@ -63,8 +63,9 @@ public void Setup() _stateReader = new StateReader(trieStore, codeDb, LimboLogs.Instance); BlockhashProvider blockhashProvider = new(_blockTree, specProvider, stateProvider, LimboLogs.Instance); - VirtualMachine virtualMachine = new(blockhashProvider, specProvider, LimboLogs.Instance); - TransactionProcessor transactionProcessor = new(specProvider, stateProvider, virtualMachine, LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); + VirtualMachine virtualMachine = new(blockhashProvider, specProvider, codeInfoRepository, LimboLogs.Instance); + TransactionProcessor transactionProcessor = new(specProvider, stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _poSSwitcher = Substitute.For(); BlockProcessor blockProcessor = new( @@ -74,7 +75,6 @@ public void Setup() new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider), stateProvider, NullReceiptStorage.Instance, - NullWitnessCollector.Instance, new BlockhashStore(_blockTree, specProvider, stateProvider), transactionProcessor, LimboLogs.Instance); @@ -95,7 +95,7 @@ public void Setup() [Test] public void Can_trace_raw_parity_style() { - TraceRpcModule traceRpcModule = new(NullReceiptStorage.Instance, _tracer, _blockTree, _jsonRpcConfig, MainnetSpecProvider.Instance, LimboLogs.Instance, _stateReader); + TraceRpcModule traceRpcModule = new(NullReceiptStorage.Instance, _tracer, _blockTree, _jsonRpcConfig, _stateReader); ResultWrapper result = traceRpcModule.trace_rawTransaction(Bytes.FromHexString("f889808609184e72a00082271094000000000000000000000000000000000000000080a47f74657374320000000000000000000000000000000000000000000000000000006000571ca08a8bbf888cfa37bbf0bb965423625641fc956967b81d12e23709cead01446075a01ce999b56a8a88504be365442ea61239198e23d1fce7d00fcfc5cd3b44b7215f"), new[] { "trace" }); Assert.NotNull(result.Data); } @@ -103,7 +103,7 @@ public void Can_trace_raw_parity_style() [Test] public void Can_trace_raw_parity_style_berlin_tx() { - TraceRpcModule traceRpcModule = new(NullReceiptStorage.Instance, _tracer, _blockTree, _jsonRpcConfig, MainnetSpecProvider.Instance, LimboLogs.Instance, _stateReader); + TraceRpcModule traceRpcModule = new(NullReceiptStorage.Instance, _tracer, _blockTree, _jsonRpcConfig, _stateReader); ResultWrapper result = traceRpcModule.trace_rawTransaction(Bytes.FromHexString("01f85b821e8e8204d7847735940083030d408080853a60005500c080a0f43e70c79190701347517e283ef63753f6143a5225cbb500b14d98eadfb7616ba070893923d8a1fc97499f426524f9e82f8e0322dfac7c3d7e8a9eee515f0bcdc4"), new[] { "trace" }); Assert.NotNull(result.Data); } @@ -116,7 +116,7 @@ public void Should_return_correct_block_reward(bool isPostMerge) _blockTree!.SuggestBlock(block).Should().Be(AddBlockResult.Added); _poSSwitcher!.IsPostMerge(Arg.Any()).Returns(isPostMerge); - TraceRpcModule traceRpcModule = new(NullReceiptStorage.Instance, _tracer, _blockTree, _jsonRpcConfig, MainnetSpecProvider.Instance, LimboLogs.Instance, _stateReader); + TraceRpcModule traceRpcModule = new(NullReceiptStorage.Instance, _tracer, _blockTree, _jsonRpcConfig, _stateReader); ParityTxTraceFromStore[] result = traceRpcModule.trace_block(new BlockParameter(block.Number)).Data.ToArray(); if (isPostMerge) { diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TraceRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TraceRpcModuleTests.cs index 0e499183eb8..1fab4d08e2b 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TraceRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TraceRpcModuleTests.cs @@ -22,9 +22,12 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Tracing; using Nethermind.Consensus.Validators; +using Nethermind.Core.Crypto; using Nethermind.Db; using Nethermind.Evm; using Nethermind.Evm.Tracing.ParityStyle; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Facade.Eth; using Nethermind.Serialization.Json; using Nethermind.Specs.Forks; using Nethermind.Specs.Test; @@ -51,28 +54,33 @@ public async Task Build(ISpecProvider? specProvider = null, bool isAura = false) IReceiptFinder receiptFinder = new FullInfoReceiptFinder(Blockchain.ReceiptStorage, receiptsRecovery, Blockchain.BlockFinder); ReadOnlyTxProcessingEnv txProcessingEnv = new(Blockchain.WorldStateManager, Blockchain.BlockTree.AsReadOnly(), Blockchain.SpecProvider, Blockchain.LogManager); + IReadOnlyTxProcessingScope scope = txProcessingEnv.Build(Keccak.EmptyTreeHash); + RewardCalculator rewardCalculatorSource = new(Blockchain.SpecProvider); - IRewardCalculator rewardCalculator = rewardCalculatorSource.Get(txProcessingEnv.TransactionProcessor); + IRewardCalculator rewardCalculator = rewardCalculatorSource.Get(scope.TransactionProcessor); + + RpcBlockTransactionsExecutor rpcBlockTransactionsExecutor = new(scope.TransactionProcessor, scope.WorldState); + BlockProcessor.BlockValidationTransactionsExecutor executeBlockTransactionsExecutor = new(scope.TransactionProcessor, + scope.WorldState); - RpcBlockTransactionsExecutor rpcBlockTransactionsExecutor = new(txProcessingEnv.TransactionProcessor, txProcessingEnv.StateProvider); - BlockProcessor.BlockValidationTransactionsExecutor executeBlockTransactionsExecutor = new(txProcessingEnv.TransactionProcessor, - txProcessingEnv.StateProvider); ReadOnlyChainProcessingEnv CreateChainProcessingEnv(IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor) => new( - txProcessingEnv, + scope, Always.Valid, Blockchain.BlockPreprocessorStep, rewardCalculator, Blockchain.ReceiptStorage, Blockchain.SpecProvider, + Blockchain.BlockTree, + Blockchain.StateReader, Blockchain.LogManager, transactionsExecutor); ReadOnlyChainProcessingEnv traceProcessingEnv = CreateChainProcessingEnv(rpcBlockTransactionsExecutor); ReadOnlyChainProcessingEnv executeProcessingEnv = CreateChainProcessingEnv(executeBlockTransactionsExecutor); - Tracer tracer = new(txProcessingEnv.StateProvider, traceProcessingEnv.ChainProcessor, executeProcessingEnv.ChainProcessor); - TraceRpcModule = new TraceRpcModule(receiptFinder, tracer, Blockchain.BlockFinder, JsonRpcConfig, MainnetSpecProvider.Instance, LimboLogs.Instance, txProcessingEnv.StateReader); + Tracer tracer = new(scope.WorldState, traceProcessingEnv.ChainProcessor, executeProcessingEnv.ChainProcessor); + TraceRpcModule = new TraceRpcModule(receiptFinder, tracer, Blockchain.BlockFinder, JsonRpcConfig, txProcessingEnv.StateReader); for (int i = 1; i < 10; i++) { diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TransactionForRpcConverterTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TransactionForRpcConverterTests.cs index 9e1822b3e8e..6b6add97578 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TransactionForRpcConverterTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TransactionForRpcConverterTests.cs @@ -5,6 +5,7 @@ using FluentAssertions; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Test.Data; using Nethermind.Serialization.Json; diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/WitnessModuleRpcTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/WitnessModuleRpcTests.cs deleted file mode 100644 index 55791cb01ce..00000000000 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/WitnessModuleRpcTests.cs +++ /dev/null @@ -1,81 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Threading.Tasks; -using FluentAssertions; -using Nethermind.Blockchain; -using Nethermind.Blockchain.Find; -using Nethermind.Core; -using Nethermind.Core.Test.Builders; -using Nethermind.Crypto; -using Nethermind.Db; -using Nethermind.JsonRpc.Modules.Witness; -using Nethermind.Logging; -using Nethermind.State.Witnesses; -using NSubstitute; -using NUnit.Framework; - -namespace Nethermind.JsonRpc.Test.Modules -{ - public class WitnessModuleTests - { - private const string GetOneWitnessHashResponse = - "{\"jsonrpc\":\"2.0\",\"result\":[\"0xa2a9f03b9493046696099d27b2612b99497aa1f392ec966716ab393c715a5bb6\"],\"id\":67}"; - private const string BlockNotFoundResponse = - "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32001,\"message\":\"Block not found\"},\"id\":67}"; - private const string WitnessNotFoundResponse = - "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32002,\"message\":\"Witness unavailable\"},\"id\":67}"; - - private IBlockFinder _blockFinder = null!; - - private WitnessCollector _witnessRepository = null!; - private WitnessRpcModule _witnessRpcModule = null!; - - private Block _block = null!; - - - [SetUp] - public void Setup() - { - _block = Build.A.Block - .WithUncles(Build.A.BlockHeader.TestObject, Build.A.BlockHeader.TestObject).TestObject; - - _blockFinder = Substitute.For(); - _witnessRepository = new WitnessCollector(new MemDb(), LimboLogs.Instance); - _witnessRpcModule = new WitnessRpcModule(_witnessRepository, _blockFinder); - } - - [Test] - public async Task GetOneWitnessHash() - { - _blockFinder.FindHeader((BlockParameter)null!).ReturnsForAnyArgs(_block.Header); - _blockFinder.Head.Returns(_block); - - using IDisposable tracker = _witnessRepository.TrackOnThisThread(); - _witnessRepository.Add(_block.Hash!); - _witnessRepository.Persist(_block.Hash!); - - string serialized = await RpcTest.TestSerializedRequest(_witnessRpcModule, "get_witnesses", _block.CalculateHash().ToString()); - serialized.Should().Be(GetOneWitnessHashResponse); - } - - [Test] - public async Task BlockNotFound() - { - string serialized = await RpcTest.TestSerializedRequest(_witnessRpcModule, "get_witnesses", "0x583"); - serialized.Should().Be(BlockNotFoundResponse); - } - - [Test] - public async Task WitnessNotFound() - { - _blockFinder.FindHeader((BlockParameter)null!).ReturnsForAnyArgs(_block.Header); - _blockFinder.Head.Returns(_block); - - string serialized = await RpcTest.TestSerializedRequest(_witnessRpcModule, "get_witnesses", "0x1"); - serialized.Should().Be(WitnessNotFoundResponse); - - } - } -} diff --git a/src/Nethermind/Nethermind.JsonRpc.TraceStore.Test/TraceStoreRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.TraceStore.Test/TraceStoreRpcModuleTests.cs index dbe61f725b1..8c82d299e41 100644 --- a/src/Nethermind/Nethermind.JsonRpc.TraceStore.Test/TraceStoreRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.TraceStore.Test/TraceStoreRpcModuleTests.cs @@ -12,6 +12,7 @@ using Nethermind.Core.Test.Builders; using Nethermind.Db; using Nethermind.Evm.Tracing.ParityStyle; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Modules.Trace; using Nethermind.Logging; diff --git a/src/Nethermind/Nethermind.JsonRpc.TraceStore/TraceStoreRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc.TraceStore/TraceStoreRpcModule.cs index b01b95b265d..d9267e28112 100644 --- a/src/Nethermind/Nethermind.JsonRpc.TraceStore/TraceStoreRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc.TraceStore/TraceStoreRpcModule.cs @@ -7,6 +7,7 @@ using Nethermind.Core.Crypto; using Nethermind.Db; using Nethermind.Evm.Tracing.ParityStyle; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Modules; using Nethermind.JsonRpc.Modules.Trace; diff --git a/src/Nethermind/Nethermind.JsonRpc/Client/BasicJsonRpcClient.cs b/src/Nethermind/Nethermind.JsonRpc/Client/BasicJsonRpcClient.cs index 9570d9a4e2d..a75fca723c2 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Client/BasicJsonRpcClient.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Client/BasicJsonRpcClient.cs @@ -14,19 +14,22 @@ namespace Nethermind.JsonRpc.Client { - public class BasicJsonRpcClient : IJsonRpcClient + public class BasicJsonRpcClient : IJsonRpcClient, IDisposable { private readonly HttpClient _client; private readonly IJsonSerializer _jsonSerializer; private readonly ILogger _logger; - public BasicJsonRpcClient(Uri uri, IJsonSerializer jsonSerializer, ILogManager logManager) + public BasicJsonRpcClient(Uri uri, IJsonSerializer jsonSerializer, ILogManager logManager) : + this(uri, jsonSerializer, logManager, /*support long block traces better, default 100s might be too small*/ TimeSpan.FromMinutes(5)) + { } + public BasicJsonRpcClient(Uri uri, IJsonSerializer jsonSerializer, ILogManager logManager, TimeSpan timeout) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _jsonSerializer = jsonSerializer; _client = new HttpClient { BaseAddress = uri }; - _client.Timeout = TimeSpan.FromMinutes(5); // support long block traces better, default 100s might be too small + _client.Timeout = timeout; _client.DefaultRequestHeaders.Accept.Clear(); _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); AddAuthorizationHeader(); @@ -58,21 +61,15 @@ public async Task Post(string method, params object[] parameters) return jsonResponse.Result; } - catch (NotSupportedException) + catch (Exception e) when + ( + e is not TaskCanceledException && + e is not HttpRequestException && + e is not NotImplementedException && + e is not NotSupportedException + ) { - throw; - } - catch (NotImplementedException) - { - throw; - } - catch (HttpRequestException) - { - throw; - } - catch (Exception) - { - throw new DataException($"Cannot deserialize {responseString}"); + throw new DataException($"Cannot deserialize {responseString}", e); } } @@ -105,5 +102,10 @@ private void AddAuthorizationHeader() private static string Base64Encode(string plainText) => Convert.ToBase64String(Encoding.UTF8.GetBytes(plainText)); + + public virtual void Dispose() + { + _client.Dispose(); + } } } diff --git a/src/Nethermind/Nethermind.JsonRpc/Data/AccessListForRpc.cs b/src/Nethermind/Nethermind.JsonRpc/Data/AccessListForRpc.cs index 84e569a4965..7c21797de61 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Data/AccessListForRpc.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Data/AccessListForRpc.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System.Collections.Generic; +using Nethermind.Facade.Eth; using Nethermind.Int256; namespace Nethermind.JsonRpc.Data diff --git a/src/Nethermind/Nethermind.JsonRpc/Data/TransactionForRpcWithTraceTypes.cs b/src/Nethermind/Nethermind.JsonRpc/Data/TransactionForRpcWithTraceTypes.cs index 061f0b02f11..5f5c98acaf1 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Data/TransactionForRpcWithTraceTypes.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Data/TransactionForRpcWithTraceTypes.cs @@ -4,6 +4,7 @@ using System; using System.Text.Json; using System.Text.Json.Serialization; +using Nethermind.Facade.Eth; namespace Nethermind.JsonRpc.Data { diff --git a/src/Nethermind/Nethermind.JsonRpc/ErrorType.cs b/src/Nethermind/Nethermind.JsonRpc/ErrorCodes.cs similarity index 72% rename from src/Nethermind/Nethermind.JsonRpc/ErrorType.cs rename to src/Nethermind/Nethermind.JsonRpc/ErrorCodes.cs index 5af200cf91b..3990b33b775 100644 --- a/src/Nethermind/Nethermind.JsonRpc/ErrorType.cs +++ b/src/Nethermind/Nethermind.JsonRpc/ErrorCodes.cs @@ -86,5 +86,30 @@ public static class ErrorCodes /// Unknown block error ///
public const int UnknownBlockError = -39001; + + /// + /// Invalid RPC simulate call block number out of order + /// + public const int InvalidInputBlocksOutOfOrder = -38020; + + /// + /// Invalid RPC simulate call Block timestamp in sequence did not increase + /// + public const int BlockTimestampNotIncreased = -38021; + + /// + /// Invalid RPC simulate call containing too many blocks + /// + public const int InvalidInputTooManyBlocks = -38026; + + /// + /// Invalid RPC simulate call Not enough gas provided to pay for intrinsic gas for a transaction + /// + public const int InsufficientIntrinsicGas = -38013; + + /// + /// Invalid RPC simulate call transaction + /// + public const int InvalidTransaction = -38014; } } diff --git a/src/Nethermind/Nethermind.JsonRpc/IJsonRpcConfig.cs b/src/Nethermind/Nethermind.JsonRpc/IJsonRpcConfig.cs index c20dc47e593..e52d9d1e265 100644 --- a/src/Nethermind/Nethermind.JsonRpc/IJsonRpcConfig.cs +++ b/src/Nethermind/Nethermind.JsonRpc/IJsonRpcConfig.cs @@ -106,6 +106,12 @@ public interface IJsonRpcConfig : IConfig [ConfigItem(Description = "The max length of HTTP request body, in bytes.", DefaultValue = "30000000")] long? MaxRequestBodySize { get; set; } + + [ConfigItem( + Description = "The max number of logs per response. For method `eth_getLogs`. If 0 then no limit.", + DefaultValue = "20000")] + public int MaxLogsPerResponse { get; set; } + [ConfigItem( Description = """ The number of concurrent instances for non-sharable calls: @@ -155,6 +161,9 @@ public interface IJsonRpcConfig : IConfig [ConfigItem(Description = "The max batch size limit for batched JSON-RPC calls.", DefaultValue = "33554432")] long? MaxBatchResponseBodySize { get; set; } + [ConfigItem(Description = "The max blocks count limit for eth_simulate JSON-RPC calls.", DefaultValue = "256")] + long? MaxSimulateBlocksCap { get; set; } + [ConfigItem(Description = "The error margin used in eth_estimateGas expressed in basis points.", DefaultValue = "150")] int EstimateErrorMargin { get; set; } } diff --git a/src/Nethermind/Nethermind.JsonRpc/JsonRpcConfig.cs b/src/Nethermind/Nethermind.JsonRpc/JsonRpcConfig.cs index 1e68d3dbc52..26d3d32760e 100644 --- a/src/Nethermind/Nethermind.JsonRpc/JsonRpcConfig.cs +++ b/src/Nethermind/Nethermind.JsonRpc/JsonRpcConfig.cs @@ -37,6 +37,7 @@ public int WebSocketsPort public bool BufferResponses { get; set; } public string CallsFilterFilePath { get; set; } = "Data/jsonrpc.filter"; public long? MaxRequestBodySize { get; set; } = 30000000; + public int MaxLogsPerResponse { get; set; } = 20_000; public int? EthModuleConcurrentInstances { get; set; } = null; public string JwtSecretFile { get; set; } = "keystore/jwt-secret"; public bool UnsecureDevNoRpcAuthentication { get; set; } @@ -54,6 +55,7 @@ public int WebSocketsPort public string[] EngineEnabledModules { get; set; } = ModuleType.DefaultEngineModules.ToArray(); public int MaxBatchSize { get; set; } = 1024; public long? MaxBatchResponseBodySize { get; set; } = 32.MiB(); + public long? MaxSimulateBlocksCap { get; set; } = 256; public int EstimateErrorMargin { get; set; } = 150; }; }; diff --git a/src/Nethermind/Nethermind.JsonRpc/JsonRpcContext.cs b/src/Nethermind/Nethermind.JsonRpc/JsonRpcContext.cs index 9f130a4bee6..c145607924d 100644 --- a/src/Nethermind/Nethermind.JsonRpc/JsonRpcContext.cs +++ b/src/Nethermind/Nethermind.JsonRpc/JsonRpcContext.cs @@ -1,12 +1,16 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; +using System.Threading; using Nethermind.JsonRpc.Modules; namespace Nethermind.JsonRpc { - public class JsonRpcContext + public class JsonRpcContext : IDisposable { + public static AsyncLocal Current { get; private set; } = new(); + public static JsonRpcContext Http(JsonRpcUrl url) => new(RpcEndpoint.Http, url: url); public static JsonRpcContext WebSocket(JsonRpcUrl url) => new(RpcEndpoint.Ws, url: url); @@ -16,11 +20,19 @@ public JsonRpcContext(RpcEndpoint rpcEndpoint, IJsonRpcDuplexClient? duplexClien DuplexClient = duplexClient; Url = url; IsAuthenticated = Url?.IsAuthenticated == true || RpcEndpoint == RpcEndpoint.IPC; + Current.Value = this; } public RpcEndpoint RpcEndpoint { get; } public IJsonRpcDuplexClient? DuplexClient { get; } public JsonRpcUrl? Url { get; } public bool IsAuthenticated { get; } + public void Dispose() + { + if (Current.Value == this) + { + Current.Value = null; + } + } } } diff --git a/src/Nethermind/Nethermind.JsonRpc/JsonRpcProcessor.cs b/src/Nethermind/Nethermind.JsonRpc/JsonRpcProcessor.cs index 99f81d57751..bcc2a257cab 100644 --- a/src/Nethermind/Nethermind.JsonRpc/JsonRpcProcessor.cs +++ b/src/Nethermind/Nethermind.JsonRpc/JsonRpcProcessor.cs @@ -241,6 +241,8 @@ JsonRpcResult GetParsingError(string error, Exception? exception = null) yield return deserializationFailureResult.Value; break; } + + buffer = buffer.TrimStart(); } // Checks if the deserialization failed diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugBridge.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugBridge.cs index 788ce98e957..137939bcf6a 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugBridge.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugBridge.cs @@ -177,7 +177,7 @@ public IReadOnlyCollection GetBlockTrace(Rlp blockRlp, Cancella public byte[] GetBlockRlp(Hash256 blockHash) { BlockHeader? header = _blockTree.FindHeader(blockHash); - if (header == null) return null; + if (header is null) return null; return _blockStore.GetRaw(header.Number, blockHash); } diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugModuleFactory.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugModuleFactory.cs index 925d8e98bb4..3716de73a7d 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugModuleFactory.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugModuleFactory.cs @@ -12,6 +12,7 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Tracing; using Nethermind.Consensus.Validators; +using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Db; using Nethermind.Evm.TransactionProcessing; @@ -84,21 +85,25 @@ public override IDebugRpcModule Create() _specProvider, _logManager); - ChangeableTransactionProcessorAdapter transactionProcessorAdapter = new(txEnv.TransactionProcessor); - BlockProcessor.BlockValidationTransactionsExecutor transactionsExecutor = new(transactionProcessorAdapter, txEnv.StateProvider); + IReadOnlyTxProcessingScope scope = txEnv.Build(Keccak.EmptyTreeHash); + + ChangeableTransactionProcessorAdapter transactionProcessorAdapter = new(scope.TransactionProcessor); + BlockProcessor.BlockValidationTransactionsExecutor transactionsExecutor = new(transactionProcessorAdapter, scope.WorldState); ReadOnlyChainProcessingEnv chainProcessingEnv = new( - txEnv, + scope, _blockValidator, _recoveryStep, - _rewardCalculatorSource.Get(txEnv.TransactionProcessor), + _rewardCalculatorSource.Get(scope.TransactionProcessor), _receiptStorage, _specProvider, + _blockTree, + _worldStateManager.GlobalStateReader, _logManager, transactionsExecutor); GethStyleTracer tracer = new( chainProcessingEnv.ChainProcessor, - chainProcessingEnv.StateProvider, + scope.WorldState, _receiptStorage, _blockTree, _specProvider, diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugRpcModule.cs index 2c8813c7dbd..2de6e774830 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugRpcModule.cs @@ -18,6 +18,7 @@ using System.Collections.Generic; using Nethermind.JsonRpc.Modules.Eth; using Nethermind.Core.Specs; +using Nethermind.Facade.Eth; namespace Nethermind.JsonRpc.Modules.DebugModule; diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugRpcModule.cs index 4a057892b70..6615e53f408 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugRpcModule.cs @@ -6,6 +6,7 @@ using Nethermind.Blockchain.Find; using Nethermind.Core.Crypto; using Nethermind.Evm.Tracing.GethStyle; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Modules.Eth; using Nethermind.Synchronization.Reporting; diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BadBlock.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BadBlock.cs index 3844a4a20ea..de2af695562 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BadBlock.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/BadBlock.cs @@ -5,6 +5,7 @@ using Nethermind.Core; using Nethermind.Serialization.Rlp; using Nethermind.Core.Crypto; +using Nethermind.Facade.Eth; namespace Nethermind.JsonRpc.Modules.Eth; diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthModuleFactory.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthModuleFactory.cs index 7f174d89081..6a8bc34d9b7 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthModuleFactory.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthModuleFactory.cs @@ -8,7 +8,6 @@ using Nethermind.Core.Specs; using Nethermind.Facade; using Nethermind.Facade.Eth; -using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Modules.Eth.GasPrice; using Nethermind.JsonRpc.Modules.Eth.FeeHistory; using Nethermind.Logging; @@ -17,6 +16,7 @@ using Nethermind.Wallet; using System.Text.Json; using System.Text.Json.Serialization; +using Nethermind.Config; namespace Nethermind.JsonRpc.Modules.Eth { @@ -33,7 +33,8 @@ public class EthModuleFactory( IReceiptStorage receiptStorage, IGasPriceOracle gasPriceOracle, IEthSyncingInfo ethSyncingInfo, - IFeeHistoryOracle feeHistoryOracle) + IFeeHistoryOracle feeHistoryOracle, + ulong secondsPerSlot) : ModuleFactoryBase { private readonly IReadOnlyBlockTree _blockTree = blockTree.AsReadOnly(); @@ -65,7 +66,8 @@ public override IEthRpcModule Create() _specProvider, _gasPriceOracle, _ethSyncingInfo, - _feeHistoryOracle); + _feeHistoryOracle, + secondsPerSlot); } } } diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthRpcModule.TransactionExecutor.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthRpcModule.TransactionExecutor.cs index afc281f7f6d..6da17831925 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthRpcModule.TransactionExecutor.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthRpcModule.TransactionExecutor.cs @@ -11,110 +11,81 @@ using Nethermind.Core.Extensions; using Nethermind.Evm; using Nethermind.Facade; +using Nethermind.Facade.Eth; using Nethermind.Int256; using Nethermind.JsonRpc.Data; using Nethermind.Specs.Forks; namespace Nethermind.JsonRpc.Modules.Eth { + //General executor public partial class EthRpcModule { - private abstract class TxExecutor + // Single call executor + private abstract class TxExecutor(IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IJsonRpcConfig rpcConfig) + : ExecutorBase(blockchainBridge, blockFinder, rpcConfig) { - protected readonly IBlockchainBridge _blockchainBridge; - private readonly IBlockFinder _blockFinder; - private readonly IJsonRpcConfig _rpcConfig; + private bool NoBaseFee { get; set; } - protected TxExecutor(IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IJsonRpcConfig rpcConfig) - { - _blockchainBridge = blockchainBridge; - _blockFinder = blockFinder; - _rpcConfig = rpcConfig; - } + protected override Transaction Prepare(TransactionForRpc call) => call.ToTransaction(_blockchainBridge.GetChainId()); - public ResultWrapper ExecuteTx( - TransactionForRpc transactionCall, - BlockParameter? blockParameter) + protected override ResultWrapper Execute(BlockHeader header, Transaction tx, CancellationToken token) { - SearchResult searchResult = _blockFinder.SearchForHeader(blockParameter); - if (searchResult.IsError) - { - return ResultWrapper.Fail(searchResult); - } - - BlockHeader header = searchResult.Object; - if (!HasStateForBlock(_blockchainBridge, header)) - { - return ResultWrapper.Fail($"No state available for block {header.Hash}", - ErrorCodes.ResourceUnavailable); - } - BlockHeader clonedHeader = header.Clone(); - var noBaseFee = !ShouldSetBaseFee(transactionCall); - if (noBaseFee) + if (NoBaseFee) { clonedHeader.BaseFeePerGas = 0; } - - transactionCall.EnsureDefaults(_rpcConfig.GasCap); - - using CancellationTokenSource cancellationTokenSource = new(_rpcConfig.Timeout); - Transaction tx = transactionCall.ToTransaction(_blockchainBridge.GetChainId()); if (tx.IsContractCreation && tx.DataLength == 0) { - return ResultWrapper.Fail("Contract creation without any data provided.", - ErrorCodes.InvalidInput); + return ResultWrapper.Fail("Contract creation without any data provided.", ErrorCodes.InvalidInput); } - - return ExecuteTx(clonedHeader, tx, cancellationTokenSource.Token); + return ExecuteTx(clonedHeader, tx, token); } - private static bool ShouldSetBaseFee(TransactionForRpc t) + private static bool ShouldSetBaseFee(TransactionForRpc t) => + // x?.IsZero == false <=> x > 0 + t.GasPrice?.IsZero == false || t.MaxFeePerGas?.IsZero == false || t.MaxPriorityFeePerGas?.IsZero == false; + + public override ResultWrapper Execute( + TransactionForRpc transactionCall, + BlockParameter? blockParameter) { - return - t.GasPrice > 0 || t.MaxFeePerGas > 0 || t.MaxPriorityFeePerGas > 0; + NoBaseFee = !ShouldSetBaseFee(transactionCall); + transactionCall.EnsureDefaults(_rpcConfig.GasCap); + return base.Execute(transactionCall, blockParameter); } + public ResultWrapper ExecuteTx(TransactionForRpc transactionCall, BlockParameter? blockParameter) => Execute(transactionCall, blockParameter); + protected abstract ResultWrapper ExecuteTx(BlockHeader header, Transaction tx, CancellationToken token); - protected static ResultWrapper GetInputError(BlockchainBridge.CallOutput result) => + protected ResultWrapper GetInputError(CallOutput result) => ResultWrapper.Fail(result.Error, ErrorCodes.InvalidInput); } - private class CallTxExecutor : TxExecutor + private class CallTxExecutor(IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IJsonRpcConfig rpcConfig) + : TxExecutor(blockchainBridge, blockFinder, rpcConfig) { - public CallTxExecutor(IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IJsonRpcConfig rpcConfig) - : base(blockchainBridge, blockFinder, rpcConfig) - { - } - protected override ResultWrapper ExecuteTx(BlockHeader header, Transaction tx, CancellationToken token) { - BlockchainBridge.CallOutput result = _blockchainBridge.Call(header, tx, token); + CallOutput result = _blockchainBridge.Call(header, tx, token); - if (result.Error is null) - { - return ResultWrapper.Success(result.OutputData.ToHexString(true)); - } - - return result.InputError - ? GetInputError(result) - : ResultWrapper.Fail("VM execution error.", ErrorCodes.ExecutionError, result.Error); + return result.Error is null + ? ResultWrapper.Success(result.OutputData.ToHexString(true)) + : TryGetInputError(result) ?? ResultWrapper.Fail("VM execution error.", ErrorCodes.ExecutionError, result.Error); } + } - private class EstimateGasTxExecutor : TxExecutor + private class EstimateGasTxExecutor(IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IJsonRpcConfig rpcConfig) + : TxExecutor(blockchainBridge, blockFinder, rpcConfig) { - private readonly int _errorMargin; - public EstimateGasTxExecutor(IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IJsonRpcConfig rpcConfig) - : base(blockchainBridge, blockFinder, rpcConfig) - { - _errorMargin = rpcConfig.EstimateErrorMargin; - } + private readonly int _errorMargin = rpcConfig.EstimateErrorMargin; protected override ResultWrapper ExecuteTx(BlockHeader header, Transaction tx, CancellationToken token) { - BlockchainBridge.CallOutput result = _blockchainBridge.EstimateGas(header, tx, _errorMargin, token); + CallOutput result = _blockchainBridge.EstimateGas(header, tx, _errorMargin, token); if (result.Error is null) { @@ -127,19 +98,12 @@ public EstimateGasTxExecutor(IBlockchainBridge blockchainBridge, IBlockFinder bl } } - private class CreateAccessListTxExecutor : TxExecutor + private class CreateAccessListTxExecutor(IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IJsonRpcConfig rpcConfig, bool optimize) + : TxExecutor(blockchainBridge, blockFinder, rpcConfig) { - private readonly bool _optimize; - - public CreateAccessListTxExecutor(IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IJsonRpcConfig rpcConfig, bool optimize) - : base(blockchainBridge, blockFinder, rpcConfig) - { - _optimize = optimize; - } - protected override ResultWrapper ExecuteTx(BlockHeader header, Transaction tx, CancellationToken token) { - BlockchainBridge.CallOutput result = _blockchainBridge.CreateAccessList(header, tx, token, _optimize); + CallOutput result = _blockchainBridge.CreateAccessList(header, tx, token, optimize); if (result.Error is null) { @@ -151,13 +115,13 @@ public CreateAccessListTxExecutor(IBlockchainBridge blockchainBridge, IBlockFind : ResultWrapper.Fail(result.Error, ErrorCodes.ExecutionError, new AccessListForRpc(GetResultAccessList(tx, result), GetResultGas(tx, result))); } - private static IEnumerable GetResultAccessList(Transaction tx, BlockchainBridge.CallOutput result) + private static IEnumerable GetResultAccessList(Transaction tx, CallOutput result) { AccessList? accessList = result.AccessList ?? tx.AccessList; return accessList is null ? Enumerable.Empty() : AccessListItemForRpc.FromAccessList(accessList); } - private static UInt256 GetResultGas(Transaction transaction, BlockchainBridge.CallOutput result) + private static UInt256 GetResultGas(Transaction transaction, CallOutput result) { long gas = result.GasSpent; if (result.AccessList is not null) diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthRpcModule.cs index 290f3c22ab8..6abec26637d 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/EthRpcModule.cs @@ -12,6 +12,7 @@ using Nethermind.Blockchain.Find; using Nethermind.Blockchain.Receipts; using Nethermind.Core; +using Nethermind.Core.Collections; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; @@ -19,6 +20,7 @@ using Nethermind.Facade; using Nethermind.Facade.Eth; using Nethermind.Facade.Filters; +using Nethermind.Facade.Proxy.Models.Simulate; using Nethermind.Int256; using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Modules.Eth.FeeHistory; @@ -38,58 +40,43 @@ namespace Nethermind.JsonRpc.Modules.Eth; -public partial class EthRpcModule : IEthRpcModule +public partial class EthRpcModule( + IJsonRpcConfig rpcConfig, + IBlockchainBridge blockchainBridge, + IBlockFinder blockFinder, + IReceiptFinder receiptFinder, + IStateReader stateReader, + ITxPool txPool, + ITxSender txSender, + IWallet wallet, + ILogManager logManager, + ISpecProvider specProvider, + IGasPriceOracle gasPriceOracle, + IEthSyncingInfo ethSyncingInfo, + IFeeHistoryOracle feeHistoryOracle, + ulong? secondsPerSlot) : IEthRpcModule { - private readonly Encoding _messageEncoding = Encoding.UTF8; - private readonly IJsonRpcConfig _rpcConfig; - private readonly IBlockchainBridge _blockchainBridge; - private readonly IBlockFinder _blockFinder; - private readonly IReceiptFinder _receiptFinder; - private readonly IStateReader _stateReader; - private readonly ITxPool _txPoolBridge; - private readonly ITxSender _txSender; - private readonly IWallet _wallet; - private readonly ISpecProvider _specProvider; - private readonly ILogger _logger; - private readonly IGasPriceOracle _gasPriceOracle; - private readonly IEthSyncingInfo _ethSyncingInfo; - - private readonly IFeeHistoryOracle _feeHistoryOracle; + protected readonly Encoding _messageEncoding = Encoding.UTF8; + protected readonly IJsonRpcConfig _rpcConfig = rpcConfig ?? throw new ArgumentNullException(nameof(rpcConfig)); + protected readonly IBlockchainBridge _blockchainBridge = blockchainBridge ?? throw new ArgumentNullException(nameof(blockchainBridge)); + protected readonly IBlockFinder _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); + protected readonly IReceiptFinder _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); + protected readonly IStateReader _stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader)); + protected readonly ITxPool _txPoolBridge = txPool ?? throw new ArgumentNullException(nameof(txPool)); + protected readonly ITxSender _txSender = txSender ?? throw new ArgumentNullException(nameof(txSender)); + protected readonly IWallet _wallet = wallet ?? throw new ArgumentNullException(nameof(wallet)); + protected readonly ISpecProvider _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); + protected readonly ILogger _logger = logManager.GetClassLogger(); + protected readonly IGasPriceOracle _gasPriceOracle = gasPriceOracle ?? throw new ArgumentNullException(nameof(gasPriceOracle)); + protected readonly IEthSyncingInfo _ethSyncingInfo = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo)); + protected readonly IFeeHistoryOracle _feeHistoryOracle = feeHistoryOracle ?? throw new ArgumentNullException(nameof(feeHistoryOracle)); + protected readonly ulong _secondsPerSlot = secondsPerSlot ?? throw new ArgumentNullException(nameof(secondsPerSlot)); + private static bool HasStateForBlock(IBlockchainBridge blockchainBridge, BlockHeader header) { return blockchainBridge.HasStateForRoot(header.StateRoot!); } - public EthRpcModule( - IJsonRpcConfig rpcConfig, - IBlockchainBridge blockchainBridge, - IBlockFinder blockFinder, - IReceiptFinder receiptFinder, - IStateReader stateReader, - ITxPool txPool, - ITxSender txSender, - IWallet wallet, - ILogManager logManager, - ISpecProvider specProvider, - IGasPriceOracle gasPriceOracle, - IEthSyncingInfo ethSyncingInfo, - IFeeHistoryOracle feeHistoryOracle) - { - _logger = logManager.GetClassLogger(); - _rpcConfig = rpcConfig ?? throw new ArgumentNullException(nameof(rpcConfig)); - _blockchainBridge = blockchainBridge ?? throw new ArgumentNullException(nameof(blockchainBridge)); - _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); - _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); - _stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader)); - _txPoolBridge = txPool ?? throw new ArgumentNullException(nameof(txPool)); - _txSender = txSender ?? throw new ArgumentNullException(nameof(txSender)); - _wallet = wallet ?? throw new ArgumentNullException(nameof(wallet)); - _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); - _gasPriceOracle = gasPriceOracle ?? throw new ArgumentNullException(nameof(gasPriceOracle)); - _ethSyncingInfo = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo)); - _feeHistoryOracle = feeHistoryOracle ?? throw new ArgumentNullException(nameof(feeHistoryOracle)); - } - public ResultWrapper eth_protocolVersion() { int highestVersion = P2PProtocolInfoProvider.GetHighestVersionOfEthProtocol(); @@ -193,7 +180,7 @@ public ResultWrapper eth_getStorageAt(Address address, UInt256 positionI return ResultWrapper.Success(storage.IsEmpty ? Bytes32.Zero.Unwrap() : storage!.PadLeft(32)); } - public Task> eth_getTransactionCount(Address address, BlockParameter blockParameter) + public Task> eth_getTransactionCount(Address address, BlockParameter? blockParameter) { if (blockParameter == BlockParameter.Pending) { @@ -233,11 +220,6 @@ public Task> eth_getTransactionCount(Address address, Blo : ResultWrapper.Success((UInt256)searchResult.Object!.Transactions.Length); } - public ResultWrapper eth_getBlockReceipts(BlockParameter blockParameter) - { - return _receiptFinder.GetBlockReceipts(blockParameter, _blockFinder, _specProvider); - } - public ResultWrapper eth_getUncleCountByBlockHash(Hash256 blockHash) { SearchResult searchResult = _blockFinder.SearchForBlock(new BlockParameter(blockHash)); @@ -295,14 +277,14 @@ public ResultWrapper eth_sign(Address addressData, byte[] message) return ResultWrapper.Success(sig.Bytes); } - public Task> eth_sendTransaction(TransactionForRpc rpcTx) + public virtual Task> eth_sendTransaction(TransactionForRpc rpcTx) { Transaction tx = rpcTx.ToTransactionWithDefaults(_blockchainBridge.GetChainId()); TxHandlingOptions options = rpcTx.Nonce is null ? TxHandlingOptions.ManagedNonce : TxHandlingOptions.None; return SendTx(tx, options); } - public async Task> eth_sendRawTransaction(byte[] transaction) + public virtual async Task> eth_sendRawTransaction(byte[] transaction) { try { @@ -343,7 +325,11 @@ public ResultWrapper eth_call(TransactionForRpc transactionCall, BlockPa new CallTxExecutor(_blockchainBridge, _blockFinder, _rpcConfig) .ExecuteTx(transactionCall, blockParameter); - public ResultWrapper eth_estimateGas(TransactionForRpc transactionCall, BlockParameter blockParameter) => + public ResultWrapper> eth_simulateV1(SimulatePayload payload, BlockParameter? blockParameter = null) => + new SimulateTxExecutor(_blockchainBridge, _blockFinder, _rpcConfig, _secondsPerSlot) + .Execute(payload, blockParameter); + + public ResultWrapper eth_estimateGas(TransactionForRpc transactionCall, BlockParameter? blockParameter) => new EstimateGasTxExecutor(_blockchainBridge, _blockFinder, _rpcConfig) .ExecuteTx(transactionCall, blockParameter); @@ -468,18 +454,6 @@ public ResultWrapper eth_getTransactionByBlockNumberAndIndex( return ResultWrapper.Success(transactionModel); } - public Task> eth_getTransactionReceipt(Hash256 txHash) - { - (TxReceipt? receipt, TxGasInfo? gasInfo, int logIndexStart) = _blockchainBridge.GetReceiptAndGasInfo(txHash); - if (receipt is null || gasInfo is null) - { - return Task.FromResult(ResultWrapper.Success(null)); - } - - if (_logger.IsTrace) _logger.Trace($"eth_getTransactionReceipt request {txHash}, result: {txHash}"); - return Task.FromResult(ResultWrapper.Success(new(txHash, receipt, gasInfo.Value, logIndexStart))); - } - public ResultWrapper eth_getUncleByBlockHashAndIndex(Hash256 blockHash, UInt256 positionIndex) { return GetUncle(new BlockParameter(blockHash), positionIndex); @@ -642,11 +616,28 @@ public ResultWrapper> eth_getLogs(Filter filter) try { - LogFilter logFilter = _blockchainBridge.GetFilter(filter.FromBlock, filter.ToBlock, - filter.Address, filter.Topics); + LogFilter logFilter = _blockchainBridge.GetFilter(filter.FromBlock, filter.ToBlock, filter.Address, filter.Topics); + IEnumerable filterLogs = _blockchainBridge.GetLogs(logFilter, fromBlock, toBlock, cancellationToken); - return ResultWrapper>.Success(GetLogs(filterLogs, cancellationTokenSource)); + ArrayPoolList logs = new(_rpcConfig.MaxLogsPerResponse); + + using (cancellationTokenSource) + { + foreach (FilterLog log in filterLogs) + { + logs.Add(log); + if (JsonRpcContext.Current.Value?.IsAuthenticated != true // not authenticated + && _rpcConfig.MaxLogsPerResponse != 0 // not unlimited + && logs.Count > _rpcConfig.MaxLogsPerResponse) + { + logs.Dispose(); + return ResultWrapper>.Fail($"Too many logs requested. Max logs per response is {_rpcConfig.MaxLogsPerResponse}.", ErrorCodes.LimitExceeded); + } + } + } + + return ResultWrapper>.Success(logs); } catch (ResourceNotFoundException exception) { @@ -730,4 +721,22 @@ private static ResultWrapper GetFailureResult(ResourceNotFound private ResultWrapper GetStateFailureResult(BlockHeader header) => ResultWrapper.Fail($"No state available for block {header.ToString(BlockHeader.Format.FullHashAndNumber)}", ErrorCodes.ResourceUnavailable, _ethSyncingInfo.SyncMode.HaveNotSyncedStateYet()); + + public ResultWrapper eth_getTransactionReceipt(Hash256 txHash) + { + (TxReceipt? receipt, TxGasInfo? gasInfo, int logIndexStart) = _blockchainBridge.GetReceiptAndGasInfo(txHash); + if (receipt is null || gasInfo is null) + { + return ResultWrapper.Success(null); + } + + if (_logger.IsTrace) _logger.Trace($"eth_getTransactionReceipt request {txHash}, result: {txHash}"); + return ResultWrapper.Success(new(txHash, receipt, gasInfo.Value, logIndexStart)); + } + + + public ResultWrapper eth_getBlockReceipts(BlockParameter blockParameter) + { + return _receiptFinder.GetBlockReceipts(blockParameter, _blockFinder, _specProvider); + } } diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/ExecutorBase.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/ExecutorBase.cs new file mode 100644 index 00000000000..2e04d10b455 --- /dev/null +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/ExecutorBase.cs @@ -0,0 +1,49 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Threading; +using Nethermind.Blockchain.Find; +using Nethermind.Core; +using Nethermind.Facade; + +namespace Nethermind.JsonRpc.Modules.Eth; + +public abstract class ExecutorBase +{ + protected readonly IBlockchainBridge _blockchainBridge; + protected readonly IBlockFinder _blockFinder; + protected readonly IJsonRpcConfig _rpcConfig; + + protected ExecutorBase(IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IJsonRpcConfig rpcConfig) + { + _blockchainBridge = blockchainBridge; + _blockFinder = blockFinder; + _rpcConfig = rpcConfig; + } + + public virtual ResultWrapper Execute( + TRequest call, + BlockParameter? blockParameter) + { + SearchResult searchResult = _blockFinder.SearchForHeader(blockParameter); + if (searchResult.IsError) return ResultWrapper.Fail(searchResult); + + BlockHeader header = searchResult.Object; + if (!_blockchainBridge.HasStateForBlock(header!)) + return ResultWrapper.Fail($"No state available for block {header.Hash}", + ErrorCodes.ResourceUnavailable); + + using CancellationTokenSource cancellationTokenSource = new(_rpcConfig.Timeout); + TProcessing? toProcess = Prepare(call); + return Execute(header.Clone(), toProcess, cancellationTokenSource.Token); + } + + protected abstract TProcessing Prepare(TRequest call); + + protected abstract ResultWrapper Execute(BlockHeader header, TProcessing tx, CancellationToken token); + + protected ResultWrapper? TryGetInputError(CallOutput result) + { + return result.InputError ? ResultWrapper.Fail(result.Error!, ErrorCodes.InvalidInput) : null; + } +} diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/FeeHistory/FeeHistoryOracle.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/FeeHistory/FeeHistoryOracle.cs index f1ee8593978..6d319ab4f9c 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/FeeHistory/FeeHistoryOracle.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/FeeHistory/FeeHistoryOracle.cs @@ -52,6 +52,7 @@ private void OnBlockAddedToMain(object? sender, BlockReplacementEventArgs e) if (ShouldCache(e.Block)) { SaveHistorySearchInfo(e.Block); + TryRunCleanup(); } }); } @@ -190,6 +191,14 @@ public ResultWrapper GetFeeHistory( historyInfo = info.ParentHash is null ? null : GetHistorySearchInfo(info.ParentHash, info.BlockNumber - 1); } + TryRunCleanup(); + + return ResultWrapper.Success(new(oldestBlockNumber, baseFeePerGas, + gasUsedRatio, baseFeePerBlobGas, blobGasUsedRatio, rewards)); + } + + private void TryRunCleanup() + { long headNumber = _blockTree.Head?.Number ?? 0; long lastCleanupHeadBlockNumber = _lastCleanupHeadBlockNumber; if (lastCleanupHeadBlockNumber != headNumber @@ -199,9 +208,6 @@ public ResultWrapper GetFeeHistory( { _cleanupTask = Task.Run(CleanupCache); } - - return ResultWrapper.Success(new(oldestBlockNumber, baseFeePerGas, - gasUsedRatio, baseFeePerBlobGas, blobGasUsedRatio, rewards)); } private void CleanupCache() diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/IEthRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/IEthRpcModule.cs index c02596d76db..89c52debbda 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/IEthRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/IEthRpcModule.cs @@ -8,6 +8,9 @@ using Nethermind.Core.Crypto; using Nethermind.Facade.Eth; using Nethermind.Facade.Filters; +using Nethermind.Facade.Proxy.Models.Simulate; +using Nethermind.Facade.Proxy.Models; +using Nethermind.Facade.Proxy; using Nethermind.Int256; using Nethermind.JsonRpc.Data; using Nethermind.State.Proofs; @@ -81,19 +84,19 @@ public interface IEthRpcModule : IRpcModule Description = "Returns account balance", IsSharable = true, ExampleResponse = "0x6c8ae945bfe6e")] - Task> eth_getBalance([JsonRpcParameter(ExampleValue = "[\"0x78467cada5f1883e79fcf0f3ebfa50abeec8c820\"]")] Address address, BlockParameter blockParameter = null); + Task> eth_getBalance([JsonRpcParameter(ExampleValue = "[\"0x78467cada5f1883e79fcf0f3ebfa50abeec8c820\"]")] Address address, BlockParameter? blockParameter = null); [JsonRpcMethod(IsImplemented = true, Description = "Returns storage data at address. storage_index", IsSharable = true, ExampleResponse = "0x")] - ResultWrapper eth_getStorageAt([JsonRpcParameter(ExampleValue = "[\"0x000000000000000000000000c666d239cbda32aa7ebca894b6dc598ddb881285\",\"0x2\"]")] Address address, UInt256 positionIndex, BlockParameter blockParameter = null); + ResultWrapper eth_getStorageAt([JsonRpcParameter(ExampleValue = "[\"0x000000000000000000000000c666d239cbda32aa7ebca894b6dc598ddb881285\",\"0x2\"]")] Address address, UInt256 positionIndex, BlockParameter? blockParameter = null); [JsonRpcMethod(IsImplemented = true, Description = "Returns account nonce (number of trnsactions from the account since genesis) at the given block number", IsSharable = true, ExampleResponse = "0x3e")] - Task> eth_getTransactionCount([JsonRpcParameter(ExampleValue = "[\"0xae3ed7a6ccdddf2914133d0669b5f02ff6fa8ad2\"]")] Address address, BlockParameter blockParameter = null); + Task> eth_getTransactionCount([JsonRpcParameter(ExampleValue = "[\"0xae3ed7a6ccdddf2914133d0669b5f02ff6fa8ad2\"]")] Address address, BlockParameter? blockParameter = null); [JsonRpcMethod(IsImplemented = true, Description = "Returns number of transactions in the block block hash", @@ -111,7 +114,7 @@ public interface IEthRpcModule : IRpcModule [JsonRpcMethod(Description = "Get receipts from all transactions from particular block, more efficient than fetching the receipts one-by-one.", IsImplemented = true, ExampleResponse = "{\"jsonrpc\":\"2.0\",\"result\":[{\"transactionHash\":\"0x681c2b6f99e37fd6fe6046db8b51ec3460d699cacd6a376143fd5842ac50621f\",\"transactionIndex\":\"0x0\",\"blockHash\":\"0x29f141925d2d8e357ae5b6040c97aa12d7ac6dfcbe2b20e7b616d8907ac8e1f3\",\"blockNumber\":\"0x3\",\"cumulativeGasUsed\":\"0x5208\",\"gasUsed\":\"0x5208\",\"effectiveGasPrice\":\"0x1\",\"from\":\"0xb7705ae4c6f81b66cdb323c65f4e8133690fc099\",\"to\":\"0x942921b14f1b1c385cd7e0cc2ef7abe5598c8358\",\"contractAddress\":null,\"logs\":[],\"logsBloom\":\"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"status\":\"0x1\",\"type\":\"0x0\"},{\"transactionHash\":\"0x7126cf20a0ad8bd51634837d9049615c34c1bff5e1a54e5663f7e23109bff48b\",\"transactionIndex\":\"0x1\",\"blockHash\":\"0x29f141925d2d8e357ae5b6040c97aa12d7ac6dfcbe2b20e7b616d8907ac8e1f3\",\"blockNumber\":\"0x3\",\"cumulativeGasUsed\":\"0xa410\",\"gasUsed\":\"0x5208\",\"effectiveGasPrice\":\"0x1\",\"from\":\"0xb7705ae4c6f81b66cdb323c65f4e8133690fc099\",\"to\":\"0x942921b14f1b1c385cd7e0cc2ef7abe5598c8358\",\"contractAddress\":null,\"logs\":[],\"logsBloom\":\"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"status\":\"0x1\",\"type\":\"0x0\"}],\"id\":67}")] - ResultWrapper eth_getBlockReceipts([JsonRpcParameter(ExampleValue = "latest")] BlockParameter blockParameter); + ResultWrapper eth_getBlockReceipts([JsonRpcParameter(ExampleValue = "latest")] BlockParameter blockParameter); [JsonRpcMethod(IsImplemented = true, Description = "Returns number of uncles in the block by block hash", @@ -126,7 +129,7 @@ public interface IEthRpcModule : IRpcModule ResultWrapper eth_getUncleCountByBlockNumber([JsonRpcParameter(ExampleValue = "[\"5127400\"]")] BlockParameter blockParameter); [JsonRpcMethod(IsImplemented = true, Description = "Returns account code at given address and block", IsSharable = true)] - ResultWrapper eth_getCode(Address address, BlockParameter blockParameter = null); + ResultWrapper eth_getCode(Address address, BlockParameter? blockParameter = null); [JsonRpcMethod(IsImplemented = false, Description = "Signs a transaction", IsSharable = true)] ResultWrapper eth_sign(Address addressData, byte[] message); @@ -150,6 +153,13 @@ public interface IEthRpcModule : IRpcModule ExampleResponse = "0x")] ResultWrapper eth_call([JsonRpcParameter(ExampleValue = "[{\"from\":\"0x0001020304050607080910111213141516171819\",\"gasPrice\":\"0x100000\", \"data\": \"0x70a082310000000000000000000000006c1f09f6271fbe133db38db9c9280307f5d22160\", \"to\": \"0x0d8775f648430679a709e98d2b0cb6250d2887ef\"}]")] TransactionForRpc transactionCall, BlockParameter? blockParameter = null); + [JsonRpcMethod(IsImplemented = true, + Description = "Executes a simulation across multiple blocks (does not create a transaction or block)", + IsSharable = false, + ExampleResponse = "0x")] + ResultWrapper> eth_simulateV1([JsonRpcParameter(ExampleValue = "{\"blockStateCalls\":[{\"stateOverrides\":{\"0x0000000000000000000000000000000000000001\":{\"code\":\"0x608060405234801561001057600080fd5b506004361061003a5760003560e01c806305fdbc81146101ee578063c00692601461020a5761003b565b5b600036606060008060008086868101906100559190610462565b93509350935093506000806000868686866040516020016100799493929190610520565b60405160208183030381529060405280519060200120815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101bb576000806212345673ffffffffffffffffffffffffffffffffffffffff166127108b8b6040516101249291906105ad565b60006040518083038160008787f1925050503d8060008114610162576040519150601f19603f3d011682016040523d82523d6000602084013e610167565b606091505b5091509150816101ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a39061066f565b60405180910390fd5b809750505050505050506101e3565b806040516020016101cc9190610709565b604051602081830303815290604052955050505050505b915050805190602001f35b6102086004803603810190610203919061093a565b610226565b005b610224600480360381019061021f9190610983565b6102ec565b005b60005b81518110156102e8576102d5828281518110610248576102476109fe565b5b602002602001015160000151838381518110610267576102666109fe565b5b602002602001015160200151848481518110610286576102856109fe565b5b6020026020010151604001518585815181106102a5576102a46109fe565b5b6020026020010151606001518686815181106102c4576102c36109fe565b5b6020026020010151608001516102ec565b80806102e090610a66565b915050610229565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361035b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035290610afa565b60405180910390fd5b80600080878787876040516020016103769493929190610520565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b610406816103f3565b811461041157600080fd5b50565b600081359050610423816103fd565b92915050565b600060ff82169050919050565b61043f81610429565b811461044a57600080fd5b50565b60008135905061045c81610436565b92915050565b6000806000806080858703121561047c5761047b6103e9565b5b600061048a87828801610414565b945050602061049b8782880161044d565b93505060406104ac87828801610414565b92505060606104bd87828801610414565b91505092959194509250565b6000819050919050565b6104e46104df826103f3565b6104c9565b82525050565b60008160f81b9050919050565b6000610502826104ea565b9050919050565b61051a61051582610429565b6104f7565b82525050565b600061052c82876104d3565b60208201915061053c8286610509565b60018201915061054c82856104d3565b60208201915061055c82846104d3565b60208201915081905095945050505050565b600081905092915050565b82818337600083830152505050565b6000610594838561056e565b93506105a1838584610579565b82840190509392505050565b60006105ba828486610588565b91508190509392505050565b600082825260208201905092915050565b7f6661696c656420746f2063616c6c206d6f7665642065637265636f766572206160008201527f742061646472657373203078303030303030303030303030303030303030303060208201527f3030303030303030303030303030313233343536000000000000000000000000604082015250565b60006106596054836105c6565b9150610664826105d7565b606082019050919050565b600060208201905081810360008301526106888161064c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106ba8261068f565b9050919050565b60008160601b9050919050565b60006106d9826106c1565b9050919050565b60006106eb826106ce565b9050919050565b6107036106fe826106af565b6106e0565b82525050565b600061071582846106f2565b60148201915081905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61077282610729565b810181811067ffffffffffffffff821117156107915761079061073a565b5b80604052505050565b60006107a46103df565b90506107b08282610769565b919050565b600067ffffffffffffffff8211156107d0576107cf61073a565b5b602082029050602081019050919050565b600080fd5b600080fd5b6107f4816106af565b81146107ff57600080fd5b50565b600081359050610811816107eb565b92915050565b600060a0828403121561082d5761082c6107e6565b5b61083760a061079a565b9050600061084784828501610414565b600083015250602061085b8482850161044d565b602083015250604061086f84828501610414565b604083015250606061088384828501610414565b606083015250608061089784828501610802565b60808301525092915050565b60006108b66108b1846107b5565b61079a565b90508083825260208201905060a084028301858111156108d9576108d86107e1565b5b835b8181101561090257806108ee8882610817565b84526020840193505060a0810190506108db565b5050509392505050565b600082601f83011261092157610920610724565b5b81356109318482602086016108a3565b91505092915050565b6000602082840312156109505761094f6103e9565b5b600082013567ffffffffffffffff81111561096e5761096d6103ee565b5b61097a8482850161090c565b91505092915050565b600080600080600060a0868803121561099f5761099e6103e9565b5b60006109ad88828901610414565b95505060206109be8882890161044d565b94505060406109cf88828901610414565b93505060606109e088828901610414565b92505060806109f188828901610802565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000610a7182610a5c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610aa357610aa2610a2d565b5b600182019050919050565b7f72657475726e20616464726573732063616e6e6f742062652030783000000000600082015250565b6000610ae4601c836105c6565b9150610aef82610aae565b602082019050919050565b60006020820190508181036000830152610b1381610ad7565b905091905056fea2646970667358221220154f5b68ccfa5be744e7245765a3530dac4035052284a68b5dded1945b45075e64736f6c63430008120033\",\"MovePrecompileToAddress\":\"0x0000000000000000000000000000000000123456\"},\"0xc100000000000000000000000000000000000000\":{\"balance\":\"0x30d40\"}},\"calls\":[{\"from\":\"0xc100000000000000000000000000000000000000\",\"to\":\"0x0000000000000000000000000000000000123456\",\"input\":\"0x4554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b45544800000000000000000000000000000000000000000000000000000000004554480000000000000000000000000000000000000000000000000000000000\"},{\"from\":\"0xc100000000000000000000000000000000000000\",\"to\":\"0x0000000000000000000000000000000000123456\",\"input\":\"0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8000000000000000000000000000000000000000000000000000000000000001cb7cf302145348387b9e69fde82d8e634a0f8761e78da3bfa059efced97cbed0d2a66b69167cafe0ccfc726aec6ee393fea3cf0e4f3f9c394705e0f56d9bfe1c9\"},{\"from\":\"0xc100000000000000000000000000000000000000\",\"to\":\"0x0000000000000000000000000000000000000001\",\"input\":\"0xc00692604554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b45544800000000000000000000000000000000000000000000000000000000004554480000000000000000000000000000000000000000000000000000000000000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045\"},{\"from\":\"0xc100000000000000000000000000000000000000\",\"to\":\"0x0000000000000000000000000000000000000001\",\"input\":\"0x4554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b45544800000000000000000000000000000000000000000000000000000000004554480000000000000000000000000000000000000000000000000000000000\"},{\"from\":\"0xc100000000000000000000000000000000000000\",\"to\":\"0x0000000000000000000000000000000000000001\",\"input\":\"0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8000000000000000000000000000000000000000000000000000000000000001cb7cf302145348387b9e69fde82d8e634a0f8761e78da3bfa059efced97cbed0d2a66b69167cafe0ccfc726aec6ee393fea3cf0e4f3f9c394705e0f56d9bfe1c9\"},{\"from\":\"0xc100000000000000000000000000000000000000\",\"to\":\"0x0000000000000000000000000000000000000001\",\"input\":\"0x4554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b45544800000000000000000000000000000000000000000000000000000000004554490000000000000000000000000000000000000000000000000000000000\"}]}]}")] SimulatePayload payload, + BlockParameter? blockParameter = null); + [JsonRpcMethod(IsImplemented = true, Description = "Executes a tx call and returns gas used (does not create a transaction)", IsSharable = false, @@ -212,7 +222,7 @@ ResultWrapper eth_getTransactionByBlockNumberAndIndex( Description = "Retrieves a transaction receipt by tx hash", IsSharable = true, ExampleResponse = "{\"transactionHash\":\"0x80757153e93d1b475e203406727b62a501187f63e23b8fa999279e219ee3be71\",\"transactionIndex\":\"0x7\",\"blockHash\":\"0x42def051b21038905cd2a2bc28d460a94df2249466847f0e1bcb4be4eb21891a\",\"blockNumber\":\"0x4e3f39\",\"cumulativeGasUsed\":\"0x62c9d\",\"gasUsed\":\"0xe384\",\"effectiveGasPrice\":\"0x12a05f200\",\"from\":\"0x0afe0a94415e8974052e7e6cfab19ee1c2ef4f69\",\"to\":\"0x19e8c84d4943e58b035626b064cfc76ee13ee6cb\",\"contractAddress\":null,\"logs\":[{\"removed\":false,\"logIndex\":\"0x0\",\"transactionIndex\":\"0x7\",\"transactionHash\":\"0x80757153e93d1b475e203406727b62a501187f63e23b8fa999279e219ee3be71\",\"blockHash\":\"0x42def051b21038905cd2a2bc28d460a94df2249466847f0e1bcb4be4eb21891a\",\"blockNumber\":\"0x4e3f39\",\"address\":\"0x2ac3c1d3e24b45c6c310534bc2dd84b5ed576335\",\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"topics\":[\"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\"0x00000000000000000000000019e8c84d4943e58b035626b064cfc76ee13ee6cb\",\"0x00000000000000000000000028078300a459a9e136f872285654cdc74463041e\"]},{\"removed\":false,\"logIndex\":\"0x1\",\"transactionIndex\":\"0x7\",\"transactionHash\":\"0x80757153e93d1b475e203406727b62a501187f63e23b8fa999279e219ee3be71\",\"blockHash\":\"0x42def051b21038905cd2a2bc28d460a94df2249466847f0e1bcb4be4eb21891a\",\"blockNumber\":\"0x4e3f39\",\"address\":\"0x19e8c84d4943e58b035626b064cfc76ee13ee6cb\",\"data\":\"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007735940000000000000000000000000000000000000000000000000000000000000000000\",\"topics\":[\"0x950494fc3642fae5221b6c32e0e45765c95ebb382a04a71b160db0843e74c99f\",\"0x0000000000000000000000000afe0a94415e8974052e7e6cfab19ee1c2ef4f69\",\"0x00000000000000000000000028078300a459a9e136f872285654cdc74463041e\",\"0x0000000000000000000000000afe0a94415e8974052e7e6cfab19ee1c2ef4f69\"]}],\"logsBloom\":\"0x00000000000000000000000000000000000000000000000020000000000000800000000000000000000400000000000000000000000000000000000000002000000000000000000000000008000000000000000000000000000000000000000000000002002000000000000000000000000000000000000000000812000000000000000000000000000001000000000000000000000008000400008000000000000000000000000000000000000000000000000000000000800000000000000000000002000000000000000000000000000000000000100000000000000000002000000000000000000000000010000000000000000000000400000000020000\",\"status\":\"0x1\",\"type\":\"0x0\"}")] - Task> eth_getTransactionReceipt([JsonRpcParameter(ExampleValue = "[\"0x80757153e93d1b475e203406727b62a501187f63e23b8fa999279e219ee3be71\"]")] Hash256 txHashData); + ResultWrapper eth_getTransactionReceipt([JsonRpcParameter(ExampleValue = "[\"0x80757153e93d1b475e203406727b62a501187f63e23b8fa999279e219ee3be71\"]")] Hash256 txHashData); [JsonRpcMethod(IsImplemented = true, Description = "Retrieves an uncle block header by block hash and uncle index", @@ -267,6 +277,6 @@ ResultWrapper eth_getTransactionByBlockNumberAndIndex( ResultWrapper eth_getProof([JsonRpcParameter(ExampleValue = "[\"0x7F0d15C7FAae65896648C8273B6d7E43f58Fa842\",[ \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\" ],\"latest\"]")] Address accountAddress, UInt256[] hashRate, BlockParameter blockParameter); [JsonRpcMethod(IsImplemented = true, Description = "Retrieves Accounts via Address and Blocknumber", IsSharable = true)] - ResultWrapper eth_getAccount([JsonRpcParameter(ExampleValue = "[\"0xaa00000000000000000000000000000000000000\", \"latest\"]")] Address accountAddress, BlockParameter blockParameter = null); + ResultWrapper eth_getAccount([JsonRpcParameter(ExampleValue = "[\"0xaa00000000000000000000000000000000000000\", \"latest\"]")] Address accountAddress, BlockParameter? blockParameter = null); } } diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/SimulateTxExecutor.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/SimulateTxExecutor.cs new file mode 100644 index 00000000000..898f13ae6b2 --- /dev/null +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/SimulateTxExecutor.cs @@ -0,0 +1,217 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using Nethermind.Blockchain.Find; +using Nethermind.Config; +using Nethermind.Core; +using Nethermind.Facade; +using Nethermind.Facade.Eth; +using Nethermind.Facade.Proxy.Models.Simulate; +using Nethermind.Facade.Simulate; +using Nethermind.JsonRpc.Data; + +namespace Nethermind.JsonRpc.Modules.Eth; + +public class SimulateTxExecutor(IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IJsonRpcConfig rpcConfig, ulong? secondsPerSlot = null) + : ExecutorBase, SimulatePayload, + SimulatePayload>(blockchainBridge, blockFinder, rpcConfig) +{ + private readonly long _blocksLimit = rpcConfig.MaxSimulateBlocksCap ?? 256; + private long _gasCapBudget = rpcConfig.GasCap ?? long.MaxValue; + + protected override SimulatePayload Prepare(SimulatePayload call) + { + SimulatePayload result = new() + { + TraceTransfers = call.TraceTransfers, + Validation = call.Validation, + BlockStateCalls = call.BlockStateCalls?.Select(blockStateCall => + { + if (blockStateCall.BlockOverrides?.GasLimit is not null) + { + blockStateCall.BlockOverrides.GasLimit = (ulong)Math.Min((long)blockStateCall.BlockOverrides.GasLimit!.Value, _gasCapBudget); + } + + return new BlockStateCall + { + BlockOverrides = blockStateCall.BlockOverrides, + StateOverrides = blockStateCall.StateOverrides, + Calls = blockStateCall.Calls?.Select(callTransactionModel => + { + if (callTransactionModel.Type == TxType.Legacy) + { + callTransactionModel.Type = TxType.EIP1559; + } + + bool hadGasLimitInRequest = callTransactionModel.Gas.HasValue; + bool hadNonceInRequest = callTransactionModel.Nonce.HasValue; + callTransactionModel.EnsureDefaults(_gasCapBudget); + _gasCapBudget -= callTransactionModel.Gas!.Value; + + Transaction tx = callTransactionModel.ToTransaction(_blockchainBridge.GetChainId()); + + TransactionWithSourceDetails? result = new() + { + HadGasLimitInRequest = hadGasLimitInRequest, + HadNonceInRequest = hadNonceInRequest, + Transaction = tx + }; + + return result; + }).ToArray() + }; + }).ToList() + }; + + return result; + } + + public override ResultWrapper> Execute( + SimulatePayload call, + BlockParameter? blockParameter) + { + if (call.BlockStateCalls is null) + return ResultWrapper>.Fail("Must contain BlockStateCalls", ErrorCodes.InvalidParams); + + if (call.BlockStateCalls!.Count > _rpcConfig.MaxSimulateBlocksCap) + return ResultWrapper>.Fail( + $"This node is configured to support only {_rpcConfig.MaxSimulateBlocksCap} blocks", ErrorCodes.InvalidInputTooManyBlocks); + + SearchResult searchResult = _blockFinder.SearchForBlock(blockParameter); + + if (searchResult.IsError || searchResult.Object is null) + return ResultWrapper>.Fail(searchResult); + + BlockHeader header = searchResult.Object.Header; + + if (!_blockchainBridge.HasStateForBlock(header!)) + return ResultWrapper>.Fail($"No state available for block {header.Hash}", + ErrorCodes.ResourceUnavailable); + + if (call.BlockStateCalls?.Count > _blocksLimit) + return ResultWrapper>.Fail( + $"Too many blocks provided, node is configured to simulate up to {_blocksLimit} while {call.BlockStateCalls?.Count} were given", + ErrorCodes.InvalidParams); + + secondsPerSlot ??= new BlocksConfig().SecondsPerSlot; + + if (call.BlockStateCalls is not null) + { + long lastBlockNumber = -1; + ulong lastBlockTime = 0; + + foreach (BlockStateCall? blockToSimulate in call.BlockStateCalls) + { + ulong givenNumber = blockToSimulate.BlockOverrides?.Number ?? + (lastBlockNumber == -1 ? (ulong)header.Number + 1 : (ulong)lastBlockNumber + 1); + + if (givenNumber > long.MaxValue) + return ResultWrapper>.Fail( + $"Block number too big {givenNumber}!", ErrorCodes.InvalidParams); + + if (givenNumber < (ulong)header.Number) + return ResultWrapper>.Fail( + $"Block number out of order {givenNumber} is < than given base number of {header.Number}!", ErrorCodes.InvalidInputBlocksOutOfOrder); + + long given = (long)givenNumber; + if (given > lastBlockNumber) + { + lastBlockNumber = given; + } + else + { + return ResultWrapper>.Fail( + $"Block number out of order {givenNumber}!", ErrorCodes.InvalidInputBlocksOutOfOrder); + } + + blockToSimulate.BlockOverrides ??= new BlockOverride(); + blockToSimulate.BlockOverrides.Number = givenNumber; + + ulong givenTime = blockToSimulate.BlockOverrides.Time ?? + (lastBlockTime == 0 + ? header.Timestamp + secondsPerSlot.Value + : lastBlockTime + secondsPerSlot.Value); + + if (givenTime < header.Timestamp) + return ResultWrapper>.Fail( + $"Block timestamp out of order {givenTime} is < than given base timestamp of {header.Timestamp}!", ErrorCodes.BlockTimestampNotIncreased); + + if (givenTime > lastBlockTime) + { + lastBlockTime = givenTime; + } + else + { + return ResultWrapper>.Fail( + $"Block timestamp out of order {givenTime}!", ErrorCodes.BlockTimestampNotIncreased); + } + + blockToSimulate.BlockOverrides.Time = givenTime; + } + + long minBlockNumber = Math.Min( + call.BlockStateCalls.Min(b => (long)(b.BlockOverrides?.Number ?? ulong.MaxValue)), + header.Number + 1); + + long maxBlockNumber = Math.Max( + call.BlockStateCalls.Max(b => (long)(b.BlockOverrides?.Number ?? ulong.MinValue)), + minBlockNumber); + + HashSet existingBlockNumbers = + [ + .. call.BlockStateCalls.Select(b => (long)(b.BlockOverrides?.Number ?? ulong.MinValue)) + ]; + + List> completeBlockStateCalls = call.BlockStateCalls; + + for (long blockNumber = minBlockNumber; blockNumber <= maxBlockNumber; blockNumber++) + { + if (!existingBlockNumbers.Contains(blockNumber)) + { + completeBlockStateCalls.Add(new BlockStateCall + { + BlockOverrides = new BlockOverride { Number = (ulong)blockNumber }, + StateOverrides = null, + Calls = Array.Empty() + }); + } + } + + call.BlockStateCalls.Sort((b1, b2) => b1.BlockOverrides!.Number!.Value.CompareTo(b2.BlockOverrides!.Number!.Value)); + } + + using CancellationTokenSource cancellationTokenSource = new(_rpcConfig.Timeout); //TODO remove! + SimulatePayload toProcess = Prepare(call); + return Execute(header.Clone(), toProcess, cancellationTokenSource.Token); + } + + protected override ResultWrapper> Execute(BlockHeader header, + SimulatePayload tx, CancellationToken token) + { + SimulateOutput results = _blockchainBridge.Simulate(header, tx, token); + + if (results.Error is not null && (results.Error.Contains("invalid transaction") + || results.Error.Contains("InsufficientBalanceException") + )) + results.ErrorCode = ErrorCodes.InvalidTransaction; + + if (results.Error is not null && results.Error.Contains("InvalidBlockException")) + results.ErrorCode = ErrorCodes.InvalidParams; + + + if (results.Error is not null && results.Error.Contains("below intrinsic gas")) + results.ErrorCode = ErrorCodes.InsufficientIntrinsicGas; + + + + return results.Error is null + ? ResultWrapper>.Success(results.Items) + : results.ErrorCode is not null + ? ResultWrapper>.Fail(results.Error!, results.ErrorCode!.Value, results.Items) + : ResultWrapper>.Fail(results.Error, results.Items); + } +} diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/ModuleType.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/ModuleType.cs index 27aed311c00..6d53f38714a 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/ModuleType.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/ModuleType.cs @@ -30,7 +30,6 @@ public static class ModuleType public const string Vault = nameof(Vault); public const string Deposit = nameof(Deposit); public const string Health = nameof(Health); - public const string Witness = nameof(Witness); public const string AccountAbstraction = nameof(AccountAbstraction); public const string Rpc = nameof(Rpc); @@ -59,7 +58,6 @@ public static class ModuleType Vault, Deposit, Health, - Witness, AccountAbstraction, Rpc, }; diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Personal/IPersonalRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Personal/IPersonalRpcModule.cs index f255d904da1..3ca1db260a6 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Personal/IPersonalRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Personal/IPersonalRpcModule.cs @@ -3,6 +3,7 @@ using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; namespace Nethermind.JsonRpc.Modules.Personal diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Personal/PersonalRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Personal/PersonalRpcModule.cs index 1070270a9d5..1116810731d 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Personal/PersonalRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Personal/PersonalRpcModule.cs @@ -7,6 +7,7 @@ using Nethermind.Core.Attributes; using Nethermind.Core.Crypto; using Nethermind.Crypto; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.KeyStore; using Nethermind.Wallet; diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/IProofRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/IProofRpcModule.cs index a7b8e9a450d..8e2123e5533 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/IProofRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/IProofRpcModule.cs @@ -3,6 +3,7 @@ using Nethermind.Blockchain.Find; using Nethermind.Core.Crypto; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; namespace Nethermind.JsonRpc.Modules.Proof diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/ProofModuleFactory.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/ProofModuleFactory.cs index 0aeaeb2e336..cd6b142126f 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/ProofModuleFactory.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/ProofModuleFactory.cs @@ -10,8 +10,10 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Tracing; using Nethermind.Consensus.Validators; +using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Db; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; using Nethermind.Trie.Pruning; @@ -48,13 +50,24 @@ public override IProofRpcModule Create() ReadOnlyTxProcessingEnv txProcessingEnv = new( _worldStateManager, _blockTree, _specProvider, _logManager); - RpcBlockTransactionsExecutor traceExecutor = new(txProcessingEnv.TransactionProcessor, txProcessingEnv.StateProvider); + IReadOnlyTxProcessingScope scope = txProcessingEnv.Build(Keccak.EmptyTreeHash); + + RpcBlockTransactionsExecutor traceExecutor = new(scope.TransactionProcessor, scope.WorldState); ReadOnlyChainProcessingEnv chainProcessingEnv = new( - txProcessingEnv, Always.Valid, _recoveryStep, NoBlockRewards.Instance, new InMemoryReceiptStorage(), _specProvider, _logManager, traceExecutor); + scope, + Always.Valid, + _recoveryStep, + NoBlockRewards.Instance, + new InMemoryReceiptStorage(), + _specProvider, + _blockTree, + _worldStateManager.GlobalStateReader, + _logManager, + traceExecutor); Tracer tracer = new( - txProcessingEnv.StateProvider, + scope.WorldState, chainProcessingEnv.ChainProcessor, chainProcessingEnv.ChainProcessor); diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/ProofRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/ProofRpcModule.cs index d4885d1c608..e79f6fdd106 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/ProofRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/ProofRpcModule.cs @@ -14,6 +14,7 @@ using Nethermind.Evm; using Nethermind.Evm.Tracing; using Nethermind.Evm.Tracing.Proofs; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.Logging; using Nethermind.Serialization.Rlp; @@ -32,6 +33,7 @@ public class ProofRpcModule : IProofRpcModule private readonly IReceiptFinder _receiptFinder; private readonly ISpecProvider _specProvider; private readonly HeaderDecoder _headerDecoder = new(); + private static readonly IRlpStreamDecoder _receiptDecoder = Rlp.GetStreamDecoder(); public ProofRpcModule( ITracer tracer, @@ -205,7 +207,7 @@ private static byte[][] BuildTxProofs(Transaction[] txs, IReleaseSpec releaseSpe private byte[][] BuildReceiptProofs(BlockHeader blockHeader, TxReceipt[] receipts, int index) { - return ReceiptTrie.CalculateReceiptProofs(_specProvider.GetSpec(blockHeader), receipts, index, ReceiptMessageDecoder.Instance); + return ReceiptTrie.CalculateReceiptProofs(_specProvider.GetSpec(blockHeader), receipts, index, _receiptDecoder); } } } diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/TransactionWithProof.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/TransactionWithProof.cs index 4294cfb4ee6..3069c957849 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/TransactionWithProof.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Proof/TransactionWithProof.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; namespace Nethermind.JsonRpc.Modules.Proof diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/RpcModuleProvider.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/RpcModuleProvider.cs index 25811ed3d4d..a4c11d06a26 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/RpcModuleProvider.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/RpcModuleProvider.cs @@ -139,7 +139,12 @@ public void Return(string methodName, IRpcModule rpcModule) private static IDictionary GetMethodDict(Type type) { - var methods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); + BindingFlags methodFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly; + + IEnumerable methods = type.GetMethods(methodFlags) + .Concat(type.GetInterfaces().SelectMany(i => i.GetMethods(methodFlags))) + .DistinctBy(x => x.Name); + return methods.ToDictionary( x => x.Name.Trim(), x => diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Subscribe/NewHeadSubscription.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Subscribe/NewHeadSubscription.cs index 11a414c1bf3..ed9fccd2511 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Subscribe/NewHeadSubscription.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Subscribe/NewHeadSubscription.cs @@ -5,6 +5,7 @@ using Nethermind.Blockchain; using Nethermind.Core; using Nethermind.Core.Specs; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Modules.Eth; using Nethermind.Logging; diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Subscribe/NewPendingTransactionsSubscription.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Subscribe/NewPendingTransactionsSubscription.cs index fe900bc6181..7ec4b75d77d 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Subscribe/NewPendingTransactionsSubscription.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Subscribe/NewPendingTransactionsSubscription.cs @@ -3,6 +3,7 @@ using System; using System.Threading.Tasks; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.JsonRpc.Modules.Eth; using Nethermind.Logging; diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/ITraceRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/ITraceRpcModule.cs index d3b06c6675e..dae0f773487 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/ITraceRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/ITraceRpcModule.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using Nethermind.Blockchain.Find; using Nethermind.Core.Crypto; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; namespace Nethermind.JsonRpc.Modules.Trace diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/TraceModuleFactory.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/TraceModuleFactory.cs index 9d34f031e44..1ec63377195 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/TraceModuleFactory.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/TraceModuleFactory.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; - using Nethermind.Blockchain; using Nethermind.Blockchain.Receipts; using Nethermind.Consensus; @@ -11,77 +10,69 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Tracing; using Nethermind.Consensus.Validators; +using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Db; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; using Nethermind.Trie.Pruning; -namespace Nethermind.JsonRpc.Modules.Trace -{ - public class TraceModuleFactory : ModuleFactoryBase - { - private readonly IWorldStateManager _worldStateManager; - private readonly IReadOnlyBlockTree _blockTree; - private readonly IJsonRpcConfig _jsonRpcConfig; - private readonly IReceiptStorage _receiptStorage; - private readonly ISpecProvider _specProvider; - private readonly ILogManager _logManager; - private readonly IBlockPreprocessorStep _recoveryStep; - private readonly IRewardCalculatorSource _rewardCalculatorSource; - private readonly IPoSSwitcher _poSSwitcher; - - public TraceModuleFactory( - IWorldStateManager worldStateManager, - IBlockTree blockTree, - IJsonRpcConfig jsonRpcConfig, - IBlockPreprocessorStep recoveryStep, - IRewardCalculatorSource rewardCalculatorSource, - IReceiptStorage receiptFinder, - ISpecProvider specProvider, - IPoSSwitcher poSSwitcher, - ILogManager logManager) - { - _worldStateManager = worldStateManager; - _blockTree = blockTree.AsReadOnly(); - _jsonRpcConfig = jsonRpcConfig ?? throw new ArgumentNullException(nameof(jsonRpcConfig)); - _recoveryStep = recoveryStep ?? throw new ArgumentNullException(nameof(recoveryStep)); - _rewardCalculatorSource = rewardCalculatorSource ?? throw new ArgumentNullException(nameof(rewardCalculatorSource)); - _receiptStorage = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); - _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); - _poSSwitcher = poSSwitcher ?? throw new ArgumentNullException(nameof(poSSwitcher)); - _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager)); - logManager.GetClassLogger(); - } - - public override ITraceRpcModule Create() - { - ReadOnlyTxProcessingEnv txProcessingEnv = - new(_worldStateManager, _blockTree, _specProvider, _logManager); +namespace Nethermind.JsonRpc.Modules.Trace; - IRewardCalculator rewardCalculator = - new MergeRpcRewardCalculator(_rewardCalculatorSource.Get(txProcessingEnv.TransactionProcessor), - _poSSwitcher); +public class TraceModuleFactory( + IWorldStateManager worldStateManager, + IBlockTree blockTree, + IJsonRpcConfig jsonRpcConfig, + IBlockPreprocessorStep recoveryStep, + IRewardCalculatorSource rewardCalculatorSource, + IReceiptStorage receiptFinder, + ISpecProvider specProvider, + IPoSSwitcher poSSwitcher, + ILogManager logManager) : ModuleFactoryBase +{ + protected readonly IWorldStateManager _worldStateManager = worldStateManager; + protected readonly IReadOnlyBlockTree _blockTree = blockTree.AsReadOnly(); + protected readonly IJsonRpcConfig _jsonRpcConfig = jsonRpcConfig ?? throw new ArgumentNullException(nameof(jsonRpcConfig)); + protected readonly IReceiptStorage _receiptStorage = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); + protected readonly ISpecProvider _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); + protected readonly ILogManager _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager)); + protected readonly IBlockPreprocessorStep _recoveryStep = recoveryStep ?? throw new ArgumentNullException(nameof(recoveryStep)); + protected readonly IRewardCalculatorSource _rewardCalculatorSource = rewardCalculatorSource ?? throw new ArgumentNullException(nameof(rewardCalculatorSource)); + protected readonly IPoSSwitcher _poSSwitcher = poSSwitcher ?? throw new ArgumentNullException(nameof(poSSwitcher)); - RpcBlockTransactionsExecutor rpcBlockTransactionsExecutor = new(txProcessingEnv.TransactionProcessor, txProcessingEnv.StateProvider); - BlockProcessor.BlockValidationTransactionsExecutor executeBlockTransactionsExecutor = new(txProcessingEnv.TransactionProcessor, txProcessingEnv.StateProvider); + protected virtual ReadOnlyTxProcessingEnv CreateTxProcessingEnv() => new(_worldStateManager, _blockTree, _specProvider, _logManager); - ReadOnlyChainProcessingEnv CreateChainProcessingEnv(IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor) => new( - txProcessingEnv, + protected virtual ReadOnlyChainProcessingEnv CreateChainProcessingEnv(IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor, IReadOnlyTxProcessingScope scope, IRewardCalculator rewardCalculator) => new( + scope, Always.Valid, _recoveryStep, rewardCalculator, _receiptStorage, _specProvider, + _blockTree, + _worldStateManager.GlobalStateReader, _logManager, transactionsExecutor); - ReadOnlyChainProcessingEnv traceProcessingEnv = CreateChainProcessingEnv(rpcBlockTransactionsExecutor); - ReadOnlyChainProcessingEnv executeProcessingEnv = CreateChainProcessingEnv(executeBlockTransactionsExecutor); + public override ITraceRpcModule Create() + { + ReadOnlyTxProcessingEnv txProcessingEnv = CreateTxProcessingEnv(); + IReadOnlyTxProcessingScope scope = txProcessingEnv.Build(Keccak.EmptyTreeHash); + + IRewardCalculator rewardCalculator = + new MergeRpcRewardCalculator(_rewardCalculatorSource.Get(scope.TransactionProcessor), + _poSSwitcher); + + RpcBlockTransactionsExecutor rpcBlockTransactionsExecutor = new(scope.TransactionProcessor, scope.WorldState); + BlockProcessor.BlockValidationTransactionsExecutor executeBlockTransactionsExecutor = new(scope.TransactionProcessor, scope.WorldState); - Tracer tracer = new(txProcessingEnv.StateProvider, traceProcessingEnv.ChainProcessor, executeProcessingEnv.ChainProcessor); + ReadOnlyChainProcessingEnv traceProcessingEnv = CreateChainProcessingEnv(rpcBlockTransactionsExecutor, scope, rewardCalculator); + ReadOnlyChainProcessingEnv executeProcessingEnv = CreateChainProcessingEnv(executeBlockTransactionsExecutor, scope, rewardCalculator); - return new TraceRpcModule(_receiptStorage, tracer, _blockTree, _jsonRpcConfig, _specProvider, _logManager, txProcessingEnv.StateReader); - } + Tracer tracer = new(scope.WorldState, traceProcessingEnv.ChainProcessor, executeProcessingEnv.ChainProcessor); + + return new TraceRpcModule(_receiptStorage, tracer, _blockTree, _jsonRpcConfig, txProcessingEnv.StateReader); } + } diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/TraceRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/TraceRpcModule.cs index 903fb1b1bfc..3ee10c8bcb3 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/TraceRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Trace/TraceRpcModule.cs @@ -15,6 +15,7 @@ using Nethermind.Evm.Tracing; using Nethermind.Evm.Tracing.ParityStyle; using Nethermind.Facade; +using Nethermind.Facade.Eth; using Nethermind.Int256; using Nethermind.JsonRpc.Data; using Nethermind.Logging; @@ -39,24 +40,19 @@ public class TraceRpcModule : ITraceRpcModule private readonly IBlockFinder _blockFinder; private readonly TxDecoder _txDecoder = new(); private readonly IJsonRpcConfig _jsonRpcConfig; - private readonly ILogManager _logManager; - private readonly ILogger _logger; - private readonly ISpecProvider _specProvider; private readonly TimeSpan _cancellationTokenTimeout; private readonly IStateReader _stateReader; - public TraceRpcModule(IReceiptFinder? receiptFinder, ITracer? tracer, IBlockFinder? blockFinder, IJsonRpcConfig? jsonRpcConfig, ISpecProvider? specProvider, ILogManager? logManager, IStateReader stateReader) + public TraceRpcModule(IReceiptFinder? receiptFinder, ITracer? tracer, IBlockFinder? blockFinder, IJsonRpcConfig? jsonRpcConfig, IStateReader stateReader) { _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); _tracer = tracer ?? throw new ArgumentNullException(nameof(tracer)); _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); _jsonRpcConfig = jsonRpcConfig ?? throw new ArgumentNullException(nameof(jsonRpcConfig)); - _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); - _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager)); _stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader)); - _logger = logManager.GetClassLogger(); _cancellationTokenTimeout = TimeSpan.FromMilliseconds(_jsonRpcConfig.Timeout); } + public static ParityTraceTypes GetParityTypes(string[] types) => types.Select(s => FastEnum.Parse(s, true)).Aggregate((t1, t2) => t1 | t2); diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/TxPool/TransactionPoolContent.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/TxPool/TransactionPoolContent.cs index 5d0b6c0f3ba..2040cc403e8 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/TxPool/TransactionPoolContent.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/TxPool/TransactionPoolContent.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Linq; using Nethermind.Core; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.TxPool; diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Witness/IWitnessRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Witness/IWitnessRpcModule.cs deleted file mode 100644 index 6f954d00ce3..00000000000 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Witness/IWitnessRpcModule.cs +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Threading.Tasks; -using Nethermind.Blockchain.Find; -using Nethermind.Core.Crypto; - -namespace Nethermind.JsonRpc.Modules.Witness -{ - [RpcModule(ModuleType.Witness)] - public interface IWitnessRpcModule : IRpcModule - { - [JsonRpcMethod(Description = "Return witness of Block provided", - ResponseDescription = "Table of hashes of state nodes that were read during block processing", - ExampleResponse = - "\"0x1\"", - IsImplemented = true)] - Task> get_witnesses([JsonRpcParameter(Description = "Block to get witness", - ExampleValue = "{\"jsonrpc\":\"2.0\",\"result\":[\"0xa2a9f03b9493046696099d27b2612b99497aa1f392ec966716ab393c715a5bb6\"],\"id\":67}")] - BlockParameter blockParameter); - } -} diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Witness/WitnessRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Witness/WitnessRpcModule.cs deleted file mode 100644 index 9438b40f0ec..00000000000 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Witness/WitnessRpcModule.cs +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Threading.Tasks; -using Nethermind.Blockchain.Find; -using Nethermind.Core; -using Nethermind.Core.Crypto; -using Nethermind.State; - -namespace Nethermind.JsonRpc.Modules.Witness -{ - public class WitnessRpcModule : IWitnessRpcModule - { - private readonly IBlockFinder _blockFinder; - private readonly IWitnessRepository _witnessRepository; - - public WitnessRpcModule(IWitnessRepository witnessRepository, IBlockFinder finder) - { - _witnessRepository = witnessRepository; - _blockFinder = finder; - } - - public Task> get_witnesses(BlockParameter blockParameter) - { - SearchResult searchResult = _blockFinder.SearchForHeader(blockParameter); - if (searchResult.Object is null) - { - return Task.FromResult(ResultWrapper.Fail("Block not found", ErrorCodes.ResourceNotFound)); - } - - Hash256 hash = searchResult.Object.Hash; - Hash256[] result = _witnessRepository.Load(hash!); - return result is null ? Task.FromResult(ResultWrapper.Fail("Witness unavailable", ErrorCodes.ResourceUnavailable)) : Task.FromResult(ResultWrapper.Success(result)); - } - } -} diff --git a/src/Nethermind/Nethermind.JsonRpc/WebSockets/JsonRpcSocketsClient.cs b/src/Nethermind/Nethermind.JsonRpc/WebSockets/JsonRpcSocketsClient.cs index 1ea4d983058..1176e351741 100644 --- a/src/Nethermind/Nethermind.JsonRpc/WebSockets/JsonRpcSocketsClient.cs +++ b/src/Nethermind/Nethermind.JsonRpc/WebSockets/JsonRpcSocketsClient.cs @@ -48,6 +48,7 @@ public override void Dispose() { base.Dispose(); _sendSemaphore.Dispose(); + _jsonRpcContext.Dispose(); Closed?.Invoke(this, EventArgs.Empty); } diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 94e728d5d8b..cb62721f8bc 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -142,7 +142,6 @@ protected override IBlockProcessor CreateBlockProcessor() new BlockProcessor.BlockValidationTransactionsExecutor(TxProcessor, State), State, ReceiptStorage, - NullWitnessCollector.Instance, new BlockhashStore(BlockTree, SpecProvider, State), TxProcessor, LogManager, @@ -186,12 +185,11 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT BlockProducerEnv blockProducerEnv = blockProducerEnvFactory.Create(); - PostMergeBlockProducer postMergeBlockProducer = blockProducerFactory.Create(blockProducerEnv, BlockProductionTrigger); + PostMergeBlockProducer postMergeBlockProducer = blockProducerFactory.Create(blockProducerEnv); PostMergeBlockProducer = postMergeBlockProducer; PayloadPreparationService ??= new PayloadPreparationService( postMergeBlockProducer, - new BlockImprovementContextFactory(BlockProductionTrigger, TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot) - ), + new BlockImprovementContextFactory(PostMergeBlockProducer, TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot)), TimerFactory.Default, LogManager, TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot), @@ -204,7 +202,6 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT AuRaBlockProducer preMergeBlockProducer = new( txPoolTxSource, blockProducerEnvFactory.Create().ChainProcessor, - BlockProductionTrigger, State, sealer, BlockTree, diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index df1e0c2956f..128b6a6098c 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -12,6 +12,7 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.Merge.AuRa.Withdrawals; using Nethermind.State; @@ -56,7 +57,7 @@ public AuRaMergeBlockProducerEnvFactory( } protected override BlockProcessor CreateBlockProcessor( - ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv, + IReadOnlyTxProcessingScope readOnlyTxProcessingEnv, ISpecProvider specProvider, IBlockValidator blockValidator, IRewardCalculatorSource rewardCalculatorSource, @@ -71,7 +72,7 @@ protected override BlockProcessor CreateBlockProcessor( blockValidator, rewardCalculatorSource.Get(readOnlyTxProcessingEnv.TransactionProcessor), TransactionsExecutorFactory.Create(readOnlyTxProcessingEnv), - readOnlyTxProcessingEnv.StateProvider, + readOnlyTxProcessingEnv.WorldState, receiptStorage, logManager, _blockTree, @@ -92,6 +93,6 @@ protected override TxPoolTxSource CreateTxPoolTxSource( ITransactionComparerProvider transactionComparerProvider, ILogManager logManager) { - return new StartBlockProducerAuRa(_auraApi).CreateTxPoolTxSource(processingEnv); + return new StartBlockProducerAuRa(_auraApi).CreateTxPoolTxSource(); } } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergePlugin.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergePlugin.cs index 2b82d8febbc..ac61be06612 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergePlugin.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergePlugin.cs @@ -46,7 +46,7 @@ originalFilter is MinGasPriceContractTxFilter ? originalFilter } } - public override Task InitBlockProducer(IBlockProducerFactory consensusPlugin, IBlockProductionTrigger blockProductionTrigger, ITxSource? txSource) + public override IBlockProducer InitBlockProducer(IBlockProducerFactory consensusPlugin, ITxSource? txSource) { _api.BlockProducerEnvFactory = new AuRaMergeBlockProducerEnvFactory( (AuRaNethermindApi)_api, @@ -62,7 +62,7 @@ public override Task InitBlockProducer(IBlockProducerFactory con _api.Config(), _api.LogManager); - return base.InitBlockProducer(consensusPlugin, blockProductionTrigger, txSource); + return base.InitBlockProducer(consensusPlugin, txSource); } protected override PostMergeBlockProducerFactory CreateBlockProducerFactory() diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaPostMergeBlockProducerFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaPostMergeBlockProducerFactory.cs index edacc0bf1e0..6222cdac7a1 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaPostMergeBlockProducerFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaPostMergeBlockProducerFactory.cs @@ -33,7 +33,6 @@ public AuRaPostMergeBlockProducerFactory( public override PostMergeBlockProducer Create( BlockProducerEnv producerEnv, - IBlockProductionTrigger blockProductionTrigger, ITxSource? txSource = null) { TargetAdjustedGasLimitCalculator targetAdjustedGasLimitCalculator = @@ -43,7 +42,6 @@ public override PostMergeBlockProducer Create( txSource ?? producerEnv.TxSource, producerEnv.ChainProcessor, producerEnv.BlockTree, - blockProductionTrigger, producerEnv.ReadOnlyStateProvider, _gasLimitCalculator ?? targetAdjustedGasLimitCalculator, _sealEngine, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/BlobBundleExtensions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/BlobBundleExtensions.cs new file mode 100644 index 00000000000..90e4ea0545f --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/BlobBundleExtensions.cs @@ -0,0 +1,23 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Crypto; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Merge.Plugin.Test; + +internal static class BlobBundleExtensions +{ + public static byte[][] GetBlobVersionedHashes(this BlobsBundleV1 blobsBundle) + { + byte[][] hashes = new byte[blobsBundle.Commitments.Length][]; + + for (var i = 0; i < blobsBundle.Commitments.Length; i++) + { + hashes[i] = new byte[KzgPolynomialCommitments.BytesPerBlobVersionedHash]; + KzgPolynomialCommitments.TryComputeCommitmentHashV1(blobsBundle.Commitments[i], hashes[i]); + } + + return hashes; + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.DelayBlockImprovementContextFactory.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.DelayBlockImprovementContextFactory.cs index b6fce670c01..81e20cc6f87 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.DelayBlockImprovementContextFactory.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.DelayBlockImprovementContextFactory.cs @@ -4,6 +4,7 @@ using System; using System.Threading; using System.Threading.Tasks; +using Nethermind.Consensus; using Nethermind.Consensus.Producers; using Nethermind.Core; using Nethermind.Core.Extensions; @@ -17,19 +18,19 @@ public partial class EngineModuleTests { private class DelayBlockImprovementContextFactory : IBlockImprovementContextFactory { - private readonly IManualBlockProductionTrigger _productionTrigger; + private readonly IBlockProducer _blockProducer; private readonly TimeSpan _timeout; private readonly TimeSpan _delay; - public DelayBlockImprovementContextFactory(IManualBlockProductionTrigger productionTrigger, TimeSpan timeout, TimeSpan delay) + public DelayBlockImprovementContextFactory(IBlockProducer blockProducer, TimeSpan timeout, TimeSpan delay) { - _productionTrigger = productionTrigger; + _blockProducer = blockProducer; _timeout = timeout; _delay = delay; } public IBlockImprovementContext StartBlockImprovementContext(Block currentBestBlock, BlockHeader parentHeader, PayloadAttributes payloadAttributes, DateTimeOffset startDateTime) => - new DelayBlockImprovementContext(currentBestBlock, _productionTrigger, _timeout, parentHeader, payloadAttributes, _delay, startDateTime); + new DelayBlockImprovementContext(currentBestBlock, _blockProducer, _timeout, parentHeader, payloadAttributes, _delay, startDateTime); } private class DelayBlockImprovementContext : IBlockImprovementContext @@ -37,7 +38,7 @@ private class DelayBlockImprovementContext : IBlockImprovementContext private CancellationTokenSource? _cancellationTokenSource; public DelayBlockImprovementContext(Block currentBestBlock, - IManualBlockProductionTrigger blockProductionTrigger, + IBlockProducer blockProducer, TimeSpan timeout, BlockHeader parentHeader, PayloadAttributes payloadAttributes, @@ -47,17 +48,17 @@ public DelayBlockImprovementContext(Block currentBestBlock, _cancellationTokenSource = new CancellationTokenSource(timeout); CurrentBestBlock = currentBestBlock; StartDateTime = startDateTime; - ImprovementTask = BuildBlock(blockProductionTrigger, parentHeader, payloadAttributes, delay, _cancellationTokenSource.Token); + ImprovementTask = BuildBlock(blockProducer, parentHeader, payloadAttributes, delay, _cancellationTokenSource.Token); } private async Task BuildBlock( - IManualBlockProductionTrigger blockProductionTrigger, + IBlockProducer blockProducer, BlockHeader parentHeader, PayloadAttributes payloadAttributes, TimeSpan delay, CancellationToken cancellationToken) { - Block? block = await blockProductionTrigger.BuildBlock(parentHeader, cancellationToken, NullBlockTracer.Instance, payloadAttributes); + Block? block = await blockProducer.BuildBlock(parentHeader, NullBlockTracer.Instance, payloadAttributes, cancellationToken); await Task.Delay(delay, cancellationToken); if (block is not null) { diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index e4b77d1270e..16801b77544 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -48,17 +48,30 @@ private void AssertExecutionStatusChanged(IBlockFinder blockFinder, Hash256 head private Transaction[] BuildTransactions(MergeTestBlockchain chain, Hash256 parentHash, PrivateKey from, Address to, uint count, int value, out AccountStruct accountFrom, out BlockHeader parentHeader, int blobCountPerTx = 0) { - Transaction BuildTransaction(uint index, AccountStruct senderAccount) => - Build.A.Transaction.WithNonce(senderAccount.Nonce + index) + Transaction BuildTransaction(uint index, AccountStruct senderAccount) + { + TransactionBuilder builder = Build.A.Transaction + .WithNonce(senderAccount.Nonce + index) .WithTimestamp(Timestamper.UnixTime.Seconds) .WithTo(to) .WithValue(value.GWei()) .WithGasPrice(1.GWei()) .WithChainId(chain.SpecProvider.ChainId) - .WithSenderAddress(from.Address) - .WithShardBlobTxTypeAndFields(blobCountPerTx) + .WithSenderAddress(from.Address); + + if (blobCountPerTx != 0) + { + builder = builder.WithShardBlobTxTypeAndFields(blobCountPerTx); + } + else + { + builder = builder.WithType(TxType.EIP1559); + } + + return builder .WithMaxFeePerGasIfSupports1559(1.GWei()) .SignedAndResolved(from).TestObject; + } parentHeader = chain.BlockTree.FindHeader(parentHash, BlockTreeLookupOptions.None)!; chain.StateReader.TryGetAccount(parentHeader.StateRoot!, from.Address, out AccountStruct account); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs index d5e2cd080a4..3f4ee0c4213 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs @@ -62,7 +62,7 @@ public async Task getPayloadV1_should_return_error_if_called_after_cleanup_timer MergeConfig mergeConfig = new() { SecondsPerSlot = 1, TerminalTotalDifficulty = "0" }; TimeSpan timePerSlot = TimeSpan.FromMilliseconds(10); using MergeTestBlockchain chain = await CreateBlockchainWithImprovementContext( - chain => new BlockImprovementContextFactory(chain.BlockProductionTrigger, TimeSpan.FromSeconds(1)), + chain => new BlockImprovementContextFactory(chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(1)), timePerSlot, mergeConfig); IEngineRpcModule rpc = CreateEngineModule(chain); @@ -134,7 +134,7 @@ public static IEnumerable WaitTestCases public async Task getPayloadV1_waits_for_block_production(TimeSpan delay) { using MergeTestBlockchain chain = await CreateBlockchainWithImprovementContext( - chain => new DelayBlockImprovementContextFactory(chain.BlockProductionTrigger, TimeSpan.FromSeconds(10), delay), + chain => new DelayBlockImprovementContextFactory(chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(10), delay), TimeSpan.FromSeconds(10)); IEngineRpcModule rpc = CreateEngineModule(chain); @@ -298,7 +298,7 @@ public async Task getPayloadV1_picks_transactions_from_pool_constantly_improving TimeSpan delay = TimeSpan.FromMilliseconds(10); TimeSpan timePerSlot = 50 * delay; using MergeTestBlockchain chain = await CreateBlockchainWithImprovementContext( - chain => new StoringBlockImprovementContextFactory(new BlockImprovementContextFactory(chain.BlockProductionTrigger, TimeSpan.FromSeconds(chain.MergeConfig.SecondsPerSlot))), + chain => new StoringBlockImprovementContextFactory(new BlockImprovementContextFactory(chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(chain.MergeConfig.SecondsPerSlot))), timePerSlot, delay: delay); StoringBlockImprovementContextFactory improvementContextFactory = (StoringBlockImprovementContextFactory)chain.BlockImprovementContextFactory; @@ -352,7 +352,7 @@ public async Task TestTwoTransaction_SameContract_WithBlockImprovement() TimeSpan delay = TimeSpan.FromMilliseconds(10); TimeSpan timePerSlot = 50 * delay; - StoringBlockImprovementContextFactory improvementContextFactory = new(new BlockImprovementContextFactory(chain.BlockProductionTrigger, TimeSpan.FromSeconds(chain.MergeConfig.SecondsPerSlot))); + StoringBlockImprovementContextFactory improvementContextFactory = new(new BlockImprovementContextFactory(chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(chain.MergeConfig.SecondsPerSlot))); ConfigureBlockchainWithImprovementContextFactory(chain, improvementContextFactory, timePerSlot, delay); IEngineRpcModule rpc = CreateEngineModule(chain); @@ -389,7 +389,7 @@ public async Task getPayloadV1_doesnt_wait_for_improvement_when_block_is_not_emp TimeSpan timePerSlot = 50 * delay; using MergeTestBlockchain chain = await CreateBlockchainWithImprovementContext( chain => new StoringBlockImprovementContextFactory(new DelayBlockImprovementContextFactory( - chain.BlockProductionTrigger, TimeSpan.FromSeconds(chain.MergeConfig.SecondsPerSlot), 3 * delay)), + chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(chain.MergeConfig.SecondsPerSlot), 3 * delay)), timePerSlot, delay: delay); StoringBlockImprovementContextFactory improvementContextFactory = (StoringBlockImprovementContextFactory)chain.BlockImprovementContextFactory; @@ -431,7 +431,7 @@ public async Task Cannot_build_invalid_block_with_the_branch() TimeSpan delay = TimeSpan.FromMilliseconds(10); TimeSpan timePerSlot = 4 * delay; ConfigureBlockchainWithImprovementContextFactory(chain, - new StoringBlockImprovementContextFactory(new BlockImprovementContextFactory(chain.BlockProductionTrigger, TimeSpan.FromSeconds(chain.MergeConfig.SecondsPerSlot))), + new StoringBlockImprovementContextFactory(new BlockImprovementContextFactory(chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(chain.MergeConfig.SecondsPerSlot))), timePerSlot, delay); IEngineRpcModule rpc = CreateEngineModule(chain); @@ -511,7 +511,7 @@ public async Task Cannot_produce_bad_blocks() TimeSpan delay = TimeSpan.FromMilliseconds(10); TimeSpan timePerSlot = 4 * delay; using MergeTestBlockchain chain = await CreateBlockchainWithImprovementContext( - (chain) => new StoringBlockImprovementContextFactory(new BlockImprovementContextFactory(chain.BlockProductionTrigger, TimeSpan.FromSeconds(chain.MergeConfig.SecondsPerSlot))), + (chain) => new StoringBlockImprovementContextFactory(new BlockImprovementContextFactory(chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(chain.MergeConfig.SecondsPerSlot))), timePerSlot, delay: delay); IEngineRpcModule rpc = CreateEngineModule(chain); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.RelayBuilder.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.RelayBuilder.cs index 3132ef31e06..ba29dd47b27 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.RelayBuilder.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.RelayBuilder.cs @@ -48,7 +48,7 @@ public async Task forkchoiceUpdatedV1_should_communicate_with_boost_relay() }; }); - BoostBlockImprovementContextFactory improvementContextFactory = new(chain.BlockProductionTrigger, TimeSpan.FromSeconds(5), boostRelay, chain.StateReader); + BoostBlockImprovementContextFactory improvementContextFactory = new(chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(5), boostRelay, chain.StateReader); TimeSpan timePerSlot = TimeSpan.FromSeconds(10); chain.PayloadPreparationService = new PayloadPreparationService( chain.PostMergeBlockProducer!, @@ -151,7 +151,7 @@ public virtual async Task forkchoiceUpdatedV1_should_communicate_with_boost_rela DefaultHttpClient defaultHttpClient = new(mockHttp.ToHttpClient(), serializer, chain.LogManager, 1, 100); BoostRelay boostRelay = new(defaultHttpClient, relayUrl); - BoostBlockImprovementContextFactory improvementContextFactory = new(chain.BlockProductionTrigger, TimeSpan.FromSeconds(5000), boostRelay, chain.StateReader); + BoostBlockImprovementContextFactory improvementContextFactory = new(chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(5000), boostRelay, chain.StateReader); TimeSpan timePerSlot = TimeSpan.FromSeconds(1000); chain.PayloadPreparationService = new PayloadPreparationService( chain.PostMergeBlockProducer!, @@ -194,11 +194,11 @@ public async Task forkchoiceUpdatedV1_should_ignore_gas_limit([Values(false, tru boostRelay.GetPayloadAttributes(Arg.Any(), Arg.Any()) .Returns(c => (BoostPayloadAttributes)c.Arg()); - improvementContextFactory = new BoostBlockImprovementContextFactory(chain.BlockProductionTrigger, TimeSpan.FromSeconds(5), boostRelay, chain.StateReader); + improvementContextFactory = new BoostBlockImprovementContextFactory(chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(5), boostRelay, chain.StateReader); } else { - improvementContextFactory = new BlockImprovementContextFactory(chain.BlockProductionTrigger, TimeSpan.FromSeconds(5)); + improvementContextFactory = new BlockImprovementContextFactory(chain.PostMergeBlockProducer!, TimeSpan.FromSeconds(5)); } TimeSpan timePerSlot = TimeSpan.FromSeconds(10); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index e83116afd87..cb82da27f3c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -226,12 +226,11 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT ConsensusRequestsProcessor); BlockProducerEnv blockProducerEnv = blockProducerEnvFactory.Create(); - PostMergeBlockProducer? postMergeBlockProducer = blockProducerFactory.Create( - blockProducerEnv, BlockProductionTrigger); + PostMergeBlockProducer? postMergeBlockProducer = blockProducerFactory.Create(blockProducerEnv); PostMergeBlockProducer = postMergeBlockProducer; PayloadPreparationService ??= new PayloadPreparationService( postMergeBlockProducer, - new BlockImprovementContextFactory(BlockProductionTrigger, TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot)), + new BlockImprovementContextFactory(PostMergeBlockProducer, TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot)), TimerFactory.Default, LogManager, TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot), @@ -252,7 +251,6 @@ protected override IBlockProcessor CreateBlockProcessor() new BlockProcessor.BlockValidationTransactionsExecutor(TxProcessor, State), State, ReceiptStorage, - NullWitnessCollector.Instance, new BlockhashStore(BlockTree, SpecProvider, State), TxProcessor, LogManager, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs index 847c6b5a0b9..0e6d59ef663 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs @@ -20,6 +20,7 @@ using Nethermind.Core.Test.Builders; using Nethermind.Crypto; using Nethermind.Evm; +using Nethermind.Facade.Eth; using Nethermind.HealthChecks; using Nethermind.Int256; using Nethermind.JsonRpc; @@ -1033,7 +1034,7 @@ public async Task executePayloadV1_processes_passed_transactions(bool moveHead) executePayloadRequest.GasUsed = GasCostOf.Transaction * count; executePayloadRequest.StateRoot = new Hash256("0x3d2e3ced6da0d1e94e65894dc091190480f045647610ef614e1cab4241ca66e0"); - executePayloadRequest.ReceiptsRoot = new Hash256("0xc538d36ed1acf6c28187110a2de3e5df707d6d38982f436eb0db7a623f9dc2cd"); + executePayloadRequest.ReceiptsRoot = new Hash256("0xb34a29e4a30ab5d32fdbc0292a97ac1cf1028c085f538dec2d91d91c6d0b0562"); TryCalculateHash(executePayloadRequest, out Hash256? hash); executePayloadRequest.BlockHash = hash; ResultWrapper result = await rpc.engine_newPayloadV1(executePayloadRequest); @@ -1071,7 +1072,7 @@ public async Task executePayloadV1_transactions_produce_receipts() executionPayload.StateRoot = new Hash256("0x3d2e3ced6da0d1e94e65894dc091190480f045647610ef614e1cab4241ca66e0"); executionPayload.ReceiptsRoot = - new Hash256("0xc538d36ed1acf6c28187110a2de3e5df707d6d38982f436eb0db7a623f9dc2cd"); + new Hash256("0xb34a29e4a30ab5d32fdbc0292a97ac1cf1028c085f538dec2d91d91c6d0b0562"); TryCalculateHash(executionPayload, out Hash256 hash); executionPayload.BlockHash = hash; ResultWrapper result = await rpc.engine_newPayloadV1(executionPayload); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs index fb2d7fbf1d7..53736b24f91 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs @@ -476,6 +476,39 @@ public async Task ForkChoiceUpdated_should_return_unsupported_fork_but_change_la }); } + [Test] + public async Task ForkChoiceUpdated_should_return_valid_for_previous_blocks_without_state_synced() + { + static void MarkAsUnprocessed(MergeTestBlockchain chain, int blockNumber) + { + ChainLevelInfo lvl = chain.ChainLevelInfoRepository.LoadLevel(blockNumber)!; + foreach (BlockInfo info in lvl.BlockInfos) + { + info.WasProcessed = false; + } + chain.ChainLevelInfoRepository.PersistLevel(blockNumber, lvl); + } + + const int BlockCount = 10; + const int SyncingBlockNumber = 5; + + MergeTestBlockchain chain = await CreateBlockchain(releaseSpec: Cancun.Instance); + IEngineRpcModule rpcModule = CreateEngineModule(chain, null, TimeSpan.FromDays(1)); + + for (var i = 1; i < BlockCount; i++) + { + await AddNewBlockV3(rpcModule, chain, 1); + } + + Hash256 syncingBlockHash = chain.BlockTree.FindBlock(SyncingBlockNumber)!.Hash!; + MarkAsUnprocessed(chain, SyncingBlockNumber); + + ResultWrapper res2 = await rpcModule.engine_forkchoiceUpdatedV3( + new ForkchoiceStateV1(syncingBlockHash, syncingBlockHash, syncingBlockHash), null); + + Assert.That(res2.Data.PayloadStatus.Status, Is.EqualTo(PayloadStatus.Valid)); + } + public static IEnumerable ForkchoiceUpdatedV3DeclinedTestCaseSource { get @@ -628,15 +661,40 @@ public static IEnumerable CancunFieldsTestSource } } - private async Task SendNewBlockV3(IEngineRpcModule rpc, MergeTestBlockchain chain, Withdrawal[]? withdrawals) + private async Task AddNewBlockV3(IEngineRpcModule rpcModule, MergeTestBlockchain chain, int transactionCount = 0) { - ExecutionPayloadV3 executionPayload = CreateBlockRequestV3( - chain, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, withdrawals, 0, 0, parentBeaconBlockRoot: TestItem.KeccakE); - ResultWrapper executePayloadResult = await rpc.engine_newPayloadV3(executionPayload, Array.Empty(), executionPayload.ParentBeaconBlockRoot); + Transaction[] txs = BuildTransactions(chain, chain.BlockTree.Head!.Hash!, TestItem.PrivateKeyA, TestItem.AddressB, (uint)transactionCount, 0, out _, out _, 0); + chain.AddTransactions(txs); + + PayloadAttributes payloadAttributes = new() + { + Timestamp = chain.BlockTree.Head!.Timestamp + 1, + PrevRandao = TestItem.KeccakH, + SuggestedFeeRecipient = TestItem.AddressF, + Withdrawals = [], + ParentBeaconBlockRoot = TestItem.KeccakE + }; + Hash256 currentHeadHash = chain.BlockTree.HeadHash; + ForkchoiceStateV1 forkchoiceState = new(currentHeadHash, currentHeadHash, currentHeadHash); + + using SemaphoreSlim blockImprovementLock = new(0); + EventHandler onBlockImprovedHandler = (_, _) => blockImprovementLock.Release(1); + chain.PayloadPreparationService!.BlockImproved += onBlockImprovedHandler; + + string payloadId = (await rpcModule.engine_forkchoiceUpdatedV3(forkchoiceState, payloadAttributes)).Data.PayloadId!; + + await blockImprovementLock.WaitAsync(10000); + chain.PayloadPreparationService!.BlockImproved -= onBlockImprovedHandler; - executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); + ResultWrapper payloadResult = await rpcModule.engine_getPayloadV3(Bytes.FromHexString(payloadId)); + Assert.That(payloadResult.Result, Is.EqualTo(Result.Success)); + Assert.That(payloadResult.Data, Is.Not.Null); - return executionPayload; + GetPayloadV3Result payload = payloadResult.Data; + await rpcModule.engine_newPayloadV3(payload.ExecutionPayload, payload.BlobsBundle.GetBlobVersionedHashes(), TestItem.KeccakE); + + ForkchoiceStateV1 newForkchoiceState = new(payload.ExecutionPayload.BlockHash, payload.ExecutionPayload.BlockHash, payload.ExecutionPayload.BlockHash); + await rpcModule.engine_forkchoiceUpdatedV3(newForkchoiceState, null); } private async Task<(IEngineRpcModule, string?, Transaction[], MergeTestBlockchain chain)> BuildAndGetPayloadV3Result( @@ -644,21 +702,18 @@ private async Task SendNewBlockV3(IEngineRpcModule rpc, MergeT { MergeTestBlockchain chain = await CreateBlockchain(releaseSpec: spec, null); IEngineRpcModule rpcModule = CreateEngineModule(chain, null, TimeSpan.FromDays(1)); - Transaction[] txs = Array.Empty(); + Transaction[] txs = []; + + using SemaphoreSlim blockImprovementLock = new(0); + EventHandler onBlockImprovedHandler = (_, _) => blockImprovementLock.Release(1); + chain.PayloadPreparationService!.BlockImproved += onBlockImprovedHandler; + + Hash256 currentHeadHash = chain.BlockTree.HeadHash; if (transactionCount is not 0) { - using SemaphoreSlim blockImprovementLock = new(0); - - ExecutionPayload executionPayload1 = await SendNewBlockV3(rpcModule, chain, Array.Empty()); - txs = BuildTransactions(chain, executionPayload1.BlockHash, TestItem.PrivateKeyA, TestItem.AddressB, (uint)transactionCount, 0, out _, out _, 1); + txs = BuildTransactions(chain, currentHeadHash, TestItem.PrivateKeyA, TestItem.AddressB, (uint)transactionCount, 0, out _, out _, 1); chain.AddTransactions(txs); - - EventHandler onBlockImprovedHandler = (_, _) => blockImprovementLock.Release(1); - - chain.PayloadPreparationService!.BlockImproved += onBlockImprovedHandler; - await blockImprovementLock.WaitAsync(10000); - chain.PayloadPreparationService!.BlockImproved -= onBlockImprovedHandler; } PayloadAttributes payloadAttributes = new() @@ -669,11 +724,19 @@ private async Task SendNewBlockV3(IEngineRpcModule rpc, MergeT Withdrawals = [TestItem.WithdrawalA_1Eth], ParentBeaconBlockRoot = spec.IsBeaconBlockRootAvailable ? TestItem.KeccakE : null }; - Hash256 currentHeadHash = chain.BlockTree.HeadHash; + ForkchoiceStateV1 forkchoiceState = new(currentHeadHash, currentHeadHash, currentHeadHash); + string? payloadId = spec.IsBeaconBlockRootAvailable ? rpcModule.engine_forkchoiceUpdatedV3(forkchoiceState, payloadAttributes).Result?.Data?.PayloadId : rpcModule.engine_forkchoiceUpdatedV2(forkchoiceState, payloadAttributes).Result?.Data?.PayloadId; + + if (transactionCount is not 0) + { + await blockImprovementLock.WaitAsync(10000); + } + chain.PayloadPreparationService!.BlockImproved -= onBlockImprovedHandler; + return (rpcModule, payloadId, txs, chain); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExternalRpcIntegrationTests.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExternalRpcIntegrationTests.cs index 194e413c785..23b20746b5b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExternalRpcIntegrationTests.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExternalRpcIntegrationTests.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; +using Nethermind.Facade.Eth; using Nethermind.Int256; using Nethermind.JsonRpc.Modules.Eth; using Nethermind.Overseer.Test.JsonRpc; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/MergePluginTests.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/MergePluginTests.cs index e8f45b69687..ae09a209b5c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/MergePluginTests.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/MergePluginTests.cs @@ -96,7 +96,7 @@ public void Init_merge_plugin_does_not_throw_exception(bool enabled) Assert.DoesNotThrowAsync(async () => await _plugin.Init(_context)); Assert.DoesNotThrowAsync(async () => await _plugin.InitNetworkProtocol()); Assert.DoesNotThrowAsync(async () => await _plugin.InitSynchronization()); - Assert.DoesNotThrowAsync(async () => await _plugin.InitBlockProducer(_consensusPlugin!, NeverProduceTrigger.Instance, null)); + Assert.DoesNotThrow(() => _plugin.InitBlockProducer(_consensusPlugin!, null)); Assert.DoesNotThrowAsync(async () => await _plugin.InitRpcModules()); Assert.DoesNotThrowAsync(async () => await _plugin.DisposeAsync()); } @@ -111,7 +111,7 @@ public async Task Initializes_correctly() ISyncConfig syncConfig = _context.Config(); Assert.IsTrue(syncConfig.NetworkingEnabled); Assert.IsTrue(_context.GossipPolicy.CanGossipBlocks); - await _plugin.InitBlockProducer(_consensusPlugin!, NeverProduceTrigger.Instance, null); + _plugin.InitBlockProducer(_consensusPlugin!, null); Assert.IsInstanceOf(_context.BlockProducer); await _plugin.InitRpcModules(); _context.RpcModuleProvider!.Received().Register(Arg.Is>(m => m is SingletonModulePool)); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/BlockImprovementContext.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/BlockImprovementContext.cs index 059ad02f220..eeef3c2f39f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/BlockImprovementContext.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/BlockImprovementContext.cs @@ -4,6 +4,7 @@ using System; using System.Threading; using System.Threading.Tasks; +using Nethermind.Consensus; using Nethermind.Consensus.Producers; using Nethermind.Core; using Nethermind.Core.Extensions; @@ -18,7 +19,7 @@ public class BlockImprovementContext : IBlockImprovementContext private readonly FeesTracer _feesTracer = new(); public BlockImprovementContext(Block currentBestBlock, - IManualBlockProductionTrigger blockProductionTrigger, + IBlockProducer blockProducer, TimeSpan timeout, BlockHeader parentHeader, PayloadAttributes payloadAttributes, @@ -27,8 +28,8 @@ public BlockImprovementContext(Block currentBestBlock, _cancellationTokenSource = new CancellationTokenSource(timeout); CurrentBestBlock = currentBestBlock; StartDateTime = startDateTime; - ImprovementTask = blockProductionTrigger - .BuildBlock(parentHeader, _cancellationTokenSource.Token, _feesTracer, payloadAttributes) + ImprovementTask = blockProducer + .BuildBlock(parentHeader, _feesTracer, payloadAttributes, _cancellationTokenSource.Token) .ContinueWith(SetCurrentBestBlock, _cancellationTokenSource.Token); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/BlockImprovementContextFactory.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/BlockImprovementContextFactory.cs index 9540077a323..df2aa910e15 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/BlockImprovementContextFactory.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/BlockImprovementContextFactory.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using Nethermind.Consensus; using Nethermind.Consensus.Producers; using Nethermind.Core; @@ -9,12 +10,12 @@ namespace Nethermind.Merge.Plugin.BlockProduction; public class BlockImprovementContextFactory : IBlockImprovementContextFactory { - private readonly IManualBlockProductionTrigger _blockProductionTrigger; + private readonly IBlockProducer _blockProducer; private readonly TimeSpan _timeout; - public BlockImprovementContextFactory(IManualBlockProductionTrigger blockProductionTrigger, TimeSpan timeout) + public BlockImprovementContextFactory(IBlockProducer blockProducer, TimeSpan timeout) { - _blockProductionTrigger = blockProductionTrigger; + _blockProducer = blockProducer; _timeout = timeout; } @@ -23,5 +24,5 @@ public IBlockImprovementContext StartBlockImprovementContext( BlockHeader parentHeader, PayloadAttributes payloadAttributes, DateTimeOffset startDateTime) => - new BlockImprovementContext(currentBestBlock, _blockProductionTrigger, _timeout, parentHeader, payloadAttributes, startDateTime); + new BlockImprovementContext(currentBestBlock, _blockProducer, _timeout, parentHeader, payloadAttributes, startDateTime); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs index 97059251647..e90d8d8401b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs @@ -4,6 +4,7 @@ using System; using System.Threading; using System.Threading.Tasks; +using Nethermind.Consensus; using Nethermind.Consensus.Producers; using Nethermind.Core; using Nethermind.Core.Extensions; @@ -22,7 +23,7 @@ public class BoostBlockImprovementContext : IBlockImprovementContext private CancellationTokenSource? _cancellationTokenSource; public BoostBlockImprovementContext(Block currentBestBlock, - IManualBlockProductionTrigger blockProductionTrigger, + IBlockProducer blockProducer, TimeSpan timeout, BlockHeader parentHeader, PayloadAttributes payloadAttributes, @@ -35,11 +36,11 @@ public BoostBlockImprovementContext(Block currentBestBlock, _cancellationTokenSource = new CancellationTokenSource(timeout); CurrentBestBlock = currentBestBlock; StartDateTime = startDateTime; - ImprovementTask = StartImprovingBlock(blockProductionTrigger, parentHeader, payloadAttributes, _cancellationTokenSource.Token); + ImprovementTask = StartImprovingBlock(blockProducer, parentHeader, payloadAttributes, _cancellationTokenSource.Token); } private async Task StartImprovingBlock( - IManualBlockProductionTrigger blockProductionTrigger, + IBlockProducer blockProducer, BlockHeader parentHeader, PayloadAttributes payloadAttributes, CancellationToken cancellationToken) @@ -48,7 +49,7 @@ public BoostBlockImprovementContext(Block currentBestBlock, payloadAttributes = await _boostRelay.GetPayloadAttributes(payloadAttributes, cancellationToken); _stateReader.TryGetAccount(parentHeader.StateRoot!, payloadAttributes.SuggestedFeeRecipient, out AccountStruct account); UInt256 balanceBefore = account.Balance; - Block? block = await blockProductionTrigger.BuildBlock(parentHeader, cancellationToken, _feesTracer, payloadAttributes); + Block? block = await blockProducer.BuildBlock(parentHeader, _feesTracer, payloadAttributes, cancellationToken); if (block is not null) { CurrentBestBlock = block; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContextFactory.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContextFactory.cs index 06c6bf79956..fcd85831112 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContextFactory.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContextFactory.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using Nethermind.Consensus; using Nethermind.Consensus.Producers; using Nethermind.Core; using Nethermind.State; @@ -10,14 +11,14 @@ namespace Nethermind.Merge.Plugin.BlockProduction.Boost; public class BoostBlockImprovementContextFactory : IBlockImprovementContextFactory { - private readonly IManualBlockProductionTrigger _blockProductionTrigger; + private readonly IBlockProducer _blockProducer; private readonly TimeSpan _timeout; private readonly IBoostRelay _boostRelay; private readonly IStateReader _stateReader; - public BoostBlockImprovementContextFactory(IManualBlockProductionTrigger blockProductionTrigger, TimeSpan timeout, IBoostRelay boostRelay, IStateReader stateReader) + public BoostBlockImprovementContextFactory(IBlockProducer blockProducer, TimeSpan timeout, IBoostRelay boostRelay, IStateReader stateReader) { - _blockProductionTrigger = blockProductionTrigger; + _blockProducer = blockProducer; _timeout = timeout; _boostRelay = boostRelay; _stateReader = stateReader; @@ -28,5 +29,5 @@ public IBlockImprovementContext StartBlockImprovementContext( BlockHeader parentHeader, PayloadAttributes payloadAttributes, DateTimeOffset startDateTime) => - new BoostBlockImprovementContext(currentBestBlock, _blockProductionTrigger, _timeout, parentHeader, payloadAttributes, _boostRelay, _stateReader, startDateTime); + new BoostBlockImprovementContext(currentBestBlock, _blockProducer, _timeout, parentHeader, payloadAttributes, _boostRelay, _stateReader, startDateTime); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/MergeBlockProducer.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/MergeBlockProducer.cs index ab662a624be..cb3592a36ba 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/MergeBlockProducer.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/MergeBlockProducer.cs @@ -2,9 +2,12 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Threading; using System.Threading.Tasks; using Nethermind.Consensus; +using Nethermind.Consensus.Producers; using Nethermind.Core; +using Nethermind.Evm.Tracing; namespace Nethermind.Merge.Plugin.BlockProduction; @@ -20,45 +23,13 @@ public MergeBlockProducer(IBlockProducer? preMergeProducer, IBlockProducer? post _preMergeProducer = preMergeProducer; _eth2BlockProducer = postMergeBlockProducer ?? throw new ArgumentNullException(nameof(postMergeBlockProducer)); _poSSwitcher = poSSwitcher ?? throw new ArgumentNullException(nameof(poSSwitcher)); - _poSSwitcher.TerminalBlockReached += OnSwitchHappened; - if (HasPreMergeProducer) - _preMergeProducer!.BlockProduced += OnBlockProduced; - - postMergeBlockProducer.BlockProduced += OnBlockProduced; - } - - private void OnBlockProduced(object? sender, BlockEventArgs e) - { - BlockProduced?.Invoke(this, e); - } - - private void OnSwitchHappened(object? sender, EventArgs e) - { - _preMergeProducer?.StopAsync(); } - public async Task Start() - { - await _eth2BlockProducer.Start(); - if (_poSSwitcher.HasEverReachedTerminalBlock() == false && HasPreMergeProducer) - { - await _preMergeProducer!.Start(); - } - } - - public async Task StopAsync() - { - await _eth2BlockProducer.StopAsync(); - if (_poSSwitcher.HasEverReachedTerminalBlock() && HasPreMergeProducer) - await _preMergeProducer!.StopAsync(); - } - - public bool IsProducingBlocks(ulong? maxProducingInterval) + public Task BuildBlock(BlockHeader? parentHeader, IBlockTracer? blockTracer = null, + PayloadAttributes? payloadAttributes = null, CancellationToken? token = null) { return _poSSwitcher.HasEverReachedTerminalBlock() || HasPreMergeProducer == false - ? _eth2BlockProducer.IsProducingBlocks(maxProducingInterval) - : _preMergeProducer!.IsProducingBlocks(maxProducingInterval); + ? _eth2BlockProducer.BuildBlock(parentHeader, blockTracer, payloadAttributes, token) + : _preMergeProducer!.BuildBlock(parentHeader, blockTracer, payloadAttributes, token); } - - public event EventHandler? BlockProduced; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/MergeBlockProducerRunner.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/MergeBlockProducerRunner.cs new file mode 100644 index 00000000000..5521a1c339c --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/MergeBlockProducerRunner.cs @@ -0,0 +1,64 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Threading.Tasks; +using Nethermind.Consensus; +using Nethermind.Core; + +namespace Nethermind.Merge.Plugin.BlockProduction; + +public class MergeBlockProducerRunner : IBlockProducerRunner +{ + private readonly IBlockProducerRunner? _preMergeProducer; + private readonly IBlockProducerRunner _eth2BlockProducer; + private readonly IPoSSwitcher _poSSwitcher; + private bool HasPreMergeProducer => _preMergeProducer is not null; + + public MergeBlockProducerRunner(IBlockProducerRunner? preMergeProducer, IBlockProducerRunner? postMergeBlockProducer, IPoSSwitcher? poSSwitcher) + { + _preMergeProducer = preMergeProducer; + _eth2BlockProducer = postMergeBlockProducer ?? throw new ArgumentNullException(nameof(postMergeBlockProducer)); + _poSSwitcher = poSSwitcher ?? throw new ArgumentNullException(nameof(poSSwitcher)); + _poSSwitcher.TerminalBlockReached += OnSwitchHappened; + if (HasPreMergeProducer) + _preMergeProducer!.BlockProduced += OnBlockProduced; + + postMergeBlockProducer.BlockProduced += OnBlockProduced; + } + + private void OnBlockProduced(object? sender, BlockEventArgs e) + { + BlockProduced?.Invoke(this, e); + } + + private void OnSwitchHappened(object? sender, EventArgs e) + { + _preMergeProducer?.StopAsync(); + } + + public void Start() + { + _eth2BlockProducer.Start(); + if (_poSSwitcher.HasEverReachedTerminalBlock() == false && HasPreMergeProducer) + { + _preMergeProducer!.Start(); + } + } + + public async Task StopAsync() + { + await _eth2BlockProducer.StopAsync(); + if (_poSSwitcher.HasEverReachedTerminalBlock() && HasPreMergeProducer) + await _preMergeProducer!.StopAsync(); + } + + public bool IsProducingBlocks(ulong? maxProducingInterval) + { + return _poSSwitcher.HasEverReachedTerminalBlock() || HasPreMergeProducer == false + ? _eth2BlockProducer.IsProducingBlocks(maxProducingInterval) + : _preMergeProducer!.IsProducingBlocks(maxProducingInterval); + } + + public event EventHandler? BlockProduced; +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs index dc0d94753ae..16b69b24a1f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducer.cs @@ -23,7 +23,6 @@ public PostMergeBlockProducer( ITxSource txSource, IBlockchainProcessor processor, IBlockTree blockTree, - IBlockProductionTrigger blockProductionTrigger, IWorldState stateProvider, IGasLimitCalculator gasLimitCalculator, ISealEngine sealEngine, @@ -36,7 +35,6 @@ public PostMergeBlockProducer( processor, sealEngine, blockTree, - blockProductionTrigger, stateProvider, gasLimitCalculator, timestamper, diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducerFactory.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducerFactory.cs index a9e203829bd..4e1e1317629 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducerFactory.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/PostMergeBlockProducerFactory.cs @@ -3,7 +3,6 @@ using Nethermind.Config; using Nethermind.Consensus; -using Nethermind.Consensus.Producers; using Nethermind.Consensus.Transactions; using Nethermind.Core; using Nethermind.Core.Specs; @@ -38,7 +37,6 @@ public PostMergeBlockProducerFactory( public virtual PostMergeBlockProducer Create( BlockProducerEnv producerEnv, - IBlockProductionTrigger blockProductionTrigger, ITxSource? txSource = null) { @@ -46,7 +44,6 @@ public virtual PostMergeBlockProducer Create( txSource ?? producerEnv.TxSource, producerEnv.ChainProcessor, producerEnv.BlockTree, - blockProductionTrigger, producerEnv.ReadOnlyStateProvider, _gasLimitCalculator ?? new TargetAdjustedGasLimitCalculator(_specProvider, _blocksConfig), _sealEngine, diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ClientVersionV1.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ClientVersionV1.cs index dafad038918..e2108102c3f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ClientVersionV1.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ClientVersionV1.cs @@ -16,7 +16,9 @@ public ClientVersionV1() Code = ProductInfo.ClientCode; Name = ProductInfo.Name; Version = ProductInfo.Version; - Commit = ProductInfo.Commit; + Commit = ProductInfo.Commit.Length < 8 + ? string.Empty.PadLeft(8, '0') + : ProductInfo.Commit[..8]; } public string Code { get; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/NewPayloadV1Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/NewPayloadV1Result.cs index 502123b1732..ad97093144f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/NewPayloadV1Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/NewPayloadV1Result.cs @@ -12,9 +12,7 @@ namespace Nethermind.Merge.Plugin.Data; ///
public static class NewPayloadV1Result { - public static ResultWrapper Syncing = ResultWrapper.Success(PayloadStatusV1.Syncing); - - public static ResultWrapper Accepted = ResultWrapper.Success(PayloadStatusV1.Accepted); + public static readonly ResultWrapper Syncing = ResultWrapper.Success(PayloadStatusV1.Syncing); public static ResultWrapper Invalid(string validationError) { diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/ForkchoiceUpdatedHandler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/ForkchoiceUpdatedHandler.cs index 3360272a11c..94df1f54b71 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/ForkchoiceUpdatedHandler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/ForkchoiceUpdatedHandler.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using Nethermind.Blockchain; using Nethermind.Blockchain.Find; -using Nethermind.Blockchain.Synchronization; using Nethermind.Consensus; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; @@ -22,9 +21,7 @@ using Nethermind.Merge.Plugin.Data; using Nethermind.Merge.Plugin.InvalidChainTracker; using Nethermind.Merge.Plugin.Synchronization; -using Nethermind.Synchronization; using Nethermind.Synchronization.Peers; -using Nethermind.Synchronization.Peers.AllocationStrategies; namespace Nethermind.Merge.Plugin.Handlers; @@ -98,7 +95,11 @@ public async Task> Handle(ForkchoiceSta private async Task?> ApplyForkchoiceUpdate(Block? newHeadBlock, ForkchoiceStateV1 forkchoiceState, PayloadAttributes? payloadAttributes) { - using var handle = Thread.CurrentThread.BoostPriority(); + // if a head is unknown we are syncing + bool isDefinitelySyncing = newHeadBlock is null; + using ThreadExtensions.Disposable handle = isDefinitelySyncing ? + default : // Don't boost priority if we are definitely syncing + Thread.CurrentThread.BoostPriority(); if (_invalidChainTracker.IsOnKnownInvalidChain(forkchoiceState.HeadBlockHash, out Hash256? lastValidHash)) { @@ -106,7 +107,7 @@ public async Task> Handle(ForkchoiceSta return ForkchoiceUpdatedV1Result.Invalid(lastValidHash); } - if (newHeadBlock is null) // if a head is unknown we are syncing + if (isDefinitelySyncing) { string simpleRequestStr = payloadAttributes is null ? forkchoiceState.ToString() : $"{forkchoiceState} {payloadAttributes}"; if (_logger.IsInfo) _logger.Info($"Received {simpleRequestStr}"); @@ -134,7 +135,7 @@ public async Task> Handle(ForkchoiceSta return ForkchoiceUpdatedV1Result.Syncing; } - BlockInfo? blockInfo = _blockTree.GetInfo(newHeadBlock.Number, newHeadBlock.GetOrCalculateHash()).Info; + BlockInfo? blockInfo = _blockTree.GetInfo(newHeadBlock!.Number, newHeadBlock.GetOrCalculateHash()).Info; BlockHeader? safeBlockHeader = ValidateBlockHash(forkchoiceState.SafeBlockHash, out string? safeBlockErrorMsg); BlockHeader? finalizedHeader = ValidateBlockHash(forkchoiceState.FinalizedBlockHash, out string? finalizationErrorMsg); string requestStr = payloadAttributes is null @@ -151,6 +152,12 @@ public async Task> Handle(ForkchoiceSta if (!blockInfo.WasProcessed) { + if (_blockTree.IsOnMainChainBehindHead(newHeadBlock)) + { + if (_logger.IsInfo) _logger.Info($"Valid. ForkChoiceUpdated ignored - already in canonical chain. Request: {requestStr}."); + return ForkchoiceUpdatedV1Result.Valid(null, forkchoiceState.HeadBlockHash); + } + BlockHeader? blockParent = _blockTree.FindHeader(newHeadBlock.ParentHash!, blockNumber: newHeadBlock.Number - 1); if (blockParent is null) { diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Cancun.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Cancun.cs index 715cd1b44e7..1510791e28b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Cancun.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Cancun.cs @@ -14,7 +14,7 @@ public partial interface IEngineRpcModule : IRpcModule { [JsonRpcMethod( - Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", + Description = "Applies fork choice and starts building a new block if payload attributes are present.", IsSharable = true, IsImplemented = true)] Task> engine_forkchoiceUpdatedV3(ForkchoiceStateV1 forkchoiceState, PayloadAttributes? payloadAttributes = null); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Paris.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Paris.cs index 49d5f898b03..327a93d99cf 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Paris.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Paris.cs @@ -18,7 +18,7 @@ public partial interface IEngineRpcModule : IRpcModule ResultWrapper engine_exchangeTransitionConfigurationV1(TransitionConfigurationV1 beaconTransitionConfiguration); [JsonRpcMethod( - Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", + Description = "Applies fork choice and starts building a new block if payload attributes are present.", IsSharable = true, IsImplemented = true)] Task> engine_forkchoiceUpdatedV1(ForkchoiceStateV1 forkchoiceState, PayloadAttributes? payloadAttributes = null); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs index 38060d6beea..c1b63e3d301 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs @@ -14,7 +14,7 @@ namespace Nethermind.Merge.Plugin; public partial interface IEngineRpcModule : IRpcModule { [JsonRpcMethod( - Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", + Description = "Applies fork choice and starts building a new block if payload attributes are present.", IsSharable = true, IsImplemented = true)] Task> engine_forkchoiceUpdatedV2(ForkchoiceStateV1 forkchoiceState, PayloadAttributes? payloadAttributes = null); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/MergeGossipPolicy.cs b/src/Nethermind/Nethermind.Merge.Plugin/MergeGossipPolicy.cs index 91fa59badba..31f676a02dd 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/MergeGossipPolicy.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/MergeGossipPolicy.cs @@ -36,7 +36,7 @@ public MergeGossipPolicy( // According to spec (https://github.com/ethereum/EIPs/blob/d896145678bd65d3eafd8749690c1b5228875c39/EIPS/eip-3675.md#network) // We MUST discard NewBlock/NewBlockHash messages after receiving FIRST_FINALIZED_BLOCK. public bool ShouldDiscardBlocks => _poSSwitcher.TransitionFinished || - (_blockCacheService.FinalizedHash is not null && _blockCacheService.FinalizedHash != Keccak.Zero); /* _blockCacheService.FinalizedHash != null && _blockCacheService.FinalizedHash != Keccak.Zero + (_blockCacheService.FinalizedHash is not null && _blockCacheService.FinalizedHash != Keccak.Zero); /* _blockCacheService.FinalizedHash is not null && _blockCacheService.FinalizedHash != Keccak.Zero This condition was added for edge case situation. We started beacon sync, and we hadn't reached transition yet. If CL sent us non zero finalization hash, it would mean that network reached transition. However, in edge case situation (verified by merge hive tests), our node needs to be reorged to PoW again, so we can't add this condition _blockCacheService.FinalizedHash != Keccak.Zero diff --git a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.BlockProducer.cs b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.BlockProducer.cs index 38138684d89..2ad0d4f412e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.BlockProducer.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.BlockProducer.cs @@ -3,9 +3,7 @@ using System; using System.Threading.Tasks; -using Nethermind.Api.Extensions; using Nethermind.Consensus; -using Nethermind.Consensus.Producers; using Nethermind.Consensus.Transactions; using Nethermind.Core; using Nethermind.Merge.Plugin.BlockProduction; @@ -16,13 +14,12 @@ namespace Nethermind.Merge.Plugin public partial class MergePlugin { protected PostMergeBlockProducer _postMergeBlockProducer = null!; - protected IManualBlockProductionTrigger? _blockProductionTrigger = null; protected ManualTimestamper? _manualTimestamper; protected virtual PostMergeBlockProducerFactory CreateBlockProducerFactory() => new(_api.SpecProvider!, _api.SealEngine, _manualTimestamper!, _blocksConfig, _api.LogManager); - public virtual async Task InitBlockProducer(IBlockProducerFactory baseBlockProducerFactory, IBlockProductionTrigger blockProductionTrigger, ITxSource? txSource) + public virtual IBlockProducer InitBlockProducer(IBlockProducerFactory baseBlockProducerFactory, ITxSource? txSource) { if (MergeEnabled) { @@ -45,25 +42,33 @@ public virtual async Task InitBlockProducer(IBlockProducerFactor if (_logger.IsInfo) _logger.Info("Starting Merge block producer & sealer"); IBlockProducer? blockProducer = _mergeBlockProductionPolicy.ShouldInitPreMergeBlockProduction() - ? await baseBlockProducerFactory.InitBlockProducer(blockProductionTrigger, txSource) + ? baseBlockProducerFactory.InitBlockProducer(txSource) : null; _manualTimestamper ??= new ManualTimestamper(); - _blockProductionTrigger = new BuildBlocksWhenRequested(); BlockProducerEnv blockProducerEnv = _api.BlockProducerEnvFactory.Create(); _api.SealEngine = new MergeSealEngine(_api.SealEngine, _poSSwitcher, _api.SealValidator, _api.LogManager); _api.Sealer = _api.SealEngine; - _postMergeBlockProducer = CreateBlockProducerFactory().Create( - blockProducerEnv, - _blockProductionTrigger - ); - + _postMergeBlockProducer = CreateBlockProducerFactory().Create(blockProducerEnv); _api.BlockProducer = new MergeBlockProducer(blockProducer, _postMergeBlockProducer, _poSSwitcher); } return _api.BlockProducer!; } + public IBlockProducerRunner InitBlockProducerRunner(IBlockProducerRunner baseRunner) + { + if (MergeEnabled) + { + // The trigger can be different, so need to stop the old block production runner at this point. + StandardBlockProducerRunner postMergeRunner = new StandardBlockProducerRunner( + _api.ManualBlockProductionTrigger, _api.BlockTree!, _api.BlockProducer!); + return new MergeBlockProducerRunner(baseRunner, postMergeRunner, _poSSwitcher); + } + + return baseRunner; + } + // this looks redundant but Enabled actually comes from IConsensusWrapperPlugin // while MergeEnabled comes from merge config public bool Enabled => MergeEnabled; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs index 88621ba0177..e5bbb6d07ce 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs @@ -284,12 +284,8 @@ public Task InitRpcModules() if (_api.StateReader is null) throw new ArgumentNullException(nameof(_api.StateReader)); if (_beaconPivot is null) throw new ArgumentNullException(nameof(_beaconPivot)); if (_beaconSync is null) throw new ArgumentNullException(nameof(_beaconSync)); - if (_blockProductionTrigger is null) throw new ArgumentNullException(nameof(_blockProductionTrigger)); if (_peerRefresher is null) throw new ArgumentNullException(nameof(_peerRefresher)); - - if (_postMergeBlockProducer is null) throw new ArgumentNullException(nameof(_postMergeBlockProducer)); - if (_blockProductionTrigger is null) throw new ArgumentNullException(nameof(_blockProductionTrigger)); // ToDo: ugly temporary hack to not receive engine API messages before end of processing of all blocks after restart. Then we will wait 5s more to ensure everything is processed while (!_api.BlockProcessingQueue.IsEmpty) @@ -301,13 +297,13 @@ public Task InitRpcModules() IBlockImprovementContextFactory improvementContextFactory; if (string.IsNullOrEmpty(_mergeConfig.BuilderRelayUrl)) { - improvementContextFactory = new BlockImprovementContextFactory(_blockProductionTrigger, TimeSpan.FromSeconds(_blocksConfig.SecondsPerSlot)); + improvementContextFactory = new BlockImprovementContextFactory(_api.BlockProducer!, TimeSpan.FromSeconds(_blocksConfig.SecondsPerSlot)); } else { DefaultHttpClient httpClient = new(new HttpClient(), _api.EthereumJsonSerializer, _api.LogManager, retryDelayMilliseconds: 100); IBoostRelay boostRelay = new BoostRelay(httpClient, _mergeConfig.BuilderRelayUrl); - BoostBlockImprovementContextFactory boostBlockImprovementContextFactory = new(_blockProductionTrigger, TimeSpan.FromSeconds(_blocksConfig.SecondsPerSlot), boostRelay, _api.StateReader); + BoostBlockImprovementContextFactory boostBlockImprovementContextFactory = new(_api.BlockProducer!, TimeSpan.FromSeconds(_blocksConfig.SecondsPerSlot), boostRelay, _api.StateReader); improvementContextFactory = boostBlockImprovementContextFactory; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeBlockDownloader.cs b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeBlockDownloader.cs index 3173a05fe16..e808719cf13 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeBlockDownloader.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeBlockDownloader.cs @@ -227,9 +227,9 @@ bool HasMoreToSync(out BlockHeader[]? headers, out int headersToRequest) if (shouldProcess) { - // An edge case when we've got state already, but still downloading blocks before it. - // We cannot process such blocks, but still we are requested to process them via blocksRequest.Options - // So we'are detecting it and chaing from processing to receipts downloading + // An edge case where we already have the state but are still downloading preceding blocks. + // We cannot process such blocks, but we are still requested to process them via blocksRequest.Options. + // Therefore, we detect this situation and switch from processing to receipts downloading. bool headIsGenesis = _blockTree.Head?.IsGenesis ?? false; bool toBeProcessedHasNoProcessedParent = currentBlock.Number > (bestProcessedBlock + 1); bool isFastSyncTransition = headIsGenesis && toBeProcessedHasNoProcessedParent; diff --git a/src/Nethermind/Nethermind.Merkleization/Merkleizer.cs b/src/Nethermind/Nethermind.Merkleization/Merkleizer.cs index 6fa128c9fbf..1713b34da38 100644 --- a/src/Nethermind/Nethermind.Merkleization/Merkleizer.cs +++ b/src/Nethermind/Nethermind.Merkleization/Merkleizer.cs @@ -444,7 +444,7 @@ public void FeedBitlist(BitArray bitArray, ulong maximumBitlistLength) //{ // if (value.Root is null) // { - // if (value.Item == null) + // if (value.Item is null) // { // return; // } diff --git a/src/Nethermind/Nethermind.Mev.Test/MevPluginTests.cs b/src/Nethermind/Nethermind.Mev.Test/MevPluginTests.cs index 64d05280d73..f9a4def7e3f 100644 --- a/src/Nethermind/Nethermind.Mev.Test/MevPluginTests.cs +++ b/src/Nethermind/Nethermind.Mev.Test/MevPluginTests.cs @@ -49,11 +49,11 @@ public async Task Can_initialize_block_producer() await plugin.InitRpcModules(); IConsensusPlugin consensusPlugin = Substitute.For(); - consensusPlugin.InitBlockProducer(NeverProduceTrigger.Instance, null).Returns(Substitute.For()); + consensusPlugin.InitBlockProducer(null).Returns(Substitute.For()); - Task blockProducer = plugin.InitBlockProducer(consensusPlugin, NeverProduceTrigger.Instance, null); + IBlockProducer blockProducer = plugin.InitBlockProducer(consensusPlugin, null); - blockProducer.Result.Should().BeOfType(typeof(MevBlockProducer)); + blockProducer.Should().BeOfType(typeof(MevBlockProducer)); } } } diff --git a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs index 66f85dd2140..8d0f2bdc5f3 100644 --- a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs @@ -109,42 +109,22 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT new MevBlockProducerTransactionsExecutorFactory(SpecProvider, LogManager) }; - PostMergeBlockProducer CreatePostMergeBlockProducer(IBlockProductionTrigger blockProductionTrigger, - ITxSource? txSource = null) + PostMergeBlockProducer CreatePostMergeBlockProducer(ITxSource? txSource = null) { BlockProducerEnv blockProducerEnv = blockProducerEnvFactory.Create(txSource); return new PostMergeBlockProducerFactory(SpecProvider, SealEngine, Timestamper, blocksConfig, - LogManager).Create( - blockProducerEnv, blockProductionTrigger, txSource); + LogManager).Create(blockProducerEnv, txSource); } MevBlockProducer.MevBlockProducerInfo CreateProducer(int bundleLimit = 0, ITxSource? additionalTxSource = null) { - // TODO: this could be simplified a lot of the parent was not retrieved, not sure why do we need the parent here - bool BundleLimitTriggerCondition(BlockProductionEventArgs e) - { - // TODO: why do we need this parent? later we use only the current block number - BlockHeader? parent = BlockTree.GetProducedBlockParent(e.ParentHeader); - if (parent is not null) - { - // ToDo resolved conflict parent.Timestamp? - IEnumerable bundles = BundlePool.GetBundles(parent.Number + 1, parent.Timestamp); - return bundles.Count() >= bundleLimit; - } - - return false; - } - - IManualBlockProductionTrigger manualTrigger = new BuildBlocksWhenRequested(); - IBlockProductionTrigger trigger = manualTrigger; - if (bundleLimit != 0) - { - trigger = new TriggerWithCondition(manualTrigger, BundleLimitTriggerCondition); - } - - IBlockProducer producer = CreatePostMergeBlockProducer(trigger, additionalTxSource); - return new MevBlockProducer.MevBlockProducerInfo(producer, manualTrigger, new BeneficiaryTracer()); + IBlockProductionCondition condition = bundleLimit == 0 + ? AlwaysOkBlockProductionCondition.Instance + : new TestBundleLimitBlockProductionTrigger(BlockTree, BundlePool, bundleLimit); + + IBlockProducer producer = CreatePostMergeBlockProducer(additionalTxSource); + return new MevBlockProducer.MevBlockProducerInfo(producer, condition, new BeneficiaryTracer()); } int megabundleProducerCount = _relayAddresses.Length != 0 ? 1 : 0; @@ -172,11 +152,17 @@ bool BundleLimitTriggerCondition(BlockProductionEventArgs e) blockProducers.Add(bundleProducer); } - MevBlockProducer blockProducer = new MevBlockProducer(BlockProductionTrigger, LogManager, blockProducers.ToArray()); - blockProducer.BlockProduced += OnBlockProduced; + MevBlockProducer blockProducer = new MevBlockProducer(LogManager, blockProducers.ToArray()); return blockProducer; } + protected override IBlockProducerRunner CreateBlockProducerRunner() + { + IBlockProducerRunner baseRunner = base.CreateBlockProducerRunner(); + baseRunner.BlockProduced += OnBlockProduced; + return baseRunner; + } + private void OnBlockProduced(object? sender, BlockEventArgs e) { BlockTree.SuggestBlock(e.Block, BlockTreeSuggestOptions.ForceDontSetAsMain); @@ -201,7 +187,6 @@ protected override BlockProcessor CreateBlockProcessor() new BlockProcessor.BlockValidationTransactionsExecutor(TxProcessor, State), State, ReceiptStorage, - NullWitnessCollector.Instance, new BlockhashStore(BlockTree, SpecProvider, State), TxProcessor, LogManager); @@ -268,5 +253,28 @@ public MevBundle SendBundle(int blockNumber, params BundleTransaction[] txs) return new MevBundle(blockNumber, txs); } } + + private class TestBundleLimitBlockProductionTrigger( + IBlockTree blockTree, + IBundlePool bundlePool, + int bundleLimit + ) : IBlockProductionCondition + { + + // TODO: this could be simplified a lot of the parent was not retrieved, not sure why do we need the parent here + public bool CanProduce(BlockHeader parentHeader) + { + // TODO: why do we need this parent? later we use only the current block number + BlockHeader? parent = blockTree.GetProducedBlockParent(parentHeader); + if (parent is not null) + { + // ToDo resolved conflict parent.Timestamp? + IEnumerable bundles = bundlePool.GetBundles(parent.Number + 1, parent.Timestamp); + return bundles.Count() >= bundleLimit; + } + + return false; + } + } } } diff --git a/src/Nethermind/Nethermind.Mev/Execution/TracerFactory.cs b/src/Nethermind/Nethermind.Mev/Execution/TracerFactory.cs index 7fd9f25a611..d3687188d85 100644 --- a/src/Nethermind/Nethermind.Mev/Execution/TracerFactory.cs +++ b/src/Nethermind/Nethermind.Mev/Execution/TracerFactory.cs @@ -8,8 +8,10 @@ using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Tracing; using Nethermind.Consensus.Validators; +using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Db; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; using Nethermind.Trie.Pruning; @@ -46,13 +48,23 @@ public ITracer Create() ReadOnlyTxProcessingEnv txProcessingEnv = new( _worldStateManager, _blockTree, _specProvider, _logManager); + IReadOnlyTxProcessingScope scope = txProcessingEnv.Build(Keccak.EmptyTreeHash); + ReadOnlyChainProcessingEnv chainProcessingEnv = new( - txProcessingEnv, Always.Valid, _recoveryStep, NoBlockRewards.Instance, new InMemoryReceiptStorage(), _specProvider, _logManager); + scope, + Always.Valid, + _recoveryStep, + NoBlockRewards.Instance, + new InMemoryReceiptStorage(), + _specProvider, + _blockTree, + _worldStateManager.GlobalStateReader, + _logManager); - return CreateTracer(txProcessingEnv, chainProcessingEnv); + return CreateTracer(scope, chainProcessingEnv); } - protected virtual ITracer CreateTracer(ReadOnlyTxProcessingEnv txProcessingEnv, ReadOnlyChainProcessingEnv chainProcessingEnv) => - new Tracer(txProcessingEnv.StateProvider, chainProcessingEnv.ChainProcessor, chainProcessingEnv.ChainProcessor, _processingOptions); + protected virtual ITracer CreateTracer(IReadOnlyTxProcessingScope scope, ReadOnlyChainProcessingEnv chainProcessingEnv) => + new Tracer(scope.WorldState, chainProcessingEnv.ChainProcessor, chainProcessingEnv.ChainProcessor, _processingOptions); } } diff --git a/src/Nethermind/Nethermind.Mev/Execution/TxBundleExecutor.cs b/src/Nethermind/Nethermind.Mev/Execution/TxBundleExecutor.cs index 17688769cdc..9791875b94c 100644 --- a/src/Nethermind/Nethermind.Mev/Execution/TxBundleExecutor.cs +++ b/src/Nethermind/Nethermind.Mev/Execution/TxBundleExecutor.cs @@ -68,7 +68,7 @@ private Block BuildBlock(MevBundle bundle, BlockHeader parent, ulong? timestamp) protected abstract TBlockTracer CreateBlockTracer(MevBundle mevBundle); - protected ResultWrapper GetInputError(BlockchainBridge.CallOutput result) => + protected ResultWrapper GetInputError(CallOutput result) => ResultWrapper.Fail(result.Error ?? string.Empty, ErrorCodes.InvalidInput); diff --git a/src/Nethermind/Nethermind.Mev/MevBlockProducer.cs b/src/Nethermind/Nethermind.Mev/MevBlockProducer.cs index b91295929db..9c99e6b0edc 100644 --- a/src/Nethermind/Nethermind.Mev/MevBlockProducer.cs +++ b/src/Nethermind/Nethermind.Mev/MevBlockProducer.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Collections.Generic; using Nethermind.Consensus; using Nethermind.Consensus.Producers; @@ -14,10 +15,9 @@ namespace Nethermind.Mev public class MevBlockProducer : MultipleBlockProducer { public MevBlockProducer( - IBlockProductionTrigger blockProductionTrigger, ILogManager logManager, params MevBlockProducerInfo[] blockProducers) - : base(blockProductionTrigger, new MevBestBlockPicker(), logManager, blockProducers) + : base(new MevBestBlockPicker(), logManager, blockProducers) { } @@ -48,18 +48,19 @@ private class MevBestBlockPicker : IBestBlockPicker public class MevBlockProducerInfo : IBlockProducerInfo { public IBlockProducer BlockProducer { get; } - public IManualBlockProductionTrigger BlockProductionTrigger { get; } + public IBlockProductionCondition Condition { get; } public IBlockTracer BlockTracer => BeneficiaryTracer; public BeneficiaryTracer BeneficiaryTracer { get; } public MevBlockProducerInfo( IBlockProducer blockProducer, - IManualBlockProductionTrigger blockProductionTrigger, + IBlockProductionCondition checkCondition, BeneficiaryTracer beneficiaryTracer) { BlockProducer = blockProducer; - BlockProductionTrigger = blockProductionTrigger; + Condition = checkCondition; BeneficiaryTracer = beneficiaryTracer; } + } } } diff --git a/src/Nethermind/Nethermind.Mev/MevBlockProducerTransactionsExecutorFactory.cs b/src/Nethermind/Nethermind.Mev/MevBlockProducerTransactionsExecutorFactory.cs index ddfb4d90f37..110b303f61b 100644 --- a/src/Nethermind/Nethermind.Mev/MevBlockProducerTransactionsExecutorFactory.cs +++ b/src/Nethermind/Nethermind.Mev/MevBlockProducerTransactionsExecutorFactory.cs @@ -4,6 +4,7 @@ using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; namespace Nethermind.Mev @@ -19,7 +20,7 @@ public MevBlockProducerTransactionsExecutorFactory(ISpecProvider specProvider, I _logManager = logManager; } - public IBlockProcessor.IBlockTransactionsExecutor Create(ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv) => + public IBlockProcessor.IBlockTransactionsExecutor Create(IReadOnlyTxProcessingScope readOnlyTxProcessingEnv) => new MevBlockProductionTransactionsExecutor(readOnlyTxProcessingEnv, _specProvider, _logManager); } } diff --git a/src/Nethermind/Nethermind.Mev/MevBlockProductionTransactionsExecutor.cs b/src/Nethermind/Nethermind.Mev/MevBlockProductionTransactionsExecutor.cs index a12e997e876..5391651f7fa 100644 --- a/src/Nethermind/Nethermind.Mev/MevBlockProductionTransactionsExecutor.cs +++ b/src/Nethermind/Nethermind.Mev/MevBlockProductionTransactionsExecutor.cs @@ -27,12 +27,12 @@ public class MevBlockProductionTransactionsExecutor : BlockProcessor.BlockProduc private readonly IWorldState _stateProvider; public MevBlockProductionTransactionsExecutor( - ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv, + IReadOnlyTxProcessingScope readOnlyTxProcessingEnv, ISpecProvider specProvider, ILogManager logManager) : this( readOnlyTxProcessingEnv.TransactionProcessor, - readOnlyTxProcessingEnv.StateProvider, + readOnlyTxProcessingEnv.WorldState, specProvider, logManager) { diff --git a/src/Nethermind/Nethermind.Mev/MevPlugin.cs b/src/Nethermind/Nethermind.Mev/MevPlugin.cs index 19fe7901cd2..1eba1f786b2 100644 --- a/src/Nethermind/Nethermind.Mev/MevPlugin.cs +++ b/src/Nethermind/Nethermind.Mev/MevPlugin.cs @@ -133,7 +133,7 @@ public Task InitRpcModules() return Task.CompletedTask; } - public async Task InitBlockProducer(IBlockProducerFactory consensusPlugin, IBlockProductionTrigger blockProductionTrigger, ITxSource? txSource) + public IBlockProducer InitBlockProducer(IBlockProducerFactory consensusPlugin, ITxSource? txSource) { if (!Enabled) { @@ -147,57 +147,62 @@ public async Task InitBlockProducer(IBlockProducerFactory consen new(_mevConfig.MaxMergedBundles + megabundleProducerCount + 1); // Add non-mev block - MevBlockProducer.MevBlockProducerInfo standardProducer = await CreateProducer(consensusPlugin); + MevBlockProducer.MevBlockProducerInfo standardProducer = CreateProducer(consensusPlugin); blockProducers.Add(standardProducer); // Try blocks with all bundle numbers <= MaxMergedBundles for (int bundleLimit = 1; bundleLimit <= _mevConfig.MaxMergedBundles; bundleLimit++) { BundleSelector bundleSelector = new(BundlePool, bundleLimit); - MevBlockProducer.MevBlockProducerInfo bundleProducer = await CreateProducer(consensusPlugin, bundleLimit, new BundleTxSource(bundleSelector, _nethermindApi.Timestamper)); + MevBlockProducer.MevBlockProducerInfo bundleProducer = CreateProducer(consensusPlugin, bundleLimit, new BundleTxSource(bundleSelector, _nethermindApi.Timestamper)); blockProducers.Add(bundleProducer); } if (megabundleProducerCount > 0) { MegabundleSelector megabundleSelector = new(BundlePool); - MevBlockProducer.MevBlockProducerInfo bundleProducer = await CreateProducer(consensusPlugin, 0, new BundleTxSource(megabundleSelector, _nethermindApi.Timestamper)); + MevBlockProducer.MevBlockProducerInfo bundleProducer = CreateProducer(consensusPlugin, 0, new BundleTxSource(megabundleSelector, _nethermindApi.Timestamper)); blockProducers.Add(bundleProducer); } - return new MevBlockProducer(blockProductionTrigger, _nethermindApi.LogManager, blockProducers.ToArray()); + return new MevBlockProducer(_nethermindApi.LogManager, blockProducers.ToArray()); } - private async Task CreateProducer( + private MevBlockProducer.MevBlockProducerInfo CreateProducer( IBlockProducerFactory consensusPlugin, int bundleLimit = 0, ITxSource? additionalTxSource = null) { - bool BundleLimitTriggerCondition(BlockProductionEventArgs e) + IBlockProductionCondition condition = bundleLimit == 0 ? + AlwaysOkBlockProductionCondition.Instance : + new BundleLimitBlockProductionTrigger(_nethermindApi.BlockTree!, _nethermindApi.Timestamper!, BundlePool, bundleLimit); + + IBlockProducer producer = consensusPlugin.InitBlockProducer(additionalTxSource); + return new MevBlockProducer.MevBlockProducerInfo(producer, condition, new BeneficiaryTracer()); + } + + public bool Enabled => _mevConfig.Enabled; + + public ValueTask DisposeAsync() => ValueTask.CompletedTask; + + private class BundleLimitBlockProductionTrigger( + IBlockTree blockTree, + ITimestamper timestamper, + IBundlePool bundlePool, + int bundleLimit + ) : IBlockProductionCondition + { + public bool CanProduce(BlockHeader parentHeader) { // TODO: why we are checking parent and not the currently produced block...? - BlockHeader? parent = _nethermindApi.BlockTree!.GetProducedBlockParent(e.ParentHeader); + BlockHeader? parent = blockTree!.GetProducedBlockParent(parentHeader); if (parent is not null) { - IEnumerable bundles = BundlePool.GetBundles(parent, _nethermindApi.Timestamper); + IEnumerable bundles = bundlePool.GetBundles(parent, timestamper); return bundles.Count() >= bundleLimit; } return false; } - - IManualBlockProductionTrigger manualTrigger = new BuildBlocksWhenRequested(); - IBlockProductionTrigger trigger = manualTrigger; - if (bundleLimit != 0) - { - trigger = new TriggerWithCondition(manualTrigger, BundleLimitTriggerCondition); - } - - IBlockProducer producer = await consensusPlugin.InitBlockProducer(trigger, additionalTxSource); - return new MevBlockProducer.MevBlockProducerInfo(producer, manualTrigger, new BeneficiaryTracer()); } - - public bool Enabled => _mevConfig.Enabled; - - public ValueTask DisposeAsync() => ValueTask.CompletedTask; } diff --git a/src/Nethermind/Nethermind.Network.Contract/P2P/Protocol.cs b/src/Nethermind/Nethermind.Network.Contract/P2P/Protocol.cs index 50b36599d7b..4175cc638a8 100644 --- a/src/Nethermind/Nethermind.Network.Contract/P2P/Protocol.cs +++ b/src/Nethermind/Nethermind.Network.Contract/P2P/Protocol.cs @@ -30,10 +30,6 @@ public static class Protocol ///
public const string Bzz = "bzz"; /// - /// Lightweight Clients - /// - public const string Les = "les"; - /// /// Parity Warp Sync /// public const string Par = "par"; @@ -42,10 +38,6 @@ public static class Protocol ///
public const string Ndm = "ndm"; /// - /// Witness - /// - public const string Wit = "wit"; - /// /// Account Abstraction /// public const string AA = "aa"; diff --git a/src/Nethermind/Nethermind.Network.Discovery/DiscoveryApp.cs b/src/Nethermind/Nethermind.Network.Discovery/DiscoveryApp.cs index 2cf631d6e3b..0a447340ad3 100644 --- a/src/Nethermind/Nethermind.Network.Discovery/DiscoveryApp.cs +++ b/src/Nethermind/Nethermind.Network.Discovery/DiscoveryApp.cs @@ -145,14 +145,15 @@ private void InitializeUdpChannel() .Handler(new ActionChannelInitializer(InitializeChannel)); } - _bindingTask = bootstrap.BindAsync(IPAddress.Parse(_networkConfig.LocalIp!), _networkConfig.DiscoveryPort) + IPAddress ip = IPAddress.Parse(_networkConfig.LocalIp!); + _bindingTask = bootstrap.BindAsync(ip, _networkConfig.DiscoveryPort) .ContinueWith( t => { if (t.IsFaulted) { - _logger.Error("Error when establishing discovery connection", t.Exception); + _logger.Error($"Error when establishing discovery connection on Address: {ip}({_networkConfig.LocalIp}:{_networkConfig.DiscoveryPort})", t.Exception); } return _channel = t.Result; diff --git a/src/Nethermind/Nethermind.Network.Discovery/RoutingTable/NodeBucket.cs b/src/Nethermind/Nethermind.Network.Discovery/RoutingTable/NodeBucket.cs index e0a5445a4fa..6ce661d0546 100644 --- a/src/Nethermind/Nethermind.Network.Discovery/RoutingTable/NodeBucket.cs +++ b/src/Nethermind/Nethermind.Network.Discovery/RoutingTable/NodeBucket.cs @@ -51,9 +51,11 @@ public struct BondedItemsEnumerator : IEnumerator, IEnumerable this; diff --git a/src/Nethermind/Nethermind.Network.Discovery/RoutingTable/NodeTable.cs b/src/Nethermind/Nethermind.Network.Discovery/RoutingTable/NodeTable.cs index fbd597224ac..4dc4eae50d7 100644 --- a/src/Nethermind/Nethermind.Network.Discovery/RoutingTable/NodeTable.cs +++ b/src/Nethermind/Nethermind.Network.Discovery/RoutingTable/NodeTable.cs @@ -105,32 +105,25 @@ public ClosestNodesEnumerator(NodeBucket[] buckets, int bucketSize) public bool MoveNext() { - try + while (_count < _bucketSize) { - while (_count < _bucketSize) + if (!_enumeratorSet || !_itemEnumerator.MoveNext()) { - if (!_enumeratorSet || !_itemEnumerator.MoveNext()) + _itemEnumerator.Dispose(); + _bucketIndex++; + if (_bucketIndex >= _buckets.Length) { - _itemEnumerator.Dispose(); - _bucketIndex++; - if (_bucketIndex >= _buckets.Length) - { - return false; - } - - _itemEnumerator = _buckets[_bucketIndex].BondedItems.GetEnumerator(); - _enumeratorSet = true; - continue; + return false; } - Current = _itemEnumerator.Current.Node!; - _count++; - return true; + _itemEnumerator = _buckets[_bucketIndex].BondedItems.GetEnumerator(); + _enumeratorSet = true; + continue; } - } - finally - { - _itemEnumerator.Dispose(); + + Current = _itemEnumerator.Current.Node!; + _count++; + return true; } return false; @@ -138,7 +131,7 @@ public bool MoveNext() void IEnumerator.Reset() => throw new NotSupportedException(); - public void Dispose() { } + public void Dispose() => _itemEnumerator.Dispose(); public ClosestNodesEnumerator GetEnumerator() => this; @@ -171,7 +164,7 @@ public ClosestNodesFromNodeEnumerator(NodeBucket[] buckets, byte[] targetNodeId, { foreach (var item in bucket.BondedItems) { - if (item.Node != null && item.Node.IdHash != idHash) + if (item.Node is not null && item.Node.IdHash != idHash) { _sortedNodes.Add(item.Node); } diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/P2PProtocolHandlerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/P2PProtocolHandlerTests.cs index b216c17ae05..9209d9d192b 100644 --- a/src/Nethermind/Nethermind.Network.Test/P2P/P2PProtocolHandlerTests.cs +++ b/src/Nethermind/Nethermind.Network.Test/P2P/P2PProtocolHandlerTests.cs @@ -85,10 +85,9 @@ public void On_init_sends_a_hello_message() public void On_init_sends_a_hello_message_with_capabilities() { P2PProtocolHandler p2PProtocolHandler = CreateSession(); - p2PProtocolHandler.AddSupportedCapability(new Capability(Protocol.Wit, 0)); p2PProtocolHandler.Init(); - string[] expectedCapabilities = { "eth66", "eth67", "eth68", "nodedata1", "wit0" }; + string[] expectedCapabilities = ["eth66", "eth67", "eth68", "nodedata1"]; _session.Received(1).DeliverMessage( Arg.Is(m => m.Capabilities.Select(c => c.ToString()).SequenceEqual(expectedCapabilities))); } @@ -97,7 +96,6 @@ public void On_init_sends_a_hello_message_with_capabilities() public void On_hello_with_no_matching_capability() { P2PProtocolHandler p2PProtocolHandler = CreateSession(); - p2PProtocolHandler.AddSupportedCapability(new Capability(Protocol.Wit, 66)); using HelloMessage message = new() { diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/AnnounceMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/AnnounceMessageSerializerTests.cs deleted file mode 100644 index ab1384d86dc..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/AnnounceMessageSerializerTests.cs +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class AnnounceMessageSerializerTests - { - [Test] - public void RoundTripWithRequiredData() - { - using AnnounceMessage announceMessage = new(); - announceMessage.HeadHash = Keccak.Compute("1"); - announceMessage.HeadBlockNo = 4; - announceMessage.TotalDifficulty = 131200; - announceMessage.ReorgDepth = 0; - - AnnounceMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, announceMessage, "e8a0c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6048302008080c0"); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/BlockBodiesSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/BlockBodiesSerializerTests.cs deleted file mode 100644 index 38723f845dc..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/BlockBodiesSerializerTests.cs +++ /dev/null @@ -1,34 +0,0 @@ -/// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core; -using Nethermind.Core.Test.Builders; -using Nethermind.Crypto; -using Nethermind.Logging; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using Nethermind.Specs; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class BlockBodiesSerializerTests - { - [Test] - public void RoundTrip() - { - BlockHeader header = Build.A.BlockHeader.TestObject; - Address to = Build.An.Address.FromNumber(1).TestObject; - Transaction tx = Build.A.Transaction.WithTo(to).SignedAndResolved(new EthereumEcdsa(MainnetSpecProvider.Instance.ChainId, LimboLogs.Instance), TestItem.PrivateKeyA).TestObject; - tx.SenderAddress = null; - var ethMessage = new Network.P2P.Subprotocols.Eth.V62.Messages.BlockBodiesMessage(); - ethMessage.Bodies = new(new[] { new BlockBody(new[] { tx }, new[] { header }) }); - - using BlockBodiesMessage message = new(ethMessage, 1, 1000); - - BlockBodiesMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, message); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/BlockHeadersMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/BlockHeadersMessageSerializerTests.cs deleted file mode 100644 index 538ad03f5b6..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/BlockHeadersMessageSerializerTests.cs +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core; -using Nethermind.Core.Collections; -using Nethermind.Core.Test.Builders; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class BlockHeadersMessageSerializerTests - { - [Test] - public void RoundTrip() - { - var ethMessage = new Network.P2P.Subprotocols.Eth.V62.Messages.BlockHeadersMessage(); - ethMessage.BlockHeaders = new ArrayPoolList(1) { Build.A.BlockHeader.TestObject }; - using BlockHeadersMessage message = new(ethMessage, 2, 3000); - - BlockHeadersMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, message); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/ContractCodesMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/ContractCodesMessageSerializerTests.cs deleted file mode 100644 index 0c0e4427a73..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/ContractCodesMessageSerializerTests.cs +++ /dev/null @@ -1,25 +0,0 @@ -/// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Collections; -using Nethermind.Core.Test.Builders; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class ContractCodesMessageSerializerTests - { - [Test] - public void RoundTrip() - { - ArrayPoolList data = new(3) { TestItem.KeccakA.BytesToArray(), TestItem.KeccakB.BytesToArray(), TestItem.KeccakC.BytesToArray() }; - using ContractCodesMessage message = new(data, 13452, 134); - - ContractCodesMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, message); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetBlockBodiesMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetBlockBodiesMessageSerializerTests.cs deleted file mode 100644 index 444d47a032b..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetBlockBodiesMessageSerializerTests.cs +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class GetBlockBodiesMessageSerializerTests - { - [Test] - public void RoundTrip() - { - var ethMessage = new Network.P2P.Subprotocols.Eth.V62.Messages.GetBlockBodiesMessage(Keccak.OfAnEmptySequenceRlp, Keccak.Zero, Keccak.EmptyTreeHash); - var message = new GetBlockBodiesMessage(ethMessage, 1); - - GetBlockBodiesMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, message, "f86601f863a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347a00000000000000000000000000000000000000000000000000000000000000000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetBlockHeadersMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetBlockHeadersMessageSerializerTests.cs deleted file mode 100644 index bbef9b11c24..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetBlockHeadersMessageSerializerTests.cs +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class GetBlockHeadersMessageSerializerTests - { - [Test] - public void RoundTripWithHash() - { - var ethMessage = new Network.P2P.Subprotocols.Eth.V62.Messages.GetBlockHeadersMessage(); - ethMessage.StartBlockHash = Keccak.Compute("1"); - ethMessage.MaxHeaders = 10; - ethMessage.Skip = 2; - ethMessage.Reverse = 0; - - var message = new GetBlockHeadersMessage(ethMessage, 2); - - GetBlockHeadersMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, message, "e602e4a0c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc60a0280"); - } - - [Test] - public void RoundTripWithNumber() - { - var ethMessage = new Network.P2P.Subprotocols.Eth.V62.Messages.GetBlockHeadersMessage(); - ethMessage.StartBlockNumber = 1; - ethMessage.MaxHeaders = 10; - ethMessage.Skip = 2; - ethMessage.Reverse = 0; - - var message = new GetBlockHeadersMessage(ethMessage, 2); - - GetBlockHeadersMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, message, "c602c4010a0280"); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetContractCodesMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetContractCodesMessageSerializerTests.cs deleted file mode 100644 index dd88c9e3d90..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetContractCodesMessageSerializerTests.cs +++ /dev/null @@ -1,30 +0,0 @@ -/// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Test.Builders; -using Nethermind.Network.P2P.Subprotocols.Les; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class GetContractCodesMessageSerializerTests - { - [Test] - public void RoundTrip() - { - CodeRequest[] requests = new CodeRequest[] - { - new(TestItem.KeccakA, TestItem.KeccakB), - new(TestItem.KeccakC, TestItem.KeccakD), - }; - - using GetContractCodesMessage message = new(requests, 774); - - GetContractCodesMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, message); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetHelperTrieProofsMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetHelperTrieProofsMessageSerializerTests.cs deleted file mode 100644 index f58ba84a90f..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetHelperTrieProofsMessageSerializerTests.cs +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Test.Builders; -using Nethermind.Network.P2P.Subprotocols.Les; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class GetHelperTrieProofsMessageSerializerTests - { - [Test] - public void RoundTrip() - { - HelperTrieRequest[] requests = new HelperTrieRequest[] - { - new(HelperTrieType.CHT, 177, TestItem.RandomDataA, 2, 1), - new(HelperTrieType.BloomBits, 77, TestItem.RandomDataB, 4, 0), - }; - using GetHelperTrieProofsMessage message = new(); - message.RequestId = 100; - message.Requests = requests; - - GetHelperTrieProofsMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, message); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetReceiptsMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetReceiptsMessageSerializerTests.cs deleted file mode 100644 index eb07234cd78..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/GetReceiptsMessageSerializerTests.cs +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Core.Extensions; -using Nethermind.Core.Test.Builders; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class GetReceiptsMessageSerializerTests - { - [Test] - public void RoundTrip() - { - Hash256[] hashes = { TestItem.KeccakA, TestItem.KeccakB, TestItem.KeccakC }; - var ethMessage = new Network.P2P.Subprotocols.Eth.V63.Messages.GetReceiptsMessage(hashes.ToPooledList()); - - using GetReceiptsMessage getReceiptsMessage = new(ethMessage, 1); - - GetReceiptsMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, getReceiptsMessage); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/HelperTrieProofsMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/HelperTrieProofsMessageSerializerTests.cs deleted file mode 100644 index 0386738a5c2..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/HelperTrieProofsMessageSerializerTests.cs +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Test.Builders; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using Nethermind.Serialization.Rlp; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class HelperTrieProofsMessageSerializerTests - { - [Test] - public void RoundTrip() - { - byte[][] proofs = new byte[][] - { - TestItem.KeccakA.BytesToArray(), - TestItem.KeccakB.BytesToArray(), - TestItem.KeccakC.BytesToArray(), - TestItem.KeccakD.BytesToArray(), - TestItem.KeccakE.BytesToArray(), - TestItem.KeccakF.BytesToArray(), - }; - byte[][] auxData = new byte[][] - { - TestItem.KeccakG.BytesToArray(), - TestItem.KeccakH.BytesToArray(), - Rlp.Encode(Build.A.BlockHeader.TestObject).Bytes, - }; - var message = new HelperTrieProofsMessage(proofs, auxData, 324, 734); - - HelperTrieProofsMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, message); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/ReceiptsMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/ReceiptsMessageSerializerTests.cs deleted file mode 100644 index 614e8d840c9..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/ReceiptsMessageSerializerTests.cs +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core; -using Nethermind.Core.Extensions; -using Nethermind.Specs; -using Nethermind.Core.Test.Builders; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class ReceiptsMessageSerializerTests - { - [Test] - public void RoundTrip() - { - TxReceipt[][] data = { new[] { Build.A.Receipt.WithAllFieldsFilled.TestObject, Build.A.Receipt.WithAllFieldsFilled.WithBlockNumber(0).TestObject }, new[] { Build.A.Receipt.WithAllFieldsFilled.TestObject, Build.A.Receipt.WithAllFieldsFilled.TestObject }, new[] { Build.A.Receipt.WithAllFieldsFilled.WithTxType(TxType.AccessList).TestObject, Build.A.Receipt.WithAllFieldsFilled.TestObject } }; - using Network.P2P.Subprotocols.Eth.V63.Messages.ReceiptsMessage ethMessage = new(data.ToPooledList()); - using ReceiptsMessage receiptsMessage = new(ethMessage, 1, 2000); - - ReceiptsMessageSerializer serializer = new(MainnetSpecProvider.Instance); - - // Eth.ReceiptsMessageSerializer intentionally excludes fields when deserializing. - // I think it's probably best to not copy the test logic checking for this here. - byte[] bytes = serializer.Serialize(receiptsMessage); - using ReceiptsMessage deserialized = serializer.Deserialize(bytes); - - Assert.That(deserialized.RequestId, Is.EqualTo(receiptsMessage.RequestId), "RequestId"); - Assert.That(deserialized.BufferValue, Is.EqualTo(receiptsMessage.BufferValue), "BufferValue"); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/StatusMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/StatusMessageSerializerTests.cs deleted file mode 100644 index 2b8652d7a6a..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Les/StatusMessageSerializerTests.cs +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Network.P2P.Subprotocols.Les; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Les -{ - [TestFixture] - public class StatusMessageSerializerTests - { - [Test] - public void RoundTripWithAllData() - { - using StatusMessage statusMessage = new(); - statusMessage.ProtocolVersion = 3; - statusMessage.NetworkId = 1; - statusMessage.TotalDifficulty = 131200; - statusMessage.BestHash = Keccak.Compute("1"); - statusMessage.HeadBlockNo = 4; - statusMessage.GenesisHash = Keccak.Compute("0"); - statusMessage.AnnounceType = 1; - statusMessage.ServeHeaders = true; - statusMessage.ServeChainSince = 0; - statusMessage.ServeRecentChain = 1000; - statusMessage.ServeStateSince = 1; - statusMessage.ServeRecentState = 500; - statusMessage.TxRelay = true; - statusMessage.BufferLimit = 1000; - statusMessage.MaximumRechargeRate = 100; - statusMessage.MaximumRequestCosts = CostTracker.DefaultRequestCostTable; - - StatusMessageSerializer serializer = new(); - - SerializerTester.TestZero(serializer, statusMessage, "f90176d18f70726f746f636f6c56657273696f6e03cb896e6574776f726b496401cb8668656164546483020080ea886865616448617368a0c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6c987686561644e756d04ed8b67656e6573697348617368a0044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116dce8c616e6e6f756e63655479706501ce8c736572766548656164657273c0d18f7365727665436861696e53696e636580d4907365727665526563656e74436861696e8203e8d18f7365727665537461746553696e636501d4907365727665526563656e7453746174658201f4c987747852656c6179c0d28e666c6f77436f6e74726f6c2f424c8203e8d18f666c6f77436f6e74726f6c2f4d525264f84c8f666c6f77436f6e74726f6c2f4d5243f83ac802830249f0827530c60480830aae60c60680830f4240c60a808306ddd0c60f80830927c0c61180830f4240c613808306ddd0c614808303d090"); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/BlockWitnessHashesMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/BlockWitnessHashesMessageSerializerTests.cs deleted file mode 100644 index 26eb269a095..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/BlockWitnessHashesMessageSerializerTests.cs +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using FluentAssertions; -using Nethermind.Core.Crypto; -using Nethermind.Core.Test.Builders; -using Nethermind.Network.P2P.Subprotocols.Wit.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Wit -{ - [TestFixture, Parallelizable(ParallelScope.All)] - public class BlockWitnessHashesMessageSerializerTests - { - [Test] - public void Can_handle_zero() - { - BlockWitnessHashesMessageSerializer serializer = new(); - using BlockWitnessHashesMessage message = new(1, Array.Empty()); - SerializerTester.TestZero(serializer, message); - } - - [Test] - public void Can_handle_one() - { - BlockWitnessHashesMessageSerializer serializer = new(); - using BlockWitnessHashesMessage message = new(1, new[] { Keccak.Zero }); - SerializerTester.TestZero(serializer, message); - } - - [Test] - public void Can_handle_many() - { - BlockWitnessHashesMessageSerializer serializer = new(); - using BlockWitnessHashesMessage message = new(1, TestItem.Keccaks); - SerializerTester.TestZero(serializer, message); - } - - [Test] - public void Can_handle_null() - { - BlockWitnessHashesMessageSerializer serializer = new(); - using BlockWitnessHashesMessage message = new(1, null); - byte[] serialized = serializer.Serialize(message); - serialized[0].Should().Be(194); - serializer.Deserialize(serialized); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/GetBlockWitnessHashesMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/GetBlockWitnessHashesMessageSerializerTests.cs deleted file mode 100644 index 25fdf425b45..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/GetBlockWitnessHashesMessageSerializerTests.cs +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using FluentAssertions; -using Nethermind.Core.Crypto; -using Nethermind.Core.Extensions; -using Nethermind.Network.P2P.Subprotocols.Wit.Messages; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Wit -{ - [TestFixture, Parallelizable(ParallelScope.All)] - public class MessageTests - { - [Test] - public void Message_code_is_correct_in_request() - { - new GetBlockWitnessHashesMessage(1, Keccak.Zero).PacketType.Should().Be(1); - } - - [Test] - public void Message_code_is_correct_in_response() - { - new BlockWitnessHashesMessage(1, null).PacketType.Should().Be(2); - } - } - - [TestFixture, Parallelizable(ParallelScope.All)] - public class GetBlockWitnessHashesMessageSerializerTests - { - [Test] - public void Roundtrip_init() - { - GetBlockWitnessHashesMessageSerializer serializer = new(); - using GetBlockWitnessHashesMessage message = new(1, Keccak.Zero); - SerializerTester.TestZero(serializer, message); - } - - [Test] - public void Can_handle_null() - { - GetBlockWitnessHashesMessageSerializer serializer = new(); - using GetBlockWitnessHashesMessage message = new(1, null); - SerializerTester.TestZero(serializer, message); - } - - [Test] - public void Can_deserialize_trinity() - { - GetBlockWitnessHashesMessageSerializer serializer = new(); - var trinityBytes = Bytes.FromHexString("0xea880ea29ca8028d7edea04bf6040124107de018c753ff2a9e464ca13e9d099c45df6a48ddbf436ce30c83"); - var buffer = ByteBufferUtil.DefaultAllocator.Buffer(trinityBytes.Length); - buffer.WriteBytes(trinityBytes); - using GetBlockWitnessHashesMessage msg = - ((IZeroMessageSerializer)serializer).Deserialize(buffer); - } - } -} diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/WitProtocolHandlerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/WitProtocolHandlerTests.cs deleted file mode 100644 index fe339024c82..00000000000 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Wit/WitProtocolHandlerTests.cs +++ /dev/null @@ -1,163 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Linq; -using System.Net; -using System.Reflection; -using System.Threading; -using System.Threading.Tasks; -using FluentAssertions; -using Nethermind.Core.Crypto; -using Nethermind.Core.Test.Builders; -using Nethermind.Logging; -using Nethermind.Network.P2P; -using Nethermind.Network.P2P.Subprotocols.Wit; -using Nethermind.Network.P2P.Subprotocols.Wit.Messages; -using Nethermind.Network.Rlpx; -using Nethermind.Stats; -using Nethermind.Stats.Model; -using Nethermind.Synchronization; -using NSubstitute; -using NUnit.Framework; - -namespace Nethermind.Network.Test.P2P.Subprotocols.Wit -{ - [TestFixture, Parallelizable(ParallelScope.All)] - public class WitProtocolHandlerTests - { - [Test] - public void Protocol_code_is_wit() - { - Context context = new(); - context.WitProtocolHandler.ProtocolCode.Should().Be("wit"); - } - - [Test] - public void Protocol_version_is_zero() - { - Context context = new(); - context.WitProtocolHandler.ProtocolVersion.Should().Be(0); - } - - [Test] - public void Message_space_should_be_correct() - { - int maxCode = typeof(WitMessageCode) - .GetFields(BindingFlags.Static | BindingFlags.Public) - .Where(f => f.FieldType == typeof(int)) - .Select(f => (int)f.GetValue(null)!).Max(); - - Context context = new(); - context.WitProtocolHandler.MessageIdSpaceSize.Should().Be(maxCode + 1); - } - - [Test] - public void Name_should_be_wit0() - { - Context context = new(); - context.WitProtocolHandler.Name.Should().Be("wit0"); - } - - [Test] - public void Init_does_nothing() - { - Context context = new(); - context.WitProtocolHandler.Init(); - } - - [Test] - public void Can_disconnect() - { - Context context = new(); - context.WitProtocolHandler.DisconnectProtocol(DisconnectReason.Other, "just because"); - context.WitProtocolHandler.Dispose(); - } - - [Test] - public void Init_timeout_should_timeout_eth() - { - Context context = new(); - bool initialized = false; - context.WitProtocolHandler.ProtocolInitialized += - (s, e) => initialized = true; - context.WitProtocolHandler.Init(); - initialized.Should().BeTrue(); - } - - [Test] - public void Can_handle_request_for_an_empty_witness() - { - Context context = new(); - context.WitProtocolHandler.Init(); - - using GetBlockWitnessHashesMessage msg = new(5, Keccak.Zero); - GetBlockWitnessHashesMessageSerializer serializer = new(); - var serialized = serializer.Serialize(msg); - - context.WitProtocolHandler.HandleMessage(new Packet("wit", WitMessageCode.GetBlockWitnessHashes, serialized)); - context.SyncServer.Received().GetBlockWitnessHashes(Keccak.Zero); - } - - [Test] - public void Can_handle_request_for_a_non_empty_witness() - { - Context context = new(); - context.SyncServer.GetBlockWitnessHashes(Keccak.Zero) - .Returns(new[] { TestItem.KeccakA, TestItem.KeccakB }); - - context.WitProtocolHandler.Init(); - - using GetBlockWitnessHashesMessage msg = new(5, Keccak.Zero); - GetBlockWitnessHashesMessageSerializer serializer = new(); - var serialized = serializer.Serialize(msg); - - context.WitProtocolHandler.HandleMessage(new Packet("wit", WitMessageCode.GetBlockWitnessHashes, serialized)); - context.Session.Received().DeliverMessage( - Arg.Is(msg => msg.Hashes.Length == 2)); - } - - [Test] - public async Task Can_request_non_empty_witness() - { - Context context = new(); - using BlockWitnessHashesMessage msg = new(5, new[] { TestItem.KeccakA, TestItem.KeccakB }); - BlockWitnessHashesMessageSerializer serializer = new(); - var serialized = serializer.Serialize(msg); - - context.WitProtocolHandler.Init(); - - - context.Session - // check if you did not enable the Init -> send message diag - .When(s => s.DeliverMessage( - Arg.Is(msg => msg.BlockHash == TestItem.KeccakA))) - .Do(_ => context.WitProtocolHandler.HandleMessage(new Packet("wit", WitMessageCode.BlockWitnessHashes, serialized))); - Task result = context.WitProtocolHandler.GetBlockWitnessHashes(TestItem.KeccakA, CancellationToken.None); - await result; - result.Status.Should().Be(TaskStatus.RanToCompletion); - } - - private class Context - { - public ISession Session { get; } - public ISyncServer SyncServer { get; } - public WitProtocolHandler WitProtocolHandler { get; } - - public Context() - { - MessageSerializationService serializationService = new(); - serializationService.Register(typeof(GetBlockWitnessHashesMessage).Assembly); - Session = Substitute.For(); - Session.Node.Returns(new Node(TestItem.PublicKeyA, new IPEndPoint(IPAddress.Loopback, 30303))); - INodeStatsManager nodeStats = Substitute.For(); - SyncServer = Substitute.For(); - WitProtocolHandler = new WitProtocolHandler( - Session, - serializationService, - nodeStats, - SyncServer, - LimboLogs.Instance); - } - } - } -} diff --git a/src/Nethermind/Nethermind.Network/Metrics.cs b/src/Nethermind/Nethermind.Network/Metrics.cs index c8d7f1c84fa..01b41f57889 100644 --- a/src/Nethermind/Nethermind.Network/Metrics.cs +++ b/src/Nethermind/Nethermind.Network/Metrics.cs @@ -1,25 +1,11 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; using System.Collections.Concurrent; -using System.Collections.Frozen; -using System.Collections.Generic; using System.ComponentModel; -using System.Linq; -using System.Reflection; using System.Runtime.Serialization; using Nethermind.Core.Attributes; using Nethermind.Network.P2P; -using Nethermind.Network.P2P.Subprotocols.Eth.V62; -using Nethermind.Network.P2P.Subprotocols.Eth.V63; -using Nethermind.Network.P2P.Subprotocols.Eth.V65; -using Nethermind.Network.P2P.Subprotocols.Eth.V66; -using Nethermind.Network.P2P.Subprotocols.Eth.V68; -using Nethermind.Network.P2P.Subprotocols.Les; -using Nethermind.Network.P2P.Subprotocols.NodeData; -using Nethermind.Network.P2P.Subprotocols.Snap; -using Nethermind.Network.P2P.Subprotocols.Wit; using Nethermind.Stats.Model; namespace Nethermind.Network diff --git a/src/Nethermind/Nethermind.Network/P2P/P2PMessageKey.cs b/src/Nethermind/Nethermind.Network/P2P/P2PMessageKey.cs index 17bcacfb843..8166c0cb8aa 100644 --- a/src/Nethermind/Nethermind.Network/P2P/P2PMessageKey.cs +++ b/src/Nethermind/Nethermind.Network/P2P/P2PMessageKey.cs @@ -12,10 +12,8 @@ using Nethermind.Network.P2P.Subprotocols.Eth.V65; using Nethermind.Network.P2P.Subprotocols.Eth.V66; using Nethermind.Network.P2P.Subprotocols.Eth.V68; -using Nethermind.Network.P2P.Subprotocols.Les; using Nethermind.Network.P2P.Subprotocols.NodeData; using Nethermind.Network.P2P.Subprotocols.Snap; -using Nethermind.Network.P2P.Subprotocols.Wit; namespace Nethermind.Network.P2P; @@ -33,8 +31,6 @@ public record struct P2PMessageKey(VersionedProtocol Protocol, int PacketType) : .Concat(FromMessageCodeClass(Contract.P2P.Protocol.Eth, typeof(Eth68MessageCode))) .Concat(FromMessageCodeClass(Contract.P2P.Protocol.NodeData, typeof(NodeDataMessageCode))) - .Concat(FromMessageCodeClass(Contract.P2P.Protocol.Wit, typeof(WitMessageCode))) - .Concat(FromMessageCodeClass(Contract.P2P.Protocol.Les, typeof(LesMessageCode))) .Concat(FromMessageCodeClass(Contract.P2P.Protocol.Snap, typeof(SnapMessageCode))) diff --git a/src/Nethermind/Nethermind.Network/P2P/ProtocolHandlers/SyncPeerProtocolHandlerBase.cs b/src/Nethermind/Nethermind.Network/P2P/ProtocolHandlers/SyncPeerProtocolHandlerBase.cs index f65e44e8122..bc5ebe0ef08 100644 --- a/src/Nethermind/Nethermind.Network/P2P/ProtocolHandlers/SyncPeerProtocolHandlerBase.cs +++ b/src/Nethermind/Nethermind.Network/P2P/ProtocolHandlers/SyncPeerProtocolHandlerBase.cs @@ -74,7 +74,8 @@ public abstract class SyncPeerProtocolHandlerBase : ZeroProtocolHandlerBase, ISy initialRequestSize: 4 ); - protected LruKeyCache NotifiedTransactions { get; } = new(2 * MemoryAllowance.MemPoolSize, "notifiedTransactions"); + protected LruKeyCacheLowObject? _notifiedTransactions; + protected LruKeyCacheLowObject NotifiedTransactions => _notifiedTransactions ??= new(2 * MemoryAllowance.MemPoolSize, "notifiedTransactions"); protected SyncPeerProtocolHandlerBase(ISession session, IMessageSerializationService serializer, diff --git a/src/Nethermind/Nethermind.Network/P2P/Session.cs b/src/Nethermind/Nethermind.Network/P2P/Session.cs index e29e2df39e8..f092fd41ce2 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Session.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Session.cs @@ -674,7 +674,7 @@ private void RecordOutgoingMessageMetric(T message, int size) where T : P2PMe private void RecordIncomingMessageMetric(string protocol, int packetType, int size) { - if (protocol == null) return; + if (protocol is null) return; byte version = _protocols.TryGetValue(protocol, out IProtocolHandler? handler) ? handler!.ProtocolVersion : (byte)0; diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/PooledTxsRequestor.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/PooledTxsRequestor.cs index 05c9805e9d0..b9036c0285b 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/PooledTxsRequestor.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/PooledTxsRequestor.cs @@ -19,8 +19,7 @@ public class PooledTxsRequestor : IPooledTxsRequestor private readonly ITxPool _txPool; private readonly ITxPoolConfig _txPoolConfig; - private readonly LruKeyCache _pendingHashes = new(MemoryAllowance.TxHashCacheSize, - Math.Min(1024 * 16, MemoryAllowance.TxHashCacheSize), "pending tx hashes"); + private readonly LruKeyCacheLowObject _pendingHashes = new(MemoryAllowance.TxHashCacheSize, "pending tx hashes"); public PooledTxsRequestor(ITxPool txPool, ITxPoolConfig txPoolConfig) { diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Eth62ProtocolHandler.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Eth62ProtocolHandler.cs index 783c85e47d9..8c531355cc1 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Eth62ProtocolHandler.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Eth62ProtocolHandler.cs @@ -33,7 +33,8 @@ public class Eth62ProtocolHandler : SyncPeerProtocolHandlerBase, IZeroProtocolHa protected readonly ITxPool _txPool; private readonly IGossipPolicy _gossipPolicy; private readonly ITxGossipPolicy _txGossipPolicy; - private readonly LruKeyCache _lastBlockNotificationCache = new(10, "LastBlockNotificationCache"); + private LruKeyCache? _lastBlockNotificationCache; + private LruKeyCache LastBlockNotificationCache => _lastBlockNotificationCache ??= new(10, "LastBlockNotificationCache"); public Eth62ProtocolHandler(ISession session, IMessageSerializationService serializer, @@ -338,7 +339,7 @@ public override void NotifyOfNewBlock(Block block, SendBlockMode mode) return; } - if (_lastBlockNotificationCache.Set(block.Hash)) + if (LastBlockNotificationCache.Set(block.Hash)) { switch (mode) { diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V63/Messages/ReceiptsMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V63/Messages/ReceiptsMessageSerializer.cs index 63b4dbe5940..d6fb02e485d 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V63/Messages/ReceiptsMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V63/Messages/ReceiptsMessageSerializer.cs @@ -14,7 +14,7 @@ namespace Nethermind.Network.P2P.Subprotocols.Eth.V63.Messages public class ReceiptsMessageSerializer : IZeroInnerMessageSerializer { private readonly ISpecProvider _specProvider; - private readonly ReceiptMessageDecoder _decoder = new(); + private static readonly IRlpStreamDecoder _decoder = Rlp.GetStreamDecoder(); public ReceiptsMessageSerializer(ISpecProvider specProvider) { @@ -50,8 +50,6 @@ public void Serialize(IByteBuffer byteBuffer, ReceiptsMessage message) _decoder.Encode(stream, txReceipt, _specProvider.GetReceiptSpec(txReceipt.BlockNumber).IsEip658Enabled ? RlpBehaviors.Eip658Receipts : RlpBehaviors.None); } - - } } diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/CodeRequest.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/CodeRequest.cs deleted file mode 100644 index 778928450b3..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/CodeRequest.cs +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; - -namespace Nethermind.Network.P2P.Subprotocols.Les -{ - public class CodeRequest - { - public Hash256 BlockHash; - public Hash256 AccountKey; - - public CodeRequest() - { - } - - public CodeRequest(Hash256 blockHash, Hash256 accountKey) - { - BlockHash = blockHash; - AccountKey = accountKey; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/CostTracker.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/CostTracker.cs deleted file mode 100644 index 576383f449f..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/CostTracker.cs +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Network.P2P.Subprotocols.Les -{ - class CostTracker - { - // These are the initial defaults from geth. - // It probably doesn't make sense to define them here in the finished implementation, since the client will want to use the values supplied by the server - - // TODO: Benchmark finished implementation and update based on our actual serve times. - // TODO: Implement cost scaling to account for users with different capabilities - https://github.com/ethereum/go-ethereum/blob/01d92531ee0993c0e6e5efe877a1242bfd808626/les/costtracker.go#L437 - // TODO: Implement multiple cost lists, so it can be limited based on the minimum of available bandwidth, cpu time, etc. - https://github.com/ethereum/go-ethereum/blob/01d92531ee0993c0e6e5efe877a1242bfd808626/les/costtracker.go#L186 - // TODO: This might be better as a dictionary - public static RequestCostItem[] DefaultRequestCostTable = new RequestCostItem[] - { - new(LesMessageCode.GetBlockHeaders, 150_000, 30_000), - new(LesMessageCode.GetBlockBodies, 0, 700_000), - new(LesMessageCode.GetReceipts, 0, 1_000_000), - new(LesMessageCode.GetContractCodes, 0, 450_000), - new(LesMessageCode.GetProofsV2, 0, 600_000), - new(LesMessageCode.GetHelperTrieProofs, 0, 1_000_000), - new(LesMessageCode.SendTxV2, 0, 450_000), - new(LesMessageCode.GetTxStatus, 0, 250_000) - }; - - } - -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/HelperTrieRequest.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/HelperTrieRequest.cs deleted file mode 100644 index 594f208600f..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/HelperTrieRequest.cs +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Network.P2P.Subprotocols.Les -{ - public class HelperTrieRequest - { - public HelperTrieType SubType; - public long SectionIndex; - public byte[] Key; - public long FromLevel; - public int AuxiliaryData; - - public HelperTrieRequest() - { - } - - public HelperTrieRequest(HelperTrieType subType, long sectionIndex, byte[] key, long fromLevel, int auxiliaryData) - { - SubType = subType; - SectionIndex = sectionIndex; - Key = key; - FromLevel = fromLevel; - AuxiliaryData = auxiliaryData; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/HelperTrieType.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/HelperTrieType.cs deleted file mode 100644 index 3095020682f..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/HelperTrieType.cs +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Network.P2P.Subprotocols.Les -{ - public enum HelperTrieType - { - CHT = 0, - BloomBits = 1, - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesAnnounceType.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesAnnounceType.cs deleted file mode 100644 index 69fedcd3027..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesAnnounceType.cs +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Network.P2P.Subprotocols.Les -{ - public enum LesAnnounceType - { - None = 0x00, - Simple = 0x01, - Signed = 0x02 - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesMessageCode.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesMessageCode.cs deleted file mode 100644 index ccf4812d5ad..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesMessageCode.cs +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Network.P2P.Subprotocols.Les -{ - public static class LesMessageCode - { - public const int Status = 0x00; - public const int Announce = 0x01; - public const int GetBlockHeaders = 0x02; - public const int BlockHeaders = 0x03; - public const int GetBlockBodies = 0x04; - public const int BlockBodies = 0x05; - public const int GetReceipts = 0x06; - public const int Receipts = 0x07; - public const int GetProofs = 0x08; // deprecated - public const int Proofs = 0x09; // deprecated - public const int GetContractCodes = 0x0a; - public const int ContractCodes = 0x0b; - public const int SendTx = 0x0c; // deprecated - public const int GetHeaderProofs = 0x0d; // deprecated - public const int HeaderProofs = 0x0e; // deprecated - public const int GetProofsV2 = 0x0f; - public const int ProofsV2 = 0x10; - public const int GetHelperTrieProofs = 0x11; - public const int HelperTrieProofs = 0x12; - public const int SendTxV2 = 0x13; - public const int GetTxStatus = 0x14; - public const int TxStatus = 0x15; - public const int Stop = 0x16; - public const int Resume = 0x17; - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesProtocolHandler.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesProtocolHandler.cs deleted file mode 100644 index d1d71d1f40a..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesProtocolHandler.cs +++ /dev/null @@ -1,314 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Nethermind.Blockchain; -using Nethermind.Blockchain.Synchronization; -using Nethermind.Consensus.Scheduler; -using Nethermind.Core; -using Nethermind.Core.Collections; -using Nethermind.Core.Crypto; -using Nethermind.Core.Extensions; -using Nethermind.Int256; -using Nethermind.Logging; -using Nethermind.Network.Contract.P2P; -using Nethermind.Network.P2P.EventArg; -using Nethermind.Network.P2P.ProtocolHandlers; -using Nethermind.Network.P2P.Subprotocols.Les.Messages; -using Nethermind.Network.Rlpx; -using Nethermind.Serialization.Rlp; -using Nethermind.Stats; -using Nethermind.Synchronization; -using Nethermind.Synchronization.FastSync; -using CancellationToken = System.Threading.CancellationToken; - -namespace Nethermind.Network.P2P.Subprotocols.Les -{ - public class LesProtocolHandler : SyncPeerProtocolHandlerBase, ISyncPeer - { - public override string Name => "les3"; - public override bool IncludeInTxPool => false; - - public LesProtocolHandler( - ISession session, - IMessageSerializationService serializer, - INodeStatsManager statsManager, - ISyncServer syncServer, - IBackgroundTaskScheduler backgroundTaskScheduler, - ILogManager logManager) : base(session, serializer, statsManager, syncServer, backgroundTaskScheduler, logManager) - { - _lastSentBlock = SyncServer.Head; - } - - public override void Init() - { - if (Logger.IsTrace) Logger.Trace($"{ProtocolCode} v{ProtocolVersion} subprotocol initializing with {Session.Node:c}"); - if (SyncServer.Head is null) - { - throw new InvalidOperationException($"Cannot initialize {ProtocolCode} v{ProtocolVersion} protocol without the head block set"); - } - - BlockHeader head = SyncServer.Head; - StatusMessage statusMessage = new() - { - ProtocolVersion = ProtocolVersion, - NetworkId = (UInt256)SyncServer.NetworkId, - TotalDifficulty = head.TotalDifficulty ?? head.Difficulty, - BestHash = head.Hash, - HeadBlockNo = head.Number, - GenesisHash = SyncServer.Genesis.Hash, - - // TODO - implement config option for these - ServeHeaders = true, - ServeChainSince = 0x00, - //if (config.recentchain is not null) - // ServeRecentChain = Config.recentchain - ServeStateSince = 0x00, - //if (Config.serverecentstate is not null) - // ServeRecentState = Config.RecentState - TxRelay = true, - // TODO - should allow setting to infinite - BufferLimit = int.MaxValue, - MaximumRechargeRate = int.MaxValue - }; - Send(statusMessage); - - CheckProtocolInitTimeout().ContinueWith(x => - { - if (x.IsFaulted && Logger.IsError) - { - Logger.Error("Error during lesProtocol handler timeout logic", x.Exception); - } - }); - } - - - public override byte ProtocolVersion => 3; - - public override string ProtocolCode => Protocol.Les; - - public override int MessageIdSpaceSize => 23; - - protected override TimeSpan InitTimeout => Timeouts.Les3Status; - - public LesAnnounceType RequestedAnnounceType; - - public override event EventHandler ProtocolInitialized; - public override event EventHandler SubprotocolRequested - { - add { } - remove { } - } - - bool _statusReceived; - public override void HandleMessage(ZeroPacket message) - { - if (message.PacketType != LesMessageCode.Status && !_statusReceived) - { - throw new SubprotocolException($"No {nameof(StatusMessage)} received prior to communication with {Session.Node:c}."); - } - - int size = message.Content.ReadableBytes; - - switch (message.PacketType) - { - case LesMessageCode.Status: - { - using StatusMessage statusMessage = Deserialize(message.Content); - if (NetworkDiagTracer.IsEnabled) NetworkDiagTracer.ReportIncomingMessage(Session.Node.Address, Name, statusMessage.ToString(), size); - Handle(statusMessage); - break; - } - case LesMessageCode.GetBlockHeaders: - GetBlockHeadersMessage getBlockHeadersMessage = Deserialize(message.Content); - if (NetworkDiagTracer.IsEnabled) NetworkDiagTracer.ReportIncomingMessage(Session.Node.Address, Name, getBlockHeadersMessage.ToString(), size); - BackgroundTaskScheduler.ScheduleSyncServe(getBlockHeadersMessage, Handle); - break; - case LesMessageCode.GetBlockBodies: - GetBlockBodiesMessage getBlockBodiesMessage = Deserialize(message.Content); - if (NetworkDiagTracer.IsEnabled) NetworkDiagTracer.ReportIncomingMessage(Session.Node.Address, Name, getBlockBodiesMessage.ToString(), size); - BackgroundTaskScheduler.ScheduleSyncServe(getBlockBodiesMessage, Handle); - break; - case LesMessageCode.GetReceipts: - GetReceiptsMessage getReceiptsMessage = Deserialize(message.Content); - if (NetworkDiagTracer.IsEnabled) NetworkDiagTracer.ReportIncomingMessage(Session.Node.Address, Name, getReceiptsMessage.ToString(), size); - BackgroundTaskScheduler.ScheduleSyncServe(getReceiptsMessage, Handle); - break; - case LesMessageCode.GetContractCodes: - GetContractCodesMessage getContractCodesMessage = Deserialize(message.Content); - if (NetworkDiagTracer.IsEnabled) NetworkDiagTracer.ReportIncomingMessage(Session.Node.Address, Name, getContractCodesMessage.ToString(), size); - BackgroundTaskScheduler.ScheduleSyncServe(getContractCodesMessage, Handle); - break; - case LesMessageCode.GetHelperTrieProofs: - GetHelperTrieProofsMessage getHelperTrieProofsMessage = Deserialize(message.Content); - if (NetworkDiagTracer.IsEnabled) NetworkDiagTracer.ReportIncomingMessage(Session.Node.Address, Name, getHelperTrieProofsMessage.ToString(), size); - BackgroundTaskScheduler.ScheduleSyncServe(getHelperTrieProofsMessage, Handle); - break; - } - } - - public void Handle(StatusMessage status) - { - // set defaults - if (!status.AnnounceType.HasValue) status.AnnounceType = 1; - - if (_statusReceived) - { - throw new SubprotocolException($"{nameof(StatusMessage)} has already been received in the past"); - } - - _statusReceived = true; - if (Logger.IsTrace) - Logger.Trace($"LES received status from {Session.Node:c} with" + - Environment.NewLine + $" prot version\t{status.ProtocolVersion}" + - Environment.NewLine + $" network ID\t{status.NetworkId}," + - Environment.NewLine + $" genesis hash\t{status.GenesisHash}," + - Environment.NewLine + $" best hash\t{status.BestHash}," + - Environment.NewLine + $" head blockno\t{status.HeadBlockNo}," + - Environment.NewLine + $" difficulty\t{status.TotalDifficulty}" + - Environment.NewLine + $" announce type\t{status.AnnounceType}" + - Environment.NewLine + $" serve headers\t{status.ServeHeaders}" + - Environment.NewLine + $" serve chain since\t{status.ServeChainSince}" + - Environment.NewLine + $" serve recent chain\t{status.ServeRecentChain}" + - Environment.NewLine + $" serve state since\t{status.ServeStateSince}" + - Environment.NewLine + $" serve recent state\t{status.ServeRecentState}" + - Environment.NewLine + $" transaction relay\t{status.TxRelay}" + - Environment.NewLine + $" buffer limit\t{status.BufferLimit}" + - Environment.NewLine + $" max recharge\t{status.MaximumRechargeRate}"); - // todo - log max request costs table - - _remoteHeadBlockHash = status.BestHash; - - ReceivedProtocolInitMsg(status); - SyncPeerProtocolInitializedEventArgs eventArgs = new(this) - { - NetworkId = (ulong)status.NetworkId, - BestHash = status.BestHash, - GenesisHash = status.GenesisHash, - Protocol = status.Protocol, - ProtocolVersion = status.ProtocolVersion, - TotalDifficulty = status.TotalDifficulty - }; - - TotalDifficulty = status.TotalDifficulty; - RequestedAnnounceType = (LesAnnounceType)status.AnnounceType.Value; - if (RequestedAnnounceType == LesAnnounceType.Signed) throw new NotImplementedException("Signed announcements are not yet supported."); - - ProtocolInitialized?.Invoke(this, eventArgs); - } - - public async Task Handle(GetBlockHeadersMessage getBlockHeaders, CancellationToken cancellationToken) - { - using var message = getBlockHeaders; - Eth.V62.Messages.BlockHeadersMessage ethBlockHeadersMessage = await FulfillBlockHeadersRequest(message.EthMessage, cancellationToken); - // todo - implement cost tracking - return new BlockHeadersMessage(ethBlockHeadersMessage, message.RequestId, int.MaxValue); - } - - public async Task Handle(GetBlockBodiesMessage getBlockBodies, CancellationToken cancellationToken) - { - using var message = getBlockBodies; - Eth.V62.Messages.BlockBodiesMessage ethBlockBodiesMessage = await FulfillBlockBodiesRequest(message.EthMessage, cancellationToken); - // todo - implement cost tracking - return new BlockBodiesMessage(ethBlockBodiesMessage, message.RequestId, int.MaxValue); - } - - public async Task Handle(GetReceiptsMessage getReceipts, CancellationToken cancellationToken) - { - using var message = getReceipts; - Eth.V63.Messages.ReceiptsMessage ethReceiptsMessage = await FulfillReceiptsRequest(message.EthMessage, cancellationToken); - // todo - implement cost tracking - return new ReceiptsMessage(ethReceiptsMessage, message.RequestId, int.MaxValue); - } - - public Task Handle(GetContractCodesMessage getContractCodes, CancellationToken cancellationToken) - { - using var message = getContractCodes; - var codes = SyncServer.GetNodeData(message.RequestAddresses, cancellationToken, NodeDataType.Code); - // todo - implement cost tracking - return Task.FromResult(new ContractCodesMessage(codes, message.RequestId, int.MaxValue)); - } - - public Task Handle(GetHelperTrieProofsMessage getHelperTrieProofs, CancellationToken cancellationToken) - { - using var message = getHelperTrieProofs; - List proofNodes = new(); - List auxData = new(); - - for (int requestNo = 0; requestNo < message.Requests.Length; requestNo++) - { - var request = message.Requests[requestNo]; - switch (request.SubType) - { - case HelperTrieType.CHT: - GetCHTData(request, proofNodes, auxData); - break; - case HelperTrieType.BloomBits: - throw new SubprotocolException("bloom bits trie not yet supported"); - } - } - - return Task.FromResult(new HelperTrieProofsMessage(proofNodes.Distinct().ToArray(), auxData.ToArray(), message.RequestId, int.MaxValue)); - } - - public void GetCHTData(HelperTrieRequest request, List proofNodes, List auxData) - { - var cht = SyncServer.GetCHT(); - // todo - enum? - if (request.AuxiliaryData == 1) - { - auxData.Add(cht.RootHash.BytesToArray()); - return; - } - else if (request.AuxiliaryData == 2) - { - (Hash256 hash, _) = cht.Get(request.Key); - using IOwnedReadOnlyList headerResult = SyncServer.FindHeaders(hash, 1, 0, false); - if (headerResult.Count != 1) throw new SubprotocolException($"Unable to find header for block {request.Key.WithoutLeadingZeros().ToArray().ToLongFromBigEndianByteArrayWithoutLeadingZeros()} for GetHelperProofs response."); - auxData.Add(Rlp.Encode(headerResult[0]).Bytes); - } - proofNodes.AddRange(Synchronization.LesSync.CanonicalHashTrie.BuildProof(request.Key, request.SectionIndex, request.FromLevel)); - } - - private BlockHeader _lastSentBlock; - - public override void NotifyOfNewBlock(Block block, SendBlockMode mode) - { - if (RequestedAnnounceType == LesAnnounceType.None) return; - if (!block.TotalDifficulty.HasValue) - { - throw new InvalidOperationException($"Trying to send a block {block.Hash} with null total difficulty"); - } - - if (block.TotalDifficulty <= _lastSentBlock.TotalDifficulty) return; - - AnnounceMessage announceMessage = new(); - announceMessage.HeadHash = block.Hash; - announceMessage.HeadBlockNo = block.Number; - announceMessage.TotalDifficulty = block.TotalDifficulty.Value; - if (_lastSentBlock is null || block.ParentHash == _lastSentBlock.Hash) - announceMessage.ReorgDepth = 0; - else - { - BlockHeader firstCommonAncestor = SyncServer.FindLowestCommonAncestor(block.Header, _lastSentBlock); - if (firstCommonAncestor is null) - throw new SubprotocolException($"Unable to send announcement to LES peer - No common ancestor found between {block.Header} and {_lastSentBlock}"); - announceMessage.ReorgDepth = _lastSentBlock.Number - firstCommonAncestor.Number; - } - - _lastSentBlock = block.Header; - - Send(announceMessage); - } - - Task ISyncPeer.GetHeadBlockHeader(Hash256? hash, CancellationToken token) - { - return Task.FromResult(_lastSentBlock); - } - - protected override void OnDisposed() { } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesProtocolInitializedEventArgs.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesProtocolInitializedEventArgs.cs deleted file mode 100644 index 32d73f020de..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/LesProtocolInitializedEventArgs.cs +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Numerics; -using Nethermind.Core.Crypto; -using Nethermind.Network.P2P.EventArg; - -namespace Nethermind.Network.P2P.Subprotocols.Les -{ - // todo - I don't think we actually need all of these. prune later. - public class LesProtocolInitializedEventArgs : ProtocolInitializedEventArgs - { - public string Protocol { get; set; } - public byte ProtocolVersion { get; set; } - public long ChainId { get; set; } - public BigInteger TotalDifficulty { get; set; } - public Hash256 BestHash { get; set; } - public long HeadBlockNo { get; set; } - public Hash256 GenesisHash { get; set; } - public byte AnnounceType { get; set; } - public bool ServeHeaders { get; set; } - public long? ServeChainSince { get; set; } - public long? ServeRecentChain { get; set; } - public long? ServeStateSince { get; set; } - public long? ServeRecentState { get; set; } - public bool TxRelay { get; set; } - public int? BufferLimit { get; set; } - public int? MaximumRechargeRate { get; set; } - public RequestCostItem[] MaximumRequestCosts { get; set; } - public LesProtocolInitializedEventArgs(LesProtocolHandler protocolHandler) : base(protocolHandler) - { - - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/AnnounceMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/AnnounceMessage.cs deleted file mode 100644 index b4081912c5d..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/AnnounceMessage.cs +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Int256; -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class AnnounceMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.Announce; - public override string Protocol => Contract.P2P.Protocol.Les; - public Hash256 HeadHash; - public long HeadBlockNo; - public UInt256 TotalDifficulty; - public long ReorgDepth; - // todo - add optional items - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/AnnounceMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/AnnounceMessageSerializer.cs deleted file mode 100644 index d91b2bf3905..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/AnnounceMessageSerializer.cs +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class AnnounceMessageSerializer : IZeroMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, AnnounceMessage message) - { - int length = GetLength(message, out int contentLength); - byteBuffer.EnsureWritable(length); - NettyRlpStream rlpStream = new(byteBuffer); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.HeadHash); - rlpStream.Encode(message.HeadBlockNo); - rlpStream.Encode(message.TotalDifficulty); - rlpStream.Encode(message.ReorgDepth); - rlpStream.Encode(Rlp.OfEmptySequence); - } - - public AnnounceMessage Deserialize(IByteBuffer byteBuffer) - { - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - return Deserialize(rlpStream); - } - - private static int GetLength(AnnounceMessage message, out int contentLength) - { - contentLength = - Rlp.LengthOf(message.HeadHash) + - Rlp.LengthOf(message.HeadBlockNo) + - Rlp.LengthOf(message.TotalDifficulty) + - Rlp.LengthOf(message.ReorgDepth) + - Rlp.OfEmptySequence.Length; - - return Rlp.LengthOfSequence(contentLength); - } - - private static AnnounceMessage Deserialize(RlpStream rlpStream) - { - AnnounceMessage announceMessage = new(); - rlpStream.ReadSequenceLength(); - announceMessage.HeadHash = rlpStream.DecodeKeccak(); - announceMessage.HeadBlockNo = rlpStream.DecodeLong(); - announceMessage.TotalDifficulty = rlpStream.DecodeUInt256(); - announceMessage.ReorgDepth = rlpStream.DecodeLong(); - rlpStream.ReadSequenceLength(); - return announceMessage; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockBodiesMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockBodiesMessage.cs deleted file mode 100644 index 39faff48984..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockBodiesMessage.cs +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class BlockBodiesMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.BlockBodies; - public override string Protocol { get; } = Contract.P2P.Protocol.Les; - public Eth.V62.Messages.BlockBodiesMessage EthMessage { get; set; } - public long RequestId { get; set; } - public int BufferValue { get; set; } - - public BlockBodiesMessage() - { - } - - public BlockBodiesMessage(Eth.V62.Messages.BlockBodiesMessage ethMessage, long requestId, int bufferValue) - { - EthMessage = ethMessage; - RequestId = requestId; - BufferValue = bufferValue; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockBodiesMessageSerializer.cs deleted file mode 100644 index 3211a9705d0..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockBodiesMessageSerializer.cs +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class BlockBodiesMessageSerializer : IZeroMessageSerializer - { - private readonly Eth.V62.Messages.BlockBodiesMessageSerializer _baseDeserializer = new(); - - public void Serialize(IByteBuffer byteBuffer, BlockBodiesMessage message) - { - Eth.V62.Messages.BlockBodiesMessageSerializer ethSerializer = new(); - int ethMessageTotalLength = ethSerializer.GetLength(message.EthMessage, out _); - int contentLength = Rlp.LengthOf(message.RequestId) + Rlp.LengthOf(message.BufferValue) + ethMessageTotalLength; - - int totalLength = Rlp.LengthOfSequence(contentLength); - - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - byteBuffer.EnsureWritable(totalLength); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.RequestId); - rlpStream.Encode(message.BufferValue); - ethSerializer.Serialize(byteBuffer, message.EthMessage); - } - - public BlockBodiesMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - BlockBodiesMessage blockBodiesMessage = new(); - rlpStream.ReadSequenceLength(); - blockBodiesMessage.RequestId = rlpStream.DecodeLong(); - blockBodiesMessage.BufferValue = rlpStream.DecodeInt(); - blockBodiesMessage.EthMessage = _baseDeserializer.Deserialize(byteBuffer); - return blockBodiesMessage; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockHeadersMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockHeadersMessage.cs deleted file mode 100644 index 06d65d96b49..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockHeadersMessage.cs +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class BlockHeadersMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.BlockHeaders; - public override string Protocol { get; } = Contract.P2P.Protocol.Les; - public Eth.V62.Messages.BlockHeadersMessage EthMessage { get; set; } - public long RequestId { get; set; } - public int BufferValue { get; set; } - - public BlockHeadersMessage() - { - } - public BlockHeadersMessage(Eth.V62.Messages.BlockHeadersMessage ethMessage, long requestId, int bufferValue) - { - EthMessage = ethMessage; - RequestId = requestId; - BufferValue = bufferValue; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockHeadersMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockHeadersMessageSerializer.cs deleted file mode 100644 index 7a80cba9989..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/BlockHeadersMessageSerializer.cs +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class BlockHeadersMessageSerializer : IZeroMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, BlockHeadersMessage message) - { - Eth.V62.Messages.BlockHeadersMessageSerializer ethSerializer = new(); - Rlp ethMessage = new(ethSerializer.Serialize(message.EthMessage)); - int contentLength = - Rlp.LengthOf(message.RequestId) + - Rlp.LengthOf(message.BufferValue) + - ethMessage.Length; - - int totalLength = Rlp.LengthOfSequence(contentLength); - - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - byteBuffer.EnsureWritable(totalLength); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.RequestId); - rlpStream.Encode(message.BufferValue); - rlpStream.Encode(ethMessage); - } - - public BlockHeadersMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - return Deserialize(rlpStream); - } - - private static BlockHeadersMessage Deserialize(RlpStream rlpStream) - { - BlockHeadersMessage blockHeadersMessage = new(); - rlpStream.ReadSequenceLength(); - blockHeadersMessage.RequestId = rlpStream.DecodeLong(); - blockHeadersMessage.BufferValue = rlpStream.DecodeInt(); - blockHeadersMessage.EthMessage = Eth.V62.Messages.BlockHeadersMessageSerializer.Deserialize(rlpStream); - return blockHeadersMessage; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ContractCodesMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ContractCodesMessage.cs deleted file mode 100644 index 3c01e93dbfd..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ContractCodesMessage.cs +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Collections; -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class ContractCodesMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.ContractCodes; - public override string Protocol { get; } = Contract.P2P.Protocol.Les; - public long RequestId; - public int BufferValue; - public IOwnedReadOnlyList Codes; - - public ContractCodesMessage() - { - } - - public ContractCodesMessage(IOwnedReadOnlyList codes, long requestId, int bufferValue) - { - Codes = codes; - RequestId = requestId; - BufferValue = bufferValue; - } - - public override void Dispose() - { - base.Dispose(); - Codes.Dispose(); - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ContractCodesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ContractCodesMessageSerializer.cs deleted file mode 100644 index 274d453311d..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ContractCodesMessageSerializer.cs +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class ContractCodesMessageSerializer : IZeroMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, ContractCodesMessage message) - { - int innerLength = 0; - for (int i = 0; i < message.Codes.Count; i++) - { - innerLength += Rlp.LengthOf(message.Codes[i]); - } - int contentLength = - Rlp.LengthOf(message.RequestId) + - Rlp.LengthOf(message.BufferValue) + - Rlp.LengthOfSequence(innerLength); - - int totalLength = Rlp.LengthOfSequence(contentLength); - - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - byteBuffer.EnsureWritable(totalLength); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.RequestId); - rlpStream.Encode(message.BufferValue); - rlpStream.StartSequence(innerLength); - for (int i = 0; i < message.Codes.Count; i++) - { - rlpStream.Encode(message.Codes[i]); - } - } - - public ContractCodesMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - return Deserialize(rlpStream); - } - - public static ContractCodesMessage Deserialize(RlpStream rlpStream) - { - ContractCodesMessage contractCodesMessage = new(); - rlpStream.ReadSequenceLength(); - contractCodesMessage.RequestId = rlpStream.DecodeLong(); - contractCodesMessage.BufferValue = rlpStream.DecodeInt(); - contractCodesMessage.Codes = rlpStream.DecodeArrayPoolList(stream => stream.DecodeByteArray()); - return contractCodesMessage; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockBodiesMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockBodiesMessage.cs deleted file mode 100644 index 31fd5323bd6..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockBodiesMessage.cs +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class GetBlockBodiesMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.GetBlockBodies; - public override string Protocol { get; } = Contract.P2P.Protocol.Les; - public long RequestId; - public Eth.V62.Messages.GetBlockBodiesMessage EthMessage; - - public GetBlockBodiesMessage() - { - } - - public GetBlockBodiesMessage(Eth.V62.Messages.GetBlockBodiesMessage ethMessage, long requestId) - { - EthMessage = ethMessage; - RequestId = requestId; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockBodiesMessageSerializer.cs deleted file mode 100644 index 75d9a1a54f2..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockBodiesMessageSerializer.cs +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class GetBlockBodiesMessageSerializer : IZeroMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, GetBlockBodiesMessage message) - { - Eth.V62.Messages.GetBlockBodiesMessageSerializer ethSerializer = new(); - Rlp ethMessage = new(ethSerializer.Serialize(message.EthMessage)); - int contentLength = Rlp.LengthOf(message.RequestId) + ethMessage.Length; - - int totalLength = Rlp.LengthOfSequence(contentLength); - - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - byteBuffer.EnsureWritable(totalLength); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.RequestId); - rlpStream.Encode(ethMessage); - } - - public GetBlockBodiesMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - return Deserialize(rlpStream); - } - - private static GetBlockBodiesMessage Deserialize(RlpStream rlpStream) - { - GetBlockBodiesMessage getBlockBodiesMessage = new(); - rlpStream.ReadSequenceLength(); - getBlockBodiesMessage.RequestId = rlpStream.DecodeLong(); - getBlockBodiesMessage.EthMessage = Eth.V62.Messages.GetBlockBodiesMessageSerializer.Deserialize(rlpStream); - return getBlockBodiesMessage; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockHeadersMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockHeadersMessage.cs deleted file mode 100644 index ba7ba020278..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockHeadersMessage.cs +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class GetBlockHeadersMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.GetBlockHeaders; - public override string Protocol { get; } = Contract.P2P.Protocol.Les; - public long RequestId; - public Eth.V62.Messages.GetBlockHeadersMessage EthMessage; - - public GetBlockHeadersMessage() - { - } - - public GetBlockHeadersMessage(Eth.V62.Messages.GetBlockHeadersMessage ethMessage, long requestId) - { - EthMessage = ethMessage; - RequestId = requestId; - } - - public override void Dispose() - { - base.Dispose(); - EthMessage?.Dispose(); - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockHeadersMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockHeadersMessageSerializer.cs deleted file mode 100644 index e522b890213..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetBlockHeadersMessageSerializer.cs +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class GetBlockHeadersMessageSerializer : IZeroMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, GetBlockHeadersMessage message) - { - Eth.V62.Messages.GetBlockHeadersMessageSerializer ethSerializer = new(); - Rlp ethMessage = new(ethSerializer.Serialize(message.EthMessage)); - int contentLength = Rlp.LengthOf(message.RequestId) + ethMessage.Length; - - int totalLength = Rlp.LengthOfSequence(contentLength); - - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - byteBuffer.EnsureWritable(totalLength); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.RequestId); - rlpStream.Encode(ethMessage); - } - - public GetBlockHeadersMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - return Deserialize(rlpStream); - } - - private static GetBlockHeadersMessage Deserialize(RlpStream rlpStream) - { - GetBlockHeadersMessage getBlockHeadersMessage = new(); - rlpStream.ReadSequenceLength(); - getBlockHeadersMessage.RequestId = rlpStream.DecodeLong(); - getBlockHeadersMessage.EthMessage = Eth.V62.Messages.GetBlockHeadersMessageSerializer.Deserialize(rlpStream); - return getBlockHeadersMessage; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetContractCodesMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetContractCodesMessage.cs deleted file mode 100644 index 8e157088bc3..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetContractCodesMessage.cs +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Linq; -using Nethermind.Core.Crypto; -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class GetContractCodesMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.GetContractCodes; - public override string Protocol { get; } = Contract.P2P.Protocol.Les; - public long RequestId; - public CodeRequest[] Requests; - - public Hash256[] RequestAddresses => - Requests.Select(request => request.AccountKey).ToArray(); - - public GetContractCodesMessage() - { - } - - public GetContractCodesMessage(CodeRequest[] requests, long requestId) - { - Requests = requests; - RequestId = requestId; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetContractCodesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetContractCodesMessageSerializer.cs deleted file mode 100644 index 125a8ae9b4b..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetContractCodesMessageSerializer.cs +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Core.Crypto; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class GetContractCodesMessageSerializer : IZeroMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, GetContractCodesMessage message) - { - // note: If there are any changes to how a hash is encoded, this will break (compression?) - // calling LengthOf for each hash would be more resistant to future changes, if we think there will be any - int requestLength = Rlp.LengthOf(Keccak.OfAnEmptyString) * 2; - int allRequestsLength = Rlp.LengthOfSequence(requestLength) * message.Requests.Length; - int contentLength = - Rlp.LengthOf(message.RequestId) + - Rlp.LengthOfSequence(allRequestsLength); - - int totalLength = Rlp.LengthOfSequence(contentLength); - - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - byteBuffer.EnsureWritable(totalLength); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.RequestId); - - rlpStream.StartSequence(allRequestsLength); - foreach (CodeRequest request in message.Requests) - { - rlpStream.StartSequence(requestLength); - rlpStream.Encode(request.BlockHash); - rlpStream.Encode(request.AccountKey); - } - } - - public GetContractCodesMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - return Deserialize(rlpStream); - } - - public static GetContractCodesMessage Deserialize(RlpStream rlpStream) - { - GetContractCodesMessage getContractCodesMessage = new(); - rlpStream.ReadSequenceLength(); - getContractCodesMessage.RequestId = rlpStream.DecodeLong(); - getContractCodesMessage.Requests = rlpStream.DecodeArray(stream => - { - CodeRequest request = new(); - stream.ReadSequenceLength(); - request.BlockHash = stream.DecodeKeccak(); - request.AccountKey = stream.DecodeKeccak(); - return request; - }); - - return getContractCodesMessage; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetHelperTrieProofsMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetHelperTrieProofsMessage.cs deleted file mode 100644 index 6b12d29e277..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetHelperTrieProofsMessage.cs +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class GetHelperTrieProofsMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.GetHelperTrieProofs; - public override string Protocol { get; } = Contract.P2P.Protocol.Les; - public long RequestId; - public HelperTrieRequest[] Requests; - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetHelperTrieProofsMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetHelperTrieProofsMessageSerializer.cs deleted file mode 100644 index af4c3756c8d..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetHelperTrieProofsMessageSerializer.cs +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class GetHelperTrieProofsMessageSerializer : IZeroMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, GetHelperTrieProofsMessage message) - { - int innerLength = 0; - foreach (var request in message.Requests) - { - innerLength += Rlp.LengthOfSequence(GetRequestLength(request)); - } - int contentLength = Rlp.LengthOf(message.RequestId) + - Rlp.LengthOfSequence(innerLength); - - int totalLength = Rlp.LengthOfSequence(contentLength); - - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - byteBuffer.EnsureWritable(totalLength); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.RequestId); - rlpStream.StartSequence(innerLength); - foreach (var request in message.Requests) - { - rlpStream.StartSequence(GetRequestLength(request)); - rlpStream.Encode((int)request.SubType); - rlpStream.Encode(request.SectionIndex); - rlpStream.Encode(request.Key); - rlpStream.Encode(request.FromLevel); - rlpStream.Encode(request.AuxiliaryData); - } - } - - private static int GetRequestLength(HelperTrieRequest request) - { - return - Rlp.LengthOf((int)request.SubType) + - Rlp.LengthOf(request.SectionIndex) + - Rlp.LengthOf(request.Key) + - Rlp.LengthOf(request.FromLevel) + - Rlp.LengthOf(request.AuxiliaryData); - } - - public GetHelperTrieProofsMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - return Deserialize(rlpStream); - } - - public static GetHelperTrieProofsMessage Deserialize(RlpStream rlpStream) - { - GetHelperTrieProofsMessage message = new(); - rlpStream.ReadSequenceLength(); - message.RequestId = rlpStream.DecodeLong(); - message.Requests = rlpStream.DecodeArray(stream => - { - HelperTrieRequest request = new(); - stream.ReadSequenceLength(); - request.SubType = (HelperTrieType)stream.DecodeInt(); - request.SectionIndex = stream.DecodeLong(); - request.Key = stream.DecodeByteArray(); - request.FromLevel = stream.DecodeLong(); - request.AuxiliaryData = stream.DecodeInt(); - return request; - }); - return message; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetReceiptsMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetReceiptsMessage.cs deleted file mode 100644 index 1fcccd3af48..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetReceiptsMessage.cs +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class GetReceiptsMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.GetReceipts; - public override string Protocol { get; } = Contract.P2P.Protocol.Les; - public long RequestId; - public Eth.V63.Messages.GetReceiptsMessage EthMessage; - - public GetReceiptsMessage() - { - } - - public GetReceiptsMessage(Eth.V63.Messages.GetReceiptsMessage ethMessage, long requestId) - { - EthMessage = ethMessage; - RequestId = requestId; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetReceiptsMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetReceiptsMessageSerializer.cs deleted file mode 100644 index e8d0f3decad..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/GetReceiptsMessageSerializer.cs +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class GetReceiptsMessageSerializer : IZeroMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, GetReceiptsMessage message) - { - Eth.V63.Messages.GetReceiptsMessageSerializer ethSerializer = new(); - Rlp ethMessage = new(ethSerializer.Serialize(message.EthMessage)); - int contentLength = Rlp.LengthOf(message.RequestId) + ethMessage.Length; - - int totalLength = Rlp.LengthOfSequence(contentLength); - - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - byteBuffer.EnsureWritable(totalLength); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.RequestId); - rlpStream.Encode(ethMessage); - } - - public GetReceiptsMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - return Deserialize(rlpStream); - } - - public static GetReceiptsMessage Deserialize(RlpStream rlpStream) - { - GetReceiptsMessage getReceiptsMessage = new(); - rlpStream.ReadSequenceLength(); - getReceiptsMessage.RequestId = rlpStream.DecodeLong(); - getReceiptsMessage.EthMessage = Eth.V63.Messages.GetReceiptsMessageSerializer.Deserialize(rlpStream); - return getReceiptsMessage; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/HelperTrieProofsMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/HelperTrieProofsMessage.cs deleted file mode 100644 index 961644f654d..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/HelperTrieProofsMessage.cs +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class HelperTrieProofsMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.HelperTrieProofs; - public override string Protocol { get; } = Contract.P2P.Protocol.Les; - public long RequestId; - public int BufferValue; - - public byte[][] ProofNodes; - public byte[][] AuxiliaryData; - - public HelperTrieProofsMessage() - { - } - - public HelperTrieProofsMessage(byte[][] proofNodes, byte[][] auxiliaryData, long requestId, int bufferValue) - { - ProofNodes = proofNodes; - AuxiliaryData = auxiliaryData; - RequestId = requestId; - BufferValue = bufferValue; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/HelperTrieProofsMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/HelperTrieProofsMessageSerializer.cs deleted file mode 100644 index 14a11ba6d70..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/HelperTrieProofsMessageSerializer.cs +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Core.Crypto; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class HelperTrieProofsMessageSerializer : IZeroMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, HelperTrieProofsMessage message) - { - Hash256[] proofNodesKeccak = new Hash256[message.ProofNodes.Length]; - int proofNodesContentLength = 0; - for (int i = 0; i < message.ProofNodes.Length; i++) - { - proofNodesKeccak[i] = new Hash256(message.ProofNodes[i]); - proofNodesContentLength += Rlp.LengthOf(proofNodesKeccak[i]); - } - - int tempAuxContentLength = 0; - for (int i = 0; i < message.AuxiliaryData.Length; i++) - { - tempAuxContentLength += Rlp.LengthOf(message.AuxiliaryData[i]); - } - - int innerContentLength = Rlp.LengthOfSequence(proofNodesContentLength) + Rlp.LengthOfSequence(tempAuxContentLength); - int contentLength = - Rlp.LengthOf(message.RequestId) + - Rlp.LengthOf(message.BufferValue) + - Rlp.LengthOfSequence(innerContentLength); - int totalLength = Rlp.LengthOfSequence(contentLength); - - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - byteBuffer.EnsureWritable(totalLength); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.RequestId); - rlpStream.Encode(message.BufferValue); - rlpStream.StartSequence(innerContentLength); - rlpStream.StartSequence(proofNodesContentLength); - for (int i = 0; i < message.ProofNodes.Length; i++) - { - rlpStream.Encode(proofNodesKeccak[i]); - } - rlpStream.StartSequence(tempAuxContentLength); - for (int i = 0; i < message.AuxiliaryData.Length; i++) - { - rlpStream.Encode(message.AuxiliaryData[i]); - } - } - - public HelperTrieProofsMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - return Deserialize(rlpStream); - } - - public static HelperTrieProofsMessage Deserialize(RlpStream rlpStream) - { - HelperTrieProofsMessage message = new(); - rlpStream.ReadSequenceLength(); - message.RequestId = rlpStream.DecodeLong(); - message.BufferValue = rlpStream.DecodeInt(); - rlpStream.ReadSequenceLength(); - message.ProofNodes = rlpStream.DecodeArray(stream => stream.DecodeByteArray()); - message.AuxiliaryData = rlpStream.DecodeArray(stream => stream.DecodeByteArray()); - return message; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ReceiptsMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ReceiptsMessage.cs deleted file mode 100644 index e7dbc49ddac..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ReceiptsMessage.cs +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class ReceiptsMessage : P2PMessage - { - public override int PacketType { get; } = LesMessageCode.Receipts; - public override string Protocol { get; } = Contract.P2P.Protocol.Les; - public long RequestId; - public int BufferValue; - public Eth.V63.Messages.ReceiptsMessage EthMessage; - - public ReceiptsMessage() - { - } - - public ReceiptsMessage(Eth.V63.Messages.ReceiptsMessage ethMessage, long requestId, int bufferValue) - { - EthMessage = ethMessage; - RequestId = requestId; - BufferValue = bufferValue; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ReceiptsMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ReceiptsMessageSerializer.cs deleted file mode 100644 index 8504c7df3b2..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/ReceiptsMessageSerializer.cs +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using DotNetty.Buffers; -using Nethermind.Core.Specs; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class ReceiptsMessageSerializer : IZeroMessageSerializer - { - private readonly ISpecProvider _specProvider; - - public ReceiptsMessageSerializer(ISpecProvider specProvider) - { - _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); - } - - public void Serialize(IByteBuffer byteBuffer, ReceiptsMessage message) - { - Eth.V63.Messages.ReceiptsMessageSerializer ethSerializer = new(_specProvider); - Rlp ethMessage = new(ethSerializer.Serialize(message.EthMessage)); - int contentLength = Rlp.LengthOf(message.RequestId) + Rlp.LengthOf(message.BufferValue) + ethMessage.Length; - - int totalLength = Rlp.LengthOfSequence(contentLength); - - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - byteBuffer.EnsureWritable(totalLength); - - rlpStream.StartSequence(contentLength); - rlpStream.Encode(message.RequestId); - rlpStream.Encode(message.BufferValue); - rlpStream.Encode(ethMessage); - } - - public ReceiptsMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - return Deserialize(rlpStream); - } - - public ReceiptsMessage Deserialize(RlpStream rlpStream) - { - ReceiptsMessage receiptsMessage = new(); - Eth.V63.Messages.ReceiptsMessageSerializer ethSerializer = new(_specProvider); - - rlpStream.ReadSequenceLength(); - receiptsMessage.RequestId = rlpStream.DecodeLong(); - receiptsMessage.BufferValue = rlpStream.DecodeInt(); - receiptsMessage.EthMessage = ethSerializer.Deserialize(rlpStream); - return receiptsMessage; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/StatusMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/StatusMessage.cs deleted file mode 100644 index a3f4c79d97c..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/StatusMessage.cs +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Int256; -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class StatusMessage : P2PMessage - { - public static class KeyNames - { - public const string ProtocolVersion = "protocolVersion"; - public const string NetworkId = "networkId"; - public const string TotalDifficulty = "headTd"; - public const string BestHash = "headHash"; - public const string HeadBlockNo = "headNum"; - public const string GenesisHash = "genesisHash"; - public const string AnnounceType = "announceType"; - public const string ServeHeaders = "serveHeaders"; - public const string ServeChainSince = "serveChainSince"; - public const string ServeRecentChain = "serveRecentChain"; - public const string ServeStateSince = "serveStateSince"; - public const string ServeRecentState = "serveRecentState"; - public const string TxRelay = "txRelay"; - public const string BufferLimit = "flowControl/BL"; - public const string MaximumRechargeRate = "flowControl/MRR"; - public const string MaximumRequestCosts = "flowControl/MRC"; - } - - public override int PacketType { get; } = LesMessageCode.Status; - public override string Protocol => Contract.P2P.Protocol.Les; - public byte ProtocolVersion { get; set; } - public UInt256 NetworkId { get; set; } - public UInt256 TotalDifficulty { get; set; } - public Hash256 BestHash { get; set; } - public long HeadBlockNo { get; set; } - public Hash256 GenesisHash { get; set; } - #region optional - public byte? AnnounceType { get; set; } // sent from client only - public bool ServeHeaders { get; set; } - public long? ServeChainSince { get; set; } - public long? ServeRecentChain { get; set; } - public long? ServeStateSince { get; set; } - public long? ServeRecentState { get; set; } - public bool TxRelay { get; set; } - public int? BufferLimit { get; set; } - public int? MaximumRechargeRate { get; set; } - // These are the initial defaults from geth. - // It probably doesn't make sense to define them here in the finished implementation, since the client will want to use the values supplied by the server - - // TODO: Benchmark finished implementation and update based on our actual serve times. - // TODO: Implement cost scaling to account for users with different capabilities - https://github.com/ethereum/go-ethereum/blob/01d92531ee0993c0e6e5efe877a1242bfd808626/les/costtracker.go#L437 - // TODO: Implement multiple cost lists, so it can be limited based on the minimum of available bandwidth, cpu time, etc. - https://github.com/ethereum/go-ethereum/blob/01d92531ee0993c0e6e5efe877a1242bfd808626/les/costtracker.go#L186 - // TODO: This might be better as a dictionary - public RequestCostItem[] MaximumRequestCosts = CostTracker.DefaultRequestCostTable; - #endregion - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/StatusMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/StatusMessageSerializer.cs deleted file mode 100644 index 279233a99a9..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/Messages/StatusMessageSerializer.cs +++ /dev/null @@ -1,304 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Les.Messages -{ - public class StatusMessageSerializer : IZeroMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, StatusMessage message) - { - NettyRlpStream rlpStream = new(byteBuffer); - - #region Find Lengths - int totalContentLength = 0; - int protocolVersionLength = Rlp.LengthOf(StatusMessage.KeyNames.ProtocolVersion) + Rlp.LengthOf(message.ProtocolVersion); - totalContentLength += Rlp.LengthOfSequence(protocolVersionLength); - - int networkIdLength = Rlp.LengthOf(StatusMessage.KeyNames.NetworkId) + Rlp.LengthOf(message.NetworkId); - totalContentLength += Rlp.LengthOfSequence(networkIdLength); - - int headTdLength = Rlp.LengthOf(StatusMessage.KeyNames.TotalDifficulty) + Rlp.LengthOf(message.TotalDifficulty); - totalContentLength += Rlp.LengthOfSequence(headTdLength); - - int headHashLength = Rlp.LengthOf(StatusMessage.KeyNames.BestHash) + Rlp.LengthOf(message.BestHash); - totalContentLength += Rlp.LengthOfSequence(headHashLength); - - int headNumLength = Rlp.LengthOf(StatusMessage.KeyNames.HeadBlockNo) + Rlp.LengthOf(message.HeadBlockNo); - totalContentLength += Rlp.LengthOfSequence(headNumLength); - - int genesisHashLength = Rlp.LengthOf(StatusMessage.KeyNames.GenesisHash) + Rlp.LengthOf(message.GenesisHash); - totalContentLength += Rlp.LengthOfSequence(genesisHashLength); - - int announceTypeLength = 0; - if (message.AnnounceType.HasValue) - { - announceTypeLength = Rlp.LengthOf(StatusMessage.KeyNames.AnnounceType) + Rlp.LengthOf(message.AnnounceType.Value); - totalContentLength += Rlp.LengthOfSequence(announceTypeLength); - } - - int serveHeadersLength = 0; - if (message.ServeHeaders) - { - serveHeadersLength = Rlp.LengthOf(StatusMessage.KeyNames.ServeHeaders) + Rlp.OfEmptySequence.Length; - totalContentLength += Rlp.LengthOfSequence(serveHeadersLength); - } - - int serveChainSinceLength = 0; - if (message.ServeChainSince.HasValue) - { - serveChainSinceLength = Rlp.LengthOf(StatusMessage.KeyNames.ServeChainSince) + Rlp.LengthOf(message.ServeChainSince.Value); - totalContentLength += Rlp.LengthOfSequence(serveChainSinceLength); - } - - int serveRecentChainLength = 0; - if (message.ServeRecentChain.HasValue) - { - serveRecentChainLength = Rlp.LengthOf(StatusMessage.KeyNames.ServeRecentChain) + Rlp.LengthOf(message.ServeRecentChain.Value); - totalContentLength += Rlp.LengthOfSequence(serveRecentChainLength); - } - - int serveStateSinceLength = 0; - if (message.ServeStateSince.HasValue) - { - serveStateSinceLength = Rlp.LengthOf(StatusMessage.KeyNames.ServeStateSince) + Rlp.LengthOf(message.ServeStateSince.Value); - totalContentLength += Rlp.LengthOfSequence(serveStateSinceLength); - } - - int serveRecentStateLength = 0; - if (message.ServeRecentState.HasValue) - { - serveRecentStateLength = Rlp.LengthOf(StatusMessage.KeyNames.ServeRecentState) + Rlp.LengthOf(message.ServeRecentState.Value); - totalContentLength += Rlp.LengthOfSequence(serveRecentStateLength); - } - - int txRelayLength = 0; - if (message.TxRelay) - { - txRelayLength = Rlp.LengthOf(StatusMessage.KeyNames.TxRelay) + Rlp.OfEmptySequence.Length; - totalContentLength += Rlp.LengthOfSequence(txRelayLength); - } - - int bufferLimitLength = 0; - if (message.BufferLimit.HasValue) - { - bufferLimitLength = Rlp.LengthOf(StatusMessage.KeyNames.BufferLimit) + Rlp.LengthOf(message.BufferLimit.Value); - totalContentLength += Rlp.LengthOfSequence(bufferLimitLength); - } - - int maxRechargeRateLength = 0; - if (message.MaximumRechargeRate.HasValue) - { - maxRechargeRateLength = Rlp.LengthOf(StatusMessage.KeyNames.MaximumRechargeRate) + Rlp.LengthOf(message.MaximumRechargeRate.Value); - totalContentLength += Rlp.LengthOfSequence(maxRechargeRateLength); - } - - int maxRequestCostsLength = 0; - int innerCostListLength = 0; - if (message.MaximumRequestCosts is not null) - { - // todo - what's the best way to do this? Calculating the length twice is definitely less than ideal. - // Maybe build RLP for them here, and append bytes below? - maxRequestCostsLength += Rlp.LengthOf(StatusMessage.KeyNames.MaximumRequestCosts); - foreach (var item in message.MaximumRequestCosts) - { - int costContentLength = Rlp.LengthOf(item.MessageCode) + Rlp.LengthOf(item.BaseCost) + Rlp.LengthOf(item.RequestCost); - innerCostListLength += Rlp.LengthOfSequence(costContentLength); - } - maxRequestCostsLength += Rlp.LengthOfSequence(innerCostListLength); - totalContentLength += Rlp.LengthOfSequence(maxRequestCostsLength); - } - #endregion - - #region Encode Values - int totalLength = Rlp.LengthOfSequence(totalContentLength); - byteBuffer.EnsureWritable(totalLength); - rlpStream.StartSequence(totalContentLength); - - rlpStream.StartSequence(protocolVersionLength); - rlpStream.Encode(StatusMessage.KeyNames.ProtocolVersion); - rlpStream.Encode(message.ProtocolVersion); - - rlpStream.StartSequence(networkIdLength); - rlpStream.Encode(StatusMessage.KeyNames.NetworkId); - rlpStream.Encode(message.NetworkId); - - rlpStream.StartSequence(headTdLength); - rlpStream.Encode(StatusMessage.KeyNames.TotalDifficulty); - rlpStream.Encode(message.TotalDifficulty); - - rlpStream.StartSequence(headHashLength); - rlpStream.Encode(StatusMessage.KeyNames.BestHash); - rlpStream.Encode(message.BestHash); - - rlpStream.StartSequence(headNumLength); - rlpStream.Encode(StatusMessage.KeyNames.HeadBlockNo); - rlpStream.Encode(message.HeadBlockNo); - - rlpStream.StartSequence(genesisHashLength); - rlpStream.Encode(StatusMessage.KeyNames.GenesisHash); - rlpStream.Encode(message.GenesisHash); - - if (message.AnnounceType.HasValue) - { - rlpStream.StartSequence(announceTypeLength); - rlpStream.Encode(StatusMessage.KeyNames.AnnounceType); - rlpStream.Encode(message.AnnounceType.Value); - } - - if (message.ServeHeaders) - { - rlpStream.StartSequence(serveHeadersLength); - rlpStream.Encode(StatusMessage.KeyNames.ServeHeaders); - rlpStream.Encode(Rlp.OfEmptySequence); - } - - if (message.ServeChainSince.HasValue) - { - rlpStream.StartSequence(serveChainSinceLength); - rlpStream.Encode(StatusMessage.KeyNames.ServeChainSince); - rlpStream.Encode(message.ServeChainSince.Value); - } - - if (message.ServeRecentChain.HasValue) - { - rlpStream.StartSequence(serveRecentChainLength); - rlpStream.Encode(StatusMessage.KeyNames.ServeRecentChain); - rlpStream.Encode(message.ServeRecentChain.Value); - } - - if (message.ServeStateSince.HasValue) - { - rlpStream.StartSequence(serveStateSinceLength); - rlpStream.Encode(StatusMessage.KeyNames.ServeStateSince); - rlpStream.Encode(message.ServeStateSince.Value); - } - - if (message.ServeRecentState.HasValue) - { - rlpStream.StartSequence(serveRecentStateLength); - rlpStream.Encode(StatusMessage.KeyNames.ServeRecentState); - rlpStream.Encode(message.ServeRecentState.Value); - } - - if (message.TxRelay) - { - rlpStream.StartSequence(txRelayLength); - rlpStream.Encode(StatusMessage.KeyNames.TxRelay); - rlpStream.Encode(Rlp.OfEmptySequence); - } - - if (message.BufferLimit.HasValue) - { - rlpStream.StartSequence(bufferLimitLength); - rlpStream.Encode(StatusMessage.KeyNames.BufferLimit); - rlpStream.Encode(message.BufferLimit.Value); - } - - if (message.MaximumRechargeRate.HasValue) - { - rlpStream.StartSequence(maxRechargeRateLength); - rlpStream.Encode(StatusMessage.KeyNames.MaximumRechargeRate); - rlpStream.Encode(message.MaximumRechargeRate.Value); - } - - if (message.MaximumRequestCosts is not null) - { - rlpStream.StartSequence(maxRequestCostsLength); - rlpStream.Encode(StatusMessage.KeyNames.MaximumRequestCosts); - rlpStream.StartSequence(innerCostListLength); - foreach (var item in message.MaximumRequestCosts) - { - int length = Rlp.LengthOf(item.MessageCode) + Rlp.LengthOf(item.BaseCost) + Rlp.LengthOf(item.RequestCost); - rlpStream.StartSequence(length); - rlpStream.Encode(item.MessageCode); - rlpStream.Encode(item.BaseCost); - rlpStream.Encode(item.RequestCost); - } - } - #endregion - } - - public StatusMessage Deserialize(IByteBuffer byteBuffer) - { - RlpStream rlpStream = new NettyRlpStream(byteBuffer); - return Deserialize(rlpStream); - } - - private static StatusMessage Deserialize(RlpStream rlpStream) - { - StatusMessage statusMessage = new(); - (int prefixLength, int contentLength) = rlpStream.PeekPrefixAndContentLength(); - var totalLength = contentLength; - rlpStream.Position += prefixLength; - var readLength = prefixLength; - while (totalLength > readLength) - { - (prefixLength, contentLength) = rlpStream.PeekPrefixAndContentLength(); - readLength += prefixLength + contentLength; - rlpStream.Position += prefixLength; - string key = rlpStream.DecodeString(); - switch (key) - { - case StatusMessage.KeyNames.ProtocolVersion: - statusMessage.ProtocolVersion = rlpStream.DecodeByte(); - break; - case StatusMessage.KeyNames.NetworkId: - statusMessage.NetworkId = rlpStream.DecodeUInt256(); - break; - case StatusMessage.KeyNames.TotalDifficulty: - statusMessage.TotalDifficulty = rlpStream.DecodeUInt256(); - break; - case StatusMessage.KeyNames.BestHash: - statusMessage.BestHash = rlpStream.DecodeKeccak(); - break; - case StatusMessage.KeyNames.HeadBlockNo: - statusMessage.HeadBlockNo = rlpStream.DecodeLong(); - break; - case StatusMessage.KeyNames.GenesisHash: - statusMessage.GenesisHash = rlpStream.DecodeKeccak(); - break; - case StatusMessage.KeyNames.AnnounceType: - statusMessage.AnnounceType = rlpStream.DecodeByte(); - break; - case StatusMessage.KeyNames.ServeHeaders: - statusMessage.ServeHeaders = true; - rlpStream.SkipItem(); - break; - case StatusMessage.KeyNames.ServeChainSince: - statusMessage.ServeChainSince = rlpStream.DecodeLong(); - break; - case StatusMessage.KeyNames.ServeRecentChain: - statusMessage.ServeRecentChain = rlpStream.DecodeLong(); - break; - case StatusMessage.KeyNames.ServeStateSince: - statusMessage.ServeStateSince = rlpStream.DecodeLong(); - break; - case StatusMessage.KeyNames.ServeRecentState: - statusMessage.ServeRecentState = rlpStream.DecodeLong(); - break; - case StatusMessage.KeyNames.TxRelay: - statusMessage.TxRelay = true; - rlpStream.SkipItem(); - break; - case StatusMessage.KeyNames.BufferLimit: - statusMessage.BufferLimit = rlpStream.DecodeInt(); - break; - case StatusMessage.KeyNames.MaximumRechargeRate: - statusMessage.MaximumRechargeRate = rlpStream.DecodeInt(); - break; - case StatusMessage.KeyNames.MaximumRequestCosts: - // todo - default: - // Ignore unknown keys - rlpStream.Position = readLength; - break; - } - } - - return statusMessage; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/RequestCost.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/RequestCost.cs deleted file mode 100644 index d9aa502fac8..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Les/RequestCost.cs +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Network.P2P.Subprotocols.Les -{ - public class RequestCostItem - { - public int MessageCode; - public int BaseCost; - public int RequestCost; - public RequestCostItem(int messageCode, int baseCost, int requestCost) - { - MessageCode = messageCode; - BaseCost = baseCost; - RequestCost = requestCost; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/BlockWitnessHashesMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/BlockWitnessHashesMessage.cs deleted file mode 100644 index a6092bd0859..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/BlockWitnessHashesMessage.cs +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Wit.Messages -{ - public class BlockWitnessHashesMessage(long requestId, Hash256[] hashes) : P2PMessage - { - public override int PacketType { get; } = WitMessageCode.BlockWitnessHashes; - - public override string Protocol { get; } = "wit"; - - public long RequestId { get; } = requestId; - - public Hash256[] Hashes { get; } = hashes; - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/BlockWitnessHashesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/BlockWitnessHashesMessageSerializer.cs deleted file mode 100644 index 23f99bfa29d..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/BlockWitnessHashesMessageSerializer.cs +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Core.Crypto; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Wit.Messages -{ - public class BlockWitnessHashesMessageSerializer : IZeroInnerMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, BlockWitnessHashesMessage message) - { - NettyRlpStream nettyRlpStream = new(byteBuffer); - - int contentLength = GetLength(message, out int totalLength); - - byteBuffer.EnsureWritable(totalLength); - nettyRlpStream.StartSequence(contentLength); - nettyRlpStream.Encode(message.RequestId); - if (message.Hashes is null) - { - nettyRlpStream.EncodeNullObject(); - } - else - { - int hashesContentLength = message.Hashes?.Length * Rlp.LengthOfKeccakRlp ?? 0; - nettyRlpStream.StartSequence(hashesContentLength); - foreach (Hash256 keccak in message.Hashes) - { - nettyRlpStream.Encode(keccak); - } - } - } - - public int GetLength(BlockWitnessHashesMessage message, out int contentLength) - { - if (message.Hashes is null) - { - contentLength = Rlp.OfEmptySequence.Length; - } - else - { - int hashesContentLength = message.Hashes?.Length * Rlp.LengthOfKeccakRlp ?? 0; - contentLength = Rlp.LengthOfSequence(hashesContentLength) + Rlp.LengthOf(message.RequestId); - - } - return Rlp.LengthOfSequence(contentLength); - } - - public BlockWitnessHashesMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - rlpStream.ReadSequenceLength(); - long requestId = rlpStream.DecodeLong(); - int sequenceLength = rlpStream.ReadSequenceLength(); - Hash256[] hashes = new Hash256[sequenceLength / Rlp.LengthOfKeccakRlp]; - for (int i = 0; i < hashes.Length; i++) - { - hashes[i] = rlpStream.DecodeKeccak(); - } - - return new BlockWitnessHashesMessage(requestId, hashes); - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/GetBlockWitnessHashesMessage.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/GetBlockWitnessHashesMessage.cs deleted file mode 100644 index 007ef042ba6..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/GetBlockWitnessHashesMessage.cs +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Network.P2P.Messages; - -namespace Nethermind.Network.P2P.Subprotocols.Wit.Messages -{ - public class GetBlockWitnessHashesMessage : P2PMessage - { - public override int PacketType { get; } = WitMessageCode.GetBlockWitnessHashes; - public override string Protocol { get; } = "wit"; - - public long RequestId { get; set; } - public Hash256 BlockHash { get; set; } - - public GetBlockWitnessHashesMessage(long requestId, Hash256 blockHash) - { - RequestId = requestId; - BlockHash = blockHash; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/GetBlockWitnessHashesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/GetBlockWitnessHashesMessageSerializer.cs deleted file mode 100644 index 132c69efbfb..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/Messages/GetBlockWitnessHashesMessageSerializer.cs +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using DotNetty.Buffers; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Network.P2P.Subprotocols.Wit.Messages -{ - public class GetBlockWitnessHashesMessageSerializer : IZeroInnerMessageSerializer - { - public void Serialize(IByteBuffer byteBuffer, GetBlockWitnessHashesMessage message) - { - NettyRlpStream nettyRlpStream = new(byteBuffer); - int totalLength = GetLength(message, out int contentLength); - byteBuffer.EnsureWritable(totalLength, true); - nettyRlpStream.StartSequence(contentLength); - nettyRlpStream.Encode(message.RequestId); - nettyRlpStream.Encode(message.BlockHash); - } - - public int GetLength(GetBlockWitnessHashesMessage message, out int contentLength) - { - contentLength = Rlp.LengthOf(message.RequestId) - + (message.BlockHash is null ? 1 : Rlp.LengthOfKeccakRlp); - return Rlp.LengthOfSequence(contentLength) + Rlp.LengthOf(message.RequestId) + Rlp.LengthOf(message.BlockHash); - } - - public GetBlockWitnessHashesMessage Deserialize(IByteBuffer byteBuffer) - { - NettyRlpStream rlpStream = new(byteBuffer); - rlpStream.ReadSequenceLength(); - long requestId = rlpStream.DecodeLong(); - var hash = rlpStream.DecodeKeccak(); - return new GetBlockWitnessHashesMessage(requestId, hash); - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/WitMessageCode.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/WitMessageCode.cs deleted file mode 100644 index 631ac4d53d5..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/WitMessageCode.cs +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Network.P2P.Subprotocols.Wit -{ - public static class WitMessageCode - { - /// - /// Not used, reserved. - /// - public const int Status = 0x00; - public const int GetBlockWitnessHashes = 0x01; - public const int BlockWitnessHashes = 0x02; - - public static string GetDescription(int code) - { - return code switch - { - GetBlockWitnessHashes => nameof(GetBlockWitnessHashes), - BlockWitnessHashes => nameof(BlockWitnessHashes), - _ => $"Unknown({code.ToString()})" - }; - } - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/WitProtocolHandler.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/WitProtocolHandler.cs deleted file mode 100644 index 586b9044eb1..00000000000 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Wit/WitProtocolHandler.cs +++ /dev/null @@ -1,153 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Threading; -using System.Threading.Tasks; -using Nethermind.Blockchain.Synchronization; -using Nethermind.Core.Crypto; -using Nethermind.Logging; -using Nethermind.Network.Contract.P2P; -using Nethermind.Network.P2P.EventArg; -using Nethermind.Network.P2P.ProtocolHandlers; -using Nethermind.Network.P2P.Subprotocols.Wit.Messages; -using Nethermind.Network.Rlpx; -using Nethermind.Stats; -using Nethermind.Stats.Model; -using Nethermind.Synchronization; - -namespace Nethermind.Network.P2P.Subprotocols.Wit -{ - public class WitProtocolHandler : ZeroProtocolHandlerBase, IWitnessPeer - { - private readonly ISyncServer _syncServer; - - private readonly MessageQueue _witnessRequests; - - public WitProtocolHandler(ISession session, - IMessageSerializationService serializer, - INodeStatsManager nodeStats, - ISyncServer syncServer, - ILogManager logManager) : base(session, nodeStats, serializer, logManager) - { - _syncServer = syncServer ?? throw new ArgumentNullException(nameof(syncServer)); - _witnessRequests = new MessageQueue(Send); - } - - public override byte ProtocolVersion => 0; - - public override string ProtocolCode => Protocol.Wit; - - public override int MessageIdSpaceSize => 3; - - public override string Name => "wit0"; - - protected override TimeSpan InitTimeout => Timeouts.Eth; - - public override event EventHandler ProtocolInitialized; - - public override event EventHandler SubprotocolRequested - { - add { } - remove { } - } - - public override void Init() - { - ProtocolInitialized?.Invoke(this, new ProtocolInitializedEventArgs(this)); - // GetBlockWitnessHashes(Keccak.Zero, CancellationToken.None); - } - - public override void HandleMessage(ZeroPacket message) - { - int size = message.Content.ReadableBytes; - int packetType = message.PacketType; - switch (packetType) - { - case WitMessageCode.GetBlockWitnessHashes: - { - using GetBlockWitnessHashesMessage requestMsg = Deserialize(message.Content); - ReportIn(requestMsg, size); - Handle(requestMsg); - break; - } - case WitMessageCode.BlockWitnessHashes: - { - BlockWitnessHashesMessage responseMsg = Deserialize(message.Content); - ReportIn(responseMsg, size); - Handle(responseMsg, size); - break; - } - } - } - - private void Handle(GetBlockWitnessHashesMessage requestMsg) - { - Hash256[] hashes = _syncServer.GetBlockWitnessHashes(requestMsg.BlockHash); - BlockWitnessHashesMessage msg = new(requestMsg.RequestId, hashes); - Send(msg); - } - - private void Handle(BlockWitnessHashesMessage responseMsg, long size) - { - _witnessRequests.Handle(responseMsg.Hashes, size); - } - - private static long _requestId; - - public async Task GetBlockWitnessHashes(Hash256 blockHash, CancellationToken token) - { - long requestId = Interlocked.Increment(ref _requestId); - GetBlockWitnessHashesMessage msg = new(requestId, blockHash); - - if (Logger.IsTrace) Logger.Trace( - $"{Counter:D5} {nameof(WitMessageCode.GetBlockWitnessHashes)} to {Session}"); - Hash256[] witnessHashes = await SendRequest(msg, token); - return witnessHashes; - } - - private async Task SendRequest(GetBlockWitnessHashesMessage message, CancellationToken token) - { - if (Logger.IsTrace) - { - Logger.Trace($"Sending block witness hashes request: {message.BlockHash}"); - } - - Request request = new(message); - _witnessRequests.Send(request); - - Task task = request.CompletionSource.Task; - using CancellationTokenSource delayCancellation = new(); - using CancellationTokenSource compositeCancellation = CancellationTokenSource.CreateLinkedTokenSource(token, delayCancellation.Token); - Task firstTask = await Task.WhenAny(task, Task.Delay(Timeouts.Eth, compositeCancellation.Token)); - if (firstTask.IsCanceled) - { - token.ThrowIfCancellationRequested(); - } - - if (firstTask == task) - { - delayCancellation.Cancel(); - return task.Result; - } - - throw new TimeoutException($"{Session} Request timeout in {nameof(GetBlockWitnessHashes)} for {message.BlockHash}"); - } - - #region Cleanup - - private int _isDisposed; - - public override void DisconnectProtocol(DisconnectReason disconnectReason, string details) - { - Dispose(); - } - - public override void Dispose() - { - if (Interlocked.Exchange(ref _isDisposed, 1) == 0) { } - } - - #endregion - } -} diff --git a/src/Nethermind/Nethermind.Network/ProtocolValidator.cs b/src/Nethermind/Nethermind.Network/ProtocolValidator.cs index 782347ba20c..1b26c75d553 100644 --- a/src/Nethermind/Nethermind.Network/ProtocolValidator.cs +++ b/src/Nethermind/Nethermind.Network/ProtocolValidator.cs @@ -35,7 +35,7 @@ public bool DisconnectOnInvalid(string protocol, ISession session, ProtocolIniti return protocol switch { Protocol.P2P => ValidateP2PProtocol(session, eventArgs), - Protocol.Eth or Protocol.Les => ValidateEthProtocol(session, eventArgs), + Protocol.Eth => ValidateEthProtocol(session, eventArgs), _ => true, }; } diff --git a/src/Nethermind/Nethermind.Network/ProtocolsManager.cs b/src/Nethermind/Nethermind.Network/ProtocolsManager.cs index bd2e15e2def..236acec43ed 100644 --- a/src/Nethermind/Nethermind.Network/ProtocolsManager.cs +++ b/src/Nethermind/Nethermind.Network/ProtocolsManager.cs @@ -20,10 +20,8 @@ using Nethermind.Network.P2P.Subprotocols.Eth.V66; using Nethermind.Network.P2P.Subprotocols.Eth.V67; using Nethermind.Network.P2P.Subprotocols.Eth.V68; -using Nethermind.Network.P2P.Subprotocols.Les; using Nethermind.Network.P2P.Subprotocols.NodeData; using Nethermind.Network.P2P.Subprotocols.Snap; -using Nethermind.Network.P2P.Subprotocols.Wit; using Nethermind.Network.Rlpx; using Nethermind.Stats; using Nethermind.Stats.Model; @@ -236,24 +234,6 @@ private IDictionary> GetProtocolFa }; InitSatelliteProtocol(session, handler); - return handler; - }, - [Protocol.Wit] = (session, version) => - { - var handler = version switch - { - 0 => new WitProtocolHandler(session, _serializer, _stats, _syncServer, _logManager), - _ => throw new NotSupportedException($"{Protocol.Wit}.{version} is not supported.") - }; - InitSatelliteProtocol(session, handler); - - return handler; - }, - [Protocol.Les] = (session, version) => - { - LesProtocolHandler handler = new(session, _serializer, _stats, _syncServer, _backgroundTaskScheduler, _logManager); - InitSyncPeerProtocol(session, handler); - return handler; } }; diff --git a/src/Nethermind/Nethermind.Network/Rlpx/FrameCipher.cs b/src/Nethermind/Nethermind.Network/Rlpx/FrameCipher.cs index 7d5822f8d75..10cb64da1a9 100644 --- a/src/Nethermind/Nethermind.Network/Rlpx/FrameCipher.cs +++ b/src/Nethermind/Nethermind.Network/Rlpx/FrameCipher.cs @@ -2,46 +2,41 @@ // SPDX-License-Identifier: LGPL-3.0-only using System.Diagnostics; - -using Nethermind.Crypto; - using Org.BouncyCastle.Crypto; -using Org.BouncyCastle.Crypto.Engines; using Org.BouncyCastle.Crypto.Modes; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; -namespace Nethermind.Network.Rlpx +namespace Nethermind.Network.Rlpx; + +public class FrameCipher : IFrameCipher { - public class FrameCipher : IFrameCipher - { - private const int BlockSize = 16; - private const int KeySize = 32; + private const int BlockSize = 16; + private const int KeySize = 32; - private readonly IBufferedCipher _decryptionCipher; - private readonly IBufferedCipher _encryptionCipher; + private readonly IBufferedCipher _decryptionCipher; + private readonly IBufferedCipher _encryptionCipher; - public FrameCipher(byte[] aesKey) - { - IBlockCipher aes = AesEngineX86Intrinsic.IsSupported ? new AesEngineX86Intrinsic() : new AesEngine(); + public FrameCipher(byte[] aesKey) + { + IBlockCipher aes = AesUtilities.CreateEngine(); - Debug.Assert(aesKey.Length == KeySize, $"AES key expected to be {KeySize} bytes long"); + Debug.Assert(aesKey.Length == KeySize, $"AES key expected to be {KeySize} bytes long"); - _encryptionCipher = new BufferedBlockCipher(new SicBlockCipher(aes)); - _encryptionCipher.Init(true, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", aesKey), new byte[BlockSize])); + _encryptionCipher = new BufferedBlockCipher(new SicBlockCipher(aes)); + _encryptionCipher.Init(true, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", aesKey), new byte[BlockSize])); - _decryptionCipher = new BufferedBlockCipher(new SicBlockCipher(aes)); - _decryptionCipher.Init(false, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", aesKey), new byte[BlockSize])); - } + _decryptionCipher = new BufferedBlockCipher(new SicBlockCipher(aes)); + _decryptionCipher.Init(false, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", aesKey), new byte[BlockSize])); + } - public void Encrypt(byte[] input, int offset, int length, byte[] output, int outputOffset) - { - _encryptionCipher.ProcessBytes(input, offset, length, output, outputOffset); - } + public void Encrypt(byte[] input, int offset, int length, byte[] output, int outputOffset) + { + _encryptionCipher.ProcessBytes(input, offset, length, output, outputOffset); + } - public void Decrypt(byte[] input, int offset, int length, byte[] output, int outputOffset) - { - _decryptionCipher.ProcessBytes(input, offset, length, output, outputOffset); - } + public void Decrypt(byte[] input, int offset, int length, byte[] output, int outputOffset) + { + _decryptionCipher.ProcessBytes(input, offset, length, output, outputOffset); } } diff --git a/src/Nethermind/Nethermind.Network/Rlpx/FrameMacProcessor.cs b/src/Nethermind/Nethermind.Network/Rlpx/FrameMacProcessor.cs index 990637126e2..f4d9ef42f57 100644 --- a/src/Nethermind/Nethermind.Network/Rlpx/FrameMacProcessor.cs +++ b/src/Nethermind/Nethermind.Network/Rlpx/FrameMacProcessor.cs @@ -4,219 +4,215 @@ using System; using System.IO; using Nethermind.Core.Crypto; -using Nethermind.Crypto; - using Org.BouncyCastle.Crypto; -using Org.BouncyCastle.Crypto.Engines; using Org.BouncyCastle.Crypto.Parameters; -namespace Nethermind.Network.Rlpx +namespace Nethermind.Network.Rlpx; + +/// +/// partially adapted from ethereumJ +/// +public sealed class FrameMacProcessor : IFrameMacProcessor { - /// - /// partially adapted from ethereumJ - /// - public sealed class FrameMacProcessor : IFrameMacProcessor + private readonly PublicKey _remoteNodeId; + private readonly KeccakHash _egressMac; + private readonly KeccakHash _ingressMac; + private readonly KeccakHash _egressMacCopy; + private readonly KeccakHash _ingressMacCopy; + private readonly IBlockCipher _aesEngine; + private readonly byte[] _macSecret; + + public FrameMacProcessor(PublicKey remoteNodeId, EncryptionSecrets secrets) { - private readonly PublicKey _remoteNodeId; - private readonly KeccakHash _egressMac; - private readonly KeccakHash _ingressMac; - private readonly KeccakHash _egressMacCopy; - private readonly KeccakHash _ingressMacCopy; - private readonly IBlockCipher _aesEngine; - private readonly byte[] _macSecret; - - public FrameMacProcessor(PublicKey remoteNodeId, EncryptionSecrets secrets) - { - _remoteNodeId = remoteNodeId; - _macSecret = secrets.MacSecret; - _egressMac = secrets.EgressMac; - _egressMacCopy = _egressMac.Copy(); - _ingressMac = secrets.IngressMac; - _ingressMacCopy = _ingressMac.Copy(); - _aesEngine = MakeMacCipher(); - _checkMacBuffer = new byte[_ingressMac.HashSize]; - _addMacBuffer = new byte[_ingressMac.HashSize]; - _ingressAesBlockBuffer = new byte[_ingressMac.HashSize]; - _egressAesBlockBuffer = new byte[_ingressMac.HashSize]; - } + _remoteNodeId = remoteNodeId; + _macSecret = secrets.MacSecret; + _egressMac = secrets.EgressMac; + _egressMacCopy = _egressMac.Copy(); + _ingressMac = secrets.IngressMac; + _ingressMacCopy = _ingressMac.Copy(); + _aesEngine = MakeMacCipher(); + _checkMacBuffer = new byte[_ingressMac.HashSize]; + _addMacBuffer = new byte[_ingressMac.HashSize]; + _ingressAesBlockBuffer = new byte[_ingressMac.HashSize]; + _egressAesBlockBuffer = new byte[_ingressMac.HashSize]; + } - private IBlockCipher MakeMacCipher() + private IBlockCipher MakeMacCipher() + { + IBlockCipher aesFastEngine = AesUtilities.CreateEngine(); + aesFastEngine.Init(true, new KeyParameter(_macSecret)); + return aesFastEngine; + } + + public void AddMac(byte[] input, int offset, int length, bool isHeader) + { + if (isHeader) { - IBlockCipher aesFastEngine = AesEngineX86Intrinsic.IsSupported ? new AesEngineX86Intrinsic() : new AesEngine(); - aesFastEngine.Init(true, new KeyParameter(_macSecret)); - return aesFastEngine; + input.AsSpan(0, 32).CopyTo(_addMacBuffer); + UpdateMac(_egressMac, _egressMacCopy, _addMacBuffer, offset, input, offset + length, true); // TODO: confirm header is seed } - - public void AddMac(byte[] input, int offset, int length, bool isHeader) + else { - if (isHeader) - { - input.AsSpan(0, 32).CopyTo(_addMacBuffer); - UpdateMac(_egressMac, _egressMacCopy, _addMacBuffer, offset, input, offset + length, true); // TODO: confirm header is seed - } - else - { - _egressMac.Update(input.AsSpan(offset, length)); + _egressMac.Update(input.AsSpan(offset, length)); - // frame-mac: right128 of egress-mac.update(aes(mac-secret,egress-mac) ^ right128(egress-mac.update(frame-ciphertext).digest)) - DoFinalNoReset(_egressMac, _egressMacCopy, _addMacBuffer); // frame MAC seed - UpdateMac(_egressMac, _egressMacCopy, _addMacBuffer, 0, input, offset + length, true); - } + // frame-mac: right128 of egress-mac.update(aes(mac-secret,egress-mac) ^ right128(egress-mac.update(frame-ciphertext).digest)) + DoFinalNoReset(_egressMac, _egressMacCopy, _addMacBuffer); // frame MAC seed + UpdateMac(_egressMac, _egressMacCopy, _addMacBuffer, 0, input, offset + length, true); } + } + + public void UpdateEgressMac(byte[] input) + { + _egressMac.Update(input); + } - public void UpdateEgressMac(byte[] input) + public void UpdateIngressMac(byte[] input, bool isHeader) + { + if (isHeader) { - _egressMac.Update(input); + input.AsSpan().CopyTo(_checkMacBuffer.AsSpan(0, 16)); } - - public void UpdateIngressMac(byte[] input, bool isHeader) + else { - if (isHeader) - { - input.AsSpan().CopyTo(_checkMacBuffer.AsSpan(0, 16)); - } - else - { - _ingressMac.Update(input); - } + _ingressMac.Update(input); } + } + + public void CalculateMac(byte[] output) + { + DoFinalNoReset(_egressMac, _egressMacCopy, _addMacBuffer); // frame MAC seed + UpdateMac(_egressMac, _egressMacCopy, _addMacBuffer, 0, output, 0, true); + } - public void CalculateMac(byte[] output) + public void AddMac(byte[] input, int offset, int length, byte[] output, int outputOffset, bool isHeader) + { + if (isHeader) { - DoFinalNoReset(_egressMac, _egressMacCopy, _addMacBuffer); // frame MAC seed - UpdateMac(_egressMac, _egressMacCopy, _addMacBuffer, 0, output, 0, true); + input.AsSpan(0, 16).CopyTo(_addMacBuffer); + UpdateMac(_egressMac, _egressMacCopy, _addMacBuffer, offset, output, outputOffset, true); // TODO: confirm header is seed } - - public void AddMac(byte[] input, int offset, int length, byte[] output, int outputOffset, bool isHeader) + else { - if (isHeader) - { - input.AsSpan(0, 16).CopyTo(_addMacBuffer); - UpdateMac(_egressMac, _egressMacCopy, _addMacBuffer, offset, output, outputOffset, true); // TODO: confirm header is seed - } - else - { - _egressMac.Update(input.AsSpan(offset, length)); + _egressMac.Update(input.AsSpan(offset, length)); - // frame-mac: right128 of egress-mac.update(aes(mac-secret,egress-mac) ^ right128(egress-mac.update(frame-ciphertext).digest)) - DoFinalNoReset(_egressMac, _egressMacCopy, _addMacBuffer); // frame MAC seed - UpdateMac(_egressMac, _egressMacCopy, _addMacBuffer, 0, output, outputOffset, true); - } + // frame-mac: right128 of egress-mac.update(aes(mac-secret,egress-mac) ^ right128(egress-mac.update(frame-ciphertext).digest)) + DoFinalNoReset(_egressMac, _egressMacCopy, _addMacBuffer); // frame MAC seed + UpdateMac(_egressMac, _egressMacCopy, _addMacBuffer, 0, output, outputOffset, true); } + } - private readonly byte[] _addMacBuffer; - private readonly byte[] _checkMacBuffer; - private readonly byte[] _ingressAesBlockBuffer; - private readonly byte[] _egressAesBlockBuffer; + private readonly byte[] _addMacBuffer; + private readonly byte[] _checkMacBuffer; + private readonly byte[] _ingressAesBlockBuffer; + private readonly byte[] _egressAesBlockBuffer; - public bool CheckMac(byte[] mac, bool isHeader) + public bool CheckMac(byte[] mac, bool isHeader) + { + if (!isHeader) { - if (!isHeader) - { - DoFinalNoReset(_ingressMac, _ingressMacCopy, _checkMacBuffer); // frame MAC seed - } + DoFinalNoReset(_ingressMac, _ingressMacCopy, _checkMacBuffer); // frame MAC seed + } - byte[] aesBlock = _ingressAesBlockBuffer; - DoFinalNoReset(_ingressMac, _ingressMacCopy, aesBlock); + byte[] aesBlock = _ingressAesBlockBuffer; + DoFinalNoReset(_ingressMac, _ingressMacCopy, aesBlock); - _aesEngine.ProcessBlock(aesBlock, 0, aesBlock, 0); + _aesEngine.ProcessBlock(aesBlock, 0, aesBlock, 0); - // Note that although the mac digest size is 32 bytes, we only use 16 bytes in the computation - int length = 16; - for (int i = 0; i < length; i++) - { - aesBlock[i] ^= _checkMacBuffer[i]; - } + // Note that although the mac digest size is 32 bytes, we only use 16 bytes in the computation + int length = 16; + for (int i = 0; i < length; i++) + { + aesBlock[i] ^= _checkMacBuffer[i]; + } - _ingressMac.Update(aesBlock.AsSpan(0, length)); - byte[] result = _checkMacBuffer; - DoFinalNoReset(_ingressMac, _ingressMacCopy, result); + _ingressMac.Update(aesBlock.AsSpan(0, length)); + byte[] result = _checkMacBuffer; + DoFinalNoReset(_ingressMac, _ingressMacCopy, result); - bool isMacSame = true; - for (int i = 0; i < length; i++) + bool isMacSame = true; + for (int i = 0; i < length; i++) + { + if (mac[i] != result[i]) { - if (mac[i] != result[i]) - { - isMacSame = false; - break; - } + isMacSame = false; + break; } - - return isMacSame; } - public void CheckMac(byte[] input, int offset, int length, bool isHeader) + return isMacSame; + } + + public void CheckMac(byte[] input, int offset, int length, bool isHeader) + { + if (isHeader) { - if (isHeader) - { - input.AsSpan(0, 32).CopyTo(_checkMacBuffer); - UpdateMac(_ingressMac, _ingressMacCopy, _checkMacBuffer, offset, input, offset + length, false); - } - else - { - _ingressMac.Update(input.AsSpan(offset, length)); + input.AsSpan(0, 32).CopyTo(_checkMacBuffer); + UpdateMac(_ingressMac, _ingressMacCopy, _checkMacBuffer, offset, input, offset + length, false); + } + else + { + _ingressMac.Update(input.AsSpan(offset, length)); - // frame-mac: right128 of egress-mac.update(aes(mac-secret,egress-mac) ^ right128(egress-mac.update(frame-ciphertext).digest)) - DoFinalNoReset(_ingressMac, _ingressMacCopy, _checkMacBuffer); // frame MAC seed - UpdateMac(_ingressMac, _ingressMacCopy, _checkMacBuffer, 0, input, offset + length, false); - } + // frame-mac: right128 of egress-mac.update(aes(mac-secret,egress-mac) ^ right128(egress-mac.update(frame-ciphertext).digest)) + DoFinalNoReset(_ingressMac, _ingressMacCopy, _checkMacBuffer); // frame MAC seed + UpdateMac(_ingressMac, _ingressMacCopy, _checkMacBuffer, 0, input, offset + length, false); } + } - /// - /// adapted from ethereumJ - /// - private void UpdateMac(KeccakHash mac, KeccakHash macCopy, byte[] seed, int offset, byte[] output, int outOffset, bool egress) - { - byte[] aesBlock = egress ? _egressAesBlockBuffer : _ingressAesBlockBuffer; - DoFinalNoReset(mac, macCopy, aesBlock); + /// + /// adapted from ethereumJ + /// + private void UpdateMac(KeccakHash mac, KeccakHash macCopy, byte[] seed, int offset, byte[] output, int outOffset, bool egress) + { + byte[] aesBlock = egress ? _egressAesBlockBuffer : _ingressAesBlockBuffer; + DoFinalNoReset(mac, macCopy, aesBlock); - _aesEngine.ProcessBlock(aesBlock, 0, aesBlock, 0); + _aesEngine.ProcessBlock(aesBlock, 0, aesBlock, 0); - // Note that although the mac digest size is 32 bytes, we only use 16 bytes in the computation - int length = 16; - for (int i = 0; i < length; i++) - { - aesBlock[i] ^= seed[i + offset]; - } + // Note that although the mac digest size is 32 bytes, we only use 16 bytes in the computation + int length = 16; + for (int i = 0; i < length; i++) + { + aesBlock[i] ^= seed[i + offset]; + } - mac.Update(aesBlock.AsSpan(0, length)); - byte[] result = seed; - DoFinalNoReset(mac, macCopy, result); + mac.Update(aesBlock.AsSpan(0, length)); + byte[] result = seed; + DoFinalNoReset(mac, macCopy, result); - if (egress) - { - Array.Copy(result, 0, output, outOffset, length); - } - else + if (egress) + { + Array.Copy(result, 0, output, outOffset, length); + } + else + { + bool isMacSame = true; + for (int i = 0; i < length; i++) { - bool isMacSame = true; - for (int i = 0; i < length; i++) + if (output[i + outOffset] != result[i]) { - if (output[i + outOffset] != result[i]) - { - isMacSame = false; - break; - } + isMacSame = false; + break; } + } - if (!isMacSame) - { - throw new IOException($"MAC mismatch from {_remoteNodeId}"); - } + if (!isMacSame) + { + throw new IOException($"MAC mismatch from {_remoteNodeId}"); } } + } - private static void DoFinalNoReset(KeccakHash mac, KeccakHash macCopy, byte[] output) - { - macCopy.ResetTo(mac); - macCopy.UpdateFinalTo(output); - } + private static void DoFinalNoReset(KeccakHash mac, KeccakHash macCopy, byte[] output) + { + macCopy.ResetTo(mac); + macCopy.UpdateFinalTo(output); + } - public void Dispose() - { - _egressMacCopy.Reset(); - _ingressMacCopy.Reset(); - } + public void Dispose() + { + _egressMacCopy.Reset(); + _ingressMacCopy.Reset(); } } diff --git a/src/Nethermind/Nethermind.Network/Rlpx/RlpxHost.cs b/src/Nethermind/Nethermind.Network/Rlpx/RlpxHost.cs index 7e9305057df..32bafe6001a 100644 --- a/src/Nethermind/Nethermind.Network/Rlpx/RlpxHost.cs +++ b/src/Nethermind/Nethermind.Network/Rlpx/RlpxHost.cs @@ -20,7 +20,6 @@ using Nethermind.Network.P2P.EventArg; using Nethermind.Network.Rlpx.Handshake; using Nethermind.Stats.Model; -using ILogger = Nethermind.Logging.InterfaceLogger; using LogLevel = DotNetty.Handlers.Logging.LogLevel; namespace Nethermind.Network.Rlpx @@ -105,8 +104,13 @@ public async Task Init() try { - _bossGroup = new MultithreadEventLoopGroup(); - _workerGroup = new MultithreadEventLoopGroup(); + // Default is LogicalCoreCount * 2 + // - so with two groups and 32 logical cores, we would have 128 threads + // Max at 8 threads per group for 16 threads total + // Min of 2 threads per group for 4 threads total + var threads = Math.Clamp(Environment.ProcessorCount / 2, min: 2, max: 8); + _bossGroup = new MultithreadEventLoopGroup(threads); + _workerGroup = new MultithreadEventLoopGroup(threads); ServerBootstrap bootstrap = new(); bootstrap diff --git a/src/Nethermind/Nethermind.Optimism.Test/GasCostTests.cs b/src/Nethermind/Nethermind.Optimism.Test/GasCostTests.cs new file mode 100644 index 00000000000..677bebec6b8 --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism.Test/GasCostTests.cs @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections; +using Nethermind.Int256; +using NUnit.Framework; + +namespace Nethermind.Optimism.Test; + +public class GasCostTests +{ + [TestCaseSource(nameof(FjordL1CostCalculationTestCases))] + public UInt256 Fjord_l1cost_should_match(UInt256 fastLzSize, UInt256 l1BaseFee, UInt256 blobBaseFee, UInt256 l1BaseFeeScalar, UInt256 l1BlobBaseFeeScalar) => + OPL1CostHelper.ComputeL1CostFjord(fastLzSize, l1BaseFee, blobBaseFee, l1BaseFeeScalar, l1BlobBaseFeeScalar); + + public static IEnumerable FjordL1CostCalculationTestCases + { + get + { + static TestCaseData MakeTestCase(string testCase, ulong result, ulong fastLzSize, ulong l1BaseFee, ulong blobBaseFee, ulong l1BaseFeeScalar, ulong l1BlobBaseFeeScalar) + { + return new TestCaseData(new UInt256(fastLzSize), new UInt256(l1BaseFee), new UInt256(blobBaseFee), new UInt256(l1BaseFeeScalar), new UInt256(l1BlobBaseFeeScalar)) + { + ExpectedResult = new UInt256(result), + TestName = testCase + }; + } + + yield return MakeTestCase("Low compressed size", 3203000, 50, 1000000000, 10000000, 2, 3); + yield return MakeTestCase("Below minimal #1", 3203000, 150, 1000000000, 10000000, 2, 3); + yield return MakeTestCase("Below minimal #2", 3203000, 170, 1000000000, 10000000, 2, 3); + yield return MakeTestCase("Above minimal #1", 3217602, 171, 1000000000, 10000000, 2, 3); + yield return MakeTestCase("Above minimal #2", 3994602, 200, 1000000000, 10000000, 2, 3); + yield return MakeTestCase("Regular block #1", 2883950646753, 1044, 28549556977, 1, 7600, 862000); + } + } +} diff --git a/src/Nethermind/Nethermind.Optimism.Test/Nethermind.Optimism.Test.csproj b/src/Nethermind/Nethermind.Optimism.Test/Nethermind.Optimism.Test.csproj new file mode 100644 index 00000000000..b2d4b0a3d49 --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism.Test/Nethermind.Optimism.Test.csproj @@ -0,0 +1,27 @@ + + + + enable + $(NoWarn);NUnit1032 + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + diff --git a/src/Nethermind/Nethermind.Optimism.Test/ReceiptDecoderTests.cs b/src/Nethermind/Nethermind.Optimism.Test/ReceiptDecoderTests.cs new file mode 100644 index 00000000000..37e1a5e4df7 --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism.Test/ReceiptDecoderTests.cs @@ -0,0 +1,140 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections; +using Nethermind.Core.Extensions; +using Nethermind.Serialization.Rlp; +using NUnit.Framework; + +namespace Nethermind.Optimism.Test; + +public class ReceiptDecoderTests +{ + [TestCaseSource(nameof(DepositTxReceiptsSerializationTestCases))] + public void Test_tx_network_form_receipts_properly_encoded_for_trie(byte[] rlp, bool includesNonce, bool includesVersion, bool shouldIncludeNonceAndVersionForTxTrie) + { + static OptimismTxReceipt TestNetworkEncodingRoundTrip(byte[] rlp, bool includesNonce, bool includesVersion) + { + OptimismReceiptMessageDecoder decoder = new(); + OptimismTxReceipt decodedReceipt = decoder.Decode(new RlpStream(rlp), RlpBehaviors.SkipTypedWrapping); + + RlpStream encodedRlp = new(decoder.GetLength(decodedReceipt, RlpBehaviors.SkipTypedWrapping)); + decoder.Encode(encodedRlp, decodedReceipt, RlpBehaviors.SkipTypedWrapping); + + Assert.Multiple(() => + { + Assert.That(decodedReceipt.DepositNonce, includesNonce ? Is.Not.Null : Is.Null); + Assert.That(decodedReceipt.DepositReceiptVersion, includesVersion ? Is.Not.Null : Is.Null); + Assert.That(rlp, Is.EqualTo(encodedRlp.Data.ToArray())); + }); + + return decodedReceipt; + } + + static OptimismTxReceipt TestStorageEncodingRoundTrip(OptimismTxReceipt decodedReceipt, bool includesNonce, bool includesVersion) + { + OptimismCompactReceiptStorageDecoder decoder = new(); + + RlpStream encodedRlp = new(decoder.GetLength(decodedReceipt, RlpBehaviors.SkipTypedWrapping)); + decoder.Encode(encodedRlp, decodedReceipt, RlpBehaviors.SkipTypedWrapping); + encodedRlp.Position = 0; + + OptimismTxReceipt decodedStorageReceipt = decoder.Decode(encodedRlp, RlpBehaviors.SkipTypedWrapping); + + Assert.Multiple(() => + { + Assert.That(decodedStorageReceipt.DepositNonce, includesNonce ? Is.Not.Null : Is.Null); + Assert.That(decodedStorageReceipt.DepositReceiptVersion, includesVersion ? Is.Not.Null : Is.Null); + }); + + Rlp.ValueDecoderContext valueDecoderCtx = new(encodedRlp.Data); + decodedStorageReceipt = decoder.Decode(ref valueDecoderCtx, RlpBehaviors.SkipTypedWrapping); + + Assert.Multiple(() => + { + Assert.That(decodedStorageReceipt.DepositNonce, includesNonce ? Is.Not.Null : Is.Null); + Assert.That(decodedStorageReceipt.DepositReceiptVersion, includesVersion ? Is.Not.Null : Is.Null); + }); + + return decodedReceipt; + } + + static void TestTrieEncoding(OptimismTxReceipt decodedReceipt, bool shouldIncludeNonceAndVersionForTxTrie) + { + OptimismReceiptTrieDecoder trieDecoder = new(); + RlpStream encodedTrieRlp = new(trieDecoder.GetLength(decodedReceipt, RlpBehaviors.SkipTypedWrapping)); + + trieDecoder.Encode(encodedTrieRlp, decodedReceipt, RlpBehaviors.SkipTypedWrapping); + encodedTrieRlp.Position = 0; + + OptimismTxReceipt decodedTrieReceipt = trieDecoder.Decode(encodedTrieRlp, RlpBehaviors.SkipTypedWrapping); + + Assert.Multiple(() => + { + Assert.That(decodedTrieReceipt.DepositNonce, shouldIncludeNonceAndVersionForTxTrie ? Is.Not.Null : Is.Null); + Assert.That(decodedTrieReceipt.DepositReceiptVersion, shouldIncludeNonceAndVersionForTxTrie ? Is.Not.Null : Is.Null); + }); + } + + OptimismTxReceipt decodedReceipt = TestNetworkEncodingRoundTrip(rlp, includesNonce, includesVersion); + TestStorageEncodingRoundTrip(decodedReceipt, includesNonce, includesVersion); + TestTrieEncoding(decodedReceipt, shouldIncludeNonceAndVersionForTxTrie); + } + + + public static IEnumerable DepositTxReceiptsSerializationTestCases + { + get + { + yield return new TestCaseData( + Bytes.FromHexString("7ef901090182f9f5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080"), + true, + false, + false + ) + { + TestName = "1st OP Sepolia block receipt" + }; + + yield return new TestCaseData( + Bytes.FromHexString("0x7ef9010c0182b729b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0830154f4"), + true, + false, + false + ) + { + TestName = "Regolith receipt" + }; + + yield return new TestCaseData( + Bytes.FromHexString("0x7ef903660183023676b9010000000000000000000000000000000000000000000000000000000000001000000000000000000080000000000000000001000000000000000000000000000204000200000004000000000000000000000000000000000000000000000000000100000000020000400000000000020800000000000000000000000008000000000000000000004000400000020000000001800000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000100000000000002100000000000000000000020001000100000040000000000000000000000000000000000000000000008000000f9025af9011d944200000000000000000000000000000000000010f884a0b0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89a00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead0000a000000000000000000000000072fb15f502af58765015972a85f2c58551ef3fa1b88000000000000000000000000072fb15f502af58765015972a85f2c58551ef3fa1000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000f8dc944200000000000000000000000000000000000010f863a031b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83da000000000000000000000000072fb15f502af58765015972a85f2c58551ef3fa1a000000000000000000000000072fb15f502af58765015972a85f2c58551ef3fa1b860000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000f85a944200000000000000000000000000000000000007f842a04641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133ca0c056e47e441542720e5a953ab9fcf1cc3de86fb1d3078293fb9708e6e77816938080"), + true, + false, + false + ) + { + TestName = "Regolith receipt 2" + }; + + yield return new TestCaseData( + Bytes.FromHexString("0xf901090183011711b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0"), + false, + false, + false + ) + { + TestName = "Regolith receipt of a regular tx" + }; + + yield return new TestCaseData( + Bytes.FromHexString("7ef9010d0182ab7bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c083b2557501"), + true, + true, + true + ) + { + TestName = "Canyon receipt" + }; + } + } +} diff --git a/src/Nethermind/Nethermind.Optimism/Create2DeployerContractRewriter.cs b/src/Nethermind/Nethermind.Optimism/Create2DeployerContractRewriter.cs index 3510481d6a2..fc7a1714d5a 100644 --- a/src/Nethermind/Nethermind.Optimism/Create2DeployerContractRewriter.cs +++ b/src/Nethermind/Nethermind.Optimism/Create2DeployerContractRewriter.cs @@ -11,13 +11,13 @@ namespace Nethermind.Optimism; public class Create2DeployerContractRewriter { - private readonly IOPConfigHelper _opConfigHelper; + private readonly IOptimismSpecHelper _opSpecHelper; private readonly ISpecProvider _specProvider; private readonly IBlockTree _blockTree; - public Create2DeployerContractRewriter(IOPConfigHelper opConfigHelper, ISpecProvider specProvider, IBlockTree blockTree) + public Create2DeployerContractRewriter(IOptimismSpecHelper opSpecHelper, ISpecProvider specProvider, IBlockTree blockTree) { - _opConfigHelper = opConfigHelper; + _opSpecHelper = opSpecHelper; _specProvider = specProvider; _blockTree = blockTree; } @@ -26,9 +26,9 @@ public void RewriteContract(BlockHeader header, IWorldState worldState) { IReleaseSpec spec = _specProvider.GetSpec(header); BlockHeader? parent = _blockTree.FindParent(header, BlockTreeLookupOptions.None)?.Header; - if ((parent is null || !_opConfigHelper.IsCanyon(parent)) && _opConfigHelper.IsCanyon(header)) + if ((parent is null || !_opSpecHelper.IsCanyon(parent)) && _opSpecHelper.IsCanyon(header)) { - worldState.InsertCode(_opConfigHelper.Create2DeployerAddress!, _opConfigHelper.Create2DeployerCode, spec); + worldState.InsertCode(_opSpecHelper.Create2DeployerAddress!, _opSpecHelper.Create2DeployerCode, spec); } } } diff --git a/src/Nethermind/Nethermind.Optimism/DepositTxExtensions.cs b/src/Nethermind/Nethermind.Optimism/DepositTxExtensions.cs index 05ba056f307..5c908bb730d 100644 --- a/src/Nethermind/Nethermind.Optimism/DepositTxExtensions.cs +++ b/src/Nethermind/Nethermind.Optimism/DepositTxExtensions.cs @@ -2,14 +2,11 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; -using Nethermind.Int256; -using Nethermind.State; namespace Nethermind.Optimism; public static class DepositTxExtensions { - public static bool IsDeposit(this Transaction tx) { return tx.Type == TxType.DepositTx; diff --git a/src/Nethermind/Nethermind.Optimism/IOptimismConfig.cs b/src/Nethermind/Nethermind.Optimism/IOptimismConfig.cs new file mode 100644 index 00000000000..014780a369b --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/IOptimismConfig.cs @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Config; + +namespace Nethermind.Optimism; + +public interface IOptimismConfig : IConfig +{ + [ConfigItem(Description = "Sequencer address", DefaultValue = "null")] + string? SequencerUrl { get; set; } +} diff --git a/src/Nethermind/Nethermind.Optimism/IOPConfigHelper.cs b/src/Nethermind/Nethermind.Optimism/IOptimismSpecHelper.cs similarity index 77% rename from src/Nethermind/Nethermind.Optimism/IOPConfigHelper.cs rename to src/Nethermind/Nethermind.Optimism/IOptimismSpecHelper.cs index e59e591d4b4..5874e01fa86 100644 --- a/src/Nethermind/Nethermind.Optimism/IOPConfigHelper.cs +++ b/src/Nethermind/Nethermind.Optimism/IOptimismSpecHelper.cs @@ -5,13 +5,15 @@ namespace Nethermind.Optimism; -public interface IOPConfigHelper +public interface IOptimismSpecHelper { Address L1FeeReceiver { get; } bool IsBedrock(BlockHeader header); bool IsRegolith(BlockHeader header); bool IsCanyon(BlockHeader header); + bool IsEcotone(BlockHeader header); + bool IsFjord(BlockHeader header); Address? Create2DeployerAddress { get; } byte[]? Create2DeployerCode { get; } } diff --git a/src/Nethermind/Nethermind.Optimism/InitializeBlockProducerOptimism.cs b/src/Nethermind/Nethermind.Optimism/InitializeBlockProducerOptimism.cs index 3de030e80ce..06111a6445e 100644 --- a/src/Nethermind/Nethermind.Optimism/InitializeBlockProducerOptimism.cs +++ b/src/Nethermind/Nethermind.Optimism/InitializeBlockProducerOptimism.cs @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System.Threading.Tasks; using Nethermind.Api; using Nethermind.Config; using Nethermind.Consensus; @@ -19,7 +18,7 @@ public InitializeBlockProducerOptimism(OptimismNethermindApi api) : base(api) _api = api; } - protected override Task BuildProducer() + protected override IBlockProducer BuildProducer() { if (_api.DbProvider is null) throw new StepDependencyException(nameof(_api.DbProvider)); if (_api.BlockTree is null) throw new StepDependencyException(nameof(_api.BlockTree)); @@ -35,7 +34,6 @@ protected override Task BuildProducer() _api.BlockProducerEnvFactory = new OptimismBlockProducerEnvFactory( _api.WorldStateManager, - _api.ChainSpec, _api.BlockTree, _api.SpecProvider, _api.BlockValidator, @@ -57,7 +55,6 @@ protected override Task BuildProducer() producerEnv.TxSource, producerEnv.ChainProcessor, producerEnv.BlockTree, - _api.ManualBlockProductionTrigger, producerEnv.ReadOnlyStateProvider, _api.GasLimitCalculator, NullSealEngine.Instance, @@ -66,6 +63,6 @@ protected override Task BuildProducer() _api.LogManager, _api.Config()); - return Task.FromResult(_api.BlockProducer); + return _api.BlockProducer; } } diff --git a/src/Nethermind/Nethermind.Optimism/InitializeBlockchainOptimism.cs b/src/Nethermind/Nethermind.Optimism/InitializeBlockchainOptimism.cs index 20e79c79e11..26e15ffeee6 100644 --- a/src/Nethermind/Nethermind.Optimism/InitializeBlockchainOptimism.cs +++ b/src/Nethermind/Nethermind.Optimism/InitializeBlockchainOptimism.cs @@ -6,9 +6,11 @@ using Nethermind.Blockchain.Blocks; using Nethermind.Blockchain.Services; using Nethermind.Config; +using Nethermind.Consensus.AuRa.Withdrawals; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; using Nethermind.Consensus.Validators; +using Nethermind.Consensus.Withdrawals; using Nethermind.Evm; using Nethermind.Evm.TransactionProcessing; using Nethermind.Init.Steps; @@ -40,8 +42,10 @@ protected override ITransactionProcessor CreateTransactionProcessor() if (_api.SpecProvider is null) throw new StepDependencyException(nameof(_api.SpecProvider)); if (_api.SpecHelper is null) throw new StepDependencyException(nameof(_api.SpecHelper)); if (_api.L1CostHelper is null) throw new StepDependencyException(nameof(_api.L1CostHelper)); + if (_api.WorldState is null) throw new StepDependencyException(nameof(_api.WorldState)); - VirtualMachine virtualMachine = CreateVirtualMachine(); + CodeInfoRepository codeInfoRepository = new(); + VirtualMachine virtualMachine = CreateVirtualMachine(codeInfoRepository); return new OptimismTransactionProcessor( _api.SpecProvider, @@ -49,7 +53,8 @@ protected override ITransactionProcessor CreateTransactionProcessor() virtualMachine, _api.LogManager, _api.L1CostHelper, - _api.SpecHelper + _api.SpecHelper, + codeInfoRepository ); } @@ -102,12 +107,12 @@ protected override BlockProcessor CreateBlockProcessor() new BlockProcessor.BlockValidationTransactionsExecutor(_api.TransactionProcessor, _api.WorldState), _api.WorldState, _api.ReceiptStorage, - _api.WitnessCollector, new BlockhashStore(_api.BlockTree, _api.SpecProvider, _api.WorldState), _api.LogManager, _api.SpecHelper, _api.TransactionProcessor, - contractRewriter); + contractRewriter, + new BlockProductionWithdrawalProcessor(new NullWithdrawalProcessor())); } protected override IUnclesValidator CreateUnclesValidator() => Always.Valid; diff --git a/src/Nethermind/Nethermind.Optimism/L1BlockGasInfo.cs b/src/Nethermind/Nethermind.Optimism/L1BlockGasInfo.cs new file mode 100644 index 00000000000..e27a2f6efaf --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/L1BlockGasInfo.cs @@ -0,0 +1,107 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Int256; +using System; +using System.Linq; + +namespace Nethermind.Optimism; + +public readonly struct L1TxGasInfo(UInt256? l1Fee, UInt256? l1GasPrice, UInt256? l1GasUsed, string? l1FeeScalar) +{ + public UInt256? L1Fee { get; } = l1Fee; + public UInt256? L1GasPrice { get; } = l1GasPrice; + public UInt256? L1GasUsed { get; } = l1GasUsed; + public string? L1FeeScalar { get; } = l1FeeScalar; +} + +public readonly struct L1BlockGasInfo +{ + private readonly UInt256? _l1GasPrice; + private readonly UInt256 _l1BlobBaseFee; + private readonly UInt256 _l1BaseFeeScalar; + private readonly UInt256 _l1BlobBaseFeeScalar; + private readonly UInt256 _l1BaseFee; + private readonly UInt256 _overhead; + private readonly UInt256 _feeScalar; + private readonly string? _feeScalarDecimal; + private readonly bool _isFjord; + private readonly bool _isEcotone; + private readonly bool _isRegolith; + + private static readonly byte[] BedrockL1AttributesSelector = [0x01, 0x5d, 0x8e, 0xb9]; + private readonly IOptimismSpecHelper _specHelper; + + public L1BlockGasInfo(Block block, IOptimismSpecHelper specHelper) + { + _specHelper = specHelper; + + if (block is not null && block.Transactions.Length > 0) + { + Transaction depositTx = block.Transactions[0]; + if (depositTx.Data is null || depositTx.Data.Value.Length < 4) + { + return; + } + + Memory data = depositTx.Data.Value; + + _isFjord = _specHelper.IsFjord(block.Header); + + if (_isFjord || (_isEcotone = (_specHelper.IsEcotone(block.Header) && !data[0..4].Span.SequenceEqual(BedrockL1AttributesSelector)))) + { + if (data.Length != 164) + { + return; + } + + _l1GasPrice = new(data[36..68].Span, true); + _l1BlobBaseFee = new(data[68..100].Span, true); + _l1BaseFeeScalar = new(data[4..8].Span, true); + _l1BlobBaseFeeScalar = new(data[8..12].Span, true); + } + else + { + _isRegolith = true; + if (data.Length < 4 + 32 * 8) + { + return; + } + + _l1GasPrice = new(data[(4 + 32 * 2)..(4 + 32 * 3)].Span, true); + _l1BaseFee = new(data[(4 + 32 * 2)..(4 + 32 * 3)].Span, true); + _overhead = new(data[(4 + 32 * 6)..(4 + 32 * 7)].Span, true); + _feeScalar = new UInt256(data[(4 + 32 * 7)..(4 + 32 * 8)].Span, true); + _feeScalarDecimal = (((ulong)_feeScalar) / 1_000_000m).ToString(); + } + } + } + + public readonly L1TxGasInfo GetTxGasInfo(Transaction tx) + { + UInt256? l1Fee = null; + UInt256? l1GasUsed = null; + + if (_l1GasPrice is not null) + { + if (_isFjord) + { + UInt256 fastLzSize = OPL1CostHelper.ComputeFlzCompressLen(tx); + l1Fee = OPL1CostHelper.ComputeL1CostFjord(fastLzSize, _l1GasPrice.Value, _l1BlobBaseFee, _l1BaseFeeScalar, _l1BlobBaseFeeScalar); + } + else if (_isEcotone) + { + l1GasUsed = OPL1CostHelper.ComputeDataGas(tx, _isRegolith); + l1Fee = OPL1CostHelper.ComputeL1CostEcotone(l1GasUsed.Value, _l1GasPrice.Value, _l1BlobBaseFee, _l1BaseFeeScalar, _l1BlobBaseFeeScalar); + } + else + { + l1GasUsed = OPL1CostHelper.ComputeDataGas(tx, _isRegolith) + _overhead; + l1Fee = OPL1CostHelper.ComputeL1CostPreEcotone(l1GasUsed.Value, _l1BaseFee, _feeScalar); + } + } + + return new L1TxGasInfo(l1Fee, _l1GasPrice, l1GasUsed, _feeScalarDecimal); + } +} diff --git a/src/Nethermind/Nethermind.Optimism/Nethermind.Optimism.csproj b/src/Nethermind/Nethermind.Optimism/Nethermind.Optimism.csproj index c39c5320974..53cf806f73d 100644 --- a/src/Nethermind/Nethermind.Optimism/Nethermind.Optimism.csproj +++ b/src/Nethermind/Nethermind.Optimism/Nethermind.Optimism.csproj @@ -2,6 +2,7 @@ enable + true diff --git a/src/Nethermind/Nethermind.Optimism/OPConfigHelper.cs b/src/Nethermind/Nethermind.Optimism/OPConfigHelper.cs index 3902d88b024..c404456c8aa 100644 --- a/src/Nethermind/Nethermind.Optimism/OPConfigHelper.cs +++ b/src/Nethermind/Nethermind.Optimism/OPConfigHelper.cs @@ -6,23 +6,15 @@ namespace Nethermind.Optimism; -public class OPSpecHelper : IOPConfigHelper +public class OptimismSpecHelper(OptimismParameters parameters) : IOptimismSpecHelper { - private readonly ulong _regolithTimestamp; - private readonly long _bedrockBlockNumber; - private readonly ulong? _canyonTimestamp; + private readonly long _bedrockBlockNumber = parameters.BedrockBlockNumber; + private readonly ulong _regolithTimestamp = parameters.RegolithTimestamp; + private readonly ulong? _canyonTimestamp = parameters.CanyonTimestamp; + private readonly ulong? _ecotoneTimestamp = parameters.EcotoneTimestamp; + private readonly ulong? _fjordTimestamp = parameters.FjordTimestamp; - public Address L1FeeReceiver { get; init; } - - public OPSpecHelper(OptimismParameters parameters) - { - _regolithTimestamp = parameters.RegolithTimestamp; - _bedrockBlockNumber = parameters.BedrockBlockNumber; - _canyonTimestamp = parameters.CanyonTimestamp; - L1FeeReceiver = parameters.L1FeeRecipient; - Create2DeployerCode = parameters.Create2DeployerCode; - Create2DeployerAddress = parameters.Create2DeployerAddress; - } + public Address L1FeeReceiver { get; init; } = parameters.L1FeeRecipient; public bool IsRegolith(BlockHeader header) { @@ -36,9 +28,19 @@ public bool IsBedrock(BlockHeader header) public bool IsCanyon(BlockHeader header) { - return header.Timestamp >= (_canyonTimestamp ?? long.MaxValue); + return header.Timestamp >= _canyonTimestamp; + } + + public bool IsEcotone(BlockHeader header) + { + return header.Timestamp >= _ecotoneTimestamp; + } + + public bool IsFjord(BlockHeader header) + { + return header.Timestamp >= _fjordTimestamp; } - public Address? Create2DeployerAddress { get; } - public byte[]? Create2DeployerCode { get; } + public Address? Create2DeployerAddress { get; } = parameters.Create2DeployerAddress; + public byte[]? Create2DeployerCode { get; } = parameters.Create2DeployerCode; } diff --git a/src/Nethermind/Nethermind.Optimism/OPL1CostHelper.cs b/src/Nethermind/Nethermind.Optimism/OPL1CostHelper.cs index bc6451fd25a..ef26b270c49 100644 --- a/src/Nethermind/Nethermind.Optimism/OPL1CostHelper.cs +++ b/src/Nethermind/Nethermind.Optimism/OPL1CostHelper.cs @@ -2,7 +2,9 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Buffers; using System.Linq; +using System.Runtime.CompilerServices; using Nethermind.Core; using Nethermind.Evm; using Nethermind.Int256; @@ -11,48 +13,241 @@ namespace Nethermind.Optimism; -public class OPL1CostHelper : IL1CostHelper +public class OPL1CostHelper(IOptimismSpecHelper opSpecHelper, Address l1BlockAddr) : IL1CostHelper { - private readonly IOPConfigHelper _opConfigHelper; + private readonly IOptimismSpecHelper _opSpecHelper = opSpecHelper; - private readonly StorageCell _l1BaseFeeSlot; - private readonly StorageCell _overheadSlot; - private readonly StorageCell _scalarSlot; + private readonly StorageCell _l1BaseFeeSlot = new(l1BlockAddr, new UInt256(1)); + private readonly StorageCell _overheadSlot = new(l1BlockAddr, new UInt256(5)); + private readonly StorageCell _scalarSlot = new(l1BlockAddr, new UInt256(6)); - public OPL1CostHelper(IOPConfigHelper opConfigHelper, Address l1BlockAddr) - { - _opConfigHelper = opConfigHelper; + private static readonly UInt256 BasicDivisor = 1_000_000; - _l1BaseFeeSlot = new StorageCell(l1BlockAddr, new UInt256(1)); - _overheadSlot = new StorageCell(l1BlockAddr, new UInt256(5)); - _scalarSlot = new StorageCell(l1BlockAddr, new UInt256(6)); - } + // Ecotone + private readonly StorageCell _blobBaseFeeSlot = new(l1BlockAddr, new UInt256(7)); + private readonly StorageCell _baseFeeScalarSlot = new(l1BlockAddr, new UInt256(3)); + + private static readonly UInt256 PrecisionMultiplier = 16; + private static readonly UInt256 PrecisionDivisor = PrecisionMultiplier * BasicDivisor; + + + // Fjord + private static readonly UInt256 L1CostInterceptNeg = 42_585_600; + private static readonly UInt256 L1CostFastlzCoef = 836_500; + private static readonly UInt256 MinTransactionSizeScaled = 100 * 1_000_000; + private static readonly UInt256 FjordDivisor = 1_000_000_000_000; + + [SkipLocalsInit] public UInt256 ComputeL1Cost(Transaction tx, BlockHeader header, IWorldState worldState) { if (tx.IsDeposit()) return UInt256.Zero; - long dataGas = ComputeDataGas(tx, header); - if (dataGas == 0) + UInt256 l1BaseFee = new(worldState.Get(_l1BaseFeeSlot), true); + + if (_opSpecHelper.IsFjord(header)) + { + UInt256 blobBaseFee = new(worldState.Get(_blobBaseFeeSlot), true); + + ReadOnlySpan scalarData = worldState.Get(_baseFeeScalarSlot); + + const int baseFeeFieldsStart = 16; + const int fieldSize = sizeof(uint); + + int l1BaseFeeScalarStart = scalarData.Length > baseFeeFieldsStart ? scalarData.Length - baseFeeFieldsStart : 0; + int l1BaseFeeScalarEnd = l1BaseFeeScalarStart + (scalarData.Length >= baseFeeFieldsStart ? fieldSize : fieldSize - baseFeeFieldsStart + scalarData.Length); + UInt256 l1BaseFeeScalar = new(scalarData[l1BaseFeeScalarStart..l1BaseFeeScalarEnd], true); + UInt256 l1BlobBaseFeeScalar = new(scalarData[l1BaseFeeScalarEnd..(l1BaseFeeScalarEnd + fieldSize)], true); + + uint fastLzSize = ComputeFlzCompressLen(tx); + + return ComputeL1CostFjord(fastLzSize, l1BaseFee, blobBaseFee, l1BaseFeeScalar, l1BlobBaseFeeScalar); + } + + UInt256 dataGas = ComputeDataGas(tx, _opSpecHelper.IsRegolith(header)); + + if (dataGas.IsZero) return UInt256.Zero; - UInt256 l1BaseFee = new(worldState.Get(_l1BaseFeeSlot), true); - UInt256 overhead = new(worldState.Get(_overheadSlot), true); - UInt256 scalar = new(worldState.Get(_scalarSlot), true); + if (_opSpecHelper.IsEcotone(header)) + { + UInt256 blobBaseFee = new(worldState.Get(_blobBaseFeeSlot), true); + + ReadOnlySpan scalarData = worldState.Get(_baseFeeScalarSlot); + + const int baseFeeFieldsStart = 16; + const int fieldSize = sizeof(uint); + + int l1BaseFeeScalarStart = scalarData.Length > baseFeeFieldsStart ? scalarData.Length - baseFeeFieldsStart : 0; + int l1BaseFeeScalarEnd = l1BaseFeeScalarStart + (scalarData.Length >= baseFeeFieldsStart ? fieldSize : fieldSize - baseFeeFieldsStart + scalarData.Length); + UInt256 l1BaseFeeScalar = new(scalarData[l1BaseFeeScalarStart..l1BaseFeeScalarEnd], true); + UInt256 l1BlobBaseFeeScalar = new(scalarData[l1BaseFeeScalarEnd..(l1BaseFeeScalarEnd + fieldSize)], true); - return ((UInt256)dataGas + overhead) * l1BaseFee * scalar / 1_000_000; + return ComputeL1CostEcotone(dataGas, l1BaseFee, blobBaseFee, l1BaseFeeScalar, l1BlobBaseFeeScalar); + } + else + { + UInt256 overhead = new(worldState.Get(_overheadSlot), true); + UInt256 feeScalar = new(worldState.Get(_scalarSlot), true); + + return ComputeL1CostPreEcotone(dataGas + overhead, l1BaseFee, feeScalar); + } } - private long ComputeDataGas(Transaction tx, BlockHeader header) + [SkipLocalsInit] + public static UInt256 ComputeDataGas(Transaction tx, bool isRegolith) { byte[] encoded = Rlp.Encode(tx, RlpBehaviors.SkipTypedWrapping).Bytes; long zeroCount = encoded.Count(b => b == 0); long nonZeroCount = encoded.Length - zeroCount; // Add pre-EIP-3529 overhead - nonZeroCount += _opConfigHelper.IsRegolith(header) ? 0 : OptimismConstants.PreRegolithNonZeroCountOverhead; + nonZeroCount += isRegolith ? 0 : OptimismConstants.PreRegolithNonZeroCountOverhead; + + return (ulong)(zeroCount * GasCostOf.TxDataZero + nonZeroCount * GasCostOf.TxDataNonZeroEip2028); + } + + // Fjord L1 formula: + // l1FeeScaled = baseFeeScalar * l1BaseFee * 16 + blobFeeScalar * l1BlobBaseFee + // estimatedSize = max(minTransactionSize, intercept + fastlzCoef * fastlzSize) + // l1Cost = estimatedSize * l1FeeScaled / 1e12 + public static UInt256 ComputeL1CostFjord(UInt256 fastLzSize, UInt256 l1BaseFee, UInt256 blobBaseFee, UInt256 l1BaseFeeScalar, UInt256 l1BlobBaseFeeScalar) + { + UInt256 l1FeeScaled = l1BaseFeeScalar * l1BaseFee * PrecisionMultiplier + l1BlobBaseFeeScalar * blobBaseFee; + UInt256 fastLzCost = L1CostFastlzCoef * fastLzSize; + + if (fastLzCost < L1CostInterceptNeg) + { + fastLzCost = 0; + } + else + { + fastLzCost -= L1CostInterceptNeg; + } + + var estimatedSize = UInt256.Max(MinTransactionSizeScaled, fastLzCost); + return estimatedSize * l1FeeScaled / FjordDivisor; + } + + // Ecotone formula: (dataGas) * (16 * l1BaseFee * l1BaseFeeScalar + l1BlobBaseFee*l1BlobBaseFeeScalar) / 16e6 + public static UInt256 ComputeL1CostEcotone(UInt256 dataGas, UInt256 l1BaseFee, UInt256 blobBaseFee, UInt256 l1BaseFeeScalar, UInt256 l1BlobBaseFeeScalar) + { + return dataGas * (PrecisionMultiplier * l1BaseFee * l1BaseFeeScalar + blobBaseFee * l1BlobBaseFeeScalar) / PrecisionDivisor; + } + + // Pre-Ecotone formula: (dataGas + overhead) * l1BaseFee * scalar / 1e6 + public static UInt256 ComputeL1CostPreEcotone(UInt256 dataGasWithOverhead, UInt256 l1BaseFee, UInt256 feeScalar) + { + return dataGasWithOverhead * l1BaseFee * feeScalar / BasicDivisor; + } + + // Based on: + // https://github.com/ethereum-optimism/op-geth/blob/7c2819836018bfe0ca07c4e4955754834ffad4e0/core/types/rollup_cost.go + // https://github.com/Vectorized/solady/blob/5315d937d79b335c668896d7533ac603adac5315/js/solady.js + [SkipLocalsInit] + public static uint ComputeFlzCompressLen(Transaction tx) + { + byte[] encoded = Rlp.Encode(tx, RlpBehaviors.SkipTypedWrapping).Bytes; + + [SkipLocalsInit] + static uint FlzCompressLen(byte[] data) + { + uint n = 0; + uint[] ht = ArrayPool.Shared.Rent(8192); + try + { + uint u24(uint i) => data[i] | ((uint)data[i + 1] << 8) | ((uint)data[i + 2] << 16); + uint cmp(uint p, uint q, uint e) + { + uint l = 0; + for (e -= q; l < e; l++) + { + if (data[p + (int)l] != data[q + (int)l]) + { + e = 0; + } + } + return l; + } + void literals(uint r) + { + n += 0x21 * (r / 0x20); + r %= 0x20; + if (r != 0) + { + n += r + 1; + } + } + void match(uint l) + { + l--; + n += 3 * (l / 262); + if (l % 262 >= 6) + { + n += 3; + } + else + { + n += 2; + } + } + uint hash(uint v) => ((2654435769 * v) >> 19) & 0x1fff; + uint setNextHash(uint ip) + { + ht[hash(u24(ip))] = ip; + return ip + 1; + } + uint a = 0; + uint ipLimit = (uint)data.Length - 13; + if (data.Length < 13) + { + ipLimit = 0; + } + for (uint ip = a + 2; ip < ipLimit;) + { + uint d; + uint r; + for (; ; ) + { + uint s = u24(ip); + uint h = hash(s); + r = ht[h]; + ht[h] = ip; + d = ip - r; + if (ip >= ipLimit) + { + break; + } + ip++; + if (d <= 0x1fff && s == u24(r)) + { + break; + } + } + if (ip >= ipLimit) + { + break; + } + ip--; + if (ip > a) + { + literals(ip - a); + } + uint l = cmp(r + 3, ip + 3, ipLimit + 9); + match(l); + ip = setNextHash(setNextHash(ip + l)); + a = ip; + } + literals((uint)data.Length - a); + return n; + } + finally + { + ArrayPool.Shared.Return(ht); + } + } - return zeroCount * GasCostOf.TxDataZero + nonZeroCount * GasCostOf.TxDataNonZeroEip2028; + return FlzCompressLen(encoded); } } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index 05c3071ca4d..21100981178 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -2,9 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using Nethermind.Blockchain; using Nethermind.Blockchain.Blocks; -using Nethermind.Blockchain.Find; using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; @@ -12,7 +10,6 @@ using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Specs; -using Nethermind.Evm; using Nethermind.Evm.Tracing; using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; @@ -31,20 +28,18 @@ public OptimismBlockProcessor( IBlockProcessor.IBlockTransactionsExecutor? blockTransactionsExecutor, IWorldState? stateProvider, IReceiptStorage? receiptStorage, - IWitnessCollector? witnessCollector, IBlockhashStore? blockhashStore, ILogManager? logManager, - IOPConfigHelper opConfigHelper, + IOptimismSpecHelper opSpecHelper, ITransactionProcessor txProcessor, Create2DeployerContractRewriter contractRewriter, IWithdrawalProcessor? withdrawalProcessor = null) : base(specProvider, blockValidator, rewardCalculator, blockTransactionsExecutor, - stateProvider, receiptStorage, witnessCollector, blockhashStore, txProcessor, logManager, withdrawalProcessor, - receiptsRootCalculator: OptimismReceiptsRootCalculator.Instance) + stateProvider, receiptStorage, blockhashStore, txProcessor, logManager, withdrawalProcessor, receiptsRootCalculator: ReceiptsRootCalculator.Instance) { ArgumentNullException.ThrowIfNull(stateProvider); _contractRewriter = contractRewriter; - ReceiptsTracer = new OptimismBlockReceiptTracer(opConfigHelper, stateProvider); + ReceiptsTracer = new OptimismBlockReceiptTracer(opSpecHelper, stateProvider); } protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs index 84c6a5afde9..7acc08e17ab 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs @@ -13,54 +13,42 @@ using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; -using Nethermind.Specs.ChainSpecStyle; using Nethermind.State; using Nethermind.TxPool; namespace Nethermind.Optimism; -public class OptimismBlockProducerEnvFactory : BlockProducerEnvFactory +public class OptimismBlockProducerEnvFactory( + IWorldStateManager worldStateManager, + IBlockTree blockTree, + ISpecProvider specProvider, + IBlockValidator blockValidator, + IRewardCalculatorSource rewardCalculatorSource, + IReceiptStorage receiptStorage, + IBlockPreprocessorStep blockPreprocessorStep, + ITxPool txPool, + ITransactionComparerProvider transactionComparerProvider, + IBlocksConfig blocksConfig, + OptimismSpecHelper specHelper, + OPL1CostHelper l1CostHelper, + ILogManager logManager) : BlockProducerEnvFactory( + worldStateManager, + blockTree, + specProvider, + blockValidator, + rewardCalculatorSource, + receiptStorage, + blockPreprocessorStep, + txPool, + transactionComparerProvider, + blocksConfig, + logManager) { - private readonly ChainSpec _chainSpec; - private readonly OPSpecHelper _specHelper; - private readonly OPL1CostHelper _l1CostHelper; - - public OptimismBlockProducerEnvFactory( - IWorldStateManager worldStateManager, - ChainSpec chainSpec, - IBlockTree blockTree, - ISpecProvider specProvider, - IBlockValidator blockValidator, - IRewardCalculatorSource rewardCalculatorSource, - IReceiptStorage receiptStorage, - IBlockPreprocessorStep blockPreprocessorStep, - ITxPool txPool, - ITransactionComparerProvider transactionComparerProvider, - IBlocksConfig blocksConfig, - OPSpecHelper specHelper, - OPL1CostHelper l1CostHelper, - ILogManager logManager) : base(worldStateManager, - blockTree, specProvider, blockValidator, - rewardCalculatorSource, receiptStorage, blockPreprocessorStep, - txPool, transactionComparerProvider, blocksConfig, logManager) - { - _specHelper = specHelper; - _l1CostHelper = l1CostHelper; - _chainSpec = chainSpec; - TransactionsExecutorFactory = new OptimismTransactionsExecutorFactory(specProvider, logManager); - } - protected override ReadOnlyTxProcessingEnv CreateReadonlyTxProcessingEnv(IWorldStateManager worldStateManager, - ReadOnlyBlockTree readOnlyBlockTree) - { - ReadOnlyTxProcessingEnv result = new(worldStateManager, - readOnlyBlockTree, _specProvider, _logManager); - result.TransactionProcessor = - new OptimismTransactionProcessor(_specProvider, result.StateProvider, result.Machine, _logManager, _l1CostHelper, _specHelper); - - return result; - } + ReadOnlyBlockTree readOnlyBlockTree) => + new OptimismReadOnlyTxProcessingEnv(worldStateManager, readOnlyBlockTree, _specProvider, _logManager, l1CostHelper, specHelper); protected override ITxSource CreateTxSourceForProducer(ITxSource? additionalTxSource, ReadOnlyTxProcessingEnv processingEnv, @@ -74,7 +62,7 @@ protected override ITxSource CreateTxSourceForProducer(ITxSource? additionalTxSo } protected override BlockProcessor CreateBlockProcessor( - ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv, + IReadOnlyTxProcessingScope readOnlyTxProcessingEnv, ISpecProvider specProvider, IBlockValidator blockValidator, IRewardCalculatorSource rewardCalculatorSource, @@ -86,14 +74,13 @@ protected override BlockProcessor CreateBlockProcessor( blockValidator, rewardCalculatorSource.Get(readOnlyTxProcessingEnv.TransactionProcessor), TransactionsExecutorFactory.Create(readOnlyTxProcessingEnv), - readOnlyTxProcessingEnv.StateProvider, + readOnlyTxProcessingEnv.WorldState, receiptStorage, - NullWitnessCollector.Instance, - new BlockhashStore(_blockTree, specProvider, readOnlyTxProcessingEnv.StateProvider), + new BlockhashStore(_blockTree, specProvider, readOnlyTxProcessingEnv.WorldState), logManager, - _specHelper, + specHelper, readOnlyTxProcessingEnv.TransactionProcessor, - new Create2DeployerContractRewriter(_specHelper, _specProvider, _blockTree), - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.StateProvider, logManager))); + new Create2DeployerContractRewriter(specHelper, _specProvider, _blockTree), + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.WorldState, logManager))); } } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockReceiptTracer.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockReceiptTracer.cs index 7f43df08c32..aab105b9090 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockReceiptTracer.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockReceiptTracer.cs @@ -11,12 +11,12 @@ namespace Nethermind.Optimism; public class OptimismBlockReceiptTracer : BlockReceiptsTracer { - private readonly IOPConfigHelper _opConfigHelper; + private readonly IOptimismSpecHelper _opSpecHelper; private readonly IWorldState _worldState; - public OptimismBlockReceiptTracer(IOPConfigHelper opConfigHelper, IWorldState worldState) + public OptimismBlockReceiptTracer(IOptimismSpecHelper opSpecHelper, IWorldState worldState) { - _opConfigHelper = opConfigHelper; + _opSpecHelper = opSpecHelper; _worldState = worldState; } @@ -35,7 +35,7 @@ public OptimismBlockReceiptTracer(IOPConfigHelper opConfigHelper, IWorldState wo { depositNonce--; } - if (_opConfigHelper.IsCanyon(header)) + if (_opSpecHelper.IsCanyon(header)) { version = 1; } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismConfig.cs b/src/Nethermind/Nethermind.Optimism/OptimismConfig.cs new file mode 100644 index 00000000000..0903acfb3ce --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/OptimismConfig.cs @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Optimism; + +public class OptimismConfig : IOptimismConfig +{ + public string? SequencerUrl { get; set; } = null; +} diff --git a/src/Nethermind/Nethermind.Optimism/OptimismNethermindApi.cs b/src/Nethermind/Nethermind.Optimism/OptimismNethermindApi.cs index 9f39d63b1ff..8e1e8f4002d 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismNethermindApi.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismNethermindApi.cs @@ -22,5 +22,5 @@ public OptimismNethermindApi( public IInvalidChainTracker? InvalidChainTracker { get; set; } public OPL1CostHelper? L1CostHelper { get; set; } - public OPSpecHelper? SpecHelper { get; set; } + public OptimismSpecHelper? SpecHelper { get; set; } } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPayloadPreparationService.cs b/src/Nethermind/Nethermind.Optimism/OptimismPayloadPreparationService.cs index 71187bba01a..35fd2e3abb2 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPayloadPreparationService.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPayloadPreparationService.cs @@ -8,6 +8,7 @@ using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Merge.Plugin.BlockProduction; +using Nethermind.Optimism.Rpc; namespace Nethermind.Optimism; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPayloadTxSource.cs b/src/Nethermind/Nethermind.Optimism/OptimismPayloadTxSource.cs index 77f3c9ca35f..53b23ea2695 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPayloadTxSource.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPayloadTxSource.cs @@ -6,6 +6,7 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Transactions; using Nethermind.Core; +using Nethermind.Optimism.Rpc; namespace Nethermind.Optimism; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs index cba1f2a1566..4a51af48b79 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs @@ -25,6 +25,8 @@ using Nethermind.HealthChecks; using Nethermind.Serialization.Json; using Nethermind.Specs.ChainSpecStyle; +using Nethermind.Serialization.Rlp; +using Nethermind.Optimism.Rpc; namespace Nethermind.Optimism; @@ -54,17 +56,16 @@ public class OptimismPlugin : IConsensusPlugin, ISynchronizationPlugin, IInitial public IBlockProductionTrigger DefaultBlockProductionTrigger => NeverProduceTrigger.Instance; - public Task InitBlockProducer(IBlockProductionTrigger? blockProductionTrigger = null, - ITxSource? additionalTxSource = null) + public IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null) { - if (blockProductionTrigger is not null || additionalTxSource is not null) + if (additionalTxSource is not null) throw new ArgumentException( - "Optimism does not support custom block production trigger or additional tx source"); + "Optimism does not support additional tx source"); ArgumentNullException.ThrowIfNull(_api); ArgumentNullException.ThrowIfNull(_api.BlockProducer); - return Task.FromResult(_api.BlockProducer); + return _api.BlockProducer; } #endregion @@ -73,6 +74,14 @@ public INethermindApi CreateApi(IConfigProvider configProvider, IJsonSerializer ILogManager logManager, ChainSpec chainSpec) => new OptimismNethermindApi(configProvider, jsonSerializer, logManager, chainSpec); + public void InitRlpDecoders(INethermindApi api) + { + if (ShouldRunSteps(api)) + { + Rlp.RegisterDecoders(typeof(OptimismReceiptMessageDecoder).Assembly, true); + } + } + public Task Init(INethermindApi api) { if (!ShouldRunSteps(api)) @@ -109,8 +118,6 @@ public Task Init(INethermindApi api) return Task.CompletedTask; } - public Task InitNetworkProtocol() => Task.CompletedTask; - public Task InitSynchronization() { if (_api is null || !ShouldRunSteps(_api)) @@ -200,7 +207,7 @@ public async Task InitRpcModules() await Task.Delay(5000); BlockImprovementContextFactory improvementContextFactory = new( - _api.ManualBlockProductionTrigger, + _api.BlockProducer, TimeSpan.FromSeconds(_blocksConfig.SecondsPerSlot)); OptimismPayloadPreparationService payloadPreparationService = new( @@ -266,6 +273,14 @@ public async Task InitRpcModules() if (_logger.IsInfo) _logger.Info("Optimism Engine Module has been enabled"); } + public IBlockProducerRunner CreateBlockProducerRunner() + { + return new StandardBlockProducerRunner( + DefaultBlockProductionTrigger, + _api!.BlockTree!, + _api.BlockProducer!); + } + public ValueTask DisposeAsync() => ValueTask.CompletedTask; public bool MustInitialize => true; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs b/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs index 4b100aa48e3..93df8a49f9c 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPostMergeBlockProducer.cs @@ -13,6 +13,7 @@ using Nethermind.Core.Specs; using Nethermind.Logging; using Nethermind.Merge.Plugin.BlockProduction; +using Nethermind.Optimism.Rpc; using Nethermind.State; namespace Nethermind.Optimism; @@ -26,7 +27,6 @@ public OptimismPostMergeBlockProducer( ITxSource txPoolTxSource, IBlockchainProcessor processor, IBlockTree blockTree, - IBlockProductionTrigger blockProductionTrigger, IWorldState stateProvider, IGasLimitCalculator gasLimitCalculator, ISealEngine sealEngine, @@ -38,7 +38,6 @@ public OptimismPostMergeBlockProducer( payloadAttrsTxSource.Then(txPoolTxSource), processor, blockTree, - blockProductionTrigger, stateProvider, gasLimitCalculator, sealEngine, diff --git a/src/Nethermind/Nethermind.Optimism/OptimismReadOnlyTxProcessingEnv.cs b/src/Nethermind/Nethermind.Optimism/OptimismReadOnlyTxProcessingEnv.cs new file mode 100644 index 00000000000..499a0c9883f --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/OptimismReadOnlyTxProcessingEnv.cs @@ -0,0 +1,38 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Blockchain; +using Nethermind.Consensus.Processing; +using Nethermind.Core.Specs; +using Nethermind.Evm; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Logging; +using Nethermind.State; +using System; + +namespace Nethermind.Optimism; + +public class OptimismReadOnlyTxProcessingEnv( + IWorldStateManager worldStateManager, + IReadOnlyBlockTree readOnlyBlockTree, + ISpecProvider specProvider, + ILogManager logManager, + IL1CostHelper l1CostHelper, + IOptimismSpecHelper opSpecHelper, + IWorldState? worldStateToWarmUp = null) : ReadOnlyTxProcessingEnv( + worldStateManager, + readOnlyBlockTree, + specProvider, + logManager, + worldStateToWarmUp + ) +{ + protected override TransactionProcessor CreateTransactionProcessor() + { + ArgumentNullException.ThrowIfNull(LogManager); + + BlockhashProvider blockhashProvider = new(BlockTree, SpecProvider, StateProvider, LogManager); + VirtualMachine virtualMachine = new(blockhashProvider, SpecProvider, CodeInfoRepository, LogManager); + return new OptimismTransactionProcessor(SpecProvider, StateProvider, virtualMachine, LogManager, l1CostHelper, opSpecHelper, CodeInfoRepository); + } +} diff --git a/src/Nethermind/Nethermind.Optimism/OptimismReceiptDecoder.cs b/src/Nethermind/Nethermind.Optimism/OptimismReceiptMessageDecoder.cs similarity index 67% rename from src/Nethermind/Nethermind.Optimism/OptimismReceiptDecoder.cs rename to src/Nethermind/Nethermind.Optimism/OptimismReceiptMessageDecoder.cs index 03ade6f79ba..186fc2375d3 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismReceiptDecoder.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismReceiptMessageDecoder.cs @@ -8,9 +8,13 @@ namespace Nethermind.Optimism; -public class OptimismReceiptDecoder : IRlpStreamDecoder +[Rlp.Decoder(RlpDecoderKey.Trie)] +public class OptimismReceiptTrieDecoder() : OptimismReceiptMessageDecoder(true) { } + +[Rlp.Decoder] +public class OptimismReceiptMessageDecoder(bool isEncodedForTrie = false) : IRlpStreamDecoder, IRlpStreamDecoder { - public static readonly OptimismReceiptDecoder Instance = new(); + private readonly bool _isEncodedForTrie = isEncodedForTrie; public OptimismTxReceipt Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -21,7 +25,8 @@ public OptimismTxReceipt Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = txReceipt.TxType = (TxType)rlpStream.ReadByte(); } - _ = rlpStream.ReadSequenceLength(); + int lastCheck = rlpStream.ReadSequenceLength() + rlpStream.Position; + byte[] firstItem = rlpStream.DecodeByteArray(); if (firstItem.Length == 1 && (firstItem[0] == 0 || firstItem[0] == 1)) { @@ -41,9 +46,9 @@ public OptimismTxReceipt Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = txReceipt.Bloom = rlpStream.DecodeBloom(); - int lastCheck = rlpStream.ReadSequenceLength() + rlpStream.Position; + int logEntriesCheck = rlpStream.ReadSequenceLength() + rlpStream.Position; - int numberOfReceipts = rlpStream.PeekNumberOfItemsRemaining(lastCheck); + int numberOfReceipts = rlpStream.PeekNumberOfItemsRemaining(logEntriesCheck); LogEntry[] entries = new LogEntry[numberOfReceipts]; for (int i = 0; i < numberOfReceipts; i++) { @@ -51,16 +56,23 @@ public OptimismTxReceipt Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = } txReceipt.Logs = entries; - if (txReceipt.TxType == TxType.DepositTx && lastCheck > rlpStream.Position) + if (lastCheck > rlpStream.Position) { - txReceipt.DepositNonce = rlpStream.DecodeUlong(); - txReceipt.DepositReceiptVersion = rlpStream.DecodeUlong(); + if (txReceipt.TxType == TxType.DepositTx && lastCheck > rlpStream.Position) + { + txReceipt.DepositNonce = rlpStream.DecodeUlong(); + + if (lastCheck > rlpStream.Position) + { + txReceipt.DepositReceiptVersion = rlpStream.DecodeUlong(); + } + } } return txReceipt; } - private static (int Total, int Logs) GetContentLength(OptimismTxReceipt item, RlpBehaviors rlpBehaviors) + private (int Total, int Logs) GetContentLength(OptimismTxReceipt item, RlpBehaviors rlpBehaviors) { if (item is null) { @@ -83,10 +95,15 @@ private static (int Total, int Logs) GetContentLength(OptimismTxReceipt item, Rl : Rlp.LengthOf(item.PostTransactionState); } - if (item.TxType == TxType.DepositTx && item.DepositReceiptVersion is not null) + if (item.TxType == TxType.DepositTx && item.DepositNonce is not null && + (item.DepositReceiptVersion is not null || !_isEncodedForTrie)) { - contentLength += Rlp.LengthOf(item.DepositNonce ?? 0); - contentLength += Rlp.LengthOf(item.DepositReceiptVersion.Value); + contentLength += Rlp.LengthOf(item.DepositNonce); + + if (item.DepositReceiptVersion is not null) + { + contentLength += Rlp.LengthOf(item.DepositReceiptVersion.Value); + } } return (contentLength, logsLength); @@ -156,10 +173,30 @@ public void Encode(RlpStream rlpStream, OptimismTxReceipt item, RlpBehaviors rlp rlpStream.Encode(item.Logs[i]); } - if (item.TxType == TxType.DepositTx && item.DepositReceiptVersion is not null) + if (item.TxType == TxType.DepositTx && item.DepositNonce is not null && + (item.DepositReceiptVersion is not null || !_isEncodedForTrie)) { - rlpStream.Encode(item.DepositNonce!.Value); - rlpStream.Encode(item.DepositReceiptVersion.Value); + rlpStream.Encode(item.DepositNonce.Value); + + if (item.DepositReceiptVersion is not null) + { + rlpStream.Encode(item.DepositReceiptVersion.Value); + } } } + + TxReceipt IRlpStreamDecoder.Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors) + { + return Decode(rlpStream, rlpBehaviors); + } + + public void Encode(RlpStream stream, TxReceipt item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + Encode(stream, (OptimismTxReceipt)item, rlpBehaviors); + } + + public int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) + { + return GetLength((OptimismTxReceipt)item, rlpBehaviors); + } } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismReceiptStorageDecoder.cs b/src/Nethermind/Nethermind.Optimism/OptimismReceiptStorageDecoder.cs new file mode 100644 index 00000000000..38d3a9071b0 --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/OptimismReceiptStorageDecoder.cs @@ -0,0 +1,336 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core.Collections; +using Nethermind.Core.Crypto; +using Nethermind.Core; +using Nethermind.Serialization.Rlp; +using static Nethermind.Serialization.Rlp.Rlp; + +namespace Nethermind.Optimism; + +[Decoder(RlpDecoderKey.Storage)] +public class OptimismCompactReceiptStorageDecoder : + IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder, IReceiptRefDecoder, + IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder +{ + public OptimismTxReceipt Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (rlpStream.IsNextItemNull()) + { + rlpStream.ReadByte(); + return null!; + } + + OptimismTxReceipt txReceipt = new(); + int lastCheck = rlpStream.ReadSequenceLength() + rlpStream.Position; + + byte[] firstItem = rlpStream.DecodeByteArray(); + if (firstItem.Length == 1) + { + txReceipt.StatusCode = firstItem[0]; + } + else + { + txReceipt.PostTransactionState = firstItem.Length == 0 ? null : new Hash256(firstItem); + } + + txReceipt.Sender = rlpStream.DecodeAddress(); + txReceipt.GasUsedTotal = (long)rlpStream.DecodeUBigInt(); + + int sequenceLength = rlpStream.ReadSequenceLength(); + int logEntriesCheck = sequenceLength + rlpStream.Position; + using ArrayPoolList logEntries = new(sequenceLength * 2 / LengthOfAddressRlp); + + while (rlpStream.Position < logEntriesCheck) + { + logEntries.Add(CompactLogEntryDecoder.Decode(rlpStream, RlpBehaviors.AllowExtraBytes)!); + } + + txReceipt.Logs = [.. logEntries]; + + if (lastCheck > rlpStream.Position) + { + int remainingItems = rlpStream.PeekNumberOfItemsRemaining(lastCheck); + if (remainingItems > 0) + { + txReceipt.DepositNonce = rlpStream.DecodeUlong(); + } + + if (remainingItems > 1) + { + txReceipt.DepositReceiptVersion = rlpStream.DecodeUlong(); + } + } + + bool allowExtraBytes = (rlpBehaviors & RlpBehaviors.AllowExtraBytes) != 0; + if (!allowExtraBytes) + { + rlpStream.Check(lastCheck); + } + + txReceipt.Bloom = new Bloom(txReceipt.Logs); + + return txReceipt; + } + + public OptimismTxReceipt Decode(ref ValueDecoderContext decoderContext, + RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (decoderContext.IsNextItemNull()) + { + decoderContext.ReadByte(); + return null!; + } + + OptimismTxReceipt txReceipt = new(); + int lastCheck = decoderContext.ReadSequenceLength() + decoderContext.Position; + + byte[] firstItem = decoderContext.DecodeByteArray(); + if (firstItem.Length == 1) + { + txReceipt.StatusCode = firstItem[0]; + } + else + { + txReceipt.PostTransactionState = firstItem.Length == 0 ? null : new Hash256(firstItem); + } + + txReceipt.Sender = decoderContext.DecodeAddress(); + txReceipt.GasUsedTotal = (long)decoderContext.DecodeUBigInt(); + + int sequenceLength = decoderContext.ReadSequenceLength(); + int logEntriesCheck = sequenceLength + decoderContext.Position; + + // Don't know the size exactly, I'll just assume its just an address and add some margin + using ArrayPoolList logEntries = new(sequenceLength * 2 / LengthOfAddressRlp); + while (decoderContext.Position < logEntriesCheck) + { + logEntries.Add(CompactLogEntryDecoder.Decode(ref decoderContext, RlpBehaviors.AllowExtraBytes)!); + } + + txReceipt.Logs = [.. logEntries]; + + if (lastCheck > decoderContext.Position) + { + int remainingItems = decoderContext.PeekNumberOfItemsRemaining(lastCheck); + if (remainingItems > 0) + { + txReceipt.DepositNonce = decoderContext.DecodeULong(); + } + + if (remainingItems > 1) + { + txReceipt.DepositReceiptVersion = decoderContext.DecodeULong(); + } + } + + bool allowExtraBytes = (rlpBehaviors & RlpBehaviors.AllowExtraBytes) != 0; + if (!allowExtraBytes) + { + decoderContext.Check(lastCheck); + } + + txReceipt.Bloom = new Bloom(txReceipt.Logs); + + return txReceipt; + } + + public void DecodeStructRef(scoped ref ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors, + out TxReceiptStructRef item) + { + // Note: This method runs at 2.5 million times/sec on my machine + item = new TxReceiptStructRef(); + + if (decoderContext.IsNextItemNull()) + { + decoderContext.ReadByte(); + return; + } + + int lastCheck = decoderContext.ReadSequenceLength() + decoderContext.Position; + + ReadOnlySpan firstItem = decoderContext.DecodeByteArraySpan(); + if (firstItem.Length == 1) + { + item.StatusCode = firstItem[0]; + } + else + { + item.PostTransactionState = + firstItem.Length == 0 ? new Hash256StructRef() : new Hash256StructRef(firstItem); + } + + decoderContext.DecodeAddressStructRef(out item.Sender); + item.GasUsedTotal = (long)decoderContext.DecodeUBigInt(); + + (int PrefixLength, int ContentLength) peekPrefixAndContentLength = + decoderContext.PeekPrefixAndContentLength(); + int logsBytes = peekPrefixAndContentLength.ContentLength + peekPrefixAndContentLength.PrefixLength; + item.LogsRlp = decoderContext.Data.Slice(decoderContext.Position, logsBytes); + + if (lastCheck > decoderContext.Position) + { + int remainingItems = decoderContext.PeekNumberOfItemsRemaining(lastCheck); + + if (remainingItems > 1) + { + decoderContext.SkipItem(); + } + + if (remainingItems > 2) + { + decoderContext.SkipItem(); + } + } + + decoderContext.SkipItem(); + } + + public void DecodeLogEntryStructRef(scoped ref ValueDecoderContext decoderContext, RlpBehaviors none, + out LogEntryStructRef current) + { + CompactLogEntryDecoder.DecodeLogEntryStructRef(ref decoderContext, none, out current); + } + + public Hash256[] DecodeTopics(ValueDecoderContext valueDecoderContext) + { + return CompactLogEntryDecoder.DecodeTopics(valueDecoderContext); + } + + // Refstruct decode does not generate bloom + public bool CanDecodeBloom => false; + + public Rlp Encode(OptimismTxReceipt? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + RlpStream rlpStream = new(GetLength(item!, rlpBehaviors)); + Encode(rlpStream, item, rlpBehaviors); + return new Rlp(rlpStream.Data.ToArray()!); + } + + public void Encode(RlpStream rlpStream, OptimismTxReceipt? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (item is null) + { + rlpStream.EncodeNullObject(); + return; + } + + (int totalContentLength, int logsLength) = GetContentLength(item, rlpBehaviors); + + bool isEip658receipts = (rlpBehaviors & RlpBehaviors.Eip658Receipts) == RlpBehaviors.Eip658Receipts; + + // Note: Any byte saved here is about 3GB on mainnet. + rlpStream.StartSequence(totalContentLength); + if (isEip658receipts) + { + rlpStream.Encode(item.StatusCode); + } + else + { + rlpStream.Encode(item.PostTransactionState); + } + + rlpStream.Encode(item.Sender); + rlpStream.Encode(item.GasUsedTotal); + + rlpStream.StartSequence(logsLength); + + LogEntry[] logs = item.Logs ?? Array.Empty(); + for (int i = 0; i < logs.Length; i++) + { + CompactLogEntryDecoder.Encode(rlpStream, logs[i]); + } + + if (item.TxType == TxType.DepositTx && item.DepositNonce is not null) + { + rlpStream.Encode(item.DepositNonce.Value); + + if (item.DepositReceiptVersion is not null) + { + rlpStream.Encode(item.DepositReceiptVersion.Value); + } + } + } + + private static (int Total, int Logs) GetContentLength(OptimismTxReceipt? item, RlpBehaviors rlpBehaviors) + { + int contentLength = 0; + if (item is null) + { + return (contentLength, 0); + } + + bool isEip658Receipts = (rlpBehaviors & RlpBehaviors.Eip658Receipts) == RlpBehaviors.Eip658Receipts; + if (isEip658Receipts) + { + contentLength += LengthOf(item.StatusCode); + } + else + { + contentLength += LengthOf(item.PostTransactionState); + } + + contentLength += LengthOf(item.Sender); + contentLength += LengthOf(item.GasUsedTotal); + + int logsLength = GetLogsLength(item); + contentLength += LengthOfSequence(logsLength); + + if (item.TxType == TxType.DepositTx && item.DepositNonce is not null) + { + contentLength += LengthOf(item.DepositNonce); + + if (item.DepositReceiptVersion is not null) + { + contentLength += LengthOf(item.DepositReceiptVersion.Value); + } + } + + return (contentLength, logsLength); + } + + private static int GetLogsLength(OptimismTxReceipt item) + { + int logsLength = 0; + LogEntry[] logs = item.Logs ?? Array.Empty(); + for (int i = 0; i < logs.Length; i++) + { + logsLength += CompactLogEntryDecoder.Instance.GetLength(logs[i]); + } + + return logsLength; + } + + public int GetLength(OptimismTxReceipt item, RlpBehaviors rlpBehaviors) + { + (int Total, int Logs) length = GetContentLength(item, rlpBehaviors); + return LengthOfSequence(length.Total); + } + + TxReceipt IRlpStreamDecoder.Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors) + { + return Decode(rlpStream, rlpBehaviors); ; + } + + public void Encode(RlpStream stream, TxReceipt item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + Encode(stream, (OptimismTxReceipt)item, rlpBehaviors); + } + + public int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) + { + return GetLength((OptimismTxReceipt)item, rlpBehaviors); + } + + TxReceipt IRlpValueDecoder.Decode(ref ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors) + { + return Decode(ref decoderContext, rlpBehaviors); + } + + public Rlp Encode(TxReceipt? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + return Encode((OptimismTxReceipt?)item, rlpBehaviors); + } +} diff --git a/src/Nethermind/Nethermind.Optimism/OptimismReceiptsRootCalculator.cs b/src/Nethermind/Nethermind.Optimism/OptimismReceiptsRootCalculator.cs deleted file mode 100644 index 244cce79966..00000000000 --- a/src/Nethermind/Nethermind.Optimism/OptimismReceiptsRootCalculator.cs +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Linq; -using Nethermind.Blockchain.Receipts; -using Nethermind.Core; -using Nethermind.Core.Crypto; -using Nethermind.Core.Specs; -using Nethermind.State.Proofs; - -namespace Nethermind.Optimism; - -public class OptimismReceiptsRootCalculator : IReceiptsRootCalculator -{ - public static readonly OptimismReceiptsRootCalculator Instance = new(); - - public Hash256 GetReceiptsRoot(TxReceipt[] receipts, IReceiptSpec spec, Hash256? suggestedRoot) - { - Hash256 SkipStateAndStatusReceiptsRoot() - { - receipts.SetSkipStateAndStatusInRlp(true); - try - { - return ReceiptTrie.CalculateRoot(spec, receipts.Cast().ToArray(), OptimismReceiptDecoder.Instance); - } - finally - { - receipts.SetSkipStateAndStatusInRlp(false); - } - } - - Hash256 receiptsRoot = ReceiptTrie.CalculateRoot(spec, receipts.Cast().ToArray(), OptimismReceiptDecoder.Instance); - if (!spec.ValidateReceipts && receiptsRoot != suggestedRoot) - { - var skipStateAndStatusReceiptsRoot = SkipStateAndStatusReceiptsRoot(); - if (skipStateAndStatusReceiptsRoot == suggestedRoot) - { - return skipStateAndStatusReceiptsRoot; - } - } - - return receiptsRoot; - } -} diff --git a/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs index 4322fa58f32..aa71d1fae45 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs @@ -13,23 +13,16 @@ namespace Nethermind.Optimism; -public class OptimismTransactionProcessor : TransactionProcessor +public class OptimismTransactionProcessor( + ISpecProvider specProvider, + IWorldState worldState, + IVirtualMachine virtualMachine, + ILogManager logManager, + IL1CostHelper l1CostHelper, + IOptimismSpecHelper opSpecHelper, + ICodeInfoRepository? codeInfoRepository + ) : TransactionProcessor(specProvider, worldState, virtualMachine, codeInfoRepository, logManager) { - private readonly IL1CostHelper _l1CostHelper; - private readonly IOPConfigHelper _opConfigHelper; - - public OptimismTransactionProcessor( - ISpecProvider? specProvider, - IWorldState? worldState, - IVirtualMachine? virtualMachine, - ILogManager? logManager, - IL1CostHelper l1CostHelper, - IOPConfigHelper opConfigHelper) : base(specProvider, worldState, virtualMachine, logManager) - { - _l1CostHelper = l1CostHelper; - _opConfigHelper = opConfigHelper; - } - private UInt256? _currentTxL1Cost; protected override TransactionResult Execute(Transaction tx, in BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) @@ -108,7 +101,7 @@ protected override TransactionResult BuyGas(Transaction tx, BlockHeader header, return "insufficient sender balance"; } - UInt256 l1Cost = _currentTxL1Cost ??= _l1CostHelper.ComputeL1Cost(tx, header, WorldState); + UInt256 l1Cost = _currentTxL1Cost ??= l1CostHelper.ComputeL1Cost(tx, header, WorldState); if (UInt256.SubtractUnderflow(balanceLeft, l1Cost, out balanceLeft)) { TraceLogInvalidTx(tx, $"INSUFFICIENT_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}"); @@ -158,10 +151,10 @@ protected override void PayFees(Transaction tx, BlockHeader header, IReleaseSpec // Skip coinbase payments for deposit tx in Regolith base.PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode); - if (_opConfigHelper.IsBedrock(header)) + if (opSpecHelper.IsBedrock(header)) { - UInt256 l1Cost = _currentTxL1Cost ??= _l1CostHelper.ComputeL1Cost(tx, header, WorldState); - WorldState.AddToBalanceAndCreateIfNotExists(_opConfigHelper.L1FeeReceiver, l1Cost, spec); + UInt256 l1Cost = _currentTxL1Cost ??= l1CostHelper.ComputeL1Cost(tx, header, WorldState); + WorldState.AddToBalanceAndCreateIfNotExists(opSpecHelper.L1FeeReceiver, l1Cost, spec); } } } @@ -171,7 +164,7 @@ protected override long Refund(Transaction tx, BlockHeader header, IReleaseSpec { // if deposit: skip refunds, skip tipping coinbase // Regolith changes this behaviour to report the actual gasUsed instead of always reporting all gas used. - if (tx.IsDeposit() && !_opConfigHelper.IsRegolith(header)) + if (tx.IsDeposit() && !opSpecHelper.IsRegolith(header)) { // Record deposits as using all their gas // System Transactions are special & are not recorded as using any gas (anywhere) diff --git a/src/Nethermind/Nethermind.Optimism/OptimismTransactionsExecutorFactory.cs b/src/Nethermind/Nethermind.Optimism/OptimismTransactionsExecutorFactory.cs index d7485be9bd4..951d01542a8 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismTransactionsExecutorFactory.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismTransactionsExecutorFactory.cs @@ -4,6 +4,7 @@ using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; namespace Nethermind.Optimism; @@ -19,10 +20,10 @@ public OptimismTransactionsExecutorFactory(ISpecProvider specProvider, ILogManag _logManager = logManager; } - public IBlockProcessor.IBlockTransactionsExecutor Create(ReadOnlyTxProcessingEnv readOnlyTxProcessingEnv) + public IBlockProcessor.IBlockTransactionsExecutor Create(IReadOnlyTxProcessingScope readOnlyTxProcessingEnv) { return new BlockProcessor.BlockProductionTransactionsExecutor(readOnlyTxProcessingEnv.TransactionProcessor, - readOnlyTxProcessingEnv.StateProvider, new OptimismBlockProductionTransactionPicker(_specProvider), + readOnlyTxProcessingEnv.WorldState, new OptimismBlockProductionTransactionPicker(_specProvider), _logManager); } } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismTxPoolTxSource.cs b/src/Nethermind/Nethermind.Optimism/OptimismTxPoolTxSource.cs index b91f085b892..7334e9448b4 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismTxPoolTxSource.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismTxPoolTxSource.cs @@ -6,6 +6,7 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Transactions; using Nethermind.Core; +using Nethermind.Optimism.Rpc; namespace Nethermind.Optimism; diff --git a/src/Nethermind/Nethermind.Optimism/ReadOnlyChainProcessingEnv.cs b/src/Nethermind/Nethermind.Optimism/ReadOnlyChainProcessingEnv.cs new file mode 100644 index 00000000000..9321df272de --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/ReadOnlyChainProcessingEnv.cs @@ -0,0 +1,72 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Blockchain; +using Nethermind.Blockchain.Blocks; +using Nethermind.Blockchain.Receipts; +using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Rewards; +using Nethermind.Consensus.Validators; +using Nethermind.Consensus.Withdrawals; +using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Logging; +using Nethermind.State; + +namespace Nethermind.Optimism; + +/// +/// Not thread safe. +/// +public class OptimismReadOnlyChainProcessingEnv( + IReadOnlyTxProcessingScope txEnv, + IBlockValidator blockValidator, + IBlockPreprocessorStep recoveryStep, + IRewardCalculator rewardCalculator, + IReceiptStorage receiptStorage, + ISpecProvider specProvider, + IBlockTree blockTree, + IStateReader stateReader, + ILogManager logManager, + IOptimismSpecHelper opSpecHelper, + Create2DeployerContractRewriter contractRewriter, + IWithdrawalProcessor? withdrawalProcessor, + IBlockProcessor.IBlockTransactionsExecutor? blockTransactionsExecutor = null) : ReadOnlyChainProcessingEnv( + txEnv, + blockValidator, + recoveryStep, + rewardCalculator, + receiptStorage, + specProvider, + blockTree, + stateReader, + logManager, + blockTransactionsExecutor) +{ + + protected override IBlockProcessor CreateBlockProcessor( + IReadOnlyTxProcessingScope scope, + IBlockTree blockTree, + IBlockValidator blockValidator, + IRewardCalculator rewardCalculator, + IReceiptStorage receiptStorage, + ISpecProvider specProvider, + ILogManager logManager, + IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor + ) + { + return new OptimismBlockProcessor( + specProvider, + blockValidator, + rewardCalculator, + transactionsExecutor, + scope.WorldState, + receiptStorage, + new BlockhashStore(blockTree, specProvider, scope.WorldState), + logManager, + opSpecHelper, + scope.TransactionProcessor, + contractRewriter, + withdrawalProcessor); + } +} diff --git a/src/Nethermind/Nethermind.Optimism/IOptimismEngineRpcModule.cs b/src/Nethermind/Nethermind.Optimism/Rpc/IOptimismEngineRpcModule.cs similarity index 99% rename from src/Nethermind/Nethermind.Optimism/IOptimismEngineRpcModule.cs rename to src/Nethermind/Nethermind.Optimism/Rpc/IOptimismEngineRpcModule.cs index 08b1ee5f25f..a4fff0ee437 100644 --- a/src/Nethermind/Nethermind.Optimism/IOptimismEngineRpcModule.cs +++ b/src/Nethermind/Nethermind.Optimism/Rpc/IOptimismEngineRpcModule.cs @@ -7,7 +7,7 @@ using Nethermind.JsonRpc.Modules; using Nethermind.Merge.Plugin.Data; -namespace Nethermind.Optimism; +namespace Nethermind.Optimism.Rpc; [RpcModule(ModuleType.Engine)] diff --git a/src/Nethermind/Nethermind.Optimism/Rpc/IOptimismEthRpcModule.cs b/src/Nethermind/Nethermind.Optimism/Rpc/IOptimismEthRpcModule.cs new file mode 100644 index 00000000000..963fbe27a4b --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/Rpc/IOptimismEthRpcModule.cs @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.JsonRpc.Modules.Eth; +using Nethermind.JsonRpc.Modules; +using Nethermind.Core.Crypto; +using Nethermind.JsonRpc; +using Nethermind.Blockchain.Find; + +namespace Nethermind.Optimism.Rpc; + +[RpcModule(ModuleType.Eth)] +public interface IOptimismEthRpcModule : IEthRpcModule +{ + [JsonRpcMethod(Description = "Get receipts from all transactions from particular block, more efficient than fetching the receipts one-by-one.", + IsImplemented = true, + ExampleResponse = "{\"jsonrpc\":\"2.0\",\"result\":[{\"transactionHash\":\"0x681c2b6f99e37fd6fe6046db8b51ec3460d699cacd6a376143fd5842ac50621f\",\"transactionIndex\":\"0x0\",\"blockHash\":\"0x29f141925d2d8e357ae5b6040c97aa12d7ac6dfcbe2b20e7b616d8907ac8e1f3\",\"blockNumber\":\"0x3\",\"cumulativeGasUsed\":\"0x5208\",\"gasUsed\":\"0x5208\",\"effectiveGasPrice\":\"0x1\",\"from\":\"0xb7705ae4c6f81b66cdb323c65f4e8133690fc099\",\"to\":\"0x942921b14f1b1c385cd7e0cc2ef7abe5598c8358\",\"contractAddress\":null,\"logs\":[],\"logsBloom\":\"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"status\":\"0x1\",\"type\":\"0x0\"},{\"transactionHash\":\"0x7126cf20a0ad8bd51634837d9049615c34c1bff5e1a54e5663f7e23109bff48b\",\"transactionIndex\":\"0x1\",\"blockHash\":\"0x29f141925d2d8e357ae5b6040c97aa12d7ac6dfcbe2b20e7b616d8907ac8e1f3\",\"blockNumber\":\"0x3\",\"cumulativeGasUsed\":\"0xa410\",\"gasUsed\":\"0x5208\",\"effectiveGasPrice\":\"0x1\",\"from\":\"0xb7705ae4c6f81b66cdb323c65f4e8133690fc099\",\"to\":\"0x942921b14f1b1c385cd7e0cc2ef7abe5598c8358\",\"contractAddress\":null,\"logs\":[],\"logsBloom\":\"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"status\":\"0x1\",\"type\":\"0x0\"}],\"id\":67}")] + new ResultWrapper eth_getBlockReceipts([JsonRpcParameter(ExampleValue = "latest")] BlockParameter blockParameter); + + + [JsonRpcMethod(IsImplemented = true, + Description = "Retrieves a transaction receipt by tx hash", + IsSharable = true, + ExampleResponse = "{\"transactionHash\":\"0x80757153e93d1b475e203406727b62a501187f63e23b8fa999279e219ee3be71\",\"transactionIndex\":\"0x7\",\"blockHash\":\"0x42def051b21038905cd2a2bc28d460a94df2249466847f0e1bcb4be4eb21891a\",\"blockNumber\":\"0x4e3f39\",\"cumulativeGasUsed\":\"0x62c9d\",\"gasUsed\":\"0xe384\",\"effectiveGasPrice\":\"0x12a05f200\",\"from\":\"0x0afe0a94415e8974052e7e6cfab19ee1c2ef4f69\",\"to\":\"0x19e8c84d4943e58b035626b064cfc76ee13ee6cb\",\"contractAddress\":null,\"logs\":[{\"removed\":false,\"logIndex\":\"0x0\",\"transactionIndex\":\"0x7\",\"transactionHash\":\"0x80757153e93d1b475e203406727b62a501187f63e23b8fa999279e219ee3be71\",\"blockHash\":\"0x42def051b21038905cd2a2bc28d460a94df2249466847f0e1bcb4be4eb21891a\",\"blockNumber\":\"0x4e3f39\",\"address\":\"0x2ac3c1d3e24b45c6c310534bc2dd84b5ed576335\",\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"topics\":[\"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\"0x00000000000000000000000019e8c84d4943e58b035626b064cfc76ee13ee6cb\",\"0x00000000000000000000000028078300a459a9e136f872285654cdc74463041e\"]},{\"removed\":false,\"logIndex\":\"0x1\",\"transactionIndex\":\"0x7\",\"transactionHash\":\"0x80757153e93d1b475e203406727b62a501187f63e23b8fa999279e219ee3be71\",\"blockHash\":\"0x42def051b21038905cd2a2bc28d460a94df2249466847f0e1bcb4be4eb21891a\",\"blockNumber\":\"0x4e3f39\",\"address\":\"0x19e8c84d4943e58b035626b064cfc76ee13ee6cb\",\"data\":\"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007735940000000000000000000000000000000000000000000000000000000000000000000\",\"topics\":[\"0x950494fc3642fae5221b6c32e0e45765c95ebb382a04a71b160db0843e74c99f\",\"0x0000000000000000000000000afe0a94415e8974052e7e6cfab19ee1c2ef4f69\",\"0x00000000000000000000000028078300a459a9e136f872285654cdc74463041e\",\"0x0000000000000000000000000afe0a94415e8974052e7e6cfab19ee1c2ef4f69\"]}],\"logsBloom\":\"0x00000000000000000000000000000000000000000000000020000000000000800000000000000000000400000000000000000000000000000000000000002000000000000000000000000008000000000000000000000000000000000000000000000002002000000000000000000000000000000000000000000812000000000000000000000000000001000000000000000000000008000400008000000000000000000000000000000000000000000000000000000000800000000000000000000002000000000000000000000000000000000000100000000000000000002000000000000000000000000010000000000000000000000400000000020000\",\"status\":\"0x1\",\"type\":\"0x0\"}")] + new ResultWrapper eth_getTransactionReceipt([JsonRpcParameter(ExampleValue = "[\"0x80757153e93d1b475e203406727b62a501187f63e23b8fa999279e219ee3be71\"]")] Hash256 txHashData); +} diff --git a/src/Nethermind/Nethermind.Optimism/OptimismEngineRpcModule.cs b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismEngineRpcModule.cs similarity index 98% rename from src/Nethermind/Nethermind.Optimism/OptimismEngineRpcModule.cs rename to src/Nethermind/Nethermind.Optimism/Rpc/OptimismEngineRpcModule.cs index 79e063eb4b6..92aba891d7b 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismEngineRpcModule.cs +++ b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismEngineRpcModule.cs @@ -7,7 +7,7 @@ using Nethermind.Merge.Plugin; using Nethermind.Merge.Plugin.Data; -namespace Nethermind.Optimism; +namespace Nethermind.Optimism.Rpc; public class OptimismEngineRpcModule : IOptimismEngineRpcModule { diff --git a/src/Nethermind/Nethermind.Optimism/Rpc/OptimismEthModuleFactory.cs b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismEthModuleFactory.cs new file mode 100644 index 00000000000..9604bbdc78b --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismEthModuleFactory.cs @@ -0,0 +1,92 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Blockchain.Receipts; +using Nethermind.Core.Specs; +using Nethermind.Facade; +using Nethermind.Facade.Eth; +using Nethermind.JsonRpc.Modules.Eth.GasPrice; +using Nethermind.JsonRpc.Modules.Eth.FeeHistory; +using Nethermind.Logging; +using Nethermind.State; +using Nethermind.TxPool; +using Nethermind.Wallet; +using Nethermind.JsonRpc; +using Nethermind.JsonRpc.Modules; +using Nethermind.Blockchain.Find; +using Nethermind.Core; +using Nethermind.Crypto; +using Nethermind.JsonRpc.Client; + +namespace Nethermind.Optimism.Rpc; + +public class OptimismEthModuleFactory( + IJsonRpcConfig rpcConfig, + IBlockchainBridgeFactory blockchainBridgeFactory, + IBlockFinder blockFinder, + IReceiptFinder receiptFinder, + IStateReader stateReader, + ITxPool txPool, + ITxSender txSender, + IWallet wallet, + ILogManager logManager, + ISpecProvider specProvider, + IGasPriceOracle gasPriceOracle, + IEthSyncingInfo ethSyncingInfo, + IFeeHistoryOracle feeHistoryOracle, + ulong? secondsPerSlot, + + IJsonRpcClient? sequencerRpcClient, + IAccountStateProvider accountStateProvider, + IEthereumEcdsa ecdsa, + ITxSealer sealer, + IOptimismSpecHelper opSpecHelper + ) + : ModuleFactoryBase +{ + private readonly ILogManager _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager)); + private readonly IStateReader _stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader)); + private readonly IBlockchainBridgeFactory _blockchainBridgeFactory = blockchainBridgeFactory ?? throw new ArgumentNullException(nameof(blockchainBridgeFactory)); + private readonly ITxPool _txPool = txPool ?? throw new ArgumentNullException(nameof(txPool)); + private readonly ITxSender _txSender = txSender ?? throw new ArgumentNullException(nameof(txSender)); + private readonly IWallet _wallet = wallet ?? throw new ArgumentNullException(nameof(wallet)); + private readonly IJsonRpcConfig _rpcConfig = rpcConfig ?? throw new ArgumentNullException(nameof(rpcConfig)); + private readonly ISpecProvider _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); + private readonly IGasPriceOracle _gasPriceOracle = gasPriceOracle ?? throw new ArgumentNullException(nameof(gasPriceOracle)); + private readonly IEthSyncingInfo _ethSyncingInfo = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo)); + private readonly IFeeHistoryOracle _feeHistoryOracle = feeHistoryOracle ?? throw new ArgumentNullException(nameof(feeHistoryOracle)); + private readonly IJsonRpcClient? _sequencerRpcClient = sequencerRpcClient ?? throw new ArgumentNullException(nameof(sequencerRpcClient)); + private readonly IAccountStateProvider _accountStateProvider = accountStateProvider ?? throw new ArgumentNullException(nameof(accountStateProvider)); + private readonly IEthereumEcdsa _ecdsa = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa)); + private readonly ITxSealer _sealer = sealer ?? throw new ArgumentNullException(nameof(sealer)); + private readonly IBlockFinder _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); + private readonly IReceiptFinder _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); + private readonly IOptimismSpecHelper _opSpecHelper = opSpecHelper ?? throw new ArgumentNullException(nameof(opSpecHelper)); + + public override IOptimismEthRpcModule Create() + { + return new OptimismEthRpcModule( + _rpcConfig, + _blockchainBridgeFactory.CreateBlockchainBridge(), + _blockFinder, + _receiptFinder, + _stateReader, + _txPool, + _txSender, + _wallet, + _logManager, + _specProvider, + _gasPriceOracle, + _ethSyncingInfo, + _feeHistoryOracle, + secondsPerSlot, + + _sequencerRpcClient, + _accountStateProvider, + _ecdsa, + _sealer, + _opSpecHelper + ); + } +} diff --git a/src/Nethermind/Nethermind.Optimism/Rpc/OptimismEthRpcModule.cs b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismEthRpcModule.cs new file mode 100644 index 00000000000..27154fdf0e1 --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismEthRpcModule.cs @@ -0,0 +1,162 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Linq; +using System.Threading.Tasks; +using Nethermind.Blockchain.Find; +using Nethermind.Blockchain.Receipts; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm; +using Nethermind.Facade; +using Nethermind.Facade.Eth; +using Nethermind.JsonRpc; +using Nethermind.JsonRpc.Client; +using Nethermind.JsonRpc.Data; +using Nethermind.JsonRpc.Modules; +using Nethermind.JsonRpc.Modules.Eth; +using Nethermind.JsonRpc.Modules.Eth.FeeHistory; +using Nethermind.JsonRpc.Modules.Eth.GasPrice; +using Nethermind.Logging; +using Nethermind.Serialization.Rlp; +using Nethermind.State; +using Nethermind.TxPool; +using Nethermind.Wallet; + +namespace Nethermind.Optimism.Rpc; + +public class OptimismEthRpcModule : EthRpcModule, IOptimismEthRpcModule +{ + private readonly IJsonRpcClient? _sequencerRpcClient; + private readonly IAccountStateProvider _accountStateProvider; + private readonly IEthereumEcdsa _ecdsa; + private readonly ITxSealer _sealer; + private readonly IOptimismSpecHelper _opSpecHelper; + + public OptimismEthRpcModule( + IJsonRpcConfig rpcConfig, + IBlockchainBridge blockchainBridge, + IBlockFinder blockFinder, + IReceiptFinder receiptFinder, + IStateReader stateReader, + ITxPool txPool, + ITxSender txSender, + IWallet wallet, + ILogManager logManager, + ISpecProvider specProvider, + IGasPriceOracle gasPriceOracle, + IEthSyncingInfo ethSyncingInfo, + IFeeHistoryOracle feeHistoryOracle, + ulong? secondsPerSlot, + + IJsonRpcClient? sequencerRpcClient, + IAccountStateProvider accountStateProvider, + IEthereumEcdsa ecdsa, + ITxSealer sealer, + IOptimismSpecHelper opSpecHelper) : base( + rpcConfig, + blockchainBridge, + blockFinder, + receiptFinder, + stateReader, + txPool, + txSender, + wallet, + logManager, + specProvider, + gasPriceOracle, + ethSyncingInfo, + feeHistoryOracle, + secondsPerSlot) + { + _sequencerRpcClient = sequencerRpcClient; + _accountStateProvider = accountStateProvider; + _ecdsa = ecdsa; + _sealer = sealer; + _opSpecHelper = opSpecHelper; + } + + public new ResultWrapper eth_getBlockReceipts(BlockParameter blockParameter) + { + static ResultWrapper GetBlockReceipts(IReceiptFinder receiptFinder, BlockParameter blockParameter, IBlockFinder blockFinder, ISpecProvider specProvider, IOptimismSpecHelper opSpecHelper) + { + SearchResult searchResult = blockFinder.SearchForBlock(blockParameter); + if (searchResult.IsError) + { + return ResultWrapper.Success(null); + } + + Block? block = searchResult.Object!; + OptimismTxReceipt[] receipts = receiptFinder.Get(block).Cast().ToArray() ?? new OptimismTxReceipt[block.Transactions.Length]; + bool isEip1559Enabled = specProvider.GetSpec(block.Header).IsEip1559Enabled; + + L1BlockGasInfo l1BlockGasInfo = new(block, opSpecHelper); + + OptimismReceiptForRpc[]? result = [.. receipts + .Zip(block.Transactions, (r, t) => + { + return new OptimismReceiptForRpc(t.Hash!, r, t.GetGasInfo(isEip1559Enabled, block.Header), l1BlockGasInfo.GetTxGasInfo(t), receipts.GetBlockLogFirstIndex(r.Index)); + })]; + return ResultWrapper.Success(result); + } + + return GetBlockReceipts(_receiptFinder, blockParameter, _blockFinder, _specProvider, _opSpecHelper); + } + + public override async Task> eth_sendTransaction(TransactionForRpc rpcTx) + { + Transaction tx = rpcTx.ToTransactionWithDefaults(_blockchainBridge.GetChainId()); + tx.SenderAddress ??= _ecdsa.RecoverAddress(tx); + + if (tx.SenderAddress is null) + { + return ResultWrapper.Fail("Failed to recover sender"); + } + + if (rpcTx.Nonce is null) + { + tx.Nonce = _accountStateProvider.GetNonce(tx.SenderAddress); + } + + await _sealer.Seal(tx, TxHandlingOptions.None); + + return await eth_sendRawTransaction(Rlp.Encode(tx, RlpBehaviors.SkipTypedWrapping).Bytes); + } + + public override async Task> eth_sendRawTransaction(byte[] transaction) + { + if (_sequencerRpcClient is null) + { + return ResultWrapper.Fail("No sequencer url in the config"); + } + Hash256? result = await _sequencerRpcClient.Post(nameof(eth_sendRawTransaction), transaction); + if (result is null) + { + return ResultWrapper.Fail("Failed to forward transaction"); + } + return ResultWrapper.Success(result); + } + + public new ResultWrapper eth_getTransactionReceipt(Hash256 txHash) + { + (TxReceipt? receipt, TxGasInfo? gasInfo, int logIndexStart) = _blockchainBridge.GetReceiptAndGasInfo(txHash); + if (receipt is null || gasInfo is null) + { + return ResultWrapper.Success(null); + } + + SearchResult foundBlock = _blockFinder.SearchForBlock(new(receipt.BlockHash!)); + if (foundBlock.Object is null) + { + return ResultWrapper.Success(null); + } + + Block block = foundBlock.Object; + + L1BlockGasInfo l1GasInfo = new(block, _opSpecHelper); + return ResultWrapper.Success( + new(txHash, (OptimismTxReceipt)receipt, gasInfo.Value, l1GasInfo.GetTxGasInfo(block.Transactions.First(tx => tx.Hash == txHash)), logIndexStart)); + } +} diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPayloadAttributes.cs b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismPayloadAttributes.cs similarity index 97% rename from src/Nethermind/Nethermind.Optimism/OptimismPayloadAttributes.cs rename to src/Nethermind/Nethermind.Optimism/Rpc/OptimismPayloadAttributes.cs index f1727be019c..8db3156fcae 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPayloadAttributes.cs +++ b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismPayloadAttributes.cs @@ -12,7 +12,7 @@ using Nethermind.Core.Specs; using Nethermind.Serialization.Rlp; -namespace Nethermind.Optimism; +namespace Nethermind.Optimism.Rpc; public class OptimismPayloadAttributes : PayloadAttributes { @@ -69,7 +69,7 @@ protected override int ComputePayloadIdMembersSize() => protected override int WritePayloadIdMembers(BlockHeader parentHeader, Span inputSpan) { - int offset = base.WritePayloadIdMembers(parentHeader, inputSpan); + var offset = base.WritePayloadIdMembers(parentHeader, inputSpan); inputSpan[offset] = NoTxPool ? (byte)1 : (byte)0; offset += 1; @@ -122,9 +122,7 @@ public override string ToString() .Append($"{nameof(Transactions)}: {Transactions?.Length ?? 0}"); if (Withdrawals is not null) - { sb.Append($", {nameof(Withdrawals)} count: {Withdrawals.Length}"); - } sb.Append('}'); return sb.ToString(); diff --git a/src/Nethermind/Nethermind.Optimism/Rpc/OptimismReceiptForRpc.cs b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismReceiptForRpc.cs new file mode 100644 index 00000000000..d902059872b --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismReceiptForRpc.cs @@ -0,0 +1,51 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Crypto; +using Nethermind.Evm; +using Nethermind.Int256; +using Nethermind.JsonRpc.Data; +using System.Text.Json.Serialization; + +namespace Nethermind.Optimism.Rpc; + +public class OptimismReceiptForRpc : ReceiptForRpc +{ + public OptimismReceiptForRpc(Hash256 txHash, OptimismTxReceipt receipt, TxGasInfo gasInfo, L1TxGasInfo l1GasInfo, int logIndexStart = 0) : base( + txHash, receipt, gasInfo, logIndexStart) + { + if (receipt.TxType == Core.TxType.DepositTx) + { + DepositNonce = receipt.DepositNonce; + DepositReceiptVersion = receipt.DepositReceiptVersion; + } + else + { + L1Fee = l1GasInfo.L1Fee; + L1GasUsed = l1GasInfo.L1GasUsed; + L1GasPrice = l1GasInfo.L1GasPrice; + L1FeeScalar = l1GasInfo.L1FeeScalar; + } + } + + // DepositTx related fields + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public UInt256? DepositNonce; + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public UInt256? DepositReceiptVersion; + + // Regular tx fields + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public UInt256? L1Fee; + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public UInt256? L1GasPrice; + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public UInt256? L1GasUsed; + + // Pre-ecotone field of a regular tx fields + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? L1FeeScalar; +} diff --git a/src/Nethermind/Nethermind.Optimism/Rpc/OptimismTraceModuleFactory.cs b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismTraceModuleFactory.cs new file mode 100644 index 00000000000..8a1b5da4d21 --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/Rpc/OptimismTraceModuleFactory.cs @@ -0,0 +1,61 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Blockchain; +using Nethermind.Blockchain.Receipts; +using Nethermind.Consensus; +using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Rewards; +using Nethermind.Consensus.Validators; +using Nethermind.Consensus.Withdrawals; +using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.JsonRpc; +using Nethermind.JsonRpc.Modules.Trace; +using Nethermind.Logging; +using Nethermind.State; + +namespace Nethermind.Optimism.Rpc; + +public class OptimismTraceModuleFactory( + IWorldStateManager worldStateManager, + IBlockTree blockTree, + IJsonRpcConfig jsonRpcConfig, + IBlockPreprocessorStep recoveryStep, + IRewardCalculatorSource rewardCalculatorSource, + IReceiptStorage receiptFinder, + ISpecProvider specProvider, + IPoSSwitcher poSSwitcher, + ILogManager logManager, + IL1CostHelper l1CostHelper, + IOptimismSpecHelper opSpecHelper, + Create2DeployerContractRewriter contractRewriter, + IWithdrawalProcessor withdrawalProcessor) : TraceModuleFactory( + worldStateManager, + blockTree, + jsonRpcConfig, + recoveryStep, + rewardCalculatorSource, + receiptFinder, + specProvider, + poSSwitcher, + logManager) +{ + protected override ReadOnlyTxProcessingEnv CreateTxProcessingEnv() => + new OptimismReadOnlyTxProcessingEnv(_worldStateManager, _blockTree, _specProvider, _logManager, l1CostHelper, opSpecHelper); + + protected override ReadOnlyChainProcessingEnv CreateChainProcessingEnv(IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor, IReadOnlyTxProcessingScope scope, IRewardCalculator rewardCalculator) => new OptimismReadOnlyChainProcessingEnv( + scope, + Always.Valid, + _recoveryStep, + rewardCalculator, + _receiptStorage, + _specProvider, + _blockTree, + _worldStateManager.GlobalStateReader, + _logManager, + opSpecHelper, + contractRewriter, + withdrawalProcessor, + transactionsExecutor); +} diff --git a/src/Nethermind/Nethermind.Optimism/Rpc/RegisterOptimismRpcModules.cs b/src/Nethermind/Nethermind.Optimism/Rpc/RegisterOptimismRpcModules.cs new file mode 100644 index 00000000000..2b509d129c0 --- /dev/null +++ b/src/Nethermind/Nethermind.Optimism/Rpc/RegisterOptimismRpcModules.cs @@ -0,0 +1,123 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Api; +using Nethermind.Blockchain; +using Nethermind.Config; +using Nethermind.Consensus.AuRa.Withdrawals; +using Nethermind.Consensus.Withdrawals; +using Nethermind.Init.Steps; +using Nethermind.JsonRpc; +using Nethermind.JsonRpc.Client; +using Nethermind.JsonRpc.Modules; +using Nethermind.JsonRpc.Modules.Eth; +using Nethermind.JsonRpc.Modules.Eth.FeeHistory; +using Nethermind.Logging; +using Nethermind.TxPool; +using Nethermind.Wallet; + +namespace Nethermind.Optimism.Rpc; + +public class RegisterOptimismRpcModules : RegisterRpcModules +{ + private readonly OptimismNethermindApi _api; + private readonly ILogger _logger; + private readonly IOptimismConfig _config; + private readonly IJsonRpcConfig _jsonRpcConfig; + + public RegisterOptimismRpcModules(INethermindApi api) : base(api) + { + _api = (OptimismNethermindApi)api; + _config = _api.Config(); + _logger = _api.LogManager.GetClassLogger(); + _jsonRpcConfig = _api.Config(); + } + + protected override void RegisterEthRpcModule(IRpcModuleProvider rpcModuleProvider) + { + StepDependencyException.ThrowIfNull(_api.BlockTree); + StepDependencyException.ThrowIfNull(_api.ReceiptStorage); + StepDependencyException.ThrowIfNull(_api.StateReader); + StepDependencyException.ThrowIfNull(_api.TxPool); + StepDependencyException.ThrowIfNull(_api.TxSender); + StepDependencyException.ThrowIfNull(_api.Wallet); + StepDependencyException.ThrowIfNull(_api.EthSyncingInfo); + StepDependencyException.ThrowIfNull(_api.GasPriceOracle); + StepDependencyException.ThrowIfNull(_api.SpecHelper); + StepDependencyException.ThrowIfNull(_api.SpecProvider); + StepDependencyException.ThrowIfNull(_api.WorldState); + StepDependencyException.ThrowIfNull(_api.EthereumEcdsa); + StepDependencyException.ThrowIfNull(_api.Sealer); + + if (_config.SequencerUrl is null && _logger.IsWarn) + { + _logger.Warn($"SequencerUrl is not set."); + } + + BasicJsonRpcClient? sequencerJsonRpcClient = _config.SequencerUrl is null + ? null + : new(new Uri(_config.SequencerUrl), _api.EthereumJsonSerializer, _api.LogManager); + ModuleFactoryBase ethModuleFactory = CreateEthModuleFactory(); + + ITxSigner txSigner = new WalletTxSigner(_api.Wallet, _api.SpecProvider.ChainId); + TxSealer sealer = new(txSigner, _api.Timestamper); + + var feeHistoryOracle = new FeeHistoryOracle(_api.BlockTree, _api.ReceiptStorage, _api.SpecProvider); + _api.DisposeStack.Push(feeHistoryOracle); + + ModuleFactoryBase optimismEthModuleFactory = new OptimismEthModuleFactory( + _jsonRpcConfig, + _api, + _api.BlockTree.AsReadOnly(), + _api.ReceiptStorage, + _api.StateReader, + _api.TxPool, + _api.TxSender, + _api.Wallet, + _api.LogManager, + _api.SpecProvider, + _api.GasPriceOracle, + _api.EthSyncingInfo, + feeHistoryOracle, + _api.ConfigProvider.GetConfig().SecondsPerSlot, + + sequencerJsonRpcClient, + _api.WorldState, + _api.EthereumEcdsa, + sealer, + _api.SpecHelper); + + rpcModuleProvider.RegisterBounded(optimismEthModuleFactory, + _jsonRpcConfig.EthModuleConcurrentInstances ?? Environment.ProcessorCount, _jsonRpcConfig.Timeout); + } + + protected override void RegisterTraceRpcModule(IRpcModuleProvider rpcModuleProvider) + { + StepDependencyException.ThrowIfNull(_api.WorldStateManager); + StepDependencyException.ThrowIfNull(_api.BlockTree); + StepDependencyException.ThrowIfNull(_api.ReceiptStorage); + StepDependencyException.ThrowIfNull(_api.RewardCalculatorSource); + StepDependencyException.ThrowIfNull(_api.SpecProvider); + StepDependencyException.ThrowIfNull(_api.WorldState); + StepDependencyException.ThrowIfNull(_api.L1CostHelper); + StepDependencyException.ThrowIfNull(_api.SpecHelper); + + OptimismTraceModuleFactory traceModuleFactory = new( + _api.WorldStateManager, + _api.BlockTree, + _jsonRpcConfig, + _api.BlockPreprocessor, + _api.RewardCalculatorSource, + _api.ReceiptStorage, + _api.SpecProvider, + _api.PoSSwitcher, + _api.LogManager, + _api.L1CostHelper, + _api.SpecHelper, + new Create2DeployerContractRewriter(_api.SpecHelper, _api.SpecProvider, _api.BlockTree), + new BlockProductionWithdrawalProcessor(new NullWithdrawalProcessor())); + + rpcModuleProvider.RegisterBoundedByCpuCount(traceModuleFactory, _jsonRpcConfig.Timeout); + } +} diff --git a/src/Nethermind/Nethermind.Overseer.Test/CliqueTests.cs b/src/Nethermind/Nethermind.Overseer.Test/CliqueTests.cs index 5088be5b61f..bec343e4e35 100644 --- a/src/Nethermind/Nethermind.Overseer.Test/CliqueTests.cs +++ b/src/Nethermind/Nethermind.Overseer.Test/CliqueTests.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Nethermind.Core.Extensions; using Nethermind.Crypto; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.Overseer.Test.Framework; using NUnit.Framework; diff --git a/src/Nethermind/Nethermind.Overseer.Test/Framework/CliqueContext.cs b/src/Nethermind/Nethermind.Overseer.Test/Framework/CliqueContext.cs index 8affec1b268..9d22da0ee84 100644 --- a/src/Nethermind/Nethermind.Overseer.Test/Framework/CliqueContext.cs +++ b/src/Nethermind/Nethermind.Overseer.Test/Framework/CliqueContext.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.Overseer.Test.JsonRpc; diff --git a/src/Nethermind/Nethermind.PerfTest/Program.cs b/src/Nethermind/Nethermind.PerfTest/Program.cs index 03e39859f9e..a387f2cd2b5 100644 --- a/src/Nethermind/Nethermind.PerfTest/Program.cs +++ b/src/Nethermind/Nethermind.PerfTest/Program.cs @@ -329,12 +329,12 @@ private static async Task RunBenchmarkBlocks() foreach ((Address address, ChainSpecAllocation allocation) in chainSpec.Allocations) { stateProvider.CreateAccount(address, allocation.Balance); - if (allocation.Code != null) + if (allocation.Code is not null) { stateProvider.InsertCode(address, allocation.Code, specProvider.GenesisSpec); } - if (allocation.Constructor != null) + if (allocation.Constructor is not null) { Transaction constructorTransaction = new SystemTransaction() { diff --git a/src/Nethermind/Nethermind.Runner.Test/Ethereum/ContextWithMocks.cs b/src/Nethermind/Nethermind.Runner.Test/Ethereum/ContextWithMocks.cs index 4224aca2f0d..73c0c925c45 100644 --- a/src/Nethermind/Nethermind.Runner.Test/Ethereum/ContextWithMocks.cs +++ b/src/Nethermind/Nethermind.Runner.Test/Ethereum/ContextWithMocks.cs @@ -119,7 +119,6 @@ public static NethermindApi ContextWithMocks() SyncProgressResolver = Substitute.For(), BetterPeerStrategy = Substitute.For(), ReceiptMonitor = Substitute.For(), - WitnessRepository = Substitute.For(), BadBlocksStore = Substitute.For() }; diff --git a/src/Nethermind/Nethermind.Runner/Ethereum/Api/ApiBuilder.cs b/src/Nethermind/Nethermind.Runner/Ethereum/Api/ApiBuilder.cs index 217cb5fbd6c..2d097c4a769 100644 --- a/src/Nethermind/Nethermind.Runner/Ethereum/Api/ApiBuilder.cs +++ b/src/Nethermind/Nethermind.Runner/Ethereum/Api/ApiBuilder.cs @@ -11,6 +11,7 @@ using Nethermind.Config; using Nethermind.Consensus; using Nethermind.Core; +using Nethermind.Facade.Eth; using Nethermind.JsonRpc.Data; using Nethermind.Logging; using Nethermind.Serialization.Json; diff --git a/src/Nethermind/Nethermind.Runner/Ethereum/EthereumRunner.cs b/src/Nethermind/Nethermind.Runner/Ethereum/EthereumRunner.cs index e445b7320ab..5e79b03e1cb 100644 --- a/src/Nethermind/Nethermind.Runner/Ethereum/EthereumRunner.cs +++ b/src/Nethermind/Nethermind.Runner/Ethereum/EthereumRunner.cs @@ -57,7 +57,7 @@ public async Task StopAsync() Stop(() => _api.SessionMonitor?.Stop(), "Stopping session monitor"); Stop(() => _api.SyncModeSelector?.Stop(), "Stopping session sync mode selector"); Task discoveryStopTask = Stop(() => _api.DiscoveryApp?.StopAsync(), "Stopping discovery app"); - Task blockProducerTask = Stop(() => _api.BlockProducer?.StopAsync(), "Stopping block producer"); + Task blockProducerTask = Stop(() => _api.BlockProducerRunner?.StopAsync(), "Stopping block producer"); Task syncPeerPoolTask = Stop(() => _api.SyncPeerPool?.StopAsync(), "Stopping sync peer pool"); Task peerPoolTask = Stop(() => _api.PeerPool?.StopAsync(), "Stopping peer pool"); Task peerManagerTask = Stop(() => _api.PeerManager?.StopAsync(), "Stopping peer manager"); diff --git a/src/Nethermind/Nethermind.Runner/JsonRpc/Startup.cs b/src/Nethermind/Nethermind.Runner/JsonRpc/Startup.cs index 6625abe7e9a..5c6c24f6156 100644 --- a/src/Nethermind/Nethermind.Runner/JsonRpc/Startup.cs +++ b/src/Nethermind/Nethermind.Runner/JsonRpc/Startup.cs @@ -160,7 +160,7 @@ await PushErrorResponse(StatusCodes.Status403Forbidden, ErrorCodes.InvalidReques CountingPipeReader request = new(ctx.Request.BodyReader); try { - JsonRpcContext jsonRpcContext = JsonRpcContext.Http(jsonRpcUrl); + using JsonRpcContext jsonRpcContext = JsonRpcContext.Http(jsonRpcUrl); await foreach (JsonRpcResult result in jsonRpcProcessor.ProcessAsync(request, jsonRpcContext)) { using (result) @@ -215,7 +215,7 @@ await PushErrorResponse(StatusCodes.Status403Forbidden, ErrorCodes.InvalidReques { jsonSerializer.Serialize(resultWriter, result.Response); } - + await resultWriter.CompleteAsync(); if (stream is not null) { ctx.Response.ContentLength = resultWriter.WrittenCount; diff --git a/src/Nethermind/Nethermind.Runner/Nethermind.Runner.csproj b/src/Nethermind/Nethermind.Runner/Nethermind.Runner.csproj index c033683318c..a3cc9a0f65b 100644 --- a/src/Nethermind/Nethermind.Runner/Nethermind.Runner.csproj +++ b/src/Nethermind/Nethermind.Runner/Nethermind.Runner.csproj @@ -10,7 +10,7 @@ true true true - 1 + 0 @@ -21,6 +21,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + @@ -38,6 +42,7 @@ + @@ -86,11 +91,11 @@ - - + + - - + + @@ -105,25 +110,4 @@ - - - - - - $(Commit.Substring(0, 8)) - - - - <_Parameter1>Commit - <_Parameter2>$(Commit) - - - - - - - - - - diff --git a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json index 2c5c4f7df6d..da27c06e51c 100644 --- a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json +++ b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json @@ -56,23 +56,30 @@ "ASPNETCORE_ENVIRONMENT": "Development" } }, - "OP Goerli": { + "OP Mainnet": { "commandName": "Project", - "commandLineArgs": "-c op-goerli -dd %NETHERMIND_DATA_DIR% --JsonRpc.UnsecureDevNoRpcAuthentication=true", + "commandLineArgs": "-c op-mainnet -dd %NETHERMIND_DATA_DIR%", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "OP Sepolia": { + "commandName": "Project", + "commandLineArgs": "-c op-sepolia -dd %NETHERMIND_DATA_DIR%", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "Base Mainnet": { "commandName": "Project", - "commandLineArgs": "-c base-mainnet -dd %NETHERMIND_DATA_DIR% --JsonRpc.UnsecureDevNoRpcAuthentication=true", + "commandLineArgs": "-c base-mainnet -dd %NETHERMIND_DATA_DIR%", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, - "Base Goerli": { + "Base Sepolia": { "commandName": "Project", - "commandLineArgs": "-c base-goerli -dd %NETHERMIND_DATA_DIR% --JsonRpc.UnsecureDevNoRpcAuthentication=true", + "commandLineArgs": "-c base-sepolia -dd %NETHERMIND_DATA_DIR%", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -100,7 +107,7 @@ }, "Mainnet": { "commandName": "Project", - "commandLineArgs": "-c mainnet -dd .data", + "commandLineArgs": "-c mainnet -dd %NETHERMIND_DATA_DIR%", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/src/Nethermind/Nethermind.Runner/configs/base-mainnet.cfg b/src/Nethermind/Nethermind.Runner/configs/base-mainnet.cfg index c7485d7dbd7..359c438be29 100644 --- a/src/Nethermind/Nethermind.Runner/configs/base-mainnet.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/base-mainnet.cfg @@ -10,11 +10,35 @@ "BlobsSupport": "Disabled" }, "Sync": { - "NetworkingEnabled": false + "FastSync": true, + "SnapSync": true, + "AncientBodiesBarrier": 105235063, + "AncientReceiptsBarrier": 105235063, + "FastSyncCatchUpHeightDelta": "10000000000", + "PivotNumber": 14239812, + "PivotHash": "0x335a694a721f223125c0f494f44c7525ef1503a664b227a7b3478fbf8c4175b7", + "PivotTotalDifficulty": "0", + "MaxAttemptsToUpdatePivot": 0 + }, + "Discovery": { + "Discv5Enabled": true }, "JsonRpc": { "Enabled": true, "Port": 8545, "EnginePort": 8551 + }, + "Pruning": { + "PruningBoundary": 1024 + }, + "Blocks": { + "SecondsPerSlot": 2, + "TargetBlockGasLimit": 60000000 + }, + "Merge": { + "Enabled": true + }, + "Optimism": { + "SequencerUrl": "https://mainnet-sequencer.base.org" } } diff --git a/src/Nethermind/Nethermind.Runner/configs/base-mainnet_archive.cfg b/src/Nethermind/Nethermind.Runner/configs/base-mainnet_archive.cfg index 2124907388b..a694d5ca33f 100644 --- a/src/Nethermind/Nethermind.Runner/configs/base-mainnet_archive.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/base-mainnet_archive.cfg @@ -19,5 +19,8 @@ "Enabled": true, "Port": 8545, "EnginePort": 8551 + }, + "Optimism": { + "SequencerUrl": "https://mainnet-sequencer.base.org" } } diff --git a/src/Nethermind/Nethermind.Runner/configs/base-sepolia.cfg b/src/Nethermind/Nethermind.Runner/configs/base-sepolia.cfg index 574cee32bf4..c20d5897040 100644 --- a/src/Nethermind/Nethermind.Runner/configs/base-sepolia.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/base-sepolia.cfg @@ -10,11 +10,33 @@ "BlobsSupport": "Disabled" }, "Sync": { - "NetworkingEnabled": false + "FastSync": true, + "SnapSync": true, + "FastSyncCatchUpHeightDelta": "10000000000", + "PivotNumber": 9750377, + "PivotHash": "0x71ce74cb650b24f7fc473934e97c41f3cabe6b094ac368d9d7a733f0cb514599", + "PivotTotalDifficulty": "0", + "MaxAttemptsToUpdatePivot": 0 + }, + "Discovery": { + "Discv5Enabled": true }, "JsonRpc": { "Enabled": true, "Port": 8545, "EnginePort": 8551 + }, + "Pruning": { + "PruningBoundary": 1024 + }, + "Blocks": { + "SecondsPerSlot": 2, + "TargetBlockGasLimit": 45000000 + }, + "Merge": { + "Enabled": true + }, + "Optimism": { + "SequencerUrl": "https://sepolia-sequencer.base.org" } } diff --git a/src/Nethermind/Nethermind.Runner/configs/base-sepolia_archive.cfg b/src/Nethermind/Nethermind.Runner/configs/base-sepolia_archive.cfg index 8e0bc623da3..49828a0b09f 100644 --- a/src/Nethermind/Nethermind.Runner/configs/base-sepolia_archive.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/base-sepolia_archive.cfg @@ -19,5 +19,8 @@ "Enabled": true, "Port": 8545, "EnginePort": 8551 + }, + "Optimism": { + "SequencerUrl": "https://sepolia-sequencer.base.org" } } diff --git a/src/Nethermind/Nethermind.Runner/configs/chiado.cfg b/src/Nethermind/Nethermind.Runner/configs/chiado.cfg index d5f56dcdac7..18726ba0af2 100644 --- a/src/Nethermind/Nethermind.Runner/configs/chiado.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/chiado.cfg @@ -15,8 +15,8 @@ }, "Sync": { "FastSync": true, - "PivotNumber": 9600000, - "PivotHash": "0xc2eb45a42ee83ee2784b016d2808466b754bce896eedfde5856b5ac1865a436c", + "PivotNumber": 10200000, + "PivotHash": "0x66705e2ef5f4edcd627afe1e512903778c780b185c9b3dc92e6934e295683afd", "PivotTotalDifficulty": "231708131825107706987652208063906496124457284", "FastSyncCatchUpHeightDelta": "10000000000", "UseGethLimitsInFastBlocks": false diff --git a/src/Nethermind/Nethermind.Runner/configs/energyweb.cfg b/src/Nethermind/Nethermind.Runner/configs/energyweb.cfg index b3f7396e5ab..e54f328f45e 100644 --- a/src/Nethermind/Nethermind.Runner/configs/energyweb.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/energyweb.cfg @@ -11,9 +11,9 @@ }, "Sync": { "FastSync": true, - "PivotNumber": 29760000, - "PivotHash": "0x863b083c2d9d8adaec5b0591e8c57e13e12c1675ad091cfe8cad589c993f55ed", - "PivotTotalDifficulty": "10126803239567128672670028317169421972557970934", + "PivotNumber": 30320000, + "PivotHash": "0x7e06ec6e44fa1a5fdbc25aa33758451465083ef73e8935d7174d2aa3122578a7", + "PivotTotalDifficulty": "10317361365042854212209518097331212170972166406", "FastBlocks": true, "UseGethLimitsInFastBlocks": false, "FastSyncCatchUpHeightDelta": 10000000000 diff --git a/src/Nethermind/Nethermind.Runner/configs/exosama.cfg b/src/Nethermind/Nethermind.Runner/configs/exosama.cfg index 8caac79e843..782b1cb621d 100644 --- a/src/Nethermind/Nethermind.Runner/configs/exosama.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/exosama.cfg @@ -11,9 +11,9 @@ }, "Sync": { "FastSync": true, - "PivotNumber": 9680000, - "PivotHash": "0xd8ffbe65bc320f6d874b2b08ff578d00f9d8bca29d6dbb0d892a21466d548c2d", - "PivotTotalDifficulty": "3293933311794684326325466199939516286541573286", + "PivotNumber": 10290000, + "PivotHash": "0x55a1b682599b65ba2712393c130e25a3992ac32cf278ce6785d772067f695657", + "PivotTotalDifficulty": "3501505555616456789038124710472894895528513286", "FastBlocks": true, "UseGethLimitsInFastBlocks": false, "FastSyncCatchUpHeightDelta": 10000000000 diff --git a/src/Nethermind/Nethermind.Runner/configs/gnosis.cfg b/src/Nethermind/Nethermind.Runner/configs/gnosis.cfg index 52b382e60f9..aae981b34a7 100644 --- a/src/Nethermind/Nethermind.Runner/configs/gnosis.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/gnosis.cfg @@ -12,8 +12,8 @@ }, "Sync": { "FastSync": true, - "PivotNumber": 33770000, - "PivotHash": "0xf164c80064fdd455a5ead5c5b72b8e926c174ccca7794559309bc4984a2abed9", + "PivotNumber": 34350000, + "PivotHash": "0x456b1aa69a62a859343be8f1a9b607d482a58d4e80d82cb7c53f24bcc5b352e9", "PivotTotalDifficulty": "8626000110427538733349499292577475819600160930", "FastBlocks": true, "UseGethLimitsInFastBlocks": false, diff --git a/src/Nethermind/Nethermind.Runner/configs/joc-mainnet.cfg b/src/Nethermind/Nethermind.Runner/configs/joc-mainnet.cfg index 9d21954c287..c9b1a620d9f 100644 --- a/src/Nethermind/Nethermind.Runner/configs/joc-mainnet.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/joc-mainnet.cfg @@ -12,9 +12,9 @@ "FastSync": true, "SnapSync": true, "FastBlocks": true, - "PivotNumber": 11050000, - "PivotHash": "0x1ebcdd7500ccca9b887bf6b39679b6ec15d7c7f47c03517b8a7b57aee29f3d09", - "PivotTotalDifficulty": "22076851" + "PivotNumber": 11650000, + "PivotHash": "0x7a9089d0e6a3f43b5b0321f7aa4da8ec37e4bc1220d1b7cb5b22dd058fa2dd03", + "PivotTotalDifficulty": "23276561" }, "Metrics": { "NodeName": "JOC-Mainnet" diff --git a/src/Nethermind/Nethermind.Runner/configs/joc-testnet.cfg b/src/Nethermind/Nethermind.Runner/configs/joc-testnet.cfg index 47d8d3f3037..d13d50c4a2f 100644 --- a/src/Nethermind/Nethermind.Runner/configs/joc-testnet.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/joc-testnet.cfg @@ -11,9 +11,9 @@ "Sync": { "FastSync": true, "SnapSync": true, - "PivotNumber": 4650000, - "PivotHash": "0xed3919f210421fd7e2679210f0d99aca5ba5f9528e4b82f6cb0fba0ece51cd51", - "PivotTotalDifficulty": "9299443" + "PivotNumber": 5260000, + "PivotHash": "0xfeedf52b4e93509a31e933f04b5115d1395ebe46cde5105bff44cd7ce60e71b9", + "PivotTotalDifficulty": "10295113" }, "Metrics": { "NodeName": "JOC-Testnet" diff --git a/src/Nethermind/Nethermind.Runner/configs/mainnet.cfg b/src/Nethermind/Nethermind.Runner/configs/mainnet.cfg index fdcf0daa35d..e33b0a33265 100644 --- a/src/Nethermind/Nethermind.Runner/configs/mainnet.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/mainnet.cfg @@ -9,8 +9,8 @@ "Sync": { "FastSync": true, "SnapSync": true, - "PivotNumber": 19799000, - "PivotHash": "0x62bf6817b7c009c7e26348d2b059c8972e424049888fe4534f5cad6dd4582fd2", + "PivotNumber": 20049000, + "PivotHash": "0x7e1be28e7effe28715bee8a1bc9991ea966979b84e62432a32c543dcf8e45624", "PivotTotalDifficulty": "58750003716598352816469", "FastBlocks": true, "FastSyncCatchUpHeightDelta": "10000000000" diff --git a/src/Nethermind/Nethermind.Runner/configs/op-mainnet.cfg b/src/Nethermind/Nethermind.Runner/configs/op-mainnet.cfg index abd95bf7a81..d8f2a8fcdae 100644 --- a/src/Nethermind/Nethermind.Runner/configs/op-mainnet.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/op-mainnet.cfg @@ -11,19 +11,41 @@ "BlobsSupport": "Disabled" }, "Sync": { - "NetworkingEnabled": false, + "FastSync": true, + "SnapSync": true, "AncientBodiesBarrier": 105235063, - "AncientReceiptsBarrier": 105235063 + "AncientReceiptsBarrier": 105235063, + "FastSyncCatchUpHeightDelta": "10000000000", + "PivotNumber": 119834660, + "PivotHash": "0xcdab6080b3846cf67b50935604deccbdf0e27434fa7b454ccf2195051ecd7a10", + "PivotTotalDifficulty": "0", + "MaxAttemptsToUpdatePivot": 0 + }, + "Discovery": { + "Discv5Enabled": true }, "JsonRpc": { "Enabled": true, "Port": 8545, "EnginePort": 8551 }, + "Pruning": { + "PruningBoundary": 1024 + }, + "Blocks": { + "SecondsPerSlot": 2, + "TargetBlockGasLimit": 30000000 + }, + "Merge": { + "Enabled": true + }, "Snapshot": { "Enabled": true, "DownloadUrl": "http://optimism-snapshot.nethermind.io/op-mainnet-genesis-v2.zip", "SnapshotFileName": "op-mainnet-genesis-v2.zip", "Checksum": "0x9b08eeb974c46f257c8bca812b119849590d92975ac86e4215d0d5647c26b147" + }, + "Optimism": { + "SequencerUrl": "https://mainnet-sequencer.optimism.io" } } diff --git a/src/Nethermind/Nethermind.Runner/configs/op-mainnet_archive.cfg b/src/Nethermind/Nethermind.Runner/configs/op-mainnet_archive.cfg index 0d93e309fad..00a493c0081 100644 --- a/src/Nethermind/Nethermind.Runner/configs/op-mainnet_archive.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/op-mainnet_archive.cfg @@ -28,5 +28,8 @@ "DownloadUrl": "http://optimism-snapshot.nethermind.io/op-mainnet-genesis-v1.zip", "SnapshotFileName": "op-mainnet-genesis-v1.zip", "Checksum": "0xd7e15b26175c4c924acf75c5790e75d5eaa044977ca8e1904dc62d5d0769eba3" + }, + "Optimism": { + "SequencerUrl": "https://mainnet-sequencer.optimism.io" } } diff --git a/src/Nethermind/Nethermind.Runner/configs/op-sepolia.cfg b/src/Nethermind/Nethermind.Runner/configs/op-sepolia.cfg index cb2be7b62f2..e2fc13f67b8 100644 --- a/src/Nethermind/Nethermind.Runner/configs/op-sepolia.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/op-sepolia.cfg @@ -10,11 +10,33 @@ "BlobsSupport": "Disabled" }, "Sync": { - "NetworkingEnabled": false + "FastSync": true, + "SnapSync": true, + "FastSyncCatchUpHeightDelta": "10000000000", + "PivotNumber": 11338054, + "PivotHash": "0xf4307e8fd758db460d57b87bd910fa932feb928932c99faa85edf5a588ede049", + "PivotTotalDifficulty": "0", + "MaxAttemptsToUpdatePivot": 0 + }, + "Discovery": { + "Discv5Enabled": true }, "JsonRpc": { "Enabled": true, "Port": 8545, "EnginePort": 8551 + }, + "Pruning": { + "PruningBoundary": 1024 + }, + "Blocks": { + "SecondsPerSlot": 2, + "TargetBlockGasLimit": 30000000 + }, + "Merge": { + "Enabled": true + }, + "Optimism": { + "SequencerUrl": "https://sepolia-sequencer.optimism.io" } } diff --git a/src/Nethermind/Nethermind.Runner/configs/op-sepolia_archive.cfg b/src/Nethermind/Nethermind.Runner/configs/op-sepolia_archive.cfg index 9d8da6803b2..47240200d7a 100644 --- a/src/Nethermind/Nethermind.Runner/configs/op-sepolia_archive.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/op-sepolia_archive.cfg @@ -19,5 +19,8 @@ "Enabled": true, "Port": 8545, "EnginePort": 8551 + }, + "Optimism": { + "SequencerUrl": "https://sepolia-sequencer.optimism.io" } } diff --git a/src/Nethermind/Nethermind.Runner/configs/sepolia.cfg b/src/Nethermind/Nethermind.Runner/configs/sepolia.cfg index 3786e2e498d..e9aff51d60b 100644 --- a/src/Nethermind/Nethermind.Runner/configs/sepolia.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/sepolia.cfg @@ -17,8 +17,8 @@ "FastSync": true, "SnapSync": true, "UseGethLimitsInFastBlocks": true, - "PivotNumber": 5837000, - "PivotHash": "0x1b2a4df93c9d2bd6b0482572250fbe6c199dec78fc09cb0d9fc61380bd66d92c", + "PivotNumber": 6067000, + "PivotHash": "0xec18eaec616ea4cec9cd09ab19eee43cfea9fe03addcae2a8eb4868b0fe64c36", "PivotTotalDifficulty": "17000018015853232", "FastSyncCatchUpHeightDelta": "10000000000" }, diff --git a/src/Nethermind/Nethermind.Runner/configs/volta.cfg b/src/Nethermind/Nethermind.Runner/configs/volta.cfg index 3c636c5b61e..837c380940e 100644 --- a/src/Nethermind/Nethermind.Runner/configs/volta.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/volta.cfg @@ -15,9 +15,9 @@ }, "Sync": { "FastSync": true, - "PivotNumber": 27630000, - "PivotHash": "0xc9a3f35992dfd2bc4f27066a4b4b753a90276bc6d75f10a5010316c8cb7c50c8", - "PivotTotalDifficulty": "9402001798025529745493040403339755682158823836", + "PivotNumber": 28070000, + "PivotHash": "0x40256b527c12040e809347751dfa67d896f292a123e912d85dc4d6039f778b33", + "PivotTotalDifficulty": "9551726039470742669416925230609733695198421023", "UseGethLimitsInFastBlocks": false, "FastSyncCatchUpHeightDelta": 10000000000 }, diff --git a/src/Nethermind/Nethermind.Serialization.Json/StreamPipeWriter.cs b/src/Nethermind/Nethermind.Serialization.Json/StreamPipeWriter.cs index da1ecd2a3fb..89f802e849f 100644 --- a/src/Nethermind/Nethermind.Serialization.Json/StreamPipeWriter.cs +++ b/src/Nethermind/Nethermind.Serialization.Json/StreamPipeWriter.cs @@ -18,7 +18,8 @@ namespace Nethermind.Serialization.Json; public interface ICountingBufferWriter : IBufferWriter { - public long WrittenCount { get; } + long WrittenCount { get; } + ValueTask CompleteAsync(Exception? exception = null); } public sealed class CountingPipeWriter : ICountingBufferWriter @@ -42,6 +43,12 @@ public void Advance(int count) public Memory GetMemory(int sizeHint = 0) => _writer.GetMemory(sizeHint); public Span GetSpan(int sizeHint = 0) => _writer.GetSpan(sizeHint); + + public ValueTask CompleteAsync(Exception? exception = null) + { + return _writer.CompleteAsync(); + } + } public sealed class CountingStreamPipeWriter : PipeWriter, ICountingBufferWriter @@ -84,11 +91,6 @@ public CountingStreamPipeWriter(Stream writingStream, StreamPipeWriterOptions? o { ThrowHelper.ThrowArgumentNullException_WritingStream(); } - if (options is null) - { - ThrowHelper.ThrowArgumentNullException_Options(); - } - InnerStream = writingStream; _minimumBufferSize = options?.MinimumBufferSize ?? 4096; _pool = options?.Pool == MemoryPool.Shared ? null : options?.Pool; diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/CompactReceiptStorageDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/CompactReceiptStorageDecoder.cs index 25e8ff25576..aa2ddcca370 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/CompactReceiptStorageDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/CompactReceiptStorageDecoder.cs @@ -6,12 +6,13 @@ using Nethermind.Core; using Nethermind.Core.Collections; using Nethermind.Core.Crypto; +using static Nethermind.Serialization.Rlp.Rlp; #pragma warning disable 618 namespace Nethermind.Serialization.Rlp { - [Rlp.SkipGlobalRegistration] + [Decoder(RlpDecoderKey.Storage)] public class CompactReceiptStorageDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder, IReceiptRefDecoder { public static readonly CompactReceiptStorageDecoder Instance = new(); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptArrayStorageDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptArrayStorageDecoder.cs index 731ed2c33a7..f2d7c8051e1 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptArrayStorageDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptArrayStorageDecoder.cs @@ -8,19 +8,17 @@ namespace Nethermind.Serialization.Rlp; [Rlp.SkipGlobalRegistration] -public class ReceiptArrayStorageDecoder : IRlpStreamDecoder +public class ReceiptArrayStorageDecoder(bool compactEncoding = true) : IRlpStreamDecoder { public static readonly ReceiptArrayStorageDecoder Instance = new(); - private readonly ReceiptStorageDecoder StorageDecoder = ReceiptStorageDecoder.Instance; - private readonly CompactReceiptStorageDecoder CompactReceiptStorageDecoder = CompactReceiptStorageDecoder.Instance; - public const int CompactEncoding = 127; - private readonly bool _useCompactEncoding = true; + private static readonly IRlpStreamDecoder Decoder = Rlp.GetStreamDecoder(RlpDecoderKey.LegacyStorage); + private static readonly IRlpValueDecoder ValueDecoder = Rlp.GetValueDecoder(RlpDecoderKey.LegacyStorage); - public ReceiptArrayStorageDecoder(bool compactEncoding = true) - { - _useCompactEncoding = compactEncoding; - } + private static readonly IRlpStreamDecoder CompactDecoder = Rlp.GetStreamDecoder(RlpDecoderKey.Storage); + private static readonly IRlpValueDecoder CompactValueDecoder = Rlp.GetValueDecoder(RlpDecoderKey.Storage); + + public const int CompactEncoding = 127; public int GetLength(TxReceipt[] items, RlpBehaviors rlpBehaviors) { @@ -30,7 +28,7 @@ public int GetLength(TxReceipt[] items, RlpBehaviors rlpBehaviors) } int bufferLength = Rlp.LengthOfSequence(GetContentLength(items, rlpBehaviors)); - if (_useCompactEncoding && (rlpBehaviors & RlpBehaviors.Storage) != 0) + if (compactEncoding && (rlpBehaviors & RlpBehaviors.Storage) != 0) { bufferLength++; } @@ -39,12 +37,12 @@ public int GetLength(TxReceipt[] items, RlpBehaviors rlpBehaviors) private int GetContentLength(TxReceipt[] items, RlpBehaviors rlpBehaviors) { - if (_useCompactEncoding && (rlpBehaviors & RlpBehaviors.Storage) != 0) + if (compactEncoding && (rlpBehaviors & RlpBehaviors.Storage) != 0) { int totalLength = 0; for (int i = 0; i < items.Length; i++) { - totalLength += CompactReceiptStorageDecoder.GetLength(items[i], rlpBehaviors); + totalLength += CompactDecoder.GetLength(items[i], rlpBehaviors); } return totalLength; @@ -54,7 +52,7 @@ private int GetContentLength(TxReceipt[] items, RlpBehaviors rlpBehaviors) int totalLength = 0; for (int i = 0; i < items.Length; i++) { - totalLength += StorageDecoder.GetLength(items[i], rlpBehaviors); + totalLength += Decoder.GetLength(items[i], rlpBehaviors); } return totalLength; @@ -66,11 +64,11 @@ public TxReceipt[] Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBe if (rlpStream.PeekByte() == CompactEncoding) { rlpStream.ReadByte(); - return CompactReceiptStorageDecoder.DecodeArray(rlpStream, RlpBehaviors.Storage); + return CompactDecoder.DecodeArray(rlpStream, RlpBehaviors.Storage); } else { - return StorageDecoder.DecodeArray(rlpStream, RlpBehaviors.Storage); + return Decoder.DecodeArray(rlpStream, RlpBehaviors.Storage); } } @@ -82,7 +80,7 @@ public void Encode(RlpStream stream, TxReceipt[] items, RlpBehaviors rlpBehavior return; } - if (_useCompactEncoding && (rlpBehaviors & RlpBehaviors.Storage) != 0) + if (compactEncoding && (rlpBehaviors & RlpBehaviors.Storage) != 0) { int totalLength = GetContentLength(items, rlpBehaviors); stream.WriteByte(CompactEncoding); @@ -90,7 +88,7 @@ public void Encode(RlpStream stream, TxReceipt[] items, RlpBehaviors rlpBehavior for (int i = 0; i < items.Length; i++) { - CompactReceiptStorageDecoder.Encode(stream, items[i], rlpBehaviors); + CompactDecoder.Encode(stream, items[i], rlpBehaviors); } } else @@ -100,7 +98,7 @@ public void Encode(RlpStream stream, TxReceipt[] items, RlpBehaviors rlpBehavior for (int i = 0; i < items.Length; i++) { - StorageDecoder.Encode(stream, items[i], rlpBehaviors); + Decoder.Encode(stream, items[i], rlpBehaviors); } } } @@ -115,19 +113,19 @@ public TxReceipt[] Decode(in Span receiptsData) if (receiptsData.Length > 0 && receiptsData[0] == CompactEncoding) { var decoderContext = new Rlp.ValueDecoderContext(receiptsData[1..]); - return CompactReceiptStorageDecoder.DecodeArray(ref decoderContext, RlpBehaviors.Storage); + return CompactValueDecoder.DecodeArray(ref decoderContext, RlpBehaviors.Storage); } else { var decoderContext = new Rlp.ValueDecoderContext(receiptsData); try { - return StorageDecoder.DecodeArray(ref decoderContext, RlpBehaviors.Storage); + return ValueDecoder.DecodeArray(ref decoderContext, RlpBehaviors.Storage); } catch (RlpException) { decoderContext.Position = 0; - return StorageDecoder.DecodeArray(ref decoderContext); + return ValueDecoder.DecodeArray(ref decoderContext); } } } @@ -137,14 +135,14 @@ public TxReceipt DeserializeReceiptObsolete(Hash256 hash, Span receiptData var context = new Rlp.ValueDecoderContext(receiptData); try { - var receipt = StorageDecoder.Decode(ref context, RlpBehaviors.Storage); + var receipt = ValueDecoder.Decode(ref context, RlpBehaviors.Storage); receipt.TxHash = hash; return receipt; } catch (RlpException) { context.Position = 0; - var receipt = StorageDecoder.Decode(ref context); + var receipt = ValueDecoder.Decode(ref context); receipt.TxHash = hash; return receipt; } @@ -155,13 +153,13 @@ public static bool IsCompactEncoding(Span receiptsData) return receiptsData.Length > 0 && receiptsData[0] == CompactEncoding; } - public static IReceiptRefDecoder GetRefDecoder(Span receiptsData) + public IReceiptRefDecoder GetRefDecoder(Span receiptsData) { if (IsCompactEncoding(receiptsData)) { - return CompactReceiptStorageDecoder.Instance; + return (IReceiptRefDecoder)CompactValueDecoder; } - return ReceiptStorageDecoder.Instance; + return (IReceiptRefDecoder)ValueDecoder; } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptMessageDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptMessageDecoder.cs index 2453a91d1db..9cba7dab049 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptMessageDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptMessageDecoder.cs @@ -7,15 +7,10 @@ namespace Nethermind.Serialization.Rlp { + [Rlp.Decoder(RlpDecoderKey.Default)] + [Rlp.Decoder(RlpDecoderKey.Trie)] public class ReceiptMessageDecoder : IRlpStreamDecoder { - public static readonly ReceiptMessageDecoder Instance = new(); - - static ReceiptMessageDecoder() - { - Rlp.RegisterDecoder(typeof(TxReceipt), new ReceiptMessageDecoder()); - } - public TxReceipt Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptStorageDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptStorageDecoder.cs index f9a9c4bfccd..6bd8a18c5aa 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptStorageDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptStorageDecoder.cs @@ -10,18 +10,22 @@ namespace Nethermind.Serialization.Rlp { + [Rlp.Decoder(RlpDecoderKey.LegacyStorage)] public class ReceiptStorageDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder, IReceiptRefDecoder { private readonly bool _supportTxHash; private const byte MarkTxHashByte = 255; - public static readonly ReceiptStorageDecoder Instance = new(); - public ReceiptStorageDecoder(bool supportTxHash = true) { _supportTxHash = supportTxHash; } + // Used by Rlp decoders discovery + public ReceiptStorageDecoder() : this(true) + { + } + public TxReceipt? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs index 923cb54f74f..9a55db5e4bd 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs @@ -75,30 +75,18 @@ public Rlp(byte[] bytes) public int Length => Bytes.Length; - private static Dictionary _decoderBuilder = new(); - private static FrozenDictionary? _decoders; - public static FrozenDictionary Decoders => _decoders ??= _decoderBuilder.ToFrozenDictionary(); + private static Dictionary _decoderBuilder = new(); + private static FrozenDictionary? _decoders; + public static FrozenDictionary Decoders => _decoders ??= _decoderBuilder.ToFrozenDictionary(); - public struct TypeAsKey(Type key) : IEquatable + public static void RegisterDecoder(RlpDecoderKey key, IRlpDecoder decoder) { - private readonly Type _key = key; - public Type Value => _key; - - public static implicit operator Type(TypeAsKey key) => key._key; - public static implicit operator TypeAsKey(Type key) => new(key); - - public bool Equals(TypeAsKey other) => _key.Equals(other._key); - public override int GetHashCode() => _key.GetHashCode(); - } - - public static void RegisterDecoder(Type type, IRlpDecoder decoder) - { - _decoderBuilder[type] = decoder; + _decoderBuilder[key] = decoder; // Mark FrozenDictionary as null to force re-creation _decoders = null; } - public static void RegisterDecoders(Assembly assembly) + public static void RegisterDecoders(Assembly assembly, bool canOverrideExistingDecoders = false) { foreach (Type? type in assembly.GetExportedTypes()) { @@ -123,16 +111,41 @@ public static void RegisterDecoders(Assembly assembly) Type? interfaceGenericDefinition = implementedInterface.GetGenericTypeDefinition(); if (interfaceGenericDefinition == typeof(IRlpDecoder<>).GetGenericTypeDefinition()) { - ConstructorInfo? constructor = type.GetConstructor(Type.EmptyTypes); - if (constructor is null) + bool isSetForAnyAttribute = false; + IRlpDecoder? instance = null; + + foreach (DecoderAttribute rlpDecoderAttr in type.GetCustomAttributes()) { - continue; + RlpDecoderKey key = new(implementedInterface.GenericTypeArguments[0], rlpDecoderAttr.Key); + AddEncoder(key); + + isSetForAnyAttribute = true; } - Type key = implementedInterface.GenericTypeArguments[0]; - if (!_decoderBuilder.ContainsKey(key)) + if (!isSetForAnyAttribute) { - _decoderBuilder[key] = (IRlpDecoder)Activator.CreateInstance(type); + AddEncoder(new(implementedInterface.GenericTypeArguments[0])); + } + + void AddEncoder(RlpDecoderKey key) + { + if (!_decoderBuilder.ContainsKey(key) || canOverrideExistingDecoders) + { + try + { + _decoderBuilder[key] = instance ??= (IRlpDecoder)(type.GetConstructor(Type.EmptyTypes) is not null ? + Activator.CreateInstance(type) : + Activator.CreateInstance(type, BindingFlags.CreateInstance | BindingFlags.OptionalParamBinding, null, [Type.Missing], null)); + } + catch (Exception) + { + throw new ArgumentException($"Unable to set decoder for {key}, because {type} decoder has no suitable constructor."); + } + } + else + { + throw new InvalidOperationException($"Unable to override decoder for {key}, because the following decoder is already set: {_decoderBuilder[key]}."); + } } } } @@ -234,10 +247,9 @@ internal static ArrayPoolList ByteSpanToArrayPool(ReadOnlySpan span) return span.ToPooledList(); } - public static IRlpValueDecoder? GetValueDecoder() => Decoders.TryGetValue(typeof(T), out IRlpDecoder value) ? value as IRlpValueDecoder : null; - public static IRlpStreamDecoder? GetStreamDecoder() => Decoders.TryGetValue(typeof(T), out IRlpDecoder value) ? value as IRlpStreamDecoder : null; - public static IRlpObjectDecoder? GetObjectDecoder() => Decoders.TryGetValue(typeof(T), out IRlpDecoder value) ? value as IRlpObjectDecoder : null; - public static IRlpDecoder? GetDecoder() => Decoders.TryGetValue(typeof(T), out IRlpDecoder value) ? value as IRlpDecoder : null; + public static IRlpValueDecoder? GetValueDecoder(string key = RlpDecoderKey.Default) => Decoders.TryGetValue(new(typeof(T), key), out IRlpDecoder value) ? value as IRlpValueDecoder : null; + public static IRlpStreamDecoder? GetStreamDecoder(string key = RlpDecoderKey.Default) => Decoders.TryGetValue(new(typeof(T), key), out IRlpDecoder value) ? value as IRlpStreamDecoder : null; + public static IRlpObjectDecoder GetObjectDecoder(string key = RlpDecoderKey.Default) => Decoders.GetValueOrDefault(new(typeof(T), key)) as IRlpObjectDecoder ?? throw new RlpException($"{nameof(Rlp)} does not support encoding {typeof(T).Name}"); public static T Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -284,8 +296,7 @@ public static Rlp Encode(T item, RlpBehaviors behaviors = RlpBehaviors.None) return new Rlp(stream.Data.ToArray()); } - IRlpObjectDecoder? rlpDecoder = GetObjectDecoder(); - return rlpDecoder is not null ? rlpDecoder.Encode(item, behaviors) : throw new RlpException($"{nameof(Rlp)} does not support encoding {typeof(T).Name}"); + return GetObjectDecoder().Encode(item, behaviors); } public static Rlp Encode(T[]? items, RlpBehaviors behaviors = RlpBehaviors.None) @@ -304,13 +315,7 @@ public static Rlp Encode(T[]? items, RlpBehaviors behaviors = RlpBehaviors.No return new Rlp(stream.Data.ToArray()); } - IRlpObjectDecoder rlpDecoder = GetObjectDecoder(); - if (rlpDecoder is not null) - { - return rlpDecoder.Encode(items, behaviors); - } - - throw new RlpException($"{nameof(Rlp)} does not support encoding {typeof(T).Name}"); + return GetObjectDecoder().Encode(items, behaviors); } public static Rlp Encode(int[] integers) @@ -422,8 +427,8 @@ public static int Encode(Span buffer, int position, Hash256 hash) ThrowArgumentOutOfRangeException(); } - Unsafe.Add(ref MemoryMarshal.GetReference(buffer), position) = 160; - Unsafe.As(ref Unsafe.Add(ref MemoryMarshal.GetReference(buffer), position + 1)) = hash.ValueHash256; + Unsafe.Add(ref MemoryMarshal.GetReference(buffer), (nuint)position) = 160; + Unsafe.As(ref Unsafe.Add(ref MemoryMarshal.GetReference(buffer), (nuint)position + 1)) = hash.ValueHash256; return newPosition; [DoesNotReturn] @@ -1867,8 +1872,50 @@ public static int LengthOf(BlockInfo item) return BlockInfoDecoder.Instance.GetLength(item, RlpBehaviors.None); } + [AttributeUsage(AttributeTargets.Class)] public class SkipGlobalRegistration : Attribute { } + + /// + /// Optional attribute for RLP decoders. + /// + /// Optional custom key that helps to have more than one decoder for the given type. + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)] + public sealed class DecoderAttribute(string key = RlpDecoderKey.Default) : Attribute + { + public string Key { get; } = key; + } + } + + public readonly struct RlpDecoderKey(Type type, string key = RlpDecoderKey.Default) : IEquatable + { + public const string Default = "default"; + public const string Storage = "storage"; + public const string LegacyStorage = "legacy-storage"; + public const string Trie = "trie"; + + private readonly Type _type = type; + private readonly string _key = key; + public Type Type => _type; + public string Key => _key; + + public static implicit operator Type(RlpDecoderKey key) => key._type; + public static implicit operator RlpDecoderKey(Type key) => new(key); + + public bool Equals(RlpDecoderKey other) => _type.Equals(other._type) && _key.Equals(other._key); + + public override int GetHashCode() => HashCode.Combine(_type, _key); + + public override bool Equals(object obj) => obj is RlpDecoderKey key && Equals(key); + + public static bool operator ==(RlpDecoderKey left, RlpDecoderKey right) => left.Equals(right); + + public static bool operator !=(RlpDecoderKey left, RlpDecoderKey right) => !(left == right); + + public override string ToString() + { + return $"({Type.Name},{Key})"; + } } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs index 23bea01afa1..d1bdeddd804 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs @@ -26,7 +26,6 @@ public class RlpStream private static readonly BlockDecoder _blockDecoder = new(); private static readonly BlockInfoDecoder _blockInfoDecoder = new(); private static readonly TxDecoder _txDecoder = new(); - private static readonly ReceiptMessageDecoder _receiptDecoder = new(); private static readonly WithdrawalDecoder _withdrawalDecoder = new(); private static readonly ConsensusRequestDecoder _requestsDecoder = new(); private static readonly LogEntryDecoder _logEntryDecoder = LogEntryDecoder.Instance; @@ -72,11 +71,6 @@ public void Encode(Transaction value, RlpBehaviors rlpBehaviors = RlpBehaviors.N _txDecoder.Encode(this, value, rlpBehaviors); } - public void Encode(TxReceipt value) - { - _receiptDecoder.Encode(this, value); - } - public void Encode(Withdrawal value) => _withdrawalDecoder.Encode(this, value); public void Encode(ConsensusRequest value) => _requestsDecoder.Encode(this, value); diff --git a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs index dc212ca3b55..5948b1b57ba 100644 --- a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs @@ -776,7 +776,7 @@ void TestTransitions(ForkActivation activation, Action changes) TestTransitions((ForkActivation)20280L, r => { r.IsEip2028Enabled = true; }); TestTransitions((ForkActivation)22000L, r => { r.IsEip2200Enabled = true; }); TestTransitions((ForkActivation)23000L, r => { r.IsEip1283Enabled = r.IsEip1344Enabled = true; }); - TestTransitions((ForkActivation)24000L, r => { r.IsEip2315Enabled = r.ValidateChainId = r.ValidateReceipts = true; }); + TestTransitions((ForkActivation)24000L, r => { r.ValidateChainId = r.ValidateReceipts = true; }); TestTransitions((ForkActivation)29290L, r => { r.IsEip2929Enabled = r.IsEip2565Enabled = true; }); TestTransitions((ForkActivation)29300L, r => { r.IsEip2930Enabled = true; }); TestTransitions((ForkActivation)31980L, r => { r.IsEip3198Enabled = true; }); diff --git a/src/Nethermind/Nethermind.Specs.Test/GoerliSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/GoerliSpecProviderTests.cs index 29af41d1b07..31414ad9405 100644 --- a/src/Nethermind/Nethermind.Specs.Test/GoerliSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/GoerliSpecProviderTests.cs @@ -16,7 +16,6 @@ public class GoerliSpecProviderTests [TestCase(4_460_644, true)] public void Berlin_eips(long blockNumber, bool isEnabled) { - _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2315Enabled.Should().Be(false); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2537Enabled.Should().Be(false); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2565Enabled.Should().Be(isEnabled); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2929Enabled.Should().Be(isEnabled); diff --git a/src/Nethermind/Nethermind.Specs.Test/MainnetSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/MainnetSpecProviderTests.cs index 9809cdb69fa..20b6fbb1f51 100644 --- a/src/Nethermind/Nethermind.Specs.Test/MainnetSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/MainnetSpecProviderTests.cs @@ -17,7 +17,6 @@ public class MainnetSpecProviderTests [TestCase(12_244_000, true)] public void Berlin_eips(long blockNumber, bool isEnabled) { - _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2315Enabled.Should().Be(false); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2537Enabled.Should().Be(false); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2565Enabled.Should().Be(isEnabled); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2929Enabled.Should().Be(isEnabled); diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index ada18d648c4..8568c1f16b9 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -97,9 +97,7 @@ public OverridableReleaseSpec(IReleaseSpec spec) public bool IsEip2200Enabled => _spec.IsEip2200Enabled; - public bool IsEip2315Enabled => _spec.IsEip2315Enabled; - - public bool IsEip2537Enabled => _spec.IsEip2315Enabled; + public bool IsEip2537Enabled => _spec.IsEip2537Enabled; public bool IsEip2565Enabled => _spec.IsEip2565Enabled; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index 9698f7f594b..52b8ba84dd3 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -195,7 +195,6 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip2200Enabled = (chainSpec.Parameters.Eip2200Transition ?? long.MaxValue) <= releaseStartBlock || (chainSpec.Parameters.Eip1706Transition ?? long.MaxValue) <= releaseStartBlock && releaseSpec.IsEip1283Enabled; releaseSpec.IsEip1559Enabled = (chainSpec.Parameters.Eip1559Transition ?? long.MaxValue) <= releaseStartBlock; releaseSpec.Eip1559TransitionBlock = chainSpec.Parameters.Eip1559Transition ?? long.MaxValue; - releaseSpec.IsEip2315Enabled = (chainSpec.Parameters.Eip2315Transition ?? long.MaxValue) <= releaseStartBlock; releaseSpec.IsEip2537Enabled = (chainSpec.Parameters.Eip2537Transition ?? long.MaxValue) <= releaseStartBlock || (chainSpec.Parameters.Eip2537TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip2565Enabled = (chainSpec.Parameters.Eip2565Transition ?? long.MaxValue) <= releaseStartBlock; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 734dcac3729..12eefe04059 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -343,6 +343,9 @@ static AuRaParameters.Validator LoadValidator(ChainSpecJson.AuRaValidatorJson va RegolithTimestamp = chainSpecJson.Engine.Optimism.RegolithTimestamp, BedrockBlockNumber = chainSpecJson.Engine.Optimism.BedrockBlockNumber, CanyonTimestamp = chainSpecJson.Engine.Optimism.CanyonTimestamp, + EcotoneTimestamp = chainSpecJson.Engine.Optimism.EcotoneTimestamp, + FjordTimestamp = chainSpecJson.Engine.Optimism.FjordTimestamp, + L1FeeRecipient = chainSpecJson.Engine.Optimism.L1FeeRecipient, L1BlockAddress = chainSpecJson.Engine.Optimism.L1BlockAddress, CanyonBaseFeeChangeDenominator = chainSpecJson.Engine.Optimism.CanyonBaseFeeChangeDenominator, diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecJson.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecJson.cs index d819732c34f..4600e1f9777 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecJson.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecJson.cs @@ -173,6 +173,8 @@ internal class OptimismEngineJson public ulong RegolithTimestamp => Params.RegolithTimestamp; public long BedrockBlockNumber => Params.BedrockBlockNumber; public ulong? CanyonTimestamp => Params.CanyonTimestamp; + public ulong? EcotoneTimestamp => Params.EcotoneTimestamp; + public ulong? FjordTimestamp => Params.FjordTimestamp; public Address L1FeeRecipient => Params.L1FeeRecipient; public Address L1BlockAddress => Params.L1BlockAddress; public UInt256 CanyonBaseFeeChangeDenominator => Params.CanyonBaseFeeChangeDenominator; @@ -186,6 +188,8 @@ internal class OptimismEngineParamsJson public ulong RegolithTimestamp { get; set; } public long BedrockBlockNumber { get; set; } public ulong? CanyonTimestamp { get; set; } + public ulong? EcotoneTimestamp { get; set; } + public ulong? FjordTimestamp { get; set; } public Address L1FeeRecipient { get; set; } public Address L1BlockAddress { get; set; } public UInt256 CanyonBaseFeeChangeDenominator { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/OptimismParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/OptimismParameters.cs index b2439224257..b457040ebcf 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/OptimismParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/OptimismParameters.cs @@ -14,6 +14,10 @@ public class OptimismParameters public ulong? CanyonTimestamp { get; set; } + public ulong? EcotoneTimestamp { get; set; } + + public ulong? FjordTimestamp { get; set; } + public Address L1FeeRecipient { get; set; } public Address L1BlockAddress { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index 923f995afab..66799e40167 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -47,7 +47,6 @@ public class ReleaseSpec : IReleaseSpec public bool IsEip1108Enabled { get; set; } public bool IsEip1884Enabled { get; set; } public bool IsEip2200Enabled { get; set; } - public bool IsEip2315Enabled { get; set; } public bool IsEip2537Enabled { get; set; } public bool IsEip2565Enabled { get; set; } public bool IsEip2929Enabled { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index d450e5621dd..c5785219823 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -93,9 +93,7 @@ public SystemTransactionReleaseSpec(IReleaseSpec spec) public bool IsEip2200Enabled => _spec.IsEip2200Enabled; - public bool IsEip2315Enabled => _spec.IsEip2315Enabled; - - public bool IsEip2537Enabled => _spec.IsEip2315Enabled; + public bool IsEip2537Enabled => _spec.IsEip2537Enabled; public bool IsEip2565Enabled => _spec.IsEip2565Enabled; diff --git a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs index cb2b6dab056..8197dae5530 100644 --- a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs @@ -176,9 +176,9 @@ public void Keep_in_cache() [Test] public void Restore_in_the_middle() { - byte[] code = new byte[] { 1 }; + byte[] code = [1]; - WorldState provider = new(new TrieStore(new MemDb(), Logger), _codeDb, Logger); + IWorldState provider = new WorldState(new TrieStore(new MemDb(), Logger), _codeDb, Logger); provider.CreateAccount(_address1, 1); provider.AddToBalance(_address1, 1, Frontier.Instance); provider.IncrementNonce(_address1); diff --git a/src/Nethermind/Nethermind.State.Test/Witnesses/NullWitnessCollectorTests.cs b/src/Nethermind/Nethermind.State.Test/Witnesses/NullWitnessCollectorTests.cs deleted file mode 100644 index fb82cff588d..00000000000 --- a/src/Nethermind/Nethermind.State.Test/Witnesses/NullWitnessCollectorTests.cs +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using FluentAssertions; -using Nethermind.Core.Crypto; -using Nethermind.State; -using NUnit.Framework; - -namespace Nethermind.Store.Test.Witnesses -{ - [TestFixture, Parallelizable(ParallelScope.All)] - public class NullWitnessCollectorTests - { - [Test] - public void Cannot_call_add() - { - Assert.Throws( - () => NullWitnessCollector.Instance.Add(Keccak.Zero)); - } - - [Test] - public void Collected_is_empty() - { - NullWitnessCollector.Instance.Collected.Should().HaveCount(0); - } - - [Test] - public void Reset_does_nothing() - { - NullWitnessCollector.Instance.Reset(); - NullWitnessCollector.Instance.Reset(); - } - - [Test] - public void Persist_does_nothing() - { - NullWitnessCollector.Instance.Persist(Keccak.Zero); - } - - [Test] - public void Load_throws() - { - Assert.Throws( - () => NullWitnessCollector.Instance.Load(Keccak.Zero)); - } - } -} diff --git a/src/Nethermind/Nethermind.State.Test/Witnesses/WitnessCollectorTests.cs b/src/Nethermind/Nethermind.State.Test/Witnesses/WitnessCollectorTests.cs deleted file mode 100644 index a95eebe7ed4..00000000000 --- a/src/Nethermind/Nethermind.State.Test/Witnesses/WitnessCollectorTests.cs +++ /dev/null @@ -1,193 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using FluentAssertions; -using Nethermind.Core; -using Nethermind.Core.Crypto; -using Nethermind.Core.Test.Builders; -using Nethermind.Db; -using Nethermind.Logging; -using Nethermind.State.Witnesses; -using NUnit.Framework; - -namespace Nethermind.Store.Test.Witnesses -{ - [TestFixture, Parallelizable(ParallelScope.All)] - public class WitnessCollectorTests - { - [Test] - public void Collects_each_cache_once() - { - WitnessCollector witnessCollector = new(new MemDb(), LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - witnessCollector.Add(Keccak.Zero); - witnessCollector.Add(Keccak.Zero); - - witnessCollector.Collected.Should().HaveCount(1); - } - - [Test] - public void Can_collect_many() - { - WitnessCollector witnessCollector = new(new MemDb(), LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - witnessCollector.Add(TestItem.KeccakA); - witnessCollector.Add(TestItem.KeccakB); - - witnessCollector.Collected.Should().HaveCount(2); - } - - [Test] - public void Can_reset() - { - WitnessCollector witnessCollector = new(new MemDb(), LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - witnessCollector.Add(TestItem.KeccakA); - witnessCollector.Add(TestItem.KeccakB); - witnessCollector.Reset(); - - witnessCollector.Collected.Should().HaveCount(0); - } - - [Test] - public void Can_collect_after_reset() - { - WitnessCollector witnessCollector = new(new MemDb(), LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - witnessCollector.Add(TestItem.KeccakA); - witnessCollector.Add(TestItem.KeccakB); - witnessCollector.Reset(); - witnessCollector.Add(TestItem.KeccakC); - - witnessCollector.Collected.Should().HaveCount(1); - } - - [Test] - public void Collects_what_it_should_collect() - { - WitnessCollector witnessCollector = new(new MemDb(), LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - witnessCollector.Add(TestItem.KeccakA); - witnessCollector.Add(TestItem.KeccakB); - - witnessCollector.Collected.Should().Contain(TestItem.KeccakA); - witnessCollector.Collected.Should().Contain(TestItem.KeccakB); - } - - [Test] - public void Can_reset_empty() - { - WitnessCollector witnessCollector = new(new MemDb(), LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - witnessCollector.Reset(); - - witnessCollector.Collected.Should().HaveCount(0); - } - - [Test] - public void Can_reset_empty_many_times() - { - WitnessCollector witnessCollector = new(new MemDb(), LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - witnessCollector.Reset(); - witnessCollector.Reset(); - witnessCollector.Reset(); - - witnessCollector.Collected.Should().HaveCount(0); - } - - [Test] - public void Can_reset_non_empty_many_times() - { - WitnessCollector witnessCollector = new(new MemDb(), LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - witnessCollector.Add(TestItem.KeccakA); - witnessCollector.Reset(); - witnessCollector.Add(TestItem.KeccakA); - witnessCollector.Reset(); - witnessCollector.Add(TestItem.KeccakA); - witnessCollector.Reset(); - - witnessCollector.Collected.Should().HaveCount(0); - } - - [Test] - public void Can_persist_empty() - { - IKeyValueStore keyValueStore = new MemDb(); - - WitnessCollector witnessCollector = new(keyValueStore, LimboLogs.Instance); - witnessCollector.Persist(Keccak.Zero); - - var witness = keyValueStore[Keccak.Zero.Bytes]; - witness.Should().BeNull(); - } - - [Test] - public void Can_persist_more() - { - IKeyValueStore keyValueStore = new MemDb(); - WitnessCollector witnessCollector = new(keyValueStore, LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - witnessCollector.Add(TestItem.KeccakA); - witnessCollector.Add(TestItem.KeccakB); - witnessCollector.Persist(Keccak.Zero); - - var witness = keyValueStore[Keccak.Zero.Bytes]; - witness.Length.Should().Be(64); - } - - [Test] - public void Can_persist_and_load() - { - IKeyValueStore keyValueStore = new MemDb(); - WitnessCollector witnessCollector = new(keyValueStore, LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - witnessCollector.Add(TestItem.KeccakA); - witnessCollector.Add(TestItem.KeccakB); - witnessCollector.Persist(Keccak.Zero); - - var witness = witnessCollector.Load(Keccak.Zero); - witness.Should().HaveCount(2); - } - - [Test] - public void Can_load_missing() - { - IKeyValueStore keyValueStore = new MemDb(); - WitnessCollector witnessCollector = new(keyValueStore, LimboLogs.Instance); - var witness = witnessCollector.Load(Keccak.Zero); - witness.Should().BeNull(); - } - - [Test] - public void Can_read_beyond_cache() - { - IKeyValueStore keyValueStore = new MemDb(); - WitnessCollector witnessCollector = new(keyValueStore, LimboLogs.Instance); - - using IDisposable tracker = witnessCollector.TrackOnThisThread(); - for (int i = 0; i < 255; i++) - { - witnessCollector.Add(TestItem.Keccaks[i]); - witnessCollector.Persist(TestItem.Keccaks[i]); - } - - witnessCollector.Persist(TestItem.KeccakA); - witnessCollector.Persist(TestItem.KeccakB); - - witnessCollector.Load(TestItem.Keccaks[0]); - } - } -} diff --git a/src/Nethermind/Nethermind.State.Test/Witnesses/WitnessingStoreTests.cs b/src/Nethermind/Nethermind.State.Test/Witnesses/WitnessingStoreTests.cs deleted file mode 100644 index cb8c183e1f1..00000000000 --- a/src/Nethermind/Nethermind.State.Test/Witnesses/WitnessingStoreTests.cs +++ /dev/null @@ -1,130 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using FluentAssertions; -using Nethermind.Core.Extensions; -using Nethermind.Core.Test; -using Nethermind.Core.Test.Builders; -using Nethermind.Db; -using Nethermind.Logging; -using Nethermind.State; -using Nethermind.State.Witnesses; -using Nethermind.Trie; -using NUnit.Framework; - -namespace Nethermind.Store.Test.Witnesses -{ - [TestFixture, Parallelizable(ParallelScope.All)] - public class WitnessingStoreTests - { - [Test] - public void Collects_on_reads() - { - Context context = new(); - context.Wrapped.ReadFunc = (key) => Value1; - - using IDisposable tracker = context.WitnessCollector.TrackOnThisThread(); - _ = context.Database[Key1]; - - context.WitnessCollector.Collected.Should().HaveCount(1); - } - - [Test] - public void Does_not_collect_if_no_tracking() - { - Context context = new(); - context.Wrapped.ReadFunc = (key) => Value1; - _ = context.Database[Key1]; - context.WitnessCollector.Collected.Should().HaveCount(0); - } - - [Test] - public void Collects_on_reads_2() - { - Context context = new(); - context.Wrapped[Key1] = Value1; - context.Wrapped[Key2] = Value2; - context.Wrapped[Key3] = Value3; - - using IDisposable tracker = context.WitnessCollector.TrackOnThisThread(); - _ = context.Database[Key1]; - _ = context.Database[Key2]; - _ = context.Database[Key3]; - - context.WitnessCollector.Collected.Should().HaveCount(3); - - context.WitnessCollector.Reset(); - _ = context.Database[Key1]; - _ = context.Database[Key2]; - _ = context.Database[Key3]; - - context.WitnessCollector.Collected.Should().HaveCount(3); - } - - [Test] - public void Collects_on_reads_and_previously_populated() - { - Context context = new(); - - using IDisposable tracker = context.WitnessCollector.TrackOnThisThread(); - context.Database[Key1] = Value1; - context.Database[Key2] = Value1; - context.Database[Key3] = Value1; - context.WitnessCollector.Collected.Should().HaveCount(0); - _ = context.Database[Key1]; - _ = context.Database[Key2]; - _ = context.Database[Key3]; - - context.WitnessCollector.Collected.Should().HaveCount(3); - } - - [Test] - public void Does_not_collect_on_writes() - { - Context context = new(); - context.Database[Key1] = Value1; - context.WitnessCollector.Collected.Should().HaveCount(0); - } - - [TestCase(0)] - [TestCase(1)] - [TestCase(31)] - [TestCase(33)] - public void Only_works_with_32_bytes_keys(int keyLength) - { - Context context = new(); - context.Wrapped.ReadFunc = (key) => Bytes.Empty; - - Assert.Throws( - () => _ = context.Database[new byte[keyLength]]); - } - - private class Context - { - public TestMemDb Wrapped { get; } = new TestMemDb(); - - public WitnessingStore Database { get; } - - public IWitnessCollector WitnessCollector { get; } - - public Context() - { - WitnessCollector = new WitnessCollector(new MemDb(), LimboLogs.Instance); - Database = new WitnessingStore(Wrapped, WitnessCollector); - } - } - - private static readonly byte[] Key1 = TestItem.KeccakA.BytesToArray(); - - private static readonly byte[] Key2 = TestItem.KeccakB.BytesToArray(); - - private static readonly byte[] Key3 = TestItem.KeccakC.BytesToArray(); - - private static readonly byte[] Value1 = { 1 }; - - private static readonly byte[] Value2 = { 2 }; - - private static readonly byte[] Value3 = { 3 }; - } -} diff --git a/src/Nethermind/Nethermind.State/IPreBlockCaches.cs b/src/Nethermind/Nethermind.State/IPreBlockCaches.cs new file mode 100644 index 00000000000..0ab88f7acd9 --- /dev/null +++ b/src/Nethermind/Nethermind.State/IPreBlockCaches.cs @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.State; + +public interface IPreBlockCaches +{ + PreBlockCaches Caches { get; } +} diff --git a/src/Nethermind/Nethermind.State/IWitnessCollector.cs b/src/Nethermind/Nethermind.State/IWitnessCollector.cs deleted file mode 100644 index 91461853ced..00000000000 --- a/src/Nethermind/Nethermind.State/IWitnessCollector.cs +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using Nethermind.Core.Crypto; - -namespace Nethermind.State -{ - /// - /// Collects witnesses during block processing, allows to persist them - /// - public interface IWitnessCollector - { - IReadOnlyCollection Collected { get; } - - void Add(Hash256 hash); - - void Reset(); - - void Persist(Hash256 blockHash); - - IDisposable TrackOnThisThread(); - } -} diff --git a/src/Nethermind/Nethermind.State/IWitnessRepository.cs b/src/Nethermind/Nethermind.State/IWitnessRepository.cs deleted file mode 100644 index d7a2e166992..00000000000 --- a/src/Nethermind/Nethermind.State/IWitnessRepository.cs +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; - -namespace Nethermind.State -{ - /// - /// Allows to access persisted witnesses - /// - /// - /// Witnesses can be pruned (deleted) to decrease space that is used - /// - public interface IWitnessRepository - { - Hash256[]? Load(Hash256 blockHash); - - void Delete(Hash256 blockHash); - } -} diff --git a/src/Nethermind/Nethermind.State/IWorldState.cs b/src/Nethermind/Nethermind.State/IWorldState.cs index 7fa18dc0bc8..e90d806dc41 100644 --- a/src/Nethermind/Nethermind.State/IWorldState.cs +++ b/src/Nethermind/Nethermind.State/IWorldState.cs @@ -3,7 +3,9 @@ using System; using Nethermind.Core; +using Nethermind.Core.Collections; using Nethermind.Core.Crypto; +using Nethermind.Core.Eip2930; using Nethermind.Core.Specs; using Nethermind.Int256; using Nethermind.State.Tracing; @@ -53,7 +55,7 @@ public interface IWorldState : IJournal, IReadOnlyStateProvider /// /// Reset all storage /// - void Reset(); + void Reset(bool resizeCollections = false); /// /// Creates a restartable snapshot. @@ -67,7 +69,8 @@ public interface IWorldState : IJournal, IReadOnlyStateProvider Snapshot TakeSnapshot(bool newTransactionStart = false); Snapshot IJournal.TakeSnapshot() => TakeSnapshot(); - + void WarmUp(AccessList? accessList); + void WarmUp(Address address); /// /// Clear all storage at specified address /// @@ -93,21 +96,22 @@ public interface IWorldState : IJournal, IReadOnlyStateProvider void UpdateStorageRoot(Address address, Hash256 storageRoot); - void IncrementNonce(Address address); + void IncrementNonce(Address address, UInt256 delta); + + void DecrementNonce(Address address, UInt256 delta); + + void IncrementNonce(Address address) => IncrementNonce(address, UInt256.One); - void DecrementNonce(Address address); + void DecrementNonce(Address address) => DecrementNonce(address, UInt256.One); /* snapshots */ - void Commit(IReleaseSpec releaseSpec, bool isGenesis = false); + void Commit(IReleaseSpec releaseSpec, bool isGenesis = false, bool commitStorageRoots = true); - void Commit(IReleaseSpec releaseSpec, IWorldStateTracer? traver, bool isGenesis = false); + void Commit(IReleaseSpec releaseSpec, IWorldStateTracer? tracer, bool isGenesis = false, bool commitStorageRoots = true); void CommitTree(long blockNumber); + ArrayPoolList? GetAccountChanges(); - /// - /// For witness - /// - /// - void TouchCode(in ValueHash256 codeHash); + bool ClearCache() => false; } diff --git a/src/Nethermind/Nethermind.State/IWorldStateManager.cs b/src/Nethermind/Nethermind.State/IWorldStateManager.cs index 26a01d09f67..ef853ddbf51 100644 --- a/src/Nethermind/Nethermind.State/IWorldStateManager.cs +++ b/src/Nethermind/Nethermind.State/IWorldStateManager.cs @@ -10,12 +10,14 @@ public interface IWorldStateManager { IWorldState GlobalWorldState { get; } IStateReader GlobalStateReader { get; } + IReadOnlyTrieStore TrieStore { get; } /// /// Used by read only tasks that need to execute blocks. /// + /// Specify a world state to warm up by the returned world state. /// - IWorldState CreateResettableWorldState(); + IWorldState CreateResettableWorldState(IWorldState? forWarmup = null); event EventHandler? ReorgBoundaryReached; } diff --git a/src/Nethermind/Nethermind.State/NullWitnessCollector.cs b/src/Nethermind/Nethermind.State/NullWitnessCollector.cs deleted file mode 100644 index 9239c877a00..00000000000 --- a/src/Nethermind/Nethermind.State/NullWitnessCollector.cs +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using Nethermind.Core.Crypto; - -namespace Nethermind.State -{ - public class NullWitnessCollector : IWitnessCollector, IWitnessRepository - { - private NullWitnessCollector() { } - - public static NullWitnessCollector Instance { get; } = new(); - - public IReadOnlyCollection Collected => Array.Empty(); - - public void Add(Hash256 hash) - { - throw new InvalidOperationException( - $"{nameof(NullWitnessCollector)} is not expected to receive {nameof(Add)} calls."); - } - - public void Reset() { } - - public void Persist(Hash256 blockHash) { } - - class EmptyDisposable : IDisposable - { - public void Dispose() - { - } - } - - public IDisposable TrackOnThisThread() { return new EmptyDisposable(); } - - public Hash256[]? Load(Hash256 blockHash) - { - throw new InvalidOperationException( - $"{nameof(NullWitnessCollector)} is not expected to receive {nameof(Load)} calls."); - } - - public void Delete(Hash256 blockHash) - { - throw new InvalidOperationException( - $"{nameof(NullWitnessCollector)} is not expected to receive {nameof(Delete)} calls."); - } - } -} diff --git a/src/Nethermind/Nethermind.State/OverlayWorldStateManager.cs b/src/Nethermind/Nethermind.State/OverlayWorldStateManager.cs new file mode 100644 index 00000000000..a4dda8fdd65 --- /dev/null +++ b/src/Nethermind/Nethermind.State/OverlayWorldStateManager.cs @@ -0,0 +1,50 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Db; +using Nethermind.Logging; +using Nethermind.Trie; +using Nethermind.Trie.Pruning; + +namespace Nethermind.State; + +public class OverlayWorldStateManager( + IReadOnlyDbProvider dbProvider, + OverlayTrieStore overlayTrieStore, + ILogManager? logManager) + : IWorldStateManager +{ + private readonly IDb _codeDb = dbProvider.GetDb(DbNames.Code); + + private readonly StateReader _reader = new(overlayTrieStore, dbProvider.GetDb(DbNames.Code), logManager); + + private readonly WorldState _state = new(overlayTrieStore, dbProvider.GetDb(DbNames.Code), logManager); + + public IWorldState GlobalWorldState => _state; + + public IStateReader GlobalStateReader => _reader; + + public IReadOnlyTrieStore TrieStore { get; } = overlayTrieStore.AsReadOnly(); + + public IWorldState CreateResettableWorldState(IWorldState? forWarmup = null) + { + PreBlockCaches? preBlockCaches = (forWarmup as IPreBlockCaches)?.Caches; + return preBlockCaches is not null + ? new WorldState( + new PreCachedTrieStore(overlayTrieStore, preBlockCaches.RlpCache), + _codeDb, + logManager, + preBlockCaches) + : new WorldState( + overlayTrieStore, + _codeDb, + logManager); + } + + public event EventHandler? ReorgBoundaryReached + { + add => overlayTrieStore.ReorgBoundaryReached += value; + remove => overlayTrieStore.ReorgBoundaryReached -= value; + } +} diff --git a/src/Nethermind/Nethermind.State/PartialStorageProviderBase.cs b/src/Nethermind/Nethermind.State/PartialStorageProviderBase.cs index e3e4bc676c8..ec0e284d260 100644 --- a/src/Nethermind/Nethermind.State/PartialStorageProviderBase.cs +++ b/src/Nethermind/Nethermind.State/PartialStorageProviderBase.cs @@ -145,9 +145,9 @@ public void Restore(int snapshot) /// /// Commit persistent storage /// - public void Commit() + public void Commit(bool commitStorageRoots = true) { - Commit(NullStateTracer.Instance); + Commit(NullStateTracer.Instance, commitStorageRoots); } protected readonly struct ChangeTrace @@ -172,7 +172,7 @@ public ChangeTrace(byte[]? after) /// Commit persistent storage /// /// State tracer - public void Commit(IStorageTracer tracer) + public void Commit(IStorageTracer tracer, bool commitStorageRoots = true) { if (_currentPosition == Snapshot.EmptyPosition) { @@ -182,6 +182,16 @@ public void Commit(IStorageTracer tracer) { CommitCore(tracer); } + + if (commitStorageRoots) + { + CommitStorageRoots(); + } + } + + protected virtual void CommitStorageRoots() + { + // Commit storage roots } /// @@ -199,7 +209,7 @@ protected virtual void CommitCore(IStorageTracer tracer) /// /// Reset the storage state /// - public virtual void Reset() + public virtual void Reset(bool resizeCollections = true) { if (_logger.IsTrace) _logger.Trace("Resetting storage"); diff --git a/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs b/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs index 820655d53b8..a43b892466b 100644 --- a/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs +++ b/src/Nethermind/Nethermind.State/PersistentStorageProvider.cs @@ -2,29 +2,35 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Concurrent; using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Threading.Tasks; using Nethermind.Core; using Nethermind.Core.Collections; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Resettables; +using Nethermind.Int256; using Nethermind.Logging; using Nethermind.State.Tracing; using Nethermind.Trie.Pruning; namespace Nethermind.State { + using Nethermind.Core.Cpu; /// /// Manages persistent storage allowing for snapshotting and restoring /// Persists data to ITrieStore /// - internal class PersistentStorageProvider : PartialStorageProviderBase + internal sealed class PersistentStorageProvider : PartialStorageProviderBase { private readonly ITrieStore _trieStore; private readonly StateProvider _stateProvider; private readonly ILogManager? _logManager; internal readonly IStorageTreeFactory _storageTreeFactory; private readonly ResettableDictionary _storages = new(); + private readonly HashSet _toUpdateRoots = new(); /// /// EIP-1283 @@ -32,14 +38,31 @@ internal class PersistentStorageProvider : PartialStorageProviderBase private readonly ResettableDictionary _originalValues = new(); private readonly ResettableHashSet _committedThisRound = new(); + private readonly Dictionary> _blockCache = new(4_096); + private readonly ConcurrentDictionary? _preBlockCache; + private readonly Func _loadFromTree; - public PersistentStorageProvider(ITrieStore? trieStore, StateProvider? stateProvider, ILogManager? logManager, IStorageTreeFactory? storageTreeFactory = null) - : base(logManager) + /// + /// Manages persistent storage allowing for snapshotting and restoring + /// Persists data to ITrieStore + /// + public PersistentStorageProvider(ITrieStore? trieStore, + StateProvider? stateProvider, + ILogManager? logManager, + IStorageTreeFactory? storageTreeFactory = null, + ConcurrentDictionary? preBlockCache = null) : base(logManager) { _trieStore = trieStore ?? throw new ArgumentNullException(nameof(trieStore)); _stateProvider = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider)); _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager)); _storageTreeFactory = storageTreeFactory ?? new StorageTreeFactory(); + _preBlockCache = preBlockCache; + _loadFromTree = storageCell => + { + StorageTree tree = GetOrCreateStorage(storageCell.Address); + Db.Metrics.IncrementStorageTreeReads(); + return !storageCell.IsHash ? tree.Get(storageCell.Index) : tree.GetArray(storageCell.Hash.Bytes); + }; } public Hash256 StateRoot { get; set; } = null!; @@ -47,12 +70,14 @@ public PersistentStorageProvider(ITrieStore? trieStore, StateProvider? stateProv /// /// Reset the storage state /// - public override void Reset() + public override void Reset(bool resizeCollections = true) { base.Reset(); - _storages.Reset(); + _blockCache.Clear(); + _storages.Reset(resizeCollections); _originalValues.Clear(); _committedThisRound.Clear(); + _toUpdateRoots.Clear(); } /// @@ -179,16 +204,17 @@ protected override void CommitCore(IStorageTracer tracer) } } - // TODO: it seems that we are unnecessarily recalculating root hashes all the time in storage? foreach (Address address in toUpdateRoots) { // since the accounts could be empty accounts that are removing (EIP-158) if (_stateProvider.AccountExists(address)) { - Hash256 root = RecalculateRootHash(address); - - // _logger.Warn($"Recalculating storage root {address}->{root} ({toUpdateRoots.Count})"); - _stateProvider.UpdateStorageRoot(address, root); + _toUpdateRoots.Add(address); + } + else + { + _toUpdateRoots.Remove(address); + _storages.Remove(address); } } @@ -202,6 +228,68 @@ protected override void CommitCore(IStorageTracer tracer) } } + protected override void CommitStorageRoots() + { + if (_toUpdateRoots.Count == 0) + { + return; + } + + // Is overhead of parallel foreach worth it? + if (_toUpdateRoots.Count <= 4) + { + UpdateRootHashesSingleThread(); + } + else + { + UpdateRootHashesMultiThread(); + } + + void UpdateRootHashesSingleThread() + { + foreach (KeyValuePair kvp in _storages) + { + if (!_toUpdateRoots.Contains(kvp.Key)) + { + // Wasn't updated don't recalculate + continue; + } + + StorageTree storageTree = kvp.Value; + storageTree.UpdateRootHash(canBeParallel: true); + _stateProvider.UpdateStorageRoot(address: kvp.Key, storageTree.RootHash); + } + } + + void UpdateRootHashesMultiThread() + { + // We can recalculate the roots in parallel as they are all independent tries + Parallel.ForEach(_storages, RuntimeInformation.ParallelOptionsLogicalCores, kvp => + { + if (!_toUpdateRoots.Contains(kvp.Key)) + { + // Wasn't updated don't recalculate + return; + } + StorageTree storageTree = kvp.Value; + storageTree.UpdateRootHash(canBeParallel: false); + }); + + // Update the storage roots in the main thread non in parallel + foreach (KeyValuePair kvp in _storages) + { + if (!_toUpdateRoots.Contains(kvp.Key)) + { + continue; + } + + // Update the storage root for the Account + _stateProvider.UpdateStorageRoot(address: kvp.Key, kvp.Value.RootHash); + } + + } + } + private void SaveToTree(HashSet
toUpdateRoots, Change change) { if (_originalValues.TryGetValue(change.StorageCell, out byte[] initialValue) && @@ -215,6 +303,14 @@ private void SaveToTree(HashSet
toUpdateRoots, Change change) Db.Metrics.StorageTreeWrites++; toUpdateRoots.Add(change.StorageCell.Address); tree.Set(change.StorageCell.Index, change.Value); + + ref Dictionary? dict = ref CollectionsMarshal.GetValueRefOrAddDefault(_blockCache, change.StorageCell.Address, out bool exists); + if (!exists) + { + dict = new Dictionary(); + } + + dict[change.StorageCell.Index] = change.Value; } /// @@ -223,16 +319,19 @@ private void SaveToTree(HashSet
toUpdateRoots, Change change) /// Current block number public void CommitTrees(long blockNumber) { - // _logger.Warn($"Storage block commit {blockNumber}"); foreach (KeyValuePair storage in _storages) { + if (!_toUpdateRoots.Contains(storage.Key)) + { + continue; + } storage.Value.Commit(blockNumber); } - // TODO: maybe I could update storage roots only now? - + _toUpdateRoots.Clear(); // only needed here as there is no control over cached storage size otherwise _storages.Reset(); + _preBlockCache?.Clear(); } private StorageTree GetOrCreateStorage(Address address) @@ -241,26 +340,53 @@ private StorageTree GetOrCreateStorage(Address address) if (!exists) { value = _storageTreeFactory.Create(address, _trieStore.GetTrieStore(address.ToAccountPath), _stateProvider.GetStorageRoot(address), StateRoot, _logManager); - return value; } return value; } + public void WarmUp(in StorageCell storageCell, bool isEmpty) + { + if (isEmpty) + { + _preBlockCache[storageCell] = Array.Empty(); + } + else + { + LoadFromTree(in storageCell); + } + } + private ReadOnlySpan LoadFromTree(in StorageCell storageCell) { - StorageTree tree = GetOrCreateStorage(storageCell.Address); + ref Dictionary? dict = ref CollectionsMarshal.GetValueRefOrAddDefault(_blockCache, storageCell.Address, out bool exists); + if (!exists) + { + dict = new Dictionary(); + } - Db.Metrics.StorageTreeReads++; + ref byte[]? value = ref CollectionsMarshal.GetValueRefOrAddDefault(dict, storageCell.Index, out exists); + if (!exists) + { + long priorReads = Db.Metrics.ThreadLocalStorageTreeReads; - if (!storageCell.IsHash) + value = _preBlockCache is not null + ? _preBlockCache.GetOrAdd(storageCell, _loadFromTree) + : _loadFromTree(storageCell); + + if (Db.Metrics.ThreadLocalStorageTreeReads == priorReads) + { + // Read from Concurrent Cache + Db.Metrics.IncrementStorageTreeCache(); + } + } + else { - byte[] value = tree.Get(storageCell.Index); - PushToRegistryOnly(storageCell, value); - return value; + Db.Metrics.IncrementStorageTreeCache(); } - return tree.Get(storageCell.Hash.Bytes); + if (!storageCell.IsHash) PushToRegistryOnly(storageCell, value); + return value; } private void PushToRegistryOnly(in StorageCell cell, byte[] value) @@ -301,10 +427,14 @@ public override void ClearStorage(Address address) { base.ClearStorage(address); + // Bit heavy-handed, but we need to clear all the cache for that address + _blockCache.Remove(address); + // here it is important to make sure that we will not reuse the same tree when the contract is revived // by means of CREATE 2 - notice that the cached trie may carry information about items that were not // touched in this block, hence were not zeroed above // TODO: how does it work with pruning? + _toUpdateRoots.Remove(address); _storages[address] = new StorageTree(_trieStore.GetTrieStore(address.ToAccountPath), Keccak.EmptyTreeHash, _logManager); } diff --git a/src/Nethermind/Nethermind.State/PreBlockCaches.cs b/src/Nethermind/Nethermind.State/PreBlockCaches.cs new file mode 100644 index 00000000000..bffbd550740 --- /dev/null +++ b/src/Nethermind/Nethermind.State/PreBlockCaches.cs @@ -0,0 +1,29 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Concurrent; +using Nethermind.Core; +using Nethermind.Trie; + +namespace Nethermind.State; + +public class PreBlockCaches +{ + public ConcurrentDictionary StorageCache { get; } = new(Environment.ProcessorCount * 2, 4096 * 4); + public ConcurrentDictionary StateCache { get; } = new(Environment.ProcessorCount * 2, 4096 * 4); + public ConcurrentDictionary RlpCache { get; } = new(Environment.ProcessorCount * 2, 4096 * 4); + + public bool Clear() + { + bool isDirty = StorageCache.Count > 0 || StateCache.Count > 0 || RlpCache.Count > 0; + if (isDirty) + { + StorageCache.Clear(); + StateCache.Clear(); + RlpCache.Clear(); + } + + return isDirty; + } +} diff --git a/src/Nethermind/Nethermind.State/Proofs/ReceiptTrie.cs b/src/Nethermind/Nethermind.State/Proofs/ReceiptTrie.cs index cad6d77c749..e29c2a4f00e 100644 --- a/src/Nethermind/Nethermind.State/Proofs/ReceiptTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/ReceiptTrie.cs @@ -20,13 +20,13 @@ public class ReceiptTrie : PatriciaTrie private readonly IRlpStreamDecoder _decoder; /// /// The transaction receipts to build the trie of. - public ReceiptTrie(IReceiptSpec spec, TReceipt[] receipts, IRlpStreamDecoder decoder, bool canBuildProof = false, ICappedArrayPool? bufferPool = null) + public ReceiptTrie(IReceiptSpec spec, TReceipt[] receipts, IRlpStreamDecoder trieDecoder, bool canBuildProof = false, ICappedArrayPool? bufferPool = null) : base(null, canBuildProof, bufferPool: bufferPool) { ArgumentNullException.ThrowIfNull(spec); ArgumentNullException.ThrowIfNull(receipts); - ArgumentNullException.ThrowIfNull(decoder); - _decoder = decoder; + ArgumentNullException.ThrowIfNull(trieDecoder); + _decoder = trieDecoder; if (receipts.Length > 0) { @@ -37,8 +37,7 @@ public ReceiptTrie(IReceiptSpec spec, TReceipt[] receipts, IRlpStreamDecoder public class ReadOnlyWorldStateManager : IWorldStateManager { - private readonly IReadOnlyDbProvider _readOnlyDbProvider; - private readonly IReadOnlyTrieStore? _readOnlyTrieStore; + private readonly IReadOnlyTrieStore _readOnlyTrieStore; private readonly ILogManager _logManager; - private readonly IDbProvider _dbProvider; private readonly ReadOnlyDb _codeDb; public ReadOnlyWorldStateManager( IDbProvider dbProvider, - IReadOnlyTrieStore? readOnlyTrieStore, + IReadOnlyTrieStore readOnlyTrieStore, ILogManager logManager ) { _readOnlyTrieStore = readOnlyTrieStore; - _dbProvider = dbProvider; _logManager = logManager; - _readOnlyDbProvider = _dbProvider.AsReadOnly(false); - _codeDb = _readOnlyDbProvider.GetDb(DbNames.Code).AsReadOnly(true); + IReadOnlyDbProvider readOnlyDbProvider = dbProvider.AsReadOnly(false); + _codeDb = readOnlyDbProvider.GetDb(DbNames.Code).AsReadOnly(true); GlobalStateReader = new StateReader(_readOnlyTrieStore, _codeDb, _logManager); } @@ -39,9 +36,21 @@ ILogManager logManager public IStateReader GlobalStateReader { get; } - public IWorldState CreateResettableWorldState() + public IReadOnlyTrieStore TrieStore => _readOnlyTrieStore; + + public IWorldState CreateResettableWorldState(IWorldState? forWarmup = null) { - return new WorldState(_readOnlyTrieStore, _codeDb, _logManager); + PreBlockCaches? preBlockCaches = (forWarmup as IPreBlockCaches)?.Caches; + return preBlockCaches is not null + ? new WorldState( + new PreCachedTrieStore(_readOnlyTrieStore, preBlockCaches.RlpCache), + _codeDb, + _logManager, + preBlockCaches) + : new WorldState( + _readOnlyTrieStore, + _codeDb, + _logManager); } public virtual event EventHandler? ReorgBoundaryReached diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index a24a647191a..2fc99f3ce0e 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Runtime.InteropServices; using Nethermind.Core; @@ -10,11 +11,9 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Resettables; using Nethermind.Core.Specs; -using Nethermind.Db; using Nethermind.Int256; using Nethermind.Logging; using Nethermind.State.Tracing; -using Nethermind.State.Witnesses; using Nethermind.Trie; using Nethermind.Trie.Pruning; using Metrics = Nethermind.Db.Metrics; @@ -24,14 +23,16 @@ namespace Nethermind.State internal class StateProvider { private const int StartCapacity = Resettable.StartCapacity; - private readonly ResettableDictionary> _intraBlockCache = new(); + private readonly ResettableDictionary> _intraTxCache = new(); private readonly ResettableHashSet _committedThisRound = new(); private readonly HashSet _nullAccountReads = new(); // Only guarding against hot duplicates so filter doesn't need to be too big // Note: // False negatives are fine as they will just result in a overwrite set // False positives would be problematic as the code _must_ be persisted - private readonly LruKeyCache _codeInsertFilter = new(2048, "Code Insert Filter"); + private readonly LruKeyCacheNonConcurrent _codeInsertFilter = new(1_024, "Code Insert Filter"); + private readonly Dictionary _blockCache = new(4_096); + private readonly ConcurrentDictionary? _preBlockCache; private readonly List _keptInCache = new(); private readonly ILogger _logger; @@ -40,13 +41,8 @@ internal class StateProvider private int _capacity = StartCapacity; private Change?[] _changes = new Change?[StartCapacity]; private int _currentPosition = Resettable.EmptyPosition; - - public StateProvider(IScopedTrieStore? trieStore, IKeyValueStore? codeDb, ILogManager? logManager, StateTree? stateTree = null) - { - _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - _codeDb = codeDb ?? throw new ArgumentNullException(nameof(codeDb)); - _tree = stateTree ?? new StateTree(trieStore, logManager); - } + internal readonly StateTree _tree; + private readonly Func _getStateFromTrie; public void Accept(ITreeVisitor? visitor, Hash256? stateRoot, VisitingOptions? visitingOptions = null) { @@ -78,44 +74,24 @@ public Hash256 StateRoot set => _tree.RootHash = value; } - internal readonly StateTree _tree; - public bool IsContract(Address address) { Account? account = GetThroughCache(address); - if (account is null) - { - return false; - } - - return account.IsContract; + return account is not null && account.IsContract; } - public bool AccountExists(Address address) - { - if (_intraBlockCache.TryGetValue(address, out Stack value)) - { - return _changes[value.Peek()]!.ChangeType != ChangeType.Delete; - } - - return GetAndAddToCache(address) is not null; - } + public bool AccountExists(Address address) => + _intraTxCache.TryGetValue(address, out Stack value) + ? _changes[value.Peek()]!.ChangeType != ChangeType.Delete + : GetAndAddToCache(address) is not null; public bool IsEmptyAccount(Address address) { Account? account = GetThroughCache(address); - if (account is null) - { - throw new InvalidOperationException($"Account {address} is null when checking if empty"); - } - - return account.IsEmpty; + return account?.IsEmpty ?? throw new InvalidOperationException($"Account {address} is null when checking if empty"); } - public Account GetAccount(Address address) - { - return GetThroughCache(address) ?? Account.TotallyEmpty; - } + public Account GetAccount(Address address) => GetThroughCache(address) ?? Account.TotallyEmpty; public bool IsDeadAccount(Address address) { @@ -132,12 +108,7 @@ public UInt256 GetNonce(Address address) public Hash256 GetStorageRoot(Address address) { Account? account = GetThroughCache(address); - if (account is null) - { - throw new InvalidOperationException($"Account {address} is null when accessing storage root"); - } - - return account.StorageRoot; + return account is null ? throw new InvalidOperationException($"Account {address} is null when accessing storage root") : account.StorageRoot; } public UInt256 GetBalance(Address address) @@ -284,7 +255,7 @@ public void UpdateStorageRoot(Address address, Hash256 storageRoot) } } - public void IncrementNonce(Address address) + public void IncrementNonce(Address address, UInt256 delta) { _needsStateRootUpdate = true; Account? account = GetThroughCache(address); @@ -293,12 +264,12 @@ public void IncrementNonce(Address address) throw new InvalidOperationException($"Account {address} is null when incrementing nonce"); } - Account changedAccount = account.WithChangedNonce(account.Nonce + 1); + Account changedAccount = account.WithChangedNonce(account.Nonce + delta); if (_logger.IsTrace) _logger.Trace($" Update {address} N {account.Nonce} -> {changedAccount.Nonce}"); PushUpdate(address, changedAccount); } - public void DecrementNonce(Address address) + public void DecrementNonce(Address address, UInt256 delta) { _needsStateRootUpdate = true; Account? account = GetThroughCache(address); @@ -307,19 +278,11 @@ public void DecrementNonce(Address address) throw new InvalidOperationException($"Account {address} is null when decrementing nonce."); } - Account changedAccount = account.WithChangedNonce(account.Nonce - 1); + Account changedAccount = account.WithChangedNonce(account.Nonce - delta); if (_logger.IsTrace) _logger.Trace($" Update {address} N {account.Nonce} -> {changedAccount.Nonce}"); PushUpdate(address, changedAccount); } - public void TouchCode(in ValueHash256 codeHash) - { - if (_codeDb is WitnessingStore witnessingStore) - { - witnessingStore.Touch(codeHash.Bytes); - } - } - public Hash256 GetCodeHash(Address address) { Account? account = GetThroughCache(address); @@ -377,7 +340,7 @@ public void Restore(int snapshot) for (int i = 0; i < _currentPosition - snapshot; i++) { Change change = _changes[_currentPosition - i]; - Stack stack = _intraBlockCache[change!.Address]; + Stack stack = _intraTxCache[change!.Address]; if (stack.Count == 1) { if (change.ChangeType == ChangeType.JustCache) @@ -403,7 +366,7 @@ public void Restore(int snapshot) if (stack.Count == 0) { - _intraBlockCache.Remove(change.Address); + _intraTxCache.Remove(change.Address); } } @@ -412,7 +375,7 @@ public void Restore(int snapshot) { _currentPosition++; _changes[_currentPosition] = kept; - _intraBlockCache[kept.Address].Push(_currentPosition); + _intraTxCache[kept.Address].Push(_currentPosition); } _keptInCache.Clear(); @@ -428,8 +391,10 @@ public void CreateAccount(Address address, in UInt256 balance, in UInt256 nonce public void CreateAccountIfNotExists(Address address, in UInt256 balance, in UInt256 nonce = default) { - if (AccountExists(address)) return; - CreateAccount(address, balance, nonce); + if (!AccountExists(address)) + { + CreateAccount(address, balance, nonce); + } } public void AddToBalanceAndCreateIfNotExists(Address address, in UInt256 balance, IReleaseSpec spec) @@ -518,7 +483,7 @@ public void Commit(IReleaseSpec releaseSpec, IWorldStateTracer stateTracer, bool continue; } - Stack stack = _intraBlockCache[change.Address]; + Stack stack = _intraTxCache[change.Address]; int forAssertion = stack.Pop(); if (forAssertion != _currentPosition - i) { @@ -613,7 +578,7 @@ public void Commit(IReleaseSpec releaseSpec, IWorldStateTracer stateTracer, bool Resettable.Reset(ref _changes, ref _capacity, ref _currentPosition, StartCapacity); _committedThisRound.Reset(); _nullAccountReads.Clear(); - _intraBlockCache.Reset(); + _intraTxCache.Reset(); if (isTracing) { @@ -679,15 +644,54 @@ private void ReportChanges(IStateTracer stateTracer, Dictionary? preBlockCache = null) + { + _preBlockCache = preBlockCache; + _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); + _codeDb = codeDb ?? throw new ArgumentNullException(nameof(codeDb)); + _tree = stateTree ?? new StateTree(trieStore, logManager); + _getStateFromTrie = address => + { + Metrics.IncrementStateTreeReads(); + return _tree.Get(address); + }; + } + + public bool WarmUp(Address address) + { + return GetState(address) is not null; + } + private Account? GetState(Address address) { - Metrics.StateTreeReads++; - Account? account = _tree.Get(address); + AddressAsKey addressAsKey = address; + ref Account? account = ref CollectionsMarshal.GetValueRefOrAddDefault(_blockCache, addressAsKey, out bool exists); + if (!exists) + { + long priorReads = Metrics.ThreadLocalStateTreeReads; + account = _preBlockCache is not null + ? _preBlockCache.GetOrAdd(addressAsKey, _getStateFromTrie) + : _getStateFromTrie(addressAsKey); + + if (Metrics.ThreadLocalStateTreeReads == priorReads) + { + Metrics.IncrementStateTreeCacheHits(); + } + } + else + { + Metrics.IncrementStateTreeCacheHits(); + } return account; } private void SetState(Address address, Account? account) { + _blockCache[address] = account; _needsStateRootUpdate = true; Metrics.StateTreeWrites++; _tree.Set(address, account); @@ -713,7 +717,7 @@ private void SetState(Address address, Account? account) private Account? GetThroughCache(Address address) { - if (_intraBlockCache.TryGetValue(address, out Stack value)) + if (_intraTxCache.TryGetValue(address, out Stack value)) { return _changes[value.Peek()]!.Account; } @@ -772,7 +776,7 @@ private void IncrementChangePosition() private Stack SetupCache(Address address) { - ref Stack? value = ref _intraBlockCache.GetValueRefOrAddDefault(address, out bool exists); + ref Stack? value = ref _intraTxCache.GetValueRefOrAddDefault(address, out bool exists); if (!exists) { value = new Stack(); @@ -804,11 +808,30 @@ public Change(ChangeType type, Address address, Account? account) public Account? Account { get; } } - public void Reset() + public ArrayPoolList? ChangedAddresses() + { + int count = _blockCache.Count; + if (count == 0) + { + return null; + } + else + { + ArrayPoolList addresses = new(count); + foreach (AddressAsKey address in _blockCache.Keys) + { + addresses.Add(address); + } + return addresses; + } + } + + public void Reset(bool resizeCollections = true) { if (_logger.IsTrace) _logger.Trace("Clearing state provider caches"); - _intraBlockCache.Reset(); - _committedThisRound.Reset(); + _blockCache.Clear(); + _intraTxCache.Reset(resizeCollections); + _committedThisRound.Reset(resizeCollections); _nullAccountReads.Clear(); _currentPosition = Resettable.EmptyPosition; Array.Clear(_changes, 0, _changes.Length); @@ -823,6 +846,7 @@ public void CommitTree(long blockNumber) } _tree.Commit(blockNumber); + _preBlockCache?.Clear(); } public static void CommitBranch() diff --git a/src/Nethermind/Nethermind.State/StateReader.cs b/src/Nethermind/Nethermind.State/StateReader.cs index a978013ba34..77558d564c2 100644 --- a/src/Nethermind/Nethermind.State/StateReader.cs +++ b/src/Nethermind/Nethermind.State/StateReader.cs @@ -34,7 +34,7 @@ public ReadOnlySpan GetStorage(Hash256 stateRoot, Address address, in UInt return Bytes.ZeroByte.Span; } - Metrics.StorageTreeReads++; + Metrics.StorageReaderReads++; StorageTree storage = new StorageTree(_trieStore.GetTrieStore(address.ToAccountPath), Keccak.EmptyTreeHash, _logManager); return storage.Get(index, new Hash256(storageRoot)); @@ -68,7 +68,7 @@ private bool TryGetState(Hash256 stateRoot, Address address, out AccountStruct a return false; } - Metrics.StateTreeReads++; + Metrics.IncrementStateReaderReads(); return _state.TryGetStruct(address, out account, stateRoot); } } diff --git a/src/Nethermind/Nethermind.State/StorageTree.cs b/src/Nethermind/Nethermind.State/StorageTree.cs index 6b9a520e5c4..472441c9e3b 100644 --- a/src/Nethermind/Nethermind.State/StorageTree.cs +++ b/src/Nethermind/Nethermind.State/StorageTree.cs @@ -19,7 +19,7 @@ public class StorageTree : PatriciaTree { private const int LookupSize = 1024; private static readonly FrozenDictionary Lookup = CreateLookup(); - private static readonly byte[] _emptyBytes = [0]; + public static readonly byte[] EmptyBytes = [0]; private static FrozenDictionary CreateLookup() { @@ -59,28 +59,29 @@ public byte[] Get(in UInt256 index, Hash256? storageRoot = null) { if (index < LookupSize) { - return Get(Lookup[index], storageRoot).ToArray(); + return GetArray(Lookup[index], storageRoot); } Span key = stackalloc byte[32]; ComputeKey(index, ref key); - return Get(key, storageRoot).ToArray(); - + return GetArray(key, storageRoot); } - public override ReadOnlySpan Get(ReadOnlySpan rawKey, Hash256? rootHash = null) + public byte[] GetArray(ReadOnlySpan rawKey, Hash256? rootHash = null) { ReadOnlySpan value = base.Get(rawKey, rootHash); if (value.IsEmpty) { - return _emptyBytes; + return EmptyBytes; } Rlp.ValueDecoderContext rlp = value.AsRlpValueContext(); return rlp.DecodeByteArray(); } + public override ReadOnlySpan Get(ReadOnlySpan rawKey, Hash256? rootHash = null) => GetArray(rawKey, rootHash); + [SkipLocalsInit] public void Set(in UInt256 index, byte[] value) { diff --git a/src/Nethermind/Nethermind.State/TransientStorageProvider.cs b/src/Nethermind/Nethermind.State/TransientStorageProvider.cs index 3e2177fdf33..4c0ec3efaef 100644 --- a/src/Nethermind/Nethermind.State/TransientStorageProvider.cs +++ b/src/Nethermind/Nethermind.State/TransientStorageProvider.cs @@ -11,7 +11,7 @@ namespace Nethermind.State /// EIP-1153 provides a transient store for contracts that doesn't persist /// storage across calls. Reverts will rollback any transient state changes. ///
- internal class TransientStorageProvider : PartialStorageProviderBase + internal sealed class TransientStorageProvider : PartialStorageProviderBase { public TransientStorageProvider(ILogManager? logManager) : base(logManager) { } diff --git a/src/Nethermind/Nethermind.State/Witnesses/WitnessCollector.cs b/src/Nethermind/Nethermind.State/Witnesses/WitnessCollector.cs deleted file mode 100644 index 86f0ceeb7a9..00000000000 --- a/src/Nethermind/Nethermind.State/Witnesses/WitnessCollector.cs +++ /dev/null @@ -1,130 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using System.Linq; -using Nethermind.Core; -using Nethermind.Core.Caching; -using Nethermind.Core.Crypto; -using Nethermind.Core.Resettables; -using Nethermind.Logging; - -namespace Nethermind.State.Witnesses -{ - /// - /// - /// - public class WitnessCollector : IWitnessCollector, IWitnessRepository - { - [ThreadStatic] - private static bool _collectWitness; - - private readonly LruCache _witnessCache = new(256, "Witnesses"); - - public IReadOnlyCollection Collected => _collected; - - public WitnessCollector(IKeyValueStore? keyValueStore, ILogManager? logManager) - { - _keyValueStore = keyValueStore ?? throw new ArgumentNullException(nameof(keyValueStore)); - _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - } - - public void Add(Hash256 hash) - { - if (!_collectWitness) - { - return; - } - _collected.Add(hash); - } - - public void Reset() - { - _collected.Reset(); - } - - public void Persist(Hash256 blockHash) - { - if (_logger.IsDebug) _logger.Debug($"Persisting {blockHash} witness ({_collected.Count})"); - - - if (_collected.Count > 0) - { - Hash256[] collected = _collected.ToArray(); - byte[] witness = new byte[collected.Length * Hash256.Size]; - Span witnessSpan = witness; - - int i = 0; - for (var index = 0; index < collected.Length; index++) - { - Hash256 keccak = collected[index]; - keccak.Bytes.CopyTo(witnessSpan.Slice(i * Hash256.Size, Hash256.Size)); - i++; - } - - _keyValueStore[blockHash.Bytes] = witness; - _witnessCache.Set(blockHash, collected); - } - else - { - _witnessCache.Set(blockHash, Array.Empty()); - } - } - - class WitnessCollectorTrackingScope : IDisposable - { - public WitnessCollectorTrackingScope() => _collectWitness = true; - public void Dispose() => _collectWitness = false; - } - - public IDisposable TrackOnThisThread() => new WitnessCollectorTrackingScope(); - - public Hash256[]? Load(Hash256 blockHash) - { - if (_witnessCache.TryGet(blockHash, out Hash256[]? witness)) - { - if (_logger.IsTrace) _logger.Trace($"Loading cached witness for {blockHash} ({witness!.Length})"); - } - else // not cached - { - byte[]? witnessData = _keyValueStore[blockHash.Bytes]; - if (witnessData is null) - { - if (_logger.IsTrace) _logger.Trace($"Missing witness for {blockHash}"); - witness = null; - } - else // missing from the DB - { - Span witnessDataSpan = witnessData.AsSpan(); - int itemCount = witnessData.Length / Hash256.Size; - if (_logger.IsTrace) _logger.Trace($"Loading non-cached witness for {blockHash} ({itemCount})"); - - Hash256[] writableWitness = new Hash256[itemCount]; - for (int i = 0; i < itemCount; i++) - { - byte[] keccakBytes = witnessDataSpan.Slice(i * Hash256.Size, Hash256.Size).ToArray(); - writableWitness[i] = new Hash256(keccakBytes); - } - - _witnessCache.Set(blockHash, writableWitness); - witness = writableWitness; - } - } - - return witness; - } - - public void Delete(Hash256 blockHash) - { - _witnessCache.Delete(blockHash); - _keyValueStore[blockHash.Bytes] = null; - } - - private readonly ResettableHashSet _collected = new(); - - private readonly IKeyValueStore _keyValueStore; - - private readonly ILogger _logger; - } -} diff --git a/src/Nethermind/Nethermind.State/Witnesses/WitnessingStore.cs b/src/Nethermind/Nethermind.State/Witnesses/WitnessingStore.cs deleted file mode 100644 index e52af604339..00000000000 --- a/src/Nethermind/Nethermind.State/Witnesses/WitnessingStore.cs +++ /dev/null @@ -1,65 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core; -using Nethermind.Core.Crypto; - -namespace Nethermind.State.Witnesses -{ - public static class KeyValueStoreWithBatchingExtensions - { - public static IKeyValueStoreWithBatching WitnessedBy( - this IKeyValueStoreWithBatching @this, - IWitnessCollector witnessCollector) - { - return witnessCollector == NullWitnessCollector.Instance - ? @this - : new WitnessingStore(@this, witnessCollector); - } - } - - public class WitnessingStore : IKeyValueStoreWithBatching - { - private readonly IKeyValueStoreWithBatching _wrapped; - private readonly IWitnessCollector _witnessCollector; - - public WitnessingStore(IKeyValueStoreWithBatching? wrapped, IWitnessCollector? witnessCollector) - { - _wrapped = wrapped ?? throw new ArgumentNullException(nameof(wrapped)); - _witnessCollector = witnessCollector ?? throw new ArgumentNullException(nameof(witnessCollector)); - } - - public byte[]? this[ReadOnlySpan key] - { - get => Get(key); - set => Set(key, value); - } - - public byte[]? Get(ReadOnlySpan key, ReadFlags flags = ReadFlags.None) - { - if (key.Length != 32) - { - throw new NotSupportedException($"{nameof(WitnessingStore)} requires 32 bytes long keys."); - } - - Touch(key); - return _wrapped.Get(key, flags); - } - - public void Set(ReadOnlySpan key, byte[]? value, WriteFlags flags = WriteFlags.None) - { - _wrapped.Set(key, value, flags); - } - - public IWriteBatch StartWriteBatch() - { - return _wrapped.StartWriteBatch(); - } - - public void Touch(ReadOnlySpan key) - { - _witnessCollector.Add(new Hash256(key)); - } - } -} diff --git a/src/Nethermind/Nethermind.State/WorldState.cs b/src/Nethermind/Nethermind.State/WorldState.cs index 1300bcf6671..71933b6cc12 100644 --- a/src/Nethermind/Nethermind.State/WorldState.cs +++ b/src/Nethermind/Nethermind.State/WorldState.cs @@ -2,9 +2,12 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; using System.Runtime.CompilerServices; using Nethermind.Core; +using Nethermind.Core.Collections; using Nethermind.Core.Crypto; +using Nethermind.Core.Eip2930; using Nethermind.Core.Specs; using Nethermind.Int256; using Nethermind.Logging; @@ -22,12 +25,13 @@ namespace Nethermind.State { - public class WorldState : IWorldState + public class WorldState : IWorldState, IPreBlockCaches { internal readonly StateProvider _stateProvider; internal readonly PersistentStorageProvider _persistentStorageProvider; private readonly TransientStorageProvider _transientStorageProvider; private readonly ITrieStore _trieStore; + private PreBlockCaches? PreBlockCaches { get; } public Hash256 StateRoot { @@ -39,19 +43,29 @@ public Hash256 StateRoot } } - public WorldState(ITrieStore? trieStore, IKeyValueStore? codeDb, ILogManager? logManager) + public WorldState(ITrieStore trieStore, IKeyValueStore? codeDb, ILogManager? logManager) + : this(trieStore, codeDb, logManager, null, null) { + } + + internal WorldState( + ITrieStore trieStore, + IKeyValueStore? codeDb, + ILogManager? logManager, + StateTree? stateTree = null, + IStorageTreeFactory? storageTreeFactory = null, + PreBlockCaches? preBlockCaches = null) + { + PreBlockCaches = preBlockCaches; _trieStore = trieStore; - _stateProvider = new StateProvider(trieStore.GetTrieStore(null), codeDb, logManager); - _persistentStorageProvider = new PersistentStorageProvider(trieStore, _stateProvider, logManager); + _stateProvider = new StateProvider(trieStore.GetTrieStore(null), codeDb, logManager, stateTree, PreBlockCaches?.StateCache); + _persistentStorageProvider = new PersistentStorageProvider(trieStore, _stateProvider, logManager, storageTreeFactory, PreBlockCaches?.StorageCache); _transientStorageProvider = new TransientStorageProvider(logManager); } - internal WorldState(ITrieStore? trieStore, IKeyValueStore? codeDb, ILogManager? logManager, StateTree stateTree, IStorageTreeFactory storageTreeFactory) + public WorldState(ITrieStore trieStore, IKeyValueStore? codeDb, ILogManager? logManager, PreBlockCaches? preBlockCaches) + : this(trieStore, codeDb, logManager, null, preBlockCaches: preBlockCaches) { - _stateProvider = new StateProvider(trieStore.GetTrieStore(null), codeDb, logManager, stateTree); - _persistentStorageProvider = new PersistentStorageProvider(trieStore, _stateProvider, logManager, storageTreeFactory); - _transientStorageProvider = new TransientStorageProvider(logManager); } public Account GetAccount(Address address) @@ -90,13 +104,28 @@ public void SetTransientState(in StorageCell storageCell, byte[] newValue) { _transientStorageProvider.Set(storageCell, newValue); } - public void Reset() + public void Reset(bool resizeCollections = false) { - _stateProvider.Reset(); - _persistentStorageProvider.Reset(); - _transientStorageProvider.Reset(); + _stateProvider.Reset(resizeCollections); + _persistentStorageProvider.Reset(resizeCollections); + _transientStorageProvider.Reset(resizeCollections); + } + public void WarmUp(AccessList? accessList) + { + if (accessList?.IsEmpty == false) + { + foreach ((Address address, AccessList.StorageKeysEnumerable storages) in accessList) + { + bool exists = _stateProvider.WarmUp(address); + foreach (UInt256 storage in storages) + { + _persistentStorageProvider.WarmUp(new StorageCell(address, storage), isEmpty: !exists); + } + } + } } + public void WarmUp(Address address) => _stateProvider.WarmUp(address); public void ClearStorage(Address address) { _persistentStorageProvider.ClearStorage(address); @@ -134,13 +163,13 @@ public void UpdateStorageRoot(Address address, Hash256 storageRoot) { _stateProvider.UpdateStorageRoot(address, storageRoot); } - public void IncrementNonce(Address address) + public void IncrementNonce(Address address, UInt256 delta) { - _stateProvider.IncrementNonce(address); + _stateProvider.IncrementNonce(address, delta); } - public void DecrementNonce(Address address) + public void DecrementNonce(Address address, UInt256 delta) { - _stateProvider.DecrementNonce(address); + _stateProvider.DecrementNonce(address, delta); } public void CommitTree(long blockNumber) @@ -150,11 +179,6 @@ public void CommitTree(long blockNumber) _persistentStorageProvider.StateRoot = _stateProvider.StateRoot; } - public void TouchCode(in ValueHash256 codeHash) - { - _stateProvider.TouchCode(codeHash); - } - public UInt256 GetNonce(Address address) => _stateProvider.GetNonce(address); public UInt256 GetBalance(Address address) => _stateProvider.GetBalance(address); @@ -196,16 +220,16 @@ public bool HasStateForRoot(Hash256 stateRoot) return _trieStore.HasRoot(stateRoot); } - public void Commit(IReleaseSpec releaseSpec, bool isGenesis = false) + public void Commit(IReleaseSpec releaseSpec, bool isGenesis = false, bool commitStorageRoots = true) { - _persistentStorageProvider.Commit(); - _transientStorageProvider.Commit(); + _persistentStorageProvider.Commit(commitStorageRoots); + _transientStorageProvider.Commit(commitStorageRoots); _stateProvider.Commit(releaseSpec, isGenesis); } - public void Commit(IReleaseSpec releaseSpec, IWorldStateTracer tracer, bool isGenesis = false) + public void Commit(IReleaseSpec releaseSpec, IWorldStateTracer tracer, bool isGenesis = false, bool commitStorageRoots = true) { - _persistentStorageProvider.Commit(tracer); - _transientStorageProvider.Commit(tracer); + _persistentStorageProvider.Commit(tracer, commitStorageRoots); + _transientStorageProvider.Commit(tracer, commitStorageRoots); _stateProvider.Commit(releaseSpec, tracer, isGenesis); } @@ -230,6 +254,7 @@ internal void Restore(int state, int persistantStorage, int transientStorage) Restore(new Snapshot(state, new Snapshot.Storage(persistantStorage, transientStorage))); } + // Needed for benchmarks internal void SetNonce(Address address, in UInt256 nonce) { _stateProvider.SetNonce(address, nonce); @@ -239,5 +264,11 @@ public void CreateAccountIfNotExists(Address address, in UInt256 balance, in UIn { _stateProvider.CreateAccountIfNotExists(address, balance, nonce); } + + ArrayPoolList? IWorldState.GetAccountChanges() => _stateProvider.ChangedAddresses(); + + PreBlockCaches? IPreBlockCaches.Caches => PreBlockCaches; + + public bool ClearCache() => PreBlockCaches?.Clear() == true; } } diff --git a/src/Nethermind/Nethermind.State/WorldStateManager.cs b/src/Nethermind/Nethermind.State/WorldStateManager.cs index cfb570a8daa..807db3ab54f 100644 --- a/src/Nethermind/Nethermind.State/WorldStateManager.cs +++ b/src/Nethermind/Nethermind.State/WorldStateManager.cs @@ -8,27 +8,18 @@ namespace Nethermind.State; -public class WorldStateManager : ReadOnlyWorldStateManager +public class WorldStateManager( + IWorldState worldState, + ITrieStore trieStore, + IDbProvider dbProvider, + ILogManager logManager) + : ReadOnlyWorldStateManager(dbProvider, trieStore.AsReadOnly(), logManager) { - private readonly IWorldState _worldState; - private readonly ITrieStore _trieStore; - - public WorldStateManager( - IWorldState worldState, - ITrieStore trieStore, - IDbProvider dbProvider, - ILogManager logManager - ) : base(dbProvider, trieStore.AsReadOnly(), logManager) - { - _worldState = worldState; - _trieStore = trieStore; - } - - public override IWorldState GlobalWorldState => _worldState; + public override IWorldState GlobalWorldState => worldState; public override event EventHandler? ReorgBoundaryReached { - add => _trieStore.ReorgBoundaryReached += value; - remove => _trieStore.ReorgBoundaryReached -= value; + add => trieStore.ReorgBoundaryReached += value; + remove => trieStore.ReorgBoundaryReached -= value; } } diff --git a/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs index 709607c9a41..113a6f3e641 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/BlockDownloaderTests.cs @@ -7,7 +7,6 @@ using System.Threading; using System.Threading.Tasks; using FluentAssertions; -using Microsoft.ClearScript.JavaScript; using Nethermind.Blockchain; using Nethermind.Blockchain.Receipts; using Nethermind.Blockchain.Synchronization; @@ -1361,7 +1360,7 @@ Block BuildBlockForHeader(BlockHeader header, int txSeed) _headers[blockHashes[i]].ReceiptsRoot = flags.HasFlag(Response.IncorrectReceiptRoot) ? Keccak.EmptyTreeHash - : ReceiptTrie.CalculateRoot(MainnetSpecProvider.Instance.GetSpec((ForkActivation)_headers[blockHashes[i]].Number), receipts[i], ReceiptMessageDecoder.Instance); + : ReceiptTrie.CalculateRoot(MainnetSpecProvider.Instance.GetSpec((ForkActivation)_headers[blockHashes[i]].Number), receipts[i], Rlp.GetStreamDecoder()!); } using ReceiptsMessage message = new(receipts.ToPooledList()); diff --git a/src/Nethermind/Nethermind.Synchronization.Test/FastBlocks/FastHeadersSyncTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/FastBlocks/FastHeadersSyncTests.cs index 9a1d45b7af3..adeab5f2552 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/FastBlocks/FastHeadersSyncTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/FastBlocks/FastHeadersSyncTests.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reactive.Linq; using System.Threading; using System.Threading.Channels; using System.Threading.Tasks; @@ -147,7 +148,7 @@ public async Task Can_prepare_several_request_and_ignore_request_from_previous_s syncReport.HeadersInQueue.Returns(new MeasuredProgress()); BlockHeader pivot = remoteBlockTree.FindHeader(500, BlockTreeLookupOptions.None)!; - ResettableHeaderSyncFeed feed = new( + using ResettableHeaderSyncFeed feed = new( blockTree: blockTree, syncPeerPool: Substitute.For(), syncConfig: new SyncConfig @@ -169,7 +170,7 @@ void FulfillBatch(HeadersSyncBatch batch) false)!; } - await feed.PrepareRequest(); + using HeadersSyncBatch? r = await feed.PrepareRequest(); using HeadersSyncBatch batch1 = (await feed.PrepareRequest())!; FulfillBatch(batch1); @@ -194,7 +195,7 @@ public async Task Will_dispatch_when_only_partially_processed_dependency() syncReport.HeadersInQueue.Returns(new MeasuredProgress()); BlockHeader pivot = remoteBlockTree.FindHeader(2000, BlockTreeLookupOptions.None)!; - HeadersSyncFeed feed = new( + using HeadersSyncFeed feed = new( blockTree: blockTree, syncPeerPool: Substitute.For(), syncConfig: new SyncConfig @@ -248,6 +249,7 @@ void FulfillBatch(HeadersSyncBatch batch) // New batch would be at end of batch 5 (batch 6). newBatch.EndNumber.Should().Be(batches[^1].StartNumber - 1); + batches.DisposeItems(); } [Test] @@ -380,6 +382,86 @@ public async Task Can_resume_downloading_from_parent_of_lowest_inserted_header() result!.EndNumber.Should().Be(499); } + //Missing headers in the start is not allowed + [TestCase(0, 1, 1, true, false)] + [TestCase(0, 1, 1, false, true)] + //Missing headers in the start is not allowed + [TestCase(0, 2, 1, true, false)] + [TestCase(0, 2, 1, false, true)] + //Missing headers in the start is not allowed + [TestCase(0, 2, 191, true, false)] + [TestCase(0, 2, 191, false, true)] + //Gaps are not allowed + [TestCase(1, 1, 1, true, false)] + [TestCase(1, 1, 1, true, true)] + [TestCase(187, 5, 1, false, false)] + [TestCase(187, 5, 1, false, true)] + [TestCase(191, 1, 1, false, false)] + [TestCase(191, 1, 1, false, true)] + [TestCase(190, 1, 1, true, false)] + [TestCase(190, 1, 1, true, true)] + [TestCase(80, 1, 1, true, false)] + [TestCase(80, 1, 1, true, true)] + //All empty reponse + [TestCase(0, 192, 1, false, false)] + //All null reponse + [TestCase(0, 192, 1, false, true)] + public async Task Can_insert_all_good_headers_from_dependent_batch_with_missing_or_null_headers(int nullIndex, int count, int increment, bool shouldReport, bool useNulls) + { + var peerChain = Build.A.BlockTree().OfChainLength(1000).TestObject; + var syncConfig = new SyncConfig { FastSync = true, PivotNumber = "1000", PivotHash = Keccak.Zero.ToString(), PivotTotalDifficulty = "1000" }; + + IBlockTree localBlockTree = Build.A.BlockTree(peerChain.FindBlock(0, BlockTreeLookupOptions.None)!, null).WithSyncConfig(syncConfig).TestObject; + const int lowestInserted = 999; + localBlockTree.Insert(peerChain.Head!, BlockTreeInsertBlockOptions.SaveHeader); + + ISyncReport report = Substitute.For(); + report.HeadersInQueue.Returns(new MeasuredProgress()); + report.FastBlocksHeaders.Returns(new MeasuredProgress()); + + ISyncPeerPool syncPeerPool = Substitute.For(); + using HeadersSyncFeed feed = new(localBlockTree, syncPeerPool, syncConfig, report, LimboLogs.Instance); + feed.InitializeFeed(); + using HeadersSyncBatch? firstBatch = await feed.PrepareRequest(); + using HeadersSyncBatch? dependentBatch = await feed.PrepareRequest(); + dependentBatch!.ResponseSourcePeer = new PeerInfo(Substitute.For()); + + void FillBatch(HeadersSyncBatch batch, long start, bool applyNulls) + { + int c = count; + List list = Enumerable.Range((int)start, batch.RequestSize) + .Select(i => peerChain.FindBlock(i, BlockTreeLookupOptions.None)!.Header) + .ToList(); + if (applyNulls) + for (int i = nullIndex; 0 < c; i += increment) + { + list[i] = null; + c--; + } + if (!useNulls) + list = list.Where(h => h is not null).ToList(); + batch.Response = list.ToPooledList(); + } + + FillBatch(firstBatch!, lowestInserted - firstBatch!.RequestSize, false); + FillBatch(dependentBatch, lowestInserted - dependentBatch.RequestSize * 2, true); + long targetHeaderInDependentBatch = dependentBatch.StartNumber; + + feed.HandleResponse(dependentBatch); + feed.HandleResponse(firstBatch); + + using HeadersSyncBatch? thirdbatch = await feed.PrepareRequest(); + FillBatch(thirdbatch!, thirdbatch!.StartNumber, false); + feed.HandleResponse(thirdbatch); + using HeadersSyncBatch? fourthbatch = await feed.PrepareRequest(); + FillBatch(fourthbatch!, fourthbatch!.StartNumber, false); + feed.HandleResponse(fourthbatch); + using HeadersSyncBatch? fifthbatch = await feed.PrepareRequest(); + + Assert.That(localBlockTree.LowestInsertedHeader!.Number, Is.LessThanOrEqualTo(targetHeaderInDependentBatch)); + syncPeerPool.Received(shouldReport ? 1 : 0).ReportBreachOfProtocol(Arg.Any(), Arg.Any(), Arg.Any()); + } + [Test] public async Task Will_never_lose_batch_on_invalid_batch() { diff --git a/src/Nethermind/Nethermind.Synchronization.Test/OldStyleFullSynchronizerTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/OldStyleFullSynchronizerTests.cs index d956adea689..d5e3adcbeae 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/OldStyleFullSynchronizerTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/OldStyleFullSynchronizerTests.cs @@ -22,7 +22,6 @@ using Nethermind.Specs; using Nethermind.Specs.ChainSpecStyle; using Nethermind.State; -using Nethermind.State.Witnesses; using Nethermind.Stats; using Nethermind.Synchronization.Blocks; using Nethermind.Synchronization.Peers; @@ -97,7 +96,6 @@ public async Task Setup() _pool, _synchronizer.SyncModeSelector, quickConfig, - new WitnessCollector(new MemDb(), LimboLogs.Instance), Policy.FullGossip, MainnetSpecProvider.Instance, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Synchronization.Test/PeerInfoTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/PeerInfoTests.cs index 26fc35ab373..b7b77093564 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/PeerInfoTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/PeerInfoTests.cs @@ -15,7 +15,6 @@ namespace Nethermind.Synchronization.Test [TestFixture(AllocationContexts.Headers)] [TestFixture(AllocationContexts.Bodies)] [TestFixture(AllocationContexts.State)] - [TestFixture(AllocationContexts.Witness)] [TestFixture(AllocationContexts.All)] [Parallelizable(ParallelScope.All)] public class PeerInfoTests diff --git a/src/Nethermind/Nethermind.Synchronization.Test/RangeQueryVisitorTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/RangeQueryVisitorTests.cs index 496d6f6ce96..1c2bd7be51f 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/RangeQueryVisitorTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/RangeQueryVisitorTests.cs @@ -31,6 +31,8 @@ using Nethermind.Trie; using Nethermind.Trie.Pruning; using NUnit.Framework; +using Org.BouncyCastle.Utilities; +using Bytes = Nethermind.Core.Extensions.Bytes; namespace Nethermind.Synchronization.Test; @@ -136,6 +138,68 @@ public void RangeFetchPartialLimit() leafCollector.Leafs.Count.Should().Be(3); } + + [Test] + public void RangeFetchPartialLimit_FarProof() + { + + string[] paths = + [ + "0x1110000000000000000000000000000000000000000000000000000000000000", + "0x1120000000000000000000000000000000000000000000000000000000000000", + "0x1130000000000000000000000000000000000000000000000000000000000000", + // Query here 0x114... + "0x1210000000000000000000000000000000000000000000000000000000000000", + "0x1220000000000000000000000000000000000000000000000000000000000000", + "0x1230000000000000000000000000000000000000000000000000000000000000", + // Until here 0x1235.. + "0x1310000000000000000000000000000000000000000000000000000000000000", + "0x1320000000000000000000000000000000000000000000000000000000000000", + ]; + + var stateTree = new StateTree(); + var random = new Random(0); + foreach (var path in paths) + { + stateTree.Set(new Hash256(path), TestItem.GenerateRandomAccount(random)); + } + stateTree.Commit(0); + + var startHash = new Hash256("0x1140000000000000000000000000000000000000000000000000000000000000"); + var limitHash = new Hash256("0x1235000000000000000000000000000000000000000000000000000000000000"); + + RlpCollector leafCollector = new(); + using RangeQueryVisitor visitor = new(startHash, limitHash, leafCollector); + stateTree.Accept(visitor, stateTree.RootHash, CreateVisitingOptions()); + + leafCollector.Leafs.Count.Should().Be(4); + + using ArrayPoolList proofs = visitor.GetProofs(); + proofs.Count.Should().Be(6); // Need to make sure `0x11` is included + + var proofHashes = proofs.Select((rlp) => Keccak.Compute(rlp)).ToHashSet(); + foreach (Hash256 proofHash in proofHashes) + { + Console.Out.WriteLine(proofHash); + } + + string[] proofHashStrs = + [ + "0x35811c17fd5e33e75276677e27e3fe39653403a4d0df4a2f94af40ac265a4a6f", + "0xfd6d9e748837908d14fca3ddf76d06c3f74196543f3d05d8fa0b6d6726037f51", + "0xde44831292ba34a2a31566004549c1681dbe3a4042f265be60a9fff3643a3112", + "0x665b6b070a219250b89d36feeb07ae350bae619e8660598f9ec98176b19c5d07", + "0x07b17db6a32be868e9940568db8b1011c7679e642c2db0237a5a7ebdaadb0e6e", + "0xfbd8c8f3cd78599b87fd3ab0cfe127c5b2d488cb913aeec5b80230668fed45c8" + ]; + + foreach (var proofHashStr in proofHashStrs) + { + proofHashes.Contains(new Hash256(Bytes.FromHexString(proofHashStr))).Should().BeTrue(); + } + } + + [Test] public void StorageRangeFetchVisitor() { diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapProviderTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapProviderTests.cs new file mode 100644 index 00000000000..58e0a808b06 --- /dev/null +++ b/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapProviderTests.cs @@ -0,0 +1,62 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using FluentAssertions; +using Nethermind.Blockchain; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Db; +using Nethermind.Logging; +using Nethermind.State.Snap; +using Nethermind.Synchronization.SnapSync; +using Nethermind.Trie; +using NSubstitute; +using NUnit.Framework; +using System; +using System.Collections.Generic; + +namespace Nethermind.Synchronization.Test.SnapSync; + +[TestFixture] +public class SnapProviderTests +{ + + [Test] + public void AddAccountRange_AccountListIsEmpty_ThrowArgumentException() + { + MemDb db = new(); + IDbProvider dbProvider = new DbProvider(); + dbProvider.RegisterDb(DbNames.State, db); + using ProgressTracker progressTracker = new(Substitute.For(), dbProvider.GetDb(DbNames.State), LimboLogs.Instance); + dbProvider.RegisterDb(DbNames.Code, new MemDb()); + SnapProvider sut = new(progressTracker, dbProvider.CodeDb, new NodeStorage(dbProvider.StateDb), LimboLogs.Instance); + + Assert.That( + () => sut.AddAccountRange( + 0, + Keccak.Zero, + Keccak.Zero, + Array.Empty(), + Array.Empty().AsReadOnly()), Throws.ArgumentException); + } + + + [Test] + public void AddAccountRange_ResponseHasEmptyListOfAccountsAndOneProof_ReturnsExpiredRootHash() + { + MemDb db = new(); + IDbProvider dbProvider = new DbProvider(); + dbProvider.RegisterDb(DbNames.State, db); + using ProgressTracker progressTracker = new(Substitute.For(), dbProvider.GetDb(DbNames.State), LimboLogs.Instance); + dbProvider.RegisterDb(DbNames.Code, new MemDb()); + AccountRange accountRange = new(Keccak.Zero, Keccak.Zero, Keccak.MaxValue); + using AccountsAndProofs accountsAndProofs = new(); + accountsAndProofs.PathAndAccounts = new List().ToPooledList(); + accountsAndProofs.Proofs = new List { new byte[] { 0x0 } }.ToPooledList(); + + SnapProvider sut = new(progressTracker, dbProvider.CodeDb, new NodeStorage(dbProvider.StateDb), LimboLogs.Instance); + + sut.AddAccountRange(accountRange, accountsAndProofs).Should().Be(AddRangeResult.ExpiredRootHash); + } + +} diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapServerTest.cs b/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapServerTest.cs index 50585fec605..3907b0237c5 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapServerTest.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SnapSync/SnapServerTest.cs @@ -72,6 +72,52 @@ public void TestGetAccountRange() proofs.Dispose(); } + [Test] + public void TestGetAccountRange_InvalidRange() + { + Context context = CreateContext(); + TestItem.Tree.FillStateTreeWithTestAccounts(context.Tree); + + (IOwnedReadOnlyList accounts, IOwnedReadOnlyList proofs) = + context.Server.GetAccountRanges(context.Tree.RootHash, Keccak.MaxValue, Keccak.Zero, 4000, CancellationToken.None); + + accounts.Count.Should().Be(0); + accounts.Dispose(); + proofs.Dispose(); + } + + [Test] + public void TestGetTrieNode_Root() + { + Context context = CreateContext(); + TestItem.Tree.FillStateTreeWithTestAccounts(context.Tree); + + using IOwnedReadOnlyList result = context.Server.GetTrieNodes([ + new PathGroup() + { + Group = [[]] + } + ], context.Tree.RootHash, default)!; + + result.Count.Should().Be(1); + } + + [Test] + public void TestGetTrieNode_Storage_Root() + { + Context context = CreateContext(); + TestItem.Tree.FillStateTreeWithTestAccounts(context.Tree); + + using IOwnedReadOnlyList result = context.Server.GetTrieNodes([ + new PathGroup() + { + Group = [TestItem.Tree.AccountsWithPaths[0].Path.Bytes.ToArray(), []] + } + ], context.Tree.RootHash, default)!; + + result.Count.Should().Be(1); + } + [Test] public void TestNoState() { diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncPeersReportTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncPeersReportTests.cs index e3336c2ff6a..9bde37b91c3 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncPeersReportTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncPeersReportTests.cs @@ -165,8 +165,8 @@ public void PeerFormatIsCorrect() "== Header ==" + Environment.NewLine + "===[Active][Sleep ][Peer(ProtocolVersion/Head/Host:Port/Direction)][Transfer Speeds (L/H/B/R/N/S) ][Client Info (Name/Version/Operating System/Language) ]" + Environment.NewLine + "--------------------------------------------------------------------------------------------------------------------------------------------------------------" + Environment.NewLine + - " [HBRNSW][ ][Peer|eth99| 9999| 127.0.0.1: 3030| Out][ | | | | | ][]" + Environment.NewLine + - " [ ][HBRNSW][Peer|eth99| 9999| 127.0.0.1: 3030| In][ | | | | | ][]"; + " [HBRNS ][ ][Peer|eth99| 9999| 127.0.0.1: 3030| Out][ | | | | | ][]" + Environment.NewLine + + " [ ][HBRNS ][Peer|eth99| 9999| 127.0.0.1: 3030| In][ | | | | | ][]"; SyncPeersReport report = new(syncPeerPool, Substitute.For(), NoErrorLimboLogs.Instance); string reportStr = report.MakeReportForPeers(peers, "== Header =="); diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs index adce701b001..28a8b87709e 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncServerTests.cs @@ -102,7 +102,6 @@ public void Can_accept_new_valid_blocks(bool sealOk, bool validationOk, bool acc ctx.PeerPool, StaticSelector.Full, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, MainnetSpecProvider.Instance, LimboLogs.Instance); @@ -145,7 +144,6 @@ public void Can_accept_blocks_that_are_fine() ctx.PeerPool, StaticSelector.Full, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, MainnetSpecProvider.Instance, LimboLogs.Instance); @@ -214,7 +212,6 @@ public void Terminal_block_with_lower_td_should_not_change_best_suggested_but_sh ctx.PeerPool, StaticSelector.Full, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, testSpecProvider, LimboLogs.Instance); @@ -438,7 +435,6 @@ private Context CreateMergeContext(int blockTreeChainLength, UInt256 ttd) ctx.PeerPool, StaticSelector.Full, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, testSpecProvider, LimboLogs.Instance); @@ -479,7 +475,6 @@ public void Will_not_reject_block_with_bad_total_diff_but_will_reset_diff_to_nul ctx.PeerPool, StaticSelector.Full, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, MainnetSpecProvider.Instance, LimboLogs.Instance); @@ -512,7 +507,6 @@ public void Rejects_new_old_blocks() ctx.PeerPool, StaticSelector.Full, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, MainnetSpecProvider.Instance, LimboLogs.Instance); @@ -540,7 +534,6 @@ public async Task Broadcast_NewBlock_on_arrival() ctx.PeerPool, StaticSelector.Full, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, MainnetSpecProvider.Instance, LimboLogs.Instance); @@ -577,7 +570,6 @@ public async Task Skip_known_block() ctx.PeerPool, StaticSelector.Full, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, MainnetSpecProvider.Instance, LimboLogs.Instance); @@ -619,7 +611,6 @@ public async Task Broadcast_NewBlock_on_arrival_to_sqrt_of_peers([Values(1, 2, 3 ctx.PeerPool, StaticSelector.Full, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, MainnetSpecProvider.Instance, LimboLogs.Instance); @@ -658,7 +649,6 @@ public void GetNodeData_returns_cached_trie_nodes() ctx.PeerPool, StaticSelector.Full, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, MainnetSpecProvider.Instance, LimboLogs.Instance); @@ -693,7 +683,6 @@ public Context() PeerPool, selector, new SyncConfig(), - NullWitnessCollector.Instance, Policy.FullGossip, MainnetSpecProvider.Instance, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs index f55b12c2eca..e31072c5562 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs @@ -228,12 +228,13 @@ private class SyncTestContext public IWorldState StateProvider { get; set; } = null!; public DevBlockProducer? BlockProducer { get; set; } + public IBlockProducerRunner? BlockProducerRunner { get; set; } public ConsoleAsyncLogger? Logger { get; set; } public async Task StopAsync() { await (BlockchainProcessor?.StopAsync() ?? Task.CompletedTask); - await (BlockProducer?.StopAsync() ?? Task.CompletedTask); + await (BlockProducerRunner?.StopAsync() ?? Task.CompletedTask); await (PeerPool?.StopAsync() ?? Task.CompletedTask); await (Synchronizer?.StopAsync() ?? Task.CompletedTask); Logger?.Flush(); @@ -275,7 +276,8 @@ private SyncTestContext CreateSyncManager(int index) logManager, transactionComparerProvider.GetDefaultComparer()); BlockhashProvider blockhashProvider = new(tree, specProvider, stateProvider, LimboLogs.Instance); - VirtualMachine virtualMachine = new(blockhashProvider, specProvider, logManager); + CodeInfoRepository codeInfoRepository = new(); + VirtualMachine virtualMachine = new(blockhashProvider, specProvider, codeInfoRepository, logManager); Always sealValidator = Always.Valid; HeaderValidator headerValidator = new(tree, sealValidator, specProvider, logManager); @@ -290,7 +292,7 @@ private SyncTestContext CreateSyncManager(int index) RewardCalculator rewardCalculator = new(specProvider); TransactionProcessor txProcessor = - new(specProvider, stateProvider, virtualMachine, logManager); + new(specProvider, stateProvider, virtualMachine, codeInfoRepository, logManager); BlockProcessor blockProcessor = new( specProvider, @@ -299,7 +301,6 @@ private SyncTestContext CreateSyncManager(int index) new BlockProcessor.BlockValidationTransactionsExecutor(txProcessor, stateProvider), stateProvider, receiptStorage, - NullWitnessCollector.Instance, new BlockhashStore(tree, specProvider, stateProvider), txProcessor, logManager); @@ -313,8 +314,8 @@ private SyncTestContext CreateSyncManager(int index) SyncPeerPool syncPeerPool = new(tree, nodeStatsManager, new TotalDifficultyBetterPeerStrategy(LimboLogs.Instance), logManager, 25); WorldState devState = new(trieStore, codeDb, logManager); - VirtualMachine devEvm = new(blockhashProvider, specProvider, logManager); - TransactionProcessor devTxProcessor = new(specProvider, devState, devEvm, logManager); + VirtualMachine devEvm = new(blockhashProvider, specProvider, codeInfoRepository, logManager); + TransactionProcessor devTxProcessor = new(specProvider, devState, devEvm, codeInfoRepository, logManager); BlockProcessor devBlockProcessor = new( specProvider, @@ -323,7 +324,6 @@ private SyncTestContext CreateSyncManager(int index) new BlockProcessor.BlockProductionTransactionsExecutor(devTxProcessor, devState, specProvider, logManager), devState, receiptStorage, - NullWitnessCollector.Instance, new BlockhashStore(tree, specProvider, devState), devTxProcessor, logManager); @@ -341,12 +341,16 @@ private SyncTestContext CreateSyncManager(int index) devChainProcessor, stateProvider, tree, - new BuildBlocksRegularly(TimeSpan.FromMilliseconds(50)).IfPoolIsNotEmpty(txPool), Timestamper.Default, specProvider, new BlocksConfig(), logManager); + StandardBlockProducerRunner runner = new( + new BuildBlocksRegularly(TimeSpan.FromMilliseconds(50)).IfPoolIsNotEmpty(txPool), + tree, + producer); + TotalDifficultyBetterPeerStrategy bestPeerStrategy = new(LimboLogs.Instance); Pivot pivot = new(syncConfig); BlockDownloaderFactory blockDownloaderFactory = new( @@ -383,7 +387,6 @@ private SyncTestContext CreateSyncManager(int index) syncPeerPool, selector, syncConfig, - NullWitnessCollector.Instance, Policy.FullGossip, MainnetSpecProvider.Instance, logManager); @@ -394,7 +397,7 @@ private SyncTestContext CreateSyncManager(int index) if (index == 0) { _genesis = Build.A.Block.Genesis.WithStateRoot(stateProvider.StateRoot).TestObject; - producer.Start(); + runner.Start(); } syncPeerPool.Start(); @@ -416,6 +419,7 @@ private SyncTestContext CreateSyncManager(int index) context.SyncServer = syncServer; context.Tree = tree; context.BlockProducer = producer; + context.BlockProducerRunner = runner; context.TxPool = txPool; context.Logger = logger; return context; diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs index 1d1aba2c6d9..c2f2e08128e 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs @@ -32,7 +32,6 @@ using Nethermind.Merge.Plugin.Test; using Nethermind.Specs.ChainSpecStyle; using Nethermind.State; -using Nethermind.State.Witnesses; using Nethermind.Synchronization.Blocks; using Nethermind.Synchronization.ParallelSync; using Nethermind.Synchronization.Peers; @@ -413,7 +412,6 @@ ISyncConfig GetSyncConfig() => SyncPeerPool, Synchronizer.SyncModeSelector, syncConfig, - new WitnessCollector(new MemDb(), LimboLogs.Instance), Policy.FullGossip, MainnetSpecProvider.Instance, _logManager); @@ -437,7 +435,7 @@ public SyncingContext BlockIsKnown() return this; } - private const int DynamicTimeout = 5000; + private const int DynamicTimeout = 10000; public SyncingContext BestSuggestedHeaderIs(BlockHeader header) { @@ -975,8 +973,7 @@ await When.Syncing .StopAsync(); } - private const int Moment = 50; - private const int WaitTime = 500; + private const int WaitTime = 1500; private static bool IsMerge(SynchronizerType synchronizerType) => synchronizerType switch diff --git a/src/Nethermind/Nethermind.Synchronization/Blocks/BlockDownloadContext.cs b/src/Nethermind/Nethermind.Synchronization/Blocks/BlockDownloadContext.cs index ff8e7090c87..12ce99de7f1 100644 --- a/src/Nethermind/Nethermind.Synchronization/Blocks/BlockDownloadContext.cs +++ b/src/Nethermind/Nethermind.Synchronization/Blocks/BlockDownloadContext.cs @@ -21,6 +21,7 @@ public class BlockDownloadContext private readonly PeerInfo _syncPeer; private bool _downloadReceipts; private readonly IReceiptsRecovery _receiptsRecovery; + private static readonly IRlpStreamDecoder _receiptDecoder = Rlp.GetStreamDecoder(); public BlockDownloadContext(ISpecProvider specProvider, PeerInfo syncPeer, IReadOnlyList headers, bool downloadReceipts, IReceiptsRecovery receiptsRecovery) @@ -126,7 +127,7 @@ public Block GetBlockByRequestIdx(int index) private void ValidateReceipts(Block block, TxReceipt[] blockReceipts) { - Hash256 receiptsRoot = ReceiptTrie.CalculateRoot(_specProvider.GetSpec(block.Header), blockReceipts, ReceiptMessageDecoder.Instance); + Hash256 receiptsRoot = ReceiptTrie.CalculateRoot(_specProvider.GetSpec(block.Header), blockReceipts, _receiptDecoder); if (receiptsRoot != block.ReceiptsRoot) { diff --git a/src/Nethermind/Nethermind.Synchronization/FastBlocks/FastHeadersSyncFeed.cs b/src/Nethermind/Nethermind.Synchronization/FastBlocks/FastHeadersSyncFeed.cs index a5b175233c7..b5c5d2798d4 100644 --- a/src/Nethermind/Nethermind.Synchronization/FastBlocks/FastHeadersSyncFeed.cs +++ b/src/Nethermind/Nethermind.Synchronization/FastBlocks/FastHeadersSyncFeed.cs @@ -4,7 +4,9 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; +using System.Runtime.CompilerServices; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -137,14 +139,7 @@ private ulong CalculateMemoryInQueue() ulong amount = 0; while (enumerator.MoveNext()) { - var responses = enumerator.Current.Value.Response; - if (responses is not null) - { - foreach (var response in responses) - { - amount += (ulong)MemorySizeEstimator.EstimateSize(response); - } - } + amount += (ulong)enumerator.Current.Value?.ResponseSizeEstimate; } // Stop gap method to reduce allocations from non-struct enumerator @@ -250,6 +245,7 @@ protected virtual void FinishAndCleanUp() protected void ClearDependencies() { + _dependencies.Values.DisposeItems(); _dependencies.Clear(); MarkDirty(); } @@ -259,7 +255,9 @@ protected virtual void PostFinishCleanUp() HeadersSyncProgressReport.Update(_pivotNumber); HeadersSyncProgressReport.MarkEnd(); ClearDependencies(); // there may be some dependencies from wrong branches + _pending.DisposeItems(); _pending.Clear(); // there may be pending wrong branches + _sent.DisposeItems(); _sent.Clear(); // we my still be waiting for some bad branches HeadersSyncQueueReport.Update(0L); HeadersSyncQueueReport.MarkEnd(); @@ -270,14 +268,17 @@ private void HandleDependentBatches(CancellationToken cancellationToken) long? lowest = LowestInsertedBlockHeader?.Number; long processedBatchCount = 0; const long maxBatchToProcess = 4; - while (lowest.HasValue && processedBatchCount < maxBatchToProcess && _dependencies.TryRemove(lowest.Value - 1, out HeadersSyncBatch? dependentBatch)) + while (lowest.HasValue && processedBatchCount < maxBatchToProcess && _dependencies.TryRemove(lowest.Value - 1, out HeadersSyncBatch dependentBatch)) { - MarkDirty(); - InsertHeaders(dependentBatch!); - lowest = LowestInsertedBlockHeader?.Number; - cancellationToken.ThrowIfCancellationRequested(); + using (dependentBatch) + { + MarkDirty(); + InsertHeaders(dependentBatch); + lowest = LowestInsertedBlockHeader?.Number; + cancellationToken.ThrowIfCancellationRequested(); - processedBatchCount++; + processedBatchCount++; + } } } @@ -449,7 +450,7 @@ private static HeadersSyncBatch BuildLeftFiller(HeadersSyncBatch batch, int left private static HeadersSyncBatch BuildDependentBatch(HeadersSyncBatch batch, long addedLast, long addedEarliest) { HeadersSyncBatch dependentBatch = new(); - dependentBatch.StartNumber = batch.StartNumber; + dependentBatch.StartNumber = addedEarliest; int count = (int)(addedLast - addedEarliest + 1); dependentBatch.RequestSize = count; dependentBatch.MinNumber = batch.MinNumber; @@ -567,26 +568,30 @@ protected virtual int InsertHeaders(HeadersSyncBatch batch) _pending.Enqueue(batch); throw new InvalidOperationException($"Only one header dependency expected ({batch})"); } - + long lastNumber = -1; for (int j = 0; j < batch.Response.Count; j++) { BlockHeader? current = batch.Response[j]; if (current is not null) { + if (lastNumber != -1 && lastNumber < current.Number - 1) + { + //There is a gap in this response, + //so we save the whole batch for now, + //and let the next PrepareRequest() handle the disconnect + addedEarliest = batch.StartNumber; + addedLast = batch.EndNumber; + break; + } addedEarliest = Math.Min(addedEarliest, current.Number); addedLast = Math.Max(addedLast, current.Number); - } - else - { - break; + lastNumber = current.Number; } } - HeadersSyncBatch dependentBatch = BuildDependentBatch(batch, addedLast, addedEarliest); _dependencies[header.Number] = dependentBatch; MarkDirty(); if (_logger.IsDebug) _logger.Debug($"{batch} -> DEPENDENCY {dependentBatch}"); - // but we cannot do anything with it yet break; } @@ -636,6 +641,7 @@ protected virtual int InsertHeaders(HeadersSyncBatch batch) { if (added <= 0) { + batch.Response?.Dispose(); batch.Response = null; _pending.Enqueue(batch); } @@ -709,5 +715,17 @@ protected void SetExpectedNextHeaderToParent(BlockHeader header) _nextHeaderHash = header.ParentHash!; _nextHeaderDiff = (header.TotalDifficulty ?? 0) - header.Difficulty; } + private bool _disposed = false; + public override void Dispose() + { + if (!_disposed) + { + _sent.DisposeItems(); + _pending.DisposeItems(); + _dependencies.Values.DisposeItems(); + base.Dispose(); + _disposed = true; + } + } } } diff --git a/src/Nethermind/Nethermind.Synchronization/FastBlocks/HeadersSyncBatch.cs b/src/Nethermind/Nethermind.Synchronization/FastBlocks/HeadersSyncBatch.cs index 9a5a8345023..aed3eabf42c 100644 --- a/src/Nethermind/Nethermind.Synchronization/FastBlocks/HeadersSyncBatch.cs +++ b/src/Nethermind/Nethermind.Synchronization/FastBlocks/HeadersSyncBatch.cs @@ -11,7 +11,27 @@ public class HeadersSyncBatch : FastBlocksBatch public long StartNumber { get; set; } public long EndNumber => StartNumber + RequestSize - 1; public int RequestSize { get; set; } - public IOwnedReadOnlyList? Response { get; set; } + public long ResponseSizeEstimate { get; private set; } + + private IOwnedReadOnlyList? _response; + public IOwnedReadOnlyList? Response + { + get => _response; + set + { + ResponseSizeEstimate = 0; + if (value is not null) + { + long size = 0; + foreach (BlockHeader response in value) + { + size += MemorySizeEstimator.EstimateSize(response); + } + ResponseSizeEstimate = size; + } + _response = value; + } + } public override string ToString() { diff --git a/src/Nethermind/Nethermind.Synchronization/FastSync/StateSyncItem.cs b/src/Nethermind/Nethermind.Synchronization/FastSync/StateSyncItem.cs index c6d58b64389..5795bdd7458 100644 --- a/src/Nethermind/Nethermind.Synchronization/FastSync/StateSyncItem.cs +++ b/src/Nethermind/Nethermind.Synchronization/FastSync/StateSyncItem.cs @@ -3,7 +3,9 @@ using System; using System.Diagnostics; -using Nethermind.Core; +using System.Numerics; +using System.Runtime.InteropServices; + using Nethermind.Core.Crypto; using Nethermind.Trie; @@ -57,6 +59,35 @@ public StateSyncItem(Hash256 hash, byte[]? accountPathNibbles, byte[]? pathNibbl private NodeKey? _key = null; public NodeKey Key => _key ??= new(Address, Path, Hash); - public record NodeKey(Hash256? Address, TreePath? Path, Hash256 Hash); + [StructLayout(LayoutKind.Auto)] + public readonly struct NodeKey(Hash256? address, TreePath? path, Hash256 hash) : IEquatable + { + private readonly ValueHash256 Address = address ?? default; + private readonly TreePath? Path = path; + private readonly ValueHash256 Hash = hash; + + public readonly bool Equals(NodeKey other) + => Address == other.Address && Path == other.Path && Hash == other.Hash; + + public override bool Equals(object obj) + => obj is NodeKey && Equals((NodeKey)obj); + + public override int GetHashCode() + { + uint hash0 = (uint)hash.GetHashCode(); + ulong hash1 = ((ulong)(uint)(address?.GetHashCode() ?? 1) << 32) | (ulong)(uint)(Path?.GetHashCode() ?? 2); + return (int)BitOperations.Crc32C(hash0, hash1); + } + + public static bool operator ==(in NodeKey left, in NodeKey right) + { + return left.Equals(right); + } + + public static bool operator !=(in NodeKey left, in NodeKey right) + { + return !(left == right); + } + } } } diff --git a/src/Nethermind/Nethermind.Synchronization/FastSync/TreeSync.cs b/src/Nethermind/Nethermind.Synchronization/FastSync/TreeSync.cs index 4f53ea7dea0..4cc449cb47b 100644 --- a/src/Nethermind/Nethermind.Synchronization/FastSync/TreeSync.cs +++ b/src/Nethermind/Nethermind.Synchronization/FastSync/TreeSync.cs @@ -67,7 +67,7 @@ public class TreeSync private readonly ConcurrentDictionary _pendingRequests = new(); private Dictionary> _dependencies = new(); private readonly LruKeyCache _alreadySavedNode = new(AlreadySavedCapacity, "saved nodes"); - private readonly LruKeyCache _alreadySavedCode = new(AlreadySavedCapacity, "saved nodes"); + private readonly LruKeyCache _alreadySavedCode = new(AlreadySavedCapacity, "saved nodes"); private BranchProgress _branchProgress; private int _hintsToResetRoot; diff --git a/src/Nethermind/Nethermind.Synchronization/ISyncServer.cs b/src/Nethermind/Nethermind.Synchronization/ISyncServer.cs index a7228c0e224..3a14b7b96f9 100644 --- a/src/Nethermind/Nethermind.Synchronization/ISyncServer.cs +++ b/src/Nethermind/Nethermind.Synchronization/ISyncServer.cs @@ -10,7 +10,6 @@ using Nethermind.Core.Collections; using Nethermind.Core.Crypto; using Nethermind.Synchronization.FastSync; -using Nethermind.Synchronization.LesSync; namespace Nethermind.Synchronization { @@ -21,9 +20,6 @@ public interface ISyncServer : IDisposable void StopNotifyingPeersAboutNewBlocks(); TxReceipt[] GetReceipts(Hash256 blockHashes); Block? Find(Hash256 hash); - BlockHeader FindLowestCommonAncestor(BlockHeader firstDescendant, BlockHeader secondDescendant); - public Task BuildCHT(); - public CanonicalHashTrie? GetCHT(); Hash256? FindHash(long number); IOwnedReadOnlyList FindHeaders(Hash256 hash, int numberOfBlocks, int skip, bool reverse); IOwnedReadOnlyList GetNodeData(IReadOnlyList keys, CancellationToken cancellationToken, NodeDataType includedTypes = NodeDataType.Code | NodeDataType.State); @@ -31,6 +27,5 @@ public interface ISyncServer : IDisposable ulong NetworkId { get; } BlockHeader Genesis { get; } BlockHeader? Head { get; } - Hash256[]? GetBlockWitnessHashes(Hash256 blockHash); } } diff --git a/src/Nethermind/Nethermind.Synchronization/LesSync/CanonicalHashTrie.cs b/src/Nethermind/Nethermind.Synchronization/LesSync/CanonicalHashTrie.cs deleted file mode 100644 index 73374859419..00000000000 --- a/src/Nethermind/Nethermind.Synchronization/LesSync/CanonicalHashTrie.cs +++ /dev/null @@ -1,142 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using Nethermind.Core; -using Nethermind.Core.Crypto; -using Nethermind.Core.Extensions; -using Nethermind.Logging; -using Nethermind.Int256; -using Nethermind.Serialization.Rlp; -using Nethermind.Trie; - -namespace Nethermind.Synchronization.LesSync -{ - public class CanonicalHashTrie : PatriciaTree - { - private static readonly ChtDecoder _decoder = new(); - public static readonly int SectionSize = 32768; // 2**15 - - private static readonly byte[] MaxSectionKey = Encoding.ASCII.GetBytes("MaxSection"); - - public CanonicalHashTrie(IKeyValueStoreWithBatching db) - : base(db, GetMaxRootHash(db), true, true, NullLogManager.Instance) - { - } - - public CanonicalHashTrie(IKeyValueStoreWithBatching db, Hash256 rootHash) - : base(db, rootHash, true, true, NullLogManager.Instance) - { - } - - public void CommitSectionIndex(long sectionIndex) - { - StoreRootHash(sectionIndex); - } - - public static long GetMaxSectionIndex() - { - //return GetMaxSectionIndex(_keyValueStore); - return -1; - } - - public static long GetSectionFromBlockNo(long blockNo) => (blockNo / SectionSize) - 1L; - - public static byte[][] BuildProof(long blockNo, long sectionIndex, long fromLevel) - { - return BuildProof(GetKey(blockNo), sectionIndex, fromLevel); - } - - public static byte[][] BuildProof(byte[] key, long sectionIndex, long fromLevel) - { - ChtProofCollector proofCollector = new(key, fromLevel); - //Accept(proofCollector, GetRootHash(sectionIndex), false); - return proofCollector.BuildResult(); - } - - private void StoreRootHash(long sectionIndex) - { - UpdateRootHash(); - //_keyValueStore[GetRootHashKey(sectionIndex)] = RootHash.Bytes; - //if (GetMaxSectionIndex(_keyValueStore) < sectionIndex) - //{ - // SetMaxSectionIndex(sectionIndex); - //} - } - - private static long GetMaxSectionIndex(IKeyValueStore db) - { - byte[]? storeValue = null; - try - { - storeValue = db[MaxSectionKey]; - } - catch (KeyNotFoundException) { } - return storeValue?.ToLongFromBigEndianByteArrayWithoutLeadingZeros() ?? -1L; - } - - private static Hash256 GetRootHash(IKeyValueStore db, long sectionIndex) - { - byte[]? hash = db[GetRootHashKey(sectionIndex)]; - return hash is null ? EmptyTreeHash : new Hash256(hash); - } - - private static Hash256 GetMaxRootHash(IKeyValueStore db) - { - long maxSection = GetMaxSectionIndex(db); - return maxSection == 0L ? EmptyTreeHash : GetRootHash(db, maxSection); - } - - public void Set(BlockHeader header) - { - Set(GetKey(header), GetValue(header)); - } - - public (Hash256?, UInt256) Get(long key) - { - return Get(GetKey(key)); - } - - public (Hash256?, UInt256) Get(Span key) - { - ReadOnlySpan val = base.Get(key); - if (val.IsEmpty) - { - throw new InvalidDataException("Missing CHT data"); - } - - return _decoder.Decode(val); - } - - private static byte[] GetKey(BlockHeader header) - { - return GetKey(header.Number); - } - - private static byte[] GetKey(long key) - { - return key.ToBigEndianByteArrayWithoutLeadingZeros().PadLeft(8); - } - - private static byte[] GetRootHashKey(long key) - { - return Bytes.Concat(Encoding.ASCII.GetBytes("RootHash"), GetKey(key)); - } - - private static Rlp GetValue(BlockHeader header) - { - if (!header.TotalDifficulty.HasValue) - { - throw new ArgumentException("Trying to use a header with a null total difficulty in LES Canonical Hash Trie"); - } - - (Hash256? Hash, UInt256 Value) item = (header.Hash, header.TotalDifficulty.Value); - RlpStream stream = new(_decoder.GetLength(item, RlpBehaviors.None)); - _decoder.Encode(stream, item); - return new Rlp(stream.Data.ToArray()); - } - } -} diff --git a/src/Nethermind/Nethermind.Synchronization/LesSync/ChtDecoder.cs b/src/Nethermind/Nethermind.Synchronization/LesSync/ChtDecoder.cs deleted file mode 100644 index 7fbfbb7e82e..00000000000 --- a/src/Nethermind/Nethermind.Synchronization/LesSync/ChtDecoder.cs +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core.Crypto; -using Nethermind.Int256; -using Nethermind.Serialization.Rlp; - -namespace Nethermind.Synchronization.LesSync -{ - public class ChtDecoder : IRlpStreamDecoder<(Hash256?, UInt256)>, IRlpValueDecoder<(Hash256?, UInt256)> - { - public (Hash256?, UInt256) Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (rlpStream.IsNextItemNull()) - { - rlpStream.ReadByte(); - return (null, 0); - } - - rlpStream.ReadSequenceLength(); - Hash256 hash = rlpStream.DecodeKeccak(); - UInt256 totalDifficulty = rlpStream.DecodeUInt256(); - return (hash, totalDifficulty); - } - - public void Encode(RlpStream stream, (Hash256?, UInt256) item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - (Hash256? hash, UInt256 totalDifficulty) = item; - int contentLength = GetContentLength(item, RlpBehaviors.None); - stream.StartSequence(contentLength); - stream.Encode(hash); - stream.Encode(totalDifficulty); - } - - public (Hash256?, UInt256) Decode(byte[] bytes) - { - return Decode(new RlpStream(bytes)); - } - - public Rlp Encode((Hash256?, UInt256) item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - throw new NotImplementedException(); - } - - public int GetLength((Hash256?, UInt256) item, RlpBehaviors rlpBehaviors) - { - return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); - } - - private static int GetContentLength((Hash256?, UInt256) item, RlpBehaviors rlpBehaviors) - { - (Hash256? hash, UInt256 totalDifficulty) = item; - return Rlp.LengthOf(hash) + Rlp.LengthOf(totalDifficulty); - } - - public (Hash256?, UInt256) Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (decoderContext.IsNextItemNull()) - { - decoderContext.ReadByte(); - return (null, 0); - } - - decoderContext.ReadSequenceLength(); - Hash256 hash = decoderContext.DecodeKeccak(); - UInt256 totalDifficulty = decoderContext.DecodeUInt256(); - return (hash, totalDifficulty); - } - } -} diff --git a/src/Nethermind/Nethermind.Synchronization/LesSync/ChtProofCollector.cs b/src/Nethermind/Nethermind.Synchronization/LesSync/ChtProofCollector.cs deleted file mode 100644 index 910c5a1473e..00000000000 --- a/src/Nethermind/Nethermind.Synchronization/LesSync/ChtProofCollector.cs +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.State.Proofs; -using Nethermind.Trie; - -namespace Nethermind.Synchronization.LesSync -{ - class ChtProofCollector : ProofCollector - { - readonly long _fromLevel; - long _level; - public ChtProofCollector(byte[] key, long fromLevel) : base(key) - { - _fromLevel = fromLevel; - _level = 0; - } - - protected override void AddProofBits(TrieNode node) - { - if (_level < _fromLevel) - { - _level++; - } - else - { - base.AddProofBits(node); - } - } - } -} diff --git a/src/Nethermind/Nethermind.Synchronization/Metrics.cs b/src/Nethermind/Nethermind.Synchronization/Metrics.cs index ac3f91ee690..68ffc7f8012 100644 --- a/src/Nethermind/Nethermind.Synchronization/Metrics.cs +++ b/src/Nethermind/Nethermind.Synchronization/Metrics.cs @@ -71,14 +71,6 @@ public static class Metrics [Description("State branch progress (percentage of completed branches at second level).")] public static long StateBranchProgress; - [GaugeMetric] - [Description("Requests sent for processing by the witness state sync")] - public static long WitnessStateRequests; - - [GaugeMetric] - [Description("Requests sent for processing by the witness block sync")] - public static long WitnessBlockRequests; - [GaugeMetric] [Description("Sync time in seconds")] public static long SyncTime; diff --git a/src/Nethermind/Nethermind.Synchronization/ParallelSync/MultiSyncModeSelector.cs b/src/Nethermind/Nethermind.Synchronization/ParallelSync/MultiSyncModeSelector.cs index c573ef21289..c33e126b4f3 100644 --- a/src/Nethermind/Nethermind.Synchronization/ParallelSync/MultiSyncModeSelector.cs +++ b/src/Nethermind/Nethermind.Synchronization/ParallelSync/MultiSyncModeSelector.cs @@ -199,7 +199,7 @@ public void Update() best.IsInFastSync = ShouldBeInFastSyncMode(best); best.IsInStateSync = ShouldBeInStateSyncMode(best); best.IsInStateNodes = ShouldBeInStateNodesMode(best); - best.IsInSnapRanges = ShouldBeBeInSnapRangesPhase(best); + best.IsInSnapRanges = ShouldBeInSnapRangesPhase(best); best.IsInFastHeaders = ShouldBeInFastHeadersMode(best); best.IsInFastBodies = ShouldBeInFastBodiesMode(best); best.IsInFastReceipts = ShouldBeInFastReceiptsMode(best); @@ -338,15 +338,16 @@ private bool ShouldBeInWaitingForBlockMode(Snapshot best) private bool ShouldBeInBeaconHeaders(bool shouldBeInUpdatingPivot) { bool shouldBeInBeaconHeaders = _beaconSyncStrategy.ShouldBeInBeaconHeaders(); + bool shouldBeNotInUpdatingPivot = !shouldBeInUpdatingPivot; bool result = shouldBeInBeaconHeaders && - !shouldBeInUpdatingPivot; + shouldBeNotInUpdatingPivot; if (_logger.IsTrace) { LogDetailedSyncModeChecks("BEACON HEADERS", (nameof(shouldBeInBeaconHeaders), shouldBeInBeaconHeaders), - (nameof(shouldBeInUpdatingPivot), shouldBeInUpdatingPivot)); + (nameof(shouldBeNotInUpdatingPivot), shouldBeNotInUpdatingPivot)); } return result; @@ -613,7 +614,7 @@ private bool ShouldBeInStateSyncMode(Snapshot best) (nameof(notInUpdatingPivot), notInUpdatingPivot), (nameof(hasFastSyncBeenActive), hasFastSyncBeenActive), (nameof(hasAnyPostPivotPeer), hasAnyPostPivotPeer), - (nameof(notInFastSync), notInFastSync), + ($"{nameof(notInFastSync)}||{nameof(stickyStateNodes)}", notInFastSync || stickyStateNodes), (nameof(stateNotDownloadedYet), stateNotDownloadedYet), (nameof(notInAStickyFullSync), notInAStickyFullSync), (nameof(notHasJustStartedFullSync), notHasJustStartedFullSync), @@ -642,7 +643,7 @@ private bool ShouldBeInStateNodesMode(Snapshot best) return result; } - private bool ShouldBeBeInSnapRangesPhase(Snapshot best) + private bool ShouldBeInSnapRangesPhase(Snapshot best) { bool isInStateSync = best.IsInStateSync; bool isCloseToHead = best.TargetBlock >= best.Header && (best.TargetBlock - best.Header) < Constants.MaxDistanceFromHead; diff --git a/src/Nethermind/Nethermind.Synchronization/Peers/AllocationContexts.cs b/src/Nethermind/Nethermind.Synchronization/Peers/AllocationContexts.cs index 8361c2ffd65..0ed45626de6 100644 --- a/src/Nethermind/Nethermind.Synchronization/Peers/AllocationContexts.cs +++ b/src/Nethermind/Nethermind.Synchronization/Peers/AllocationContexts.cs @@ -14,8 +14,7 @@ public enum AllocationContexts Receipts = 4, Blocks = 7, State = 8, - Witness = 16, - Snap = 32, - All = Headers | Bodies | Receipts | Blocks | State | Witness | Snap + Snap = 16, + All = Headers | Bodies | Receipts | Blocks | State | Snap } } diff --git a/src/Nethermind/Nethermind.Synchronization/Peers/PeerInfo.cs b/src/Nethermind/Nethermind.Synchronization/Peers/PeerInfo.cs index de64e089455..3b6c7a8a409 100644 --- a/src/Nethermind/Nethermind.Synchronization/Peers/PeerInfo.cs +++ b/src/Nethermind/Nethermind.Synchronization/Peers/PeerInfo.cs @@ -155,9 +155,9 @@ private static void ResolveWeaknessChecks(ref int weakness, AllocationContexts s private static string BuildContextString(AllocationContexts contexts) { - return $"{((contexts & AllocationContexts.Headers) == AllocationContexts.Headers ? "H" : " ")}{((contexts & AllocationContexts.Bodies) == AllocationContexts.Bodies ? "B" : " ")}{((contexts & AllocationContexts.Receipts) == AllocationContexts.Receipts ? "R" : " ")}{((contexts & AllocationContexts.State) == AllocationContexts.State ? "N" : " ")}{((contexts & AllocationContexts.Snap) == AllocationContexts.Snap ? "S" : " ")}{((contexts & AllocationContexts.Witness) == AllocationContexts.Witness ? "W" : " ")}"; + return $"{((contexts & AllocationContexts.Headers) == AllocationContexts.Headers ? "H" : " ")}{((contexts & AllocationContexts.Bodies) == AllocationContexts.Bodies ? "B" : " ")}{((contexts & AllocationContexts.Receipts) == AllocationContexts.Receipts ? "R" : " ")}{((contexts & AllocationContexts.State) == AllocationContexts.State ? "N" : " ")}{((contexts & AllocationContexts.Snap) == AllocationContexts.Snap ? "S" : " ")}"; } - public override string ToString() => $"[{BuildContextString(AllocatedContexts)}][{BuildContextString(SleepingContexts)}]{SyncPeer}"; + public override string ToString() => $"[{BuildContextString(AllocatedContexts)} ][{BuildContextString(SleepingContexts)} ]{SyncPeer}"; } } diff --git a/src/Nethermind/Nethermind.Synchronization/Peers/SyncPeersReport.cs b/src/Nethermind/Nethermind.Synchronization/Peers/SyncPeersReport.cs index 39f179ffbe0..3ed69a9aef1 100644 --- a/src/Nethermind/Nethermind.Synchronization/Peers/SyncPeersReport.cs +++ b/src/Nethermind/Nethermind.Synchronization/Peers/SyncPeersReport.cs @@ -135,7 +135,6 @@ static void CountContexts(AllocationContexts contexts, ref PeersContextCounts co contextCounts.Receipts += contexts.HasFlag(AllocationContexts.Receipts) ? 1 : 0; contextCounts.Blocks += contexts.HasFlag(AllocationContexts.Blocks) ? 1 : 0; contextCounts.State += contexts.HasFlag(AllocationContexts.State) ? 1 : 0; - contextCounts.Witness += contexts.HasFlag(AllocationContexts.Witness) ? 1 : 0; contextCounts.Snap += contexts.HasFlag(AllocationContexts.Snap) ? 1 : 0; } } @@ -240,7 +239,6 @@ private struct PeersContextCounts public int Receipts { get; set; } public int Blocks { get; set; } public int State { get; set; } - public int Witness { get; set; } public int Snap { get; set; } public int Total { get; set; } @@ -259,7 +257,6 @@ public readonly void AppendTo(StringBuilder sb, string allText) if (Receipts > 0) AddComma(sb, ref added).Append(Receipts).Append(" Receipts"); if (Blocks > 0) AddComma(sb, ref added).Append(Blocks).Append(" Blocks"); if (State > 0) AddComma(sb, ref added).Append(State).Append(" State"); - if (Witness > 0) AddComma(sb, ref added).Append(Witness).Append(" Witness"); if (Snap > 0) AddComma(sb, ref added).Append(Snap).Append(" Snap"); static StringBuilder AddComma(StringBuilder sb, ref bool itemAdded) diff --git a/src/Nethermind/Nethermind.Synchronization/Reporting/SyncReport.cs b/src/Nethermind/Nethermind.Synchronization/Reporting/SyncReport.cs index f51748f0b49..f088c7b1430 100644 --- a/src/Nethermind/Nethermind.Synchronization/Reporting/SyncReport.cs +++ b/src/Nethermind/Nethermind.Synchronization/Reporting/SyncReport.cs @@ -134,6 +134,7 @@ private static string Pad(long value, int length) private string _paddedAmountOfOldReceiptsToDownload; private long _amountOfBodiesToDownload; private long _amountOfReceiptsToDownload; + private uint _nodeInfoType; private void SetPaddedPivots() { @@ -175,8 +176,14 @@ private void WriteSyncReport() { if (_reportId % PeerCountFrequency == 0) { - _logger.Info(_syncPeersReport.MakeSummaryReportForPeers(_syncPeerPool.InitializedPeers, $"Peers | with best block: {_syncPeerPool.InitializedPeersCount} | all: {_syncPeerPool.PeerCount}")); - _logger.Info(_syncPeersReport.MakeDiversityReportForPeers(_syncPeerPool.InitializedPeers, $"Peers | node diversity : ")); + if (_nodeInfoType++ % 2 == 0) + { + _logger.Info(_syncPeersReport.MakeSummaryReportForPeers(_syncPeerPool.InitializedPeers, $"Peers | with best block: {_syncPeerPool.InitializedPeersCount} | all: {_syncPeerPool.PeerCount}")); + } + else + { + _logger.Info(_syncPeersReport.MakeDiversityReportForPeers(_syncPeerPool.InitializedPeers, $"Peers | node diversity : ")); + } } } diff --git a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProvider.cs b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProvider.cs index aa74716db65..772c227be98 100644 --- a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProvider.cs +++ b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProvider.cs @@ -31,7 +31,7 @@ public class SnapProvider : ISnapProvider private readonly ProgressTracker _progressTracker; // This is actually close to 97% effective. - private readonly LruKeyCache _codeExistKeyCache = new(1024 * 16, ""); + private readonly LruKeyCacheLowObject _codeExistKeyCache = new(1024 * 16, ""); public SnapProvider(ProgressTracker progressTracker, IDb codeDb, INodeStorage nodeStorage, ILogManager logManager) { @@ -51,7 +51,7 @@ public AddRangeResult AddAccountRange(AccountRange request, AccountsAndProofs re { AddRangeResult result; - if (response.PathAndAccounts.Count == 0 && response.Proofs.Count == 0) + if (response.PathAndAccounts.Count == 0) { _logger.Trace($"SNAP - GetAccountRange - requested expired RootHash:{request.RootHash}"); @@ -59,7 +59,13 @@ public AddRangeResult AddAccountRange(AccountRange request, AccountsAndProofs re } else { - result = AddAccountRange(request.BlockNumber.Value, request.RootHash, request.StartingHash, response.PathAndAccounts, response.Proofs, hashLimit: request.LimitHash); + result = AddAccountRange( + request.BlockNumber.Value, + request.RootHash, + request.StartingHash, + response.PathAndAccounts, + response.Proofs, + hashLimit: request.LimitHash); if (result == AddRangeResult.OK) { @@ -73,8 +79,16 @@ public AddRangeResult AddAccountRange(AccountRange request, AccountsAndProofs re return result; } - public AddRangeResult AddAccountRange(long blockNumber, in ValueHash256 expectedRootHash, in ValueHash256 startingHash, IReadOnlyList accounts, IReadOnlyList proofs = null, in ValueHash256? hashLimit = null!) + public AddRangeResult AddAccountRange( + long blockNumber, + in ValueHash256 expectedRootHash, + in ValueHash256 startingHash, + IReadOnlyList accounts, + IReadOnlyList proofs = null, + in ValueHash256? hashLimit = null!) { + if (accounts.Count == 0) + throw new ArgumentException("Cannot be empty.", nameof(accounts)); ITrieStore store = _trieStorePool.Get(); try { diff --git a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProviderHelper.cs b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProviderHelper.cs index a3aaf5efa10..ea9dfc1f70a 100644 --- a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProviderHelper.cs +++ b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapProviderHelper.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Threading; @@ -31,7 +32,8 @@ public static (AddRangeResult result, bool moreChildrenToRight, List sortedBoundaryList, bool moreChildrenToRight) = diff --git a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapServer.cs b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapServer.cs index ffdba2f1863..e18b9e1e36e 100644 --- a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapServer.cs +++ b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapServer.cs @@ -104,20 +104,20 @@ private bool IsRootMissing(in ValueHash256 stateRoot) default: try { - Hash256 storagePath = new Hash256(requestedPath[0]); + Hash256 storagePath = new Hash256( + requestedPath[0].Length == Hash256.Size + ? requestedPath[0] + : requestedPath[0].PadRight(Hash256.Size)); Account? account = GetAccountByPath(tree, rootHash, requestedPath[0]); if (account is not null) { Hash256? storageRoot = account.StorageRoot; - if (!storageRoot.Bytes.SequenceEqual(Keccak.EmptyTreeHash.Bytes)) - { - StorageTree sTree = new(_store.GetTrieStore(storagePath), storageRoot, _logManager); + StorageTree sTree = new(_store.GetTrieStore(storagePath), storageRoot, _logManager); - for (int reqStorage = 1; reqStorage < requestedPath.Length; reqStorage++) - { - byte[]? sRlp = sTree.GetNodeByPath(Nibbles.CompactToHexEncode(requestedPath[reqStorage])); - response.Add(sRlp); - } + for (int reqStorage = 1; reqStorage < requestedPath.Length; reqStorage++) + { + byte[]? sRlp = sTree.GetNodeByPath(Nibbles.CompactToHexEncode(requestedPath[reqStorage])); + response.Add(sRlp); } } } diff --git a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapSyncDownloader.cs b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapSyncDownloader.cs index 28690a51013..32a6a0392dd 100644 --- a/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapSyncDownloader.cs +++ b/src/Nethermind/Nethermind.Synchronization/SnapSync/SnapSyncDownloader.cs @@ -52,8 +52,6 @@ public async Task Dispatch(PeerInfo peerInfo, SnapSyncBatch batch, CancellationT Logger.Error($"DEBUG/ERROR Error after dispatching the snap sync request. Request: {batch}", e); } } - - await Task.CompletedTask; } } } diff --git a/src/Nethermind/Nethermind.Synchronization/SyncServer.cs b/src/Nethermind/Nethermind.Synchronization/SyncServer.cs index bf00a1ad097..30ed536806e 100644 --- a/src/Nethermind/Nethermind.Synchronization/SyncServer.cs +++ b/src/Nethermind/Nethermind.Synchronization/SyncServer.cs @@ -22,9 +22,7 @@ using Nethermind.Core.Specs; using Nethermind.Int256; using Nethermind.Logging; -using Nethermind.State; using Nethermind.Synchronization.FastSync; -using Nethermind.Synchronization.LesSync; using Nethermind.Synchronization.ParallelSync; using Nethermind.Synchronization.Peers; @@ -44,10 +42,8 @@ public class SyncServer : ISyncServer private readonly ISealValidator _sealValidator; private readonly IReadOnlyKeyValueStore _stateDb; private readonly IReadOnlyKeyValueStore _codeDb; - private readonly IWitnessRepository _witnessRepository; private readonly IGossipPolicy _gossipPolicy; private readonly ISpecProvider _specProvider; - private readonly CanonicalHashTrie? _cht; private bool _gossipStopped = false; private readonly Random _broadcastRandomizer = new(); @@ -67,14 +63,11 @@ public SyncServer( ISyncPeerPool pool, ISyncModeSelector syncModeSelector, ISyncConfig syncConfig, - IWitnessRepository? witnessRepository, IGossipPolicy gossipPolicy, ISpecProvider specProvider, - ILogManager logManager, - CanonicalHashTrie? cht = null) + ILogManager logManager) { ISyncConfig config = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig)); - _witnessRepository = witnessRepository ?? throw new ArgumentNullException(nameof(witnessRepository)); _gossipPolicy = gossipPolicy ?? throw new ArgumentNullException(nameof(gossipPolicy)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _pool = pool ?? throw new ArgumentNullException(nameof(pool)); @@ -86,7 +79,6 @@ public SyncServer( _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator)); _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - _cht = cht; _pivotNumber = config.PivotNumberParsed; _pivotHash = new Hash256(config.PivotHash ?? Keccak.Zero.ToString()); @@ -118,15 +110,7 @@ public BlockHeader? Head } } - public Hash256[]? GetBlockWitnessHashes(Hash256 blockHash) - { - return _witnessRepository.Load(blockHash); - } - - public int GetPeerCount() - { - return _pool.PeerCount; - } + public int GetPeerCount() => _pool.PeerCount; private readonly Guid _sealValidatorUserGuid = Guid.NewGuid(); @@ -403,11 +387,6 @@ public IOwnedReadOnlyList FindHeaders(Hash256 hash, int numberOfBlo return values; } - public BlockHeader FindLowestCommonAncestor(BlockHeader firstDescendant, BlockHeader secondDescendant) - { - return _blockTree.FindLowestCommonAncestor(firstDescendant, secondDescendant, Sync.MaxReorgLength); - } - public Block Find(Hash256 hash) => _blockTree.FindBlock(hash, BlockTreeLookupOptions.TotalDifficultyNotNeeded | BlockTreeLookupOptions.ExcludeTxHashes); public Hash256? FindHash(long number) @@ -466,49 +445,5 @@ public void Dispose() { StopNotifyingPeersAboutNewBlocks(); } - - private readonly object _chtLock = new(); - - // TODO - Cancellation token? - // TODO - not a fan of this function name - CatchUpCHT, AddMissingCHTBlocks, ...? - public Task BuildCHT() - { - return Task.CompletedTask; // removing LES code - -#pragma warning disable 162 - return Task.Run(() => - { - lock (_chtLock) - { - if (_cht is null) - { - throw new InvalidAsynchronousStateException("CHT reference is null when building CHT."); - } - - // Note: The spec says this should be 2048, but I don't think we'd ever want it to be higher than the max reorg depth we allow. - long maxSection = - CanonicalHashTrie.GetSectionFromBlockNo(_blockTree.FindLatestHeader().Number - - Sync.MaxReorgLength); - long maxKnownSection = CanonicalHashTrie.GetMaxSectionIndex(); - - for (long section = (maxKnownSection + 1); section <= maxSection; section++) - { - long sectionStart = section * CanonicalHashTrie.SectionSize; - for (int blockOffset = 0; blockOffset < CanonicalHashTrie.SectionSize; blockOffset++) - { - _cht.Set(_blockTree.FindHeader(sectionStart + blockOffset)); - } - - _cht.Commit(section); - } - } - }); -#pragma warning restore 162 - } - - public CanonicalHashTrie? GetCHT() - { - return _cht; - } } } diff --git a/src/Nethermind/Nethermind.Synchronization/Synchronizer.cs b/src/Nethermind/Nethermind.Synchronization/Synchronizer.cs index eb48d007cac..614ae1e50ea 100644 --- a/src/Nethermind/Nethermind.Synchronization/Synchronizer.cs +++ b/src/Nethermind/Nethermind.Synchronization/Synchronizer.cs @@ -457,7 +457,9 @@ public void Dispose() _syncReport.Dispose(); _fastSyncFeed?.Dispose(); _stateSyncFeed?.Dispose(); + _stateSyncFeed = null; SnapSyncFeed?.Dispose(); + _snapSyncFeed = null; _fullSyncFeed?.Dispose(); HeadersSyncFeed?.Dispose(); BodiesSyncFeed?.Dispose(); diff --git a/src/Nethermind/Nethermind.Synchronization/Trie/HealingWorldState.cs b/src/Nethermind/Nethermind.Synchronization/Trie/HealingWorldState.cs index 6ee9035a88f..3f66fc0de63 100644 --- a/src/Nethermind/Nethermind.Synchronization/Trie/HealingWorldState.cs +++ b/src/Nethermind/Nethermind.Synchronization/Trie/HealingWorldState.cs @@ -9,13 +9,9 @@ namespace Nethermind.Synchronization.Trie; -public class HealingWorldState : WorldState +public class HealingWorldState(ITrieStore trieStore, IKeyValueStore? codeDb, ILogManager? logManager, PreBlockCaches? preBlockCaches = null) + : WorldState(trieStore, codeDb, logManager, new HealingStateTree(trieStore, logManager), new HealingStorageTreeFactory(), preBlockCaches) { - public HealingWorldState(ITrieStore? trieStore, IKeyValueStore? codeDb, ILogManager? logManager) - : base(trieStore, codeDb, logManager, new HealingStateTree(trieStore, logManager), new HealingStorageTreeFactory()) - { - } - public void InitializeNetwork(ITrieNodeRecovery recovery) { StateProviderTree.InitializeNetwork(recovery); diff --git a/src/Nethermind/Nethermind.Test.Runner/BlockchainTestsRunner.cs b/src/Nethermind/Nethermind.Test.Runner/BlockchainTestsRunner.cs index ee23932b43e..efb3b8eeb22 100644 --- a/src/Nethermind/Nethermind.Test.Runner/BlockchainTestsRunner.cs +++ b/src/Nethermind/Nethermind.Test.Runner/BlockchainTestsRunner.cs @@ -35,7 +35,7 @@ public async Task> RunTestsAsync() Setup(); Console.Write($"{test,-120} "); - if (test.LoadFailure != null) + if (test.LoadFailure is not null) { WriteRed(test.LoadFailure); testResults.Add(new EthereumTestResult(test.Name, test.LoadFailure)); diff --git a/src/Nethermind/Nethermind.Trie.Test/Pruning/TreeStoreTests.cs b/src/Nethermind/Nethermind.Trie.Test/Pruning/TreeStoreTests.cs index 2b50fb04dcd..d127da5f076 100644 --- a/src/Nethermind/Nethermind.Trie.Test/Pruning/TreeStoreTests.cs +++ b/src/Nethermind/Nethermind.Trie.Test/Pruning/TreeStoreTests.cs @@ -14,7 +14,6 @@ using Nethermind.Logging; using Nethermind.Serialization.Rlp; using Nethermind.State; -using Nethermind.State.Witnesses; using Nethermind.Trie.Pruning; using NSubstitute; using NUnit.Framework; @@ -682,30 +681,6 @@ public void Will_combine_same_storage() fullTrieStore.IsNodeCached(new Hash256(Nibbles.ToBytes(storage1Nib)), TreePath.Empty, storage1.Keccak).Should().BeTrue(); } - [Test] - public void ReadOnly_store_doesnt_change_witness() - { - TrieNode node = new(NodeType.Leaf); - Account account = new(1, 1, TestItem.KeccakA, Keccak.OfAnEmptyString); - node.Value = _accountDecoder.Encode(account).Bytes; - node.Key = Bytes.FromHexString("abc"); - TreePath emptyPath = TreePath.Empty; - node.ResolveKey(NullTrieNodeResolver.Instance, ref emptyPath, true); - - MemDb originalStore = new MemDb(); - WitnessCollector witnessCollector = new WitnessCollector(new MemDb(), LimboLogs.Instance); - IKeyValueStoreWithBatching store = originalStore.WitnessedBy(witnessCollector); - using TrieStore fullTrieStore = CreateTrieStore(pruningStrategy: new TestPruningStrategy(false), kvStore: store); - IScopedTrieStore trieStore = fullTrieStore.GetTrieStore(null); - trieStore.CommitNode(0, new NodeCommitInfo(node, TreePath.Empty)); - trieStore.FinishBlockCommit(TrieType.State, 0, node); - - IReadOnlyTrieStore readOnlyTrieStore = fullTrieStore.AsReadOnly(new NodeStorage(originalStore)); - readOnlyTrieStore.LoadRlp(null, TreePath.Empty, node.Keccak); - - witnessCollector.Collected.Should().BeEmpty(); - } - [TestCase(true)] [TestCase(false, Explicit = true)] public async Task Read_only_trie_store_is_allowing_many_thread_to_work_with_the_same_node(bool beThreadSafe) diff --git a/src/Nethermind/Nethermind.Trie.Test/TrieTests.cs b/src/Nethermind/Nethermind.Trie.Test/TrieTests.cs index 47953a99e84..0d9e05c1e1f 100644 --- a/src/Nethermind/Nethermind.Trie.Test/TrieTests.cs +++ b/src/Nethermind/Nethermind.Trie.Test/TrieTests.cs @@ -1013,7 +1013,7 @@ public void Fuzz_accounts_with_storage( MemDb memDb = new(); using TrieStore trieStore = new(memDb, Prune.WhenCacheReaches(1.MB()), Persist.IfBlockOlderThan(lookupLimit), _logManager); - WorldState stateProvider = new(trieStore, new MemDb(), _logManager); + WorldState stateProvider = new WorldState(trieStore, new MemDb(), _logManager); Account[] accounts = new Account[accountsCount]; Address[] addresses = new Address[accountsCount]; @@ -1062,7 +1062,7 @@ public void Fuzz_accounts_with_storage( address, existing.Balance - account.Balance, MuirGlacier.Instance); } - stateProvider.IncrementNonce(address); + stateProvider.IncrementNonce(address, UInt256.One); } byte[] storage = new byte[1]; diff --git a/src/Nethermind/Nethermind.Trie/INodeStorage.cs b/src/Nethermind/Nethermind.Trie/INodeStorage.cs index 0deb378ec00..91f8abc08d6 100644 --- a/src/Nethermind/Nethermind.Trie/INodeStorage.cs +++ b/src/Nethermind/Nethermind.Trie/INodeStorage.cs @@ -31,6 +31,7 @@ public interface INodeStorage /// Used by StateSync to make sure values are flushed. ///
void Flush(); + void Compact(); public enum KeyScheme { diff --git a/src/Nethermind/Nethermind.Trie/NodeStorage.cs b/src/Nethermind/Nethermind.Trie/NodeStorage.cs index c15dc6f2f38..066b5c19fb8 100644 --- a/src/Nethermind/Nethermind.Trie/NodeStorage.cs +++ b/src/Nethermind/Nethermind.Trie/NodeStorage.cs @@ -119,11 +119,11 @@ private static Span GetHashBasedStoragePath(Span pathSpan, in ValueH if (Scheme == INodeStorage.KeyScheme.HalfPath && (readFlags & ReadFlags.HintReadAhead) != 0) { - if (address == null && path.Length > TopStateBoundary) + if (address is null && path.Length > TopStateBoundary) { readFlags |= ReadFlags.HintReadAhead2; } - else if (address != null) + else if (address is not null) { readFlags |= ReadFlags.HintReadAhead3; } @@ -192,6 +192,14 @@ public void Flush() } } + public void Compact() + { + if (_keyValueStore is IDb db) + { + db.Compact(); + } + } + private class WriteBatch : INodeStorage.WriteBatch { private readonly IWriteBatch _writeBatch; diff --git a/src/Nethermind/Nethermind.Trie/NodeStorageFactory.cs b/src/Nethermind/Nethermind.Trie/NodeStorageFactory.cs index 579ad4be2af..113dbe5caa8 100644 --- a/src/Nethermind/Nethermind.Trie/NodeStorageFactory.cs +++ b/src/Nethermind/Nethermind.Trie/NodeStorageFactory.cs @@ -27,7 +27,7 @@ public NodeStorageFactory(INodeStorage.KeyScheme preferredKeyScheme, ILogManager public void DetectCurrentKeySchemeFrom(IDb mainStateDb) { _currentKeyScheme = DetectKeyScheme(mainStateDb); - if (_currentKeyScheme == null) + if (_currentKeyScheme is null) { _logger.Info("No current state db key scheme."); } diff --git a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs index 1e2f0ea6d21..d66e5a56d85 100644 --- a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs +++ b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs @@ -14,6 +14,7 @@ using System.Threading.Tasks; using Nethermind.Core; using Nethermind.Core.Buffers; +using Nethermind.Core.Cpu; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Logging; @@ -227,7 +228,7 @@ private void Commit(NodeCommitInfo nodeCommitInfo, bool skipSelf = false) if (nodesToCommit.Count >= 4) { ClearExceptions(); - Parallel.For(0, nodesToCommit.Count, i => + Parallel.For(0, nodesToCommit.Count, RuntimeInformation.ParallelOptionsLogicalCores, i => { try { @@ -345,10 +346,10 @@ void TraceSkipInlineNode(TrieNode node) } } - public void UpdateRootHash() + public void UpdateRootHash(bool canBeParallel = true) { TreePath path = TreePath.Empty; - RootRef?.ResolveKey(TrieStore, ref path, isRoot: true, bufferPool: _bufferPool); + RootRef?.ResolveKey(TrieStore, ref path, isRoot: true, bufferPool: _bufferPool, canBeParallel); SetRootHash(RootRef?.Keccak ?? EmptyTreeHash, false); } @@ -380,7 +381,7 @@ public virtual ReadOnlySpan Get(ReadOnlySpan rawKey, Hash256? rootHa Nibbles.BytesToNibbleBytes(rawKey, nibbles); TreePath updatePathTreePath = TreePath.Empty; // Only used on update. - ref readonly CappedArray result = ref Run(nibbles, nibblesCount, ref updatePathTreePath, in CappedArray.Empty, isUpdate: false, startRootHash: rootHash); + ref readonly CappedArray result = ref Run(ref updatePathTreePath, in CappedArray.Empty, nibbles, isUpdate: false, startRootHash: rootHash); if (array is not null) ArrayPool.Shared.Return(array); return result.AsSpan(); @@ -397,9 +398,8 @@ public virtual ReadOnlySpan Get(ReadOnlySpan rawKey, Hash256? rootHa { try { - int nibblesCount = nibbles.Length; TreePath updatePathTreePath = TreePath.Empty; // Only used on update. - CappedArray result = Run(nibbles, nibblesCount, ref updatePathTreePath, Array.Empty(), false, startRootHash: rootHash, + CappedArray result = Run(ref updatePathTreePath, in CappedArray.Empty, nibbles, false, startRootHash: rootHash, isNodeRead: true); return result.ToArray() ?? Array.Empty(); } @@ -423,7 +423,7 @@ public virtual ReadOnlySpan Get(ReadOnlySpan rawKey, Hash256? rootHa [..nibblesCount]; // Slice to exact size; Nibbles.BytesToNibbleBytes(rawKey, nibbles); TreePath updatePathTreePath = TreePath.Empty; // Only used on update. - CappedArray result = Run(nibbles, nibblesCount, ref updatePathTreePath, Array.Empty(), false, startRootHash: rootHash, + CappedArray result = Run(ref updatePathTreePath, in CappedArray.Empty, nibbles, false, startRootHash: rootHash, isNodeRead: true); if (array is not null) ArrayPool.Shared.Return(array); return result.ToArray() ?? Array.Empty(); @@ -506,7 +506,7 @@ public virtual void Set(ReadOnlySpan rawKey, in CappedArray value) // lazy stack cleaning after the previous update ClearNodeStack(); TreePath updatePathTreePath = TreePath.FromPath(rawKey); // Only used on update. - Run(nibbles, nibblesCount, ref updatePathTreePath, in value, isUpdate: true); + Run(ref updatePathTreePath, in value, nibbles, isUpdate: true); if (array is not null) ArrayPool.Shared.Return(array); } @@ -531,27 +531,28 @@ static void ThrowNonConcurrentWrites() [DebuggerStepThrough] public void Set(ReadOnlySpan rawKey, Rlp? value) { - Set(rawKey, value is null ? Array.Empty() : value.Bytes); + if (value is null) + { + Set(rawKey, in CappedArray.Empty); + } + else + { + CappedArray valueBytes = new(value.Bytes); + Set(rawKey, in valueBytes); + } } private ref readonly CappedArray Run( - Span updatePath, - int nibblesCount, ref TreePath updatePathTreePath, in CappedArray updateValue, + Span updatePath, bool isUpdate, bool ignoreMissingDelete = true, Hash256? startRootHash = null, bool isNodeRead = false) { -#if DEBUG - if (nibblesCount != updatePath.Length) - { - throw new Exception("Does it ever happen?"); - } -#endif TraverseContext traverseContext = - new(updatePath[..nibblesCount], ref updatePathTreePath, updateValue, isUpdate, ignoreMissingDelete, isNodeRead: isNodeRead); + new(updatePath, ref updatePathTreePath, updateValue, isUpdate, ignoreMissingDelete, isNodeRead: isNodeRead); if (startRootHash is not null) { @@ -571,7 +572,7 @@ ref TraverseBranches(startNode, ref startingPath, traverseContext) : if (traverseContext.UpdateValue.IsNotNull) { if (_logger.IsTrace) TraceNewLeaf(in traverseContext); - byte[] key = updatePath[..nibblesCount].ToArray(); + byte[] key = updatePath.ToArray(); RootRef = TrieNodeFactory.CreateLeaf(key, in traverseContext.UpdateValue); } @@ -1356,7 +1357,7 @@ Hash256 DecodeStorageRoot(Hash256 root, Hash256 address) ? new TrieNodeResolverWithReadFlags(TrieStore, flags) : TrieStore; - if (storageAddr != null) + if (storageAddr is not null) { resolver = resolver.GetStorageTrieNodeResolver(storageAddr); } diff --git a/src/Nethermind/Nethermind.Trie/PreCachedTrieStore.cs b/src/Nethermind/Nethermind.Trie/PreCachedTrieStore.cs new file mode 100644 index 00000000000..564d9167547 --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/PreCachedTrieStore.cs @@ -0,0 +1,121 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Concurrent; +using System.Numerics; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Trie.Pruning; + +namespace Nethermind.Trie; + +public class PreCachedTrieStore : ITrieStore +{ + private readonly ITrieStore _inner; + private readonly ConcurrentDictionary _preBlockCache; + private readonly Func _loadRlp; + private readonly Func _tryLoadRlp; + + public PreCachedTrieStore(ITrieStore inner, + ConcurrentDictionary preBlockCache) + { + _inner = inner; + _preBlockCache = preBlockCache; + + // Capture the delegate once for default path to avoid the allocation of the lambda per call + _loadRlp = (NodeKey key) => _inner.LoadRlp(key.Address, in key.Path, key.Hash, flags: ReadFlags.None); + _tryLoadRlp = (NodeKey key) => _inner.TryLoadRlp(key.Address, in key.Path, key.Hash, flags: ReadFlags.None); + } + + public void Dispose() + { + _inner.Dispose(); + } + + public void CommitNode(long blockNumber, Hash256? address, in NodeCommitInfo nodeCommitInfo, WriteFlags writeFlags = WriteFlags.None) + { + _inner.CommitNode(blockNumber, address, in nodeCommitInfo, writeFlags); + } + + public void FinishBlockCommit(TrieType trieType, long blockNumber, Hash256? address, TrieNode? root, WriteFlags writeFlags = WriteFlags.None) + { + _inner.FinishBlockCommit(trieType, blockNumber, address, root, writeFlags); + _preBlockCache.Clear(); + } + + public bool IsPersisted(Hash256? address, in TreePath path, in ValueHash256 keccak) + { + byte[]? rlp = _preBlockCache.GetOrAdd(new(address, in path, in keccak), + key => _inner.TryLoadRlp(key.Address, in key.Path, key.Hash)); + + return rlp is not null; + } + + public IReadOnlyTrieStore AsReadOnly(INodeStorage? keyValueStore = null) => _inner.AsReadOnly(keyValueStore); + + public event EventHandler? ReorgBoundaryReached + { + add => _inner.ReorgBoundaryReached += value; + remove => _inner.ReorgBoundaryReached -= value; + } + + public IReadOnlyKeyValueStore TrieNodeRlpStore => _inner.TrieNodeRlpStore; + + public void Set(Hash256? address, in TreePath path, in ValueHash256 keccak, byte[] rlp) + { + _preBlockCache[new(address, in path, in keccak)] = rlp; + _inner.Set(address, in path, in keccak, rlp); + } + + public bool HasRoot(Hash256 stateRoot) => _inner.HasRoot(stateRoot); + + public IScopedTrieStore GetTrieStore(Hash256? address) => new ScopedTrieStore(this, address); + + public TrieNode FindCachedOrUnknown(Hash256? address, in TreePath path, Hash256 hash) => _inner.FindCachedOrUnknown(address, in path, hash); + + public byte[]? LoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => + _preBlockCache.GetOrAdd(new(address, in path, hash), + flags == ReadFlags.None ? _loadRlp : + key => _inner.LoadRlp(key.Address, in key.Path, key.Hash, flags)); + + public byte[]? TryLoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => + _preBlockCache.GetOrAdd(new(address, in path, hash), + flags == ReadFlags.None ? _tryLoadRlp : + key => _inner.TryLoadRlp(key.Address, in key.Path, key.Hash, flags)); + + public INodeStorage.KeyScheme Scheme => _inner.Scheme; +} + +public class NodeKey : IEquatable +{ + public readonly Hash256? Address; + public readonly TreePath Path; + public readonly Hash256 Hash; + + public NodeKey(Hash256? address, in TreePath path, in ValueHash256 hash) + { + Address = address; + Path = path; + Hash = hash.ToCommitment(); + } + + public NodeKey(Hash256? address, in TreePath path, Hash256 hash) + { + Address = address; + Path = path; + Hash = hash; + } + + public bool Equals(NodeKey? other) => + other is not null && Address == other.Address && Path.Equals(in other.Path) && Hash.Equals(other.Hash); + + public override bool Equals(object? obj) => obj is NodeKey key && Equals(key); + + public override int GetHashCode() + { + uint hashCode0 = (uint)Hash.GetHashCode(); + ulong hashCode1 = ((ulong)(uint)Path.GetHashCode() << 32) | (uint)(Address?.GetHashCode() ?? 1); + return (int)BitOperations.Crc32C(hashCode0, hashCode1); + } +} diff --git a/src/Nethermind/Nethermind.Trie/Pruning/BlockCommitPackage.cs b/src/Nethermind/Nethermind.Trie/Pruning/BlockCommitPackage.cs index 0faf5ac6634..3ea7daf397a 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/BlockCommitPackage.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/BlockCommitPackage.cs @@ -9,7 +9,7 @@ internal class BlockCommitSet public TrieNode? Root { get; private set; } - public bool IsSealed => Root != null; + public bool IsSealed => Root is not null; public BlockCommitSet(long blockNumber) { diff --git a/src/Nethermind/Nethermind.Trie/Pruning/OverlayTrieStore.cs b/src/Nethermind/Nethermind.Trie/Pruning/OverlayTrieStore.cs new file mode 100644 index 00000000000..50977e6ec5d --- /dev/null +++ b/src/Nethermind/Nethermind.Trie/Pruning/OverlayTrieStore.cs @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Logging; + +namespace Nethermind.Trie.Pruning; + +public class OverlayTrieStore(IKeyValueStoreWithBatching? keyValueStore, IReadOnlyTrieStore store, ILogManager? logManager) : TrieStore(keyValueStore, logManager) +{ + public override bool IsPersisted(Hash256? address, in TreePath path, in ValueHash256 keccak) => + base.IsPersisted(address, in path, in keccak) || store.IsPersisted(address, in path, in keccak); + + public override TrieNode FindCachedOrUnknown(Hash256? address, in TreePath path, Hash256? hash) + { + TrieNode node = base.FindCachedOrUnknown(address, in path, hash); + return node.NodeType == NodeType.Unknown ? store.FindCachedOrUnknown(address, in path, hash) : node; + } + + public override byte[]? LoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => + base.TryLoadRlp(address, in path, hash, flags) ?? store.LoadRlp(address, in path, hash, flags); + + public override byte[]? TryLoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => + base.TryLoadRlp(address, in path, hash, flags) ?? store.TryLoadRlp(address, in path, hash, flags); +} diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs b/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs index a7ef7f5865d..de1d3bcc3bc 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs @@ -11,6 +11,7 @@ namespace Nethermind.Trie; /// /// Like TreePath, but tiny. Fit in 8 byte, like a long. Can only represent 14 nibble. /// +[StructLayout(LayoutKind.Auto)] public readonly struct TinyTreePath : IEquatable { public const int MaxNibbleLength = 14; @@ -41,6 +42,17 @@ public TreePath ToTreePath() } public bool Equals(TinyTreePath other) => _data == other._data; + public bool Equals(in TinyTreePath other) => _data == other._data; public override bool Equals(object? obj) => obj is TinyTreePath other && Equals(other); public override int GetHashCode() => _data.GetHashCode(); + + public static bool operator ==(in TinyTreePath left, in TinyTreePath right) + { + return left.Equals(in right); + } + + public static bool operator !=(in TinyTreePath left, in TinyTreePath right) + { + return !(left == right); + } } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TreePath.cs b/src/Nethermind/Nethermind.Trie/Pruning/TreePath.cs index 5ed20c3a582..ba768f5844a 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/TreePath.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/TreePath.cs @@ -22,7 +22,7 @@ namespace Nethermind.Trie; ///
[Todo("check if its worth it to change the length to byte, or if it actually make things slower.")] [Todo("check if its worth it to not clear byte during TruncateMut, but will need proper comparator, span copy, etc.")] -public struct TreePath +public struct TreePath : IEquatable { public const int MemorySize = 36; public ValueHash256 Path; @@ -259,9 +259,11 @@ public readonly bool Equals(in TreePath other) return Length == other.Length && Path.Equals(in other.Path); } + public readonly bool Equals(TreePath other) => Equals(in other); + public readonly override bool Equals(object? obj) { - return obj is TreePath other && Equals(other); + return obj is TreePath other && Equals(in other); } public readonly override int GetHashCode() diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs b/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs index 99576941087..a30a83402a9 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/TrieStore.cs @@ -21,6 +21,7 @@ namespace Nethermind.Trie.Pruning { + using Nethermind.Core.Cpu; /// /// Trie store helps to manage trie commits block by block. /// If persistence and pruning are needed they have a chance to execute their behaviour on commits. @@ -88,7 +89,7 @@ public TrieNode FromCachedRlpOrUnknown(in Key key) // we returning a copy to avoid multithreaded access trieNode = new TrieNode(NodeType.Unknown, key.Keccak, trieNode.FullRlp); - trieNode.ResolveNode(_trieStore.GetTrieStore(key.Address), key.Path); + trieNode.ResolveNode(_trieStore.GetTrieStore(key.AddressAsHash256), key.Path); trieNode.Keccak = key.Keccak; Metrics.LoadedFromCacheNodesCount++; @@ -108,8 +109,11 @@ void Trace(TrieNode trieNode) } } - private readonly ConcurrentDictionary _byKeyObjectCache = new(); - private readonly ConcurrentDictionary _byHashObjectCache = new(); + private static readonly int _concurrencyLevel = HashHelpers.GetPrime(Environment.ProcessorCount * 4); + private static readonly int _initialBuckets = HashHelpers.GetPrime(Math.Max(31, Environment.ProcessorCount * 16)); + + private readonly ConcurrentDictionary _byKeyObjectCache = new(_concurrencyLevel, _initialBuckets); + private readonly ConcurrentDictionary _byHashObjectCache = new(_concurrencyLevel, _initialBuckets); public bool IsNodeCached(in Key key) { @@ -211,13 +215,20 @@ public void Clear() internal readonly struct Key : IEquatable { internal const long MemoryUsage = 8 + 36 + 8; // (address (probably shared), path, keccak pointer (shared with TrieNode)) - public Hash256? Address { get; } + public readonly ValueHash256 Address; + public Hash256? AddressAsHash256 => Address == default ? null : Address.ToCommitment(); // Direct member rather than property for large struct, so members are called directly, // rather than struct copy through the property. Could also return a ref through property. public readonly TreePath Path; public Hash256 Keccak { get; } public Key(Hash256? address, in TreePath path, Hash256 keccak) + { + Address = address ?? default; + Path = path; + Keccak = keccak; + } + public Key(in ValueHash256 address, in TreePath path, Hash256 keccak) { Address = address; Path = path; @@ -227,13 +238,7 @@ public Key(Hash256? address, in TreePath path, Hash256 keccak) [SkipLocalsInit] public override int GetHashCode() { - Hash256? address = Address; - var addressHash = 0; - if (address is not null) - { - addressHash = address.ValueHash256.GetHashCode(); - } - + var addressHash = Address != default ? Address.GetHashCode() : 1; return Keccak.ValueHash256.GetChainedHashCode((uint)Path.GetHashCode()) ^ addressHash; } @@ -276,11 +281,11 @@ public readonly void Dispose() // Track some of the persisted path hash. Used to be able to remove keys when it is replaced. // If null, disable removing key. - private LruCache? _pastPathHash; + private LruCacheLowObject? _pastPathHash; // Track ALL of the recently re-committed persisted nodes. This is so that we don't accidentally remove // recommitted persisted nodes (which will not get re-persisted). - private ConcurrentDictionary _persistedLastSeens = new(); + private NonBlocking.ConcurrentDictionary _persistedLastSeens = new(); private bool _lastPersistedReachedReorgBoundary; private Task _pruningTask = Task.CompletedTask; @@ -589,9 +594,9 @@ static void ThrowMissingNode(Hash256 keccak) } public virtual byte[]? LoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => LoadRlp(address, path, hash, null, flags); - public byte[]? TryLoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => TryLoadRlp(address, path, hash, null, flags); + public virtual byte[]? TryLoadRlp(Hash256? address, in TreePath path, Hash256 hash, ReadFlags flags = ReadFlags.None) => TryLoadRlp(address, path, hash, null, flags); - public bool IsPersisted(Hash256? address, in TreePath path, in ValueHash256 keccak) + public virtual bool IsPersisted(Hash256? address, in TreePath path, in ValueHash256 keccak) { byte[]? rlp = _nodeStorage.Get(address, path, keccak, ReadFlags.None); @@ -609,9 +614,8 @@ public IReadOnlyTrieStore AsReadOnly(INodeStorage? store) => new ReadOnlyTrieStore(this, store); public bool IsNodeCached(Hash256? address, in TreePath path, Hash256? hash) => _dirtyNodes.IsNodeCached(new DirtyNodesCache.Key(address, path, hash)); - private bool IsNodeCached(DirtyNodesCache.Key key) => _dirtyNodes.IsNodeCached(key); - public TrieNode FindCachedOrUnknown(Hash256? address, in TreePath path, Hash256? hash) => + public virtual TrieNode FindCachedOrUnknown(Hash256? address, in TreePath path, Hash256? hash) => FindCachedOrUnknown(address, path, hash, false); internal TrieNode FindCachedOrUnknown(Hash256? address, in TreePath path, Hash256? hash, bool isReadOnly) @@ -649,7 +653,8 @@ public void Prune() Stopwatch sw = Stopwatch.StartNew(); if (_logger.IsDebug) _logger.Debug($"Locked {nameof(TrieStore)} for pruning."); - if (!_pruningTaskCancellationTokenSource.IsCancellationRequested && _pruningStrategy.ShouldPrune(MemoryUsedByDirtyCache)) + long memoryUsedByDirtyCache = MemoryUsedByDirtyCache; + if (!_pruningTaskCancellationTokenSource.IsCancellationRequested && _pruningStrategy.ShouldPrune(memoryUsedByDirtyCache)) { // Most of the time in memory pruning is on `PrunePersistedRecursively`. So its // usually faster to just SaveSnapshot causing most of the entry to be persisted. @@ -667,10 +672,10 @@ public void Prune() SaveSnapshot(); PruneCache(); - } - Metrics.PruningTime = sw.ElapsedMilliseconds; - if (_logger.IsInfo) _logger.Info($"Executed memory prune. Took {sw.Elapsed.TotalSeconds:0.##} seconds."); + Metrics.PruningTime = sw.ElapsedMilliseconds; + if (_logger.IsInfo) _logger.Info($"Executed memory prune. Took {sw.Elapsed.TotalSeconds:0.##} seconds. From {memoryUsedByDirtyCache / 1.MiB()}MB to {MemoryUsedByDirtyCache / 1.MiB()}MB"); + } } } @@ -717,7 +722,7 @@ private bool SaveSnapshot() bool shouldDeletePersistedNode = // Its disabled - _pastPathHash != null && + _pastPathHash is not null && // Full pruning need to visit all node, so can't delete anything. !_persistenceStrategy.IsFullPruning && // If more than one candidate set, its a reorg, we can't remove node as persisted node may not be canonical @@ -765,12 +770,12 @@ private bool SaveSnapshot() private void RemovePastKeys(Dictionary? persistedHashes) { - if (persistedHashes == null) return; + if (persistedHashes is null) return; - bool CanRemove(Hash256? address, TinyTreePath path, in TreePath fullPath, ValueHash256 keccak, Hash256? currentlyPersistingKeccak) + bool CanRemove(in ValueHash256 address, TinyTreePath path, in TreePath fullPath, in ValueHash256 keccak, Hash256? currentlyPersistingKeccak) { // Multiple current hash that we don't keep track for simplicity. Just ignore this case. - if (currentlyPersistingKeccak == null) return false; + if (currentlyPersistingKeccak is null) return false; // The persisted hash is the same as currently persisting hash. Do nothing. if (currentlyPersistingKeccak == keccak) return false; @@ -786,32 +791,48 @@ bool CanRemove(Hash256? address, TinyTreePath path, in TreePath fullPath, ValueH return true; } - using INodeStorage.WriteBatch writeBatch = _nodeStorage.StartWriteBatch(); + ActionBlock actionBlock = + new ActionBlock(static (batch) => batch.Dispose()); - void DoAct(KeyValuePair keyValuePair) + INodeStorage.WriteBatch writeBatch = _nodeStorage.StartWriteBatch(); + try { - HashAndTinyPath key = keyValuePair.Key; - if (_pastPathHash.TryGet(new(key.addr, in key.path), out ValueHash256 prevHash)) + int round = 0; + foreach (KeyValuePair keyValuePair in persistedHashes) { - TreePath fullPath = key.path.ToTreePath(); // Micro op to reduce double convert - if (CanRemove(key.addr, key.path, fullPath, prevHash, keyValuePair.Value)) + HashAndTinyPath key = keyValuePair.Key; + if (_pastPathHash.TryGet(key, out ValueHash256 prevHash)) { - Metrics.RemovedNodeCount++; - writeBatch.Remove(key.addr, fullPath, prevHash); + TreePath fullPath = key.path.ToTreePath(); // Micro op to reduce double convert + if (CanRemove(key.addr, key.path, fullPath, prevHash, keyValuePair.Value)) + { + Metrics.RemovedNodeCount++; + Hash256? address = key.addr == default ? null : key.addr.ToCommitment(); + writeBatch.Set(address, fullPath, prevHash, default, WriteFlags.DisableWAL); + round++; + } + } + + // Batches of 256 + if (round > 256) + { + actionBlock.Post(writeBatch); + writeBatch = _nodeStorage.StartWriteBatch(); + round = 0; } } } - - ActionBlock> actionBlock = - new ActionBlock>(DoAct); - - foreach (KeyValuePair keyValuePair in persistedHashes) + catch (Exception ex) { - actionBlock.Post(keyValuePair); + if (_logger.IsError) _logger.Error($"Failed to remove past keys. {ex}"); + } + finally + { + writeBatch.Dispose(); + actionBlock.Complete(); + actionBlock.Completion.Wait(); + _nodeStorage.Compact(); } - - actionBlock.Complete(); - actionBlock.Completion.Wait(); } /// @@ -843,7 +864,7 @@ private void PruneCache(bool skipRecalculateMemory = false) Stopwatch stopwatch = Stopwatch.StartNew(); // Run in parallel - bool shouldTrackPersistedNode = _pastPathHash != null && !_persistenceStrategy.IsFullPruning; + bool shouldTrackPersistedNode = _pastPathHash is not null && !_persistenceStrategy.IsFullPruning; ActionBlock<(DirtyNodesCache.Key key, TrieNode node)>? trackNodesAction = shouldTrackPersistedNode ? new ActionBlock<(DirtyNodesCache.Key key, TrieNode node)>( entry => TrackPrunedPersistedNodes(entry.key, entry.node)) @@ -869,7 +890,7 @@ private void PruneCache(bool skipRecalculateMemory = false) if (keccak is null) { TreePath path2 = key.Path; - keccak = node.GenerateKey(this.GetTrieStore(key.Address), ref path2, isRoot: true); + keccak = node.GenerateKey(this.GetTrieStore(key.AddressAsHash256), ref path2, isRoot: true); if (keccak != key.Keccak) { throw new InvalidOperationException($"Persisted {node} {key} != {keccak}"); @@ -916,7 +937,7 @@ private void TrackPrunedPersistedNodes(in DirtyNodesCache.Key key, TrieNode node TinyTreePath treePath = new(key.Path); // Persisted node with LastSeen is a node that has been re-committed, likely due to processing // recalculated to the same hash. - if (node.LastSeen != null) + if (node.LastSeen is not null) { // Update _persistedLastSeen to later value. _persistedLastSeens.AddOrUpdate( @@ -1016,7 +1037,7 @@ private void PersistBlockCommitSet( { void PersistNode(TrieNode tn, Hash256? address2, TreePath path) { - if (persistedHashes != null && path.Length <= TinyTreePath.MaxNibbleLength) + if (persistedHashes is not null && path.Length <= TinyTreePath.MaxNibbleLength) { HashAndTinyPath key = new(address2, new TinyTreePath(path)); ref Hash256? hash = ref CollectionsMarshal.GetValueRefOrAddDefault(persistedHashes, key, out bool exists); @@ -1243,10 +1264,10 @@ void ClearCommitSetQueue() PruneCache(); KeyValuePair[] nodesCopy = _dirtyNodes.AllNodes.ToArray(); - ConcurrentDictionary wasPersisted = new(); + NonBlocking.ConcurrentDictionary wasPersisted = new(); void PersistNode(TrieNode n, Hash256? address, TreePath path) { - if (n.Keccak == null) return; + if (n.Keccak is null) return; DirtyNodesCache.Key key = new DirtyNodesCache.Key(address, path, n.Keccak); if (wasPersisted.TryAdd(key, true)) { @@ -1254,12 +1275,13 @@ void PersistNode(TrieNode n, Hash256? address, TreePath path) n.IsPersisted = true; } } - Parallel.For(0, nodesCopy.Length, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount / 2 }, i => + Parallel.For(0, nodesCopy.Length, RuntimeInformation.ParallelOptionsPhysicalCores, i => { if (cancellationToken.IsCancellationRequested) return; DirtyNodesCache.Key key = nodesCopy[i].Key; TreePath path = key.Path; - nodesCopy[i].Value.CallRecursively(PersistNode, key.Address, ref path, GetTrieStore(key.Address), false, _logger, false); + Hash256? address = key.AddressAsHash256; + nodesCopy[i].Value.CallRecursively(PersistNode, address, ref path, GetTrieStore(address), false, _logger, false); }); PruneCache(); @@ -1319,43 +1341,185 @@ public bool HasRoot(Hash256 stateRoot) return true; } - private readonly struct HashAndTinyPath(Hash256? hash, in TinyTreePath path) : IEquatable + [StructLayout(LayoutKind.Auto)] + private readonly struct HashAndTinyPath : IEquatable { - public readonly Hash256? addr = hash; - public readonly TinyTreePath path = path; + public readonly ValueHash256 addr; + public readonly TinyTreePath path; + + public HashAndTinyPath(Hash256? hash, in TinyTreePath path) + { + addr = hash ?? default; + this.path = path; + } + public HashAndTinyPath(in ValueHash256 hash, in TinyTreePath path) + { + addr = hash; + this.path = path; + } - public bool Equals(HashAndTinyPath other) => addr == other.addr && path.Equals(other.path); + public bool Equals(HashAndTinyPath other) => addr == other.addr && path.Equals(in other.path); public override bool Equals(object? obj) => obj is HashAndTinyPath other && Equals(other); public override int GetHashCode() { - Hash256? address = addr; - var addressHash = 0; - if (address is not null) - { - addressHash = address.ValueHash256.GetHashCode(); - } + var addressHash = addr != default ? addr.GetHashCode() : 1; return path.GetHashCode() ^ addressHash; } } - private readonly struct HashAndTinyPathAndHash(Hash256? hash, in TinyTreePath path, in ValueHash256 valueHash) : IEquatable + [StructLayout(LayoutKind.Auto)] + private readonly struct HashAndTinyPathAndHash : IEquatable { - public readonly Hash256? hash = hash; - public readonly TinyTreePath path = path; - public readonly ValueHash256 valueHash = valueHash; + public readonly ValueHash256 hash; + public readonly TinyTreePath path; + public readonly ValueHash256 valueHash; + + public HashAndTinyPathAndHash(Hash256? hash, in TinyTreePath path, in ValueHash256 valueHash) + { + this.hash = hash ?? default; + this.path = path; + this.valueHash = valueHash; + } + public HashAndTinyPathAndHash(in ValueHash256 hash, in TinyTreePath path, in ValueHash256 valueHash) + { + this.hash = hash; + this.path = path; + this.valueHash = valueHash; + } - public bool Equals(HashAndTinyPathAndHash other) => hash == other.hash && path.Equals(other.path) && valueHash.Equals(in other.valueHash); + public bool Equals(HashAndTinyPathAndHash other) => hash == other.hash && path.Equals(in other.path) && valueHash.Equals(in other.valueHash); public override bool Equals(object? obj) => obj is HashAndTinyPath other && Equals(other); public override int GetHashCode() { - var hashHash = 0; - if (hash is not null) + var hashHash = hash != default ? hash.GetHashCode() : 1; + return valueHash.GetChainedHashCode((uint)path.GetHashCode()) ^ hashHash; + } + } + + internal static class HashHelpers + { + private const int HashPrime = 101; + + private static bool IsPrime(int candidate) + { + if ((candidate & 1) != 0) { - hashHash = hash.ValueHash256.GetHashCode(); + int limit = (int)Math.Sqrt(candidate); + for (int divisor = 3; divisor <= limit; divisor += 2) + { + if ((candidate % divisor) == 0) + return false; + } + return true; } + return candidate == 2; + } - return valueHash.GetChainedHashCode((uint)path.GetHashCode()) ^ hashHash; + public static int GetPrime(int min) + { + foreach (int prime in Primes) + { + if (prime >= min) + return prime; + } + + // Outside of our predefined table. Compute the hard way. + for (int i = (min | 1); i < int.MaxValue; i += 2) + { + if (IsPrime(i) && ((i - 1) % HashPrime != 0)) + return i; + } + return min; } + + // Table of prime numbers to use as hash table sizes. + // A typical resize algorithm would pick the smallest prime number in this array + // that is larger than twice the previous capacity. + // Suppose our Hashtable currently has capacity x and enough elements are added + // such that a resize needs to occur. Resizing first computes 2x then finds the + // first prime in the table greater than 2x, i.e. if primes are ordered + // p_1, p_2, ..., p_i, ..., it finds p_n such that p_n-1 < 2x < p_n. + // Doubling is important for preserving the asymptotic complexity of the + // hashtable operations such as add. Having a prime guarantees that double + // hashing does not lead to infinite loops. IE, your hash function will be + // h1(key) + i*h2(key), 0 <= i < size. h2 and the size must be relatively prime. + // We prefer the low computation costs of higher prime numbers over the increased + // memory allocation of a fixed prime number i.e. when right sizing a HashSet. + private static ReadOnlySpan Primes => + [ + 3, + 7, + 11, + 17, + 23, + 29, + 37, + 47, + 59, + 71, + 89, + 107, + 131, + 163, + 197, + 239, + 293, + 353, + 431, + 521, + 631, + 761, + 919, + 1103, + 1327, + 1597, + 1931, + 2333, + 2801, + 3371, + 4049, + 4861, + 5839, + 7013, + 8419, + 10103, + 12143, + 14591, + 17519, + 21023, + 25229, + 30293, + 36353, + 43627, + 52361, + 62851, + 75431, + 90523, + 108631, + 130363, + 156437, + 187751, + 225307, + 270371, + 324449, + 389357, + 467237, + 560689, + 672827, + 807403, + 968897, + 1162687, + 1395263, + 1674319, + 2009191, + 2411033, + 2893249, + 3471899, + 4166287, + 4999559, + 5999471, + 7199369 + ]; } } } diff --git a/src/Nethermind/Nethermind.Trie/RangeQueryVisitor.cs b/src/Nethermind/Nethermind.Trie/RangeQueryVisitor.cs index 4301869c26e..b6ec647fec3 100644 --- a/src/Nethermind/Nethermind.Trie/RangeQueryVisitor.cs +++ b/src/Nethermind/Nethermind.Trie/RangeQueryVisitor.cs @@ -17,6 +17,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Threading; using Nethermind.Core; using Nethermind.Core.Buffers; @@ -39,10 +40,8 @@ public class RangeQueryVisitor : ITreeVisitor, IDisposable private readonly ILeafValueCollector _valueCollector; // For determining proofs - private (TreePath, TrieNode)?[] _leftmostNodes = new (TreePath, TrieNode)?[65]; - private (TreePath, TrieNode)?[] _rightmostNodes = new (TreePath, TrieNode)?[65]; - private (TreePath, TrieNode)? _leftLeafProof = null; - private TreePath _rightmostLeafPath; + private TrieNode?[] _leftmostNodes = new TrieNode?[65]; + private TrieNode?[] _rightmostNodes = new TrieNode?[65]; private readonly int _nodeLimit; private readonly long _byteLimit; @@ -78,12 +77,6 @@ public RangeQueryVisitor( private bool ShouldVisit(in TreePath path) { - if (_cancellationToken.IsCancellationRequested) - { - StoppedEarly = true; - return false; - } - if (_lastNodeFound) { StoppedEarly = true; @@ -126,41 +119,31 @@ public long GetBytesSize() public ArrayPoolList GetProofs() { - if (_leftLeafProof is null) return ArrayPoolList.Empty(); - HashSet proofs = new(); - // Note: although nethermind works just fine without left proof if start with zero starting hash, - // its out of spec. - (TreePath leftmostPath, TrieNode leftmostLeafProof) = _leftLeafProof.Value; - proofs.Add(leftmostLeafProof.FullRlp.ToArray()); - - for (int i = 64; i >= 0; i--) - { - if (!_leftmostNodes[i].HasValue) continue; - (TreePath path, TrieNode node) = _leftmostNodes[i].Value; - leftmostPath.TruncateMut(i); - if (leftmostPath != path) continue; + AddToProof(_leftmostNodes); + AddToProof(_rightmostNodes); - proofs.Add(node.FullRlp.ToArray()); - } + return proofs.ToPooledList(); - TreePath rightmostPath = _rightmostLeafPath; - if (rightmostPath.Length != 0) + void AddToProof(IReadOnlyList boundaryNodes) { - for (int i = 64; i >= 0; i--) + int i = 0; + while (true) { - if (!_rightmostNodes[i].HasValue) continue; - - (TreePath path, TrieNode node) = _rightmostNodes[i].Value; - rightmostPath.TruncateMut(i); - if (rightmostPath != path) continue; + TrieNode node = boundaryNodes[i]; + if (node is null) break; proofs.Add(node.FullRlp.ToArray()); + + if (node.IsBranch) + i++; + else if (node.IsExtension) + i += node.Key.Length; + else + break; } } - - return proofs.ToPooledList(); } public void VisitTree(in TreePathContext nodeContext, Hash256 rootHash, TrieVisitContext trieVisitContext) @@ -175,31 +158,32 @@ public void VisitMissingNode(in TreePathContext ctx, Hash256 nodeHash, TrieVisit public void VisitBranch(in TreePathContext ctx, TrieNode node, TrieVisitContext trieVisitContext) { - if (!_leftmostNodes[ctx.Path.Length].HasValue) _leftmostNodes[ctx.Path.Length] = (ctx.Path, node); - _rightmostNodes[ctx.Path.Length] = (ctx.Path, node); + _leftmostNodes[ctx.Path.Length] ??= node; + _rightmostNodes[ctx.Path.Length] = node; } public void VisitExtension(in TreePathContext ctx, TrieNode node, TrieVisitContext trieVisitContext) { - if (!_leftmostNodes[ctx.Path.Length].HasValue) _leftmostNodes[ctx.Path.Length] = (ctx.Path, node); - _rightmostNodes[ctx.Path.Length] = (ctx.Path, node); + _leftmostNodes[ctx.Path.Length] ??= node; + _rightmostNodes[ctx.Path.Length] = node; } public void VisitLeaf(in TreePathContext ctx, TrieNode node, TrieVisitContext trieVisitContext, ReadOnlySpan value) { + _leftmostNodes[ctx.Path.Length] ??= node; + _rightmostNodes[ctx.Path.Length] = node; + TreePath path = ctx.Path.Append(node.Key); - _rightmostNodes[ctx.Path.Length] = (ctx.Path, node); // Yes, this is needed. Yes, you can make a special variable like _rightLeafProof. if (!ShouldVisit(path)) { - if (!_lastNodeFound) _leftLeafProof = (path, node); return; } - _leftLeafProof ??= (path, node); - - if (path.Path.CompareTo(_limitHash) >= 0) + if (path.Path.CompareTo(_limitHash) >= 0 || _cancellationToken.IsCancellationRequested) { // This leaf is after or at limitHash. This will cause all further ShouldVisit to return false. + // Yes, we do need to include this as part of the response. + // Note: Cancellation must happen at the leaf or the proof may break _lastNodeFound = true; } @@ -215,8 +199,6 @@ public void VisitCode(in TreePathContext nodeContext, Hash256 codeHash, TrieVisi private void CollectNode(in TreePath path, CappedArray value) { - _rightmostLeafPath = path; - int encodedSize = _valueCollector.Collect(path.Path, value); _currentBytesCount += encodedSize; _currentLeafCount++; diff --git a/src/Nethermind/Nethermind.Trie/TrieNode.Decoder.cs b/src/Nethermind/Nethermind.Trie/TrieNode.Decoder.cs index 55b522e38d1..b32c4f95a59 100644 --- a/src/Nethermind/Nethermind.Trie/TrieNode.Decoder.cs +++ b/src/Nethermind/Nethermind.Trie/TrieNode.Decoder.cs @@ -6,7 +6,10 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; using Nethermind.Core.Buffers; +using Nethermind.Core.Cpu; using Nethermind.Core.Crypto; using Nethermind.Serialization.Rlp; using Nethermind.Trie.Pruning; @@ -125,12 +128,12 @@ private static void ThrowNullKey(TrieNode node) throw new TrieException($"Hex prefix of a leaf node is null at node {node.Keccak}"); } - public static CappedArray RlpEncodeBranch(TrieNode item, ITrieNodeResolver tree, ref TreePath path, ICappedArrayPool? pool) + public static CappedArray RlpEncodeBranch(TrieNode item, ITrieNodeResolver tree, ref TreePath path, ICappedArrayPool? pool, bool canBeParallel) { Metrics.TreeNodeRlpEncodings++; int valueRlpLength = AllowBranchValues ? Rlp.LengthOf(item.Value.AsSpan()) : 1; - int contentLength = valueRlpLength + GetChildrenRlpLengthForBranch(tree, ref path, item, pool); + int contentLength = valueRlpLength + (UseParallel(canBeParallel) ? GetChildrenRlpLengthForBranchParallel(tree, ref path, item, pool) : GetChildrenRlpLengthForBranch(tree, ref path, item, pool)); int sequenceLength = Rlp.LengthOfSequence(contentLength); CappedArray result = pool.SafeRentBuffer(sequenceLength); Span resultSpan = result.AsSpan(); @@ -147,20 +150,61 @@ public static CappedArray RlpEncodeBranch(TrieNode item, ITrieNodeResolver } return result; + + static bool UseParallel(bool canBeParallel) => Environment.ProcessorCount > 1 && canBeParallel; } private static int GetChildrenRlpLengthForBranch(ITrieNodeResolver tree, ref TreePath path, TrieNode item, ICappedArrayPool? bufferPool) { item.EnsureInitialized(); // Tail call optimized. - if (item.HasRlp) - { - return GetChildrenRlpLengthForBranchRlp(tree, ref path, item, bufferPool); - } - else - { - return GetChildrenRlpLengthForBranchNonRlp(tree, ref path, item, bufferPool); - } + return item.HasRlp + ? GetChildrenRlpLengthForBranchRlp(tree, ref path, item, bufferPool) + : GetChildrenRlpLengthForBranchNonRlp(tree, ref path, item, bufferPool); + } + + private static int GetChildrenRlpLengthForBranchParallel(ITrieNodeResolver tree, ref TreePath path, TrieNode item, ICappedArrayPool? bufferPool) + { + item.EnsureInitialized(); + // Tail call optimized. + return item.HasRlp + ? GetChildrenRlpLengthForBranchRlpParallel(tree, path, item, bufferPool) + : GetChildrenRlpLengthForBranchNonRlpParallel(tree, path, item, bufferPool); + } + + private static int GetChildrenRlpLengthForBranchNonRlpParallel(ITrieNodeResolver tree, TreePath rootPath, TrieNode item, ICappedArrayPool bufferPool) + { + int totalLength = 0; + Parallel.For(0, BranchesCount, RuntimeInformation.ParallelOptionsLogicalCores, + () => 0, + (i, _, local) => + { + object? data = item._data[i]; + if (ReferenceEquals(data, _nullNode) || data is null) + { + local++; + } + else if (data is Hash256) + { + local += Rlp.LengthOfKeccakRlp; + } + else + { + TreePath path = rootPath; + path.AppendMut(i); + TrieNode childNode = Unsafe.As(data); + childNode.ResolveKey(tree, ref path, isRoot: false, bufferPool: bufferPool); + local += childNode.Keccak is null ? childNode.FullRlp.Length : Rlp.LengthOfKeccakRlp; + } + + return local; + }, + local => + { + Interlocked.Add(ref totalLength, local); + }); + + return totalLength; } private static int GetChildrenRlpLengthForBranchNonRlp(ITrieNodeResolver tree, ref TreePath path, TrieNode item, ICappedArrayPool bufferPool) @@ -168,7 +212,7 @@ private static int GetChildrenRlpLengthForBranchNonRlp(ITrieNodeResolver tree, r int totalLength = 0; for (int i = 0; i < BranchesCount; i++) { - object data = item._data[i]; + object? data = item._data[i]; if (ReferenceEquals(data, _nullNode) || data is null) { totalLength++; @@ -180,7 +224,7 @@ private static int GetChildrenRlpLengthForBranchNonRlp(ITrieNodeResolver tree, r else { path.AppendMut(i); - TrieNode childNode = (TrieNode)data; + TrieNode childNode = Unsafe.As(data); childNode.ResolveKey(tree, ref path, isRoot: false, bufferPool: bufferPool); path.TruncateOne(); totalLength += childNode.Keccak is null ? childNode.FullRlp.Length : Rlp.LengthOfKeccakRlp; @@ -189,6 +233,48 @@ private static int GetChildrenRlpLengthForBranchNonRlp(ITrieNodeResolver tree, r return totalLength; } + private static int GetChildrenRlpLengthForBranchRlpParallel(ITrieNodeResolver tree, TreePath rootPath, TrieNode item, ICappedArrayPool? bufferPool) + { + int totalLength = 0; + Parallel.For(0, BranchesCount, RuntimeInformation.ParallelOptionsLogicalCores, + () => 0, + (i, _, local) => + { + ValueRlpStream rlpStream = item.RlpStream; + item.SeekChild(ref rlpStream, i); + object? data = item._data[i]; + if (data is null) + { + local += rlpStream.PeekNextRlpLength(); + } + else if (ReferenceEquals(data, _nullNode)) + { + local++; + } + else if (data is Hash256) + { + local += Rlp.LengthOfKeccakRlp; + } + else + { + TreePath path = rootPath; + path.AppendMut(i); + Debug.Assert(data is TrieNode, "Data is not TrieNode"); + TrieNode childNode = Unsafe.As(data); + childNode.ResolveKey(tree, ref path, isRoot: false, bufferPool: bufferPool); + local += childNode.Keccak is null ? childNode.FullRlp.Length : Rlp.LengthOfKeccakRlp; + } + + return local; + }, + local => + { + Interlocked.Add(ref totalLength, local); + }); + + return totalLength; + } + private static int GetChildrenRlpLengthForBranchRlp(ITrieNodeResolver tree, ref TreePath path, TrieNode item, ICappedArrayPool? bufferPool) { int totalLength = 0; diff --git a/src/Nethermind/Nethermind.Trie/TrieNode.Visitor.cs b/src/Nethermind/Nethermind.Trie/TrieNode.Visitor.cs index 67b43655dde..947ae4b2f9c 100644 --- a/src/Nethermind/Nethermind.Trie/TrieNode.Visitor.cs +++ b/src/Nethermind/Nethermind.Trie/TrieNode.Visitor.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Nethermind.Core; using Nethermind.Core.Buffers; +using Nethermind.Core.Cpu; using Nethermind.Core.Crypto; using Nethermind.Serialization.Rlp; using Nethermind.Trie.Pruning; @@ -192,7 +193,7 @@ void VisitMultiThread(TreePath parentPath, ITreeVisitor treeVisito var copy = nodeContext; // multithreaded route - Parallel.For(0, BranchesCount, i => + Parallel.For(0, BranchesCount, RuntimeInformation.ParallelOptionsPhysicalCores, i => { visitContext.Semaphore.Wait(); try @@ -216,7 +217,7 @@ static void VisitAllSingleThread(TrieNode currentNode, ref TreePath path, ITreeV path.AppendMut(0); for (int i = 0; i < 16; i++) { - if (output[i] == null) continue; + if (output[i] is null) continue; TrieNode child = output[i]; path.SetLast(i); child.ResolveKey(nodeResolver, ref path, false); diff --git a/src/Nethermind/Nethermind.Trie/TrieNode.cs b/src/Nethermind/Nethermind.Trie/TrieNode.cs index 85fd6dcd04a..f9f7396b722 100644 --- a/src/Nethermind/Nethermind.Trie/TrieNode.cs +++ b/src/Nethermind/Nethermind.Trie/TrieNode.cs @@ -57,7 +57,7 @@ public sealed partial class TrieNode public Hash256? Keccak { get; internal set; } - public bool HasRlp => _rlp != null; + public bool HasRlp => _rlp is not null; public ref readonly CappedArray FullRlp { @@ -491,7 +491,7 @@ private bool DecodeRlp(ValueRlpStream rlpStream, ICappedArrayPool bufferPool, ou return true; } - public void ResolveKey(ITrieNodeResolver tree, ref TreePath path, bool isRoot, ICappedArrayPool? bufferPool = null) + public void ResolveKey(ITrieNodeResolver tree, ref TreePath path, bool isRoot, ICappedArrayPool? bufferPool = null, bool canBeParallel = true) { if (Keccak is not null) { @@ -500,17 +500,17 @@ public void ResolveKey(ITrieNodeResolver tree, ref TreePath path, bool isRoot, I return; } - Keccak = GenerateKey(tree, ref path, isRoot, bufferPool); + Keccak = GenerateKey(tree, ref path, isRoot, bufferPool, canBeParallel); } - public Hash256? GenerateKey(ITrieNodeResolver tree, ref TreePath path, bool isRoot, ICappedArrayPool? bufferPool = null) + public Hash256? GenerateKey(ITrieNodeResolver tree, ref TreePath path, bool isRoot, ICappedArrayPool? bufferPool = null, bool canBeParallel = true) { RlpFactory rlp = _rlp; if (rlp is null || IsDirty) { ref readonly CappedArray oldRlp = ref rlp is not null ? ref rlp.Data : ref CappedArray.Empty; CappedArray fullRlp = NodeType == NodeType.Branch ? - TrieNodeDecoder.RlpEncodeBranch(this, tree, ref path, bufferPool) : + TrieNodeDecoder.RlpEncodeBranch(this, tree, ref path, bufferPool, canBeParallel: isRoot && canBeParallel) : RlpEncode(tree, ref path, bufferPool); if (fullRlp.IsNotNullOrEmpty) @@ -536,7 +536,7 @@ internal CappedArray RlpEncode(ITrieNodeResolver tree, ref TreePath path, { return NodeType switch { - NodeType.Branch => TrieNodeDecoder.RlpEncodeBranch(this, tree, ref path, bufferPool), + NodeType.Branch => TrieNodeDecoder.RlpEncodeBranch(this, tree, ref path, bufferPool, canBeParallel: false), NodeType.Extension => TrieNodeDecoder.EncodeExtension(this, tree, ref path, bufferPool), NodeType.Leaf => TrieNodeDecoder.EncodeLeaf(this, bufferPool), _ => ThrowUnhandledNodeType(this) diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxBroadcasterTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxBroadcasterTests.cs index c8cd8e1b4af..6cd66531054 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxBroadcasterTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxBroadcasterTests.cs @@ -361,8 +361,8 @@ public void should_not_broadcast_tx_with_MaxFeePerGas_lower_than_70_percent_of_C // tx should be immediately broadcasted only if MaxFeePerGas is equal at least 70% of current base fee peer.Received(shouldBroadcast ? 1 : 0).SendNewTransaction(Arg.Any()); - // tx should always be added to persistent collection, without any fee restrictions - _broadcaster.GetSnapshot().Length.Should().Be(1); + // tx should only be added to persistent collection, if it is above the fee restriction + _broadcaster.GetSnapshot().Length.Should().Be(shouldBroadcast ? 1 : 0); } [Test] diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index e2555cd1bd1..a6a96c029a2 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -273,6 +273,7 @@ public void get_next_pending_nonce() // LatestPendingNonce=1, when the current nonce of the account=1 and no pending transactions _stateProvider.IncrementNonce(TestItem.AddressA); + _txPool.ResetAddress(TestItem.AddressA); latestNonce = _txPool.GetLatestPendingNonce(TestItem.AddressA); Assert.That((UInt256)1, Is.EqualTo(latestNonce)); @@ -505,7 +506,7 @@ public void should_add_underpaid_txs_to_full_TxPool_only_if_local(bool isLocal) AcceptTxResult result = _txPool.SubmitTx(tx, txHandlingOptions); _txPool.GetPendingTransactionsCount().Should().Be(30); _txPool.GetOwnPendingTransactions().Length.Should().Be(isLocal ? 1 : 0); - result.ToString().Should().Contain(isLocal ? nameof(AcceptTxResult.FeeTooLowToCompete) : nameof(AcceptTxResult.FeeTooLow)); + result.ToString().Should().Contain(isLocal ? nameof(AcceptTxResult.Accepted) : nameof(AcceptTxResult.FeeTooLow)); } [TestCase(0)] @@ -564,6 +565,7 @@ public void should_not_count_txs_with_stale_nonces_when_calculating_cumulative_c if (i < numberOfStaleTxsInBucket) { _stateProvider.IncrementNonce(TestItem.AddressA); + _txPool.ResetAddress(TestItem.AddressA); } } @@ -1041,6 +1043,7 @@ public void should_retrieve_added_persistent_transaction_correctly_even_if_was_e retrievedTransaction.Should().BeEquivalentTo(transaction); EnsureSenderBalance(transactionWithHigherFee); + _txPool.ResetAddress(transactionWithHigherFee.SenderAddress); _txPool.SubmitTx(transactionWithHigherFee, TxHandlingOptions.None).Should().Be(AcceptTxResult.Accepted); _txPool.TryGetPendingTransaction(transactionWithHigherFee.Hash, out var retrievedTransactionWithHigherFee).Should().BeTrue(); retrievedTransactionWithHigherFee.Should().BeEquivalentTo(transactionWithHigherFee); @@ -1381,7 +1384,7 @@ public void should_increase_nonce_when_transaction_not_included_in_txPool_but_br .WithMaxFeePerGas(1) .WithMaxPriorityFeePerGas(1) .SignedAndResolved(_ethereumEcdsa, TestItem.PrivateKeyA).TestObject; - _txPool.SubmitTx(cheapTx, TxHandlingOptions.PersistentBroadcast).Should().Be(AcceptTxResult.FeeTooLowToCompete); + _txPool.SubmitTx(cheapTx, TxHandlingOptions.PersistentBroadcast).Should().Be(AcceptTxResult.Accepted); _txPool.GetPendingTransactions().Should().NotContain(cheapTx); _txPool.GetOwnPendingTransactions().Should().Contain(cheapTx); peer.Received().SendNewTransaction(cheapTx); @@ -1393,7 +1396,7 @@ public void should_increase_nonce_when_transaction_not_included_in_txPool_but_br .WithMaxFeePerGas(1) .WithMaxPriorityFeePerGas(1) .SignedAndResolved(_ethereumEcdsa, TestItem.PrivateKeyA).TestObject; - _txPool.SubmitTx(fourthTx, TxHandlingOptions.PersistentBroadcast).Should().Be(AcceptTxResult.FeeTooLowToCompete); + _txPool.SubmitTx(fourthTx, TxHandlingOptions.PersistentBroadcast).Should().Be(AcceptTxResult.Accepted); _txPool.GetPendingTransactions().Should().NotContain(fourthTx); _txPool.GetOwnPendingTransactions().Should().Contain(fourthTx); peer.Received().SendNewTransaction(fourthTx); @@ -1638,6 +1641,53 @@ public void Should_not_add_underpaid_tx_even_if_lower_nonces_are_expensive(int g result.Should().Be(expectedResult ? AcceptTxResult.Accepted : AcceptTxResult.FeeTooLowToCompete); } + [Test] + public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType txType) + { + // Should only add non-blob transactions to local pool when underpaid + bool expectedResult = txType != TxType.Blob; + + // No need to check for deposit tx + if (txType == TxType.DepositTx) return; + + ISpecProvider specProvider = GetCancunSpecProvider(); + TxPoolConfig txPoolConfig = new TxPoolConfig { Size = 30, PersistentBlobStorageSize = 0 }; + _txPool = CreatePool(txPoolConfig, specProvider); + + Transaction[] transactions = GetTransactions(GetPeers(3), true, false); + + foreach (Address address in transactions.Select(t => t.SenderAddress).Distinct()) + { + EnsureSenderBalance(address, UInt256.MaxValue); + } + + // setup full tx pool + foreach (Transaction transaction in transactions) + { + transaction.GasPrice = 10.GWei(); + _txPool.SubmitTx(transaction, TxHandlingOptions.None); + } + + _txPool.GetPendingTransactionsCount().Should().Be(30); + + Transaction testTx = Build.A.Transaction + .WithNonce(0) + .WithType(txType) + .WithShardBlobTxTypeAndFieldsIfBlobTx() + .WithMaxFeePerGas(9.GWei()) + .WithMaxPriorityFeePerGas(9.GWei()) + .WithTo(TestItem.AddressB) + .SignedAndResolved(_ethereumEcdsa, TestItem.PrivateKeyA).TestObject; + + EnsureSenderBalance(TestItem.PrivateKeyA.Address, UInt256.MaxValue); + + AcceptTxResult result = _txPool.SubmitTx(testTx, TxHandlingOptions.PersistentBroadcast); + result.Should().Be(expectedResult ? AcceptTxResult.Accepted : AcceptTxResult.FeeTooLowToCompete); + _txPool.GetOwnPendingTransactions().Length.Should().Be(expectedResult ? 1 : 0); + _txPool.GetPendingBlobTransactionsCount().Should().Be(0); + _txPool.GetPendingTransactions().Should().NotContain(testTx); + } + private IDictionary GetPeers(int limit = 100) { var peers = new Dictionary(); diff --git a/src/Nethermind/Nethermind.TxPool/Collections/DistinctValueSortedPool.cs b/src/Nethermind/Nethermind.TxPool/Collections/DistinctValueSortedPool.cs index 301004f370f..c37a14346d0 100644 --- a/src/Nethermind/Nethermind.TxPool/Collections/DistinctValueSortedPool.cs +++ b/src/Nethermind/Nethermind.TxPool/Collections/DistinctValueSortedPool.cs @@ -57,10 +57,19 @@ protected override void InsertCore(TKey key, TValue value, TGroupKey groupKey) _distinctDictionary[value] = new KeyValuePair(key, value); } - protected override bool Remove(TKey key, TValue value) + protected override bool Remove(TKey key, out TValue? value) { - _distinctDictionary.Remove(value); - return base.Remove(key, value); + if (base.Remove(key, out value)) + { + if (value is not null) + { + _distinctDictionary.Remove(value); + } + + return true; + } + + return false; } protected virtual bool AllowSameKeyReplacement => false; diff --git a/src/Nethermind/Nethermind.TxPool/Collections/PersistentBlobTxDistinctSortedPool.cs b/src/Nethermind/Nethermind.TxPool/Collections/PersistentBlobTxDistinctSortedPool.cs index 89aea5b28ac..593266a0de6 100644 --- a/src/Nethermind/Nethermind.TxPool/Collections/PersistentBlobTxDistinctSortedPool.cs +++ b/src/Nethermind/Nethermind.TxPool/Collections/PersistentBlobTxDistinctSortedPool.cs @@ -88,10 +88,20 @@ public override bool TryGetValue(ValueHash256 hash, [NotNullWhen(true)] out Tran return false; } - protected override bool Remove(ValueHash256 hash, Transaction tx) + protected override bool Remove(ValueHash256 hash, out Transaction? tx) { - _blobTxCache.Delete(hash); - _blobTxStorage.Delete(hash, tx.Timestamp); - return base.Remove(hash, tx); + if (base.Remove(hash, out tx)) + { + if (tx is not null) + { + _blobTxStorage.Delete(hash, tx.Timestamp); + } + + _blobTxCache.Delete(hash); + + return true; + } + + return false; } } diff --git a/src/Nethermind/Nethermind.TxPool/Collections/SortedPool.Events.cs b/src/Nethermind/Nethermind.TxPool/Collections/SortedPool.Events.cs index 79d55df908c..9e6f0303765 100644 --- a/src/Nethermind/Nethermind.TxPool/Collections/SortedPool.Events.cs +++ b/src/Nethermind/Nethermind.TxPool/Collections/SortedPool.Events.cs @@ -12,28 +12,16 @@ public partial class SortedPool public event EventHandler? Removed; #pragma warning restore 67 - public class SortedPoolEventArgs + public class SortedPoolEventArgs(TKey key, TValue value) { - public TKey Key { get; } - public TValue Value { get; } - public TGroupKey Group { get; } - - public SortedPoolEventArgs(TKey key, TValue value, TGroupKey group) - { - Key = key; - Value = value; - Group = group; - } + public TKey Key { get; } = key; + public TValue Value { get; } = value; } - public class SortedPoolRemovedEventArgs : SortedPoolEventArgs + public class SortedPoolRemovedEventArgs(TKey key, TValue value, bool evicted) + : SortedPoolEventArgs(key, value) { - public bool Evicted { get; } - - public SortedPoolRemovedEventArgs(TKey key, TValue value, TGroupKey group, bool evicted) : base(key, value, group) - { - Evicted = evicted; - } + public bool Evicted { get; } = evicted; } } } diff --git a/src/Nethermind/Nethermind.TxPool/Collections/SortedPool.cs b/src/Nethermind/Nethermind.TxPool/Collections/SortedPool.cs index 317df34eb09..c1771f87338 100644 --- a/src/Nethermind/Nethermind.TxPool/Collections/SortedPool.cs +++ b/src/Nethermind/Nethermind.TxPool/Collections/SortedPool.cs @@ -8,7 +8,6 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Threading; - using Nethermind.Core.Collections; using Nethermind.Core.Threading; using Nethermind.Logging; @@ -225,42 +224,52 @@ private bool TryRemove(TKey key, out TValue? value, [NotNullWhen(true)] out ICol protected bool TryRemoveNonLocked(TKey key, bool evicted, [NotNullWhen(true)] out TValue? value, out ICollection? bucket) { - if (_cacheMap.TryGetValue(key, out value) && value is not null) + if (Remove(key, out value) && value is not null) + { + if (RemoveFromBucket(value, out EnhancedSortedSet? bucketSet)) + { + bucket = bucketSet; + Removed?.Invoke(this, new SortedPoolRemovedEventArgs(key, value, evicted)); + return true; + } + + // just for safety + _worstSortedValues.Remove(value); + UpdateWorstValue(); + } + + value = default; + bucket = null; + return false; + } + + private bool RemoveFromBucket([DisallowNull] TValue value, out EnhancedSortedSet? bucketSet) + { + TGroupKey groupMapping = MapToGroup(value); + if (_buckets.TryGetValue(groupMapping, out bucketSet)) { - if (Remove(key, value)) + TValue? last = bucketSet.Max; + if (bucketSet.Remove(value)) { - TGroupKey groupMapping = MapToGroup(value); - if (_buckets.TryGetValue(groupMapping, out EnhancedSortedSet? bucketSet)) + if (bucketSet.Count == 0) { - bucket = bucketSet; - TValue? last = bucketSet.Max; - if (bucketSet.Remove(value!)) + _buckets.Remove(groupMapping); + if (last is not null) { - if (bucket.Count == 0) - { - _buckets.Remove(groupMapping); - if (last is not null) - { - _worstSortedValues.Remove(last); - UpdateWorstValue(); - } - } - else - { - UpdateSortedValues(bucketSet, last); - } - _snapshot = null; - - return true; + _worstSortedValues.Remove(last); + UpdateWorstValue(); } } + else + { + UpdateSortedValues(bucketSet, last); + } - Removed?.Invoke(this, new SortedPoolRemovedEventArgs(key, value, groupMapping, evicted)); + _snapshot = null; + return true; } } - value = default; - bucket = null; return false; } @@ -371,16 +380,30 @@ public virtual bool TryInsert(TKey key, TValue value, out TValue? removed) private bool RemoveLast(out TValue? removed) { - TKey? key = _worstValue.GetValueOrDefault().Value; + TryAgain: + KeyValuePair worstValue = _worstValue.GetValueOrDefault(); + TKey? key = worstValue.Value; if (key is not null) { - return TryRemoveNonLocked(key, true, out removed, out _); - } - else - { - removed = default; - return false; + if (TryRemoveNonLocked(key, true, out removed, out _)) + { + return true; + } + + if (worstValue.Key is not null && _worstSortedValues.Remove(worstValue)) + { + RemoveFromBucket(worstValue.Key, out _); + } + else + { + UpdateWorstValue(); + } + + goto TryAgain; } + + removed = default; + return false; } /// @@ -413,7 +436,7 @@ protected virtual void InsertCore(TKey key, TValue value, TGroupKey groupKey) UpdateIsFull(); UpdateSortedValues(bucket, last); _snapshot = null; - Inserted?.Invoke(this, new SortedPoolEventArgs(key, value, groupKey)); + Inserted?.Invoke(this, new SortedPoolEventArgs(key, value)); } } @@ -439,15 +462,17 @@ private void UpdateSortedValues(EnhancedSortedSet bucket, TValue? previo /// /// Actual removal mechanism. /// - protected virtual bool Remove(TKey key, TValue value) + protected virtual bool Remove(TKey key, out TValue? value) { - if (_cacheMap.Remove(key)) + // Now remove from cache + if (_cacheMap.Remove(key, out value)) { UpdateIsFull(); _snapshot = null; return true; } + value = default; return false; } @@ -527,8 +552,8 @@ protected void EnsureCapacity(int? expectedCapacity = null) private string GetInfoAboutWorstValues() { TKey? key = _worstValue.GetValueOrDefault().Value; - var isWorstValueInPool = _cacheMap.TryGetValue(key, out TValue? value) && value != null; - return $"Number of items in worstSortedValues: {_worstSortedValues.Count}; IsWorstValueInPool: {isWorstValueInPool}; Worst value: {_worstValue}; GetValue: {_worstValue.GetValueOrDefault()}; Current max in worstSortedValues: {_worstSortedValues.Max};"; + var isWorstValueInPool = _cacheMap.TryGetValue(key, out TValue? value) && value is not null; + return $"Number of items in worstSortedValues: {_worstSortedValues.Count}; IsWorstValueInPool: {isWorstValueInPool};"; } public void UpdatePool(Func, IEnumerable<(TValue Tx, Action? Change)>> changingElements) diff --git a/src/Nethermind/Nethermind.TxPool/HashCache.cs b/src/Nethermind/Nethermind.TxPool/HashCache.cs index ac685b6e882..d49960d6bbc 100644 --- a/src/Nethermind/Nethermind.TxPool/HashCache.cs +++ b/src/Nethermind/Nethermind.TxPool/HashCache.cs @@ -23,14 +23,12 @@ internal class HashCache { private const int SafeCapacity = 1024 * 16; - private readonly LruKeyCache _longTermCache = new( + private readonly LruKeyCacheLowObject _longTermCache = new( MemoryAllowance.TxHashCacheSize, - Math.Min(SafeCapacity, MemoryAllowance.TxHashCacheSize), "long term hash cache"); - private readonly LruKeyCache _currentBlockCache = new( + private readonly LruKeyCacheLowObject _currentBlockCache = new( SafeCapacity, - Math.Min(SafeCapacity, MemoryAllowance.TxHashCacheSize), "current block hash cache"); public bool Get(Hash256 hash) diff --git a/src/Nethermind/Nethermind.TxPool/TxBroadcaster.cs b/src/Nethermind/Nethermind.TxPool/TxBroadcaster.cs index 1505b21e9fb..de7eb80c9d0 100644 --- a/src/Nethermind/Nethermind.TxPool/TxBroadcaster.cs +++ b/src/Nethermind/Nethermind.TxPool/TxBroadcaster.cs @@ -97,31 +97,33 @@ public TxBroadcaster(IComparer comparer, // only for testing reasons internal Transaction[] GetSnapshot() => _persistentTxs.GetSnapshot(); - public void Broadcast(Transaction tx, bool isPersistent) + public bool Broadcast(Transaction tx, bool isPersistent) { if (isPersistent) { - StartBroadcast(tx); - } - else - { - BroadcastOnce(tx); + return StartBroadcast(tx); } + + BroadcastOnce(tx); + + return true; } - private void StartBroadcast(Transaction tx) + private bool StartBroadcast(Transaction tx) { // broadcast local tx only if MaxFeePerGas is not lower than configurable percent of current base fee // (70% by default). Otherwise only add to persistent txs and broadcast when tx will be ready for inclusion - if (tx.MaxFeePerGas >= _baseFeeThreshold || tx.IsFree()) + + if (tx is not null + && (tx.MaxFeePerGas >= _baseFeeThreshold || tx.IsFree()) + && _persistentTxs.TryInsert(tx.Hash, tx.SupportsBlobs ? new LightTransaction(tx) : tx, out Transaction? removed) + && removed?.Hash != tx.Hash) { NotifyPeersAboutLocalTx(tx); + return true; } - if (tx.Hash is not null) - { - _persistentTxs.TryInsert(tx.Hash, tx.SupportsBlobs ? new LightTransaction(tx) : tx); - } + return false; } private void BroadcastOnce(Transaction tx) diff --git a/src/Nethermind/Nethermind.TxPool/TxPool.cs b/src/Nethermind/Nethermind.TxPool/TxPool.cs index 8b062191f47..fe806ad91e6 100644 --- a/src/Nethermind/Nethermind.TxPool/TxPool.cs +++ b/src/Nethermind/Nethermind.TxPool/TxPool.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Channels; @@ -44,6 +45,7 @@ public class TxPool : ITxPool, IDisposable private readonly IChainHeadSpecProvider _specProvider; private readonly IAccountStateProvider _accounts; + private readonly AccountCache _accountCache; private readonly IEthereumEcdsa _ecdsa; private readonly IBlobTxStorage _blobTxStorage; private readonly IChainHeadInfoProvider _headInfo; @@ -65,6 +67,8 @@ public class TxPool : ITxPool, IDisposable private readonly ITimer? _timer; private Transaction[]? _transactionSnapshot; private Transaction[]? _blobTransactionSnapshot; + private long _lastBlockNumber = -1; + private Hash256? _lastBlockHash; /// /// This class stores all known pending transactions that can be used for block production @@ -97,7 +101,7 @@ public TxPool(IEthereumEcdsa ecdsa, _headInfo = chainHeadInfoProvider ?? throw new ArgumentNullException(nameof(chainHeadInfoProvider)); _txPoolConfig = txPoolConfig; _blobReorgsSupportEnabled = txPoolConfig.BlobsSupport.SupportsReorgs(); - _accounts = _headInfo.AccountStateProvider; + _accounts = _accountCache = new AccountCache(_headInfo.AccountStateProvider); _specProvider = _headInfo.SpecProvider; MemoryAllowance.MemPoolSize = txPoolConfig.Size; @@ -206,6 +210,23 @@ private void ProcessNewHeads() { try { + ArrayPoolList? accountChanges = args.Block.AccountChanges; + if (!CanUseCache(args.Block, accountChanges)) + { + // Not sequential block, reset cache + _accountCache.Reset(); + } + else + { + // Sequential block, just remove changed accounts from cache + _accountCache.RemoveAccounts(accountChanges); + } + args.Block.AccountChanges = null; + accountChanges?.Dispose(); + + _lastBlockNumber = args.Block.Number; + _lastBlockHash = args.Block.Hash; + ReAddReorganisedTransactions(args.PreviousBlock); RemoveProcessedTransactions(args.Block); UpdateBuckets(); @@ -219,6 +240,11 @@ private void ProcessNewHeads() } } } + + bool CanUseCache(Block block, [NotNullWhen(true)] ArrayPoolList? accountChanges) + { + return accountChanges is not null && block.ParentHash == _lastBlockHash && _lastBlockNumber + 1 == block.Number; + } }, TaskCreationOptions.LongRunning).ContinueWith(t => { if (t.IsFaulted) @@ -454,14 +480,17 @@ private AcceptTxResult AddCore(Transaction tx, ref TxFilteringState state, bool if (tx.Hash == removed?.Hash) { // it means it was added and immediately evicted - pool was full of better txs - if (isPersistentBroadcast) + if (!isPersistentBroadcast || tx.SupportsBlobs || !_broadcaster.Broadcast(tx, true)) { // we are adding only to persistent broadcast - not good enough for standard pool, // but can be good enough for TxBroadcaster pool - for local txs only - _broadcaster.Broadcast(tx, isPersistentBroadcast); + Metrics.PendingTransactionsPassedFiltersButCannotCompeteOnFees++; + return AcceptTxResult.FeeTooLowToCompete; + } + else + { + return AcceptTxResult.Accepted; } - Metrics.PendingTransactionsPassedFiltersButCannotCompeteOnFees++; - return AcceptTxResult.FeeTooLowToCompete; } relevantPool.UpdateGroup(tx.SenderAddress!, state.SenderAccount, _updateBucketAdded); @@ -734,6 +763,74 @@ private void TimerOnElapsed(object? sender, EventArgs e) _timer!.Enabled = true; } + internal void ResetAddress(Address address) + { + ArrayPoolList arrayPoolList = new(1); + arrayPoolList.Add(address); + _accountCache.RemoveAccounts(arrayPoolList); + } + + private sealed class AccountCache : IAccountStateProvider + { + private readonly IAccountStateProvider _provider; + private readonly LruCacheLowObject[] _caches; + + public AccountCache(IAccountStateProvider provider) + { + _provider = provider; + _caches = new LruCacheLowObject[16]; + for (int i = 0; i < _caches.Length; i++) + { + // Cache per nibble to reduce contention as TxPool is very parallel + _caches[i] = new LruCacheLowObject(1_024, ""); + } + } + + public bool TryGetAccount(Address address, out AccountStruct account) + { + var cache = _caches[GetCacheIndex(address)]; + if (!cache.TryGet(new AddressAsKey(address), out account)) + { + if (!_provider.TryGetAccount(address, out account)) + { + cache.Set(address, AccountStruct.TotallyEmpty); + return false; + } + cache.Set(address, account); + } + else + { + Db.Metrics.IncrementStateTreeCacheHits(); + } + + return true; + } + + public void RemoveAccounts(ArrayPoolList address) + { + Parallel.ForEach(address.GroupBy(a => GetCacheIndex(a.Value)), + n => + { + LruCacheLowObject cache = _caches[n.Key]; + foreach (AddressAsKey a in n) + { + cache.Delete(a); + } + } + ); + } + + private static int GetCacheIndex(Address address) => address.Bytes[^1] & 0xf; + + public void Reset() + { + for (int i = 0; i < _caches.Length; i++) + { + _caches[i].Clear(); + } + } + } + private static void WriteTxPoolReport(in ILogger logger) { if (!logger.IsInfo) diff --git a/src/Nethermind/Nethermind.sln b/src/Nethermind/Nethermind.sln index 87f05329dfb..9409f66783c 100644 --- a/src/Nethermind/Nethermind.sln +++ b/src/Nethermind/Nethermind.sln @@ -224,6 +224,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution nuget.config = nuget.config EndProjectSection EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nethermind.Optimism.Test", "Nethermind.Optimism.Test\Nethermind.Optimism.Test.csproj", "{2438958D-46EA-4A7E-B89F-29E069DA0CCA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Signer", "Signer", "{89311B58-AF36-4956-883D-54531BC1D5A3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nethermind.ExternalSigner.Plugin", "Nethermind.ExternalSigner.Plugin\Nethermind.ExternalSigner.Plugin.csproj", "{6528010D-7DCE-4935-9785-5270FF515F3E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -614,6 +620,14 @@ Global {AD09FBCB-5496-499B-9129-B6D139A65B6F}.Debug|Any CPU.Build.0 = Debug|Any CPU {AD09FBCB-5496-499B-9129-B6D139A65B6F}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD09FBCB-5496-499B-9129-B6D139A65B6F}.Release|Any CPU.Build.0 = Release|Any CPU + {2438958D-46EA-4A7E-B89F-29E069DA0CCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2438958D-46EA-4A7E-B89F-29E069DA0CCA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2438958D-46EA-4A7E-B89F-29E069DA0CCA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2438958D-46EA-4A7E-B89F-29E069DA0CCA}.Release|Any CPU.Build.0 = Release|Any CPU + {6528010D-7DCE-4935-9785-5270FF515F3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6528010D-7DCE-4935-9785-5270FF515F3E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6528010D-7DCE-4935-9785-5270FF515F3E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6528010D-7DCE-4935-9785-5270FF515F3E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -678,6 +692,8 @@ Global {2EDE2554-59C0-4E78-92F7-EB8077AA597D} = {78BED57D-720E-4E6C-ABA2-397B73B494F9} {48E50409-26FE-4FD8-AF6E-2A0E79F794CE} = {2EDE2554-59C0-4E78-92F7-EB8077AA597D} {E1E7BEFC-52C0-49ED-B0A7-CB8C3250D120} = {4019B82F-1104-4D2C-9F96-05FD7D3575E8} + {89311B58-AF36-4956-883D-54531BC1D5A3} = {78BED57D-720E-4E6C-ABA2-397B73B494F9} + {6528010D-7DCE-4935-9785-5270FF515F3E} = {89311B58-AF36-4956-883D-54531BC1D5A3} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {092CA5E3-6180-4ED7-A3CB-9B57FAC2AA85} diff --git a/tools/HiveConsensusWorkflowGenerator/Program.cs b/tools/HiveConsensusWorkflowGenerator/Program.cs index 18ed584f5e4..1324452862a 100644 --- a/tools/HiveConsensusWorkflowGenerator/Program.cs +++ b/tools/HiveConsensusWorkflowGenerator/Program.cs @@ -71,7 +71,7 @@ private static string FindDirectory(string searchPattern) string? currentDir = Environment.CurrentDirectory; do { - if (currentDir == null) + if (currentDir is null) { return ""; } @@ -80,7 +80,7 @@ private static string FindDirectory(string searchPattern) .EnumerateDirectories(currentDir, searchPattern, SearchOption.TopDirectoryOnly) .SingleOrDefault(); - if (dir != null) + if (dir is not null) { return dir; } diff --git a/tools/Nethermind.Tools.Kute/Auth/JwtAuth.cs b/tools/Nethermind.Tools.Kute/Auth/JwtAuth.cs index feb05054faa..a40bb7ef8ad 100644 --- a/tools/Nethermind.Tools.Kute/Auth/JwtAuth.cs +++ b/tools/Nethermind.Tools.Kute/Auth/JwtAuth.cs @@ -34,7 +34,7 @@ private string GenerateAuthToken() { var signingKey = new SymmetricSecurityKey(_secret); var credentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256); - var claims = new[] { new Claim("iat", _clock.UtcNow.ToUnixTimeSeconds().ToString()) }; + var claims = new[] { new Claim(JwtRegisteredClaimNames.Iat, _clock.UtcNow.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64) }; var token = new JwtSecurityToken(claims: claims, signingCredentials: credentials); var handler = new JwtSecurityTokenHandler(); diff --git a/tools/SendBlobs/BlobSender.cs b/tools/SendBlobs/BlobSender.cs index 04cd72d2e4b..4b4d0889ced 100644 --- a/tools/SendBlobs/BlobSender.cs +++ b/tools/SendBlobs/BlobSender.cs @@ -362,7 +362,7 @@ private async static Task WaitForBlobInclusion(INodeManager nodeManager, Hash256 while (true) { var blockResult = await nodeManager.Post>("eth_getBlockByNumber", lastBlockNumber.ToString() ?? "latest", false); - if (blockResult != null) + if (blockResult is not null) { lastBlockNumber = blockResult.Number + 1; diff --git a/tools/SendBlobs/Dockerfile b/tools/SendBlobs/Dockerfile index 42e47ef7bf5..ba5cc72bf1c 100644 --- a/tools/SendBlobs/Dockerfile +++ b/tools/SendBlobs/Dockerfile @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited # SPDX-License-Identifier: LGPL-3.0-only -FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-jammy AS build +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-noble AS build ARG BUILD_CONFIG=release ARG BUILD_TIMESTAMP diff --git a/tools/SendBlobs/FundsDistributor.cs b/tools/SendBlobs/FundsDistributor.cs index 24a1d9ab975..6356d91d345 100644 --- a/tools/SendBlobs/FundsDistributor.cs +++ b/tools/SendBlobs/FundsDistributor.cs @@ -119,10 +119,10 @@ public async Task> DitributeFunds(Signer distributeFrom, uin .Encode(tx, RlpBehaviors.SkipTypedWrapping | RlpBehaviors.InMempoolForm).Bytes); string? result = await _nodeManager.Post("eth_sendRawTransaction", "0x" + txRlp); - if (result != null) + if (result is not null) txHash.Add(result); - if (keyWriter != null) + if (keyWriter is not null) keyWriter.WriteLine(key.ToString()); nonce++; @@ -194,7 +194,7 @@ public async Task> ReclaimFunds(Address beneficiary, UInt256 .Encode(tx, RlpBehaviors.SkipTypedWrapping | RlpBehaviors.InMempoolForm).Bytes); string? result = await _nodeManager.Post("eth_sendRawTransaction", "0x" + txRlp); - if (result != null) + if (result is not null) txHashes.Add(result); } return txHashes; diff --git a/tools/TxParser/Program.cs b/tools/TxParser/Program.cs index 53e921fa92d..409c755ef97 100644 --- a/tools/TxParser/Program.cs +++ b/tools/TxParser/Program.cs @@ -23,7 +23,7 @@ { EthereumEcdsa ecdsa = new(BlockchainIds.Mainnet, SimpleConsoleLogManager.Instance); Address? sender = ecdsa.RecoverAddress(tx); - if (sender == null) + if (sender is null) { throw new InvalidDataException("Could not recover sender address"); } diff --git a/tools/docgen/DBSizeGenerator.cs b/tools/docgen/DBSizeGenerator.cs new file mode 100644 index 00000000000..8877f66e8de --- /dev/null +++ b/tools/docgen/DBSizeGenerator.cs @@ -0,0 +1,149 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Text.Json; + +namespace Nethermind.DocGen; + +internal static class DBSizeGenerator +{ + private const string _chainSizesDir = "chainSizes"; + + private static readonly List _dbList = + [ + "state", + "receipts", + "blocks", + "bloom", + "headers", + "code", + "blobTransactions" + ]; + + internal static void Generate() + { + IList chainOrder = + [ + "mainnet", + "sepolia", + "holesky", + "gnosis", + "chiado", + "energyweb", + "volta" + ]; + var startMark = ""; + var endMark = ""; + var fileName = "database.md"; + + var chainSizesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, _chainSizesDir); + var chains = Directory + .GetFiles(chainSizesPath) + .Select(Path.GetFileNameWithoutExtension) + .OrderBy(c => + { + var i = chainOrder.IndexOf(c!); + + return i == -1 ? int.MaxValue : i; + }) + .ToList(); + + File.Delete($"~{fileName}"); + + using var readStream = new StreamReader(File.OpenRead(fileName)); + using var writeStream = new StreamWriter(File.OpenWrite($"~{fileName}")); + + writeStream.NewLine = "\n"; + + var line = string.Empty; + + do + { + line = readStream.ReadLine(); + + writeStream.WriteLine(line); + } + while (!line?.Equals(startMark, StringComparison.Ordinal) ?? false); + + writeStream.WriteLine(); + + WriteMarkdown(writeStream, chains!); + + var skip = true; + + for (line = readStream.ReadLine(); line is not null; line = readStream.ReadLine()) + { + if (skip) + { + if (line?.Equals(endMark, StringComparison.Ordinal) ?? false) + skip = false; + else + continue; + } + + writeStream.WriteLine(line); + } + + readStream.Close(); + writeStream.Close(); + + File.Move($"~{fileName}", fileName, true); + + Console.WriteLine($"Updated {fileName}"); + } + + private static void WriteMarkdown(StreamWriter file, List chains) + { + file.WriteLine(""); + + foreach (var chain in chains) + WriteChainSize(file, chain); + + file.WriteLine(""" + + + """); + } + + private static void WriteChainSize(StreamWriter file, string chain) + { + using var json = JsonDocument.Parse(File.ReadAllText($"{_chainSizesDir}/{chain}.json")); + + if (json.RootElement.ValueKind != JsonValueKind.Object) + return; + + var chainCapitalized = $"{char.ToUpper(chain[0])}{chain[1..]}"; + + file.WriteLine($""" + + + """); + + var items = json.RootElement.EnumerateObject(); + + foreach (var db in _dbList) + { + var size = items + .FirstOrDefault(e => e.Name.Contains(db, StringComparison.Ordinal)) + .Value.ToString(); + + file.WriteLine($"- `{db}`: {FormatSize(size)}"); + } + + var totalSize = items + .FirstOrDefault(e => e.Name.EndsWith("nethermind_db", StringComparison.Ordinal)) + .Value.ToString(); + + file.WriteLine($""" + - ... + - **Total: {FormatSize(totalSize)}** + + + """); + } + + private static string FormatSize(string value) => value + .Replace("G", " GB") + .Replace("M", " MB") + .Replace("K", " KB"); +} diff --git a/tools/docgen/JsonRpcGenerator.cs b/tools/docgen/JsonRpcGenerator.cs index 424dcff4ec5..5257ccd7b3b 100644 --- a/tools/docgen/JsonRpcGenerator.cs +++ b/tools/docgen/JsonRpcGenerator.cs @@ -6,7 +6,6 @@ using Nethermind.JsonRpc.Modules.Evm; using Nethermind.JsonRpc.Modules.Rpc; using Nethermind.JsonRpc.Modules.Subscribe; -using Nethermind.JsonRpc.Modules.Witness; using Newtonsoft.Json; namespace Nethermind.DocGen; @@ -23,8 +22,7 @@ internal static void Generate() typeof(IEvmRpcModule).FullName, typeof(IRpcModule).FullName, typeof(IRpcRpcModule).FullName, - typeof(ISubscribeRpcModule).FullName, - typeof(IWitnessRpcModule).FullName + typeof(ISubscribeRpcModule).FullName }; var types = new[] { "Nethermind.JsonRpc", "Nethermind.Consensus.Clique" } .SelectMany(a => Assembly.Load(a).GetTypes()) diff --git a/tools/docgen/Program.cs b/tools/docgen/Program.cs index 95cf44b61d0..58ea9f3e5bb 100644 --- a/tools/docgen/Program.cs +++ b/tools/docgen/Program.cs @@ -3,6 +3,21 @@ using Nethermind.DocGen; -ConfigGenerator.Generate(); -JsonRpcGenerator.Generate(); -MetricsGenerator.Generate(); +foreach (var arg in args) +{ + switch (arg) + { + case "--config": + ConfigGenerator.Generate(); + break; + case "--dbsize": + DBSizeGenerator.Generate(); + break; + case "--jsonrpc": + JsonRpcGenerator.Generate(); + break; + case "--metrics": + MetricsGenerator.Generate(); + break; + } +} diff --git a/tools/docgen/Properties/launchSettings.json b/tools/docgen/Properties/launchSettings.json new file mode 100644 index 00000000000..7ac1a7f915c --- /dev/null +++ b/tools/docgen/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "DocGen": { + "commandName": "Project", + "commandLineArgs": "--dbsize --config --jsonrpc --metrics" + } + } +} From 79ffe9d10290698f407d266d4e70937cafabea95 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 12 Jun 2024 16:41:19 +0530 Subject: [PATCH 258/551] remove duplicate import --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 51968c13bac..e014afb41f6 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -27,17 +27,11 @@ namespace Nethermind.Evm; -using System.Collections.Frozen; using System.Linq; -using System.Runtime.InteropServices; -using System.Threading; using Int256; using Nethermind.Crypto; -using Nethermind.Core.Collections; - -using Nethermind.Core.Collections; public class VirtualMachine : IVirtualMachine { From e1d32658545fc1d52c7f7717b2b851727f647730 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Sun, 16 Jun 2024 12:04:00 +0530 Subject: [PATCH 259/551] Rename: `ValidatorPublicKey` -> `ValidatorPubKey` (#7172) --- .../ValidatorExit/WithdrawRequestsContract.cs | 2 +- .../Requests/WithdrawalRequestsProcessor.cs | 2 +- .../Nethermind.Core.Test/Builders/TestItem.cs | 12 ++++++------ .../Builders/WithdrawalRequestBuilder.cs | 4 ++-- .../Encoding/BlockDecoderTests.cs | 6 +++--- .../Encoding/ConsensusRequestDecoderTests.cs | 12 ++++++------ .../ConsensusRequests/WithdrawalRequest.cs | 4 ++-- .../WithdrawalRequestDecoder.cs | 12 ++++++------ 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs index aafe88bc66e..a03761f5582 100644 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs +++ b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs @@ -57,7 +57,7 @@ WithdrawalRequest[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state WithdrawalRequest request = new(); Span span = new Span(result, i * sizeOfClass, sizeOfClass); request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); - request.ValidatorPublicKey = span.Slice(20, 48).ToArray(); + request.ValidatorPubkey = span.Slice(20, 48).ToArray(); request.Amount = BitConverter.ToUInt64(span.Slice(68, 8)); withdrawalRequests.Add(request); diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 912bcf16d21..47f49379906 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -57,7 +57,7 @@ public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, WithdrawalRequest request = new(); Span span = new Span(result, i * sizeOfClass, sizeOfClass); request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); - request.ValidatorPublicKey = span.Slice(20, 48).ToArray(); + request.ValidatorPubkey = span.Slice(20, 48).ToArray(); request.Amount = BitConverter.ToUInt64(span.Slice(68, 8).ToArray().Reverse().ToArray()); // ToDo Optimize yield return request; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index 57ebb05c318..bae4135790c 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -108,12 +108,12 @@ public static Hash256 KeccakFromNumber(int i) public static Deposit DepositF_6Eth = new() { Index = 6, Pubkey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray() }; - public static WithdrawalRequest WithdrawalRequestA = new() { SourceAddress = AddressA, ValidatorPublicKey = PublicKeyA.Bytes }; - public static WithdrawalRequest WithdrawalRequestB = new() { SourceAddress = AddressB, ValidatorPublicKey = PublicKeyB.Bytes }; - public static WithdrawalRequest WithdrawalRequestC = new() { SourceAddress = AddressC, ValidatorPublicKey = PublicKeyC.Bytes }; - public static WithdrawalRequest WithdrawalRequestD = new() { SourceAddress = AddressD, ValidatorPublicKey = PublicKeyD.Bytes }; - public static WithdrawalRequest WithdrawalRequestE = new() { SourceAddress = AddressE, ValidatorPublicKey = PublicKeyE.Bytes }; - public static WithdrawalRequest WithdrawalRequestF = new() { SourceAddress = AddressF, ValidatorPublicKey = PublicKeyF.Bytes }; + public static WithdrawalRequest WithdrawalRequestA = new() { SourceAddress = AddressA, ValidatorPubkey = PublicKeyA.Bytes }; + public static WithdrawalRequest WithdrawalRequestB = new() { SourceAddress = AddressB, ValidatorPubkey = PublicKeyB.Bytes }; + public static WithdrawalRequest WithdrawalRequestC = new() { SourceAddress = AddressC, ValidatorPubkey = PublicKeyC.Bytes }; + public static WithdrawalRequest WithdrawalRequestD = new() { SourceAddress = AddressD, ValidatorPubkey = PublicKeyD.Bytes }; + public static WithdrawalRequest WithdrawalRequestE = new() { SourceAddress = AddressE, ValidatorPubkey = PublicKeyE.Bytes }; + public static WithdrawalRequest WithdrawalRequestF = new() { SourceAddress = AddressF, ValidatorPubkey = PublicKeyF.Bytes }; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs index 0cbefde6d4a..4a80e64beca 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs @@ -23,9 +23,9 @@ public WithdrawalRequestBuilder WithSourceAddress(Address sourceAddress) return this; } - public WithdrawalRequestBuilder WithValidatorPubkey(byte[] validatorPubkey) + public WithdrawalRequestBuilder WithValidatorPubkey(byte[] ValidatorPubkey) { - TestObject.ValidatorPublicKey = validatorPubkey; + TestObject.ValidatorPubkey = ValidatorPubkey; return this; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 42a8d64cb1b..4c177e11430 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -59,11 +59,11 @@ public BlockDecoderTests() } else { - byte[] validatorPubkey = new byte[48]; - validatorPubkey[11] = 11; + byte[] ValidatorPubkey = new byte[48]; + ValidatorPubkey[11] = 11; requests[i] = Build.A.WithdrawalRequest .WithSourceAddress(TestItem.AddressA) - .WithValidatorPubkey(validatorPubkey) + .WithValidatorPubkey(ValidatorPubkey) .WithAmount(int.MaxValue) .TestObject; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs index 56da2ad0fc1..3fc4c35588c 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs @@ -35,12 +35,12 @@ public void Roundtrip_deposit() [Test] public void Roundtrip_withdrawalRequest() { - byte[] validatorPubkey = new byte[48]; - validatorPubkey[11] = 11; + byte[] ValidatorPubkey = new byte[48]; + ValidatorPubkey[11] = 11; ConsensusRequest withdrawalRequest = new WithdrawalRequest() { SourceAddress = TestItem.AddressA, - ValidatorPublicKey = validatorPubkey, + ValidatorPubkey = ValidatorPubkey, Amount = int.MaxValue }; @@ -78,7 +78,7 @@ public void Should_decode_withdrawalRequest_with_ValueDecoderContext() ConsensusRequest withdrawalRequest = new WithdrawalRequest() { SourceAddress = TestItem.AddressA, - ValidatorPublicKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue }; RlpStream stream = new(1024); @@ -115,7 +115,7 @@ public void Should_encode_withdrawalRequest_same_for_Rlp_Encode_and_DepositDecod ConsensusRequest withdrawalRequest = new WithdrawalRequest() { SourceAddress = TestItem.AddressA, - ValidatorPublicKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue }; byte[] rlp1 = new ConsensusRequestDecoder().Encode(withdrawalRequest).Bytes; @@ -140,7 +140,7 @@ public void Should_encode_ConsensusRequests_Array() new WithdrawalRequest() { SourceAddress = TestItem.AddressA, - ValidatorPublicKey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), Amount = int.MaxValue } }; diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs index af676e875a2..ee2dc15775e 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -21,7 +21,7 @@ public Address? SourceAddress set { SourceAddressField = value; } } - public byte[]? ValidatorPublicKey + public byte[]? ValidatorPubkey { get { return PubKeyField; } set { PubKeyField = value; } @@ -36,7 +36,7 @@ public ulong Amount public string ToString(string indentation) => @$"{indentation}{nameof(WithdrawalRequest)} {{{nameof(SourceAddress)}: {SourceAddress}, - {nameof(ValidatorPublicKey)}: {ValidatorPublicKey?.ToHexString()}, + {nameof(ValidatorPubkey)}: {ValidatorPubkey?.ToHexString()}, {nameof(Amount)}: {Amount}}}"; diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs index 8584c4d6bb9..bc928f87980 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs @@ -13,7 +13,7 @@ public int GetLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); public int GetContentLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPublicKey) + + Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey) + Rlp.LengthOf(item.Amount); public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -21,12 +21,12 @@ public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = int _ = rlpStream.ReadSequenceLength(); Address sourceAddress = rlpStream.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); - byte[] validatorPubkey = rlpStream.DecodeByteArray(); + byte[] ValidatorPubkey = rlpStream.DecodeByteArray(); ulong amount = rlpStream.DecodeULong(); return new WithdrawalRequest() { SourceAddress = sourceAddress, - ValidatorPublicKey = validatorPubkey, + ValidatorPubkey = ValidatorPubkey, Amount = amount }; } @@ -36,12 +36,12 @@ public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpB int _ = decoderContext.ReadSequenceLength(); Address sourceAddress = decoderContext.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); - byte[] validatorPubkey = decoderContext.DecodeByteArray(); + byte[] ValidatorPubkey = decoderContext.DecodeByteArray(); ulong amount = decoderContext.DecodeULong(); return new WithdrawalRequest() { SourceAddress = sourceAddress, - ValidatorPublicKey = validatorPubkey, + ValidatorPubkey = ValidatorPubkey, Amount = amount }; } @@ -51,7 +51,7 @@ public void Encode(RlpStream stream, WithdrawalRequest item, RlpBehaviors rlpBeh int contentLength = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.SourceAddress); - stream.Encode(item.ValidatorPublicKey); + stream.Encode(item.ValidatorPubkey); stream.Encode(item.Amount); } From 52623787e05193547138b8a4a122879ff11984cc Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 17 Jun 2024 18:52:51 +0530 Subject: [PATCH 260/551] Remove support of eip3074 from pectra (#7189) --- .../Nethermind.Core/Eip3074Constants.cs | 15 - .../Nethermind.Core/Specs/IReleaseSpec.cs | 7 - .../Nethermind.Evm.Test/Eip3074Tests.cs | 911 ------------------ .../Nethermind.Evm.Test/InvalidOpcodeTests.cs | 4 +- src/Nethermind/Nethermind.Evm/EvmException.cs | 3 +- src/Nethermind/Nethermind.Evm/EvmState.cs | 2 - .../Nethermind.Evm/ExecutionType.cs | 3 +- src/Nethermind/Nethermind.Evm/GasCostOf.cs | 3 - src/Nethermind/Nethermind.Evm/Instruction.cs | 2 - .../Nethermind.Evm/VirtualMachine.cs | 151 +-- .../OverridableReleaseSpec.cs | 1 - .../ChainSpecStyle/ChainParameters.cs | 1 - .../ChainSpecBasedSpecProvider.cs | 1 - .../ChainSpecStyle/ChainSpecLoader.cs | 1 - .../Json/ChainSpecParamsJson.cs | 1 - .../Nethermind.Specs/Forks/18_Prague.cs | 1 - .../Nethermind.Specs/ReleaseSpec.cs | 1 - .../SystemTransactionReleaseSpec.cs | 1 - 18 files changed, 12 insertions(+), 1097 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Core/Eip3074Constants.cs delete mode 100644 src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs diff --git a/src/Nethermind/Nethermind.Core/Eip3074Constants.cs b/src/Nethermind/Nethermind.Core/Eip3074Constants.cs deleted file mode 100644 index 1b97f3e7164..00000000000 --- a/src/Nethermind/Nethermind.Core/Eip3074Constants.cs +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Core; - -/// -/// Represents the EIP-3074 parameters. -/// -public class Eip3074Constants -{ - /// - /// Used to prevent signature collision with other signing formats - /// - public const byte AuthMagic = 0x04; -} diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 0fd28b93678..ae59f83655d 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -293,11 +293,6 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// bool IsEip6780Enabled { get; } - /// - /// https://eips.ethereum.org/EIPS/eip-3074 - /// AUTH and AUTHCALL for EOA - /// - bool IsEip3074Enabled { get; } /// Secp256r1 precompile /// bool IsRip7212Enabled { get; } @@ -401,8 +396,6 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool AuRaSystemCalls { get; } public bool BlobBaseFeeEnabled => IsEip4844Enabled; - bool AuthCallsEnabled => IsEip3074Enabled; - public bool ConsensusRequestsEnabled => WithdrawalRequestsEnabled || DepositsEnabled; } } diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs deleted file mode 100644 index 4bf346b9a3c..00000000000 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3074Tests.cs +++ /dev/null @@ -1,911 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core; -using Nethermind.Core.Crypto; -using Nethermind.Core.Extensions; -using Nethermind.Core.Specs; -using Nethermind.Core.Test.Builders; -using Nethermind.Crypto; -using Nethermind.Int256; -using Nethermind.Logging; -using Nethermind.Specs; -using NUnit.Framework; -using System.Collections.Generic; -using System.Linq; - -namespace Nethermind.Evm.Test -{ - public class Eip3074Tests : VirtualMachineTestsBase - { - protected override ForkActivation Activation => MainnetSpecProvider.PragueActivation; - protected override ulong Timestamp => MainnetSpecProvider.PragueBlockTimestamp; - - protected override TestAllTracerWithOutput CreateTracer() => new() { IsTracingAccess = false }; - - public static IEnumerable AuthorityCombinationCases() - { - yield return new object[] { TestItem.PrivateKeyF, TestItem.AddressF, 0x1 }; - yield return new object[] { TestItem.PrivateKeyE, TestItem.AddressE, 0x1 }; - yield return new object[] { TestItem.PrivateKeyF, TestItem.AddressE, 0x0 }; - yield return new object[] { TestItem.PrivateKeyE, TestItem.AddressF, 0x0 }; - } - - [TestCaseSource(nameof(AuthorityCombinationCases))] - public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(PrivateKey signer, Address authority, int expected) - { - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - .PushData(data[96..]) - .PushSingle(96) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(authority) - .Op(Instruction.AUTH) - - //Return the result of Auth - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE8) - .PushSingle(1) - .Op(Instruction.PUSH0) - .Op(Instruction.RETURN) - .Done; - - var result = Execute(code); - - Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); - } - - public static IEnumerable BadMessageDataCases() - { - yield return new object[] - { - TestContext.CurrentContext.Random.NextByte(5, byte.MaxValue), - ((UInt256)1).ToBigEndian().PadLeft(32), - new UInt256(0).PaddedBytes(32), - SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) - }; - yield return new object[] - { - Eip3074Constants.AuthMagic, - new UInt256(12999999).PaddedBytes(32), - new UInt256(0).PaddedBytes(32), - SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) - }; - yield return new object[] - { - Eip3074Constants.AuthMagic, - new UInt256(1).PaddedBytes(32), - new UInt256(99999999999).PaddedBytes(32), - SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) - }; - yield return new object[] - { - Eip3074Constants.AuthMagic, - new UInt256(1).PaddedBytes(32), - new UInt256(0).PaddedBytes(32), - TestItem.AddressF.Bytes.PadLeft(32) - }; - } - - [TestCaseSource(nameof(BadMessageDataCases))] - public void ExecuteAuth_OneOfMessageArgsIsWrong_ReturnsZero(byte magicNumber, byte[] chainId, byte[] nonce, byte[] address) - { - PrivateKey signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer, magicNumber, chainId, nonce, address, new byte[32]); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - .PushData(data[96..]) - .PushSingle(96) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Return the result of Auth - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE8) - .PushSingle(1) - .Op(Instruction.PUSH0) - .Op(Instruction.RETURN) - .Done; - - var result = Execute(code); - - Assert.That(result.ReturnValue[0], Is.EqualTo(0)); - } - - [Test] - public void ExecuteAuth_CommitDataIsWrong_ReturnsZero() - { - PrivateKey signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - //Start index of commit - data[65] = 0x1; - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - .PushData(data[96..]) - .PushSingle(96) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Return the result of Auth - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE8) - .PushSingle(1) - .Op(Instruction.PUSH0) - .Op(Instruction.RETURN) - .Done; - - var result = Execute(code); - - Assert.That(result.ReturnValue[0], Is.EqualTo(0)); - } - - [TestCase(true, 0)] - [TestCase(false, 1)] - public void ExecuteAuth_SignerNonceIsIncrementedAfterSigning_ReturnsExpected(bool incrementNonce, int expected) - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - TestState.CreateAccount(signer.Address, 1.Ether()); - if (incrementNonce) - TestState.IncrementNonce(signer.Address); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Return the result of Auth - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE8) - .PushSingle(1) - .Op(Instruction.PUSH0) - .Op(Instruction.RETURN) - .Done; - - var result = Execute(code); - - Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); - } - - [Test] - public void ExecuteAuth_InvalidAuthorityAfterValidHasBeenSet_CorrectErrorIsReturned() - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Wrong authority - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(TestItem.GetRandomAddress()) - .Op(Instruction.AUTH) - - .PushData(20) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.AddressC) - .PushData(1000000) - .Op(Instruction.AUTHCALL) - .Done; - - var result = Execute(code); - - Assert.That(result.StatusCode, Is.EqualTo(0)); - Assert.That(result.Error, Is.EqualTo(EvmExceptionType.AuthorizedNotSet.ToString())); - } - - [TestCase(66, 1)] - [TestCase(65, 1)] - [TestCase(256, 1)] - [TestCase(64, 0)] - [TestCase(0, 0)] - public void ExecuteAuth_ParamLengthIsLessOrGreaterThanValidSignature_ReturnsExpected(int paramLength, int expected) - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)paramLength) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Return the result of Auth - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE8) - .PushSingle(1) - .Op(Instruction.PUSH0) - .Op(Instruction.RETURN) - .Done; - - var result = Execute(code); - - Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); - } - - - [Test] - public void ExecuteAuth_SignatureIsInvalid_ReturnsZero() - { - var data = new byte[97]; - TestContext.CurrentContext.Random.NextBytes(data); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(TestItem.AddressA) - .Op(Instruction.AUTH) - - //Return the result of Auth - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE8) - .PushSingle(1) - .Op(Instruction.PUSH0) - .Op(Instruction.RETURN) - .Done; - - var result = Execute(code); - - Assert.That(result.ReturnValue[0], Is.EqualTo(0)); - } - - [TestCase(97, GasCostOf.Auth + GasCostOf.ColdAccountAccess)] - [TestCase(160, GasCostOf.Auth + GasCostOf.Memory + GasCostOf.ColdAccountAccess)] - [TestCase(192, GasCostOf.Auth + GasCostOf.Memory * 2 + GasCostOf.ColdAccountAccess)] - [TestCase(193, GasCostOf.Auth + GasCostOf.Memory * 3 + GasCostOf.ColdAccountAccess)] - public void ExecuteAuth_AuthExpandsMemory_GasCostIsAuthPlusMemoryExpansionAndColdAccountAccess(int authMemoryLength, long expectedGas) - { - var data = CreateSignedCommitMessage(TestItem.PrivateKeyF); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - .PushData(data[96..]) - .PushSingle(96) - .Op(Instruction.MSTORE) - - .PushSingle((UInt256)authMemoryLength) - .Op(Instruction.PUSH0) - .PushData(TestItem.AddressF) - .Done; - - var authCode = - code.Concat( - Prepare.EvmCode - .Op(Instruction.AUTH) - .Done - ).ToArray(); - - TestState.CreateAccount(TestItem.AddressC, 0); - TestState.InsertCode(TestItem.AddressC, Keccak.Compute(code), code, Spec); - - TestState.CreateAccount(TestItem.AddressD, 0); - TestState.InsertCode(TestItem.AddressD, Keccak.Compute(authCode), authCode, Spec); - - var resultNoAuth = Execute(code); - var resultWithAuth = Execute(authCode); - - Assert.That(resultWithAuth.GasSpent - resultNoAuth.GasSpent, Is.EqualTo(expectedGas)); - } - - [Test] - public void ExecuteAuthCall_TransactionReturnsTheCurrentCallerAfterAuthCall_SignerIsReturned() - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Just throw away the result - .POP() - - //AuthCall params - .PushData(20) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.AddressC) - .PushData(0) - .Op(Instruction.AUTHCALL) - .PushSingle(20) - .PushSingle(0) - .Op(Instruction.RETURN) - .Done; - - //Simply returns the current msg.caller - byte[] codeReturnCaller = Prepare.EvmCode - .CALLER() - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushSingle(20) - .PushSingle(12) - .Op(Instruction.RETURN) - .Done; - - TestState.CreateAccount(TestItem.AddressC, 0); - TestState.InsertCode(TestItem.AddressC, Keccak.Compute(codeReturnCaller), codeReturnCaller, Spec); - - var result = Execute(code); - - Assert.That(new Address(result.ReturnValue), Is.EqualTo(signer.Address)); - } - - public static IEnumerable AuthCallGasCases() - { - yield return new object[] - { - //Cold access address - TestItem.GetRandomAddress(), - 0, - GasCostOf.ColdAccountAccess, - }; - yield return new object[] - { - //Warm access address - TestItem.AddressF, - 0, - GasCostOf.WarmStateRead, - }; - yield return new object[] - { - //Warm access address - TestItem.AddressF, - 1, - GasCostOf.AuthCallValue + GasCostOf.WarmStateRead, - }; - } - - [TestCaseSource(nameof(AuthCallGasCases))] - public void ExecuteAuthCall_VarmAndColdAddressesAndValueIsZeroOrGreater_UsesCorrectAmountOfGas(Address target, long valueToSend, long expectedCost) - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Just throw away the result - .POP() - - //AuthCall params - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(valueToSend) - .PushData(target) - .PushData(0) - .Done; - - var codeWithAuthCall = code.Concat( - Prepare.EvmCode - .Op(Instruction.AUTHCALL) - .Done).ToArray(); - - TestState.CreateAccount(signer.Address, 1.Ether()); - - TestState.CreateAccount(TestItem.AddressC, 0); - TestState.InsertCode(TestItem.AddressC, Keccak.Compute(code), code, Spec); - - TestState.CreateAccount(TestItem.AddressD, 0); - TestState.InsertCode(TestItem.AddressD, Keccak.Compute(codeWithAuthCall), codeWithAuthCall, Spec); - - var result = Execute(code); - var resultWithAuthCall = Execute(codeWithAuthCall); - - Assert.That(resultWithAuthCall.GasSpent - result.GasSpent, Is.EqualTo(expectedCost)); - } - - [TestCase(1000000, 30000, 30000 - GasCostOf.Gas)] - //If gas limit is 0, all gas should be forwarded remaining after the AuthCall ops and 63/64 rule - [TestCase(1000000, 0, 970631 - 970631 / 64 - GasCostOf.Gas)] - [TestCase(1000000, 970631 - 970631 / 64, 970631 - 970631 / 64 - GasCostOf.Gas)] - public void ExecuteAuthCall_GasLimitIsSetToZeroOrGreater_CorrectAmountOfGasIsForwarded(long gasLimit, long gasToSend, long expectedGasInSubcall) - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Just throw away the result - .POP() - - //AuthCall params - .PushData(32) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.AddressC) - .PushData(gasToSend) - .Op(Instruction.AUTHCALL) - .PushSingle(32) - .PushSingle(0) - .Op(Instruction.RETURN) - .Done; - - var codeStoreGas = Prepare.EvmCode - .GAS() - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushSingle(32) - .Op(Instruction.PUSH0) - .Op(Instruction.RETURN) - .Done; - - TestState.CreateAccount(TestItem.AddressC, 0); - TestState.InsertCode(TestItem.AddressC, Keccak.Compute(codeStoreGas), codeStoreGas, Spec); - - var result = ExecuteAndTrace(gasLimit, code); - - Assert.That(new UInt256(result.ReturnValue, true), Is.EqualTo((UInt256)expectedGasInSubcall)); - } - - [TestCase(1000000000, EvmExceptionType.OutOfGas)] - //Set gas limit to exactly remaining gas after AuthCall + 1 - [TestCase(70631 - 70631 / 64 + 1, EvmExceptionType.OutOfGas)] - [TestCase(70631 - 70631 / 64, null)] - public void ExecuteAuthCall_GasLimitIsHigherThanRemainingGas_ReturnsOutOfGas(long gasLimit, EvmExceptionType? expectedErrorType) - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Just throw away the result - .POP() - - //AuthCall params - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.GetRandomAddress()) - .PushData(gasLimit) - .Op(Instruction.AUTHCALL) - .Done; - - var result = Execute(code); - - Assert.That(result.Error, Is.EqualTo(expectedErrorType?.ToString())); - } - - [Test] - public void ExecuteAuthCall_1GweiIsSent_SignerIsDebitedAndReceiverCredited() - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - Address receiver = TestItem.GetRandomAddress(); - UInt256 valueToSend = 1.GWei(); - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Just throw away the result - .POP() - - //AuthCall params - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(valueToSend) - .PushData(receiver) - .PushData(0) - .Op(Instruction.AUTHCALL) - .Done; - - TestState.CreateAccount(signer.Address, 1.Ether()); - - Execute(code); - - var signerBalance = TestState.GetBalance(signer.Address); - var receiverBalance = TestState.GetBalance(receiver); - - Assert.That(signerBalance, Is.EqualTo(1.Ether() - valueToSend)); - Assert.That(receiverBalance, Is.EqualTo(valueToSend)); - } - - [Test] - public void ExecuteAuthCall_SendingMoreThanSignerBalance_SignerBalanceIsSame() - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - Address receivingAddress = TestItem.AddressC; - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //Just throw away the result - .POP() - - //AuthCall params - .PushData(20) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(1.Ether() + 1) - .PushData(receivingAddress) - .PushData(1000000) - .Op(Instruction.AUTHCALL) - .Done; - - TestState.CreateAccount(signer.Address, 1.Ether()); - - Execute(code); - - var signerBalance = TestState.GetBalance(signer.Address); - var receiverBalance = TestState.GetBalance(receivingAddress); - - Assert.That(signerBalance, Is.EqualTo(1.Ether())); - Assert.That(receiverBalance, Is.EqualTo((UInt256)0)); - } - - [Test] - public void ExecuteAuthCall_SignerHasCodeDeployed_AuthorizedHasNotBeenSet() - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //AuthCall params - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.GetRandomAddress()) - .PushData(0) - .Op(Instruction.AUTHCALL) - .Done; - - var signerCode = Prepare.EvmCode - .Op(Instruction.STOP) - .Done; - - TestState.CreateAccount(signer.Address, 0); - TestState.InsertCode(signer.Address, Keccak.Compute(signerCode), signerCode, Spec); - - var result = Execute(code); - - Assert.That(result.Error, Is.EqualTo(EvmExceptionType.AuthorizedNotSet.ToString())); - } - - [Test] - public void ExecuteAuthCall_AuthCallIsCalledTwiceInSameFrame_AuthorizedIsStillSet() - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - - //AuthCall params - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.GetRandomAddress()) - .PushData(0) - .Op(Instruction.AUTHCALL) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.GetRandomAddress()) - .PushData(0) - .Op(Instruction.AUTHCALL) - .Done; - - var result = Execute(code); - - Assert.That(result.Error, Is.EqualTo(null)); - } - - [Test] - public void ExecuteAuthCall_AuthorizedIsSetAndAuthCallIsCalledInSubcall_AuthorizedIsNotSetInSubcall() - { - var signer = TestItem.PrivateKeyF; - var data = CreateSignedCommitMessage(signer); - - byte[] code = Prepare.EvmCode - .PushData(data[..32]) - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE) - .PushData(data[32..64]) - .PushSingle(32) - .Op(Instruction.MSTORE) - .PushData(data[64..96]) - .PushSingle(64) - .Op(Instruction.MSTORE) - - //Auth params - .PushSingle((UInt256)data.Length) - .Op(Instruction.PUSH0) - .PushData(signer.Address) - .Op(Instruction.AUTH) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.AddressC) - .PushData(10000) - .Op(Instruction.CALL) - .Done; - - var authCall = Prepare.EvmCode - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(0) - .PushData(TestItem.GetRandomAddress()) - .PushData(0) - .Op(Instruction.AUTHCALL) - .Done; - - TestState.CreateAccount(TestItem.AddressC, 0); - TestState.InsertCode(TestItem.AddressC, Keccak.Compute(authCall), authCall, Spec); - - var result = ExecuteAndTrace(code); - Assert.That(result.Entries.Last(e => e.Opcode.Equals(Instruction.AUTHCALL.ToString())).Error, Is.Not.Null); - } - - private byte[] CreateSignedCommitMessage(PrivateKey signer) - { - return CreateSignedCommitMessage( - signer, - Eip3074Constants.AuthMagic, - ((UInt256)SpecProvider.ChainId).ToBigEndian().PadLeft(32), - TestState.GetNonce(signer.Address).PaddedBytes(32), - SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32), - new byte[32] - ); - } - - private byte[] CreateSignedCommitMessage(PrivateKey signer, byte magicNumber, byte[] chainId, byte[] nonce, byte[] address, byte[] commit) - { - List msg = - [ - magicNumber, - .. chainId, - .. nonce, - .. address, - .. commit - ]; - - Hash256 msgDigest = Keccak.Compute(msg.ToArray()); - EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); - - Signature signature = ecdsa.Sign(signer, msgDigest); - //Recovery id/yParity needs to be at index 0 - var data = signature.BytesWithRecovery[64..] - .Concat(signature.BytesWithRecovery[..64]) - .Concat(commit).ToArray(); - return data; - } - } -} diff --git a/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs b/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs index 66fb59e7fc4..7c43f8a4e30 100644 --- a/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs @@ -116,8 +116,8 @@ public class InvalidOpcodeTests : VirtualMachineTestsBase CancunInstructions.Union( new Instruction[] { - Instruction.AUTH, - Instruction.AUTHCALL + // Instruction.AUTH, + // Instruction.AUTHCALL } ).ToArray(); diff --git a/src/Nethermind/Nethermind.Evm/EvmException.cs b/src/Nethermind/Nethermind.Evm/EvmException.cs index d7dad8b4efe..7bc74c52c79 100644 --- a/src/Nethermind/Nethermind.Evm/EvmException.cs +++ b/src/Nethermind/Nethermind.Evm/EvmException.cs @@ -28,7 +28,6 @@ public enum EvmExceptionType NotEnoughBalance, Other, Revert, - InvalidCode, - AuthorizedNotSet + InvalidCode } } diff --git a/src/Nethermind/Nethermind.Evm/EvmState.cs b/src/Nethermind/Nethermind.Evm/EvmState.cs index 9c40779f36c..cd2fa29cb3a 100644 --- a/src/Nethermind/Nethermind.Evm/EvmState.cs +++ b/src/Nethermind/Nethermind.Evm/EvmState.cs @@ -217,7 +217,6 @@ public Address From case ExecutionType.CREATE: case ExecutionType.CREATE2: case ExecutionType.TRANSACTION: - case ExecutionType.AUTHCALL: return Env.Caller; case ExecutionType.DELEGATECALL: return Env.ExecutingAccount; @@ -232,7 +231,6 @@ public Address From public long Refund { get; set; } public Address To => Env.CodeSource ?? Env.ExecutingAccount; - public Address? Authorized { get; set; } internal bool IsPrecompile => Env.CodeInfo.IsPrecompile; public readonly ExecutionEnvironment Env; diff --git a/src/Nethermind/Nethermind.Evm/ExecutionType.cs b/src/Nethermind/Nethermind.Evm/ExecutionType.cs index 946d25d5e38..f0ce0c67737 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionType.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionType.cs @@ -36,8 +36,7 @@ public enum ExecutionType CALLCODE, DELEGATECALL, CREATE, - CREATE2, - AUTHCALL + CREATE2 } // ReSharper restore IdentifierTypo InconsistentNaming } diff --git a/src/Nethermind/Nethermind.Evm/GasCostOf.cs b/src/Nethermind/Nethermind.Evm/GasCostOf.cs index 55f1f7ce571..68dc8cae654 100644 --- a/src/Nethermind/Nethermind.Evm/GasCostOf.cs +++ b/src/Nethermind/Nethermind.Evm/GasCostOf.cs @@ -62,8 +62,5 @@ public static class GasCostOf public const long AccessStorageListEntry = 1900; // eip-2930 public const long TLoad = WarmStateRead; // eip-1153 public const long TStore = WarmStateRead; // eip-1153 - public const long Auth = 3100; // eip-3074 - public const long AuthCallValue = CallValue - CallStipend; // eip-3074 - public const long Gas = Base; } } diff --git a/src/Nethermind/Nethermind.Evm/Instruction.cs b/src/Nethermind/Nethermind.Evm/Instruction.cs index 61d5f1e2502..96fcf3f3595 100644 --- a/src/Nethermind/Nethermind.Evm/Instruction.cs +++ b/src/Nethermind/Nethermind.Evm/Instruction.cs @@ -171,8 +171,6 @@ public enum Instruction : byte REVERT = 0xfd, INVALID = 0xfe, SELFDESTRUCT = 0xff, - AUTH = 0xf6, - AUTHCALL = 0xf7, } public static class InstructionExtensions diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index e014afb41f6..8f497baa21b 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -30,7 +30,6 @@ namespace Nethermind.Evm; using System.Linq; using Int256; -using Nethermind.Crypto; public class VirtualMachine : IVirtualMachine @@ -89,7 +88,6 @@ internal readonly ref struct CallResult public static CallResult StackOverflowException => new(EvmExceptionType.StackOverflow); // TODO: use these to avoid CALL POP attacks public static CallResult StackUnderflowException => new(EvmExceptionType.StackUnderflow); // TODO: use these to avoid CALL POP attacks public static CallResult InvalidCodeException => new(EvmExceptionType.InvalidCode); - public static CallResult AuthorizedNotSet => new(EvmExceptionType.AuthorizedNotSet); public static CallResult Empty => new(default, null); public static object BoxedEmpty { get; } = new object(); @@ -149,8 +147,6 @@ internal sealed class VirtualMachine : IVirtualMachine where TLogger : private ITxTracer _txTracer = NullTxTracer.Instance; private readonly ICodeInfoRepository _codeInfoRepository; - private EthereumEcdsa _ecdsa; - public VirtualMachine( IBlockhashProvider? blockhashProvider, ISpecProvider? specProvider, @@ -162,7 +158,6 @@ public VirtualMachine( _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _codeInfoRepository = codeInfoRepository ?? throw new ArgumentNullException(nameof(codeInfoRepository)); _chainId = ((UInt256)specProvider.ChainId).ToBigEndian(); - _ecdsa = new EthereumEcdsa(specProvider.ChainId, LimboLogs.Instance); } public TransactionSubstate Run(EvmState state, IWorldState worldState, ITxTracer txTracer) @@ -1605,7 +1600,7 @@ private CallResult ExecuteCode(vmState, ref stack, ref gasAvailable, spec, instruction, out returnData); if (exceptionType != EvmExceptionType.None) goto ReturnFailure; @@ -1973,13 +1967,6 @@ private CallResult ExecuteCode throw new OperationCanceledException("Cancellation Requested"); } - [SkipLocalsInit] - private EvmExceptionType InstructionAuth(EvmState vmState, ref EvmStack stack, ref long gasAvailable, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing - { - if (!spec.AuthCallsEnabled) return EvmExceptionType.BadInstruction; - Address authority = stack.PopAddress(); - - if (authority is null) return EvmExceptionType.StackUnderflow; - - if (!stack.PopUInt256(out UInt256 offset)) return EvmExceptionType.StackUnderflow; - if (!stack.PopUInt256(out UInt256 length)) return EvmExceptionType.StackUnderflow; - gasAvailable -= GasCostOf.Auth; - - if (!UpdateMemoryCost(vmState, ref gasAvailable, offset, length)) - return EvmExceptionType.OutOfGas; - - if (!ChargeAccountAccessGas(ref gasAvailable, vmState, authority, spec)) - return EvmExceptionType.OutOfGas; - - if (_state.IsContract(authority)) - { - vmState.Authorized = null; - stack.PushUInt256(0); - return EvmExceptionType.None; - } - - ReadOnlySpan memData = vmState.Memory.Load(in offset, length).Span; - - byte yParity = 0; - Span sigData = stackalloc byte[64]; - Span commit = stackalloc byte[32]; - //SkipLocalsInit flag is active so we have to iterate all data - for (int i = 0; i < 97; i++) - { - byte data = 0; - if (i < length) - data = memData[i]; - switch (i) - { - case 0: - yParity = data; - break; - case >= 1 and <= 64: - sigData[i - 1] = data; - break; - default: - commit[i - 65] = data; - break; - } - } - Signature signature = new(sigData, yParity); - - Address recovered = null; - if (signature.V == Signature.VOffset || signature.V == Signature.VOffset + 1) - { - //TODO is ExecutingAccount correct when DELEGATECALL and CALLCODE? - recovered = TryRecoverSigner(signature, vmState.Env.ExecutingAccount, authority, commit); - } - - if (recovered == authority) - { - stack.PushUInt256(1); - vmState.Authorized = authority; - } - else - { - stack.PushUInt256(0); - vmState.Authorized = null; - } - return EvmExceptionType.None; - } - - private Address? TryRecoverSigner( - Signature signature, - Address invoker, - Address authority, - ReadOnlySpan commit) - { - UInt256 nonce = _state.GetNonce(authority); - byte[] invokerAddress = invoker.Bytes; - Span msg = stackalloc byte[1 + 32 * 4]; - msg[0] = Eip3074Constants.AuthMagic; - for (int i = 0; i < 32; i++) - { - int offset = i + 1; - msg[offset] = _chainId[i]; - msg[32 + 32 - i] = (byte)(nonce[i / 8] >> (8 * (i % 8))); - - if (i < 12) - msg[offset + 64] = 0; - else if (i - 12 < invokerAddress.Length) - msg[offset + 64] = invokerAddress[i - 12]; - - if (i < commit.Length) - msg[offset + 96] = commit[i]; - } - - return _ecdsa.RecoverAddress(signature, Keccak.Compute(msg)); - } - [SkipLocalsInit] [MethodImpl(MethodImplOptions.NoInlining)] private void InstructionExtCodeSize(Address address, ref EvmStack stack, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing @@ -2168,13 +2056,7 @@ private EvmExceptionType InstructionCall( Metrics.IncrementCalls(); if (instruction == Instruction.DELEGATECALL && !spec.DelegateCallEnabled || - instruction == Instruction.STATICCALL && !spec.StaticCallEnabled || - instruction == Instruction.AUTHCALL && !spec.AuthCallsEnabled) return EvmExceptionType.BadInstruction; - - if (instruction == Instruction.AUTHCALL && vmState.Authorized is null) - { - return EvmExceptionType.AuthorizedNotSet; - } + instruction == Instruction.STATICCALL && !spec.StaticCallEnabled) return EvmExceptionType.BadInstruction; if (!stack.PopUInt256(out UInt256 gasLimit)) return EvmExceptionType.StackUnderflow; Address codeSource = stack.PopAddress(); @@ -2204,14 +2086,9 @@ private EvmExceptionType InstructionCall( if (vmState.IsStatic && !transferValue.IsZero && instruction != Instruction.CALLCODE) return EvmExceptionType.StaticCallViolation; - Address caller = instruction switch - { - Instruction.DELEGATECALL => env.Caller, - Instruction.AUTHCALL => vmState.Authorized, - _ => env.ExecutingAccount - }; + Address caller = instruction == Instruction.DELEGATECALL ? env.Caller : env.ExecutingAccount; - Address target = instruction is Instruction.CALL or Instruction.STATICCALL or Instruction.AUTHCALL + Address target = instruction == Instruction.CALL || instruction == Instruction.STATICCALL ? codeSource : env.ExecutingAccount; @@ -2224,7 +2101,7 @@ private EvmExceptionType InstructionCall( if (!transferValue.IsZero) { - gasExtra += instruction == Instruction.AUTHCALL ? GasCostOf.AuthCallValue : GasCostOf.CallValue; + gasExtra += GasCostOf.CallValue; } if (!spec.ClearEmptyAccountWhenTouched && !_state.AccountExists(target)) @@ -2246,16 +2123,7 @@ private EvmExceptionType InstructionCall( if (spec.Use63Over64Rule) { - UInt256 sixtyFourthDeducted = (UInt256)(gasAvailable - gasAvailable / 64); - if (instruction == Instruction.AUTHCALL) - { - //AUTHCALL forwards all, if gas param is zero - if (gasLimit == 0) - gasLimit = sixtyFourthDeducted; - else if (sixtyFourthDeducted < gasLimit) - return EvmExceptionType.OutOfGas; - } - gasLimit = UInt256.Min(sixtyFourthDeducted, gasLimit); + gasLimit = UInt256.Min((UInt256)(gasAvailable - gasAvailable / 64), gasLimit); } if (gasLimit >= long.MaxValue) return EvmExceptionType.OutOfGas; @@ -2263,14 +2131,13 @@ private EvmExceptionType InstructionCall( long gasLimitUl = (long)gasLimit; if (!UpdateGas(gasLimitUl, ref gasAvailable)) return EvmExceptionType.OutOfGas; - if (!transferValue.IsZero && instruction != Instruction.AUTHCALL) + if (!transferValue.IsZero) { if (typeof(TTracingRefunds) == typeof(IsTracing)) _txTracer.ReportExtraGasPressure(GasCostOf.CallStipend); gasLimitUl += GasCostOf.CallStipend; } - Address accountToDebit = instruction == Instruction.AUTHCALL ? vmState.Authorized! : env.ExecutingAccount; - if (env.CallDepth >= MaxCallDepth || !transferValue.IsZero && _state.GetBalance(accountToDebit) < transferValue) + if (env.CallDepth >= MaxCallDepth || !transferValue.IsZero && _state.GetBalance(env.ExecutingAccount) < transferValue) { _returnDataBuffer = Array.Empty(); stack.PushZero(); @@ -2816,7 +2683,6 @@ private CallResult GetFailureReturn(long gasAvailable, Evm EvmExceptionType.StackUnderflow => CallResult.StackUnderflowException, EvmExceptionType.InvalidJumpDestination => CallResult.InvalidJumpDestination, EvmExceptionType.AccessViolation => CallResult.AccessViolationException, - EvmExceptionType.AuthorizedNotSet => CallResult.AuthorizedNotSet, _ => throw new ArgumentOutOfRangeException(nameof(exceptionType), exceptionType, "") }; } @@ -2901,7 +2767,6 @@ private static ExecutionType GetCallExecutionType(Instruction instruction, bool Instruction.DELEGATECALL => ExecutionType.DELEGATECALL, Instruction.STATICCALL => ExecutionType.STATICCALL, Instruction.CALLCODE => ExecutionType.CALLCODE, - Instruction.AUTHCALL => ExecutionType.AUTHCALL, _ => throw new NotSupportedException($"Execution type is undefined for {instruction.GetName(isPostMerge)}") }; } diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index 1d5396d41b9..c960c3a836e 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -160,7 +160,6 @@ public ulong Eip4844TransitionTimestamp public Address Eip7002ContractAddress => _spec.Eip7002ContractAddress; public bool IsEip2935Enabled => _spec.IsEip2935Enabled; public Address Eip2935ContractAddress => _spec.Eip2935ContractAddress; - public bool IsEip3074Enabled => _spec.IsEip3074Enabled; public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; public long ElasticityMultiplier => _spec.ElasticityMultiplier; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs index d4b7ec77e07..dee08eea1aa 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs @@ -116,7 +116,6 @@ public class ChainParameters public ulong? Eip5656TransitionTimestamp { get; set; } public ulong? Eip6780TransitionTimestamp { get; set; } public ulong? Eip4788TransitionTimestamp { get; set; } - public ulong? Eip3074TransitionTimestamp { get; set; } public Address Eip4788ContractAddress { get; set; } public ulong? Eip6110TransitionTimestamp { get; set; } public Address DepositContractAddress { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index 0cf3e1e8407..49d9383ed23 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -251,7 +251,6 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip5656Enabled = (chainSpec.Parameters.Eip5656TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip6780Enabled = (chainSpec.Parameters.Eip6780TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; - releaseSpec.IsEip3074Enabled = (chainSpec.Parameters.Eip3074TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; releaseSpec.AuRaSystemCalls = chainSpec.SealEngineType == SealEngineType.AuRa; releaseSpec.IsEip2935Enabled = (chainSpec.Parameters.Eip2935TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 15d8593469c..a7274d9319c 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -144,7 +144,6 @@ bool GetForInnerPathExistence(KeyValuePair o) => Eip6780TransitionTimestamp = chainSpecJson.Params.Eip6780TransitionTimestamp, Rip7212TransitionTimestamp = chainSpecJson.Params.Rip7212TransitionTimestamp, Eip4788TransitionTimestamp = chainSpecJson.Params.Eip4788TransitionTimestamp, - Eip3074TransitionTimestamp = chainSpecJson.Params.Eip3074TransitionTimestamp, Eip4788ContractAddress = chainSpecJson.Params.Eip4788ContractAddress ?? Eip4788Constants.BeaconRootsAddress, Eip2935TransitionTimestamp = chainSpecJson.Params.Eip2935TransitionTimestamp, Eip2935ContractAddress = chainSpecJson.Params.Eip2935ContractAddress ?? Eip2935Constants.BlockHashHistoryAddress, diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs index 60fc188ee33..7c9a61f267a 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs @@ -140,7 +140,6 @@ internal class ChainSpecParamsJson public ulong? Eip5656TransitionTimestamp { get; set; } public ulong? Eip6780TransitionTimestamp { get; set; } public ulong? Eip4788TransitionTimestamp { get; set; } - public ulong? Eip3074TransitionTimestamp { get; set; } public Address Eip4788ContractAddress { get; set; } public ulong? Eip2935TransitionTimestamp { get; set; } public Address Eip2935ContractAddress { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs index 11e8bed2c21..d88d482ea47 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs @@ -16,7 +16,6 @@ protected Prague() Name = "Prague"; IsEip2537Enabled = true; IsEip2935Enabled = true; - IsEip3074Enabled = true; IsEip6110Enabled = true; IsEip7002Enabled = true; IsRip7212Enabled = true; diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index 9d418c07f18..221d171b762 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -87,7 +87,6 @@ public ReleaseSpec Clone() public bool IsEip4788Enabled { get; set; } public bool IsEip7002Enabled { get; set; } public Address Eip7002ContractAddress { get; set; } - public bool IsEip3074Enabled { get; set; } private Address _eip4788ContractAddress; public Address Eip4788ContractAddress diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index b854b92918f..a26c72aecb2 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -124,7 +124,6 @@ public bool IsEip158IgnoredAccount(Address address) public bool IsEip5656Enabled => _spec.IsEip5656Enabled; public bool IsEip6780Enabled => _spec.IsEip6780Enabled; public bool IsEip4788Enabled => _spec.IsEip4788Enabled; - public bool IsEip3074Enabled => _spec.IsEip3074Enabled; public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; public bool AuRaSystemCalls => false; From 33652fc6dbd146885bb6bac7a9521d6e77ee446c Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 17 Jun 2024 23:26:32 +0200 Subject: [PATCH 261/551] insert code in EOA --- .../Validators/TxValidatorTests.cs | 4 +- .../Builders/TransactionBuilder.cs | 8 +- .../Encoding/TxDecoderTests.cs | 19 +- .../Nethermind.Core/AuthorizationTuple.cs | 35 ++++ .../Nethermind.Core/Eip7702Constants.cs | 2 +- .../Nethermind.Core/SetCodeAuthorization.cs | 43 ----- .../Nethermind.Core/Specs/IReleaseSpec.cs | 2 +- src/Nethermind/Nethermind.Core/Transaction.cs | 11 +- .../Nethermind.Evm.Test/Eip7702Tests.cs | 2 +- .../IntrinsicGasCalculatorTests.cs | 24 +-- .../TransactionProcessorEip7702Tests.cs | 144 ++++++++++++++ .../TransactionProcessorTests.cs | 4 +- .../Nethermind.Evm/ExecutionEnvironment.cs | 30 +++ .../Nethermind.Evm/IVirtualMachine.cs | 2 + .../Nethermind.Evm/IntrinsicGasCalculator.cs | 6 +- .../TransactionProcessor.cs | 78 +++++++- .../Nethermind.Evm/TxExecutionContext.cs | 7 +- .../Nethermind.Evm/VirtualMachine.cs | 44 ++++- .../Eip7702/AuthorizationListDecoder.cs | 176 ++++++++++++++++++ .../Eip7702/SetCodeAuthorizationDecoder.cs | 127 ------------- .../Nethermind.Serialization.Rlp/TxDecoder.cs | 14 +- 21 files changed, 553 insertions(+), 229 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core/AuthorizationTuple.cs delete mode 100644 src/Nethermind/Nethermind.Core/SetCodeAuthorization.cs create mode 100644 src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs delete mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/SetCodeAuthorizationDecoder.cs diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 8f798a3bd59..937f1610aa7 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -536,7 +536,7 @@ public void IsWellFormed_BlobTxHasProofOverTheSizeLimit_ReturnFalse() public void IsWellFormed_ContractCodeTxInCancunSpec_ReturnsFalse() { TransactionBuilder txBuilder = Build.A.Transaction - .WithContractCode(new SetCodeAuthorization(0, TestItem.AddressA, 0, 0, [], [])) + .WithSetCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) .WithChainId(TestBlockchainIds.ChainId) @@ -552,7 +552,7 @@ public void IsWellFormed_ContractCodeTxInCancunSpec_ReturnsFalse() public void IsWellFormed_ContractCodeTxInPragueSpec_ReturnsTrue() { TransactionBuilder txBuilder = Build.A.Transaction - .WithContractCode(new SetCodeAuthorization(0, TestItem.AddressA, 0, 0, [], [])) + .WithSetCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) .WithChainId(TestBlockchainIds.ChainId) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index 9f015698764..6e307871454 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -220,14 +220,14 @@ public TransactionBuilder WithShardBlobTxTypeAndFields(int blobCount = 1, boo return this; } - public TransactionBuilder WithContractCode(SetCodeAuthorization setContractCode) + public TransactionBuilder WithSetCode(AuthorizationTuple setContractCode) { - TestObjectInternal.ContractCodes = TestObjectInternal.ContractCodes != null ? [.. TestObjectInternal.ContractCodes, setContractCode] : [setContractCode]; + TestObjectInternal.AuthorizationList = TestObjectInternal.AuthorizationList != null ? [.. TestObjectInternal.AuthorizationList, setContractCode] : [setContractCode]; return this; } - public TransactionBuilder WithContractCode(IEnumerable contractCodes) + public TransactionBuilder WithSetCode(IEnumerable contractCodes) { - TestObjectInternal.ContractCodes = contractCodes.ToArray(); + TestObjectInternal.AuthorizationList = contractCodes.ToArray(); return this; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs index d26b220c804..361700a9388 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs @@ -66,7 +66,7 @@ public class TxDecoderTests .WithType(TxType.SetCode) .WithGasPrice(0) .WithChainId(1559) - .WithContractCode([new SetCodeAuthorization(0, TestItem.AddressF, 0, 0, [], [])]) + .WithSetCode([new AuthorizationTuple(0, TestItem.AddressF, 0, 0, [], [])]) .SignedAndResolved(), "EIP 7702 first test case"); } @@ -383,16 +383,25 @@ public void Duplicate_storage_keys_result_in_different_hashes() ); } - [Test] - public void TxContractCodeEncodeAndDecode() + public static IEnumerable SetCodeAuthorizationCases() + { + yield return + [ + new AuthorizationTuple(0, TestItem.AddressA, null, ulong.MinValue, [0x0], [0x0]), + new AuthorizationTuple(0, TestItem.AddressF, 0, ulong.MinValue, [0x0], [0x0]) + ]; + } + + + [TestCaseSource(nameof(SetCodeAuthorizationCases))] + public void TxSetCodeEncodeAndDecode(AuthorizationTuple[] setCodeAuthorizations) { Transaction tx = Build.A.Transaction .WithMaxFeePerGas(2.GWei()) .WithType(TxType.SetCode) .WithGasPrice(0) .WithChainId(1559) - .WithContractCode(new SetCodeAuthorization(0, TestItem.AddressF, 0, ulong.MinValue, [0x0], [0x0])) - .WithContractCode(new SetCodeAuthorization(0, TestItem.AddressF, 0, ulong.MinValue, [0xff, 0xff, 0xff], [0xff, 0xff, 0xff])) + .WithSetCode(setCodeAuthorizations) .SignedAndResolved().TestObject; RlpStream rlpStream = new(_txDecoder.GetLength(tx, RlpBehaviors.None)); _txDecoder.Encode(rlpStream, tx); diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs new file mode 100644 index 00000000000..14220c156e2 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Crypto; +using Nethermind.Int256; + +namespace Nethermind.Core; +public class AuthorizationTuple +{ + public AuthorizationTuple( + ulong chainId, + Address codeAddress, + UInt256? nonce, + ulong yParity, + byte[] r, + byte[] s) : this(chainId, codeAddress, nonce, new Signature(r, s, yParity + Signature.VOffset)) + { } + + public AuthorizationTuple( + ulong chainId, + Address codeAddress, + UInt256? nonce, + Signature sig) + { + ChainId = chainId; + CodeAddress = codeAddress ?? throw new System.ArgumentNullException(nameof(codeAddress)); + Nonce = nonce; + AuthoritySignature = sig ?? throw new System.ArgumentNullException(nameof(sig)); + } + + public ulong ChainId { get; } + public Address CodeAddress { get; } + public UInt256? Nonce { get; } + public Signature AuthoritySignature { get; } +} diff --git a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs index d3b6b7b6ca9..f9f34643540 100644 --- a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs +++ b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs @@ -10,5 +10,5 @@ namespace Nethermind.Core; public static class Eip7702Constants { - public static byte Magic => 4; + public static byte Magic => 0x05; } diff --git a/src/Nethermind/Nethermind.Core/SetCodeAuthorization.cs b/src/Nethermind/Nethermind.Core/SetCodeAuthorization.cs deleted file mode 100644 index fcc0f22ae99..00000000000 --- a/src/Nethermind/Nethermind.Core/SetCodeAuthorization.cs +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Int256; - -namespace Nethermind.Core; -public class SetCodeAuthorization -{ - public SetCodeAuthorization( - ulong chainId, - Address codeAddress, - UInt256 nonce, - Signature sig) : this(chainId, codeAddress, nonce, sig.V, sig.R, sig.S) - {} - - public SetCodeAuthorization( - ulong chainId, - Address codeAddress, - UInt256 nonce, - ulong yParity, - byte[] r, - byte[] s) - { - ChainId = chainId; - CodeAddress = codeAddress; - Nonce = nonce; - YParity = yParity; - R = r; - S = s; - } - public ulong? ChainId { get; } - public Address? CodeAddress { get; } - public UInt256? Nonce { get; } - public ulong YParity { get; } - public byte[] R { get; } - public byte[] S { get; } - - public Hash256 Digest() - { - - } -} diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 2a150e34a09..0c8d01de404 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -367,6 +367,6 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool MCopyIncluded => IsEip5656Enabled; public bool BlobBaseFeeEnabled => IsEip4844Enabled; - bool UseContractCode => IsEip7702Enabled; + bool IsAuthorizationListEnabled => IsEip7702Enabled; } } diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index 81a64a7b6da..fb9ada5caa2 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -4,6 +4,7 @@ using System; using System.Buffers; using System.Diagnostics; +using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Text.Json.Serialization; @@ -54,6 +55,10 @@ public class Transaction public bool IsSigned => Signature is not null; public bool IsContractCreation => To is null; public bool IsMessageCall => To is not null; + public bool HasAuthorizationList => + Type == TxType.SetCode && + AuthorizationList is not null && + AuthorizationList.Any(); private Hash256? _hash; @@ -160,7 +165,7 @@ private void ClearPreHashInternal() public object? NetworkWrapper { get; set; } - public SetCodeAuthorization[]? ContractCodes { get; set; } // https://eips.ethereum.org/EIPS/eip-7702 + public AuthorizationTuple[]? AuthorizationList { get; set; } // https://eips.ethereum.org/EIPS/eip-7702 /// /// Service transactions are free. The field added to handle baseFee validation after 1559 @@ -264,7 +269,7 @@ public bool Return(Transaction obj) obj.IsServiceTransaction = default; obj.PoolIndex = default; obj._size = default; - obj.ContractCodes = default; + obj.AuthorizationList = default; return true; } @@ -295,7 +300,7 @@ public void CopyTo(Transaction tx) tx.IsServiceTransaction = IsServiceTransaction; tx.PoolIndex = PoolIndex; tx._size = _size; - tx.ContractCodes = ContractCodes; + tx.AuthorizationList = AuthorizationList; } } diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs index 6dee81104ad..6892715a77f 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs @@ -50,7 +50,7 @@ public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(Pr Transaction tx = Build.A.Transaction .WithType(TxType.SetCode) - .WithContractCode(new SetCodeAuthorization(0, TestItem.AddressF, 0, sig)) + .WithSetCode(new AuthorizationTuple(0, TestItem.AddressF, 0, sig)) .WithGasLimit(40000) .WithGasPrice(1) .WithValue(0) diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index 1df61e0380a..4092e6e6373 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -117,10 +117,10 @@ void Test(IReleaseSpec spec, bool isAfterRepricing) Test(Shanghai.Instance, true); Test(Cancun.Instance, true); } - public static IEnumerable<(SetCodeAuthorization[] contractCode, long expectedCost)> SetContractCodeTestCaseSource() + public static IEnumerable<(AuthorizationTuple[] contractCode, long expectedCost)> SetCodeTestCaseSource() { yield return ( - [new SetCodeAuthorization( + [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), @@ -130,14 +130,14 @@ [new SetCodeAuthorization( ], GasCostOf.PerAuthBaseCost); yield return ( - [new SetCodeAuthorization( + [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)), - new SetCodeAuthorization( + new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), @@ -147,21 +147,21 @@ [new SetCodeAuthorization( ], GasCostOf.PerAuthBaseCost * 2); yield return ( - [new SetCodeAuthorization( + [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)), - new SetCodeAuthorization( + new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)), - new SetCodeAuthorization( + new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), @@ -171,11 +171,11 @@ [new SetCodeAuthorization( ], GasCostOf.PerAuthBaseCost * 3); } - [TestCaseSource(nameof(SetContractCodeTestCaseSource))] - public void Calculate_TxHasSetCode_ReturnsExpectedCostOfTx((SetCodeAuthorization[] ContractCodes, long ExpectedCost) testCase) + [TestCaseSource(nameof(SetCodeTestCaseSource))] + public void Calculate_TxHasSetCode_ReturnsExpectedCostOfTx((AuthorizationTuple[] ContractCodes, long ExpectedCost) testCase) { Transaction tx = Build.A.Transaction.SignedAndResolved() - .WithContractCode(testCase.ContractCodes) + .WithSetCode(testCase.ContractCodes) .TestObject; IntrinsicGasCalculator.Calculate(tx, Prague.Instance) @@ -186,8 +186,8 @@ public void Calculate_TxHasSetCode_ReturnsExpectedCostOfTx((SetCodeAuthorization public void Calculate_TxHasSetCodeBeforePrague_ThrowsInvalidDataException() { Transaction tx = Build.A.Transaction.SignedAndResolved() - .WithContractCode( - new SetCodeAuthorization( + .WithSetCode( + new AuthorizationTuple( 0, TestItem.AddressF, 0, diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs new file mode 100644 index 00000000000..d944181b334 --- /dev/null +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -0,0 +1,144 @@ +// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.Crypto; +using Nethermind.Db; +using Nethermind.Int256; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Logging; +using Nethermind.Specs.Forks; +using Nethermind.State; +using Nethermind.Trie.Pruning; +using NUnit.Framework; +using System.Collections.Generic; +using Nethermind.Core.Crypto; +using Nethermind.Serialization.Rlp.Eip7702; +using Nethermind.Serialization.Rlp; +using System; +using Nethermind.Network; + +namespace Nethermind.Evm.Test; + +[TestFixture] +internal class TransactionProcessorEip7702Tests +{ + private ISpecProvider _specProvider; + private IEthereumEcdsa _ethereumEcdsa; + private TransactionProcessor _transactionProcessor; + private IWorldState _stateProvider; + + [SetUp] + public void Setup() + { + MemDb stateDb = new(); + _specProvider = new TestSpecProvider(Prague.Instance); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); + VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, LimboLogs.Instance); + _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, LimboLogs.Instance); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + } + + [Test] + public void Execute_TxHasAuthorizationWithCodeThatSavesCallerAddress_ExpectedAddressIsSaved() + { + PrivateKey relayer = TestItem.PrivateKeyA; + PrivateKey signer = TestItem.PrivateKeyB; + Address codeSource = TestItem.AddressC; + _stateProvider.CreateAccount(relayer.Address, 1.Ether()); + //Save caller in storage slot 0 + byte[] code = Prepare.EvmCode + .Op(Instruction.CALLER) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done; + DeployCode(codeSource, code); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(60_000) + .WithSetCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) + .SignedAndResolved(_ethereumEcdsa, relayer, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + + _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + + ReadOnlySpan cell = _stateProvider.Get(new StorageCell(signer.Address, 0)); + + Assert.That(new Address(cell.ToArray()), Is.EqualTo(relayer.Address)); + } + public static IEnumerable DifferentCommitValues() + { + //Base case + yield return new object[] { 1ul, (UInt256)0, TestItem.AddressA.Bytes }; + //Wrong nonce + yield return new object[] { 1ul, (UInt256)1, new[] { (byte)0x0 }}; + //Null nonce means it should be ignored + yield return new object[] { 1ul, null, TestItem.AddressA.Bytes}; + //Wrong chain id + yield return new object[] { 2ul, (UInt256)0, new[] { (byte)0x0 } }; + } + + [TestCaseSource(nameof(DifferentCommitValues))] + public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorageSlot(ulong chainId, UInt256? nonce, byte[] expectedStorageValue) + { + PrivateKey relayer = TestItem.PrivateKeyA; + PrivateKey signer = TestItem.PrivateKeyB; + Address codeSource = TestItem.AddressC; + _stateProvider.CreateAccount(relayer.Address, 1.Ether()); + //Save caller in storage slot 0 + byte[] code = Prepare.EvmCode + .Op(Instruction.CALLER) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done; + DeployCode(codeSource, code); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(60_000) + .WithSetCode(CreateAuthorizationTuple(signer,chainId, codeSource, nonce)) + .SignedAndResolved(_ethereumEcdsa, relayer, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + + _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + + Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EqualTo(expectedStorageValue)); + } + + private void DeployCode(Address codeSource, byte[] code) + { + _stateProvider.CreateAccount(codeSource, 0); + _stateProvider.InsertCode(codeSource, Keccak.Compute(code), code, _specProvider.GetSpec(MainnetSpecProvider.PragueActivation)); + } + + private AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) + { + AuthorizationListDecoder decoder = new(); + RlpStream rlp = decoder.EncodeForCommitMessage(chainId, codeAddress, nonce); + Span code = stackalloc byte[rlp.Length + 1]; + code[0] = Eip7702Constants.Magic; + rlp.Data.AsSpan().CopyTo(code.Slice(1)); + + Signature sig = _ethereumEcdsa.Sign(signer, Keccak.Compute(code)); + + return new AuthorizationTuple(chainId, codeAddress, nonce, sig); + } + +} diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs index 5d30cc00eee..b51a22e1084 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs @@ -25,6 +25,9 @@ using NUnit.Framework; using Nethermind.Config; using System.Collections.Generic; +using Nethermind.Serialization.Rlp.Eip7702; +using Nethermind.Serialization.Rlp; +using Nethermind.Core.Crypto; namespace Nethermind.Evm.Test; @@ -57,7 +60,6 @@ public void Setup() _stateProvider.CreateAccount(TestItem.AddressA, AccountBalance); _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs index ec6600fef8e..facb40e2f7d 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; using Nethermind.Core; using Nethermind.Evm.CodeAnalysis; using Nethermind.Int256; @@ -20,6 +21,32 @@ public ExecutionEnvironment in TxExecutionContext txExecutionContext, UInt256 transferValue, UInt256 value, + int callDepth = 0 + ) : + this( + codeInfo, + executingAccount, + caller, + codeSource, + inputData, + txExecutionContext, + transferValue, + value, + Array.Empty
(), + callDepth) + { } + + public ExecutionEnvironment + ( + CodeInfo codeInfo, + Address executingAccount, + Address caller, + Address? codeSource, + ReadOnlyMemory inputData, + in TxExecutionContext txExecutionContext, + UInt256 transferValue, + UInt256 value, + IEnumerable
authorizedAddresses, int callDepth = 0) { CodeInfo = codeInfo; @@ -31,6 +58,7 @@ public ExecutionEnvironment TransferValue = transferValue; Value = value; CallDepth = callDepth; + AuthorizedAddresses = authorizedAddresses; } /// @@ -77,5 +105,7 @@ public ExecutionEnvironment /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. public readonly int CallDepth; + + public readonly IEnumerable
AuthorizedAddresses; } } diff --git a/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs b/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs index 8fc865a0d82..956859bf6b2 100644 --- a/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -19,6 +20,7 @@ TransactionSubstate Run(EvmState state, IWorldState worldState, where TTracingActions : struct, IIsTracing; CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec spec); + CodeInfo GetAuthorizedOrCachedCodeInfo(IDictionary authorizedCode, IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); void InsertCode(ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec); } } diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index f6d7c76f5d0..768643d5d76 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -84,14 +84,14 @@ private static long AccessListCost(Transaction transaction, IReleaseSpec release private static long ContractCodeCost(Transaction transaction, IReleaseSpec releaseSpec) { - SetCodeAuthorization[]? contractCodes = transaction.ContractCodes; + AuthorizationTuple[]? contractCodes = transaction.AuthorizationList; long contractCodeCost = 0; if (contractCodes is not null) { - if (!releaseSpec.UseContractCode) + if (!releaseSpec.IsAuthorizationListEnabled) { throw new InvalidDataException( - $"Transaction with a contract code received within the context of {releaseSpec.Name}. Eip-7702 is not enabled."); + $"Transaction with an authorization_list received within the context of {releaseSpec.Name}. Eip-7702 is not enabled."); } if (contractCodes.Length == 0) return contractCodeCost; diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index c0703b117d0..b04204238b6 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; @@ -17,6 +18,8 @@ using Nethermind.Evm.Tracing; using Nethermind.Int256; using Nethermind.Logging; +using Nethermind.Serialization.Rlp; +using Nethermind.Serialization.Rlp.Eip7702; using Nethermind.Specs; using Nethermind.State; using Nethermind.State.Tracing; @@ -34,6 +37,9 @@ public class TransactionProcessor : ITransactionProcessor protected IWorldState WorldState { get; private init; } protected IVirtualMachine VirtualMachine { get; private init; } + private AuthorizationListDecoder _authorizationListDecoder = new(); + private Dictionary _authorizationCodeCache = new(); + [Flags] protected enum ExecutionOptions { @@ -127,12 +133,17 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); - ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice); + if (spec.IsEip7702Enabled && tx.HasAuthorizationList) + BuildAuthorizedCodeCache(tx.AuthorizationList, _authorizationCodeCache, spec); + + ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _authorizationCodeCache); long gasAvailable = tx.GasLimit - intrinsicGas; ExecuteEvmCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode); + _authorizationCodeCache.Clear(); + // Finalize if (restore) { @@ -399,16 +410,17 @@ protected ExecutionEnvironment BuildExecutionEnvironment( Transaction tx, in BlockExecutionContext blCtx, IReleaseSpec spec, - in UInt256 effectiveGasPrice) + in UInt256 effectiveGasPrice, + IDictionary authorizedCode) { Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0); if (recipient is null) ThrowInvalidDataException("Recipient has not been resolved properly before tx execution"); - TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); + TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes, authorizedCode); CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data ?? Memory.Empty) - : VirtualMachine.GetCachedCodeInfo(WorldState, recipient, spec); + : VirtualMachine.GetAuthorizedOrCachedCodeInfo(authorizedCode, WorldState, recipient, spec); codeInfo.AnalyseInBackgroundIfRequired(); @@ -453,10 +465,6 @@ protected void ExecuteEvmCall( // If sender is SystemUser subtracting value will cause InsufficientBalanceException if (validate || !tx.IsSystem()) WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); - if (tx.Type == TxType.SetCode) - { - Ecdsa.RecoverAddress(); - } try { @@ -486,6 +494,11 @@ protected void ExecuteEvmCall( state.WarmUp(header.GasBeneficiary); } + foreach (Address authorized in env.TxExecutionContext.AuthorizedCode.Keys) + { + state.WarmUp(authorized); + } + substate = !tracer.IsTracingActions ? VirtualMachine.Run(state, WorldState, tracer) : VirtualMachine.Run(state, WorldState, tracer); @@ -542,6 +555,11 @@ protected void ExecuteEvmCall( tracer.ReportRefund(RefundOf.Destroy(spec.IsEip3529Enabled)); } + foreach(Address toBeRemoved in env.AuthorizedAddresses) + { + VirtualMachine.InsertCode(Array.Empty(), toBeRemoved, spec); + } + statusCode = StatusCode.Success; } @@ -556,6 +574,50 @@ protected void ExecuteEvmCall( if (validate && !tx.IsSystem()) header.GasUsed += spentGas; } + /// + /// eip-7702 + /// Insert temporary code into EOA's authorized by signature. + /// + /// + /// + /// + /// + private void BuildAuthorizedCodeCache(AuthorizationTuple[] authorizations, IDictionary authorizedCache, IReleaseSpec spec) + { + if (authorizedCache.Any()) + authorizedCache.Clear(); + + Span encoded = stackalloc byte[128]; + encoded[0] = Eip7702Constants.Magic; + //TODO optimize + //TODO try parallel sig recovery + foreach (AuthorizationTuple authTuple in authorizations) + { + if (authTuple.ChainId != 0 && SpecProvider.ChainId != authTuple.ChainId) + { + if (Logger.IsDebug) Logger.Debug($"Skipping tuple in authorization_list because chain id ({authTuple.ChainId}) does not match."); + continue; + } + RlpStream stream = _authorizationListDecoder.EncodeForCommitMessage(authTuple.ChainId, authTuple.CodeAddress, authTuple.Nonce); + stream.Data.AsSpan().CopyTo(encoded.Slice(1)); + Address authority = Ecdsa.RecoverAddress(authTuple.AuthoritySignature, Keccak.Compute(encoded.Slice(0, stream.Data.Length + 1))); + + CodeInfo authorityCodeInfo = VirtualMachine.GetCachedCodeInfo(WorldState, authority, spec); + if (authorityCodeInfo.MachineCode.Length > 0) + { + if (Logger.IsDebug) Logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) has code deployed."); + continue; + } + if (authTuple.Nonce != null && WorldState.GetNonce(authority) != authTuple.Nonce) + { + if (Logger.IsDebug) Logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) nonce ({authTuple.Nonce}) does not match."); + continue; + } + CodeInfo codeToBeInserted = VirtualMachine.GetCachedCodeInfo(WorldState, authTuple.CodeAddress, spec); + //TODO should we do insert if code is empty? + authorizedCache.Add(authority, codeToBeInserted); + } + } protected virtual void PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) { diff --git a/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs b/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs index 637c6fc0258..5c2f7cce54a 100644 --- a/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs +++ b/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs @@ -2,7 +2,10 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Evm.CodeAnalysis; using Nethermind.Int256; +using System; +using System.Collections.Generic; namespace Nethermind.Evm { @@ -12,13 +15,15 @@ public readonly struct TxExecutionContext public Address Origin { get; } public UInt256 GasPrice { get; } public byte[][]? BlobVersionedHashes { get; } + public IDictionary AuthorizedCode { get; } - public TxExecutionContext(in BlockExecutionContext blockExecutionContext, Address origin, in UInt256 gasPrice, byte[][] blobVersionedHashes) + public TxExecutionContext(in BlockExecutionContext blockExecutionContext, Address origin, in UInt256 gasPrice, byte[][] blobVersionedHashes, IDictionary authorizedCode) { BlockExecutionContext = blockExecutionContext; Origin = origin; GasPrice = gasPrice; BlobVersionedHashes = blobVersionedHashes; + AuthorizedCode = authorizedCode; } } } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 7f681fdb560..cec452bf1ff 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -46,6 +46,7 @@ public class VirtualMachine : IVirtualMachine public const int MaxCallDepth = 1024; internal static FrozenDictionary PrecompileCode { get; } = InitializePrecompiledContracts(); internal static CodeLruCache CodeCache { get; } = new(); + internal static CodeLruCache AuthorizationCodeCache { get; } = new(); private readonly static UInt256 P255Int = (UInt256)System.Numerics.BigInteger.Pow(2, 255); internal static ref readonly UInt256 P255 => ref P255Int; @@ -90,6 +91,8 @@ public VirtualMachine( public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec spec) => _evm.GetCachedCodeInfo(worldState, codeSource, spec); + public CodeInfo GetAuthorizedOrCachedCodeInfo(IDictionary authorizedCode, IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) + => _evm.GetAuthorizedOrCachedCodeInfo(authorizedCode, worldState, codeSource, vmSpec); public void InsertCode(ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) { @@ -185,6 +188,10 @@ public interface IIsTracing { } public readonly struct NotTracing : IIsTracing { } public readonly struct IsTracing : IIsTracing { } + internal sealed class AuthorizedCodeLruCache + { + + } internal sealed class CodeLruCache { private const int CacheCount = 16; @@ -530,12 +537,16 @@ public TransactionSubstate Run(EvmState state, IWorldState worl } public void InsertCode(ReadOnlyMemory code, Address callCodeOwner, IReleaseSpec spec) + { + InsertCode(code, callCodeOwner, _state, spec); + } + public void InsertCode(ReadOnlyMemory code, Address callCodeOwner, IWorldState state, IReleaseSpec spec) { var codeInfo = new CodeInfo(code); codeInfo.AnalyseInBackgroundIfRequired(); Hash256 codeHash = code.Length == 0 ? Keccak.OfAnEmptyString : Keccak.Compute(code.Span); - _state.InsertCode(callCodeOwner, codeHash, code, spec); + state.InsertCode(callCodeOwner, codeHash, code, spec); CodeCache.Set(codeHash, codeInfo); } @@ -576,9 +587,8 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR MissingCode(codeSource, codeHash); } - cachedCodeInfo = new CodeInfo(code); + cachedCodeInfo = new(code); cachedCodeInfo.AnalyseInBackgroundIfRequired(); - CodeCache.Set(codeHash, cachedCodeInfo); } else @@ -596,6 +606,19 @@ static void MissingCode(Address codeSource, in ValueHash256 codeHash) } } + /// + /// Lookup for code from authorization_list and state. See . + /// + /// + public CodeInfo GetAuthorizedOrCachedCodeInfo(IDictionary authorizedCode, IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) + { + if (vmSpec.IsAuthorizationListEnabled && authorizedCode.ContainsKey(codeSource)) + { + return authorizedCode[codeSource]; + } + return GetCachedCodeInfo(worldState, codeSource, vmSpec); + } + private static bool UpdateGas(long gasCost, ref long gasAvailable) { if (gasAvailable < gasCost) @@ -1442,8 +1465,8 @@ private CallResult ExecuteCode externalCode = GetCachedCodeInfo(_worldState, address, spec).MachineCode; + ReadOnlyMemory externalCode = GetAuthorizedOrCachedCodeInfo(txCtx.AuthorizedCode, _worldState, address, spec).MachineCode; slice = externalCode.SliceWithZeroPadding(b, (int)result); vmState.Memory.Save(in a, in slice); if (typeof(TTracingInstructions) == typeof(IsTracing)) @@ -2170,9 +2193,10 @@ static void ThrowOperationCanceledException() => [SkipLocalsInit] [MethodImpl(MethodImplOptions.NoInlining)] - private void InstructionExtCodeSize(Address address, ref EvmStack stack, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing + private void InstructionExtCodeSize(Address address, ref EvmStack stack, IDictionary authorizedCode, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing { - int codeLength = GetCachedCodeInfo(_worldState, address, spec).MachineCode.Span.Length; + + int codeLength = GetAuthorizedOrCachedCodeInfo(authorizedCode, _worldState, address, spec).MachineCode.Span.Length; UInt256 result = (UInt256)codeLength; stack.PushUInt256(in result); } @@ -2249,8 +2273,8 @@ private EvmExceptionType InstructionCall( !UpdateMemoryCost(vmState, ref gasAvailable, in dataOffset, dataLength) || !UpdateMemoryCost(vmState, ref gasAvailable, in outputOffset, outputLength) || !UpdateGas(gasExtra, ref gasAvailable)) return EvmExceptionType.OutOfGas; - - CodeInfo codeInfo = GetCachedCodeInfo(_worldState, codeSource, spec); + + CodeInfo codeInfo = GetAuthorizedOrCachedCodeInfo(vmState.Env.TxExecutionContext.AuthorizedCode, _worldState, codeSource, spec); codeInfo.AnalyseInBackgroundIfRequired(); if (spec.Use63Over64Rule) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs new file mode 100644 index 00000000000..713fa72f303 --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs @@ -0,0 +1,176 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Int256; +using System; +using System.Collections.Generic; + +namespace Nethermind.Serialization.Rlp.Eip7702; +public class AuthorizationListDecoder : IRlpStreamDecoder, IRlpValueDecoder +{ + public AuthorizationTuple[]? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (rlpStream.IsNextItemNull()) + { + rlpStream.ReadByte(); + return null; + } + + int outerLength = rlpStream.ReadSequenceLength(); + + int check = rlpStream.Position + outerLength; + + List result = new List(); + + while (rlpStream.Position < check) + { + //TODO check what is valid for the fields here + var chainId = rlpStream.DecodeULong(); + Address codeAddress = rlpStream.DecodeAddress(); + UInt256? nonce = null; + int nonceLength = rlpStream.ReadSequenceLength(); + if (nonceLength > 0) + nonce = rlpStream.DecodeUInt256(); + result.Add(new AuthorizationTuple( + chainId, + codeAddress, + nonce, + rlpStream.DecodeULong(), + rlpStream.DecodeByteArray(), + rlpStream.DecodeByteArray())); + } + + if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + { + rlpStream.Check(check); + } + return result.ToArray(); + } + + public AuthorizationTuple[]? Decode( + ref Rlp.ValueDecoderContext decoderContext, + RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (decoderContext.IsNextItemNull()) + { + decoderContext.ReadByte(); + return null; + } + + int outerLength = decoderContext.ReadSequenceLength(); + + int check = decoderContext.Position + outerLength; + + List result = new List(); + + while (decoderContext.Position < check) + { + //TODO check what is valid for the fields here + var chainId = decoderContext.DecodeULong(); + Address codeAddress = decoderContext.DecodeAddress(); + int nonceLength = decoderContext.ReadSequenceLength(); + //Nonce is optional and is therefore made as a sequence + UInt256? nonce = null; + if (nonceLength > 0) + nonce = decoderContext.DecodeUInt256(); + result.Add(new AuthorizationTuple( + chainId, + codeAddress, + nonce, + //Signature + decoderContext.DecodeULong(), + decoderContext.DecodeByteArray(), + decoderContext.DecodeByteArray())); + } + + if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + { + decoderContext.Check(check); + } + return result.ToArray(); + } + + public void Encode(RlpStream stream, AuthorizationTuple[]? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (item is null) + { + stream.WriteByte(Rlp.NullObjectByte); + return; + } + + int contentLength = GetContentLength(item); + stream.StartSequence(contentLength); + foreach (AuthorizationTuple setCode in item) + { + stream.Encode(setCode.ChainId); + stream.Encode(setCode.CodeAddress ?? throw new RlpException($"Invalid tx {nameof(AuthorizationTuple)} format - address is null")); + if (setCode.Nonce != null) + { + stream.StartSequence(Rlp.LengthOf(setCode.Nonce)); + stream.Encode((UInt256)setCode.Nonce); + } + else + { + stream.StartSequence(0); + } + stream.Encode(setCode.AuthoritySignature.V); + stream.Encode(setCode.AuthoritySignature.R); + stream.Encode(setCode.AuthoritySignature.S); + } + } + + public RlpStream EncodeForCommitMessage(ulong chainId, Address codeAddress, UInt256? nonce) + { + int contentLength = Rlp.LengthOf(chainId) + Rlp.LengthOf(codeAddress) + (nonce != null ? Rlp.LengthOfSequence(Rlp.LengthOf(nonce)) : Rlp.OfEmptySequence.Length); + var totalLength = Rlp.LengthOfSequence(contentLength); + RlpStream stream = new RlpStream(totalLength); + EncodeForCommitMessage(stream, chainId, codeAddress, nonce); + return stream; + } + + public void EncodeForCommitMessage(RlpStream stream, ulong chainId, Address codeAddress, UInt256? nonce) + { + int contentLength = GetContentLengthWithoutSig(chainId, codeAddress, nonce); + stream.StartSequence(contentLength); + stream.Encode(chainId); + stream.Encode(codeAddress ?? throw new RlpException($"Invalid tx {nameof(AuthorizationTuple)} format - address is null")); + if (nonce != null) + { + stream.StartSequence(Rlp.LengthOf(nonce)); + stream.Encode((UInt256)nonce); + } + else + { + stream.StartSequence(0); + } + } + + public int GetLength(AuthorizationTuple[]? setCodeAuths, RlpBehaviors rlpBehaviors) + { + if (setCodeAuths is null) + { + return Rlp.OfEmptySequence.Length; + } + + int contentLength = GetContentLength(setCodeAuths); + return Rlp.LengthOfSequence(contentLength); + } + + private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress, UInt256? nonce) + { + return + Rlp.LengthOf(chainId) + + Rlp.LengthOf(codeAddress) + + (nonce != null ? Rlp.LengthOfSequence(Rlp.LengthOf(nonce)) : Rlp.OfEmptySequence.Length); + } + private static int GetContentLength(ReadOnlySpan setCodeAuths) + { + int total = 0; + foreach (var code in setCodeAuths) + { + total += GetContentLengthWithoutSig(code.ChainId, code.CodeAddress, code.Nonce) + Rlp.LengthOf(code.AuthoritySignature.V) + Rlp.LengthOf(code.AuthoritySignature.R.AsSpan()) + Rlp.LengthOf(code.AuthoritySignature.S.AsSpan()); + } + return total; + } +} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/SetCodeAuthorizationDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/SetCodeAuthorizationDecoder.cs deleted file mode 100644 index 2c0d48e9ce2..00000000000 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/SetCodeAuthorizationDecoder.cs +++ /dev/null @@ -1,127 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Eip2930; -using Nethermind.Core; -using Nethermind.Int256; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Nethermind.Serialization.Rlp.Eip7702; -public class SetCodeAuthorizationDecoder : IRlpStreamDecoder, IRlpValueDecoder -{ - public SetCodeAuthorization[]? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (rlpStream.IsNextItemNull()) - { - rlpStream.ReadByte(); - return null; - } - - int outerLength = rlpStream.ReadSequenceLength(); - - int check = rlpStream.Position + outerLength; - - List result = new List(); - - while (rlpStream.Position < check) - { - //TODO check what is valid for the fields here - byte[] contractCode = rlpStream.DecodeByteArray(); - result.Add(new SetCodeAuthorization( - rlpStream.DecodeULong(), - rlpStream.DecodeAddress(), - rlpStream.DecodeUInt256(), - rlpStream.DecodeULong(), - rlpStream.DecodeByteArray(), - rlpStream.DecodeByteArray())); - } - - if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) - { - rlpStream.Check(check); - } - return result.ToArray(); - } - - public SetCodeAuthorization[]? Decode( - ref Rlp.ValueDecoderContext decoderContext, - RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (decoderContext.IsNextItemNull()) - { - decoderContext.ReadByte(); - return null; - } - - int outerLength = decoderContext.ReadSequenceLength(); - - int check = decoderContext.Position + outerLength; - - List result = new List(); - - while (decoderContext.Position < check) - { - //TODO check what is valid for the fields here - byte[] contractCode = decoderContext.DecodeByteArray(); - result.Add(new SetCodeAuthorization( - decoderContext.DecodeULong(), - decoderContext.DecodeAddress(), - decoderContext.DecodeUInt256(), - decoderContext.DecodeULong(), - decoderContext.DecodeByteArray(), - decoderContext.DecodeByteArray())); - } - - if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) - { - decoderContext.Check(check); - } - return result.ToArray(); - } - - public void Encode(RlpStream stream, SetCodeAuthorization[]? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (item is null) - { - stream.WriteByte(Rlp.NullObjectByte); - return; - } - - int contentLength = GetContentLength(item); - stream.StartSequence(contentLength); - foreach (SetCodeAuthorization contractCode in item) - { - stream.Encode(contractCode.ChainId ?? throw new RlpException("Invalid tx set code format - chain id is null")); - stream.Encode(contractCode.CodeAddress ?? throw new RlpException("Invalid tx set code format - address is null")); - stream.Encode(contractCode.Nonce ?? 0); - stream.Encode(contractCode.YParity); - stream.Encode(contractCode.R); - stream.Encode(contractCode.S); - } - } - - public int GetLength(SetCodeAuthorization[]? contractCodes, RlpBehaviors rlpBehaviors) - { - if (contractCodes is null) - { - return Rlp.OfEmptySequence.Length; - } - - int contentLength = GetContentLength(contractCodes); - return Rlp.LengthOfSequence(contentLength); - } - - private static int GetContentLength(ReadOnlySpan contractCodes) - { - int total = 0; - foreach (var code in contractCodes) - { - total += Rlp.LengthOf(code.ChainId) + Rlp.LengthOf(code.CodeAddress) + Rlp.LengthOf(code.Nonce) + Rlp.LengthOf(code.YParity) + Rlp.LengthOf(code.R) + Rlp.LengthOf(code.S); - } - return total; - } -} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs index 3ba980ff96b..184236cdc83 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs @@ -44,8 +44,8 @@ public class TxDecoder : where T : Transaction, new() { private readonly AccessListDecoder _accessListDecoder = new(); + private AuthorizationListDecoder _setCodeAuthDecoder = new(); private readonly bool _lazyHash; - private SetCodeAuthorizationDecoder _txContractCodeDecoder = new(); protected TxDecoder(bool lazyHash = true) { @@ -326,7 +326,7 @@ private void DecodeContractCodeWithoutSig(T transaction, ref Rlp.ValueDecoderCon transaction.To = decoderContext.DecodeAddress(); transaction.Data = decoderContext.DecodeByteArray(); transaction.AccessList = _accessListDecoder.Decode(ref decoderContext, rlpBehaviors); - transaction.ContractCodes = _txContractCodeDecoder.Decode(ref decoderContext, rlpBehaviors); + transaction.AuthorizationList = _setCodeAuthDecoder.Decode(ref decoderContext, rlpBehaviors); } private static void DecodeDepositPayloadWithoutSig(T transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors) @@ -351,7 +351,7 @@ private void DecodeContractCodeWithoutSig(T transaction, RlpStream rlpStream, Rl transaction.To = rlpStream.DecodeAddress(); transaction.Data = rlpStream.DecodeByteArray(); transaction.AccessList = _accessListDecoder.Decode(rlpStream, rlpBehaviors); - transaction.ContractCodes = _txContractCodeDecoder.Decode(rlpStream, rlpBehaviors); + transaction.AuthorizationList = _setCodeAuthDecoder.Decode(rlpStream, rlpBehaviors); } private static void EncodeLegacyWithoutPayload(T item, RlpStream stream) @@ -404,7 +404,7 @@ private void EncodeShardBlobPayloadWithoutPayload(T item, RlpStream stream, RlpB stream.Encode(item.BlobVersionedHashes); } - private void EncodeContractCodeWithoutPayload(T item, RlpStream stream, RlpBehaviors rlpBehaviors) + private void EncodeSetCodeWithoutPayload(T item, RlpStream stream, RlpBehaviors rlpBehaviors) { stream.Encode(item.ChainId ?? 0); stream.Encode(item.Nonce); @@ -414,7 +414,7 @@ private void EncodeContractCodeWithoutPayload(T item, RlpStream stream, RlpBehav stream.Encode(item.To); stream.Encode(item.Data); _accessListDecoder.Encode(stream, item.AccessList, rlpBehaviors); - _txContractCodeDecoder.Encode(stream, item.ContractCodes, rlpBehaviors); + _setCodeAuthDecoder.Encode(stream, item.AuthorizationList, rlpBehaviors); } private static void EncodeDepositTxPayloadWithoutPayload(T item, RlpStream stream) @@ -710,7 +710,7 @@ private void EncodeTx(RlpStream stream, T? item, RlpBehaviors rlpBehaviors = Rlp EncodeShardBlobPayloadWithoutPayload(item, stream, rlpBehaviors); break; case TxType.SetCode: - EncodeContractCodeWithoutPayload(item, stream, rlpBehaviors); + EncodeSetCodeWithoutPayload(item, stream, rlpBehaviors); break; case TxType.DepositTx: TxDecoder.EncodeDepositTxPayloadWithoutPayload(item, stream); @@ -830,7 +830,7 @@ private int GetContractCodeLength(T item) + Rlp.LengthOf(item.Data) + Rlp.LengthOf(item.ChainId ?? 0) + _accessListDecoder.GetLength(item.AccessList, RlpBehaviors.None) - + _txContractCodeDecoder.GetLength(item.ContractCodes, RlpBehaviors.None); + + _setCodeAuthDecoder.GetLength(item.AuthorizationList, RlpBehaviors.None); } private static int GetShardBlobNetworkWrapperContentLength(T item, int txContentLength) From 303a0f63a28e5c3a9dd439ea6845b8b5b7b66892 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 20 Jun 2024 11:53:21 +0200 Subject: [PATCH 262/551] removed wrong test --- .../Nethermind.Evm.Test/Eip7702Tests.cs | 117 ------------------ 1 file changed, 117 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs index 6892715a77f..a5922843122 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs @@ -10,13 +10,8 @@ using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Specs; -using Newtonsoft.Json.Linq; using NUnit.Framework; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Nethermind.Evm.Test; public class Eip7702Tests : VirtualMachineTestsBase @@ -26,119 +21,7 @@ public class Eip7702Tests : VirtualMachineTestsBase protected override TestAllTracerWithOutput CreateTracer() => new() { IsTracingAccess = false }; - public static IEnumerable AuthorityCombinationCases() - { - yield return new object[] { TestItem.PrivateKeyF, TestItem.AddressF, 0x1 }; - yield return new object[] { TestItem.PrivateKeyE, TestItem.AddressE, 0x1 }; - yield return new object[] { TestItem.PrivateKeyF, TestItem.AddressE, 0x0 }; - yield return new object[] { TestItem.PrivateKeyE, TestItem.AddressF, 0x0 }; - } - [TestCaseSource(nameof(AuthorityCombinationCases))] - public void ExecuteAuth_SignerIsSameOrDifferentThanAuthority_ReturnsOneOrZero(PrivateKey signer, Address authority, int expected) - { - byte[] code = Prepare.EvmCode - //Return the result of Auth - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE8) - .PushSingle(1) - .Op(Instruction.PUSH0) - .Op(Instruction.RETURN) - .Done; - Signature sig = CreateContractCodeSignedMessage(signer, code); - - Transaction tx = Build.A.Transaction - .WithType(TxType.SetCode) - .WithSetCode(new AuthorizationTuple(0, TestItem.AddressF, 0, sig)) - .WithGasLimit(40000) - .WithGasPrice(1) - .WithValue(0) - .WithNonce(TestState.GetNonce(signer.Address)) - .To(TestItem.AddressB) - .SignedAndResolved(signer) - .TestObject; - - var result = Execute(tx); - - Assert.That(result.ReturnValue[0], Is.EqualTo(expected)); - } - - public static IEnumerable BadMessageDataCases() - { - yield return new object[] - { - TestContext.CurrentContext.Random.NextByte(5, byte.MaxValue), - ((UInt256)1).ToBigEndian().PadLeft(32), - new UInt256(0).PaddedBytes(32), - SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) - }; - yield return new object[] - { - Eip7702Constants.Magic, - new UInt256(12999999).PaddedBytes(32), - new UInt256(0).PaddedBytes(32), - SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) - }; - yield return new object[] - { - Eip7702Constants.Magic, - new UInt256(1).PaddedBytes(32), - new UInt256(99999999999).PaddedBytes(32), - SenderRecipientAndMiner.Default.Recipient.Bytes.PadLeft(32) - }; - yield return new object[] - { - Eip7702Constants.Magic, - new UInt256(1).PaddedBytes(32), - new UInt256(0).PaddedBytes(32), - TestItem.AddressF.Bytes.PadLeft(32) - }; - } - - [TestCaseSource(nameof(BadMessageDataCases))] - public void ExecuteAuth_OneOfMessageArgsIsWrong_ReturnsZero(byte magicNumber, byte[] chainId, byte[] nonce, byte[] address) - { - PrivateKey signer = TestItem.PrivateKeyF; - - byte[] code = Prepare.EvmCode - - //Return the result of Auth - .Op(Instruction.PUSH0) - .Op(Instruction.MSTORE8) - .PushSingle(1) - .Op(Instruction.PUSH0) - .Op(Instruction.RETURN) - .Done; - - var data = CreateContractCodeSignedMessage(signer, code); - - var result = Execute(code); - - Assert.That(result.ReturnValue[0], Is.EqualTo(0)); - } - - private Signature CreateContractCodeSignedMessage(PrivateKey signer, byte[] contractCode) - { - return CreateContractCodeSignedMessage( - signer, - Eip7702Constants.Magic, - contractCode - ); - } - - private Signature CreateContractCodeSignedMessage(PrivateKey signer, byte magicNumber, byte[] contractCode) - { - List msg = - [ - magicNumber, - .. contractCode, - ]; - - Hash256 msgDigest = Keccak.Compute(msg.ToArray()); - EthereumEcdsa ecdsa = new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance); - - return ecdsa.Sign(signer, msgDigest); - } } From de4d4d75daab0aada1702ef6748c4481a14593c0 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 20 Jun 2024 12:35:19 +0200 Subject: [PATCH 263/551] cleanup --- .../Nethermind.Evm.Test/Eip7702Tests.cs | 27 ------------ .../IntrinsicGasCalculatorTests.cs | 12 ++--- .../TransactionProcessorEip7702Tests.cs | 44 +++++++++++++++++++ .../Nethermind.Evm/IntrinsicGasCalculator.cs | 14 +++--- .../TransactionProcessor.cs | 5 --- .../Nethermind.Evm/VirtualMachine.cs | 11 +---- 6 files changed, 59 insertions(+), 54 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs deleted file mode 100644 index a5922843122..00000000000 --- a/src/Nethermind/Nethermind.Evm.Test/Eip7702Tests.cs +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core; -using Nethermind.Core.Crypto; -using Nethermind.Core.Extensions; -using Nethermind.Core.Specs; -using Nethermind.Core.Test.Builders; -using Nethermind.Crypto; -using Nethermind.Int256; -using Nethermind.Logging; -using Nethermind.Specs; -using NUnit.Framework; -using System.Collections.Generic; - -namespace Nethermind.Evm.Test; -public class Eip7702Tests : VirtualMachineTestsBase -{ - protected override ForkActivation Activation => MainnetSpecProvider.PragueActivation; - protected override ulong Timestamp => MainnetSpecProvider.PragueBlockTimestamp; - - protected override TestAllTracerWithOutput CreateTracer() => new() { IsTracingAccess = false }; - - - -} - diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index 4092e6e6373..74b96f25a75 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -117,8 +117,10 @@ void Test(IReleaseSpec spec, bool isAfterRepricing) Test(Shanghai.Instance, true); Test(Cancun.Instance, true); } - public static IEnumerable<(AuthorizationTuple[] contractCode, long expectedCost)> SetCodeTestCaseSource() + public static IEnumerable<(AuthorizationTuple[] contractCode, long expectedCost)> AuthorizationListTestCaseSource() { + yield return ( + [], 0); yield return ( [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), @@ -171,11 +173,11 @@ [new AuthorizationTuple( ], GasCostOf.PerAuthBaseCost * 3); } - [TestCaseSource(nameof(SetCodeTestCaseSource))] - public void Calculate_TxHasSetCode_ReturnsExpectedCostOfTx((AuthorizationTuple[] ContractCodes, long ExpectedCost) testCase) + [TestCaseSource(nameof(AuthorizationListTestCaseSource))] + public void Calculate_TxHasAuthorizationList_ReturnsExpectedCostOfTx((AuthorizationTuple[] AuthorizationList, long ExpectedCost) testCase) { Transaction tx = Build.A.Transaction.SignedAndResolved() - .WithSetCode(testCase.ContractCodes) + .WithSetCode(testCase.AuthorizationList) .TestObject; IntrinsicGasCalculator.Calculate(tx, Prague.Instance) @@ -183,7 +185,7 @@ public void Calculate_TxHasSetCode_ReturnsExpectedCostOfTx((AuthorizationTuple[] } [Test] - public void Calculate_TxHasSetCodeBeforePrague_ThrowsInvalidDataException() + public void Calculate_TxHasAuthorizationListBeforePrague_ThrowsInvalidDataException() { Transaction tx = Build.A.Transaction.SignedAndResolved() .WithSetCode( diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index d944181b334..f8fc89899c3 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -122,6 +122,50 @@ public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorag Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EqualTo(expectedStorageValue)); } + public static IEnumerable t() + { + //Base case + yield return new object[] { 1ul, (UInt256)0, TestItem.AddressA.Bytes }; + //Wrong nonce + yield return new object[] { 1ul, (UInt256)1, new[] { (byte)0x0 } }; + //Null nonce means it should be ignored + yield return new object[] { 1ul, null, TestItem.AddressA.Bytes }; + //Wrong chain id + yield return new object[] { 2ul, (UInt256)0, new[] { (byte)0x0 } }; + } + + [TestCaseSource(nameof(DifferentCommitValues))] + public void Execute_TxHasDifferentAmountOfCommitMessages_UsedGasIsExpected(ulong chainId, UInt256? nonce, byte[] expectedStorageValue) + { + PrivateKey relayer = TestItem.PrivateKeyA; + PrivateKey signer = TestItem.PrivateKeyB; + Address codeSource = TestItem.AddressC; + _stateProvider.CreateAccount(relayer.Address, 1.Ether()); + //Save caller in storage slot 0 + byte[] code = Prepare.EvmCode + .Op(Instruction.CALLER) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done; + DeployCode(codeSource, code); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(60_000) + .WithSetCode(CreateAuthorizationTuple(signer, chainId, codeSource, nonce)) + .SignedAndResolved(_ethereumEcdsa, relayer, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + + _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + + Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EqualTo(expectedStorageValue)); + } + private void DeployCode(Address codeSource, byte[] code) { _stateProvider.CreateAccount(codeSource, 0); diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index 768643d5d76..dae39684185 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -23,7 +23,7 @@ public static long Calculate(Transaction transaction, IReleaseSpec releaseSpec) result += DataCost(transaction, releaseSpec); result += CreateCost(transaction, releaseSpec); result += AccessListCost(transaction, releaseSpec); - result += ContractCodeCost(transaction, releaseSpec); + result += AuthorizationListCost(transaction, releaseSpec); return result; } @@ -82,20 +82,20 @@ private static long AccessListCost(Transaction transaction, IReleaseSpec release return accessListCost; } - private static long ContractCodeCost(Transaction transaction, IReleaseSpec releaseSpec) + private static long AuthorizationListCost(Transaction transaction, IReleaseSpec releaseSpec) { - AuthorizationTuple[]? contractCodes = transaction.AuthorizationList; + AuthorizationTuple[]? authorizationList = transaction.AuthorizationList; long contractCodeCost = 0; - if (contractCodes is not null) + if (authorizationList is not null) { if (!releaseSpec.IsAuthorizationListEnabled) { throw new InvalidDataException( - $"Transaction with an authorization_list received within the context of {releaseSpec.Name}. Eip-7702 is not enabled."); + $"Transaction with an authorization list received within the context of {releaseSpec.Name}. Eip-7702 is not enabled."); } - if (contractCodes.Length == 0) return contractCodeCost; - contractCodeCost += GasCostOf.PerAuthBaseCost * contractCodes.Length; + if (authorizationList.Length == 0) return contractCodeCost; + contractCodeCost += GasCostOf.PerAuthBaseCost * authorizationList.Length; } return contractCodeCost; } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index b04204238b6..f43c9f94616 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -555,11 +555,6 @@ protected void ExecuteEvmCall( tracer.ReportRefund(RefundOf.Destroy(spec.IsEip3529Enabled)); } - foreach(Address toBeRemoved in env.AuthorizedAddresses) - { - VirtualMachine.InsertCode(Array.Empty(), toBeRemoved, spec); - } - statusCode = StatusCode.Success; } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index cec452bf1ff..3d24d3d23ad 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -46,7 +46,6 @@ public class VirtualMachine : IVirtualMachine public const int MaxCallDepth = 1024; internal static FrozenDictionary PrecompileCode { get; } = InitializePrecompiledContracts(); internal static CodeLruCache CodeCache { get; } = new(); - internal static CodeLruCache AuthorizationCodeCache { get; } = new(); private readonly static UInt256 P255Int = (UInt256)System.Numerics.BigInteger.Pow(2, 255); internal static ref readonly UInt256 P255 => ref P255Int; @@ -188,10 +187,6 @@ public interface IIsTracing { } public readonly struct NotTracing : IIsTracing { } public readonly struct IsTracing : IIsTracing { } - internal sealed class AuthorizedCodeLruCache - { - - } internal sealed class CodeLruCache { private const int CacheCount = 16; @@ -537,16 +532,12 @@ public TransactionSubstate Run(EvmState state, IWorldState worl } public void InsertCode(ReadOnlyMemory code, Address callCodeOwner, IReleaseSpec spec) - { - InsertCode(code, callCodeOwner, _state, spec); - } - public void InsertCode(ReadOnlyMemory code, Address callCodeOwner, IWorldState state, IReleaseSpec spec) { var codeInfo = new CodeInfo(code); codeInfo.AnalyseInBackgroundIfRequired(); Hash256 codeHash = code.Length == 0 ? Keccak.OfAnEmptyString : Keccak.Compute(code.Span); - state.InsertCode(callCodeOwner, codeHash, code, spec); + _state.InsertCode(callCodeOwner, codeHash, code, spec); CodeCache.Set(codeHash, codeInfo); } From 4c591cc2dea9695ecf09df36e89cd187e7fae74d Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 20 Jun 2024 15:01:17 +0200 Subject: [PATCH 264/551] more tests added --- .../Validators/TxValidatorTests.cs | 8 +- .../Builders/TransactionBuilder.cs | 8 +- .../Encoding/TxDecoderTests.cs | 4 +- .../IntrinsicGasCalculatorTests.cs | 4 +- .../TransactionProcessorEip7702Tests.cs | 91 ++++++++++++++----- .../Nethermind.Evm/Tracing/TxTracer.cs | 2 +- .../TransactionProcessor.cs | 3 +- 7 files changed, 85 insertions(+), 35 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 937f1610aa7..2e3870d536b 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -533,10 +533,10 @@ public void IsWellFormed_BlobTxHasProofOverTheSizeLimit_ReturnFalse() } [Test] - public void IsWellFormed_ContractCodeTxInCancunSpec_ReturnsFalse() + public void IsWellFormed_AuthorizationListTxInCancunSpec_ReturnsFalse() { TransactionBuilder txBuilder = Build.A.Transaction - .WithSetCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) + .WithAuthorizationCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) .WithChainId(TestBlockchainIds.ChainId) @@ -549,10 +549,10 @@ public void IsWellFormed_ContractCodeTxInCancunSpec_ReturnsFalse() } [Test] - public void IsWellFormed_ContractCodeTxInPragueSpec_ReturnsTrue() + public void IsWellFormed_AuthorizationListTxInPragueSpec_ReturnsTrue() { TransactionBuilder txBuilder = Build.A.Transaction - .WithSetCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) + .WithAuthorizationCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) .WithChainId(TestBlockchainIds.ChainId) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index 6e307871454..8126644c0ed 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -220,14 +220,14 @@ public TransactionBuilder WithShardBlobTxTypeAndFields(int blobCount = 1, boo return this; } - public TransactionBuilder WithSetCode(AuthorizationTuple setContractCode) + public TransactionBuilder WithAuthorizationCode(AuthorizationTuple authTuple) { - TestObjectInternal.AuthorizationList = TestObjectInternal.AuthorizationList != null ? [.. TestObjectInternal.AuthorizationList, setContractCode] : [setContractCode]; + TestObjectInternal.AuthorizationList = TestObjectInternal.AuthorizationList != null ? [.. TestObjectInternal.AuthorizationList, authTuple] : [authTuple]; return this; } - public TransactionBuilder WithSetCode(IEnumerable contractCodes) + public TransactionBuilder WithAuthorizationCode(IEnumerable authList) { - TestObjectInternal.AuthorizationList = contractCodes.ToArray(); + TestObjectInternal.AuthorizationList = authList.ToArray(); return this; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs index 361700a9388..1328fa25ddd 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs @@ -66,7 +66,7 @@ public class TxDecoderTests .WithType(TxType.SetCode) .WithGasPrice(0) .WithChainId(1559) - .WithSetCode([new AuthorizationTuple(0, TestItem.AddressF, 0, 0, [], [])]) + .WithAuthorizationCode([new AuthorizationTuple(0, TestItem.AddressF, 0, 0, [], [])]) .SignedAndResolved(), "EIP 7702 first test case"); } @@ -401,7 +401,7 @@ public void TxSetCodeEncodeAndDecode(AuthorizationTuple[] setCodeAuthorizations) .WithType(TxType.SetCode) .WithGasPrice(0) .WithChainId(1559) - .WithSetCode(setCodeAuthorizations) + .WithAuthorizationCode(setCodeAuthorizations) .SignedAndResolved().TestObject; RlpStream rlpStream = new(_txDecoder.GetLength(tx, RlpBehaviors.None)); _txDecoder.Encode(rlpStream, tx); diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index 74b96f25a75..9532b983e31 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -177,7 +177,7 @@ [new AuthorizationTuple( public void Calculate_TxHasAuthorizationList_ReturnsExpectedCostOfTx((AuthorizationTuple[] AuthorizationList, long ExpectedCost) testCase) { Transaction tx = Build.A.Transaction.SignedAndResolved() - .WithSetCode(testCase.AuthorizationList) + .WithAuthorizationCode(testCase.AuthorizationList) .TestObject; IntrinsicGasCalculator.Calculate(tx, Prague.Instance) @@ -188,7 +188,7 @@ public void Calculate_TxHasAuthorizationList_ReturnsExpectedCostOfTx((Authorizat public void Calculate_TxHasAuthorizationListBeforePrague_ThrowsInvalidDataException() { Transaction tx = Build.A.Transaction.SignedAndResolved() - .WithSetCode( + .WithAuthorizationCode( new AuthorizationTuple( 0, TestItem.AddressF, diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index f8fc89899c3..848b2e899b7 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -22,6 +22,7 @@ using Nethermind.Serialization.Rlp; using System; using Nethermind.Network; +using System.Linq; namespace Nethermind.Evm.Test; @@ -64,7 +65,7 @@ public void Execute_TxHasAuthorizationWithCodeThatSavesCallerAddress_ExpectedAdd .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithSetCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) + .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) .SignedAndResolved(_ethereumEcdsa, relayer, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -109,7 +110,7 @@ public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorag .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithSetCode(CreateAuthorizationTuple(signer,chainId, codeSource, nonce)) + .WithAuthorizationCode(CreateAuthorizationTuple(signer,chainId, codeSource, nonce)) .SignedAndResolved(_ethereumEcdsa, relayer, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -122,38 +123,86 @@ public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorag Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EqualTo(expectedStorageValue)); } - public static IEnumerable t() + [TestCase(0)] + [TestCase(1)] + [TestCase(10)] + [TestCase(99)] + public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int count) { - //Base case - yield return new object[] { 1ul, (UInt256)0, TestItem.AddressA.Bytes }; - //Wrong nonce - yield return new object[] { 1ul, (UInt256)1, new[] { (byte)0x0 } }; - //Null nonce means it should be ignored - yield return new object[] { 1ul, null, TestItem.AddressA.Bytes }; - //Wrong chain id - yield return new object[] { 2ul, (UInt256)0, new[] { (byte)0x0 } }; + PrivateKey relayer = TestItem.PrivateKeyA; + PrivateKey signer = TestItem.PrivateKeyB; + _stateProvider.CreateAccount(relayer.Address, 1.Ether()); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(GasCostOf.Transaction + GasCostOf.PerAuthBaseCost * count) + .WithAuthorizationCode(Enumerable.Range(0, count) + .Select(i => CreateAuthorizationTuple( + signer, + _specProvider.ChainId, + //Copy empty code so will not add to gas cost + TestItem.AddressC, + null))) + .SignedAndResolved(_ethereumEcdsa, relayer, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(100000000).TestObject; + + CallOutputTracer tracer = new(); + + _transactionProcessor.Execute(tx, block.Header, tracer); + + Assert.That(tracer.GasSpent, Is.EqualTo(GasCostOf.Transaction + GasCostOf.PerAuthBaseCost * count)); } - [TestCaseSource(nameof(DifferentCommitValues))] - public void Execute_TxHasDifferentAmountOfCommitMessages_UsedGasIsExpected(ulong chainId, UInt256? nonce, byte[] expectedStorageValue) - { + [TestCase(false, 1)] + [TestCase(true, 2)] + public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstInstanceIsUsed(bool reverseOrder, int expectedStoredValue) + { PrivateKey relayer = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; - Address codeSource = TestItem.AddressC; + Address firstCodeSource = TestItem.AddressC; + Address secondCodeSource = TestItem.AddressD; _stateProvider.CreateAccount(relayer.Address, 1.Ether()); - //Save caller in storage slot 0 - byte[] code = Prepare.EvmCode - .Op(Instruction.CALLER) + + byte[] firstCode = Prepare.EvmCode + .PushData(1) .Op(Instruction.PUSH0) .Op(Instruction.SSTORE) .Done; - DeployCode(codeSource, code); + DeployCode(firstCodeSource, firstCode); + byte[] secondCode = Prepare.EvmCode + .PushData(2) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done; + DeployCode(secondCodeSource, secondCode); + + IEnumerable authList = [ + CreateAuthorizationTuple( + signer, + _specProvider.ChainId, + firstCodeSource, + null), + CreateAuthorizationTuple( + signer, + _specProvider.ChainId, + secondCodeSource, + null), + ]; + if (reverseOrder) + { + authList = authList.Reverse(); + } Transaction tx = Build.A.Transaction .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithSetCode(CreateAuthorizationTuple(signer, chainId, codeSource, nonce)) + .WithAuthorizationCode(authList) .SignedAndResolved(_ethereumEcdsa, relayer, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -163,7 +212,7 @@ public void Execute_TxHasDifferentAmountOfCommitMessages_UsedGasIsExpected(ulong _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); - Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EqualTo(expectedStorageValue)); + Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EquivalentTo(new[] { expectedStoredValue })); } private void DeployCode(Address codeSource, byte[] code) diff --git a/src/Nethermind/Nethermind.Evm/Tracing/TxTracer.cs b/src/Nethermind/Nethermind.Evm/Tracing/TxTracer.cs index 439427fb1c2..dee699912cc 100644 --- a/src/Nethermind/Nethermind.Evm/Tracing/TxTracer.cs +++ b/src/Nethermind/Nethermind.Evm/Tracing/TxTracer.cs @@ -10,7 +10,7 @@ namespace Nethermind.Evm.Tracing; -public class TxTracer : ITxTracer +public abstract class TxTracer : ITxTracer { [SuppressMessage("ReSharper", "VirtualMemberCallInConstructor")] protected TxTracer() diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index f43c9f94616..9c1dddc4b0e 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -610,7 +610,8 @@ private void BuildAuthorizedCodeCache(AuthorizationTuple[] authorizations, IDict } CodeInfo codeToBeInserted = VirtualMachine.GetCachedCodeInfo(WorldState, authTuple.CodeAddress, spec); //TODO should we do insert if code is empty? - authorizedCache.Add(authority, codeToBeInserted); + if (!authorizedCache.ContainsKey(authority)) + authorizedCache.Add(authority, codeToBeInserted); } } From f3c8a7db2d95024ba347884d6ded540df8c48834 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 20 Jun 2024 23:14:53 +0200 Subject: [PATCH 265/551] more tests --- .../Nethermind.Core/Eip7702Constants.cs | 2 +- .../TransactionProcessorEip7702Tests.cs | 199 ++++++++++++++++-- .../Nethermind.Evm/CodeInfoRepository.cs | 13 ++ .../Nethermind.Evm/ICodeInfoRepository.cs | 2 + .../TransactionProcessor.cs | 6 +- .../Nethermind.Evm/VirtualMachine.cs | 20 +- .../OverridableCodeInfoRepository.cs | 3 + 7 files changed, 204 insertions(+), 41 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs index f9f34643540..041156355c8 100644 --- a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs +++ b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs @@ -10,5 +10,5 @@ namespace Nethermind.Core; public static class Eip7702Constants { - public static byte Magic => 0x05; + public const byte Magic = 0x05; } diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 848b2e899b7..9299869a018 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -21,7 +21,6 @@ using Nethermind.Serialization.Rlp.Eip7702; using Nethermind.Serialization.Rlp; using System; -using Nethermind.Network; using System.Linq; namespace Nethermind.Evm.Test; @@ -41,18 +40,19 @@ public void Setup() _specProvider = new TestSpecProvider(Prague.Instance); TrieStore trieStore = new(stateDb, LimboLogs.Instance); _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, LimboLogs.Instance); - _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); + VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); + _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); } [Test] public void Execute_TxHasAuthorizationWithCodeThatSavesCallerAddress_ExpectedAddressIsSaved() { - PrivateKey relayer = TestItem.PrivateKeyA; + PrivateKey sender = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; Address codeSource = TestItem.AddressC; - _stateProvider.CreateAccount(relayer.Address, 1.Ether()); + _stateProvider.CreateAccount(sender.Address, 1.Ether()); //Save caller in storage slot 0 byte[] code = Prepare.EvmCode .Op(Instruction.CALLER) @@ -66,7 +66,7 @@ public void Execute_TxHasAuthorizationWithCodeThatSavesCallerAddress_ExpectedAdd .WithTo(signer.Address) .WithGasLimit(60_000) .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) - .SignedAndResolved(_ethereumEcdsa, relayer, true) + .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) @@ -77,7 +77,79 @@ public void Execute_TxHasAuthorizationWithCodeThatSavesCallerAddress_ExpectedAdd ReadOnlySpan cell = _stateProvider.Get(new StorageCell(signer.Address, 0)); - Assert.That(new Address(cell.ToArray()), Is.EqualTo(relayer.Address)); + Assert.That(new Address(cell.ToArray()), Is.EqualTo(sender.Address)); + } + + [Test] + public void Execute_TxHasAuthorizationCodeButAuthorityHasCode_NoAuthorizedCodeIsExecuted() + { + PrivateKey sender = TestItem.PrivateKeyA; + PrivateKey signer = TestItem.PrivateKeyB; + Address codeSource = TestItem.AddressC; + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + //Save caller in storage slot 0 + byte[] code = Prepare.EvmCode + .Op(Instruction.CALLER) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done; + DeployCode(codeSource, code); + DeployCode(signer.Address, Prepare.EvmCode.Op(Instruction.GAS).Done); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(60_000) + .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + + _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + + ReadOnlySpan cell = _stateProvider.Get(new StorageCell(signer.Address, 0)); + + Assert.That(cell.ToArray(), Is.EquivalentTo(new[] { 0x0 })); + } + + public static IEnumerable SenderSignerCases() + { + yield return new object[] { TestItem.PrivateKeyA, TestItem.PrivateKeyB }; + yield return new object[] { TestItem.PrivateKeyA, TestItem.PrivateKeyA }; + } + [TestCaseSource(nameof(SenderSignerCases))] + public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_SenderAddressIsSaved(PrivateKey sender, PrivateKey signer) + { + Address codeSource = TestItem.AddressB; + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + //Save caller in storage slot 0 + byte[] code = Prepare.EvmCode + .Op(Instruction.CALLER) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done; + DeployCode(codeSource, code); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(60_000) + .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + + _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + + ReadOnlySpan cell = _stateProvider.Get(new StorageCell(signer.Address, 0)); + + Assert.That(new Address(cell.ToArray()), Is.EqualTo(sender.Address)); } public static IEnumerable DifferentCommitValues() { @@ -94,10 +166,10 @@ public static IEnumerable DifferentCommitValues() [TestCaseSource(nameof(DifferentCommitValues))] public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorageSlot(ulong chainId, UInt256? nonce, byte[] expectedStorageValue) { - PrivateKey relayer = TestItem.PrivateKeyA; + PrivateKey sender = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; Address codeSource = TestItem.AddressC; - _stateProvider.CreateAccount(relayer.Address, 1.Ether()); + _stateProvider.CreateAccount(sender.Address, 1.Ether()); //Save caller in storage slot 0 byte[] code = Prepare.EvmCode .Op(Instruction.CALLER) @@ -111,7 +183,7 @@ public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorag .WithTo(signer.Address) .WithGasLimit(60_000) .WithAuthorizationCode(CreateAuthorizationTuple(signer,chainId, codeSource, nonce)) - .SignedAndResolved(_ethereumEcdsa, relayer, true) + .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) @@ -129,9 +201,9 @@ public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorag [TestCase(99)] public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int count) { - PrivateKey relayer = TestItem.PrivateKeyA; + PrivateKey sender = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; - _stateProvider.CreateAccount(relayer.Address, 1.Ether()); + _stateProvider.CreateAccount(sender.Address, 1.Ether()); Transaction tx = Build.A.Transaction .WithType(TxType.SetCode) @@ -144,7 +216,7 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c //Copy empty code so will not add to gas cost TestItem.AddressC, null))) - .SignedAndResolved(_ethereumEcdsa, relayer, true) + .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) @@ -158,15 +230,57 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c Assert.That(tracer.GasSpent, Is.EqualTo(GasCostOf.Transaction + GasCostOf.PerAuthBaseCost * count)); } + [Test] + public void Execute_TxAuthorizationListWithBALANCE_WarmAccountReadGasIsCharged() + { + PrivateKey sender = TestItem.PrivateKeyA; + PrivateKey signer = TestItem.PrivateKeyB; + Address codeSource = TestItem.AddressC; + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + + byte[] code = Prepare.EvmCode + .PushData(signer.Address) + .Op(Instruction.BALANCE) + .Done; + DeployCode(codeSource, code); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(60_000) + .WithAuthorizationCode( + CreateAuthorizationTuple( + signer, + _specProvider.ChainId, + codeSource, + null)) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(100000000).TestObject; + + CallOutputTracer tracer = new(); + + _transactionProcessor.Execute(tx, block.Header, tracer); + //Tx should only be charged for warm state read + Assert.That(tracer.GasSpent, Is.EqualTo(GasCostOf.Transaction + + GasCostOf.PerAuthBaseCost + + Prague.Instance.GetBalanceCost() + + GasCostOf.WarmStateRead + + GasCostOf.VeryLow)); + } + [TestCase(false, 1)] [TestCase(true, 2)] public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstInstanceIsUsed(bool reverseOrder, int expectedStoredValue) { - PrivateKey relayer = TestItem.PrivateKeyA; + PrivateKey sender = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; Address firstCodeSource = TestItem.AddressC; Address secondCodeSource = TestItem.AddressD; - _stateProvider.CreateAccount(relayer.Address, 1.Ether()); + _stateProvider.CreateAccount(sender.Address, 1.Ether()); byte[] firstCode = Prepare.EvmCode .PushData(1) @@ -183,12 +297,12 @@ public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstI DeployCode(secondCodeSource, secondCode); IEnumerable authList = [ - CreateAuthorizationTuple( + CreateAuthorizationTuple( signer, _specProvider.ChainId, firstCodeSource, null), - CreateAuthorizationTuple( + CreateAuthorizationTuple( signer, _specProvider.ChainId, secondCodeSource, @@ -203,7 +317,7 @@ public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstI .WithTo(signer.Address) .WithGasLimit(60_000) .WithAuthorizationCode(authList) - .SignedAndResolved(_ethereumEcdsa, relayer, true) + .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) @@ -215,9 +329,56 @@ public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstI Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EquivalentTo(new[] { expectedStoredValue })); } + [TestCase] + public void Execute_FirstTxHasAuthorizedCodeThatIncrementsAndSecondDoesNot_StorageSlotIsOnlyIncrementedOnce() + { + PrivateKey sender = TestItem.PrivateKeyA; + PrivateKey signer = TestItem.PrivateKeyB; + Address codeSource = TestItem.AddressC; + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + //Increment 1 everytime it's called + byte[] code = Prepare.EvmCode + .Op(Instruction.PUSH0) + .Op(Instruction.SLOAD) + .PushData(1) + .Op(Instruction.ADD) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done; + DeployCode(codeSource, code); + + Transaction tx1 = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(60_000) + .WithAuthorizationCode(CreateAuthorizationTuple( + signer, + _specProvider.ChainId, + codeSource, + null)) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Transaction tx2 = Build.A.Transaction + .WithType(TxType.SetCode) + .WithNonce(1) + .WithTo(signer.Address) + .WithGasLimit(60_000) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx1,tx2) + .WithGasLimit(10000000).TestObject; + + _transactionProcessor.Execute(tx1, block.Header, NullTxTracer.Instance); + _transactionProcessor.Execute(tx2, block.Header, NullTxTracer.Instance); + + Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EquivalentTo(new[] { 1 })); + } + private void DeployCode(Address codeSource, byte[] code) { - _stateProvider.CreateAccount(codeSource, 0); + _stateProvider.CreateAccountIfNotExists(codeSource, 0); _stateProvider.InsertCode(codeSource, Keccak.Compute(code), code, _specProvider.GetSpec(MainnetSpecProvider.PragueActivation)); } diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index d75e375c93a..fe3bd35fdd0 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -146,6 +146,19 @@ static void MissingCode(Address codeSource, in ValueHash256 codeHash) } } + /// + /// Lookup for code from authorization_list and state. See . + /// + /// + public CodeInfo GetAuthorizedOrCachedCodeInfo(IDictionary authorizedCode, IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) + { + if (vmSpec.IsAuthorizationListEnabled && authorizedCode.ContainsKey(codeSource)) + { + return authorizedCode[codeSource]; + } + return GetCachedCodeInfo(worldState, codeSource, vmSpec); + } + public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) { if (!_codeCache.TryGet(codeHash, out CodeInfo? codeInfo)) diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index 6fde3cbfe7f..d74e6a10594 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -12,6 +13,7 @@ namespace Nethermind.Evm; public interface ICodeInfoRepository { + CodeInfo GetAuthorizedOrCachedCodeInfo(IDictionary authorizedCode, IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec); diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index eb8d7d57ba0..a68d60b6df1 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -574,7 +574,7 @@ protected void ExecuteEvmCall( } /// /// eip-7702 - /// Insert temporary code into EOA's authorized by signature. + /// Build a cache from tx authorization_list authorized by signature. /// /// /// @@ -600,7 +600,7 @@ private void BuildAuthorizedCodeCache(AuthorizationTuple[] authorizations, IDict stream.Data.AsSpan().CopyTo(encoded.Slice(1)); Address authority = Ecdsa.RecoverAddress(authTuple.AuthoritySignature, Keccak.Compute(encoded.Slice(0, stream.Data.Length + 1))); - CodeInfo authorityCodeInfo = VirtualMachine.GetCachedCodeInfo(WorldState, authority, spec); + CodeInfo authorityCodeInfo = _codeInfoRepository.GetCachedCodeInfo(WorldState, authority, spec); if (authorityCodeInfo.MachineCode.Length > 0) { if (Logger.IsDebug) Logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) has code deployed."); @@ -611,7 +611,7 @@ private void BuildAuthorizedCodeCache(AuthorizationTuple[] authorizations, IDict if (Logger.IsDebug) Logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) nonce ({authTuple.Nonce}) does not match."); continue; } - CodeInfo codeToBeInserted = VirtualMachine.GetCachedCodeInfo(WorldState, authTuple.CodeAddress, spec); + CodeInfo codeToBeInserted = _codeInfoRepository.GetCachedCodeInfo(WorldState, authTuple.CodeAddress, spec); //TODO should we do insert if code is empty? if (!authorizedCache.ContainsKey(authority)) authorizedCache.Add(authority, codeToBeInserted); diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index d3610c56c31..1ae44b4a6e5 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -26,16 +26,9 @@ [assembly: InternalsVisibleTo("Nethermind.Evm.Test")] namespace Nethermind.Evm; - -using System.Collections.Frozen; using System.Linq; -using System.Runtime.InteropServices; -using System.Threading; - using Int256; -using Nethermind.Core.Collections; - public class VirtualMachine : IVirtualMachine { public const int MaxCallDepth = 1024; @@ -76,14 +69,6 @@ public VirtualMachine( : new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, logger); } - public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec spec) - => _evm.GetCachedCodeInfo(worldState, codeSource, spec); - - public void InsertCode(ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) - { - _evm.InsertCode(code, codeOwner, spec); - } - public TransactionSubstate Run(EvmState state, IWorldState worldState, ITxTracer txTracer) where TTracingActions : struct, VirtualMachine.IIsTracing => _evm.Run(state, worldState, txTracer); @@ -1341,7 +1326,7 @@ private CallResult ExecuteCode externalCode = GetAuthorizedOrCachedCodeInfo(txCtx.AuthorizedCode, _worldState, address, spec).MachineCode; + ReadOnlyMemory externalCode = _codeInfoRepository.GetAuthorizedOrCachedCodeInfo(txCtx.AuthorizedCode, _worldState, address, spec).MachineCode; slice = externalCode.SliceWithZeroPadding(b, (int)result); vmState.Memory.Save(in a, in slice); if (typeof(TTracingInstructions) == typeof(IsTracing)) @@ -2051,8 +2036,7 @@ static void ThrowOperationCanceledException() => [MethodImpl(MethodImplOptions.NoInlining)] private void InstructionExtCodeSize(Address address, ref EvmStack stack, IDictionary authorizedCode, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing { - - int codeLength = GetAuthorizedOrCachedCodeInfo(authorizedCode, _worldState, address, spec).MachineCode.Span.Length; + ReadOnlyMemory accountCode = _codeInfoRepository.GetAuthorizedOrCachedCodeInfo(authorizedCode, _worldState, address, spec).MachineCode; UInt256 result = (UInt256)accountCode.Span.Length; stack.PushUInt256(in result); } diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index dbe43ddddc7..83776d6bdb8 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -16,6 +16,9 @@ public class OverridableCodeInfoRepository(ICodeInfoRepository codeInfoRepositor { private readonly Dictionary _codeOverwrites = new(); + public CodeInfo GetAuthorizedOrCachedCodeInfo(IDictionary authorizedCode, IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => + GetCachedCodeInfo(worldState, codeSource, vmSpec); + public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => _codeOverwrites.TryGetValue(codeSource, out CodeInfo result) ? result From c18c3d5b2b9189f75754ceba31b3da9de513db5e Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 21 Jun 2024 01:04:42 +0200 Subject: [PATCH 266/551] refactor with CodeInfoRepo --- .../AuthorizedCodeInfoRepository.cs | 49 +++++++++++++++++++ .../Nethermind.Evm/CodeInfoRepository.cs | 15 +----- .../Nethermind.Evm/ICodeInfoRepository.cs | 1 - .../TransactionProcessor.cs | 29 +++++------ .../Nethermind.Evm/TxExecutionContext.cs | 7 +-- .../Nethermind.Evm/VirtualMachine.cs | 8 +-- .../OverridableCodeInfoRepository.cs | 26 ++++++++-- 7 files changed, 91 insertions(+), 44 deletions(-) create mode 100644 src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs new file mode 100644 index 00000000000..42738bc79a4 --- /dev/null +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -0,0 +1,49 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Core; +using Nethermind.Evm.CodeAnalysis; +using Nethermind.State; +using System; +using System.Collections.Generic; + +namespace Nethermind.Evm; +public class AuthorizedCodeInfoRepository(ICodeInfoRepository codeInfoRepository) : ICodeInfoRepository +{ + public IEnumerable
AuthorizedAddresses => _authorizedCode.Keys; + private readonly Dictionary _authorizedCode = new(); + + public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => + _authorizedCode.TryGetValue(codeSource, out CodeInfo result) + ? result + : codeInfoRepository.GetCachedCodeInfo(worldState, codeSource, vmSpec); + + public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) => codeInfoRepository.GetOrAdd(codeHash, initCode); + + public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) => + throw new NotSupportedException($"Use {nameof(CopyCodeAndOverwrite)}() for code authorizations."); + + /// + /// Copy code from and set it to override . + /// Main use for this is for https://eips.ethereum.org/EIPS/eip-7702 + /// + /// + public void CopyCodeAndOverwrite( + IWorldState worldState, + Address codeSource, + Address target, + IReleaseSpec vmSpec) + { + if (!_authorizedCode.ContainsKey(target)) + { + _authorizedCode.Add(target, GetCachedCodeInfo(worldState, codeSource, vmSpec)); + } + } + + public void ClearAuthorizations() + { + _authorizedCode.Clear(); + } +} diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index fe3bd35fdd0..5f12d22e722 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -63,6 +63,7 @@ public bool TryGet(in ValueHash256 codeHash, [NotNullWhen(true)] out CodeInfo? c private static readonly FrozenDictionary _precompiles = InitializePrecompiledContracts(); private static readonly CodeLruCache _codeCache = new(); private readonly FrozenDictionary _localPrecompiles; + private static readonly Dictionary _authorizedCodeCache = new(); private static FrozenDictionary InitializePrecompiledContracts() { @@ -146,19 +147,6 @@ static void MissingCode(Address codeSource, in ValueHash256 codeHash) } } - /// - /// Lookup for code from authorization_list and state. See . - /// - /// - public CodeInfo GetAuthorizedOrCachedCodeInfo(IDictionary authorizedCode, IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) - { - if (vmSpec.IsAuthorizationListEnabled && authorizedCode.ContainsKey(codeSource)) - { - return authorizedCode[codeSource]; - } - return GetCachedCodeInfo(worldState, codeSource, vmSpec); - } - public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) { if (!_codeCache.TryGet(codeHash, out CodeInfo? codeInfo)) @@ -172,7 +160,6 @@ public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) return codeInfo; } - public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) { CodeInfo codeInfo = new(code); diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index d74e6a10594..de4db59422d 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -13,7 +13,6 @@ namespace Nethermind.Evm; public interface ICodeInfoRepository { - CodeInfo GetAuthorizedOrCachedCodeInfo(IDictionary authorizedCode, IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec); diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index a68d60b6df1..a89e902f9f4 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -36,8 +36,8 @@ public class TransactionProcessor : ITransactionProcessor protected IVirtualMachine VirtualMachine { get; private init; } private readonly ICodeInfoRepository _codeInfoRepository; - private AuthorizationListDecoder _authorizationListDecoder = new(); - private Dictionary _authorizationCodeCache = new(); + private readonly AuthorizationListDecoder _authorizationListDecoder = new(); + private readonly AuthorizedCodeInfoRepository _authorizedCodeInfoRepository; [Flags] protected enum ExecutionOptions @@ -86,7 +86,7 @@ public TransactionProcessor( WorldState = worldState; VirtualMachine = virtualMachine; _codeInfoRepository = codeInfoRepository; - + _authorizedCodeInfoRepository = new(codeInfoRepository); Ecdsa = new EthereumEcdsa(specProvider.ChainId, logManager); } @@ -137,15 +137,15 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); if (spec.IsEip7702Enabled && tx.HasAuthorizationList) - BuildAuthorizedCodeCache(tx.AuthorizationList, _authorizationCodeCache, spec); + BuildAuthorizedCodeCache(tx.AuthorizationList, _authorizedCodeInfoRepository, spec); - ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _authorizationCodeCache); + ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _authorizedCodeInfoRepository); long gasAvailable = tx.GasLimit - intrinsicGas; ExecuteEvmCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode); - _authorizationCodeCache.Clear(); + _authorizedCodeInfoRepository.ClearAuthorizations(); // Finalize if (restore) @@ -414,7 +414,7 @@ protected ExecutionEnvironment BuildExecutionEnvironment( in BlockExecutionContext blCtx, IReleaseSpec spec, in UInt256 effectiveGasPrice, - IDictionary authorizedCode) + AuthorizedCodeInfoRepository authorizedCode) { Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0); if (recipient is null) ThrowInvalidDataException("Recipient has not been resolved properly before tx execution"); @@ -423,7 +423,7 @@ protected ExecutionEnvironment BuildExecutionEnvironment( CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data ?? Memory.Empty) - : _codeInfoRepository.GetAuthorizedOrCachedCodeInfo(authorizedCode, WorldState, recipient, spec); + : _authorizedCodeInfoRepository.GetCachedCodeInfo(WorldState, recipient, spec); codeInfo.AnalyseInBackgroundIfRequired(); @@ -497,7 +497,7 @@ protected void ExecuteEvmCall( state.WarmUp(header.GasBeneficiary); } - foreach (Address authorized in env.TxExecutionContext.AuthorizedCode.Keys) + foreach (Address authorized in env.TxExecutionContext.AuthorizedCode.AuthorizedAddresses) { state.WarmUp(authorized); } @@ -574,16 +574,15 @@ protected void ExecuteEvmCall( } /// /// eip-7702 - /// Build a cache from tx authorization_list authorized by signature. + /// Build a cache from transaction authorization_list authorized by signature. /// /// /// /// /// - private void BuildAuthorizedCodeCache(AuthorizationTuple[] authorizations, IDictionary authorizedCache, IReleaseSpec spec) + private void BuildAuthorizedCodeCache(AuthorizationTuple[] authorizations, AuthorizedCodeInfoRepository authorizedCache, IReleaseSpec spec) { - if (authorizedCache.Any()) - authorizedCache.Clear(); + authorizedCache.ClearAuthorizations(); Span encoded = stackalloc byte[128]; encoded[0] = Eip7702Constants.Magic; @@ -611,10 +610,8 @@ private void BuildAuthorizedCodeCache(AuthorizationTuple[] authorizations, IDict if (Logger.IsDebug) Logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) nonce ({authTuple.Nonce}) does not match."); continue; } - CodeInfo codeToBeInserted = _codeInfoRepository.GetCachedCodeInfo(WorldState, authTuple.CodeAddress, spec); //TODO should we do insert if code is empty? - if (!authorizedCache.ContainsKey(authority)) - authorizedCache.Add(authority, codeToBeInserted); + authorizedCache.CopyCodeAndOverwrite(WorldState, authTuple.CodeAddress, authority, spec); } } diff --git a/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs b/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs index 5c2f7cce54a..a6ce1aec8f4 100644 --- a/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs +++ b/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs @@ -2,10 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; -using Nethermind.Evm.CodeAnalysis; using Nethermind.Int256; -using System; -using System.Collections.Generic; namespace Nethermind.Evm { @@ -15,9 +12,9 @@ public readonly struct TxExecutionContext public Address Origin { get; } public UInt256 GasPrice { get; } public byte[][]? BlobVersionedHashes { get; } - public IDictionary AuthorizedCode { get; } + public AuthorizedCodeInfoRepository AuthorizedCode { get; } - public TxExecutionContext(in BlockExecutionContext blockExecutionContext, Address origin, in UInt256 gasPrice, byte[][] blobVersionedHashes, IDictionary authorizedCode) + public TxExecutionContext(in BlockExecutionContext blockExecutionContext, Address origin, in UInt256 gasPrice, byte[][] blobVersionedHashes, AuthorizedCodeInfoRepository authorizedCode) { BlockExecutionContext = blockExecutionContext; Origin = origin; diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 1ae44b4a6e5..356d916212b 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -1326,7 +1326,7 @@ private CallResult ExecuteCode externalCode = _codeInfoRepository.GetAuthorizedOrCachedCodeInfo(txCtx.AuthorizedCode, _worldState, address, spec).MachineCode; + ReadOnlyMemory externalCode = txCtx.AuthorizedCode.GetCachedCodeInfo(_worldState, address, spec).MachineCode; slice = externalCode.SliceWithZeroPadding(b, (int)result); vmState.Memory.Save(in a, in slice); if (typeof(TTracingInstructions) == typeof(IsTracing)) @@ -2034,9 +2034,9 @@ static void ThrowOperationCanceledException() => [SkipLocalsInit] [MethodImpl(MethodImplOptions.NoInlining)] - private void InstructionExtCodeSize(Address address, ref EvmStack stack, IDictionary authorizedCode, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing + private void InstructionExtCodeSize(Address address, ref EvmStack stack, ICodeInfoRepository codeInfoRepository, IReleaseSpec spec) where TTracingInstructions : struct, IIsTracing { - ReadOnlyMemory accountCode = _codeInfoRepository.GetAuthorizedOrCachedCodeInfo(authorizedCode, _worldState, address, spec).MachineCode; + ReadOnlyMemory accountCode = codeInfoRepository.GetCachedCodeInfo(_worldState, address, spec).MachineCode; UInt256 result = (UInt256)accountCode.Span.Length; stack.PushUInt256(in result); } @@ -2114,7 +2114,7 @@ private EvmExceptionType InstructionCall( !UpdateMemoryCost(vmState, ref gasAvailable, in outputOffset, outputLength) || !UpdateGas(gasExtra, ref gasAvailable)) return EvmExceptionType.OutOfGas; - CodeInfo codeInfo = _codeInfoRepository.GetAuthorizedOrCachedCodeInfo(vmState.Env.TxExecutionContext.AuthorizedCode, _worldState, codeSource, spec); + CodeInfo codeInfo = vmState.Env.TxExecutionContext.AuthorizedCode.GetCachedCodeInfo(_worldState, codeSource, spec); codeInfo.AnalyseInBackgroundIfRequired(); if (spec.Use63Over64Rule) diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index 83776d6bdb8..d0dae244cc3 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -16,9 +16,6 @@ public class OverridableCodeInfoRepository(ICodeInfoRepository codeInfoRepositor { private readonly Dictionary _codeOverwrites = new(); - public CodeInfo GetAuthorizedOrCachedCodeInfo(IDictionary authorizedCode, IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => - GetCachedCodeInfo(worldState, codeSource, vmSpec); - public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => _codeOverwrites.TryGetValue(codeSource, out CodeInfo result) ? result @@ -29,7 +26,6 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) => codeInfoRepository.InsertCode(state, code, codeOwner, spec); - public void SetCodeOverwrite( IWorldState worldState, IReleaseSpec vmSpec, @@ -44,4 +40,26 @@ public void SetCodeOverwrite( _codeOverwrites[key] = value; } + + /// + /// Copy code from and set it to override . + /// Main use for this is for https://eips.ethereum.org/EIPS/eip-7702 + /// + /// + public void CopyCodeAndOverwrite( + IWorldState worldState, + Address codeSource, + Address target, + IReleaseSpec vmSpec) + { + if (!_codeOverwrites.ContainsKey(target)) + { + _codeOverwrites.Add(target, GetCachedCodeInfo(worldState, codeSource, vmSpec)); + } + } + + public void ClearOverwrites() + { + _codeOverwrites.Clear(); + } } From 8a9cd0d636fe31f258f8a4443ed11227d0bffdc5 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 21 Jun 2024 01:06:02 +0200 Subject: [PATCH 267/551] format whitespace --- .../Validators/TxValidatorTests.cs | 2 +- .../IntrinsicGasCalculatorTests.cs | 6 +++--- .../TransactionProcessorEip7702Tests.cs | 18 +++++++++--------- .../Nethermind.Evm/IntrinsicGasCalculator.cs | 2 +- .../Nethermind.Evm/VirtualMachine.cs | 4 ++-- .../Eip7702/AuthorizationListDecoder.cs | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 2e3870d536b..7ef761d6908 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -547,7 +547,7 @@ public void IsWellFormed_AuthorizationListTxInCancunSpec_ReturnsFalse() Assert.That(txValidator.IsWellFormed(tx, Cancun.Instance, out _), Is.False); } - + [Test] public void IsWellFormed_AuthorizationListTxInPragueSpec_ReturnsTrue() { diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index 9532b983e31..660245da691 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -139,7 +139,7 @@ [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)), - new AuthorizationTuple( + new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), @@ -156,14 +156,14 @@ [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)), - new AuthorizationTuple( + new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)), - new AuthorizationTuple( + new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 9299869a018..68766b6f276 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -156,9 +156,9 @@ public static IEnumerable DifferentCommitValues() //Base case yield return new object[] { 1ul, (UInt256)0, TestItem.AddressA.Bytes }; //Wrong nonce - yield return new object[] { 1ul, (UInt256)1, new[] { (byte)0x0 }}; + yield return new object[] { 1ul, (UInt256)1, new[] { (byte)0x0 } }; //Null nonce means it should be ignored - yield return new object[] { 1ul, null, TestItem.AddressA.Bytes}; + yield return new object[] { 1ul, null, TestItem.AddressA.Bytes }; //Wrong chain id yield return new object[] { 2ul, (UInt256)0, new[] { (byte)0x0 } }; } @@ -182,7 +182,7 @@ public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorag .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer,chainId, codeSource, nonce)) + .WithAuthorizationCode(CreateAuthorizationTuple(signer, chainId, codeSource, nonce)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -204,7 +204,7 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c PrivateKey sender = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; _stateProvider.CreateAccount(sender.Address, 1.Ether()); - + Transaction tx = Build.A.Transaction .WithType(TxType.SetCode) .WithTo(signer.Address) @@ -262,7 +262,7 @@ public void Execute_TxAuthorizationListWithBALANCE_WarmAccountReadGasIsCharged() .WithGasLimit(100000000).TestObject; CallOutputTracer tracer = new(); - + _transactionProcessor.Execute(tx, block.Header, tracer); //Tx should only be charged for warm state read Assert.That(tracer.GasSpent, Is.EqualTo(GasCostOf.Transaction @@ -275,13 +275,13 @@ public void Execute_TxAuthorizationListWithBALANCE_WarmAccountReadGasIsCharged() [TestCase(false, 1)] [TestCase(true, 2)] public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstInstanceIsUsed(bool reverseOrder, int expectedStoredValue) - { + { PrivateKey sender = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; Address firstCodeSource = TestItem.AddressC; Address secondCodeSource = TestItem.AddressD; _stateProvider.CreateAccount(sender.Address, 1.Ether()); - + byte[] firstCode = Prepare.EvmCode .PushData(1) .Op(Instruction.PUSH0) @@ -307,7 +307,7 @@ public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstI _specProvider.ChainId, secondCodeSource, null), - ]; + ]; if (reverseOrder) { authList = authList.Reverse(); @@ -367,7 +367,7 @@ public void Execute_FirstTxHasAuthorizedCodeThatIncrementsAndSecondDoesNot_Stora .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) - .WithTransactions(tx1,tx2) + .WithTransactions(tx1, tx2) .WithGasLimit(10000000).TestObject; _transactionProcessor.Execute(tx1, block.Header, NullTxTracer.Instance); diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index dae39684185..0925b30e1b5 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -95,7 +95,7 @@ private static long AuthorizationListCost(Transaction transaction, IReleaseSpec } if (authorizationList.Length == 0) return contractCodeCost; - contractCodeCost += GasCostOf.PerAuthBaseCost * authorizationList.Length; + contractCodeCost += GasCostOf.PerAuthBaseCost * authorizationList.Length; } return contractCodeCost; } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 356d916212b..b2b9028039d 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -1306,7 +1306,7 @@ private CallResult ExecuteCode( !UpdateMemoryCost(vmState, ref gasAvailable, in dataOffset, dataLength) || !UpdateMemoryCost(vmState, ref gasAvailable, in outputOffset, outputLength) || !UpdateGas(gasExtra, ref gasAvailable)) return EvmExceptionType.OutOfGas; - + CodeInfo codeInfo = vmState.Env.TxExecutionContext.AuthorizedCode.GetCachedCodeInfo(_worldState, codeSource, spec); codeInfo.AnalyseInBackgroundIfRequired(); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs index 713fa72f303..a4aa50fca22 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs @@ -112,7 +112,7 @@ public void Encode(RlpStream stream, AuthorizationTuple[]? item, RlpBehaviors rl } else { - stream.StartSequence(0); + stream.StartSequence(0); } stream.Encode(setCode.AuthoritySignature.V); stream.Encode(setCode.AuthoritySignature.R); @@ -127,7 +127,7 @@ public RlpStream EncodeForCommitMessage(ulong chainId, Address codeAddress, UInt RlpStream stream = new RlpStream(totalLength); EncodeForCommitMessage(stream, chainId, codeAddress, nonce); return stream; - } + } public void EncodeForCommitMessage(RlpStream stream, ulong chainId, Address codeAddress, UInt256? nonce) { From bb6f5cf79e750f46d18c641ad7fd12985202b350 Mon Sep 17 00:00:00 2001 From: ak88 Date: Sun, 23 Jun 2024 13:52:11 +0200 Subject: [PATCH 268/551] small refactor --- .../Core/AuthorizedCodeInfoRepository.cs | 100 ++++++++++++++++++ .../Nethermind.Evm.Benchmark/EvmBenchmarks.cs | 2 +- .../MultipleUnsignedOperations.cs | 2 +- .../StaticCallBenchmarks.cs | 2 +- .../AuthorizedCodeInfoRepository.cs | 73 ++++++++++++- .../TransactionProcessor.cs | 50 +-------- 6 files changed, 177 insertions(+), 52 deletions(-) create mode 100644 src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs diff --git a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs new file mode 100644 index 00000000000..ebd870b7e61 --- /dev/null +++ b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs @@ -0,0 +1,100 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using BenchmarkDotNet.Attributes; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Core; +using Nethermind.Db; +using Nethermind.Evm.CodeAnalysis; +using Nethermind.Evm.Tracing; +using Nethermind.Evm; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Specs; +using Nethermind.State; +using Nethermind.Trie.Pruning; +using System; +using Nethermind.Core.Test.Builders; +using Nethermind.Crypto; +using Nethermind.Serialization.Rlp.Eip7702; +using Nethermind.Serialization.Rlp; +using System.Collections.Generic; +using System.Linq; + +namespace Nethermind.Benchmarks.Core; +[MemoryDiagnoser] +public class AuthorizedCodeInfoRepositoryBenchmark +{ + + private IReleaseSpec _spec = MainnetSpecProvider.Instance.GetSpec(MainnetSpecProvider.PragueActivation); + + private AuthorizationTuple[] Tuples100; + private AuthorizationTuple[] Tuples1k; + private AuthorizationTuple[] Tuples10k; + + private AuthorizedCodeInfoRepository sut; + private static EthereumEcdsa _ethereumEcdsa; + private WorldState _stateProvider; + + [GlobalSetup] + public void GlobalSetup() + { + TrieStore trieStore = new(new MemDb(), new OneLoggerLogManager(NullLogger.Instance)); + IKeyValueStore codeDb = new MemDb(); + + _stateProvider = new WorldState(trieStore, codeDb, new OneLoggerLogManager(NullLogger.Instance)); + _stateProvider.CreateAccount(Address.Zero, 100000000000000); + _stateProvider.Commit(_spec); + + _ethereumEcdsa = new (1, new OneLoggerLogManager(NullLogger.Instance)); + sut = new AuthorizedCodeInfoRepository(1, NullLogger.Instance); + var list = new List(); + var rnd = new Random(); + var addressBuffer = new byte[20]; + for (int i = 0; i < 10000; i++) + { + rnd.NextBytes(addressBuffer); + list.Add(CreateAuthorizationTuple( + TestItem.PrivateKeys[rnd.Next(TestItem.PrivateKeys.Length - 1)], + 1, + new Address(addressBuffer), + 1)); + } + Tuples100 = list.Take(100).ToArray(); + Tuples1k = list.Take(1_000).ToArray(); + Tuples10k = list.Take(10_000).ToArray(); + + static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) + { + AuthorizationListDecoder decoder = new(); + RlpStream rlp = decoder.EncodeForCommitMessage(chainId, codeAddress, nonce); + Span code = stackalloc byte[rlp.Length + 1]; + code[0] = Eip7702Constants.Magic; + rlp.Data.AsSpan().CopyTo(code.Slice(1)); + + Signature sig = _ethereumEcdsa.Sign(signer, Keccak.Compute(code)); + + return new AuthorizationTuple(chainId, codeAddress, nonce, sig); + } + } + + [Benchmark] + public void Build100Tuples() + { + sut.BuildAuthorizedCodeFromAuthorizations(_stateProvider, Tuples100, _spec); + } + + [Benchmark] + public void Build1kTuples() + { + sut.BuildAuthorizedCodeFromAuthorizations(_stateProvider, Tuples1k, _spec); + } + + //[Benchmark] + //public void Build10kTuples() + //{ + // sut.BuildAuthorizedCodeFromAuthorizations(_stateProvider, Tuples10k, _spec); + //} + +} diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs index fd31df6fa0c..2ab7e98f9e8 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs @@ -55,7 +55,7 @@ public void GlobalSetup() codeInfo: new CodeInfo(ByteCode), value: 0, transferValue: 0, - txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), + txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, new AuthorizedCodeInfoRepository(codeInfoRepository, MainnetSpecProvider.Instance.ChainId)), inputData: default ); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs index 3a45a79026b..803443a850e 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs @@ -87,7 +87,7 @@ public void GlobalSetup() codeInfo: new CodeInfo(_bytecode.Concat(_bytecode).Concat(_bytecode).Concat(_bytecode).ToArray()), value: 0, transferValue: 0, - txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), + txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, new AuthorizedCodeInfoRepository(codeInfoRepository, MainnetSpecProvider.Instance.ChainId)), inputData: default ); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs index c0f3e229c4f..3b7323058d6 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs @@ -98,7 +98,7 @@ public void GlobalSetup() codeInfo: new CodeInfo(Bytecode), value: 0, transferValue: 0, - txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), + txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, new AuthorizedCodeInfoRepository(codeInfoRepository, MainnetSpecProvider.Instance.ChainId)), inputData: default ); diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index 42738bc79a4..7cf6317e800 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -8,19 +8,39 @@ using Nethermind.State; using System; using System.Collections.Generic; +using Nethermind.Serialization.Rlp; +using Nethermind.Logging; +using Nethermind.Serialization.Rlp.Eip7702; +using System.Runtime.CompilerServices; +using Nethermind.Crypto; namespace Nethermind.Evm; -public class AuthorizedCodeInfoRepository(ICodeInfoRepository codeInfoRepository) : ICodeInfoRepository +public class AuthorizedCodeInfoRepository : ICodeInfoRepository { public IEnumerable
AuthorizedAddresses => _authorizedCode.Keys; private readonly Dictionary _authorizedCode = new(); + private readonly AuthorizationListDecoder _authorizationListDecoder = new(); + private readonly EthereumEcdsa _ethereumEcdsa; + private readonly ICodeInfoRepository _codeInfoRepository; + private readonly ulong _chainId; + private readonly ILogger _logger; + byte[] _internalBuffer = new byte[128]; + public AuthorizedCodeInfoRepository(ulong chainId, ILogger? logger = null) + : this(new CodeInfoRepository(), chainId, logger) { } + public AuthorizedCodeInfoRepository(ICodeInfoRepository codeInfoRepository, ulong _chainId, ILogger? logger = null) + { + this._codeInfoRepository = codeInfoRepository; + this._chainId = _chainId; + _ethereumEcdsa = new EthereumEcdsa(this._chainId, NullLogManager.Instance); + this._logger = logger ?? NullLogger.Instance; + } public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => _authorizedCode.TryGetValue(codeSource, out CodeInfo result) ? result - : codeInfoRepository.GetCachedCodeInfo(worldState, codeSource, vmSpec); + : _codeInfoRepository.GetCachedCodeInfo(worldState, codeSource, vmSpec); - public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) => codeInfoRepository.GetOrAdd(codeHash, initCode); + public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) => _codeInfoRepository.GetOrAdd(codeHash, initCode); public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) => throw new NotSupportedException($"Use {nameof(CopyCodeAndOverwrite)}() for code authorizations."); @@ -42,6 +62,53 @@ public void CopyCodeAndOverwrite( } } + /// + /// eip-7702 + /// Build a cache from transaction authorization_list authorized by signature. + /// + /// + /// + /// + /// + [SkipLocalsInit] + public void BuildAuthorizedCodeFromAuthorizations( + IWorldState worldState, + AuthorizationTuple[] authorizations, + IReleaseSpec spec) + { + _authorizedCode.Clear(); + + Span encoded = _internalBuffer.AsSpan(); + encoded[0] = Eip7702Constants.Magic; + //TODO optimize + //TODO try parallel sig recovery + foreach (AuthorizationTuple authTuple in authorizations) + { + if (authTuple.ChainId != 0 && _chainId != authTuple.ChainId) + { + if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because chain id ({authTuple.ChainId}) does not match."); + continue; + } + RlpStream stream = _authorizationListDecoder.EncodeForCommitMessage(authTuple.ChainId, authTuple.CodeAddress, authTuple.Nonce); + stream.Data.AsSpan().CopyTo(encoded.Slice(1)); + Address authority = _ethereumEcdsa.RecoverAddress(authTuple.AuthoritySignature, Keccak.Compute(encoded.Slice(0, stream.Data.Length + 1))); + + CodeInfo authorityCodeInfo = _codeInfoRepository.GetCachedCodeInfo(worldState, authority, spec); + if (authorityCodeInfo.MachineCode.Length > 0) + { + if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) has code deployed."); + continue; + } + if (authTuple.Nonce != null && worldState.GetNonce(authority) != authTuple.Nonce) + { + if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) nonce ({authTuple.Nonce}) does not match."); + continue; + } + //TODO should we do insert if code is empty? + CopyCodeAndOverwrite(worldState, authTuple.CodeAddress, authority, spec); + } + } + public void ClearAuthorizations() { _authorizedCode.Clear(); diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index a89e902f9f4..1d1558e7c82 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -36,7 +36,6 @@ public class TransactionProcessor : ITransactionProcessor protected IVirtualMachine VirtualMachine { get; private init; } private readonly ICodeInfoRepository _codeInfoRepository; - private readonly AuthorizationListDecoder _authorizationListDecoder = new(); private readonly AuthorizedCodeInfoRepository _authorizedCodeInfoRepository; [Flags] @@ -86,7 +85,7 @@ public TransactionProcessor( WorldState = worldState; VirtualMachine = virtualMachine; _codeInfoRepository = codeInfoRepository; - _authorizedCodeInfoRepository = new(codeInfoRepository); + _authorizedCodeInfoRepository = new(codeInfoRepository, specProvider.ChainId, Logger); Ecdsa = new EthereumEcdsa(specProvider.ChainId, logManager); } @@ -137,7 +136,7 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); if (spec.IsEip7702Enabled && tx.HasAuthorizationList) - BuildAuthorizedCodeCache(tx.AuthorizationList, _authorizedCodeInfoRepository, spec); + _authorizedCodeInfoRepository.BuildAuthorizedCodeFromAuthorizations(WorldState, tx.AuthorizationList, spec); ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _authorizedCodeInfoRepository); @@ -145,7 +144,8 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon ExecuteEvmCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode); - _authorizedCodeInfoRepository.ClearAuthorizations(); + if (spec.IsEip7702Enabled && tx.HasAuthorizationList) + _authorizedCodeInfoRepository.ClearAuthorizations(); // Finalize if (restore) @@ -572,48 +572,6 @@ protected void ExecuteEvmCall( if (validate && !tx.IsSystem()) header.GasUsed += spentGas; } - /// - /// eip-7702 - /// Build a cache from transaction authorization_list authorized by signature. - /// - /// - /// - /// - /// - private void BuildAuthorizedCodeCache(AuthorizationTuple[] authorizations, AuthorizedCodeInfoRepository authorizedCache, IReleaseSpec spec) - { - authorizedCache.ClearAuthorizations(); - - Span encoded = stackalloc byte[128]; - encoded[0] = Eip7702Constants.Magic; - //TODO optimize - //TODO try parallel sig recovery - foreach (AuthorizationTuple authTuple in authorizations) - { - if (authTuple.ChainId != 0 && SpecProvider.ChainId != authTuple.ChainId) - { - if (Logger.IsDebug) Logger.Debug($"Skipping tuple in authorization_list because chain id ({authTuple.ChainId}) does not match."); - continue; - } - RlpStream stream = _authorizationListDecoder.EncodeForCommitMessage(authTuple.ChainId, authTuple.CodeAddress, authTuple.Nonce); - stream.Data.AsSpan().CopyTo(encoded.Slice(1)); - Address authority = Ecdsa.RecoverAddress(authTuple.AuthoritySignature, Keccak.Compute(encoded.Slice(0, stream.Data.Length + 1))); - - CodeInfo authorityCodeInfo = _codeInfoRepository.GetCachedCodeInfo(WorldState, authority, spec); - if (authorityCodeInfo.MachineCode.Length > 0) - { - if (Logger.IsDebug) Logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) has code deployed."); - continue; - } - if (authTuple.Nonce != null && WorldState.GetNonce(authority) != authTuple.Nonce) - { - if (Logger.IsDebug) Logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) nonce ({authTuple.Nonce}) does not match."); - continue; - } - //TODO should we do insert if code is empty? - authorizedCache.CopyCodeAndOverwrite(WorldState, authTuple.CodeAddress, authority, spec); - } - } protected virtual void PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) { From bccfd219df15e174f3663ee83682ef4170e50a37 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 24 Jun 2024 16:44:22 +0200 Subject: [PATCH 269/551] refactor and unittest --- .../AuthorizedCodeInfoRepositoryTests.cs | 134 ++++++++++++++++++ .../AuthorizedCodeInfoRepository.cs | 6 +- .../TransactionProcessor.cs | 2 +- 3 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs diff --git a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs new file mode 100644 index 00000000000..6fcd8855a7c --- /dev/null +++ b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs @@ -0,0 +1,134 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Crypto; +using Nethermind.Core; +using Nethermind.Crypto; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Serialization.Rlp.Eip7702; +using Nethermind.Serialization.Rlp; +using NSubstitute; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Nethermind.Core.Test.Builders; +using FluentAssertions; +using Nethermind.State; +using Nethermind.Core.Specs; +using Nethermind.Evm.CodeAnalysis; +using Nethermind.Db; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Specs.Forks; +using Nethermind.Specs; +using Nethermind.Trie.Pruning; + +namespace Nethermind.Evm.Test; + +[TestFixture] +public class AuthorizedCodeInfoRepositoryTests +{ + [Test] + public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() + { + PrivateKey authority = TestItem.PrivateKeyA; + ICodeInfoRepository mockCodeRepository = Substitute.For(); + mockCodeRepository + .GetCachedCodeInfo(Arg.Any(), authority.Address, Arg.Any()) + .Returns(new CodeInfo([])); + AuthorizedCodeInfoRepository sut = new(mockCodeRepository, 1, NullLogger.Instance); + var tuples = new[] + { + CreateAuthorizationTuple(authority, 1, TestItem.AddressB, (UInt256)0), + }; + sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + + sut.AuthorizedAddresses.Should().BeEquivalentTo([authority.Address]); + } + + public static IEnumerable AuthorizationCases() + { + yield return new object[] + { + new[] + { + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, (UInt256)0), + //Wrong chain id + CreateAuthorizationTuple(TestItem.PrivateKeyA, 0, TestItem.AddressB, (UInt256)0), + //wrong nonce + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, (UInt256)1), + } + , 1 + }; + } + + [TestCaseSource(nameof(AuthorizationCases))] + public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_InsertsExpectedCount(AuthorizationTuple[] tuples, int expectedCount) + { + ICodeInfoRepository mockCodeRepository = Substitute.For(); + mockCodeRepository + .GetCachedCodeInfo(Arg.Any(), Arg.Any
(), Arg.Any()) + .Returns(new CodeInfo(Array.Empty())); + AuthorizedCodeInfoRepository sut = new(mockCodeRepository, 1, NullLogger.Instance); + + sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + + sut.AuthorizedAddresses.Count().Should().Be(expectedCount); + } + + [Test] + public void InsertFromAuthorizations_AuthorityHasCode_NoCodeIsInserted() + { + PrivateKey authority = TestItem.PrivateKeyA; + ICodeInfoRepository mockCodeRepository = Substitute.For(); + mockCodeRepository + .GetCachedCodeInfo(Arg.Any(), authority.Address, Arg.Any()) + .Returns(new CodeInfo( [(byte)0x0] )); + AuthorizedCodeInfoRepository sut = new(mockCodeRepository, 1, NullLogger.Instance); + var tuples = new[] + { + CreateAuthorizationTuple(authority, 1, TestItem.AddressB, (UInt256)0), + }; + sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + + sut.AuthorizedAddresses.Count().Should().Be(0); + } + + [Test] + public void ClearAuthorizations_HasAuthorizedAddresses_AuthorizationsAreClear() + { + ICodeInfoRepository mockCodeRepository = Substitute.For(); + mockCodeRepository + .GetCachedCodeInfo(Arg.Any(), Arg.Any
(), Arg.Any()) + .Returns(new CodeInfo(Array.Empty())); + AuthorizedCodeInfoRepository sut = new(mockCodeRepository, 1, NullLogger.Instance); + var tuples = new[] + { + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, (UInt256)0), + CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressB, (UInt256)0), + }; + sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + + sut.AuthorizedAddresses.Count().Should().Be(2); + + sut.ClearAuthorizations(); + + sut.AuthorizedAddresses.Count().Should().Be(0); + } + + private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) + { + AuthorizationListDecoder decoder = new(); + RlpStream rlp = decoder.EncodeForCommitMessage(chainId, codeAddress, nonce); + Span code = stackalloc byte[rlp.Length + 1]; + code[0] = Eip7702Constants.Magic; + rlp.Data.AsSpan().CopyTo(code.Slice(1)); + EthereumEcdsa ecdsa = new(1, new OneLoggerLogManager(NullLogger.Instance)); + Signature sig = ecdsa.Sign(signer, Keccak.Compute(code)); + + return new AuthorizationTuple(chainId, codeAddress, nonce, sig); + } +} diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index 7cf6317e800..93f6c784c63 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -28,10 +28,10 @@ public class AuthorizedCodeInfoRepository : ICodeInfoRepository public AuthorizedCodeInfoRepository(ulong chainId, ILogger? logger = null) : this(new CodeInfoRepository(), chainId, logger) { } - public AuthorizedCodeInfoRepository(ICodeInfoRepository codeInfoRepository, ulong _chainId, ILogger? logger = null) + public AuthorizedCodeInfoRepository(ICodeInfoRepository codeInfoRepository, ulong chainId, ILogger? logger = null) { this._codeInfoRepository = codeInfoRepository; - this._chainId = _chainId; + this._chainId = chainId; _ethereumEcdsa = new EthereumEcdsa(this._chainId, NullLogManager.Instance); this._logger = logger ?? NullLogger.Instance; } @@ -71,7 +71,7 @@ public void CopyCodeAndOverwrite( /// /// [SkipLocalsInit] - public void BuildAuthorizedCodeFromAuthorizations( + public void InsertFromAuthorizations( IWorldState worldState, AuthorizationTuple[] authorizations, IReleaseSpec spec) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 1d1558e7c82..6e7af57ccfc 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -136,7 +136,7 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); if (spec.IsEip7702Enabled && tx.HasAuthorizationList) - _authorizedCodeInfoRepository.BuildAuthorizedCodeFromAuthorizations(WorldState, tx.AuthorizationList, spec); + _authorizedCodeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _authorizedCodeInfoRepository); From a50c96c02f720f21b6d03aad92b34f738fac9911 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 24 Jun 2024 19:43:23 +0200 Subject: [PATCH 270/551] Recover authority together with sender --- .../Processing/RecoverSignature.cs | 38 +++++++++++++++++++ .../Nethermind.Core/AuthorizationTuple.cs | 9 ++++- .../AuthorizedCodeInfoRepositoryTests.cs | 20 ++++++++++ .../AuthorizedCodeInfoRepository.cs | 1 - 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 73583c58e03..1c5e92169f2 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -5,9 +5,12 @@ using System.Linq; using System.Threading.Tasks; using Nethermind.Core; +using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Logging; +using Nethermind.Serialization.Rlp; +using Nethermind.Serialization.Rlp.Eip7702; using Nethermind.TxPool; namespace Nethermind.Consensus.Processing @@ -17,6 +20,7 @@ public class RecoverSignatures : IBlockPreprocessorStep private readonly IEthereumEcdsa _ecdsa; private readonly ITxPool _txPool; private readonly ISpecProvider _specProvider; + private readonly AuthorizationListDecoder _authorizationListDecoder = new (); private readonly ILogger _logger; /// @@ -102,6 +106,40 @@ public void RecoverData(Block block) if (_logger.IsTrace) _logger.Trace($"Recovered {blockTransaction.SenderAddress} sender for {blockTransaction.Hash}"); } } + + if (releaseSpec.IsAuthorizationListEnabled) + { + void RecoverAuthority(AuthorizationTuple tuple) + { + RlpStream rlpStream = _authorizationListDecoder.EncodeForCommitMessage(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); + tuple.Authority = _ecdsa.RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(rlpStream.Data)); + } + + foreach (Transaction tx in block.Transactions.AsSpan()) + { + if (!tx.HasAuthorizationList) + { + continue; + } + + if (tx.AuthorizationList.Length >= 4) + { + Parallel.ForEach( + tx.AuthorizationList, + tuple => + { + RecoverAuthority(tuple); + }); + } + else + { + foreach (AuthorizationTuple tuple in tx.AuthorizationList.AsSpan()) + { + RecoverAuthority(tuple); + } + } + } + } } } } diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 14220c156e2..3a9499f4a91 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -2,7 +2,9 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core.Crypto; +using Nethermind.Crypto; using Nethermind.Int256; +using System; namespace Nethermind.Core; public class AuthorizationTuple @@ -13,23 +15,26 @@ public AuthorizationTuple( UInt256? nonce, ulong yParity, byte[] r, - byte[] s) : this(chainId, codeAddress, nonce, new Signature(r, s, yParity + Signature.VOffset)) + byte[] s, + Address? authority = null) : this(chainId, codeAddress, nonce, new Signature(r, s, yParity + Signature.VOffset), authority) { } public AuthorizationTuple( ulong chainId, Address codeAddress, UInt256? nonce, - Signature sig) + Signature sig, Address? authority = null) { ChainId = chainId; CodeAddress = codeAddress ?? throw new System.ArgumentNullException(nameof(codeAddress)); Nonce = nonce; AuthoritySignature = sig ?? throw new System.ArgumentNullException(nameof(sig)); + Authority = authority; } public ulong ChainId { get; } public Address CodeAddress { get; } public UInt256? Nonce { get; } public Signature AuthoritySignature { get; } + public Address? Authority { get; set; } } diff --git a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs index 6fcd8855a7c..4a8eee92fb2 100644 --- a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs @@ -31,6 +31,26 @@ namespace Nethermind.Evm.Test; [TestFixture] public class AuthorizedCodeInfoRepositoryTests { + [Test] + public void Benchmark() + { + MemDb stateDb = new(); + TestSpecProvider specProvider = new (Prague.Instance); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + WorldState stateProvider = new (trieStore, new MemDb(), LimboLogs.Instance); + CodeInfoRepository codeInfoRepository = new(); + var spec = specProvider.GetSpec(MainnetSpecProvider.PragueActivation); + + stateProvider.CreateAccount(TestItem.AddressB, 0); + codeInfoRepository.InsertCode(stateProvider, new ReadOnlyMemory([0x0]),TestItem.AddressB, spec); + + AuthorizedCodeInfoRepository sut = new(codeInfoRepository, 1, NullLogger.Instance); + var tuples = Enumerable + .Range(0, 100) + .Select(i => CreateAuthorizationTuple(TestItem.PrivateKeys[i], 1, TestItem.AddressB, (UInt256)0)).ToArray(); + + sut.InsertFromAuthorizations(stateProvider, tuples, spec); + } [Test] public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() { diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index 93f6c784c63..4ff32c9570b 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -70,7 +70,6 @@ public void CopyCodeAndOverwrite( /// /// /// - [SkipLocalsInit] public void InsertFromAuthorizations( IWorldState worldState, AuthorizationTuple[] authorizations, From 6e915104801985cd5afb8452674d19cb1e567fdc Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 24 Jun 2024 21:31:37 +0200 Subject: [PATCH 271/551] added 7702 to metrics --- src/Nethermind/Nethermind.TxPool/Metrics.cs | 4 ++++ src/Nethermind/Nethermind.TxPool/TxPool.cs | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/Nethermind/Nethermind.TxPool/Metrics.cs b/src/Nethermind/Nethermind.TxPool/Metrics.cs index 53721d957fe..5ab04752de7 100644 --- a/src/Nethermind/Nethermind.TxPool/Metrics.cs +++ b/src/Nethermind/Nethermind.TxPool/Metrics.cs @@ -122,6 +122,10 @@ public static class Metrics [Description("Ratio of 1559-type transactions in the block.")] public static float Eip1559TransactionsRatio { get; set; } + [GaugeMetric] + [Description("Ratio of 1559-type transactions in the block.")] + public static long Eip7702TransactionsInBlock { get; set; } + [GaugeMetric] [Description("Number of blob transactions in the block.")] public static long BlobTransactionsInBlock { get; set; } diff --git a/src/Nethermind/Nethermind.TxPool/TxPool.cs b/src/Nethermind/Nethermind.TxPool/TxPool.cs index fe806ad91e6..bc5e1f24b55 100644 --- a/src/Nethermind/Nethermind.TxPool/TxPool.cs +++ b/src/Nethermind/Nethermind.TxPool/TxPool.cs @@ -296,6 +296,7 @@ private void RemoveProcessedTransactions(Block block) long discoveredForPendingTxs = 0; long discoveredForHashCache = 0; long eip1559Txs = 0; + long eip7702Txs = 0; long blobTxs = 0; long blobs = 0; @@ -325,6 +326,11 @@ private void RemoveProcessedTransactions(Block block) } } + if (blockTx.Type == TxType.SetCode) + { + eip7702Txs++; + } + if (!IsKnown(txHash)) { discoveredForHashCache++; @@ -347,6 +353,7 @@ private void RemoveProcessedTransactions(Block block) Metrics.DarkPoolRatioLevel1 = (float)discoveredForHashCache / transactionsInBlock; Metrics.DarkPoolRatioLevel2 = (float)discoveredForPendingTxs / transactionsInBlock; Metrics.Eip1559TransactionsRatio = (float)eip1559Txs / transactionsInBlock; + Metrics.Eip7702TransactionsInBlock = eip7702Txs; Metrics.BlobTransactionsInBlock = blobTxs; Metrics.BlobsInBlock = blobs; } @@ -892,6 +899,7 @@ private static void WriteTxPoolReport(in ILogger logger) ------------------------------------------------ Ratios in last block: * Eip1559 Transactions: {Metrics.Eip1559TransactionsRatio,24:P5} +* Eip7702 Transactions: {Metrics.Eip7702TransactionsInBlock,24:P5} * DarkPool Level1: {Metrics.DarkPoolRatioLevel1,24:P5} * DarkPool Level2: {Metrics.DarkPoolRatioLevel2,24:P5} Amounts: From 23a2936a86b20979f91cdcd256fce235a6a48468 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 24 Jun 2024 21:52:50 +0200 Subject: [PATCH 272/551] dont recover if already recovered --- .../AuthorizedCodeInfoRepository.cs | 25 ++++++++++++------- .../TransactionProcessor.cs | 2 -- .../Eip7702/AuthorizationListDecoder.cs | 1 - 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index 4ff32c9570b..f11a2d40cc3 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -11,7 +11,6 @@ using Nethermind.Serialization.Rlp; using Nethermind.Logging; using Nethermind.Serialization.Rlp.Eip7702; -using System.Runtime.CompilerServices; using Nethermind.Crypto; namespace Nethermind.Evm; @@ -34,6 +33,7 @@ public AuthorizedCodeInfoRepository(ICodeInfoRepository codeInfoRepository, ulon this._chainId = chainId; _ethereumEcdsa = new EthereumEcdsa(this._chainId, NullLogManager.Instance); this._logger = logger ?? NullLogger.Instance; + _internalBuffer[0] = Eip7702Constants.Magic; } public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => _authorizedCode.TryGetValue(codeSource, out CodeInfo result) @@ -62,9 +62,9 @@ public void CopyCodeAndOverwrite( } } - /// + /// + /// Build a code cache from transaction authorization_list authorized by signature. /// eip-7702 - /// Build a cache from transaction authorization_list authorized by signature. /// /// /// @@ -77,10 +77,7 @@ public void InsertFromAuthorizations( { _authorizedCode.Clear(); - Span encoded = _internalBuffer.AsSpan(); - encoded[0] = Eip7702Constants.Magic; //TODO optimize - //TODO try parallel sig recovery foreach (AuthorizationTuple authTuple in authorizations) { if (authTuple.ChainId != 0 && _chainId != authTuple.ChainId) @@ -88,9 +85,11 @@ public void InsertFromAuthorizations( if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because chain id ({authTuple.ChainId}) does not match."); continue; } - RlpStream stream = _authorizationListDecoder.EncodeForCommitMessage(authTuple.ChainId, authTuple.CodeAddress, authTuple.Nonce); - stream.Data.AsSpan().CopyTo(encoded.Slice(1)); - Address authority = _ethereumEcdsa.RecoverAddress(authTuple.AuthoritySignature, Keccak.Compute(encoded.Slice(0, stream.Data.Length + 1))); + Address authority = authTuple.Authority; + if (authority == null) + { + authority = RecoverAuthority(authTuple); + } CodeInfo authorityCodeInfo = _codeInfoRepository.GetCachedCodeInfo(worldState, authority, spec); if (authorityCodeInfo.MachineCode.Length > 0) @@ -108,6 +107,14 @@ public void InsertFromAuthorizations( } } + private Address RecoverAuthority(AuthorizationTuple authTuple) + { + Span encoded = _internalBuffer.AsSpan(); + RlpStream stream = _authorizationListDecoder.EncodeForCommitMessage(authTuple.ChainId, authTuple.CodeAddress, authTuple.Nonce); + stream.Data.AsSpan().CopyTo(encoded.Slice(1)); + return _ethereumEcdsa.RecoverAddress(authTuple.AuthoritySignature, Keccak.Compute(encoded.Slice(0, stream.Data.Length + 1))); + } + public void ClearAuthorizations() { _authorizedCode.Clear(); diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 6e7af57ccfc..4adb8797b50 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -16,8 +16,6 @@ using Nethermind.Evm.Tracing; using Nethermind.Int256; using Nethermind.Logging; -using Nethermind.Serialization.Rlp; -using Nethermind.Serialization.Rlp.Eip7702; using Nethermind.Specs; using Nethermind.State; using Nethermind.State.Tracing; diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs index a4aa50fca22..b6b8c18abb7 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs @@ -66,7 +66,6 @@ public class AuthorizationListDecoder : IRlpStreamDecoder while (decoderContext.Position < check) { - //TODO check what is valid for the fields here var chainId = decoderContext.DecodeULong(); Address codeAddress = decoderContext.DecodeAddress(); int nonceLength = decoderContext.ReadSequenceLength(); From d1ef9ddec9df329cd40f9acf7f35c0d978c90c35 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 24 Jun 2024 23:11:53 +0200 Subject: [PATCH 273/551] Small changes --- .../Core/AuthorizedCodeInfoRepository.cs | 17 +++++++++-------- .../Nethermind.Core/AuthorizationTuple.cs | 3 +++ .../AuthorizedCodeInfoRepositoryTests.cs | 4 ++-- .../Eip7702/AuthorizationListDecoder.cs | 18 +++++++++--------- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs index ebd870b7e61..956a1b22c49 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs @@ -31,7 +31,6 @@ public class AuthorizedCodeInfoRepositoryBenchmark private AuthorizationTuple[] Tuples100; private AuthorizationTuple[] Tuples1k; - private AuthorizationTuple[] Tuples10k; private AuthorizedCodeInfoRepository sut; private static EthereumEcdsa _ethereumEcdsa; @@ -52,18 +51,20 @@ public void GlobalSetup() var list = new List(); var rnd = new Random(); var addressBuffer = new byte[20]; - for (int i = 0; i < 10000; i++) + var keyBuffer = new byte[32]; + for (int i = 0; i < 1000; i++) { rnd.NextBytes(addressBuffer); + rnd.NextBytes(keyBuffer); + var signer = new PrivateKey(keyBuffer); list.Add(CreateAuthorizationTuple( - TestItem.PrivateKeys[rnd.Next(TestItem.PrivateKeys.Length - 1)], + signer, 1, new Address(addressBuffer), 1)); } Tuples100 = list.Take(100).ToArray(); Tuples1k = list.Take(1_000).ToArray(); - Tuples10k = list.Take(10_000).ToArray(); static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) { @@ -75,26 +76,26 @@ static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chai Signature sig = _ethereumEcdsa.Sign(signer, Keccak.Compute(code)); - return new AuthorizationTuple(chainId, codeAddress, nonce, sig); + return new AuthorizationTuple(chainId, codeAddress, nonce, sig, signer.Address); } } [Benchmark] public void Build100Tuples() { - sut.BuildAuthorizedCodeFromAuthorizations(_stateProvider, Tuples100, _spec); + sut.InsertFromAuthorizations(_stateProvider, Tuples100, _spec); } [Benchmark] public void Build1kTuples() { - sut.BuildAuthorizedCodeFromAuthorizations(_stateProvider, Tuples1k, _spec); + sut.InsertFromAuthorizations(_stateProvider, Tuples1k, _spec); } //[Benchmark] //public void Build10kTuples() //{ - // sut.BuildAuthorizedCodeFromAuthorizations(_stateProvider, Tuples10k, _spec); + // sut.InsertFromAuthorizations(_stateProvider, Tuples10k, _spec); //} } diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 3a9499f4a91..2b2aedfa709 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -36,5 +36,8 @@ public AuthorizationTuple( public Address CodeAddress { get; } public UInt256? Nonce { get; } public Signature AuthoritySignature { get; } + /// + /// may be recovered at a later point. + /// public Address? Authority { get; set; } } diff --git a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs index 4a8eee92fb2..72d73f00ac4 100644 --- a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs @@ -47,7 +47,7 @@ public void Benchmark() AuthorizedCodeInfoRepository sut = new(codeInfoRepository, 1, NullLogger.Instance); var tuples = Enumerable .Range(0, 100) - .Select(i => CreateAuthorizationTuple(TestItem.PrivateKeys[i], 1, TestItem.AddressB, (UInt256)0)).ToArray(); + .Select(i =>CreateAuthorizationTuple(TestItem.PrivateKeys[i], 1, TestItem.AddressB, (UInt256)0)).ToArray(); sut.InsertFromAuthorizations(stateProvider, tuples, spec); } @@ -149,6 +149,6 @@ private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ul EthereumEcdsa ecdsa = new(1, new OneLoggerLogManager(NullLogger.Instance)); Signature sig = ecdsa.Sign(signer, Keccak.Compute(code)); - return new AuthorizationTuple(chainId, codeAddress, nonce, sig); + return new AuthorizationTuple(chainId, codeAddress, nonce, sig, signer.Address); } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs index b6b8c18abb7..159949f5fb3 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs @@ -100,22 +100,22 @@ public void Encode(RlpStream stream, AuthorizationTuple[]? item, RlpBehaviors rl int contentLength = GetContentLength(item); stream.StartSequence(contentLength); - foreach (AuthorizationTuple setCode in item) + foreach (AuthorizationTuple tuple in item) { - stream.Encode(setCode.ChainId); - stream.Encode(setCode.CodeAddress ?? throw new RlpException($"Invalid tx {nameof(AuthorizationTuple)} format - address is null")); - if (setCode.Nonce != null) + stream.Encode(tuple.ChainId); + stream.Encode(tuple.CodeAddress ?? throw new RlpException($"Invalid tx {nameof(AuthorizationTuple)} format - address is null")); + if (tuple.Nonce != null) { - stream.StartSequence(Rlp.LengthOf(setCode.Nonce)); - stream.Encode((UInt256)setCode.Nonce); + stream.StartSequence(Rlp.LengthOf(tuple.Nonce)); + stream.Encode((UInt256)tuple.Nonce); } else { stream.StartSequence(0); } - stream.Encode(setCode.AuthoritySignature.V); - stream.Encode(setCode.AuthoritySignature.R); - stream.Encode(setCode.AuthoritySignature.S); + stream.Encode(tuple.AuthoritySignature.V); + stream.Encode(tuple.AuthoritySignature.R); + stream.Encode(tuple.AuthoritySignature.S); } } From c1fd043af311761321cf8804f65a352cc11b5a8e Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 24 Jun 2024 23:14:24 +0200 Subject: [PATCH 274/551] format whitespace --- .../Core/AuthorizedCodeInfoRepository.cs | 4 ++-- .../Processing/RecoverSignature.cs | 2 +- .../AuthorizedCodeInfoRepositoryTests.cs | 10 +++++----- .../Nethermind.Evm/AuthorizedCodeInfoRepository.cs | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs index 956a1b22c49..cb611831239 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs @@ -46,7 +46,7 @@ public void GlobalSetup() _stateProvider.CreateAccount(Address.Zero, 100000000000000); _stateProvider.Commit(_spec); - _ethereumEcdsa = new (1, new OneLoggerLogManager(NullLogger.Instance)); + _ethereumEcdsa = new(1, new OneLoggerLogManager(NullLogger.Instance)); sut = new AuthorizedCodeInfoRepository(1, NullLogger.Instance); var list = new List(); var rnd = new Random(); @@ -85,7 +85,7 @@ public void Build100Tuples() { sut.InsertFromAuthorizations(_stateProvider, Tuples100, _spec); } - + [Benchmark] public void Build1kTuples() { diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 1c5e92169f2..37ef3fe2310 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -20,7 +20,7 @@ public class RecoverSignatures : IBlockPreprocessorStep private readonly IEthereumEcdsa _ecdsa; private readonly ITxPool _txPool; private readonly ISpecProvider _specProvider; - private readonly AuthorizationListDecoder _authorizationListDecoder = new (); + private readonly AuthorizationListDecoder _authorizationListDecoder = new(); private readonly ILogger _logger; /// diff --git a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs index 72d73f00ac4..1b2b764d9d0 100644 --- a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs @@ -35,19 +35,19 @@ public class AuthorizedCodeInfoRepositoryTests public void Benchmark() { MemDb stateDb = new(); - TestSpecProvider specProvider = new (Prague.Instance); + TestSpecProvider specProvider = new(Prague.Instance); TrieStore trieStore = new(stateDb, LimboLogs.Instance); - WorldState stateProvider = new (trieStore, new MemDb(), LimboLogs.Instance); + WorldState stateProvider = new(trieStore, new MemDb(), LimboLogs.Instance); CodeInfoRepository codeInfoRepository = new(); var spec = specProvider.GetSpec(MainnetSpecProvider.PragueActivation); stateProvider.CreateAccount(TestItem.AddressB, 0); - codeInfoRepository.InsertCode(stateProvider, new ReadOnlyMemory([0x0]),TestItem.AddressB, spec); + codeInfoRepository.InsertCode(stateProvider, new ReadOnlyMemory([0x0]), TestItem.AddressB, spec); AuthorizedCodeInfoRepository sut = new(codeInfoRepository, 1, NullLogger.Instance); var tuples = Enumerable .Range(0, 100) - .Select(i =>CreateAuthorizationTuple(TestItem.PrivateKeys[i], 1, TestItem.AddressB, (UInt256)0)).ToArray(); + .Select(i => CreateAuthorizationTuple(TestItem.PrivateKeys[i], 1, TestItem.AddressB, (UInt256)0)).ToArray(); sut.InsertFromAuthorizations(stateProvider, tuples, spec); } @@ -106,7 +106,7 @@ public void InsertFromAuthorizations_AuthorityHasCode_NoCodeIsInserted() ICodeInfoRepository mockCodeRepository = Substitute.For(); mockCodeRepository .GetCachedCodeInfo(Arg.Any(), authority.Address, Arg.Any()) - .Returns(new CodeInfo( [(byte)0x0] )); + .Returns(new CodeInfo([(byte)0x0])); AuthorizedCodeInfoRepository sut = new(mockCodeRepository, 1, NullLogger.Instance); var tuples = new[] { diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index f11a2d40cc3..674c87e4c9b 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -79,13 +79,13 @@ public void InsertFromAuthorizations( //TODO optimize foreach (AuthorizationTuple authTuple in authorizations) - { + { if (authTuple.ChainId != 0 && _chainId != authTuple.ChainId) { if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because chain id ({authTuple.ChainId}) does not match."); continue; } - Address authority = authTuple.Authority; + Address authority = authTuple.Authority; if (authority == null) { authority = RecoverAuthority(authTuple); From dd08281e52aa4d3ab0ad63906d5e5615b2675a1d Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 24 Jun 2024 23:20:12 +0200 Subject: [PATCH 275/551] fix recover --- .../Nethermind.Consensus/Processing/RecoverSignature.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 37ef3fe2310..9ea82bc5ac7 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -111,8 +111,11 @@ public void RecoverData(Block block) { void RecoverAuthority(AuthorizationTuple tuple) { + Span msg = stackalloc byte[128]; + msg[0] = Eip7702Constants.Magic; RlpStream rlpStream = _authorizationListDecoder.EncodeForCommitMessage(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); - tuple.Authority = _ecdsa.RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(rlpStream.Data)); + rlpStream.Data.AsSpan().CopyTo(msg.Slice(1)); + tuple.Authority = _ecdsa.RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(msg)); } foreach (Transaction tx in block.Transactions.AsSpan()) From 0a8346b56c6d54eb0340b693806c3d38d22242bc Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 24 Jun 2024 23:37:26 +0200 Subject: [PATCH 276/551] removed test --- .../Processing/RecoverSignature.cs | 10 +++++----- .../AuthorizedCodeInfoRepositoryTests.cs | 20 ------------------- .../TransactionProcessor.cs | 13 +++++++----- 3 files changed, 13 insertions(+), 30 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 9ea82bc5ac7..b13ceb528ea 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -128,11 +128,11 @@ void RecoverAuthority(AuthorizationTuple tuple) if (tx.AuthorizationList.Length >= 4) { Parallel.ForEach( - tx.AuthorizationList, - tuple => - { - RecoverAuthority(tuple); - }); + tx.AuthorizationList, + tuple => + { + RecoverAuthority(tuple); + }); } else { diff --git a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs index 1b2b764d9d0..b101e3d2d37 100644 --- a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs @@ -31,26 +31,6 @@ namespace Nethermind.Evm.Test; [TestFixture] public class AuthorizedCodeInfoRepositoryTests { - [Test] - public void Benchmark() - { - MemDb stateDb = new(); - TestSpecProvider specProvider = new(Prague.Instance); - TrieStore trieStore = new(stateDb, LimboLogs.Instance); - WorldState stateProvider = new(trieStore, new MemDb(), LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(); - var spec = specProvider.GetSpec(MainnetSpecProvider.PragueActivation); - - stateProvider.CreateAccount(TestItem.AddressB, 0); - codeInfoRepository.InsertCode(stateProvider, new ReadOnlyMemory([0x0]), TestItem.AddressB, spec); - - AuthorizedCodeInfoRepository sut = new(codeInfoRepository, 1, NullLogger.Instance); - var tuples = Enumerable - .Range(0, 100) - .Select(i => CreateAuthorizationTuple(TestItem.PrivateKeys[i], 1, TestItem.AddressB, (UInt256)0)).ToArray(); - - sut.InsertFromAuthorizations(stateProvider, tuples, spec); - } [Test] public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() { diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 4adb8797b50..d969d03a94b 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -133,8 +133,14 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); - if (spec.IsEip7702Enabled && tx.HasAuthorizationList) - _authorizedCodeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); + if (spec.IsEip7702Enabled) + { + _authorizedCodeInfoRepository.ClearAuthorizations(); + if (tx.HasAuthorizationList) + { + _authorizedCodeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); + } + } ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _authorizedCodeInfoRepository); @@ -142,9 +148,6 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon ExecuteEvmCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode); - if (spec.IsEip7702Enabled && tx.HasAuthorizationList) - _authorizedCodeInfoRepository.ClearAuthorizations(); - // Finalize if (restore) { From a869907e819904a7a5534627a3ae7a4d5820ef64 Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Tue, 25 Jun 2024 13:54:15 +0300 Subject: [PATCH 277/551] update rlp decoding --- .../Eip7702/AuthorizationListDecoder.cs | 43 ++++++++----------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs index 159949f5fb3..f06a84c6c96 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs @@ -16,36 +16,27 @@ public class AuthorizationListDecoder : IRlpStreamDecoder rlpStream.ReadByte(); return null; } - - int outerLength = rlpStream.ReadSequenceLength(); - - int check = rlpStream.Position + outerLength; - - List result = new List(); - - while (rlpStream.Position < check) + return rlpStream.DecodeArray(stream => { - //TODO check what is valid for the fields here - var chainId = rlpStream.DecodeULong(); - Address codeAddress = rlpStream.DecodeAddress(); - UInt256? nonce = null; - int nonceLength = rlpStream.ReadSequenceLength(); - if (nonceLength > 0) - nonce = rlpStream.DecodeUInt256(); - result.Add(new AuthorizationTuple( + bool shouldReturnNull = false; + var chainId = stream.DecodeULong(); + Address? codeAddress = stream.DecodeAddress(); + shouldReturnNull |= codeAddress is null; + UInt256?[] nonces = stream.DecodeArray(s => s.DecodeUInt256()); + shouldReturnNull |= nonces.Length > 1; + UInt256? nonce = nonces.Length == 1 ? nonces[0] : null; + if (shouldReturnNull) + { + return null; + } + return new AuthorizationTuple( chainId, codeAddress, nonce, - rlpStream.DecodeULong(), - rlpStream.DecodeByteArray(), - rlpStream.DecodeByteArray())); - } - - if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) - { - rlpStream.Check(check); - } - return result.ToArray(); + stream.DecodeULong(), + stream.DecodeByteArray(), + stream.DecodeByteArray()); + }); } public AuthorizationTuple[]? Decode( From e2fb74d985356fcb5206fc83196c062bb8ff9994 Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Tue, 25 Jun 2024 13:58:30 +0300 Subject: [PATCH 278/551] authorizationtuple being nullable --- src/Nethermind/Nethermind.Core/Transaction.cs | 2 +- .../AuthorizedCodeInfoRepository.cs | 10 +++-- .../Eip7702/AuthorizationListDecoder.cs | 38 ++++++++----------- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index fb9ada5caa2..96b2b47f5b4 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -165,7 +165,7 @@ private void ClearPreHashInternal() public object? NetworkWrapper { get; set; } - public AuthorizationTuple[]? AuthorizationList { get; set; } // https://eips.ethereum.org/EIPS/eip-7702 + public AuthorizationTuple?[]? AuthorizationList { get; set; } // https://eips.ethereum.org/EIPS/eip-7702 /// /// Service transactions are free. The field added to handle baseFee validation after 1559 diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index 674c87e4c9b..fa054d8e570 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -62,7 +62,7 @@ public void CopyCodeAndOverwrite( } } - /// + /// /// Build a code cache from transaction authorization_list authorized by signature. /// eip-7702 /// @@ -72,14 +72,18 @@ public void CopyCodeAndOverwrite( /// public void InsertFromAuthorizations( IWorldState worldState, - AuthorizationTuple[] authorizations, + AuthorizationTuple?[] authorizations, IReleaseSpec spec) { _authorizedCode.Clear(); //TODO optimize - foreach (AuthorizationTuple authTuple in authorizations) + foreach (AuthorizationTuple? authTuple in authorizations) { + if (authTuple is null) + { + continue; + } if (authTuple.ChainId != 0 && _chainId != authTuple.ChainId) { if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because chain id ({authTuple.ChainId}) does not match."); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs index f06a84c6c96..5d5b6400755 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs @@ -9,34 +9,28 @@ namespace Nethermind.Serialization.Rlp.Eip7702; public class AuthorizationListDecoder : IRlpStreamDecoder, IRlpValueDecoder { - public AuthorizationTuple[]? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public AuthorizationTuple?[]? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { rlpStream.ReadByte(); return null; } - return rlpStream.DecodeArray(stream => - { - bool shouldReturnNull = false; - var chainId = stream.DecodeULong(); - Address? codeAddress = stream.DecodeAddress(); - shouldReturnNull |= codeAddress is null; - UInt256?[] nonces = stream.DecodeArray(s => s.DecodeUInt256()); - shouldReturnNull |= nonces.Length > 1; - UInt256? nonce = nonces.Length == 1 ? nonces[0] : null; - if (shouldReturnNull) - { - return null; - } - return new AuthorizationTuple( - chainId, - codeAddress, - nonce, - stream.DecodeULong(), - stream.DecodeByteArray(), - stream.DecodeByteArray()); - }); + return rlpStream.DecodeArray(DecodeAuthorizationTuple); + } + + private AuthorizationTuple? DecodeAuthorizationTuple(RlpStream stream) + { + bool shouldReturnNull = false; + var chainId = stream.DecodeULong(); + Address? codeAddress = stream.DecodeAddress(); + shouldReturnNull |= codeAddress is null; + UInt256?[] nonces = stream.DecodeArray(s => s.DecodeUInt256()); + shouldReturnNull |= nonces.Length > 1; + UInt256? nonce = nonces.Length == 1 ? nonces[0] : null; + return shouldReturnNull + ? null + : new AuthorizationTuple(chainId, codeAddress, nonce, stream.DecodeULong(), stream.DecodeByteArray(), stream.DecodeByteArray()); } public AuthorizationTuple[]? Decode( From c0624021b35981ddf419a77e231ceecdd0b1b201 Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 25 Jun 2024 14:03:45 +0200 Subject: [PATCH 279/551] unittest fix --- .../Validators/TxValidatorTests.cs | 4 +++- .../Messages/TxErrorMessages.cs | 2 ++ .../Processing/RecoverSignature.cs | 3 ++- .../Validators/TxValidator.cs | 16 +++++++++++++++- src/Nethermind/Nethermind.Core/Transaction.cs | 6 +++++- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 7ef761d6908..74705102136 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -536,6 +536,7 @@ public void IsWellFormed_BlobTxHasProofOverTheSizeLimit_ReturnFalse() public void IsWellFormed_AuthorizationListTxInCancunSpec_ReturnsFalse() { TransactionBuilder txBuilder = Build.A.Transaction + .WithType(TxType.SetCode) .WithAuthorizationCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) @@ -552,6 +553,7 @@ public void IsWellFormed_AuthorizationListTxInCancunSpec_ReturnsFalse() public void IsWellFormed_AuthorizationListTxInPragueSpec_ReturnsTrue() { TransactionBuilder txBuilder = Build.A.Transaction + .WithType(TxType.SetCode) .WithAuthorizationCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) @@ -561,7 +563,7 @@ public void IsWellFormed_AuthorizationListTxInPragueSpec_ReturnsTrue() Transaction tx = txBuilder.TestObject; TxValidator txValidator = new(TestBlockchainIds.ChainId); - Assert.That(txValidator.IsWellFormed(tx, Cancun.Instance, out _), Is.True); + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance, out _), Is.True); } private static byte[] MakeArray(int count, params byte[] elements) => diff --git a/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs index 8eab24494cf..c3b375e3249 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs @@ -70,6 +70,8 @@ public static string InvalidTxChainId(ulong expected, ulong? actual) => public static readonly string InvalidBlobProofSize = $"InvalidBlobProofSize: Cannot be more than {Ckzg.Ckzg.BytesPerProof}."; + public const string NotAllowedAuthorizationList = $"NotAllowedAuthorizationList: Only transactions with type {nameof(TxType.SetCode)} can have authorization_list."; + public const string InvalidBlobCommitmentHash = "InvalidBlobCommitmentHash: Commitment hash does not match."; diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index b13ceb528ea..7b3f823d14d 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.IO; using System.Linq; using System.Threading.Tasks; using Nethermind.Core; @@ -115,7 +116,7 @@ void RecoverAuthority(AuthorizationTuple tuple) msg[0] = Eip7702Constants.Magic; RlpStream rlpStream = _authorizationListDecoder.EncodeForCommitMessage(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); rlpStream.Data.AsSpan().CopyTo(msg.Slice(1)); - tuple.Authority = _ecdsa.RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(msg)); + tuple.Authority = _ecdsa.RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(msg.Slice(0, rlpStream.Data.Length + 1))); } foreach (Transaction tx in block.Transactions.AsSpan()) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index b65e9f3dd01..71a32d46665 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -47,7 +47,8 @@ public bool IsWellFormed(Transaction transaction, IReleaseSpec releaseSpec, out && ValidateChainId(transaction, ref error) && ValidateWithError(Validate1559GasFields(transaction, releaseSpec), TxErrorMessages.InvalidMaxPriorityFeePerGas, ref error) && ValidateWithError(Validate3860Rules(transaction, releaseSpec), TxErrorMessages.ContractSizeTooBig, ref error) - && Validate4844Fields(transaction, ref error); + && Validate4844Fields(transaction, ref error) + && Validate7702Field(transaction, ref error); } private static bool Validate3860Rules(Transaction transaction, IReleaseSpec releaseSpec) => @@ -292,5 +293,18 @@ private static bool Validate4844Fields(Transaction transaction, ref string? erro return true; } + + private bool Validate7702Field(Transaction tx, ref string error) + { + if (tx.Type != TxType.SetCode) + { + if (tx.AuthorizationList is not null) + { + error = TxErrorMessages.NotAllowedAuthorizationList; + return false; + } + } + return true; + } } } diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index 96b2b47f5b4..7acf8b042cf 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -165,7 +165,11 @@ private void ClearPreHashInternal() public object? NetworkWrapper { get; set; } - public AuthorizationTuple?[]? AuthorizationList { get; set; } // https://eips.ethereum.org/EIPS/eip-7702 + /// + /// List of EOA code authorizations. + /// https://eips.ethereum.org/EIPS/eip-7702 + /// + public AuthorizationTuple?[]? AuthorizationList { get; set; } /// /// Service transactions are free. The field added to handle baseFee validation after 1559 From 949f5a8517b6fe86489b531825dbf1a62b953ff3 Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 25 Jun 2024 22:34:42 +0200 Subject: [PATCH 280/551] Rlp decoder changes --- .../Processing/RecoverSignature.cs | 4 +- .../AuthorizedCodeInfoRepositoryTests.cs | 2 +- .../TransactionProcessorEip7702Tests.cs | 3 +- .../AuthorizedCodeInfoRepository.cs | 4 +- .../Eip7702/AuthorizationListDecoder.cs | 141 ++++-------------- .../Eip7702/AuthorizationTupleDecoder.cs | 112 ++++++++++++++ 6 files changed, 150 insertions(+), 116 deletions(-) create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 7b3f823d14d..2e2522fe1b5 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -21,7 +21,7 @@ public class RecoverSignatures : IBlockPreprocessorStep private readonly IEthereumEcdsa _ecdsa; private readonly ITxPool _txPool; private readonly ISpecProvider _specProvider; - private readonly AuthorizationListDecoder _authorizationListDecoder = new(); + private readonly AuthorizationTupleDecoder _authorizationTupleDecoder = new(); private readonly ILogger _logger; /// @@ -114,7 +114,7 @@ void RecoverAuthority(AuthorizationTuple tuple) { Span msg = stackalloc byte[128]; msg[0] = Eip7702Constants.Magic; - RlpStream rlpStream = _authorizationListDecoder.EncodeForCommitMessage(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); + RlpStream rlpStream = _authorizationTupleDecoder.EncodeForCommitMessage(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); rlpStream.Data.AsSpan().CopyTo(msg.Slice(1)); tuple.Authority = _ecdsa.RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(msg.Slice(0, rlpStream.Data.Length + 1))); } diff --git a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs index b101e3d2d37..788c54012e4 100644 --- a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs @@ -121,7 +121,7 @@ public void ClearAuthorizations_HasAuthorizedAddresses_AuthorizationsAreClear() private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) { - AuthorizationListDecoder decoder = new(); + AuthorizationTupleDecoder decoder = new(); RlpStream rlp = decoder.EncodeForCommitMessage(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 68766b6f276..9c7e1ce8feb 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -363,6 +363,7 @@ public void Execute_FirstTxHasAuthorizedCodeThatIncrementsAndSecondDoesNot_Stora .WithNonce(1) .WithTo(signer.Address) .WithGasLimit(60_000) + .WithAuthorizationCode([]) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -384,7 +385,7 @@ private void DeployCode(Address codeSource, byte[] code) private AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) { - AuthorizationListDecoder decoder = new(); + AuthorizationTupleDecoder decoder = new(); RlpStream rlp = decoder.EncodeForCommitMessage(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index fa054d8e570..756981aabeb 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -18,7 +18,7 @@ public class AuthorizedCodeInfoRepository : ICodeInfoRepository { public IEnumerable
AuthorizedAddresses => _authorizedCode.Keys; private readonly Dictionary _authorizedCode = new(); - private readonly AuthorizationListDecoder _authorizationListDecoder = new(); + private readonly AuthorizationTupleDecoder _authorizationTupleDecoder = new(); private readonly EthereumEcdsa _ethereumEcdsa; private readonly ICodeInfoRepository _codeInfoRepository; private readonly ulong _chainId; @@ -114,7 +114,7 @@ public void InsertFromAuthorizations( private Address RecoverAuthority(AuthorizationTuple authTuple) { Span encoded = _internalBuffer.AsSpan(); - RlpStream stream = _authorizationListDecoder.EncodeForCommitMessage(authTuple.ChainId, authTuple.CodeAddress, authTuple.Nonce); + RlpStream stream = _authorizationTupleDecoder.EncodeForCommitMessage(authTuple.ChainId, authTuple.CodeAddress, authTuple.Nonce); stream.Data.AsSpan().CopyTo(encoded.Slice(1)); return _ethereumEcdsa.RecoverAddress(authTuple.AuthoritySignature, Keccak.Compute(encoded.Slice(0, stream.Data.Length + 1))); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs index 5d5b6400755..3fee857cb96 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs @@ -4,33 +4,18 @@ using Nethermind.Core; using Nethermind.Int256; using System; -using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; namespace Nethermind.Serialization.Rlp.Eip7702; public class AuthorizationListDecoder : IRlpStreamDecoder, IRlpValueDecoder { - public AuthorizationTuple?[]? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + private readonly AuthorizationTupleDecoder _tupleDecoder = new(); + public AuthorizationTuple[]? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) - { - rlpStream.ReadByte(); - return null; - } - return rlpStream.DecodeArray(DecodeAuthorizationTuple); - } - - private AuthorizationTuple? DecodeAuthorizationTuple(RlpStream stream) - { - bool shouldReturnNull = false; - var chainId = stream.DecodeULong(); - Address? codeAddress = stream.DecodeAddress(); - shouldReturnNull |= codeAddress is null; - UInt256?[] nonces = stream.DecodeArray(s => s.DecodeUInt256()); - shouldReturnNull |= nonces.Length > 1; - UInt256? nonce = nonces.Length == 1 ? nonces[0] : null; - return shouldReturnNull - ? null - : new AuthorizationTuple(chainId, codeAddress, nonce, stream.DecodeULong(), stream.DecodeByteArray(), stream.DecodeByteArray()); + ThrowNullAuthorizationListRlpException(); + return rlpStream.DecodeArray((rlp) => _tupleDecoder.Decode(rlp, rlpBehaviors), rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)); } public AuthorizationTuple[]? Decode( @@ -38,57 +23,28 @@ public class AuthorizationListDecoder : IRlpStreamDecoder RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) - { - decoderContext.ReadByte(); - return null; - } - - int outerLength = decoderContext.ReadSequenceLength(); - - int check = decoderContext.Position + outerLength; + ThrowNullAuthorizationListRlpException(); - List result = new List(); - - while (decoderContext.Position < check) - { - var chainId = decoderContext.DecodeULong(); - Address codeAddress = decoderContext.DecodeAddress(); - int nonceLength = decoderContext.ReadSequenceLength(); - //Nonce is optional and is therefore made as a sequence - UInt256? nonce = null; - if (nonceLength > 0) - nonce = decoderContext.DecodeUInt256(); - result.Add(new AuthorizationTuple( - chainId, - codeAddress, - nonce, - //Signature - decoderContext.DecodeULong(), - decoderContext.DecodeByteArray(), - decoderContext.DecodeByteArray())); - } - - if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) - { - decoderContext.Check(check); - } - return result.ToArray(); + AuthorizationTuple[] result = decoderContext.DecodeArray( + _tupleDecoder, + rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)); + return result; } - public void Encode(RlpStream stream, AuthorizationTuple[]? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public void Encode( + RlpStream stream, + AuthorizationTuple[] items, + RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - if (item is null) - { - stream.WriteByte(Rlp.NullObjectByte); - return; - } + if (items is null) + throw new ArgumentNullException(nameof(items)); - int contentLength = GetContentLength(item); + int contentLength = _tupleDecoder.GetLength(items); stream.StartSequence(contentLength); - foreach (AuthorizationTuple tuple in item) + foreach (AuthorizationTuple tuple in items) { stream.Encode(tuple.ChainId); - stream.Encode(tuple.CodeAddress ?? throw new RlpException($"Invalid tx {nameof(AuthorizationTuple)} format - address is null")); + stream.Encode(tuple.CodeAddress); if (tuple.Nonce != null) { stream.StartSequence(Rlp.LengthOf(tuple.Nonce)); @@ -104,57 +60,22 @@ public void Encode(RlpStream stream, AuthorizationTuple[]? item, RlpBehaviors rl } } - public RlpStream EncodeForCommitMessage(ulong chainId, Address codeAddress, UInt256? nonce) + public int GetLength(AuthorizationTuple[] authorizationTuples, RlpBehaviors rlpBehaviors) { - int contentLength = Rlp.LengthOf(chainId) + Rlp.LengthOf(codeAddress) + (nonce != null ? Rlp.LengthOfSequence(Rlp.LengthOf(nonce)) : Rlp.OfEmptySequence.Length); - var totalLength = Rlp.LengthOfSequence(contentLength); - RlpStream stream = new RlpStream(totalLength); - EncodeForCommitMessage(stream, chainId, codeAddress, nonce); - return stream; - } - - public void EncodeForCommitMessage(RlpStream stream, ulong chainId, Address codeAddress, UInt256? nonce) - { - int contentLength = GetContentLengthWithoutSig(chainId, codeAddress, nonce); - stream.StartSequence(contentLength); - stream.Encode(chainId); - stream.Encode(codeAddress ?? throw new RlpException($"Invalid tx {nameof(AuthorizationTuple)} format - address is null")); - if (nonce != null) - { - stream.StartSequence(Rlp.LengthOf(nonce)); - stream.Encode((UInt256)nonce); - } - else + if (authorizationTuples is null) throw new ArgumentNullException(nameof(authorizationTuples)); + int total = 0; + foreach (AuthorizationTuple tuple in authorizationTuples) { - stream.StartSequence(0); - } + total += _tupleDecoder.GetLength(tuple, rlpBehaviors); + } + return Rlp.LengthOfSequence(total); } - public int GetLength(AuthorizationTuple[]? setCodeAuths, RlpBehaviors rlpBehaviors) - { - if (setCodeAuths is null) - { - return Rlp.OfEmptySequence.Length; - } - - int contentLength = GetContentLength(setCodeAuths); - return Rlp.LengthOfSequence(contentLength); - } - private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress, UInt256? nonce) + [StackTraceHidden] + [DoesNotReturn] + private void ThrowNullAuthorizationListRlpException() { - return - Rlp.LengthOf(chainId) - + Rlp.LengthOf(codeAddress) - + (nonce != null ? Rlp.LengthOfSequence(Rlp.LengthOf(nonce)) : Rlp.OfEmptySequence.Length); - } - private static int GetContentLength(ReadOnlySpan setCodeAuths) - { - int total = 0; - foreach (var code in setCodeAuths) - { - total += GetContentLengthWithoutSig(code.ChainId, code.CodeAddress, code.Nonce) + Rlp.LengthOf(code.AuthoritySignature.V) + Rlp.LengthOf(code.AuthoritySignature.R.AsSpan()) + Rlp.LengthOf(code.AuthoritySignature.S.AsSpan()); - } - return total; + throw new RlpException("Authorization list cannot be null."); } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs new file mode 100644 index 00000000000..1be3736ba0e --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -0,0 +1,112 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Int256; +using System; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; + +namespace Nethermind.Serialization.Rlp.Eip7702; + +public class AuthorizationTupleDecoder : IRlpStreamDecoder, IRlpValueDecoder +{ + public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + var chainId = stream.DecodeULong(); + Address? codeAddress = stream.DecodeAddress(); + UInt256?[] nonces = stream.DecodeArray(s => s.DecodeUInt256()); + if (nonces.Length > 1) + ThrowInvalidNonceRlpException(); + UInt256? nonce = nonces.Length == 1 ? nonces[0] : null; + return new AuthorizationTuple( + chainId, + codeAddress, + nonce, + stream.DecodeULong(), + stream.DecodeByteArray(), + stream.DecodeByteArray()); + } + + public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + var chainId = decoderContext.DecodeULong(); + Address codeAddress = decoderContext.DecodeAddress(); + + int nonceLength = decoderContext.ReadSequenceLength(); + //Nonce is optional and is therefore made as a sequence + UInt256? nonce = null; + if (nonceLength > 1) + ThrowInvalidNonceRlpException(); + if (nonceLength == 1) + nonce = decoderContext.DecodeUInt256(); + return new AuthorizationTuple( + chainId, + codeAddress, + nonce, + //Signature + decoderContext.DecodeULong(), + decoderContext.DecodeByteArray(), + decoderContext.DecodeByteArray()); + } + + public void Encode(RlpStream stream, AuthorizationTuple item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + throw new NotImplementedException(); + } + + public RlpStream EncodeForCommitMessage(ulong chainId, Address codeAddress, UInt256? nonce) + { + int contentLength = Rlp.LengthOf(chainId) + Rlp.LengthOf(codeAddress) + (nonce != null ? Rlp.LengthOfSequence(Rlp.LengthOf(nonce)) : Rlp.OfEmptySequence.Length); + var totalLength = Rlp.LengthOfSequence(contentLength); + RlpStream stream = new RlpStream(totalLength); + EncodeForCommitMessage(stream, chainId, codeAddress, nonce); + return stream; + } + + public void EncodeForCommitMessage(RlpStream stream, ulong chainId, Address codeAddress, UInt256? nonce) + { + int contentLength = GetContentLengthWithoutSig(chainId, codeAddress, nonce); + stream.StartSequence(contentLength); + stream.Encode(chainId); + stream.Encode(codeAddress ?? throw new RlpException($"Invalid tx {nameof(AuthorizationTuple)} format - address is null")); + if (nonce != null) + { + stream.StartSequence(Rlp.LengthOf(nonce)); + stream.Encode((UInt256)nonce); + } + else + { + stream.StartSequence(0); + } + } + + public int GetLength(AuthorizationTuple item, RlpBehaviors rlpBehaviors) + { + int contentLength = GetContentLength(item); + return Rlp.LengthOfSequence(contentLength); + } + + private static int GetContentLength(AuthorizationTuple tuple) + { + return GetContentLengthWithoutSig(tuple.ChainId, tuple.CodeAddress, tuple.Nonce) + + Rlp.LengthOf(tuple.AuthoritySignature.V) + + Rlp.LengthOf(tuple.AuthoritySignature.R.AsSpan()) + + Rlp.LengthOf(tuple.AuthoritySignature.S.AsSpan()); + } + + private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress, UInt256? nonce) + { + return + Rlp.LengthOf(chainId) + + Rlp.LengthOf(codeAddress) + + (nonce != null ? Rlp.LengthOfSequence(Rlp.LengthOf(nonce)) : Rlp.OfEmptySequence.Length); + } + + [DoesNotReturn] + [StackTraceHidden] + private static void ThrowInvalidNonceRlpException() + { + throw new RlpException("Invalid nonce length in authorization tuple."); + } +} From 12297d40b75e0596892f59be6d74a8d43938f078 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 26 Jun 2024 12:22:20 +0200 Subject: [PATCH 281/551] refactor --- .../Core/AuthorizedCodeInfoRepository.cs | 4 +- .../Processing/RecoverSignature.cs | 2 +- .../Encoding/AuthorizationListDecoderTests.cs | 29 ++++++++ .../AuthorizationTupleDecoderTests.cs | 44 ++++++++++++ src/Nethermind/Nethermind.Core/Transaction.cs | 2 +- .../AuthorizedCodeInfoRepositoryTests.cs | 2 +- .../TransactionProcessorEip7702Tests.cs | 2 +- .../AuthorizedCodeInfoRepository.cs | 2 +- .../Eip7702/AuthorizationListDecoder.cs | 34 ++++------ .../Eip7702/AuthorizationTupleDecoder.cs | 68 +++++++++++++++---- 10 files changed, 148 insertions(+), 41 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationListDecoderTests.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs diff --git a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs index cb611831239..76fd9111387 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs @@ -68,8 +68,8 @@ public void GlobalSetup() static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) { - AuthorizationListDecoder decoder = new(); - RlpStream rlp = decoder.EncodeForCommitMessage(chainId, codeAddress, nonce); + AuthorizationTupleDecoder decoder = new(); + RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; rlp.Data.AsSpan().CopyTo(code.Slice(1)); diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 2e2522fe1b5..708f2c2e8ee 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -114,7 +114,7 @@ void RecoverAuthority(AuthorizationTuple tuple) { Span msg = stackalloc byte[128]; msg[0] = Eip7702Constants.Magic; - RlpStream rlpStream = _authorizationTupleDecoder.EncodeForCommitMessage(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); + RlpStream rlpStream = _authorizationTupleDecoder.EncodeWithoutSignature(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); rlpStream.Data.AsSpan().CopyTo(msg.Slice(1)); tuple.Authority = _ecdsa.RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(msg.Slice(0, rlpStream.Data.Length + 1))); } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationListDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationListDecoderTests.cs new file mode 100644 index 00000000000..75257d66865 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationListDecoderTests.cs @@ -0,0 +1,29 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Serialization.Rlp; +using Nethermind.Serialization.Rlp.Eip7702; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Nethermind.Core.Test.Encoding; + +[TestFixture] +public class AuthorizationListDecoderTests +{ + public void Decode_() + { + + RlpStream rlpStream = new RlpStream(32 * 4); + + + AuthorizationTupleDecoder sut = new(); + + + } + +} diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs new file mode 100644 index 00000000000..6c28254ef9e --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using FluentAssertions; +using Nethermind.Core.Crypto; +using Nethermind.Core.Test.Builders; +using Nethermind.Int256; +using Nethermind.Serialization.Rlp; +using Nethermind.Serialization.Rlp.Eip7702; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Nethermind.Core.Test.Encoding; + +[TestFixture] +public class AuthorizationTupleDecoderTests +{ + public static IEnumerable AuthorizationTupleEncodeCases() + { + yield return new object[] + { + new AuthorizationTuple(0, Address.Zero, 0, new Signature(new byte[64], 0)) + }; + yield return new object[] + { + new AuthorizationTuple(ulong.MaxValue, new Address(Enumerable.Range(0, 20).Select(i => (byte)0xff).ToArray()), UInt256.MaxValue, new Signature(Enumerable.Range(0, 64).Select(i => (byte)0xff).ToArray(), int.MaxValue)), + }; + } + + [TestCaseSource(nameof(AuthorizationTupleEncodeCases))] + public void Encode_TupleHasValues_TupleCanBeDecodedToEquivalentTuple(AuthorizationTuple item) + { + AuthorizationTupleDecoder sut = new(); + + RlpStream result = sut.Encode(item); + result.Position = 0; + + sut.Decode(result).Should().BeEquivalentTo(item); + } +} diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index 7acf8b042cf..609ea381741 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -169,7 +169,7 @@ private void ClearPreHashInternal() /// List of EOA code authorizations. /// https://eips.ethereum.org/EIPS/eip-7702 ///
- public AuthorizationTuple?[]? AuthorizationList { get; set; } + public AuthorizationTuple[]? AuthorizationList { get; set; } /// /// Service transactions are free. The field added to handle baseFee validation after 1559 diff --git a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs index 788c54012e4..524ed376965 100644 --- a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs @@ -122,7 +122,7 @@ public void ClearAuthorizations_HasAuthorizedAddresses_AuthorizationsAreClear() private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) { AuthorizationTupleDecoder decoder = new(); - RlpStream rlp = decoder.EncodeForCommitMessage(chainId, codeAddress, nonce); + RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; rlp.Data.AsSpan().CopyTo(code.Slice(1)); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 9c7e1ce8feb..812acf64ed8 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -386,7 +386,7 @@ private void DeployCode(Address codeSource, byte[] code) private AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) { AuthorizationTupleDecoder decoder = new(); - RlpStream rlp = decoder.EncodeForCommitMessage(chainId, codeAddress, nonce); + RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; rlp.Data.AsSpan().CopyTo(code.Slice(1)); diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index 756981aabeb..f82ca2233ad 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -114,7 +114,7 @@ public void InsertFromAuthorizations( private Address RecoverAuthority(AuthorizationTuple authTuple) { Span encoded = _internalBuffer.AsSpan(); - RlpStream stream = _authorizationTupleDecoder.EncodeForCommitMessage(authTuple.ChainId, authTuple.CodeAddress, authTuple.Nonce); + RlpStream stream = _authorizationTupleDecoder.EncodeWithoutSignature(authTuple.ChainId, authTuple.CodeAddress, authTuple.Nonce); stream.Data.AsSpan().CopyTo(encoded.Slice(1)); return _ethereumEcdsa.RecoverAddress(authTuple.AuthoritySignature, Keccak.Compute(encoded.Slice(0, stream.Data.Length + 1))); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs index 3fee857cb96..c816a1915bd 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs @@ -11,11 +11,16 @@ namespace Nethermind.Serialization.Rlp.Eip7702; public class AuthorizationListDecoder : IRlpStreamDecoder, IRlpValueDecoder { private readonly AuthorizationTupleDecoder _tupleDecoder = new(); - public AuthorizationTuple[]? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public AuthorizationTuple[]? Decode( + RlpStream rlpStream, + RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) ThrowNullAuthorizationListRlpException(); - return rlpStream.DecodeArray((rlp) => _tupleDecoder.Decode(rlp, rlpBehaviors), rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)); + + return rlpStream.DecodeArray( + (rlp) => _tupleDecoder.Decode(rlp, rlpBehaviors), + rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)); } public AuthorizationTuple[]? Decode( @@ -25,7 +30,7 @@ public class AuthorizationListDecoder : IRlpStreamDecoder if (decoderContext.IsNextItemNull()) ThrowNullAuthorizationListRlpException(); - AuthorizationTuple[] result = decoderContext.DecodeArray( + AuthorizationTuple[] result = decoderContext.DecodeArray( _tupleDecoder, rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)); return result; @@ -36,27 +41,14 @@ public void Encode( AuthorizationTuple[] items, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - if (items is null) - throw new ArgumentNullException(nameof(items)); + if (items is null) + throw new ArgumentNullException(nameof(items)); - int contentLength = _tupleDecoder.GetLength(items); + int contentLength = GetLength(items, rlpBehaviors); stream.StartSequence(contentLength); foreach (AuthorizationTuple tuple in items) { - stream.Encode(tuple.ChainId); - stream.Encode(tuple.CodeAddress); - if (tuple.Nonce != null) - { - stream.StartSequence(Rlp.LengthOf(tuple.Nonce)); - stream.Encode((UInt256)tuple.Nonce); - } - else - { - stream.StartSequence(0); - } - stream.Encode(tuple.AuthoritySignature.V); - stream.Encode(tuple.AuthoritySignature.R); - stream.Encode(tuple.AuthoritySignature.S); + _tupleDecoder.Encode(stream, tuple, rlpBehaviors); } } @@ -67,7 +59,7 @@ public int GetLength(AuthorizationTuple[] authorizationTuples, RlpBehaviors rlpB foreach (AuthorizationTuple tuple in authorizationTuples) { total += _tupleDecoder.GetLength(tuple, rlpBehaviors); - } + } return Rlp.LengthOfSequence(total); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 1be3736ba0e..9f5e6ffabcc 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; @@ -6,6 +6,7 @@ using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; +using System.IO; namespace Nethermind.Serialization.Rlp.Eip7702; @@ -13,23 +14,36 @@ public class AuthorizationTupleDecoder : IRlpStreamDecoder, { public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { + int length = stream.ReadSequenceLength(); + int check = length + stream.Position; + var chainId = stream.DecodeULong(); Address? codeAddress = stream.DecodeAddress(); UInt256?[] nonces = stream.DecodeArray(s => s.DecodeUInt256()); + if (nonces.Length > 1) ThrowInvalidNonceRlpException(); UInt256? nonce = nonces.Length == 1 ? nonces[0] : null; + + ulong yParity = stream.DecodeULong(); + byte[] r = stream.DecodeByteArray(); + byte[] s = stream.DecodeByteArray(); + if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) + stream.Check(check); return new AuthorizationTuple( chainId, codeAddress, nonce, - stream.DecodeULong(), - stream.DecodeByteArray(), - stream.DecodeByteArray()); + yParity, + r, + s); } public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { + int length = decoderContext.ReadSequenceLength(); + int check = length + decoderContext.Position; + var chainId = decoderContext.DecodeULong(); Address codeAddress = decoderContext.DecodeAddress(); @@ -40,31 +54,59 @@ public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp ThrowInvalidNonceRlpException(); if (nonceLength == 1) nonce = decoderContext.DecodeUInt256(); + + ulong yParity = decoderContext.DecodeULong(); + byte[] r = decoderContext.DecodeByteArray(); + byte[] s = decoderContext.DecodeByteArray(); + if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) + decoderContext.Check(check); return new AuthorizationTuple( chainId, codeAddress, nonce, //Signature - decoderContext.DecodeULong(), - decoderContext.DecodeByteArray(), - decoderContext.DecodeByteArray()); + yParity, + r, + s); + } + + public RlpStream Encode(AuthorizationTuple item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + RlpStream stream = new(GetLength(item, rlpBehaviors)); + Encode(stream, item, rlpBehaviors); + return stream; } public void Encode(RlpStream stream, AuthorizationTuple item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - throw new NotImplementedException(); + int contentLength = GetContentLength(item); + stream.StartSequence(contentLength); + stream.Encode(item.ChainId); + stream.Encode(item.CodeAddress); + if (item.Nonce != null) + { + stream.StartSequence(Rlp.LengthOf(item.Nonce)); + stream.Encode((UInt256)item.Nonce); + } + else + { + stream.StartSequence(0); + } + stream.Encode(item.AuthoritySignature.RecoveryId); + stream.Encode(item.AuthoritySignature.R); + stream.Encode(item.AuthoritySignature.S); } - public RlpStream EncodeForCommitMessage(ulong chainId, Address codeAddress, UInt256? nonce) + public RlpStream EncodeWithoutSignature(ulong chainId, Address codeAddress, UInt256? nonce) { - int contentLength = Rlp.LengthOf(chainId) + Rlp.LengthOf(codeAddress) + (nonce != null ? Rlp.LengthOfSequence(Rlp.LengthOf(nonce)) : Rlp.OfEmptySequence.Length); + int contentLength = GetContentLengthWithoutSig(chainId, codeAddress, nonce); var totalLength = Rlp.LengthOfSequence(contentLength); RlpStream stream = new RlpStream(totalLength); - EncodeForCommitMessage(stream, chainId, codeAddress, nonce); + EncodeWithoutSignature(stream, chainId, codeAddress, nonce); return stream; } - public void EncodeForCommitMessage(RlpStream stream, ulong chainId, Address codeAddress, UInt256? nonce) + public void EncodeWithoutSignature(RlpStream stream, ulong chainId, Address codeAddress, UInt256? nonce) { int contentLength = GetContentLengthWithoutSig(chainId, codeAddress, nonce); stream.StartSequence(contentLength); @@ -89,7 +131,7 @@ public int GetLength(AuthorizationTuple item, RlpBehaviors rlpBehaviors) private static int GetContentLength(AuthorizationTuple tuple) { - return GetContentLengthWithoutSig(tuple.ChainId, tuple.CodeAddress, tuple.Nonce) + return GetContentLengthWithoutSig(tuple.ChainId, tuple.CodeAddress, tuple.Nonce) + Rlp.LengthOf(tuple.AuthoritySignature.V) + Rlp.LengthOf(tuple.AuthoritySignature.R.AsSpan()) + Rlp.LengthOf(tuple.AuthoritySignature.S.AsSpan()); From 21c06a784ea3fb401fe44e9e0d1b9f8cbb1a2ad2 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 26 Jun 2024 13:07:40 +0200 Subject: [PATCH 282/551] txpool test fix --- .../Nethermind.Consensus/Validators/TxValidator.cs | 5 +++++ .../Builders/TransactionBuilder.cs | 5 +++++ src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs | 12 +++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 71a32d46665..363fa0a9a40 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -304,6 +304,11 @@ private bool Validate7702Field(Transaction tx, ref string error) return false; } } + else if (tx.AuthorizationList is null) + { + error = TxErrorMessages.MissingAuthorizationList; + return false; + } return true; } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index 8126644c0ed..a0e14e95ec7 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -220,6 +220,11 @@ public TransactionBuilder WithShardBlobTxTypeAndFields(int blobCount = 1, boo return this; } + public TransactionBuilder WithAuthorizationCodeIfAuthorizationListType() + { + return TestObjectInternal.Type == TxType.SetCode ? WithAuthorizationCode(new AuthorizationTuple(0, Address.Zero, 0, new Signature(new byte[64], 0))) : this; + } + public TransactionBuilder WithAuthorizationCode(AuthorizationTuple authTuple) { TestObjectInternal.AuthorizationList = TestObjectInternal.AuthorizationList != null ? [.. TestObjectInternal.AuthorizationList, authTuple] : [authTuple]; diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index a6a96c029a2..294540de3dd 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1650,7 +1650,7 @@ public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType // No need to check for deposit tx if (txType == TxType.DepositTx) return; - ISpecProvider specProvider = GetCancunSpecProvider(); + ISpecProvider specProvider = GetPragueSpecProvider(); TxPoolConfig txPoolConfig = new TxPoolConfig { Size = 30, PersistentBlobStorageSize = 0 }; _txPool = CreatePool(txPoolConfig, specProvider); @@ -1674,8 +1674,10 @@ public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType .WithNonce(0) .WithType(txType) .WithShardBlobTxTypeAndFieldsIfBlobTx() + .WithAuthorizationCodeIfAuthorizationListType() .WithMaxFeePerGas(9.GWei()) .WithMaxPriorityFeePerGas(9.GWei()) + .WithGasLimit(txType != TxType.SetCode ? GasCostOf.Transaction : GasCostOf.Transaction + GasCostOf.PerAuthBaseCost) .WithTo(TestItem.AddressB) .SignedAndResolved(_ethereumEcdsa, TestItem.PrivateKeyA).TestObject; @@ -1755,6 +1757,14 @@ private static ISpecProvider GetCancunSpecProvider() return specProvider; } + private static ISpecProvider GetPragueSpecProvider() + { + var specProvider = Substitute.For(); + specProvider.GetSpec(Arg.Any()).Returns(Prague.Instance); + specProvider.GetSpec(Arg.Any()).Returns(Prague.Instance); + return specProvider; + } + private Transaction[] AddTransactionsToPool(bool sameTransactionSenderPerPeer = true, bool sameNoncePerPeer = false, int transactionsPerPeer = 10) { var transactions = GetTransactions(GetPeers(transactionsPerPeer), sameTransactionSenderPerPeer, sameNoncePerPeer); From 1926da9aee706be626d1cb4f0f1dff9d9d839c30 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 26 Jun 2024 13:07:52 +0200 Subject: [PATCH 283/551] missing --- src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs index c3b375e3249..c1f1146d3c2 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs @@ -72,6 +72,8 @@ public static string InvalidTxChainId(ulong expected, ulong? actual) => public const string NotAllowedAuthorizationList = $"NotAllowedAuthorizationList: Only transactions with type {nameof(TxType.SetCode)} can have authorization_list."; + public const string MissingAuthorizationList = "MissingAuthorizationList: Must be set."; + public const string InvalidBlobCommitmentHash = "InvalidBlobCommitmentHash: Commitment hash does not match."; From 18a8951067465ffe671d4139fd50fa4bb9589a91 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 26 Jun 2024 14:55:01 +0200 Subject: [PATCH 284/551] Rlp unitest --- .../AuthorizationTupleDecoderTests.cs | 55 ++++++++++++++++++- .../Eip7702/AuthorizationTupleDecoder.cs | 4 +- .../Nethermind.Serialization.Rlp/TxDecoder.cs | 18 +++--- 3 files changed, 65 insertions(+), 12 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs index 6c28254ef9e..388755c21c3 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs @@ -7,6 +7,7 @@ using Nethermind.Int256; using Nethermind.Serialization.Rlp; using Nethermind.Serialization.Rlp.Eip7702; +using NSubstitute.ExceptionExtensions; using NUnit.Framework; using System; using System.Collections.Generic; @@ -27,7 +28,7 @@ public static IEnumerable AuthorizationTupleEncodeCases() }; yield return new object[] { - new AuthorizationTuple(ulong.MaxValue, new Address(Enumerable.Range(0, 20).Select(i => (byte)0xff).ToArray()), UInt256.MaxValue, new Signature(Enumerable.Range(0, 64).Select(i => (byte)0xff).ToArray(), int.MaxValue)), + new AuthorizationTuple(ulong.MaxValue, new Address(Enumerable.Range(0, 20).Select(i => (byte)0xff).ToArray()), UInt256.MaxValue, new Signature(Enumerable.Range(0, 64).Select(i => (byte)0xff).ToArray(), 1)), }; } @@ -41,4 +42,56 @@ public void Encode_TupleHasValues_TupleCanBeDecodedToEquivalentTuple(Authorizati sut.Decode(result).Should().BeEquivalentTo(item); } + + [Test] + public void Decode_NonceItemListIsGreaterThan1_ThrowsRlpException() + { + RlpStream stream = RlpStreamWithTuplewithTwoNonces(); + + AuthorizationTupleDecoder sut = new(); + + Assert.That(() => sut.Decode(stream), Throws.TypeOf()); + } + + [Test] + public void DecodeValueDecoderContext_NonceItemListIsGreaterThan1_ThrowsRlpException() + { + RlpStream stream = RlpStreamWithTuplewithTwoNonces(); + + AuthorizationTupleDecoder sut = new(); + Assert.That(() => + { + Rlp.ValueDecoderContext decoderContext = new Rlp.ValueDecoderContext(stream.Data); + sut.Decode(ref decoderContext, RlpBehaviors.None); + } + , Throws.TypeOf()); + } + + private static RlpStream RlpStreamWithTuplewithTwoNonces() + { + ulong chainId = 0; + Address codeAddress = Address.Zero; + UInt256[] nonces = [0, 1]; + Signature sig = new(new byte[64], 0); + int length = + +Rlp.LengthOf(chainId) + + Rlp.LengthOf(codeAddress) + + Rlp.LengthOfSequence(Rlp.LengthOf(nonces[0]) + Rlp.LengthOf(nonces[1])) + + Rlp.LengthOf(sig.RecoveryId) + + Rlp.LengthOf(sig.R) + + Rlp.LengthOf(sig.S); + + RlpStream stream = new RlpStream(Rlp.LengthOfSequence(length)); + stream.StartSequence(length); + stream.Encode(chainId); + stream.Encode(codeAddress); + stream.StartSequence(Rlp.LengthOf(nonces[0]) + Rlp.LengthOf(nonces[1])); + stream.Encode(nonces[0]); + stream.Encode(nonces[1]); + stream.Encode(sig.RecoveryId); + stream.Encode(sig.R); + stream.Encode(sig.S); + stream.Position = 0; + return stream; + } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 9f5e6ffabcc..2d4a7013f7e 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Core.Crypto; using Nethermind.Int256; using System; using System.Diagnostics; @@ -64,7 +65,6 @@ public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp chainId, codeAddress, nonce, - //Signature yParity, r, s); @@ -132,7 +132,7 @@ public int GetLength(AuthorizationTuple item, RlpBehaviors rlpBehaviors) private static int GetContentLength(AuthorizationTuple tuple) { return GetContentLengthWithoutSig(tuple.ChainId, tuple.CodeAddress, tuple.Nonce) - + Rlp.LengthOf(tuple.AuthoritySignature.V) + + Rlp.LengthOf(tuple.AuthoritySignature.RecoveryId) + Rlp.LengthOf(tuple.AuthoritySignature.R.AsSpan()) + Rlp.LengthOf(tuple.AuthoritySignature.S.AsSpan()); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs index 184236cdc83..29c98778c7f 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs @@ -44,7 +44,7 @@ public class TxDecoder : where T : Transaction, new() { private readonly AccessListDecoder _accessListDecoder = new(); - private AuthorizationListDecoder _setCodeAuthDecoder = new(); + private AuthorizationListDecoder _authListDecoder = new(); private readonly bool _lazyHash; protected TxDecoder(bool lazyHash = true) @@ -97,7 +97,7 @@ protected virtual T NewTx() DecodeShardBlobPayloadWithoutSig(transaction, rlpStream, rlpBehaviors); break; case TxType.SetCode: - DecodeContractCodeWithoutSig(transaction, rlpStream, rlpBehaviors); + DecodeAuthorizationListWithoutSig(transaction, rlpStream, rlpBehaviors); break; case TxType.DepositTx: TxDecoder.DecodeDepositPayloadWithoutSig(transaction, rlpStream, rlpBehaviors); @@ -326,7 +326,7 @@ private void DecodeContractCodeWithoutSig(T transaction, ref Rlp.ValueDecoderCon transaction.To = decoderContext.DecodeAddress(); transaction.Data = decoderContext.DecodeByteArray(); transaction.AccessList = _accessListDecoder.Decode(ref decoderContext, rlpBehaviors); - transaction.AuthorizationList = _setCodeAuthDecoder.Decode(ref decoderContext, rlpBehaviors); + transaction.AuthorizationList = _authListDecoder.Decode(ref decoderContext, rlpBehaviors); } private static void DecodeDepositPayloadWithoutSig(T transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors) @@ -341,7 +341,7 @@ private static void DecodeDepositPayloadWithoutSig(T transaction, ref Rlp.ValueD transaction.Data = decoderContext.DecodeByteArray(); } - private void DecodeContractCodeWithoutSig(T transaction, RlpStream rlpStream, RlpBehaviors rlpBehaviors) + private void DecodeAuthorizationListWithoutSig(T transaction, RlpStream rlpStream, RlpBehaviors rlpBehaviors) { transaction.ChainId = rlpStream.DecodeULong(); transaction.Nonce = rlpStream.DecodeUInt256(); @@ -351,7 +351,7 @@ private void DecodeContractCodeWithoutSig(T transaction, RlpStream rlpStream, Rl transaction.To = rlpStream.DecodeAddress(); transaction.Data = rlpStream.DecodeByteArray(); transaction.AccessList = _accessListDecoder.Decode(rlpStream, rlpBehaviors); - transaction.AuthorizationList = _setCodeAuthDecoder.Decode(rlpStream, rlpBehaviors); + transaction.AuthorizationList = _authListDecoder.Decode(rlpStream, rlpBehaviors); } private static void EncodeLegacyWithoutPayload(T item, RlpStream stream) @@ -414,7 +414,7 @@ private void EncodeSetCodeWithoutPayload(T item, RlpStream stream, RlpBehaviors stream.Encode(item.To); stream.Encode(item.Data); _accessListDecoder.Encode(stream, item.AccessList, rlpBehaviors); - _setCodeAuthDecoder.Encode(stream, item.AuthorizationList, rlpBehaviors); + _authListDecoder.Encode(stream, item.AuthorizationList, rlpBehaviors); } private static void EncodeDepositTxPayloadWithoutPayload(T item, RlpStream stream) @@ -820,7 +820,7 @@ private int GetShardBlobContentLength(T item) + Rlp.LengthOf(item.BlobVersionedHashes); } - private int GetContractCodeLength(T item) + private int GetAuthorizationListLength(T item) { return Rlp.LengthOf(item.Nonce) + Rlp.LengthOf(item.GasPrice) // gas premium @@ -830,7 +830,7 @@ private int GetContractCodeLength(T item) + Rlp.LengthOf(item.Data) + Rlp.LengthOf(item.ChainId ?? 0) + _accessListDecoder.GetLength(item.AccessList, RlpBehaviors.None) - + _setCodeAuthDecoder.GetLength(item.AuthorizationList, RlpBehaviors.None); + + _authListDecoder.GetLength(item.AuthorizationList, RlpBehaviors.None); } private static int GetShardBlobNetworkWrapperContentLength(T item, int txContentLength) @@ -874,7 +874,7 @@ private int GetContentLength(T item, bool forSigning, bool isEip155Enabled = fal contentLength = GetShardBlobContentLength(item); break; case TxType.SetCode: - contentLength = GetContractCodeLength(item); + contentLength = GetAuthorizationListLength(item); break; case TxType.DepositTx: contentLength = TxDecoder.GetDepositTxContentLength(item); From 7702fa480ad0c3029b8af4d5d7e35179ef147fd4 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 27 Jun 2024 18:24:46 +0200 Subject: [PATCH 285/551] some basic refactorings --- .../Builders/TransactionBuilder.cs | 2 +- .../Encoding/TxDecoderTests.cs | 9 +- src/Nethermind/Nethermind.Core/Transaction.cs | 4 +- .../VirtualMachineTestsBase.cs | 22 ++--- .../AuthorizedCodeInfoRepository.cs | 25 ++---- .../Nethermind.Evm/ExecutionEnvironment.cs | 82 ++++++++----------- .../Nethermind.Evm/ICodeInfoRepository.cs | 1 - .../Nethermind.Evm/IVirtualMachine.cs | 6 -- .../Nethermind.Evm/IntrinsicGasCalculator.cs | 13 +-- .../TransactionProcessor.cs | 46 ++++++----- .../Eip7702/AuthorizationTupleDecoder.cs | 63 +++++++------- 11 files changed, 119 insertions(+), 154 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index a0e14e95ec7..128509a5139 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -227,7 +227,7 @@ public TransactionBuilder WithAuthorizationCodeIfAuthorizationListType() public TransactionBuilder WithAuthorizationCode(AuthorizationTuple authTuple) { - TestObjectInternal.AuthorizationList = TestObjectInternal.AuthorizationList != null ? [.. TestObjectInternal.AuthorizationList, authTuple] : [authTuple]; + TestObjectInternal.AuthorizationList = TestObjectInternal.AuthorizationList is not null ? [.. TestObjectInternal.AuthorizationList, authTuple] : [authTuple]; return this; } public TransactionBuilder WithAuthorizationCode(IEnumerable authList) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs index 1328fa25ddd..3e584c243b8 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs @@ -386,13 +386,12 @@ public void Duplicate_storage_keys_result_in_different_hashes() public static IEnumerable SetCodeAuthorizationCases() { yield return - [ - new AuthorizationTuple(0, TestItem.AddressA, null, ulong.MinValue, [0x0], [0x0]), - new AuthorizationTuple(0, TestItem.AddressF, 0, ulong.MinValue, [0x0], [0x0]) - ]; + [ + new AuthorizationTuple(0, TestItem.AddressA, null, ulong.MinValue, [0x0], [0x0]), + new AuthorizationTuple(0, TestItem.AddressF, 0, ulong.MinValue, [0x0], [0x0]) + ]; } - [TestCaseSource(nameof(SetCodeAuthorizationCases))] public void TxSetCodeEncodeAndDecode(AuthorizationTuple[] setCodeAuthorizations) { diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index 609ea381741..a8a05163eff 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -58,7 +58,7 @@ public class Transaction public bool HasAuthorizationList => Type == TxType.SetCode && AuthorizationList is not null && - AuthorizationList.Any(); + AuthorizationList.Length > 0; private Hash256? _hash; @@ -167,7 +167,7 @@ private void ClearPreHashInternal() /// /// List of EOA code authorizations. - /// https://eips.ethereum.org/EIPS/eip-7702 + /// https://eips.ethereum.org/EIPS/eip-7702 /// public AuthorizationTuple[]? AuthorizationList { get; set; } diff --git a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs index b9aa9817b7a..229a5a591b6 100644 --- a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs +++ b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs @@ -232,19 +232,15 @@ protected TestAllTracerWithOutput Execute(ForkActivation activation, long gasLim TestState.CommitTree(0); GetLogManager().GetClassLogger().Debug("Committed initial tree"); - if (transaction == null) - { - transaction = - Build.A.Transaction - .WithGasLimit(gasLimit) - .WithGasPrice(1) - .WithValue(value) - .WithBlobVersionedHashes(blobVersionedHashes) - .WithNonce(TestState.GetNonce(senderRecipientAndMiner.Sender)) - .To(senderRecipientAndMiner.Recipient) - .SignedAndResolved(_ethereumEcdsa, senderRecipientAndMiner.SenderKey) - .TestObject; - } + transaction ??= Build.A.Transaction + .WithGasLimit(gasLimit) + .WithGasPrice(1) + .WithValue(value) + .WithBlobVersionedHashes(blobVersionedHashes) + .WithNonce(TestState.GetNonce(senderRecipientAndMiner.Sender)) + .To(senderRecipientAndMiner.Recipient) + .SignedAndResolved(_ethereumEcdsa, senderRecipientAndMiner.SenderKey) + .TestObject; Block block = BuildBlock(activation, senderRecipientAndMiner, transaction, blockGasLimit, excessBlobGas); return (block, transaction); diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index f82ca2233ad..ac2e49588f0 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -23,16 +23,17 @@ public class AuthorizedCodeInfoRepository : ICodeInfoRepository private readonly ICodeInfoRepository _codeInfoRepository; private readonly ulong _chainId; private readonly ILogger _logger; - byte[] _internalBuffer = new byte[128]; + private readonly byte[] _internalBuffer = new byte[128]; public AuthorizedCodeInfoRepository(ulong chainId, ILogger? logger = null) : this(new CodeInfoRepository(), chainId, logger) { } + public AuthorizedCodeInfoRepository(ICodeInfoRepository codeInfoRepository, ulong chainId, ILogger? logger = null) { - this._codeInfoRepository = codeInfoRepository; - this._chainId = chainId; - _ethereumEcdsa = new EthereumEcdsa(this._chainId, NullLogManager.Instance); - this._logger = logger ?? NullLogger.Instance; + _codeInfoRepository = codeInfoRepository; + _chainId = chainId; + _ethereumEcdsa = new EthereumEcdsa(_chainId, NullLogManager.Instance); + _logger = logger ?? NullLogger.Instance; _internalBuffer[0] = Eip7702Constants.Magic; } public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => @@ -49,7 +50,6 @@ public void InsertCode(IWorldState state, ReadOnlyMemory code, Address cod /// Copy code from and set it to override . /// Main use for this is for https://eips.ethereum.org/EIPS/eip-7702 /// - /// public void CopyCodeAndOverwrite( IWorldState worldState, Address codeSource, @@ -66,10 +66,6 @@ public void CopyCodeAndOverwrite( /// Build a code cache from transaction authorization_list authorized by signature. /// eip-7702 ///
- /// - /// - /// - /// public void InsertFromAuthorizations( IWorldState worldState, AuthorizationTuple?[] authorizations, @@ -89,23 +85,20 @@ public void InsertFromAuthorizations( if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because chain id ({authTuple.ChainId}) does not match."); continue; } - Address authority = authTuple.Authority; - if (authority == null) - { - authority = RecoverAuthority(authTuple); - } + Address authority = authTuple.Authority ?? RecoverAuthority(authTuple); CodeInfo authorityCodeInfo = _codeInfoRepository.GetCachedCodeInfo(worldState, authority, spec); if (authorityCodeInfo.MachineCode.Length > 0) { if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) has code deployed."); continue; } - if (authTuple.Nonce != null && worldState.GetNonce(authority) != authTuple.Nonce) + if (authTuple.Nonce is not null && worldState.GetNonce(authority) != authTuple.Nonce) { if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) nonce ({authTuple.Nonce}) does not match."); continue; } + //TODO should we do insert if code is empty? CopyCodeAndOverwrite(worldState, authTuple.CodeAddress, authority, spec); } diff --git a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs index facb40e2f7d..0ad7657eb40 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs @@ -9,7 +9,17 @@ namespace Nethermind.Evm { - public readonly struct ExecutionEnvironment + public readonly struct ExecutionEnvironment( + CodeInfo codeInfo, + Address executingAccount, + Address caller, + Address? codeSource, + ReadOnlyMemory inputData, + in TxExecutionContext txExecutionContext, + UInt256 transferValue, + UInt256 value, + IEnumerable
authorizedAddresses, + int callDepth = 0) { public ExecutionEnvironment ( @@ -21,91 +31,65 @@ public ExecutionEnvironment in TxExecutionContext txExecutionContext, UInt256 transferValue, UInt256 value, - int callDepth = 0 - ) : - this( - codeInfo, - executingAccount, - caller, - codeSource, - inputData, - txExecutionContext, - transferValue, - value, - Array.Empty
(), - callDepth) - { } - - public ExecutionEnvironment - ( - CodeInfo codeInfo, - Address executingAccount, - Address caller, - Address? codeSource, - ReadOnlyMemory inputData, - in TxExecutionContext txExecutionContext, - UInt256 transferValue, - UInt256 value, - IEnumerable
authorizedAddresses, int callDepth = 0) - { - CodeInfo = codeInfo; - ExecutingAccount = executingAccount; - Caller = caller; - CodeSource = codeSource; - InputData = inputData; - TxExecutionContext = txExecutionContext; - TransferValue = transferValue; - Value = value; - CallDepth = callDepth; - AuthorizedAddresses = authorizedAddresses; - } + : this( + codeInfo, + executingAccount, + caller, + codeSource, + inputData, + txExecutionContext, + transferValue, + value, + Array.Empty
(), + callDepth) + { } /// /// Parsed bytecode for the current call. /// - public readonly CodeInfo CodeInfo; + public readonly CodeInfo CodeInfo = codeInfo; /// /// Currently executing account (in DELEGATECALL this will be equal to caller). /// - public readonly Address ExecutingAccount; + public readonly Address ExecutingAccount = executingAccount; /// /// Caller /// - public readonly Address Caller; + public readonly Address Caller = caller; /// /// Bytecode source (account address). /// - public readonly Address? CodeSource; + public readonly Address? CodeSource = codeSource; /// /// Parameters / arguments of the current call. /// - public readonly ReadOnlyMemory InputData; + public readonly ReadOnlyMemory InputData = inputData; /// /// Transaction originator /// - public readonly TxExecutionContext TxExecutionContext; + public readonly TxExecutionContext TxExecutionContext = txExecutionContext; /// /// ETH value transferred in this call. /// - public readonly UInt256 TransferValue; + public readonly UInt256 TransferValue = transferValue; /// /// Value information passed (it is different from transfer value in DELEGATECALL. /// DELEGATECALL behaves like a library call and it uses the value information from the caller even /// as no transfer happens. /// - public readonly UInt256 Value; + public readonly UInt256 Value = value; /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. - public readonly int CallDepth; + public readonly int CallDepth = callDepth; - public readonly IEnumerable
AuthorizedAddresses; + public readonly IEnumerable
AuthorizedAddresses = authorizedAddresses; } } diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index de4db59422d..6fde3cbfe7f 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; diff --git a/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs b/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs index 018e06c606d..a5ca480a980 100644 --- a/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/IVirtualMachine.cs @@ -1,12 +1,6 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; -using System.Collections.Generic; -using Nethermind.Core; -using Nethermind.Core.Crypto; -using Nethermind.Core.Specs; -using Nethermind.Evm.CodeAnalysis; using Nethermind.Evm.Tracing; using Nethermind.State; diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index 0925b30e1b5..6179f51fa30 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -85,18 +85,19 @@ private static long AccessListCost(Transaction transaction, IReleaseSpec release private static long AuthorizationListCost(Transaction transaction, IReleaseSpec releaseSpec) { AuthorizationTuple[]? authorizationList = transaction.AuthorizationList; - long contractCodeCost = 0; if (authorizationList is not null) { if (!releaseSpec.IsAuthorizationListEnabled) { - throw new InvalidDataException( - $"Transaction with an authorization list received within the context of {releaseSpec.Name}. Eip-7702 is not enabled."); + throw new InvalidDataException($"Transaction with an authorization list received within the context of {releaseSpec.Name}. Eip-7702 is not enabled."); } - if (authorizationList.Length == 0) return contractCodeCost; - contractCodeCost += GasCostOf.PerAuthBaseCost * authorizationList.Length; + if (authorizationList.Length != 0) + { + return GasCostOf.PerAuthBaseCost * authorizationList.Length; + } } - return contractCodeCost; + + return 0; } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 94ac66aa426..5fec12b48ea 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -483,26 +483,7 @@ protected void ExecuteEvmCall( using (EvmState state = new(unspentGas, env, executionType, true, snapshot, false)) { - if (spec.UseTxAccessLists) - { - state.WarmUp(tx.AccessList); // eip-2930 - } - - if (spec.UseHotAndColdStorage) - { - state.WarmUp(tx.SenderAddress); // eip-2929 - state.WarmUp(env.ExecutingAccount); // eip-2929 - } - - if (spec.AddCoinbaseToTxAccessList) - { - state.WarmUp(header.GasBeneficiary); - } - - foreach (Address authorized in env.TxExecutionContext.AuthorizedCode.AuthorizedAddresses) - { - state.WarmUp(authorized); - } + WarmUp(tx, header, spec, env, state); substate = !tracer.IsTracingActions ? VirtualMachine.Run(state, WorldState, tracer) @@ -575,6 +556,31 @@ protected void ExecuteEvmCall( header.GasUsed += spentGas; } + private static void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionEnvironment env, + EvmState state) + { + if (spec.UseTxAccessLists) + { + state.WarmUp(tx.AccessList); // eip-2930 + } + + if (spec.UseHotAndColdStorage) + { + state.WarmUp(tx.SenderAddress); // eip-2929 + state.WarmUp(env.ExecutingAccount); // eip-2929 + } + + if (spec.AddCoinbaseToTxAccessList) + { + state.WarmUp(header.GasBeneficiary!); + } + + foreach (Address authorized in env.TxExecutionContext.AuthorizedCode.AuthorizedAddresses) + { + state.WarmUp(authorized); + } + } + protected virtual void PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) { if (!tx.IsSystem()) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 2d4a7013f7e..19eb5a9028e 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -22,9 +22,12 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R Address? codeAddress = stream.DecodeAddress(); UInt256?[] nonces = stream.DecodeArray(s => s.DecodeUInt256()); - if (nonces.Length > 1) - ThrowInvalidNonceRlpException(); - UInt256? nonce = nonces.Length == 1 ? nonces[0] : null; + UInt256? nonce = nonces.Length switch + { + 0 => null, + 1 => nonces[0], + _ => ThrowInvalidNonceRlpException() + }; ulong yParity = stream.DecodeULong(); byte[] r = stream.DecodeByteArray(); @@ -33,7 +36,7 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R stream.Check(check); return new AuthorizationTuple( chainId, - codeAddress, + codeAddress!, nonce, yParity, r, @@ -50,11 +53,12 @@ public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp int nonceLength = decoderContext.ReadSequenceLength(); //Nonce is optional and is therefore made as a sequence - UInt256? nonce = null; - if (nonceLength > 1) - ThrowInvalidNonceRlpException(); - if (nonceLength == 1) - nonce = decoderContext.DecodeUInt256(); + UInt256? nonce = nonceLength switch + { + 0 => null, + 1 => decoderContext.DecodeUInt256(), + _ => ThrowInvalidNonceRlpException() + }; ulong yParity = decoderContext.DecodeULong(); byte[] r = decoderContext.DecodeByteArray(); @@ -63,7 +67,7 @@ public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp decoderContext.Check(check); return new AuthorizationTuple( chainId, - codeAddress, + codeAddress!, nonce, yParity, r, @@ -83,7 +87,7 @@ public void Encode(RlpStream stream, AuthorizationTuple item, RlpBehaviors rlpBe stream.StartSequence(contentLength); stream.Encode(item.ChainId); stream.Encode(item.CodeAddress); - if (item.Nonce != null) + if (item.Nonce is not null) { stream.StartSequence(Rlp.LengthOf(item.Nonce)); stream.Encode((UInt256)item.Nonce); @@ -101,7 +105,7 @@ public RlpStream EncodeWithoutSignature(ulong chainId, Address codeAddress, UInt { int contentLength = GetContentLengthWithoutSig(chainId, codeAddress, nonce); var totalLength = Rlp.LengthOfSequence(contentLength); - RlpStream stream = new RlpStream(totalLength); + RlpStream stream = new(totalLength); EncodeWithoutSignature(stream, chainId, codeAddress, nonce); return stream; } @@ -112,7 +116,7 @@ public void EncodeWithoutSignature(RlpStream stream, ulong chainId, Address code stream.StartSequence(contentLength); stream.Encode(chainId); stream.Encode(codeAddress ?? throw new RlpException($"Invalid tx {nameof(AuthorizationTuple)} format - address is null")); - if (nonce != null) + if (nonce is not null) { stream.StartSequence(Rlp.LengthOf(nonce)); stream.Encode((UInt256)nonce); @@ -123,32 +127,21 @@ public void EncodeWithoutSignature(RlpStream stream, ulong chainId, Address code } } - public int GetLength(AuthorizationTuple item, RlpBehaviors rlpBehaviors) - { - int contentLength = GetContentLength(item); - return Rlp.LengthOfSequence(contentLength); - } + public int GetLength(AuthorizationTuple item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(GetContentLength(item)); - private static int GetContentLength(AuthorizationTuple tuple) - { - return GetContentLengthWithoutSig(tuple.ChainId, tuple.CodeAddress, tuple.Nonce) - + Rlp.LengthOf(tuple.AuthoritySignature.RecoveryId) - + Rlp.LengthOf(tuple.AuthoritySignature.R.AsSpan()) - + Rlp.LengthOf(tuple.AuthoritySignature.S.AsSpan()); - } + private static int GetContentLength(AuthorizationTuple tuple) => + GetContentLengthWithoutSig(tuple.ChainId, tuple.CodeAddress, tuple.Nonce) + + Rlp.LengthOf(tuple.AuthoritySignature.RecoveryId) + + Rlp.LengthOf(tuple.AuthoritySignature.R.AsSpan()) + + Rlp.LengthOf(tuple.AuthoritySignature.S.AsSpan()); - private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress, UInt256? nonce) - { - return - Rlp.LengthOf(chainId) - + Rlp.LengthOf(codeAddress) - + (nonce != null ? Rlp.LengthOfSequence(Rlp.LengthOf(nonce)) : Rlp.OfEmptySequence.Length); - } + private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress, UInt256? nonce) => + Rlp.LengthOf(chainId) + + Rlp.LengthOf(codeAddress) + + (nonce is not null ? Rlp.LengthOfSequence(Rlp.LengthOf(nonce)) : Rlp.OfEmptySequence.Length); [DoesNotReturn] [StackTraceHidden] - private static void ThrowInvalidNonceRlpException() - { + private static UInt256 ThrowInvalidNonceRlpException() => throw new RlpException("Invalid nonce length in authorization tuple."); - } } From ef3370dde3e87ed0da7c15b2c6d2c907cdabda43 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 28 Jun 2024 00:08:35 +0200 Subject: [PATCH 286/551] simplified refactor and RLP fix --- .../Processing/RecoverSignature.cs | 1 - .../Builders/TransactionBuilder.cs | 2 +- .../Encoding/AuthorizationListDecoderTests.cs | 29 -------- .../AuthorizationTupleDecoderTests.cs | 37 ++++++---- .../Encoding/TxDecoderTests.cs | 36 ++++++--- .../Nethermind.Crypto/KeccakRlpStream.cs | 1 + .../AuthorizedCodeInfoRepositoryTests.cs | 8 -- .../TransactionProcessorEip7702Tests.cs | 1 - .../AuthorizedCodeInfoRepository.cs | 1 - .../Eip7702/AuthorizationListDecoder.cs | 73 ------------------- .../Eip7702/AuthorizationTupleDecoder.cs | 2 +- .../Nethermind.Serialization.Rlp/RlpStream.cs | 17 +++++ .../Nethermind.Serialization.Rlp/TxDecoder.cs | 56 ++++---------- 13 files changed, 85 insertions(+), 179 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationListDecoderTests.cs delete mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 708f2c2e8ee..f54e0a5e6e9 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -11,7 +11,6 @@ using Nethermind.Crypto; using Nethermind.Logging; using Nethermind.Serialization.Rlp; -using Nethermind.Serialization.Rlp.Eip7702; using Nethermind.TxPool; namespace Nethermind.Consensus.Processing diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index 128509a5139..90a9921e318 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -232,7 +232,7 @@ public TransactionBuilder WithAuthorizationCode(AuthorizationTuple authTuple) } public TransactionBuilder WithAuthorizationCode(IEnumerable authList) { - TestObjectInternal.AuthorizationList = authList.ToArray(); + TestObjectInternal.AuthorizationList = authList?.ToArray(); return this; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationListDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationListDecoderTests.cs deleted file mode 100644 index 75257d66865..00000000000 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationListDecoderTests.cs +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Serialization.Rlp; -using Nethermind.Serialization.Rlp.Eip7702; -using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Nethermind.Core.Test.Encoding; - -[TestFixture] -public class AuthorizationListDecoderTests -{ - public void Decode_() - { - - RlpStream rlpStream = new RlpStream(32 * 4); - - - AuthorizationTupleDecoder sut = new(); - - - } - -} diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs index 388755c21c3..fef9f103a7c 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs @@ -6,7 +6,6 @@ using Nethermind.Core.Test.Builders; using Nethermind.Int256; using Nethermind.Serialization.Rlp; -using Nethermind.Serialization.Rlp.Eip7702; using NSubstitute.ExceptionExtensions; using NUnit.Framework; using System; @@ -20,16 +19,15 @@ namespace Nethermind.Core.Test.Encoding; [TestFixture] public class AuthorizationTupleDecoderTests { - public static IEnumerable AuthorizationTupleEncodeCases() + public static IEnumerable AuthorizationTupleEncodeCases() { - yield return new object[] - { - new AuthorizationTuple(0, Address.Zero, 0, new Signature(new byte[64], 0)) - }; - yield return new object[] - { - new AuthorizationTuple(ulong.MaxValue, new Address(Enumerable.Range(0, 20).Select(i => (byte)0xff).ToArray()), UInt256.MaxValue, new Signature(Enumerable.Range(0, 64).Select(i => (byte)0xff).ToArray(), 1)), - }; + yield return new AuthorizationTuple(0, Address.Zero, null, new Signature(new byte[64], 0)); + yield return new AuthorizationTuple(0, Address.Zero, 0, new Signature(new byte[64], 0)); + yield return new AuthorizationTuple( + ulong.MaxValue, + new Address(Enumerable.Range(0, 20).Select(i => (byte)0xff).ToArray()), + UInt256.MaxValue, + new Signature(Enumerable.Range(0, 64).Select(i => (byte)0xff).ToArray(), 1)); } [TestCaseSource(nameof(AuthorizationTupleEncodeCases))] @@ -43,10 +41,23 @@ public void Encode_TupleHasValues_TupleCanBeDecodedToEquivalentTuple(Authorizati sut.Decode(result).Should().BeEquivalentTo(item); } + + [Test] + public void Encode_NonceIsNull_NonceIsAlsoNullAfterDecoding() + { + AuthorizationTuple item = new(0, Address.Zero, null, new Signature(new byte[64], 0)); + AuthorizationTupleDecoder sut = new(); + + RlpStream result = sut.Encode(item); + result.Position = 0; + + Assert.That(sut.Decode(result).Nonce, Is.Null); + } + [Test] public void Decode_NonceItemListIsGreaterThan1_ThrowsRlpException() { - RlpStream stream = RlpStreamWithTuplewithTwoNonces(); + RlpStream stream = TupleRlpStreamWithTwoNonces(); AuthorizationTupleDecoder sut = new(); @@ -56,7 +67,7 @@ public void Decode_NonceItemListIsGreaterThan1_ThrowsRlpException() [Test] public void DecodeValueDecoderContext_NonceItemListIsGreaterThan1_ThrowsRlpException() { - RlpStream stream = RlpStreamWithTuplewithTwoNonces(); + RlpStream stream = TupleRlpStreamWithTwoNonces(); AuthorizationTupleDecoder sut = new(); Assert.That(() => @@ -67,7 +78,7 @@ public void DecodeValueDecoderContext_NonceItemListIsGreaterThan1_ThrowsRlpExcep , Throws.TypeOf()); } - private static RlpStream RlpStreamWithTuplewithTwoNonces() + private static RlpStream TupleRlpStreamWithTwoNonces() { ulong chainId = 0; Address codeAddress = Address.Zero; diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs index 3e584c243b8..6b3c4b2e822 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs @@ -68,6 +68,13 @@ public class TxDecoderTests .WithChainId(1559) .WithAuthorizationCode([new AuthorizationTuple(0, TestItem.AddressF, 0, 0, [], [])]) .SignedAndResolved(), "EIP 7702 first test case"); + yield return (Build.A.Transaction + .WithMaxFeePerGas(2.GWei()) + .WithType(TxType.SetCode) + .WithGasPrice(0) + .WithChainId(1559) + .WithAuthorizationCode([]) + .SignedAndResolved(), "EIP 7702 second test case"); } public static IEnumerable<(Transaction, string)> TestCaseSource() @@ -383,26 +390,37 @@ public void Duplicate_storage_keys_result_in_different_hashes() ); } - public static IEnumerable SetCodeAuthorizationCases() - { + public static IEnumerable AuthorizationTupleCases() + { + yield return null!; + yield return []; + yield return [new AuthorizationTuple(0, Address.Zero, 0, 0, [], [])]; + yield return [new AuthorizationTuple(0, Address.Zero, null, 0, [], [])]; yield return - [ - new AuthorizationTuple(0, TestItem.AddressA, null, ulong.MinValue, [0x0], [0x0]), - new AuthorizationTuple(0, TestItem.AddressF, 0, ulong.MinValue, [0x0], [0x0]) - ]; + [ + new AuthorizationTuple(0, Address.Zero, 0, 0, [], []), + new AuthorizationTuple(0, Address.Zero, null, 0, [], []), + new AuthorizationTuple(ulong.MaxValue, new Address(Enumerable.Range(0, 20).Select(i => (byte)0xff).ToArray()), UInt256.MaxValue, 0, Enumerable.Range(0, 32).Select(i => (byte)0xff).ToArray(), Enumerable.Range(0, 32).Select(i => (byte)0xff).ToArray()), + ]; + yield return + [ + new AuthorizationTuple(0, TestItem.AddressA, null, ulong.MinValue, [0x0], [0x0]), + new AuthorizationTuple(0, TestItem.AddressF, 0, ulong.MinValue, [0x0], [0x0]) + ]; } - [TestCaseSource(nameof(SetCodeAuthorizationCases))] - public void TxSetCodeEncodeAndDecode(AuthorizationTuple[] setCodeAuthorizations) + [TestCaseSource(nameof(AuthorizationTupleCases))] + public void TxAuthorizationTupleEncodeAndDecode(AuthorizationTuple[] authorizations) { Transaction tx = Build.A.Transaction .WithMaxFeePerGas(2.GWei()) .WithType(TxType.SetCode) .WithGasPrice(0) .WithChainId(1559) - .WithAuthorizationCode(setCodeAuthorizations) + .WithAuthorizationCode(authorizations) .SignedAndResolved().TestObject; RlpStream rlpStream = new(_txDecoder.GetLength(tx, RlpBehaviors.None)); + _txDecoder.Encode(rlpStream, tx); rlpStream.Position = 0; Transaction? decoded = _txDecoder.Decode(rlpStream); diff --git a/src/Nethermind/Nethermind.Crypto/KeccakRlpStream.cs b/src/Nethermind/Nethermind.Crypto/KeccakRlpStream.cs index 3a943a97bed..4ec98398538 100644 --- a/src/Nethermind/Nethermind.Crypto/KeccakRlpStream.cs +++ b/src/Nethermind/Nethermind.Crypto/KeccakRlpStream.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Runtime.InteropServices; using Nethermind.Core.Crypto; diff --git a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs index 524ed376965..23784615abf 100644 --- a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs @@ -6,25 +6,17 @@ using Nethermind.Crypto; using Nethermind.Int256; using Nethermind.Logging; -using Nethermind.Serialization.Rlp.Eip7702; using Nethermind.Serialization.Rlp; using NSubstitute; using NUnit.Framework; using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using Nethermind.Core.Test.Builders; using FluentAssertions; using Nethermind.State; using Nethermind.Core.Specs; using Nethermind.Evm.CodeAnalysis; -using Nethermind.Db; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.Specs.Forks; -using Nethermind.Specs; -using Nethermind.Trie.Pruning; namespace Nethermind.Evm.Test; diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 812acf64ed8..f084a53e597 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -18,7 +18,6 @@ using NUnit.Framework; using System.Collections.Generic; using Nethermind.Core.Crypto; -using Nethermind.Serialization.Rlp.Eip7702; using Nethermind.Serialization.Rlp; using System; using System.Linq; diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index ac2e49588f0..0eb9332fdab 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -10,7 +10,6 @@ using System.Collections.Generic; using Nethermind.Serialization.Rlp; using Nethermind.Logging; -using Nethermind.Serialization.Rlp.Eip7702; using Nethermind.Crypto; namespace Nethermind.Evm; diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs deleted file mode 100644 index c816a1915bd..00000000000 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationListDecoder.cs +++ /dev/null @@ -1,73 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core; -using Nethermind.Int256; -using System; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; - -namespace Nethermind.Serialization.Rlp.Eip7702; -public class AuthorizationListDecoder : IRlpStreamDecoder, IRlpValueDecoder -{ - private readonly AuthorizationTupleDecoder _tupleDecoder = new(); - public AuthorizationTuple[]? Decode( - RlpStream rlpStream, - RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (rlpStream.IsNextItemNull()) - ThrowNullAuthorizationListRlpException(); - - return rlpStream.DecodeArray( - (rlp) => _tupleDecoder.Decode(rlp, rlpBehaviors), - rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)); - } - - public AuthorizationTuple[]? Decode( - ref Rlp.ValueDecoderContext decoderContext, - RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (decoderContext.IsNextItemNull()) - ThrowNullAuthorizationListRlpException(); - - AuthorizationTuple[] result = decoderContext.DecodeArray( - _tupleDecoder, - rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)); - return result; - } - - public void Encode( - RlpStream stream, - AuthorizationTuple[] items, - RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (items is null) - throw new ArgumentNullException(nameof(items)); - - int contentLength = GetLength(items, rlpBehaviors); - stream.StartSequence(contentLength); - foreach (AuthorizationTuple tuple in items) - { - _tupleDecoder.Encode(stream, tuple, rlpBehaviors); - } - } - - public int GetLength(AuthorizationTuple[] authorizationTuples, RlpBehaviors rlpBehaviors) - { - if (authorizationTuples is null) throw new ArgumentNullException(nameof(authorizationTuples)); - int total = 0; - foreach (AuthorizationTuple tuple in authorizationTuples) - { - total += _tupleDecoder.GetLength(tuple, rlpBehaviors); - } - return Rlp.LengthOfSequence(total); - } - - - [StackTraceHidden] - [DoesNotReturn] - private void ThrowNullAuthorizationListRlpException() - { - throw new RlpException("Authorization list cannot be null."); - } -} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 19eb5a9028e..bae9155aabe 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -9,7 +9,7 @@ using System.Diagnostics.CodeAnalysis; using System.IO; -namespace Nethermind.Serialization.Rlp.Eip7702; +namespace Nethermind.Serialization.Rlp; public class AuthorizationTupleDecoder : IRlpStreamDecoder, IRlpValueDecoder { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs index 04f0de67207..fdf473c883f 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs @@ -54,6 +54,23 @@ public RlpStream(in CappedArray data) _data = data; } + public void EncodeArray(T?[]? items, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (items is null) + { + WriteByte(Rlp.NullObjectByte); + return; + } + IRlpStreamDecoder decoder = Rlp.GetStreamDecoder(); + int contentLength = decoder.GetContentLength(items); + + StartSequence(contentLength); + + foreach (var item in items) + { + decoder.Encode(this, item, rlpBehaviors); + } + } public void Encode(Block value) { _blockDecoder.Encode(this, value); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs index 29c98778c7f..f81ce0a5201 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs @@ -11,7 +11,7 @@ using Nethermind.Core.Extensions; using Nethermind.Int256; using Nethermind.Serialization.Rlp.Eip2930; -using Nethermind.Serialization.Rlp.Eip7702; +using Nethermind.Serialization.Rlp; namespace Nethermind.Serialization.Rlp { @@ -44,7 +44,7 @@ public class TxDecoder : where T : Transaction, new() { private readonly AccessListDecoder _accessListDecoder = new(); - private AuthorizationListDecoder _authListDecoder = new(); + private AuthorizationTupleDecoder _authTupleDecoder = new(); private readonly bool _lazyHash; protected TxDecoder(bool lazyHash = true) @@ -316,17 +316,10 @@ private static void DecodeShardBlobNetworkPayload(T transaction, ref Rlp.ValueDe byte[][] proofs = decoderContext.DecodeByteArrays(); transaction.NetworkWrapper = new ShardBlobNetworkWrapper(blobs, commitments, proofs); } - private void DecodeContractCodeWithoutSig(T transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors) + private void DecodeAuthorizationListWithoutSig(T transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors) { - transaction.ChainId = decoderContext.DecodeULong(); - transaction.Nonce = decoderContext.DecodeUInt256(); - transaction.GasPrice = decoderContext.DecodeUInt256(); // gas premium - transaction.DecodedMaxFeePerGas = decoderContext.DecodeUInt256(); - transaction.GasLimit = decoderContext.DecodeLong(); - transaction.To = decoderContext.DecodeAddress(); - transaction.Data = decoderContext.DecodeByteArray(); - transaction.AccessList = _accessListDecoder.Decode(ref decoderContext, rlpBehaviors); - transaction.AuthorizationList = _authListDecoder.Decode(ref decoderContext, rlpBehaviors); + DecodeEip1559PayloadWithoutSig(transaction, ref decoderContext, rlpBehaviors); + transaction.AuthorizationList = decoderContext.DecodeArray(_authTupleDecoder, !rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)); } private static void DecodeDepositPayloadWithoutSig(T transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors) @@ -343,15 +336,8 @@ private static void DecodeDepositPayloadWithoutSig(T transaction, ref Rlp.ValueD private void DecodeAuthorizationListWithoutSig(T transaction, RlpStream rlpStream, RlpBehaviors rlpBehaviors) { - transaction.ChainId = rlpStream.DecodeULong(); - transaction.Nonce = rlpStream.DecodeUInt256(); - transaction.GasPrice = rlpStream.DecodeUInt256(); // gas premium - transaction.DecodedMaxFeePerGas = rlpStream.DecodeUInt256(); - transaction.GasLimit = rlpStream.DecodeLong(); - transaction.To = rlpStream.DecodeAddress(); - transaction.Data = rlpStream.DecodeByteArray(); - transaction.AccessList = _accessListDecoder.Decode(rlpStream, rlpBehaviors); - transaction.AuthorizationList = _authListDecoder.Decode(rlpStream, rlpBehaviors); + DecodeEip1559PayloadWithoutSig(transaction, rlpStream, rlpBehaviors); + transaction.AuthorizationList = rlpStream.DecodeArray((s)=> _authTupleDecoder.Decode(s, rlpBehaviors)); } private static void EncodeLegacyWithoutPayload(T item, RlpStream stream) @@ -404,17 +390,10 @@ private void EncodeShardBlobPayloadWithoutPayload(T item, RlpStream stream, RlpB stream.Encode(item.BlobVersionedHashes); } - private void EncodeSetCodeWithoutPayload(T item, RlpStream stream, RlpBehaviors rlpBehaviors) + private void EncodeAuthorizationListWithoutPayload(T item, RlpStream stream, RlpBehaviors rlpBehaviors) { - stream.Encode(item.ChainId ?? 0); - stream.Encode(item.Nonce); - stream.Encode(item.GasPrice); // gas premium - stream.Encode(item.DecodedMaxFeePerGas); - stream.Encode(item.GasLimit); - stream.Encode(item.To); - stream.Encode(item.Data); - _accessListDecoder.Encode(stream, item.AccessList, rlpBehaviors); - _authListDecoder.Encode(stream, item.AuthorizationList, rlpBehaviors); + EncodeEip1559PayloadWithoutPayload(item, stream, rlpBehaviors); + stream.EncodeArray(item.AuthorizationList, rlpBehaviors); } private static void EncodeDepositTxPayloadWithoutPayload(T item, RlpStream stream) @@ -509,7 +488,7 @@ public void Decode(ref Rlp.ValueDecoderContext decoderContext, ref T? transactio DecodeShardBlobPayloadWithoutSig(transaction, ref decoderContext, rlpBehaviors); break; case TxType.SetCode: - DecodeContractCodeWithoutSig(transaction, ref decoderContext, rlpBehaviors); + DecodeAuthorizationListWithoutSig(transaction, ref decoderContext, rlpBehaviors); break; case TxType.DepositTx: TxDecoder.DecodeDepositPayloadWithoutSig(transaction, ref decoderContext, rlpBehaviors); @@ -710,7 +689,7 @@ private void EncodeTx(RlpStream stream, T? item, RlpBehaviors rlpBehaviors = Rlp EncodeShardBlobPayloadWithoutPayload(item, stream, rlpBehaviors); break; case TxType.SetCode: - EncodeSetCodeWithoutPayload(item, stream, rlpBehaviors); + EncodeAuthorizationListWithoutPayload(item, stream, rlpBehaviors); break; case TxType.DepositTx: TxDecoder.EncodeDepositTxPayloadWithoutPayload(item, stream); @@ -822,15 +801,8 @@ private int GetShardBlobContentLength(T item) private int GetAuthorizationListLength(T item) { - return Rlp.LengthOf(item.Nonce) - + Rlp.LengthOf(item.GasPrice) // gas premium - + Rlp.LengthOf(item.DecodedMaxFeePerGas) - + Rlp.LengthOf(item.GasLimit) - + Rlp.LengthOf(item.To) - + Rlp.LengthOf(item.Data) - + Rlp.LengthOf(item.ChainId ?? 0) - + _accessListDecoder.GetLength(item.AccessList, RlpBehaviors.None) - + _authListDecoder.GetLength(item.AuthorizationList, RlpBehaviors.None); + return GetEip1559ContentLength(item) + + (item.AuthorizationList is null ? 1 : Rlp.LengthOfSequence(_authTupleDecoder.GetContentLength(item.AuthorizationList, RlpBehaviors.None))); } private static int GetShardBlobNetworkWrapperContentLength(T item, int txContentLength) From 05ea0127d714b9b20534de0ff2d89512226e698a Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 28 Jun 2024 00:09:57 +0200 Subject: [PATCH 287/551] format whitespace --- src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs | 2 +- src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs | 2 +- src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs index 6b3c4b2e822..827b8a3e60a 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs @@ -391,7 +391,7 @@ public void Duplicate_storage_keys_result_in_different_hashes() } public static IEnumerable AuthorizationTupleCases() - { + { yield return null!; yield return []; yield return [new AuthorizationTuple(0, Address.Zero, 0, 0, [], [])]; diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index 0eb9332fdab..c78c5d5c1ae 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -97,7 +97,7 @@ public void InsertFromAuthorizations( if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) nonce ({authTuple.Nonce}) does not match."); continue; } - + //TODO should we do insert if code is empty? CopyCodeAndOverwrite(worldState, authTuple.CodeAddress, authority, spec); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs index f81ce0a5201..2a2302899fb 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs @@ -337,7 +337,7 @@ private static void DecodeDepositPayloadWithoutSig(T transaction, ref Rlp.ValueD private void DecodeAuthorizationListWithoutSig(T transaction, RlpStream rlpStream, RlpBehaviors rlpBehaviors) { DecodeEip1559PayloadWithoutSig(transaction, rlpStream, rlpBehaviors); - transaction.AuthorizationList = rlpStream.DecodeArray((s)=> _authTupleDecoder.Decode(s, rlpBehaviors)); + transaction.AuthorizationList = rlpStream.DecodeArray((s) => _authTupleDecoder.Decode(s, rlpBehaviors)); } private static void EncodeLegacyWithoutPayload(T item, RlpStream stream) From 06e48c9df40fdce3df5b1a1441c39a23da3348c1 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 28 Jun 2024 00:13:07 +0200 Subject: [PATCH 288/551] cleanup --- .../AuthorizedCodeInfoRepository.cs | 3 --- .../Nethermind.Evm/CodeInfoRepository.cs | 1 - .../OverridableCodeInfoRepository.cs | 18 ------------------ 3 files changed, 22 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index c78c5d5c1ae..92058cda046 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -24,9 +24,6 @@ public class AuthorizedCodeInfoRepository : ICodeInfoRepository private readonly ILogger _logger; private readonly byte[] _internalBuffer = new byte[128]; - public AuthorizedCodeInfoRepository(ulong chainId, ILogger? logger = null) - : this(new CodeInfoRepository(), chainId, logger) { } - public AuthorizedCodeInfoRepository(ICodeInfoRepository codeInfoRepository, ulong chainId, ILogger? logger = null) { _codeInfoRepository = codeInfoRepository; diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 82e91e4dc30..c1466f866f2 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -62,7 +62,6 @@ public bool TryGet(in ValueHash256 codeHash, [NotNullWhen(true)] out CodeInfo? c private static readonly FrozenDictionary _precompiles = InitializePrecompiledContracts(); private static readonly CodeLruCache _codeCache = new(); private readonly FrozenDictionary _localPrecompiles; - private static readonly Dictionary _authorizedCodeCache = new(); private static FrozenDictionary InitializePrecompiledContracts() { diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index d0dae244cc3..61694da1a54 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -40,24 +40,6 @@ public void SetCodeOverwrite( _codeOverwrites[key] = value; } - - /// - /// Copy code from and set it to override . - /// Main use for this is for https://eips.ethereum.org/EIPS/eip-7702 - /// - /// - public void CopyCodeAndOverwrite( - IWorldState worldState, - Address codeSource, - Address target, - IReleaseSpec vmSpec) - { - if (!_codeOverwrites.ContainsKey(target)) - { - _codeOverwrites.Add(target, GetCachedCodeInfo(worldState, codeSource, vmSpec)); - } - } - public void ClearOverwrites() { _codeOverwrites.Clear(); From bbd956a249efb4f0b95aa95541358d9382aeb706 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 28 Jun 2024 00:31:11 +0200 Subject: [PATCH 289/551] cleanup and review comments --- .../Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs | 3 +-- src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs | 2 +- .../Nethermind.Facade/OverridableCodeInfoRepository.cs | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs index 76fd9111387..876ab11fbd4 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs @@ -17,7 +17,6 @@ using System; using Nethermind.Core.Test.Builders; using Nethermind.Crypto; -using Nethermind.Serialization.Rlp.Eip7702; using Nethermind.Serialization.Rlp; using System.Collections.Generic; using System.Linq; @@ -47,7 +46,7 @@ public void GlobalSetup() _stateProvider.Commit(_spec); _ethereumEcdsa = new(1, new OneLoggerLogManager(NullLogger.Instance)); - sut = new AuthorizedCodeInfoRepository(1, NullLogger.Instance); + sut = new AuthorizedCodeInfoRepository(new CodeInfoRepository(), 1, NullLogger.Instance); var list = new List(); var rnd = new Random(); var addressBuffer = new byte[20]; diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index 92058cda046..e71cf1e961b 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -40,7 +40,7 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) => _codeInfoRepository.GetOrAdd(codeHash, initCode); public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) => - throw new NotSupportedException($"Use {nameof(CopyCodeAndOverwrite)}() for code authorizations."); + _codeInfoRepository.InsertCode(state, code, codeOwner, spec); /// /// Copy code from and set it to override . diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index 61694da1a54..be4843429fb 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -40,6 +40,7 @@ public void SetCodeOverwrite( _codeOverwrites[key] = value; } + public void ClearOverwrites() { _codeOverwrites.Clear(); From 0b182c87cf10ab0ea798ba5dee737a862f868df3 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 28 Jun 2024 01:05:37 +0200 Subject: [PATCH 290/551] fix for old tx tests --- .../Builders/TransactionBuilder.cs | 6 ++ .../Encoding/ShardBlobTxDecoderTests.cs | 3 +- .../Encoding/TxDecoderTests.cs | 65 ++++++++++--------- 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index 90a9921e318..a8c9e1968f9 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -300,5 +300,11 @@ public TransactionBuilder WithIsServiceTransaction(bool isServiceTransaction) TestObjectInternal.IsServiceTransaction = isServiceTransaction; return this; } + + public TransactionBuilder From(T item) + { + TestObjectInternal = item; + return this; + } } } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ShardBlobTxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ShardBlobTxDecoderTests.cs index e4ce2d91c9f..90d31d84929 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ShardBlobTxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ShardBlobTxDecoderTests.cs @@ -8,6 +8,7 @@ using FluentAssertions; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; +using Nethermind.Core.Test.Builders; using Nethermind.Crypto; using Nethermind.Logging; using Nethermind.Serialization.Rlp; @@ -24,7 +25,7 @@ public partial class ShardBlobTxDecoderTests public static Task SetUp() => KzgPolynomialCommitments.InitializeAsync(); public static IEnumerable<(Transaction, string)> TestCaseSource() => - TxDecoderTests.TestObjectsSource().Select(tos => (tos.Item1 + TxDecoderTests.TestCaseSource().Select(tos => (Build.A.Transaction.From(tos.Item1) .WithChainId(TestBlockchainIds.ChainId) .WithShardBlobTxTypeAndFields(2, false) .SignedAndResolved() diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs index 827b8a3e60a..8bdc7cb4d44 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs @@ -24,10 +24,32 @@ public class TxDecoderTests { private readonly TxDecoder _txDecoder = new(); - public static IEnumerable<(TransactionBuilder, string)> TestObjectsSource() + public static IEnumerable<(Transaction, string)> ExtendedTestCaseSource() { - yield return (Build.A.Transaction.SignedAndResolved(), "basic"); - yield return (Build.A.Transaction.SignedAndResolved().WithNonce(0), "basic with nonce=0"); + foreach ((Transaction, string) item in TestCaseSource()) + { + yield return item; + } + + yield return (Build.A.Transaction + .WithMaxFeePerGas(2.GWei()) + .WithType(TxType.SetCode) + .WithGasPrice(0) + .WithChainId(1559) + .WithAuthorizationCode([new AuthorizationTuple(0, TestItem.AddressF, 0, 0, [], [])]) + .SignedAndResolved().TestObject, "EIP 7702 with one tuple"); + yield return (Build.A.Transaction + .WithMaxFeePerGas(2.GWei()) + .WithType(TxType.SetCode) + .WithGasPrice(0) + .WithChainId(1559) + .WithAuthorizationCode([]) + .SignedAndResolved().TestObject, "EIP 7702 with empty list"); + } + public static IEnumerable<(Transaction, string)> TestCaseSource() + { + yield return (Build.A.Transaction.SignedAndResolved().TestObject, "basic"); + yield return (Build.A.Transaction.SignedAndResolved().WithNonce(0).TestObject, "basic with nonce=0"); yield return (Build.A.Transaction .WithData(new byte[] { 1, 2, 3 }) .WithType(TxType.AccessList) @@ -37,7 +59,7 @@ public class TxDecoderTests .AddAddress(Address.Zero) .AddStorage(1) .Build()) - .SignedAndResolved(), "access list"); + .SignedAndResolved().TestObject, "access list"); yield return (Build.A.Transaction .WithData(new byte[] { 1, 2, 3 }) .WithType(TxType.EIP1559) @@ -48,39 +70,22 @@ public class TxDecoderTests .AddAddress(Address.Zero) .AddStorage(1) .Build()) - .SignedAndResolved(), "EIP1559 - access list"); + .SignedAndResolved().TestObject, "EIP1559 - access list"); yield return (Build.A.Transaction .WithType(TxType.EIP1559) .WithMaxFeePerGas(50) .WithMaxPriorityFeePerGas(10) .WithChainId(0) - .SignedAndResolved(), "EIP 1559"); + .SignedAndResolved().TestObject, "EIP 1559"); yield return (Build.A.Transaction .WithMaxFeePerGas(2.GWei()) .WithType(TxType.EIP1559) .WithGasPrice(0) .WithChainId(1559) - .SignedAndResolved(), "EIP 1559 second test case"); - yield return (Build.A.Transaction - .WithMaxFeePerGas(2.GWei()) - .WithType(TxType.SetCode) - .WithGasPrice(0) - .WithChainId(1559) - .WithAuthorizationCode([new AuthorizationTuple(0, TestItem.AddressF, 0, 0, [], [])]) - .SignedAndResolved(), "EIP 7702 first test case"); - yield return (Build.A.Transaction - .WithMaxFeePerGas(2.GWei()) - .WithType(TxType.SetCode) - .WithGasPrice(0) - .WithChainId(1559) - .WithAuthorizationCode([]) - .SignedAndResolved(), "EIP 7702 second test case"); + .SignedAndResolved().TestObject, "EIP 1559 second test case"); } - public static IEnumerable<(Transaction, string)> TestCaseSource() - => TestObjectsSource().Select(tos => (tos.Item1.TestObject, tos.Item2)); - - [TestCaseSource(nameof(TestCaseSource))] + [TestCaseSource(nameof(ExtendedTestCaseSource))] [Repeat(10)] // Might wanna increase this to double check when changing logic as on lower value, it does not reproduce. public void CanCorrectlyCalculateTxHash_when_called_concurrently((Transaction Tx, string Description) testCase) { @@ -105,7 +110,7 @@ public void CanCorrectlyCalculateTxHash_when_called_concurrently((Transaction Tx Task.WaitAll(tasks.ToArray()); } - [TestCaseSource(nameof(TestCaseSource))] + [TestCaseSource(nameof(ExtendedTestCaseSource))] public void Roundtrip((Transaction Tx, string Description) testCase) { RlpStream rlpStream = new(_txDecoder.GetLength(testCase.Tx, RlpBehaviors.None)); @@ -118,7 +123,7 @@ public void Roundtrip((Transaction Tx, string Description) testCase) decoded.EqualToTransaction(testCase.Tx); } - [TestCaseSource(nameof(TestCaseSource))] + [TestCaseSource(nameof(ExtendedTestCaseSource))] public void Roundtrip_ValueDecoderContext((Transaction Tx, string Description) testCase) { RlpStream rlpStream = new(10000); @@ -134,7 +139,7 @@ public void Roundtrip_ValueDecoderContext((Transaction Tx, string Description) t decoded.EqualToTransaction(testCase.Tx); } - [TestCaseSource(nameof(TestCaseSource))] + [TestCaseSource(nameof(ExtendedTestCaseSource))] public void Roundtrip_ValueDecoderContext_WithMemorySlice((Transaction Tx, string Description) testCase) { RlpStream rlpStream = new(10000); @@ -149,7 +154,7 @@ public void Roundtrip_ValueDecoderContext_WithMemorySlice((Transaction Tx, strin decoded.EqualToTransaction(testCase.Tx); } - [TestCaseSource(nameof(TestCaseSource))] + [TestCaseSource(nameof(ExtendedTestCaseSource))] public void ValueDecoderContext_DecodeWithMemorySlice_ShouldUseSameBuffer((Transaction Tx, string Description) testCase) { if (!testCase.Tx.Data.HasValue || testCase.Tx.Data.Value.Length == 0) return; @@ -247,7 +252,7 @@ private void ValueDecoderContext_return_the_same_transaction_as_rlp_stream( Assert.That(encodedWithDecodedByValueDecoderContext.Bytes, Is.EqualTo(encoded.Bytes)); } - [TestCaseSource(nameof(TestCaseSource))] + [TestCaseSource(nameof(ExtendedTestCaseSource))] public void Rlp_encode_should_return_the_same_as_rlp_stream_encoding( (Transaction Tx, string Description) testCase) { From ca22d59a04b034d1f24768dab73941872c0d992c Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 28 Jun 2024 09:26:02 +0200 Subject: [PATCH 291/551] removed unused field --- src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs index 0ad7657eb40..f22a3bd287b 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs @@ -89,7 +89,5 @@ public ExecutionEnvironment /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. public readonly int CallDepth = callDepth; - - public readonly IEnumerable
AuthorizedAddresses = authorizedAddresses; } } From 6218545aae6b876398a8244d6766ee39d055f589 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Fri, 28 Jun 2024 10:00:39 +0200 Subject: [PATCH 292/551] CodeInfoRepository passing refactor --- .../Nethermind.Core/AuthorizationTuple.cs | 29 ++++++--------- .../Nethermind.Evm/ExecutionEnvironment.cs | 26 -------------- .../TransactionProcessor.cs | 35 +++++++++++-------- .../Nethermind.Evm/TxExecutionContext.cs | 26 ++++++-------- .../Nethermind.Evm/VirtualMachine.cs | 24 ++++++------- 5 files changed, 53 insertions(+), 87 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 2b2aedfa709..8997d274c05 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -7,7 +7,12 @@ using System; namespace Nethermind.Core; -public class AuthorizationTuple +public class AuthorizationTuple( + ulong chainId, + Address codeAddress, + UInt256? nonce, + Signature sig, + Address? authority = null) { public AuthorizationTuple( ulong chainId, @@ -19,25 +24,13 @@ public AuthorizationTuple( Address? authority = null) : this(chainId, codeAddress, nonce, new Signature(r, s, yParity + Signature.VOffset), authority) { } - public AuthorizationTuple( - ulong chainId, - Address codeAddress, - UInt256? nonce, - Signature sig, Address? authority = null) - { - ChainId = chainId; - CodeAddress = codeAddress ?? throw new System.ArgumentNullException(nameof(codeAddress)); - Nonce = nonce; - AuthoritySignature = sig ?? throw new System.ArgumentNullException(nameof(sig)); - Authority = authority; - } + public ulong ChainId { get; } = chainId; + public Address CodeAddress { get; } = codeAddress ?? throw new ArgumentNullException(nameof(codeAddress)); + public UInt256? Nonce { get; } = nonce; + public Signature AuthoritySignature { get; } = sig ?? throw new ArgumentNullException(nameof(sig)); - public ulong ChainId { get; } - public Address CodeAddress { get; } - public UInt256? Nonce { get; } - public Signature AuthoritySignature { get; } /// /// may be recovered at a later point. /// - public Address? Authority { get; set; } + public Address? Authority { get; set; } = authority; } diff --git a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs index f22a3bd287b..f64570c9430 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Generic; using Nethermind.Core; using Nethermind.Evm.CodeAnalysis; using Nethermind.Int256; @@ -18,33 +17,8 @@ public readonly struct ExecutionEnvironment( in TxExecutionContext txExecutionContext, UInt256 transferValue, UInt256 value, - IEnumerable
authorizedAddresses, int callDepth = 0) { - public ExecutionEnvironment - ( - CodeInfo codeInfo, - Address executingAccount, - Address caller, - Address? codeSource, - ReadOnlyMemory inputData, - in TxExecutionContext txExecutionContext, - UInt256 transferValue, - UInt256 value, - int callDepth = 0) - : this( - codeInfo, - executingAccount, - caller, - codeSource, - inputData, - txExecutionContext, - transferValue, - value, - Array.Empty
(), - callDepth) - { } - /// /// Parsed bytecode for the current call. /// diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 5fec12b48ea..f205d8dc45d 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -33,8 +33,7 @@ public class TransactionProcessor : ITransactionProcessor protected IWorldState WorldState { get; private init; } protected IVirtualMachine VirtualMachine { get; private init; } private readonly ICodeInfoRepository _codeInfoRepository; - - private readonly AuthorizedCodeInfoRepository _authorizedCodeInfoRepository; + private AuthorizedCodeInfoRepository? _authorizedCodeInfoRepository; [Flags] protected enum ExecutionOptions @@ -83,7 +82,6 @@ public TransactionProcessor( WorldState = worldState; VirtualMachine = virtualMachine; _codeInfoRepository = codeInfoRepository; - _authorizedCodeInfoRepository = new(codeInfoRepository, specProvider.ChainId, Logger); Ecdsa = new EthereumEcdsa(specProvider.ChainId, logManager); } @@ -133,16 +131,21 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); + ICodeInfoRepository codeInfoRepository = _codeInfoRepository; + if (spec.IsEip7702Enabled) { + _authorizedCodeInfoRepository ??= new(codeInfoRepository, SpecProvider.ChainId, Logger); _authorizedCodeInfoRepository.ClearAuthorizations(); + codeInfoRepository = _authorizedCodeInfoRepository; + if (tx.HasAuthorizationList) { _authorizedCodeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); } } - ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _authorizedCodeInfoRepository); + ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, codeInfoRepository); long gasAvailable = tx.GasLimit - intrinsicGas; ExecuteEvmCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); @@ -416,16 +419,16 @@ protected ExecutionEnvironment BuildExecutionEnvironment( in BlockExecutionContext blCtx, IReleaseSpec spec, in UInt256 effectiveGasPrice, - AuthorizedCodeInfoRepository authorizedCode) + ICodeInfoRepository codeInfoRepository) { Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0); if (recipient is null) ThrowInvalidDataException("Recipient has not been resolved properly before tx execution"); - TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes, authorizedCode); + TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes, codeInfoRepository); CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data ?? Memory.Empty) - : _authorizedCodeInfoRepository.GetCachedCodeInfo(WorldState, recipient, spec); + : codeInfoRepository.GetCachedCodeInfo(WorldState, recipient, spec); codeInfo.AnalyseInBackgroundIfRequired(); @@ -476,7 +479,7 @@ protected void ExecuteEvmCall( if (tx.IsContractCreation) { // if transaction is a contract creation then recipient address is the contract deployment address - PrepareAccountForContractDeployment(env.ExecutingAccount, spec); + PrepareAccountForContractDeployment(env.ExecutingAccount, env.TxExecutionContext.CodeInfoRepository, spec); } ExecutionType executionType = tx.IsContractCreation ? ExecutionType.CREATE : ExecutionType.TRANSACTION; @@ -523,7 +526,7 @@ protected void ExecuteEvmCall( if (unspentGas >= codeDepositGasCost) { var code = substate.Output.ToArray(); - _codeInfoRepository.InsertCode(WorldState, code, env.ExecutingAccount, spec); + env.TxExecutionContext.CodeInfoRepository.InsertCode(WorldState, code, env.ExecutingAccount, spec); unspentGas -= codeDepositGasCost; } @@ -556,8 +559,7 @@ protected void ExecuteEvmCall( header.GasUsed += spentGas; } - private static void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionEnvironment env, - EvmState state) + private void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionEnvironment env, EvmState state) { if (spec.UseTxAccessLists) { @@ -575,9 +577,12 @@ private static void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec state.WarmUp(header.GasBeneficiary!); } - foreach (Address authorized in env.TxExecutionContext.AuthorizedCode.AuthorizedAddresses) + if (spec.IsEip7702Enabled) { - state.WarmUp(authorized); + foreach (Address authorized in _authorizedCodeInfoRepository!.AuthorizedAddresses) + { + state.WarmUp(authorized); + } } } @@ -602,9 +607,9 @@ protected virtual void PayFees(Transaction tx, BlockHeader header, IReleaseSpec } } - protected void PrepareAccountForContractDeployment(Address contractAddress, IReleaseSpec spec) + private void PrepareAccountForContractDeployment(Address contractAddress, ICodeInfoRepository codeInfoRepository, IReleaseSpec spec) { - if (WorldState.AccountExists(contractAddress) && contractAddress.IsNonZeroAccount(spec, _codeInfoRepository, WorldState)) + if (WorldState.AccountExists(contractAddress) && contractAddress.IsNonZeroAccount(spec, codeInfoRepository, WorldState)) { if (Logger.IsTrace) Logger.Trace($"Contract collision at {contractAddress}"); diff --git a/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs b/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs index a6ce1aec8f4..e1aa68c2b4e 100644 --- a/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs +++ b/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs @@ -6,21 +6,17 @@ namespace Nethermind.Evm { - public readonly struct TxExecutionContext + public readonly struct TxExecutionContext( + in BlockExecutionContext blockExecutionContext, + Address origin, + in UInt256 gasPrice, + byte[][] blobVersionedHashes, + ICodeInfoRepository codeInfoRepository) { - public readonly BlockExecutionContext BlockExecutionContext; - public Address Origin { get; } - public UInt256 GasPrice { get; } - public byte[][]? BlobVersionedHashes { get; } - public AuthorizedCodeInfoRepository AuthorizedCode { get; } - - public TxExecutionContext(in BlockExecutionContext blockExecutionContext, Address origin, in UInt256 gasPrice, byte[][] blobVersionedHashes, AuthorizedCodeInfoRepository authorizedCode) - { - BlockExecutionContext = blockExecutionContext; - Origin = origin; - GasPrice = gasPrice; - BlobVersionedHashes = blobVersionedHashes; - AuthorizedCode = authorizedCode; - } + public readonly BlockExecutionContext BlockExecutionContext = blockExecutionContext; + public Address Origin { get; } = origin; + public UInt256 GasPrice { get; } = gasPrice; + public byte[][]? BlobVersionedHashes { get; } = blobVersionedHashes; + public ICodeInfoRepository CodeInfoRepository { get; } = codeInfoRepository; } } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 8adfae21304..14d631b17d1 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Runtime.CompilerServices; using Nethermind.Core; using Nethermind.Core.Crypto; @@ -66,8 +65,8 @@ public VirtualMachine( { ILogger logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _evm = logger.IsTrace - ? new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, logger) - : new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, logger); + ? new VirtualMachine(blockhashProvider, specProvider, logger) + : new VirtualMachine(blockhashProvider, specProvider, logger); } public TransactionSubstate Run(EvmState state, IWorldState worldState, ITxTracer txTracer) @@ -137,23 +136,20 @@ internal sealed class VirtualMachine : IVirtualMachine where TLogger : private readonly IBlockhashProvider _blockhashProvider; private readonly ISpecProvider _specProvider; private readonly ILogger _logger; - private IWorldState _state; + private IWorldState _state = null!; private readonly Stack _stateStack = new(); private (Address Address, bool ShouldDelete) _parityTouchBugAccount = (Address.FromNumber(3), false); private ReadOnlyMemory _returnDataBuffer = Array.Empty(); private ITxTracer _txTracer = NullTxTracer.Instance; - private readonly ICodeInfoRepository _codeInfoRepository; public VirtualMachine( IBlockhashProvider? blockhashProvider, ISpecProvider? specProvider, - ICodeInfoRepository codeInfoRepository, ILogger? logger) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _blockhashProvider = blockhashProvider ?? throw new ArgumentNullException(nameof(blockhashProvider)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); - _codeInfoRepository = codeInfoRepository ?? throw new ArgumentNullException(nameof(codeInfoRepository)); _chainId = ((UInt256)specProvider.ChainId).ToBigEndian(); } @@ -163,7 +159,9 @@ public TransactionSubstate Run(EvmState state, IWorldState worl _txTracer = txTracer; _state = worldState; - IReleaseSpec spec = _specProvider.GetSpec(state.Env.TxExecutionContext.BlockExecutionContext.Header.Number, state.Env.TxExecutionContext.BlockExecutionContext.Header.Timestamp); + TxExecutionContext txExecutionContext = state.Env.TxExecutionContext; + ICodeInfoRepository codeInfoRepository = txExecutionContext.CodeInfoRepository; + IReleaseSpec spec = _specProvider.GetSpec(txExecutionContext.BlockExecutionContext.Header.Number, txExecutionContext.BlockExecutionContext.Header.Timestamp); EvmState currentState = state; ReadOnlyMemory? previousCallResult = null; ZeroPaddedSpan previousCallOutput = ZeroPaddedSpan.Empty; @@ -337,7 +335,7 @@ public TransactionSubstate Run(EvmState state, IWorldState worl if (gasAvailableForCodeDeposit >= codeDepositGasCost && !invalidCode) { ReadOnlyMemory code = callResult.Output; - _codeInfoRepository.InsertCode(_state, code, callCodeOwner, spec); + codeInfoRepository.InsertCode(_state, code, callCodeOwner, spec); currentState.GasAvailable -= codeDepositGasCost; @@ -1306,7 +1304,7 @@ private CallResult ExecuteCode externalCode = txCtx.AuthorizedCode.GetCachedCodeInfo(_state, address, spec).MachineCode; + ReadOnlyMemory externalCode = txCtx.CodeInfoRepository.GetCachedCodeInfo(_state, address, spec).MachineCode; slice = externalCode.SliceWithZeroPadding(b, (int)result); vmState.Memory.Save(in a, in slice); if (typeof(TTracingInstructions) == typeof(IsTracing)) @@ -2113,7 +2111,7 @@ private EvmExceptionType InstructionCall( !UpdateMemoryCost(vmState, ref gasAvailable, in outputOffset, outputLength) || !UpdateGas(gasExtra, ref gasAvailable)) return EvmExceptionType.OutOfGas; - CodeInfo codeInfo = vmState.Env.TxExecutionContext.AuthorizedCode.GetCachedCodeInfo(_state, codeSource, spec); + CodeInfo codeInfo = vmState.Env.TxExecutionContext.CodeInfoRepository.GetCachedCodeInfo(_state, codeSource, spec); codeInfo.AnalyseInBackgroundIfRequired(); if (spec.Use63Over64Rule) @@ -2402,7 +2400,7 @@ private EvmExceptionType InstructionSelfDestruct(EvmState vmState, ref bool accountExists = _state.AccountExists(contractAddress); - if (accountExists && contractAddress.IsNonZeroAccount(spec, _codeInfoRepository, _state)) + if (accountExists && contractAddress.IsNonZeroAccount(spec, env.TxExecutionContext.CodeInfoRepository, _state)) { /* we get the snapshot before this as there is a possibility with that we will touch an empty account and remove it even if the REVERT operation follows */ if (typeof(TLogger) == typeof(IsTracing)) _logger.Trace($"Contract collision at {contractAddress}"); From 35276b63e8ae82fba225ca3d9d6d4c0dcdfd6c81 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Fri, 28 Jun 2024 10:10:20 +0200 Subject: [PATCH 293/551] simplify code --- .../Nethermind.Consensus/Processing/RecoverSignature.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index f54e0a5e6e9..0b18cac4312 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -127,12 +127,7 @@ void RecoverAuthority(AuthorizationTuple tuple) if (tx.AuthorizationList.Length >= 4) { - Parallel.ForEach( - tx.AuthorizationList, - tuple => - { - RecoverAuthority(tuple); - }); + Parallel.ForEach(tx.AuthorizationList, RecoverAuthority); } else { From ff5a88d643b1e8924ab023ad3c363aa134b982b2 Mon Sep 17 00:00:00 2001 From: ak88 Date: Sat, 29 Jun 2024 00:37:32 +0200 Subject: [PATCH 294/551] refactor and recover authority in tx pool --- .../Processing/RecoverSignature.cs | 16 +++----- .../Validators/TxValidator.cs | 4 +- .../Crypto/EthereumEcdsaTests.cs | 35 ++++++++++++++++ src/Nethermind/Nethermind.Core/Address.cs | 2 + .../Nethermind.Core/AuthorizationTuple.cs | 33 +++++++++++++++ .../Nethermind.Crypto/EthereumEcdsa.cs | 12 ++++++ .../Nethermind.Crypto/IEthereumEcdsa.cs | 1 + .../Nethermind.Crypto/NullEthereumEcdsa.cs | 5 +++ .../AuthorizedCodeInfoRepository.cs | 32 +++------------ .../OptimismEthereumEcdsa.cs | 2 + .../Nethermind.TxPool/AcceptTxResult.cs | 5 +++ .../Filters/RecoverAuthorityFilter.cs | 40 +++++++++++++++++++ src/Nethermind/Nethermind.TxPool/TxPool.cs | 1 + 13 files changed, 148 insertions(+), 40 deletions(-) create mode 100644 src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 0b18cac4312..b7b79ae36a1 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -109,15 +109,6 @@ public void RecoverData(Block block) if (releaseSpec.IsAuthorizationListEnabled) { - void RecoverAuthority(AuthorizationTuple tuple) - { - Span msg = stackalloc byte[128]; - msg[0] = Eip7702Constants.Magic; - RlpStream rlpStream = _authorizationTupleDecoder.EncodeWithoutSignature(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); - rlpStream.Data.AsSpan().CopyTo(msg.Slice(1)); - tuple.Authority = _ecdsa.RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(msg.Slice(0, rlpStream.Data.Length + 1))); - } - foreach (Transaction tx in block.Transactions.AsSpan()) { if (!tx.HasAuthorizationList) @@ -127,13 +118,16 @@ void RecoverAuthority(AuthorizationTuple tuple) if (tx.AuthorizationList.Length >= 4) { - Parallel.ForEach(tx.AuthorizationList, RecoverAuthority); + Parallel.ForEach(tx.AuthorizationList, (tuple) => + { + tuple.Authority = _ecdsa.RecoverAddress(tuple); + }); } else { foreach (AuthorizationTuple tuple in tx.AuthorizationList.AsSpan()) { - RecoverAuthority(tuple); + tuple.Authority = _ecdsa.RecoverAddress(tuple); } } } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 363fa0a9a40..52daeeaca05 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -48,7 +48,7 @@ public bool IsWellFormed(Transaction transaction, IReleaseSpec releaseSpec, out && ValidateWithError(Validate1559GasFields(transaction, releaseSpec), TxErrorMessages.InvalidMaxPriorityFeePerGas, ref error) && ValidateWithError(Validate3860Rules(transaction, releaseSpec), TxErrorMessages.ContractSizeTooBig, ref error) && Validate4844Fields(transaction, ref error) - && Validate7702Field(transaction, ref error); + && ValidateAuthorityList(transaction, ref error); } private static bool Validate3860Rules(Transaction transaction, IReleaseSpec releaseSpec) => @@ -294,7 +294,7 @@ private static bool Validate4844Fields(Transaction transaction, ref string? erro return true; } - private bool Validate7702Field(Transaction tx, ref string error) + private bool ValidateAuthorityList(Transaction tx, ref string error) { if (tx.Type != TxType.SetCode) { diff --git a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs index 2c6fa87d3e5..aeb32b08131 100644 --- a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs @@ -1,10 +1,15 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Collections.Generic; +using System.Net; +using Nethermind.Core.Crypto; using Nethermind.Core.Test.Builders; using Nethermind.Crypto; +using Nethermind.Int256; using Nethermind.Logging; +using Nethermind.Serialization.Rlp; using NUnit.Framework; namespace Nethermind.Core.Test.Crypto @@ -73,5 +78,35 @@ public void Sign_generic_network() Address? address = ecdsa.RecoverAddress(tx); Assert.That(address, Is.EqualTo(key.Address)); } + + public static IEnumerable AuthorityTupleTestCaseSources() + { + yield return CreateAuthorizationTuple(ulong.MaxValue, Build.A.Address.TestObjectInternal, UInt256.MaxValue); + yield return CreateAuthorizationTuple(1, Address.Zero, null); + } + + [TestCaseSource(nameof(AuthorityTupleTestCaseSources))] + public void RecoverAddress_AuthorizationTupleOfDifferentSize_RecoversAddressCorrectly(AuthorizationTuple authorization) + { + EthereumEcdsa ecdsa = new(BlockchainIds.GenericNonRealNetwork, LimboLogs.Instance); + + Address? authority = ecdsa.RecoverAddress(authorization); + + Assert.That(authority, Is.EqualTo(authorization.Authority)); + } + + private static AuthorizationTuple CreateAuthorizationTuple(ulong chainId, Address codeAddress, UInt256? nonce) + { + AuthorizationTupleDecoder decoder = new(); + RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); + Span code = stackalloc byte[rlp.Length + 1]; + code[0] = Eip7702Constants.Magic; + rlp.Data.AsSpan().CopyTo(code.Slice(1)); + EthereumEcdsa ecdsa = new(1, new OneLoggerLogManager(NullLogger.Instance)); + PrivateKey signer = Build.A.PrivateKey.TestObject; + Signature sig = ecdsa.Sign(signer, Keccak.Compute(code)); + + return new AuthorizationTuple(chainId, codeAddress, nonce, sig, signer.Address); + } } } diff --git a/src/Nethermind/Nethermind.Core/Address.cs b/src/Nethermind/Nethermind.Core/Address.cs index 3cdab2947f8..0877e55a873 100644 --- a/src/Nethermind/Nethermind.Core/Address.cs +++ b/src/Nethermind/Nethermind.Core/Address.cs @@ -30,6 +30,8 @@ public class Address : IEquatable
, IComparable
private const int PrefixedHexCharsCount = 2 + HexCharsCount; // 0x5a4eab120fb44eb6684e5e32785702ff45ea344d public static Address Zero { get; } = new(new byte[Size]); + public static Address MaxValue { get; } = new("0xffffffffffffffffffffffffffffffffffffffff"); + public const string SystemUserHex = "0xfffffffffffffffffffffffffffffffffffffffe"; public static Address SystemUser { get; } = new(SystemUserHex); diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 8997d274c05..be742d3499c 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -4,7 +4,9 @@ using Nethermind.Core.Crypto; using Nethermind.Crypto; using Nethermind.Int256; +using Nethermind.Logging; using System; +using System.Diagnostics.CodeAnalysis; namespace Nethermind.Core; public class AuthorizationTuple( @@ -33,4 +35,35 @@ public AuthorizationTuple( /// may be recovered at a later point. ///
public Address? Authority { get; set; } = authority; + + /// + /// Determines if this is wellformed according to spec. + /// + /// + /// + /// + /// + /// When has not been set. + public bool IsWellformed(IAccountStateProvider accountStateProvider, ulong chainId, [NotNullWhen(false)] out string? error) + { + if (Authority is null) + throw new InvalidOperationException($"Cannot determine correctness when {nameof(Authority)} is null."); + if (ChainId != 0 && chainId != ChainId) + { + error = $"Chain id ({ChainId}) does not match."; + return false; + } + if (accountStateProvider.HasCode(Authority)) + { + error = $"Authority ({Authority}) has code deployed."; + return false; + } + if (Nonce is not null && accountStateProvider.GetNonce(Authority) != Nonce) + { + error = $"Skipping tuple in authorization_list because authority ({Authority}) nonce ({Nonce}) does not match."; + return false; + } + error = null; + return true; + } } diff --git a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs index 48eeb1d07be..e105c94c2a7 100644 --- a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.IO; using System.Numerics; +using System.Runtime.CompilerServices; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Logging; @@ -26,6 +27,7 @@ public class EthereumEcdsa : Ecdsa, IEthereumEcdsa BigInteger.Parse("00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", NumberStyles.HexNumber); + private readonly AuthorizationTupleDecoder _tupleDecoder = new(); private readonly ulong _chainIdValue; private readonly ILogger _logger; @@ -107,6 +109,16 @@ public bool Verify(Address sender, Transaction tx) return RecoverAddress(tx.Signature, hash); } + [SkipLocalsInit] + public Address? RecoverAddress(AuthorizationTuple tuple) + { + Span buffer = stackalloc byte[128]; + buffer[0] = Eip7702Constants.Magic; + RlpStream stream = _tupleDecoder.EncodeWithoutSignature(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); + stream.Data.AsSpan().CopyTo(buffer.Slice(1)); + return RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(buffer.Slice(0, stream.Data.Length + 1))); + } + public static ulong CalculateV(ulong chainId, bool addParity = true) => chainId * 2 + 35ul + (addParity ? 1u : 0u); public Address? RecoverAddress(Signature signature, Hash256 message) diff --git a/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs index 2c72540a705..d29e2549412 100644 --- a/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs @@ -11,6 +11,7 @@ public interface IEthereumEcdsa : IEcdsa { void Sign(PrivateKey privateKey, Transaction tx, bool isEip155Enabled = true); Address? RecoverAddress(Transaction tx, bool useSignatureChainId = false); + Address? RecoverAddress(AuthorizationTuple tuple); Address? RecoverAddress(Signature signature, Hash256 message); Address? RecoverAddress(Span signatureBytes, Hash256 message); bool Verify(Address sender, Transaction tx); diff --git a/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs index fade56407c5..077613e1d9c 100644 --- a/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs @@ -54,5 +54,10 @@ public bool Verify(Address sender, Transaction tx) { throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); } + + public Address? RecoverAddress(AuthorizationTuple tuple) + { + throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); + } } } diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index e71cf1e961b..b0e2c97b74a 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -73,41 +73,19 @@ public void InsertFromAuthorizations( foreach (AuthorizationTuple? authTuple in authorizations) { if (authTuple is null) - { - continue; - } - if (authTuple.ChainId != 0 && _chainId != authTuple.ChainId) - { - if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because chain id ({authTuple.ChainId}) does not match."); continue; - } + authTuple.Authority = authTuple.Authority ?? _ethereumEcdsa.RecoverAddress(authTuple); - Address authority = authTuple.Authority ?? RecoverAuthority(authTuple); - CodeInfo authorityCodeInfo = _codeInfoRepository.GetCachedCodeInfo(worldState, authority, spec); - if (authorityCodeInfo.MachineCode.Length > 0) - { - if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) has code deployed."); - continue; - } - if (authTuple.Nonce is not null && worldState.GetNonce(authority) != authTuple.Nonce) + string? error; + if (!authTuple.IsWellformed(worldState, _chainId, out error)) { - if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list because authority ({authority}) nonce ({authTuple.Nonce}) does not match."); + if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list: {error}"); continue; } - - //TODO should we do insert if code is empty? - CopyCodeAndOverwrite(worldState, authTuple.CodeAddress, authority, spec); + CopyCodeAndOverwrite(worldState, authTuple.CodeAddress, authTuple.Authority, spec); } } - private Address RecoverAuthority(AuthorizationTuple authTuple) - { - Span encoded = _internalBuffer.AsSpan(); - RlpStream stream = _authorizationTupleDecoder.EncodeWithoutSignature(authTuple.ChainId, authTuple.CodeAddress, authTuple.Nonce); - stream.Data.AsSpan().CopyTo(encoded.Slice(1)); - return _ethereumEcdsa.RecoverAddress(authTuple.AuthoritySignature, Keccak.Compute(encoded.Slice(0, stream.Data.Length + 1))); - } - public void ClearAuthorizations() { _authorizedCode.Clear(); diff --git a/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs b/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs index f70db353bf7..fcdb39e95ac 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs @@ -33,4 +33,6 @@ public OptimismEthereumEcdsa(IEthereumEcdsa ethereumEcdsa) public Address? RecoverAddress(Span signatureBytes, Hash256 message) => _ethereumEcdsa.RecoverAddress(signatureBytes, message); public bool Verify(Address sender, Transaction tx) => _ethereumEcdsa.Verify(sender, tx); + + public Address? RecoverAddress(AuthorizationTuple tuple) => _ethereumEcdsa.RecoverAddress(tuple); } diff --git a/src/Nethermind/Nethermind.TxPool/AcceptTxResult.cs b/src/Nethermind/Nethermind.TxPool/AcceptTxResult.cs index f8a0033dfe7..d0f7fe36598 100644 --- a/src/Nethermind/Nethermind.TxPool/AcceptTxResult.cs +++ b/src/Nethermind/Nethermind.TxPool/AcceptTxResult.cs @@ -90,6 +90,11 @@ namespace Nethermind.TxPool ///
public static readonly AcceptTxResult NotSupportedTxType = new(15, nameof(NotSupportedTxType)); + /// + /// Ignores transactions if authority in authority_list is unresolvable + /// + public static readonly AcceptTxResult FailedToResolveAuthority = new(16, nameof(FailedToResolveAuthority)); + private int Id { get; } private string Code { get; } private string? Message { get; } diff --git a/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs b/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs new file mode 100644 index 00000000000..9e0294f1f09 --- /dev/null +++ b/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs @@ -0,0 +1,40 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Crypto; +using Nethermind.Logging; + +namespace Nethermind.TxPool.Filters +{ + /// + /// Will recover authority from transactions with authority_list and filter any with bad signatures. + /// /// + internal sealed class RecoverAuthorityFilter(IEthereumEcdsa ecdsa, ILogger logger) : IIncomingTxFilter + { + public AcceptTxResult Accept(Transaction tx, ref TxFilteringState state, TxHandlingOptions handlingOptions) + { + if (!tx.HasAuthorizationList) + return AcceptTxResult.Accepted; + + Metrics.PendingTransactionsWithExpensiveFiltering++; + + foreach (AuthorizationTuple tuple in tx.AuthorizationList!) + { + if (tuple is null) + { + //Should not happen in production + continue; + } + tuple.Authority ??= ecdsa.RecoverAddress(tuple); + if (tuple.Authority is null) + { + if (logger.IsTrace) logger.Trace($"Skipped adding transaction because of bad authority signature {tx.ToString(" ")}"); + return AcceptTxResult.FailedToResolveAuthority; + } + } + + return AcceptTxResult.Accepted; + } + } +} diff --git a/src/Nethermind/Nethermind.TxPool/TxPool.cs b/src/Nethermind/Nethermind.TxPool/TxPool.cs index 015a7a7d310..c48e7b99695 100644 --- a/src/Nethermind/Nethermind.TxPool/TxPool.cs +++ b/src/Nethermind/Nethermind.TxPool/TxPool.cs @@ -141,6 +141,7 @@ public TxPool(IEthereumEcdsa ecdsa, new LowNonceFilter(_logger), // has to be after UnknownSenderFilter as it uses sender new FutureNonceFilter(txPoolConfig), new GapNonceFilter(_transactions, _blobTransactions, _logger), + new RecoverAuthorityFilter(ecdsa, _logger), }; if (incomingTxFilter is not null) From 7efa123a26a3b7f4cf7aef88dc169249df3c0f11 Mon Sep 17 00:00:00 2001 From: ak88 Date: Sat, 29 Jun 2024 13:17:05 +0200 Subject: [PATCH 295/551] unit test fix --- .../Nethermind.Core/AuthorizationTuple.cs | 2 +- .../AuthorizedCodeInfoRepositoryTests.cs | 14 +++++++------- .../Nethermind.Evm/AuthorizedCodeInfoRepository.cs | 3 +-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index be742d3499c..c8f25804f3a 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -44,7 +44,7 @@ public AuthorizationTuple( /// /// /// When has not been set. - public bool IsWellformed(IAccountStateProvider accountStateProvider, ulong chainId, [NotNullWhen(false)] out string? error) + public bool IsValidForExecution(IAccountStateProvider accountStateProvider, ulong chainId, [NotNullWhen(false)] out string? error) { if (Authority is null) throw new InvalidOperationException($"Cannot determine correctness when {nameof(Authority)} is null."); diff --git a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs index 23784615abf..4438c9fcdca 100644 --- a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs @@ -75,16 +75,16 @@ public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_Inserts public void InsertFromAuthorizations_AuthorityHasCode_NoCodeIsInserted() { PrivateKey authority = TestItem.PrivateKeyA; - ICodeInfoRepository mockCodeRepository = Substitute.For(); - mockCodeRepository - .GetCachedCodeInfo(Arg.Any(), authority.Address, Arg.Any()) - .Returns(new CodeInfo([(byte)0x0])); - AuthorizedCodeInfoRepository sut = new(mockCodeRepository, 1, NullLogger.Instance); + Address codeSource = TestItem.AddressB; + IWorldState mockWorldState = Substitute.For(); + mockWorldState.HasCode(authority.Address).Returns(true); + AuthorizedCodeInfoRepository sut = new(Substitute.For(), 1, NullLogger.Instance); var tuples = new[] { - CreateAuthorizationTuple(authority, 1, TestItem.AddressB, (UInt256)0), + CreateAuthorizationTuple(authority, 1, codeSource, (UInt256)0), }; - sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + + sut.InsertFromAuthorizations(mockWorldState, tuples, Substitute.For()); sut.AuthorizedAddresses.Count().Should().Be(0); } diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index b0e2c97b74a..10ec13c5bcb 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -17,7 +17,6 @@ public class AuthorizedCodeInfoRepository : ICodeInfoRepository { public IEnumerable
AuthorizedAddresses => _authorizedCode.Keys; private readonly Dictionary _authorizedCode = new(); - private readonly AuthorizationTupleDecoder _authorizationTupleDecoder = new(); private readonly EthereumEcdsa _ethereumEcdsa; private readonly ICodeInfoRepository _codeInfoRepository; private readonly ulong _chainId; @@ -77,7 +76,7 @@ public void InsertFromAuthorizations( authTuple.Authority = authTuple.Authority ?? _ethereumEcdsa.RecoverAddress(authTuple); string? error; - if (!authTuple.IsWellformed(worldState, _chainId, out error)) + if (!authTuple.IsValidForExecution(worldState, _chainId, out error)) { if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list: {error}"); continue; From 3daf9fb113ccb06572f41817572ee267e2313468 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 3 Jul 2024 10:15:54 +0200 Subject: [PATCH 296/551] bad sig will skip and not throw --- .../Core/AuthorizedCodeInfoRepository.cs | 4 +--- .../Nethermind.Core.Test/Builders/TransactionBuilder.cs | 2 +- src/Nethermind/Nethermind.Core/AuthorizationTuple.cs | 6 ++++-- .../Nethermind.Evm/AuthorizedCodeInfoRepository.cs | 1 - src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs | 2 +- .../Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs | 8 +------- src/Nethermind/Nethermind.TxPool/TxPool.cs | 2 +- 7 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs index 876ab11fbd4..d65147dec71 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs @@ -50,12 +50,10 @@ public void GlobalSetup() var list = new List(); var rnd = new Random(); var addressBuffer = new byte[20]; - var keyBuffer = new byte[32]; for (int i = 0; i < 1000; i++) { rnd.NextBytes(addressBuffer); - rnd.NextBytes(keyBuffer); - var signer = new PrivateKey(keyBuffer); + PrivateKey signer = Build.A.PrivateKey.TestObject; list.Add(CreateAuthorizationTuple( signer, 1, diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index a8c9e1968f9..9b2092310fb 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -220,7 +220,7 @@ public TransactionBuilder WithShardBlobTxTypeAndFields(int blobCount = 1, boo return this; } - public TransactionBuilder WithAuthorizationCodeIfAuthorizationListType() + public TransactionBuilder WithAuthorizationCodeIfAuthorizationListTx() { return TestObjectInternal.Type == TxType.SetCode ? WithAuthorizationCode(new AuthorizationTuple(0, Address.Zero, 0, new Signature(new byte[64], 0))) : this; } diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index c8f25804f3a..9a0bac86def 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -43,11 +43,13 @@ public AuthorizationTuple( /// /// /// - /// When has not been set. public bool IsValidForExecution(IAccountStateProvider accountStateProvider, ulong chainId, [NotNullWhen(false)] out string? error) { if (Authority is null) - throw new InvalidOperationException($"Cannot determine correctness when {nameof(Authority)} is null."); + { + error = "Bad signature."; + return false; + } if (ChainId != 0 && chainId != ChainId) { error = $"Chain id ({ChainId}) does not match."; diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs index 10ec13c5bcb..b89ef877348 100644 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs @@ -8,7 +8,6 @@ using Nethermind.State; using System; using System.Collections.Generic; -using Nethermind.Serialization.Rlp; using Nethermind.Logging; using Nethermind.Crypto; diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index 294540de3dd..7e8291e932d 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1674,7 +1674,7 @@ public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType .WithNonce(0) .WithType(txType) .WithShardBlobTxTypeAndFieldsIfBlobTx() - .WithAuthorizationCodeIfAuthorizationListType() + .WithAuthorizationCodeIfAuthorizationListTx() .WithMaxFeePerGas(9.GWei()) .WithMaxPriorityFeePerGas(9.GWei()) .WithGasLimit(txType != TxType.SetCode ? GasCostOf.Transaction : GasCostOf.Transaction + GasCostOf.PerAuthBaseCost) diff --git a/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs b/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs index 9e0294f1f09..c453ec659cd 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs @@ -3,14 +3,13 @@ using Nethermind.Core; using Nethermind.Crypto; -using Nethermind.Logging; namespace Nethermind.TxPool.Filters { /// /// Will recover authority from transactions with authority_list and filter any with bad signatures. /// /// - internal sealed class RecoverAuthorityFilter(IEthereumEcdsa ecdsa, ILogger logger) : IIncomingTxFilter + internal sealed class RecoverAuthorityFilter(IEthereumEcdsa ecdsa) : IIncomingTxFilter { public AcceptTxResult Accept(Transaction tx, ref TxFilteringState state, TxHandlingOptions handlingOptions) { @@ -27,11 +26,6 @@ public AcceptTxResult Accept(Transaction tx, ref TxFilteringState state, TxHandl continue; } tuple.Authority ??= ecdsa.RecoverAddress(tuple); - if (tuple.Authority is null) - { - if (logger.IsTrace) logger.Trace($"Skipped adding transaction because of bad authority signature {tx.ToString(" ")}"); - return AcceptTxResult.FailedToResolveAuthority; - } } return AcceptTxResult.Accepted; diff --git a/src/Nethermind/Nethermind.TxPool/TxPool.cs b/src/Nethermind/Nethermind.TxPool/TxPool.cs index c48e7b99695..cbcbf4a1009 100644 --- a/src/Nethermind/Nethermind.TxPool/TxPool.cs +++ b/src/Nethermind/Nethermind.TxPool/TxPool.cs @@ -141,7 +141,7 @@ public TxPool(IEthereumEcdsa ecdsa, new LowNonceFilter(_logger), // has to be after UnknownSenderFilter as it uses sender new FutureNonceFilter(txPoolConfig), new GapNonceFilter(_transactions, _blobTransactions, _logger), - new RecoverAuthorityFilter(ecdsa, _logger), + new RecoverAuthorityFilter(ecdsa), }; if (incomingTxFilter is not null) From eb84a1d877bb944c6d30a9a030cb9570d30fd6e7 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 24 Jul 2024 23:11:33 +0200 Subject: [PATCH 297/551] eip 7702 timestamp --- .../Nethermind.Specs/ChainSpecStyle/ChainParameters.cs | 1 + .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 1 + .../Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs | 1 + 3 files changed, 3 insertions(+) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs index d3f5c970570..9761eefaca6 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs @@ -120,6 +120,7 @@ public class ChainParameters public ulong? Eip2935TransitionTimestamp { get; set; } public Address Eip2935ContractAddress { get; set; } public ulong? Rip7212TransitionTimestamp { get; set; } + public ulong? Eip7702TransitionTimestamp { get; set; } #region EIP-4844 parameters /// diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 068c4d19365..c3ef15e6a1b 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -143,6 +143,7 @@ bool GetForInnerPathExistence(KeyValuePair o) => Eip6780TransitionTimestamp = chainSpecJson.Params.Eip6780TransitionTimestamp, Rip7212TransitionTimestamp = chainSpecJson.Params.Rip7212TransitionTimestamp, Eip4788TransitionTimestamp = chainSpecJson.Params.Eip4788TransitionTimestamp, + Eip7702TransitionTimestamp = chainSpecJson.Params.Eip7702TransitionTimestamp, Eip4788ContractAddress = chainSpecJson.Params.Eip4788ContractAddress ?? Eip4788Constants.BeaconRootsAddress, Eip2935TransitionTimestamp = chainSpecJson.Params.Eip2935TransitionTimestamp, Eip2935ContractAddress = chainSpecJson.Params.Eip2935ContractAddress ?? Eip2935Constants.BlockHashHistoryAddress, diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs index 499022ca0c6..8f16193e8e7 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs @@ -148,4 +148,5 @@ internal class ChainSpecParamsJson public UInt256? Eip4844MinBlobGasPrice { get; set; } public ulong? Eip4844TargetBlobGasPerBlock { get; set; } public ulong? Rip7212TransitionTimestamp { get; set; } + public ulong? Eip7702TransitionTimestamp { get; set; } } From 182b67bc801faa6683cad90f24b3cfc051d9c4b0 Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Thu, 25 Jul 2024 01:40:13 +0300 Subject: [PATCH 298/551] set the actual value of IsEip7702Enabled --- .../ChainSpecStyle/ChainSpecBasedSpecProvider.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index d0b3805a52f..b098d0793ee 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -254,6 +254,8 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip2935Enabled = (chainSpec.Parameters.Eip2935TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip2935ContractAddress = chainSpec.Parameters.Eip2935ContractAddress; + releaseSpec.IsEip7702Enabled = (chainSpec.Parameters.Eip7702TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; + return releaseSpec; } From 3ff660544368f721a644852e8468265e00119bcc Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Thu, 25 Jul 2024 01:46:10 +0300 Subject: [PATCH 299/551] add test tp chainspec tests to make sure it is loaded --- .../ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs index 734b84f298f..5c847cdc750 100644 --- a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs @@ -708,7 +708,9 @@ public void Eip_transitions_loaded_correctly() Eip3855TransitionTimestamp = 1000000012, Eip3860TransitionTimestamp = 1000000012, Eip1153TransitionTimestamp = 1000000024, - Eip2537TransitionTimestamp = 1000000024 + Eip2537TransitionTimestamp = 1000000024, + + Eip7702TransitionTimestamp = 1000000032, } }; @@ -787,6 +789,7 @@ void TestTransitions(ForkActivation activation, Action changes) r.IsEip3860Enabled = true; }); TestTransitions((40001L, 1000000024), r => { r.IsEip1153Enabled = r.IsEip2537Enabled = true; }); + TestTransitions((40001L, 1000000032), r => { r.IsEip7702Enabled = true; }); } [TestCaseSource(nameof(BlockNumbersAndTimestampsNearForkActivations))] From 050fe471ca4a469742b41050f4f647a4ac782bd6 Mon Sep 17 00:00:00 2001 From: ak88 Date: Sat, 27 Jul 2024 11:09:09 +0200 Subject: [PATCH 300/551] Validate nonce then increment after 7702 --- .../Nethermind.Core/AuthorizationTuple.cs | 6 ++++-- .../TransactionProcessorEip7702Tests.cs | 6 +++--- .../TransactionProcessor.cs | 16 ++++++++++------ .../OptimismTransactionProcessor.cs | 9 ++++----- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 9a0bac86def..ae980e7afb0 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -60,9 +60,11 @@ public bool IsValidForExecution(IAccountStateProvider accountStateProvider, ulon error = $"Authority ({Authority}) has code deployed."; return false; } - if (Nonce is not null && accountStateProvider.GetNonce(Authority) != Nonce) + + UInt256 authNonce = accountStateProvider.GetNonce(Authority); + if (Nonce is not null && authNonce != Nonce) { - error = $"Skipping tuple in authorization_list because authority ({Authority}) nonce ({Nonce}) does not match."; + error = $"Skipping tuple in authorization_list because nonce is set to {Nonce}, but authority ({Authority}) has {authNonce}."; return false; } error = null; diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index f084a53e597..3ca91acf9c6 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -120,9 +120,9 @@ public static IEnumerable SenderSignerCases() yield return new object[] { TestItem.PrivateKeyA, TestItem.PrivateKeyA }; } [TestCaseSource(nameof(SenderSignerCases))] - public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_SenderAddressIsSaved(PrivateKey sender, PrivateKey signer) + public void Execute_SenderAndSignerCombinationsWithCodeThatSavesCallerAddress_SenderAddressIsSaved(PrivateKey sender, PrivateKey signer) { - Address codeSource = TestItem.AddressB; + Address codeSource = TestItem.AddressC; _stateProvider.CreateAccount(sender.Address, 1.Ether()); //Save caller in storage slot 0 byte[] code = Prepare.EvmCode @@ -136,7 +136,7 @@ public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_ .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) + .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, 0)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index f205d8dc45d..f9c2e51d896 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -127,12 +127,9 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (!(result = ValidateSender(tx, header, spec, tracer, opts))) return result; if (!(result = BuyGas(tx, header, spec, tracer, opts, effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment))) return result; - if (!(result = IncrementNonce(tx, header, spec, tracer, opts))) return result; - - if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); + if (!(result = ValidateNonce(tx))) return result; ICodeInfoRepository codeInfoRepository = _codeInfoRepository; - if (spec.IsEip7702Enabled) { _authorizedCodeInfoRepository ??= new(codeInfoRepository, SpecProvider.ChainId, Logger); @@ -145,6 +142,10 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon } } + IncrementNonce(tx, header, spec, tracer, opts); + + if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); + ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, codeInfoRepository); long gasAvailable = tx.GasLimit - intrinsicGas; @@ -400,7 +401,7 @@ protected virtual TransactionResult BuyGas(Transaction tx, BlockHeader header, I return TransactionResult.Ok; } - protected virtual TransactionResult IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) + protected virtual TransactionResult ValidateNonce(Transaction tx) { if (tx.IsSystem()) return TransactionResult.Ok; @@ -409,9 +410,12 @@ protected virtual TransactionResult IncrementNonce(Transaction tx, BlockHeader h TraceLogInvalidTx(tx, $"WRONG_TRANSACTION_NONCE: {tx.Nonce} (expected {WorldState.GetNonce(tx.SenderAddress)})"); return "wrong transaction nonce"; } + return TransactionResult.Ok; + } + protected virtual void IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) + { WorldState.IncrementNonce(tx.SenderAddress); - return TransactionResult.Ok; } protected ExecutionEnvironment BuildExecutionEnvironment( diff --git a/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs index aa71d1fae45..ea2c0209c61 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs @@ -131,13 +131,12 @@ protected override TransactionResult BuyGas(Transaction tx, BlockHeader header, return TransactionResult.Ok; } - protected override TransactionResult IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) + protected override TransactionResult ValidateNonce(Transaction tx) { - if (!tx.IsDeposit()) - return base.IncrementNonce(tx, header, spec, tracer, opts); + if (tx.IsDeposit()) + return TransactionResult.Ok; - WorldState.IncrementNonce(tx.SenderAddress!); - return TransactionResult.Ok; + return base.ValidateNonce(tx); } protected override TransactionResult ValidateSender(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) => From 78a82b5973069b8aefc8b732e4f5b89861fa37b2 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 31 Jul 2024 11:58:27 +0200 Subject: [PATCH 301/551] decode rlp auth list fix --- src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs index 2a2302899fb..41642a2ceca 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs @@ -319,7 +319,7 @@ private static void DecodeShardBlobNetworkPayload(T transaction, ref Rlp.ValueDe private void DecodeAuthorizationListWithoutSig(T transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors) { DecodeEip1559PayloadWithoutSig(transaction, ref decoderContext, rlpBehaviors); - transaction.AuthorizationList = decoderContext.DecodeArray(_authTupleDecoder, !rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)); + transaction.AuthorizationList = decoderContext.DecodeArray(_authTupleDecoder); } private static void DecodeDepositPayloadWithoutSig(T transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors) From ff9e4cdfb1fcc895a1c817155ce7aa856c3f96d4 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 12 Sep 2024 16:23:12 +0200 Subject: [PATCH 302/551] fix whitespaces --- .../Nethermind.Core.Test/Blockchain/TestBlockchain.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 56d0a9c350f..1e1f25d4218 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -378,7 +378,8 @@ protected virtual IBlockProcessor CreateBlockProcessor() => new BlockProcessor.BlockValidationTransactionsExecutor(TxProcessor, State), State, ReceiptStorage, - TxProcessor,new BeaconBlockRootHandler(TxProcessor), + TxProcessor, + new BeaconBlockRootHandler(TxProcessor), new BlockhashStore(SpecProvider, State), LogManager, preWarmer: CreateBlockCachePreWarmer(), From 8557a109dbf9f9b292bde3d9577bc080d6c52466 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 12 Sep 2024 16:27:11 +0200 Subject: [PATCH 303/551] fix benchmarks.sln build --- src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs | 5 ++--- src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs | 3 +-- .../Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs | 3 +-- .../Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs | 3 +-- .../Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs | 3 ++- 5 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs index 6439ad99612..ba62c18508e 100644 --- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs @@ -170,10 +170,9 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider), stateProvider, receiptStorage, - new BlockhashStore(specProvider, stateProvider), + transactionProcessor, new BeaconBlockRootHandler(transactionProcessor), - new BlockhashStore(blockTree, specProvider, stateProvider), - txProcessor, + new BlockhashStore(specProvider, stateProvider), _logManager); IBlockchainProcessor blockchainProcessor = new BlockchainProcessor( diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs index 4399d6eaca1..fd31df6fa0c 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs @@ -56,8 +56,7 @@ public void GlobalSetup() value: 0, transferValue: 0, txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), - inputData: default, - isSystemExecutionEnv: false + inputData: default ); _evmState = new EvmState(long.MaxValue, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs index 9f400db12dc..3a45a79026b 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs @@ -88,8 +88,7 @@ public void GlobalSetup() value: 0, transferValue: 0, txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), - inputData: default, - isSystemExecutionEnv: false + inputData: default ); _evmState = new EvmState(100_000_000L, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs index ca0bad688ec..c0f3e229c4f 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs @@ -99,8 +99,7 @@ public void GlobalSetup() value: 0, transferValue: 0, txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), - inputData: default, - isSystemExecutionEnv: false + inputData: default ); _evmState = new EvmState(100_000_000L, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs index 6e2270e2446..fc14ad0f119 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs @@ -102,8 +102,9 @@ TransactionProcessor transactionProcessor transactionsExecutor, stateProvider, NullReceiptStorage.Instance, - new BlockhashStore(specProvider, stateProvider), + transactionProcessor, new BeaconBlockRootHandler(transactionProcessor), + new BlockhashStore(specProvider, stateProvider), LimboLogs.Instance); EthereumEcdsa ecdsa = new(specProvider.ChainId); From 03e4997fb4dd4dfe63b0c17218700ad3f1146d97 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 12 Sep 2024 17:03:21 +0200 Subject: [PATCH 304/551] fix tests --- .../Ethereum.Test.Base/GeneralTestBase.cs | 2 +- .../Ethereum.Test.Base/JsonToEthereumTest.cs | 2 - .../Blockchain/TestBlockchain.cs | 3 ++ .../Modules/Proof/ProofRpcModuleTests.cs | 42 +++++++++---------- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index ea953373894..99faa058359 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -179,7 +179,7 @@ private static void InitializeTestState(GeneralStateTest test, WorldState stateP } stateProvider.CreateAccount(accountState.Key, accountState.Value.Balance); - stateProvider.InsertCode(accountState.Key, accountState.Value.Code, specProvider.GenesisSpec, false); + stateProvider.InsertCode(accountState.Key, accountState.Value.Code, specProvider.GenesisSpec); stateProvider.SetNonce(accountState.Key, accountState.Value.Nonce); } diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index 5e33bde1488..8ac509a9672 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -208,7 +208,6 @@ public static IEnumerable Convert(string name, GeneralStateTes } List blockchainTests = new(); - Console.WriteLine($"Loaded {testJson}"); foreach (KeyValuePair postStateBySpec in testJson.Post) { int iterationNumber = 0; @@ -292,7 +291,6 @@ public static IEnumerable Convert(string json) List tests = new(); foreach (KeyValuePair namedTest in testsInFile) { - Console.WriteLine($"Loading {namedTest.Key}\n {namedTest.Value.Post}"); tests.AddRange(Convert(namedTest.Key, namedTest.Value)); } diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 1e1f25d4218..e1c13e5f6b6 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -359,6 +359,9 @@ protected virtual Block GetGenesisBlock() genesisBlockBuilder.WithParentBeaconBlockRoot(Keccak.Zero); } + if (SpecProvider.GenesisSpec.ConsensusRequestsEnabled) + genesisBlockBuilder.WithConsensusRequests(0); + genesisBlockBuilder.WithStateRoot(State.StateRoot); return genesisBlockBuilder.TestObject; } diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index 9d5fea089a8..7f74b75145a 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -362,7 +362,7 @@ public async Task Can_call_with_storage_load() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -375,7 +375,7 @@ public async Task Can_call_with_many_storage_loads() .Op(Instruction.SLOAD) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -388,7 +388,7 @@ public async Task Can_call_with_storage_write() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -402,7 +402,7 @@ public async Task Can_call_with_extcodecopy() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -416,7 +416,7 @@ public async Task Can_call_with_extcodecopy_to_system_account() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -427,7 +427,7 @@ public async Task Can_call_with_extcodesize() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -438,7 +438,7 @@ public async Task Can_call_with_extcodesize_to_system_account() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -450,7 +450,7 @@ public async Task Can_call_with_extcodehash() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -462,7 +462,7 @@ public async Task Can_call_with_extcodehash_to_system_account() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -473,7 +473,7 @@ public async Task Can_call_with_just_basic_addresses() .Op(Instruction.STOP) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -486,7 +486,7 @@ public async Task Can_call_with_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -498,7 +498,7 @@ public async Task Can_call_with_self_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -510,7 +510,7 @@ public async Task Can_call_with_balance_of_system_account() .Op(Instruction.BALANCE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -562,7 +562,7 @@ public async Task Can_call_with_delegate_call_to_system_account() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -598,7 +598,7 @@ public async Task Can_call_with_call_with_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -615,7 +615,7 @@ public async Task Can_call_with_static_call() .Op(Instruction.STATICCALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -632,7 +632,7 @@ public async Task Can_call_with_delegate_call() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(_createSystemAccount ? 3 : 2)); + Assert.That(result.Accounts.Length, Is.EqualTo(_createSystemAccount && _useNonZeroGasPrice ? 3 : 2)); } [TestCase] @@ -650,7 +650,7 @@ public async Task Can_call_with_call_with_non_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -663,7 +663,7 @@ public async Task Can_call_with_self_destruct() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -691,7 +691,7 @@ public async Task Can_call_with_many_storage_writes() .Op(Instruction.SSTORE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -909,7 +909,7 @@ private void AddAccount(WorldState stateProvider, Address account, UInt256 initi private void AddCode(WorldState stateProvider, Address account, byte[] code) { - stateProvider.InsertCode(account, code, MuirGlacier.Instance, false); + stateProvider.InsertCode(account, code, MuirGlacier.Instance); stateProvider.Commit(MainnetSpecProvider.Instance.GenesisSpec, NullStateTracer.Instance); } } From be5acf19a4057bf8a6467cce3956a814f8a7a953 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 12 Sep 2024 17:47:35 +0200 Subject: [PATCH 305/551] fix tests --- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 9731a22d5bf..09ef95bcec8 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -23,10 +23,10 @@ namespace Nethermind.Merge.Plugin.Test; public partial class EngineModuleTests { [TestCase( - "0x15d4d1f0b215b52458adeac09119798a7c35cebe4aba7f37f0014c7533e12b8a", - "0xaf99598b64692a1975ce80ae8fcc14a610aef517f77dc32f8cb2692cc08f129a", - "0x582281d590f52fdafc956c4ef42193fe1d7a1fd77a7bdc2b8b6a583235a2b087", - "0xae9416e039eb988f")] + "0x948f67f47376af5d09cc39ec25a84c84774f14b2e80289064c2de73db33cc573", + "0xb8e06e1a99d81358edd0a581fef980aff00cc9c316da8119bec7a13a6e6fa167", + "0xa272b2f949e4a0e411c9b45542bd5d0ef3c311b5f26c4ed6b7a8d4f605a91154", + "0x96b752d22831ad92")] public virtual async Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) { From b7546f38d4b7dd51fd8cabab20895d467d057687 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 13 Sep 2024 10:24:18 +0200 Subject: [PATCH 306/551] fix tests --- .../AuRaMergeEngineModuleTests.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 4ba7c359560..13c7e2c616f 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -61,17 +61,17 @@ int ErrorCode => base.forkchoiceUpdatedV2_should_validate_withdrawals(input); [TestCase( - "0xeb7146faceb5d2974ae7198a55335071b88083972d5f16a031b53b0928d8475b", - "0x372f0b6751b91568f2bf642e51731557893f9879074cbbdf005ff31d5cd6a035", - "0xc784a9383eecff180a5fa06ec0a8956beefce39ae529d077e4fb47a8adf935bc", - "0x7f9dace0b66620a2")] + "0xe97d919a17fa5011ff3a08ffb07657ed9e1aaf5ff649888e5d7f605006caf598", + "0xdd9be69fe6ed616f44d53576f430c1c7720ed0e7bff59478539a4a43dbb3bf1f", + "0xd75d320c3a98a02ec7fe2abdcb1769bd063fec04d73f1735810f365ac12bc4ba", + "0x3c6a8926870bdeff")] public override Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) => base.Should_process_block_as_expected_V4(latestValidHash, blockHash, stateRoot, payloadId); [TestCase( "0xe168b70ac8a6f7d90734010030801fbb2dcce03a657155c4024b36ba8d1e3926", - "0x310f4c8c949eb758faa4497e293bb18ef27a465af16553e5fc03752d3be19cc3", - "0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f", + "0x3e604e45a9a74b66a7e03f828cc2597f0cb5f5e7dc50c9211be3a62fbcd6396d", + "0xdbd87b98a6be7d4e3f11ff8500c38a0736d9a5e7a47b5cb25628d37187a98cb9", "0xcdd08163eccae523")] public override Task Should_process_block_as_expected_V2(string latestValidHash, string blockHash, string stateRoot, string payloadId) => base.Should_process_block_as_expected_V2(latestValidHash, blockHash, stateRoot, payloadId); From 45e44cf172277fa47622c005a99e705bad7708c9 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 26 Jun 2024 00:37:44 +0530 Subject: [PATCH 307/551] Prague: Add support for getPayloadBodiesBy Hash + Range (#7133) Co-authored-by: Rohit Ranjan Co-authored-by: MarekM25 (cherry picked from commit d6b1a95c71b1f13e5109ce47d7ef8d9569195a90) --- .../PragueTests.cs | 5 +- .../Validators/BlockValidatorTests.cs | 48 ++++ .../DepositProcessorTests.cs | 51 ++-- .../Messages/BlockErrorMessages.cs | 2 + .../Requests/DepositsProcessor.cs | 8 +- .../Requests/WithdrawalRequestsProcessor.cs | 6 +- .../Validators/BlockValidator.cs | 36 ++- .../Builders/Build.Deposit.cs | 2 +- .../Builders/Build.WithdrawalRequest.cs | 2 +- .../Encoding/BlockDecoderTests.cs | 4 +- .../Nethermind.Core.Test/UInt64Tests.cs | 27 -- .../ConsensusRequests/ConsensusRequest.cs | 23 ++ .../ConsensusRequests/Deposit.cs | 1 + .../ConsensusRequests/WithdrawalRequest.cs | 1 + .../Extensions/UInt64Extensions.cs | 30 -- .../WithdrawalRequestsProcessorTests.cs | 97 +++++++ .../ConsensusRequestsProcessorMock.cs | 2 +- .../EngineModuleTests.HelperFunctions.cs | 53 +++- .../EngineModuleTests.Setup.cs | 3 + .../EngineModuleTests.V3.cs | 4 +- .../EngineModuleTests.V4.cs | 268 +++++++++++++++++- .../Data/ExecutionPayloadBodyV2Result.cs | 36 +++ .../EngineRpcModule.Prague.cs | 12 +- .../EngineRpcModule.Shanghai.cs | 4 +- .../EngineRpcModule.cs | 6 +- .../Handlers/EngineRpcCapabilitiesProvider.cs | 2 + .../GetPayloadBodiesByHashV1Handler.cs | 29 +- .../GetPayloadBodiesByHashV2Handler.cs | 49 ++++ .../GetPayloadBodiesByRangeV1Handler.cs | 33 ++- .../GetPayloadBodiesByRangeV2Handler.cs | 52 ++++ .../IGetPayloadBodiesByRangeV2Handler.cs | 14 + .../IEngineRpcModule.Prague.cs | 13 + .../IEngineRpcModule.Shanghai.cs | 2 +- .../Nethermind.Merge.Plugin/MergePlugin.cs | 3 + .../Nethermind.Optimism/OptimismPlugin.cs | 5 + 35 files changed, 811 insertions(+), 122 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Core.Test/UInt64Tests.cs delete mode 100644 src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs create mode 100644 src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs index c97dff32a27..c6dec949795 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Ethereum.Test.Base; using NUnit.Framework; @@ -18,7 +19,7 @@ public class PragueTests : BlockchainTestBase private static IEnumerable LoadTests() { - TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/prague"); - return (IEnumerable)loader.LoadTests(); + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/blockchain_tests/prague"); + return loader.LoadTests().OfType(); } } diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs index 8d5848e1052..860f9dab86e 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs @@ -3,6 +3,7 @@ using Nethermind.Consensus.Messages; using Nethermind.Consensus.Validators; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -202,5 +203,52 @@ public void ValidateSuggestedBlock_SuggestedBlockIsInvalid_CorrectErrorIsSet(Blo Assert.That(error, Does.StartWith(expectedError)); } + + [Test] + public void ValidateBodyAgainstHeader_BlockHasInvalidRequestRoot_ReturnsFalse() + { + Block block = Build.A.Block + .WithConsensusRequests(new ConsensusRequest[] { + Build.Deposit.WithIndex(0).TestObject, + Build.WithdrawalRequest.TestObject + }) + .TestObject; + block.Header.RequestsRoot = Keccak.OfAnEmptyString; + + Assert.That( + BlockValidator.ValidateBodyAgainstHeader(block.Header, block.Body), + Is.False); + } + + [Test] + public void ValidateBodyRequests_BlockHasReuests_InOrder_ReturnsTrue() + { + Block block = Build.A.Block + .WithConsensusRequests(new ConsensusRequest[] { + Build.Deposit.WithIndex(0).TestObject, + Build.WithdrawalRequest.TestObject + }) + .TestObject; + + Assert.That( + BlockValidator.ValidateRequestsOrder(block, out string? _), + Is.True); + } + + [Test] + public void ValidateBodyRequests_BlockHasReuests_OutOfOrder_ReturnsFalse() + { + Block block = Build.A.Block + .WithConsensusRequests(new ConsensusRequest[] { + Build.WithdrawalRequest.TestObject, + Build.Deposit.WithIndex(0).TestObject + }) + .TestObject; + + Assert.That( + BlockValidator.ValidateRequestsOrder(block, out string? _), + Is.False); + } + } } diff --git a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs index 567c075d02c..af3e12b1505 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs @@ -2,9 +2,15 @@ // SPDX-License-Identifier: LGPL-3.0-only using System.Linq; +using FluentAssertions; using Nethermind.Abi; +using Nethermind.Consensus.Requests; +using Nethermind.Core; using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using NSubstitute; using NUnit.Framework; @@ -12,12 +18,12 @@ namespace Nethermind.Consensus.Test; public class DepositProcessorTests { - private AbiSignature depositEventABI = new AbiSignature("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); - - // ToDo this test is not finished and needs to be rewritten [Test] - public void CanParseDeposit() + public void ShouldProcessDeposit() { + Block block = Build.A.Block.TestObject; + DepositsProcessor depositsProcessor = new(); + var deposit = new Deposit() { Amount = 32000000000, @@ -29,18 +35,31 @@ public void CanParseDeposit() WithdrawalCredentials = Bytes.FromHexString("0000000000000000000000000000000000000000000000000000000000000002") }; - var bytes = Bytes.FromHexString( - "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080040597307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000"); - AbiEncoder abiEncoder = new AbiEncoder(); - var result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, bytes); - var newDeposit = new Deposit() - { - Pubkey = (byte[])result[0], - WithdrawalCredentials = (byte[])result[1], - Amount = ((byte[])result[2]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), - Signature = (byte[])result[3], - Index = ((byte[])result[4]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), - }; + TxReceipt txReceipt = Build.A.Receipt.WithLogs( + Build.A.LogEntry.WithData( + Bytes.FromHexString( + "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080040597307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000" + ) + ) + .WithAddress( + new Core.Address(Bytes.FromHexString("0x00000000219ab540356cbb839cbe05303d7705fa")) + ).TestObject + ).TestObject; + + IReleaseSpec spec = Substitute.For(); + + spec.DepositsEnabled.Returns(true); + spec.DepositContractAddress.Returns( + new Core.Address(Bytes.FromHexString("0x00000000219ab540356cbb839cbe05303d7705fa")) + ); + + var processedDeposits = depositsProcessor.ProcessDeposits(block, new[] { txReceipt }, spec).ToList(); + + Assert.That(processedDeposits, Has.Count.EqualTo(1)); + + Deposit processedDeposit = processedDeposits[0]; + + processedDeposit.Should().BeEquivalentTo(deposit); } } diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index 6e7e74d9399..b40be7bc3aa 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -3,6 +3,7 @@ using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Serialization.Json; namespace Nethermind.Consensus.Messages; public static class BlockErrorMessages @@ -120,4 +121,5 @@ public static string InvalidTxInBlock(int i) => public static string MissingRequests => "MissingRequests: Requests cannot be null in block when EIP-6110 or EIP-7002 are activated."; public static string RequestsNotEnabled => "RequestsNotEnabled: Requests must be null in block when EIP-6110 and EIP-7002 are not activated."; public static string InvalidRequestsRoot(Hash256? expected, Hash256? actual) => $"InvalidRequestsRoot: Requests root hash mismatch in block: expected {expected}, got {actual}"; + public static string InvalidRequestsOrder => "InvalidRequestsOrder: Requests are not in the correct order in block."; } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 80578cf578a..4566019db4f 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -8,13 +8,15 @@ using Nethermind.Core.Specs; using System.Linq; using Nethermind.Core.Extensions; +using System; +using Nethermind.Int256; namespace Nethermind.Consensus.Requests; public class DepositsProcessor : IDepositsProcessor { private AbiSignature depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); - AbiEncoder abiEncoder = new(); + AbiEncoder abiEncoder = AbiEncoder.Instance; public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { @@ -36,9 +38,9 @@ public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, I { Pubkey = (byte[])result[0], WithdrawalCredentials = (byte[])result[1], - Amount = ((byte[])result[2]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), // ToDo not optimal - optimize + Amount = BitConverter.ToUInt64((byte[])result[2], 0), Signature = (byte[])result[3], - Index = ((byte[])result[4]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), // ToDo not optimal - optimize + Index = BitConverter.ToUInt64((byte[])result[4], 0) }; yield return newDeposit; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 47f49379906..1d676348f34 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -3,11 +3,8 @@ using System; using System.Collections.Generic; -using System.Linq; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Crypto; -using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Evm; @@ -15,6 +12,7 @@ using Nethermind.Evm.TransactionProcessing; using Nethermind.Int256; using Nethermind.State; +using System.Buffers.Binary; namespace Nethermind.Consensus.Requests; @@ -58,7 +56,7 @@ public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, Span span = new Span(result, i * sizeOfClass, sizeOfClass); request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); request.ValidatorPubkey = span.Slice(20, 48).ToArray(); - request.Amount = BitConverter.ToUInt64(span.Slice(68, 8).ToArray().Reverse().ToArray()); // ToDo Optimize + request.Amount = BinaryPrimitives.ReadUInt64BigEndian(span.Slice(68, 8)); yield return request; } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index d9aa2e9c3a3..a3c084dba4f 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -293,7 +293,7 @@ private bool ValidateWithdrawals(Block block, IReleaseSpec spec, out string? err public bool ValidateRequests(Block block, out string? error) => ValidateRequests(block, _specProvider.GetSpec(block.Header), out error); - private bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) + public bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) { if (spec.ConsensusRequestsEnabled && block.Requests is null) { @@ -313,14 +313,38 @@ private bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) return false; } - if (!ValidateRequestsHashMatches(block, out Hash256 depositsRoot)) + if (!ValidateRequestsHashMatches(block, out Hash256 requestsRoot)) { - error = BlockErrorMessages.InvalidRequestsRoot(block.Header.RequestsRoot, depositsRoot); - if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.RequestsRoot}, got {depositsRoot}"); + error = BlockErrorMessages.InvalidRequestsRoot(block.Header.RequestsRoot, requestsRoot); + if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.RequestsRoot}, got {requestsRoot}"); return false; } + // validate that the requests types are in ascending order + if (!ValidateRequestsOrder(block, out error)) + { + if (_logger.IsWarn) _logger.Warn(error); + return false; + } + + error = null; + return true; + } + + public static bool ValidateRequestsOrder(Block block, out string? error) + { + if (block.Requests is not null) + { + for (int i = 1; i < block.Requests.Length; i++) + { + if (block.Requests[i].Type < block.Requests[i - 1].Type) + { + error = BlockErrorMessages.InvalidRequestsOrder; + return false; + } + } + } error = null; return true; } @@ -438,8 +462,8 @@ public static bool ValidateWithdrawalsHashMatches(BlockHeader header, BlockBody return (withdrawalsRoot = new WithdrawalTrie(body.Withdrawals).RootHash) == header.WithdrawalsRoot; } - public static bool ValidateRequestsHashMatches(Block block, out Hash256? withdrawalsRoot) => - ValidateRequestsHashMatches(block.Header, block.Body, out withdrawalsRoot); + public static bool ValidateRequestsHashMatches(Block block, out Hash256? requestsRoot) => + ValidateRequestsHashMatches(block.Header, block.Body, out requestsRoot); public static bool ValidateRequestsHashMatches(BlockHeader header, BlockBody body, out Hash256? requestsRoot) { diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs index f8eda2c30dd..a665ac91bba 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs @@ -5,5 +5,5 @@ namespace Nethermind.Core.Test.Builders; public partial class Build { - public DepositBuilder Deposit => new(); + public static DepositBuilder Deposit => new(); } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs index a6ac89905d4..29332f47d5c 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs @@ -5,5 +5,5 @@ namespace Nethermind.Core.Test.Builders; public partial class Build { - public WithdrawalRequestBuilder WithdrawalRequest => new(); + public static WithdrawalRequestBuilder WithdrawalRequest => new(); } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index c18bb3ee666..8350699b8fa 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -49,7 +49,7 @@ public BlockDecoderTests() { if (i % 2 == 0) { - requests[i] = Build.A.Deposit + requests[i] = Build.Deposit .WithIndex(long.MaxValue) .WithPublicKey(new byte[] { (byte)i }) .WithSignature(new byte[] { (byte)i }) @@ -61,7 +61,7 @@ public BlockDecoderTests() { byte[] ValidatorPubkey = new byte[48]; ValidatorPubkey[11] = 11; - requests[i] = Build.A.WithdrawalRequest + requests[i] = Build.WithdrawalRequest .WithSourceAddress(TestItem.AddressA) .WithValidatorPubkey(ValidatorPubkey) .WithAmount(int.MaxValue) diff --git a/src/Nethermind/Nethermind.Core.Test/UInt64Tests.cs b/src/Nethermind/Nethermind.Core.Test/UInt64Tests.cs deleted file mode 100644 index c75a2458302..00000000000 --- a/src/Nethermind/Nethermind.Core.Test/UInt64Tests.cs +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using FluentAssertions; -using Nethermind.Core.Extensions; -using NUnit.Framework; - -namespace Nethermind.Core.Test -{ - [TestFixture] - public class UInt64Tests - { - [TestCase("7fffffffffffffff", (ulong)long.MaxValue)] - [TestCase("ffffffffffffffff", ulong.MaxValue)] - [TestCase("0000", (ulong)0)] - [TestCase("0001234", (ulong)0x1234)] - [TestCase("1234", (ulong)0x1234)] - [TestCase("1", (ulong)1)] - [TestCase("10", (ulong)16)] - public void ToLongFromBytes(string hexBytes, ulong expectedValue) - { - byte[] bytes = Bytes.FromHexString(hexBytes); - ulong number = bytes.ToULongFromBigEndianByteArrayWithoutLeadingZeros(); - number.Should().Be(expectedValue); - } - } -} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index 0fb8952b9cc..449adfe2d71 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -57,4 +57,27 @@ public static (int depositCount, int withdrawalRequestCount) GetTypeCounts(this return (depositCount, withdrawalRequestCount); } + + public static (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests) SplitRequests(this ConsensusRequest[]? requests) + { + if (requests is null) return (null, null); + (int depositCount, int withdrawalRequestCount) = requests.GetTypeCounts(); + Deposit[]? deposits = new Deposit[depositCount]; + WithdrawalRequest[]? withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; + int depositIndex = 0; + int withdrawalRequestIndex = 0; + for (int i = 0; i < requests.Length; i++) + { + if (requests[i].Type == ConsensusRequestsType.Deposit) + { + deposits[depositIndex++] = (Deposit)requests[i]; + } + else + { + withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)requests[i]; + } + } + + return (deposits, withdrawalRequests); + } } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs index aff4e517adb..73e3b7d7aec 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -14,6 +14,7 @@ public class Deposit : ConsensusRequest public Deposit() { Type = ConsensusRequestsType.Deposit; + Amount = 0; } public byte[]? Pubkey { diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs index ee2dc15775e..e916dad0590 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -14,6 +14,7 @@ public class WithdrawalRequest : ConsensusRequest public WithdrawalRequest() { Type = ConsensusRequestsType.WithdrawalRequest; + Amount = 0; } public Address? SourceAddress { diff --git a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs deleted file mode 100644 index 9c1c0bf0f13..00000000000 --- a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; - -namespace Nethermind.Core.Extensions; - -public static class UInt64Extensions -{ - public static ulong ToULongFromBigEndianByteArrayWithoutLeadingZeros(this byte[]? bytes) => - ToULongFromBigEndianByteArrayWithoutLeadingZeros(bytes.AsSpan()); - - public static ulong ToULongFromBigEndianByteArrayWithoutLeadingZeros(this ReadOnlySpan bytes) - { - if (bytes.IsEmpty) - { - return 0L; - } - - ulong value = 0; - int length = bytes.Length; - - for (int i = 0; i < length; i++) - { - value += (ulong)bytes[length - 1 - i] << 8 * i; - } - - return value; - } -} diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs new file mode 100644 index 00000000000..329fa928204 --- /dev/null +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -0,0 +1,97 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Linq; +using FluentAssertions; +using Nethermind.Consensus.Requests; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.Crypto; +using Nethermind.Db; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Specs; +using Nethermind.State; +using Nethermind.Trie.Pruning; +using NSubstitute; +using NUnit.Framework; + + +namespace Nethermind.Evm.Test; + +public class WithdrawalRequestProcessorTests +{ + + private ISpecProvider _specProvider; + private IEthereumEcdsa _ethereumEcdsa; + private ITransactionProcessor _transactionProcessor; + private IWorldState _stateProvider; + + private ICodeInfoRepository _codeInfoRepository; + + private static readonly UInt256 AccountBalance = 1.Ether(); + + private readonly Address eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; + + [SetUp] + public void Setup() + { + _specProvider = MainnetSpecProvider.Instance; + MemDb stateDb = new(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); + _stateProvider.CreateAccount(eip7002Account, AccountBalance); + _stateProvider.Commit(_specProvider.GenesisSpec); + _stateProvider.CommitTree(0); + + _codeInfoRepository = new CodeInfoRepository(); + + VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); + + _transactionProcessor = Substitute.For(); + + _transactionProcessor.Execute(Arg.Any(), Arg.Any(), Arg.Any()) + .Returns(ci => + { + CallOutputTracer tracer = ci.Arg(); + tracer.ReturnValue = Bytes.FromHexString("a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000effffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ffffffffffffffff"); + return new TransactionResult(); + }); + + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + } + + + [Test] + public void ShouldProcessWithdrawalRequest() + { + + IReleaseSpec spec = Substitute.For(); + spec.IsEip7002Enabled.Returns(true); + spec.Eip7002ContractAddress.Returns(eip7002Account); + + Block block = Build.A.Block.TestObject; + + WithdrawalRequestsProcessor withdrawalRequestsProcessor = new(transactionProcessor: _transactionProcessor); + + var withdrawalRequest = new WithdrawalRequest() + { + SourceAddress = new Address(Bytes.FromHexString("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), + ValidatorPubkey = Bytes.FromHexString("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"), + Amount = 0 + }; + + var withdrawalRequests = withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, _stateProvider, block).ToList(); + + Assert.That(withdrawalRequests, Has.Count.EqualTo(16)); + + WithdrawalRequest withdrawalRequestResult = withdrawalRequests[0]; + + withdrawalRequestResult.Should().BeEquivalentTo(withdrawalRequest); + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs index 14195d675ea..f18b98ad7b2 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs @@ -15,7 +15,7 @@ namespace Nethermind.Merge.Plugin.Test; public class ConsensusRequestsProcessorMock : IConsensusRequestsProcessor { - public ConsensusRequest[] Requests = + public static ConsensusRequest[] Requests = [ TestItem.DepositA_1Eth, TestItem.DepositB_2Eth, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index 9db79267ba9..ccd261e1276 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -20,6 +20,8 @@ using Nethermind.Specs; using Nethermind.Specs.Forks; using Nethermind.State; +using Nethermind.Core.ConsensusRequests; +using Microsoft.CodeAnalysis; namespace Nethermind.Merge.Plugin.Test { @@ -136,9 +138,56 @@ private static ExecutionPayloadV3 CreateBlockRequestV3(MergeTestBlockchain chain return blockRequestV3; } + private static ExecutionPayloadV4 CreateBlockRequestV4(MergeTestBlockchain chain, ExecutionPayload parent, Address miner, Withdrawal[]? withdrawals = null, + ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null, ConsensusRequest[]? requests = null) + { + ExecutionPayloadV4 blockRequestV4 = CreateBlockRequestInternal(parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, parentBeaconBlockRoot: parentBeaconBlockRoot, requests: requests); + blockRequestV4.TryGetBlock(out Block? block); + + Snapshot before = chain.State.TakeSnapshot(); + var blockHashStore = new BlockhashStore(chain.BlockTree, chain.SpecProvider, chain.State); + blockHashStore.ApplyHistoryBlockHashes(block!.Header); + + chain.ConsensusRequestsProcessor?.ProcessRequests(chain.SpecProvider.GenesisSpec, chain.State, block!, Array.Empty()); + + chain.State.Commit(chain.SpecProvider.GenesisSpec); + chain.State.RecalculateStateRoot(); + blockRequestV4.StateRoot = chain.State.StateRoot; + chain.State.Restore(before); + + TryCalculateHash(blockRequestV4, out Hash256? hash); + blockRequestV4.BlockHash = hash; + return blockRequestV4; + } + private static T CreateBlockRequestInternal(ExecutionPayload parent, Address miner, Withdrawal[]? withdrawals = null, - ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null) where T : ExecutionPayload, new() + ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null, ConsensusRequest[]? requests = null + ) where T : ExecutionPayload, new() { + Deposit[]? deposits = null; + WithdrawalRequest[]? withdrawalRequests = null; + + if (requests is not null) + { + (int depositCount, int withdrawalRequestCount) = requests.GetTypeCounts(); + deposits = new Deposit[depositCount]; + withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; + int depositIndex = 0; + int withdrawalRequestIndex = 0; + for (int i = 0; i < requests.Length; ++i) + { + ConsensusRequest request = requests[i]; + if (request.Type == ConsensusRequestsType.Deposit) + { + deposits[depositIndex++] = (Deposit)request; + } + else + { + withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)request; + } + } + } + T blockRequest = new() { ParentHash = parent.BlockHash, @@ -154,6 +203,8 @@ private static T CreateBlockRequestInternal(ExecutionPayload parent, Address BlobGasUsed = blobGasUsed, ExcessBlobGas = excessBlobGas, ParentBeaconBlockRoot = parentBeaconBlockRoot, + DepositRequests = deposits, + WithdrawalRequests = withdrawalRequests }; blockRequest.SetTransactions(transactions ?? Array.Empty()); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 83594da18e7..46bfa5c8137 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -33,6 +33,7 @@ using Nethermind.Logging; using Nethermind.Merge.Plugin.BlockProduction; using Nethermind.Merge.Plugin.GC; +using Nethermind.Merge.Plugin.handlers; using Nethermind.Merge.Plugin.Handlers; using Nethermind.Merge.Plugin.Synchronization; using Nethermind.Merge.Plugin.Test.Synchronization; @@ -140,6 +141,8 @@ private IEngineRpcModule CreateEngineModule(MergeTestBlockchain chain, ISyncConf new BlocksConfig().SecondsPerSlot), new GetPayloadBodiesByHashV1Handler(chain.BlockTree, chain.LogManager), new GetPayloadBodiesByRangeV1Handler(chain.BlockTree, chain.LogManager), + new GetPayloadBodiesByHashV2Handler(chain.BlockTree, chain.LogManager), + new GetPayloadBodiesByRangeV2Handler(chain.BlockTree, chain.LogManager), new ExchangeTransitionConfigurationV1Handler(chain.PoSSwitcher, chain.LogManager), new ExchangeCapabilitiesHandler(capabilitiesProvider, chain.LogManager), new GetBlobsHandler(chain.TxPool), diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs index 2ac5d50aa91..e714737e35b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs @@ -378,8 +378,10 @@ public async Task NewPayloadV3_should_verify_blob_versioned_hashes_again Substitute.For>(), newPayloadHandlerMock, Substitute.For(), - Substitute.For, IEnumerable>>(), + Substitute.For, IEnumerable>>(), Substitute.For(), + Substitute.For, IEnumerable>>(), + Substitute.For(), Substitute.For>(), Substitute.For, IEnumerable>>(), Substitute.For>(), diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 09ef95bcec8..f368f2a45d5 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -4,10 +4,13 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using FluentAssertions; +using Nethermind.Blockchain; using Nethermind.Consensus.Producers; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; @@ -16,6 +19,7 @@ using Nethermind.JsonRpc.Test; using Nethermind.Merge.Plugin.Data; using Nethermind.Specs.Forks; +using NSubstitute; using NUnit.Framework; namespace Nethermind.Merge.Plugin.Test; @@ -190,7 +194,7 @@ public async Task can_progress_chain_one_by_one_v4_with_requests(int count) last!.IsGenesis.Should().BeTrue(); Block? head = chain.BlockTree.Head; - head!.Requests!.Length.Should().Be(consensusRequestsProcessorMock.Requests.Length); + head!.Requests!.Length.Should().Be(ConsensusRequestsProcessorMock.Requests.Length); } private async Task> ProduceBranchV4(IEngineRpcModule rpc, @@ -221,7 +225,7 @@ private async Task> ProduceBranchV4(IEngineRpcMo setHeadResponse.Data.PayloadId.Should().Be(null); } - blocks.Add((getPayloadResult)); + blocks.Add(getPayloadResult); parentBlock = getPayloadResult; parentBlock.TryGetBlock(out block!); block.Header.TotalDifficulty = parentHeader.TotalDifficulty + block.Header.Difficulty; @@ -245,4 +249,264 @@ private async Task BuildAndGetPayloadOnBranchV4( await rpc.engine_getPayloadV4(Bytes.FromHexString(payloadId)); return getPayloadResult.Data!.ExecutionPayload!; } + + [Test] + public async Task getPayloadBodiesByRangeV2_should_fail_when_too_many_payloads_requested() + { + using MergeTestBlockchain chain = await CreateBlockchain(); + IEngineRpcModule rpc = CreateEngineModule(chain); + Task>> result = + rpc.engine_getPayloadBodiesByRangeV2(1, 1025); + + result.Result.ErrorCode.Should().Be(MergeErrorCodes.TooLargeRequest); + } + + [Test] + public async Task getPayloadBodiesByHashV2_should_fail_when_too_many_payloads_requested() + { + using MergeTestBlockchain chain = await CreateBlockchain(); + IEngineRpcModule rpc = CreateEngineModule(chain); + Hash256[] hashes = Enumerable.Repeat(TestItem.KeccakA, 1025).ToArray(); + Task>> result = + rpc.engine_getPayloadBodiesByHashV2(hashes); + + result.Result.ErrorCode.Should().Be(MergeErrorCodes.TooLargeRequest); + } + + [Test] + public async Task getPayloadBodiesByRangeV2_should_fail_when_params_below_1() + { + using MergeTestBlockchain chain = await CreateBlockchain(); + IEngineRpcModule rpc = CreateEngineModule(chain); + Task>> result = + rpc.engine_getPayloadBodiesByRangeV2(0, 1); + + result.Result.ErrorCode.Should().Be(ErrorCodes.InvalidParams); + + result = await rpc.engine_getPayloadBodiesByRangeV2(1, 0); + + result.Result.ErrorCode.Should().Be(ErrorCodes.InvalidParams); + } + + [Test] + public async Task getPayloadBodiesByRangeV2_should_return_up_to_best_body_number() + { + IBlockTree? blockTree = Substitute.For(); + + blockTree.FindBlock(Arg.Any()) + .Returns(i => Build.A.Block.WithNumber(i.ArgAt(0)).TestObject); + blockTree.Head.Returns(Build.A.Block.WithNumber(5).TestObject); + + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance); + chain.BlockTree = blockTree; + + IEngineRpcModule rpc = CreateEngineModule(chain); + IEnumerable payloadBodies = + rpc.engine_getPayloadBodiesByRangeV2(1, 7).Result.Data; + + payloadBodies.Count().Should().Be(5); + } + + private static IEnumerable> GetPayloadRequestsTestCases() + { + yield return ConsensusRequestsProcessorMock.Requests; + } + + [TestCaseSource(nameof(GetPayloadRequestsTestCases))] + public virtual async Task + getPayloadBodiesByHashV2_should_return_payload_bodies_in_order_of_request_block_hashes_and_null_for_unknown_hashes( + ConsensusRequest[]? requests) + { + + Deposit[]? deposits = null; + WithdrawalRequest[]? withdrawalRequests = null; + + if (requests is not null) + { + (int depositCount, int withdrawalRequestCount) = requests.GetTypeCounts(); + deposits = new Deposit[depositCount]; + withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; + int depositIndex = 0; + int withdrawalRequestIndex = 0; + for (int i = 0; i < requests.Length; ++i) + { + ConsensusRequest request = requests[i]; + if (request.Type == ConsensusRequestsType.Deposit) + { + deposits[depositIndex++] = (Deposit)request; + } + else + { + withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)request; + } + } + } + + ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); + + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + IEngineRpcModule rpc = CreateEngineModule(chain); + ExecutionPayloadV4 executionPayload1 = await SendNewBlockV3(rpc, chain, requests); + Transaction[] txs = BuildTransactions( + chain, executionPayload1.BlockHash, TestItem.PrivateKeyA, TestItem.AddressB, 3, 0, out _, out _); + + chain.AddTransactions(txs); + + ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV3(rpc, chain, true, Array.Empty()); + Hash256[] blockHashes = new Hash256[] + { + executionPayload1.BlockHash, TestItem.KeccakA, executionPayload2.BlockHash + }; + IEnumerable payloadBodies = + rpc.engine_getPayloadBodiesByHashV2(blockHashes).Result.Data; + ExecutionPayloadBodyV2Result?[] expected = { + new (Array.Empty(), Array.Empty() , deposits, withdrawalRequests), + null, + new (txs, Array.Empty(), deposits, withdrawalRequests), + }; + + payloadBodies.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering()); + } + + [TestCaseSource(nameof(GetPayloadRequestsTestCases))] + public virtual async Task + getPayloadBodiesByRangeV2_should_return_payload_bodies_in_order_of_request_range_and_null_for_unknown_indexes( + ConsensusRequest[]? requests) + { + + Deposit[]? deposits = null; + WithdrawalRequest[]? withdrawalRequests = null; + + if (requests is not null) + { + (int depositCount, int withdrawalRequestCount) = requests.GetTypeCounts(); + deposits = new Deposit[depositCount]; + withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; + int depositIndex = 0; + int withdrawalRequestIndex = 0; + for (int i = 0; i < requests.Length; ++i) + { + ConsensusRequest request = requests[i]; + if (request.Type == ConsensusRequestsType.Deposit) + { + deposits[depositIndex++] = (Deposit)request; + } + else + { + withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)request; + } + } + } + + ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); + + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + IEngineRpcModule rpc = CreateEngineModule(chain); + ExecutionPayloadV4 executionPayload1 = await SendNewBlockV3(rpc, chain, requests); + Transaction[] txs = BuildTransactions( + chain, executionPayload1.BlockHash, TestItem.PrivateKeyA, TestItem.AddressB, 3, 0, out _, out _); + + chain.AddTransactions(txs); + + ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV3(rpc, chain, true, Array.Empty()); + + await rpc.engine_forkchoiceUpdatedV3(new ForkchoiceStateV1(executionPayload2.BlockHash!, + executionPayload2.BlockHash!, executionPayload2.BlockHash!)); + + + IEnumerable payloadBodies = + rpc.engine_getPayloadBodiesByRangeV2(1, 3).Result.Data; + ExecutionPayloadBodyV2Result?[] expected = + { + new (txs, Array.Empty() , deposits, withdrawalRequests), + }; + + payloadBodies.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering()); + + + } + + [Test] + public async Task getPayloadBodiesByRangeV2_empty_response() + { + using MergeTestBlockchain chain = await CreateBlockchain(); + IEngineRpcModule rpc = CreateEngineModule(chain); + IEnumerable payloadBodies = + rpc.engine_getPayloadBodiesByRangeV2(1, 1).Result.Data; + ExecutionPayloadBodyV2Result?[] expected = Array.Empty(); + + payloadBodies.Should().BeEquivalentTo(expected); + } + + private async Task SendNewBlockV3(IEngineRpcModule rpc, MergeTestBlockchain chain, ConsensusRequest[]? requests) + { + ExecutionPayloadV4 executionPayload = CreateBlockRequestV4(chain, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, Array.Empty(), 0, 0, Array.Empty(), parentBeaconBlockRoot: TestItem.KeccakA, requests: requests); + ResultWrapper executePayloadResult = await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot); + + executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); + + return executionPayload; + } + + private async Task BuildAndSendNewBlockV3( + IEngineRpcModule rpc, + MergeTestBlockchain chain, + bool waitForBlockImprovement, + Withdrawal[]? withdrawals) + { + Hash256 head = chain.BlockTree.HeadHash; + ulong timestamp = Timestamper.UnixTime.Seconds; + Hash256 random = Keccak.Zero; + Address feeRecipient = Address.Zero; + ExecutionPayloadV4 executionPayload = await BuildAndGetPayloadResultV3(rpc, chain, head, + Keccak.Zero, head, timestamp, random, feeRecipient, withdrawals, waitForBlockImprovement); + ResultWrapper executePayloadResult = + await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot); + executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); + return executionPayload; + } + + private async Task BuildAndGetPayloadResultV3( + IEngineRpcModule rpc, + MergeTestBlockchain chain, + Hash256 headBlockHash, + Hash256 finalizedBlockHash, + Hash256 safeBlockHash, + ulong timestamp, + Hash256 random, + Address feeRecipient, + Withdrawal[]? withdrawals, + bool waitForBlockImprovement = true) + { + using SemaphoreSlim blockImprovementLock = new SemaphoreSlim(0); + + if (waitForBlockImprovement) + { + chain.PayloadPreparationService!.BlockImproved += (s, e) => + { + blockImprovementLock.Release(1); + }; + } + + ForkchoiceStateV1 forkchoiceState = new ForkchoiceStateV1(headBlockHash, finalizedBlockHash, safeBlockHash); + PayloadAttributes payloadAttributes = new PayloadAttributes + { + Timestamp = timestamp, + PrevRandao = random, + SuggestedFeeRecipient = feeRecipient, + ParentBeaconBlockRoot = Keccak.Zero, + Withdrawals = withdrawals, + }; + + ResultWrapper result = rpc.engine_forkchoiceUpdatedV3(forkchoiceState, payloadAttributes).Result; + string? payloadId = result.Data.PayloadId; + + if (waitForBlockImprovement) + await blockImprovementLock.WaitAsync(10000); + + ResultWrapper getPayloadResult = + await rpc.engine_getPayloadV4(Bytes.FromHexString(payloadId!)); + + return getPayloadResult.Data!.ExecutionPayload!; + } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs new file mode 100644 index 00000000000..508f900fc55 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using System.Text.Json.Serialization; + +namespace Nethermind.Merge.Plugin.Data; + +public class ExecutionPayloadBodyV2Result : ExecutionPayloadBodyV1Result +{ + public ExecutionPayloadBodyV2Result( + IList transactions, + IList? withdrawals, + IList? deposits, + IList? withdrawalsRequests + ) + : base(transactions, withdrawals) + { + DepositRequests = deposits; + WithdrawalRequests = withdrawalsRequests; + } + + /// + /// Deposit requests . + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public IList? DepositRequests { get; set; } + + /// + /// Withdrawal requests . + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public IList? WithdrawalRequests { get; set; } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs index 6f650bc644f..f0f033ab4d5 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs @@ -1,12 +1,13 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Collections.Generic; using System.Threading.Tasks; using Nethermind.Consensus; -using Nethermind.Consensus.Producers; using Nethermind.Core.Crypto; using Nethermind.JsonRpc; using Nethermind.Merge.Plugin.Data; +using Nethermind.Merge.Plugin.handlers; using Nethermind.Merge.Plugin.Handlers; namespace Nethermind.Merge.Plugin; @@ -15,9 +16,18 @@ public partial class EngineRpcModule : IEngineRpcModule { private readonly IAsyncHandler _getPayloadHandlerV4; + private readonly IAsyncHandler, IEnumerable> _executionGetPayloadBodiesByHashV2Handler; + private readonly IGetPayloadBodiesByRangeV2Handler _executionGetPayloadBodiesByRangeV2Handler; + public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) => NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Prague); public async Task> engine_getPayloadV4(byte[] payloadId) => await _getPayloadHandlerV4.HandleAsync(payloadId); + + public Task>> engine_getPayloadBodiesByHashV2(IReadOnlyList blockHashes) + => _executionGetPayloadBodiesByHashV2Handler.HandleAsync(blockHashes); + + public Task>> engine_getPayloadBodiesByRangeV2(long start, long count) + => _executionGetPayloadBodiesByRangeV2Handler.Handle(start, count); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs index 5b9162d1e1c..9db57d25681 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs @@ -14,7 +14,7 @@ namespace Nethermind.Merge.Plugin; public partial class EngineRpcModule : IEngineRpcModule { - private readonly IAsyncHandler, IEnumerable> _executionGetPayloadBodiesByHashV1Handler; + private readonly IAsyncHandler, IEnumerable> _executionGetPayloadBodiesByHashV1Handler; private readonly IGetPayloadBodiesByRangeV1Handler _executionGetPayloadBodiesByRangeV1Handler; private readonly IAsyncHandler _getPayloadHandlerV2; @@ -24,7 +24,7 @@ public Task> engine_forkchoiceUpdatedV2 public Task> engine_getPayloadV2(byte[] payloadId) => _getPayloadHandlerV2.HandleAsync(payloadId); - public Task>> engine_getPayloadBodiesByHashV1(IList blockHashes) + public Task>> engine_getPayloadBodiesByHashV1(IReadOnlyList blockHashes) => _executionGetPayloadBodiesByHashV1Handler.HandleAsync(blockHashes); public Task>> engine_getPayloadBodiesByRangeV1(long start, long count) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs index 7d32108d01f..4d8cd4f994e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs @@ -27,8 +27,10 @@ public EngineRpcModule( IAsyncHandler getPayloadHandlerV4, IAsyncHandler newPayloadV1Handler, IForkchoiceUpdatedHandler forkchoiceUpdatedV1Handler, - IAsyncHandler, IEnumerable> executionGetPayloadBodiesByHashV1Handler, + IAsyncHandler, IEnumerable> executionGetPayloadBodiesByHashV1Handler, IGetPayloadBodiesByRangeV1Handler executionGetPayloadBodiesByRangeV1Handler, + IAsyncHandler, IEnumerable> executionGetPayloadBodiesByHashV2Handler, + IGetPayloadBodiesByRangeV2Handler executionGetPayloadBodiesByRangeV2Handler, IHandler transitionConfigurationHandler, IHandler, IEnumerable> capabilitiesHandler, IAsyncHandler getBlobsHandler, @@ -45,6 +47,8 @@ public EngineRpcModule( _forkchoiceUpdatedV1Handler = forkchoiceUpdatedV1Handler; _executionGetPayloadBodiesByHashV1Handler = executionGetPayloadBodiesByHashV1Handler; _executionGetPayloadBodiesByRangeV1Handler = executionGetPayloadBodiesByRangeV1Handler; + _executionGetPayloadBodiesByHashV2Handler = executionGetPayloadBodiesByHashV2Handler; + _executionGetPayloadBodiesByRangeV2Handler = executionGetPayloadBodiesByRangeV2Handler; _transitionConfigurationHandler = transitionConfigurationHandler; _getBlobsHandler = getBlobsHandler; _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs index 90699f863c9..e69773391e4 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs @@ -51,6 +51,8 @@ public EngineRpcCapabilitiesProvider(ISpecProvider specProvider) #region Prague _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.ConsensusRequestsEnabled, spec.ConsensusRequestsEnabled); _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.ConsensusRequestsEnabled, spec.ConsensusRequestsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByHashV2)] = (spec.ConsensusRequestsEnabled, false); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByRangeV2)] = (spec.ConsensusRequestsEnabled, false); #endregion } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs index 0e3f8cd63d2..10ea8cc9205 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs @@ -12,11 +12,11 @@ namespace Nethermind.Merge.Plugin.Handlers; -public class GetPayloadBodiesByHashV1Handler : IAsyncHandler, IEnumerable> +public class GetPayloadBodiesByHashV1Handler : IAsyncHandler, IEnumerable> { - private const int MaxCount = 1024; - private readonly IBlockTree _blockTree; - private readonly ILogger _logger; + protected const int MaxCount = 1024; + protected readonly IBlockTree _blockTree; + protected readonly ILogger _logger; public GetPayloadBodiesByHashV1Handler(IBlockTree blockTree, ILogManager logManager) { @@ -24,27 +24,36 @@ public GetPayloadBodiesByHashV1Handler(IBlockTree blockTree, ILogManager logMana _logger = logManager.GetClassLogger(); } - public Task>> HandleAsync(IList blockHashes) + protected bool CheckHashCount(IReadOnlyList blockHashes, out string? error) { if (blockHashes.Count > MaxCount) { - var error = $"The number of requested bodies must not exceed {MaxCount}"; + error = $"The number of requested bodies must not exceed {MaxCount}"; - if (_logger.IsError) _logger.Error($"{nameof(GetPayloadBodiesByHashV1Handler)}: {error}"); + if (_logger.IsError) _logger.Error($"{GetType().Name}: {error}"); + return false; + } + error = null; + return true; + } - return ResultWrapper>.Fail(error, MergeErrorCodes.TooLargeRequest); + public Task>> HandleAsync(IReadOnlyList blockHashes) + { + if (!CheckHashCount(blockHashes, out string? error)) + { + return ResultWrapper>.Fail(error!, MergeErrorCodes.TooLargeRequest); } return Task.FromResult(ResultWrapper>.Success(GetRequests(blockHashes))); } - private IEnumerable GetRequests(IList blockHashes) + private IEnumerable GetRequests(IReadOnlyList blockHashes) { for (int i = 0; i < blockHashes.Count; i++) { Block? block = _blockTree.FindBlock(blockHashes[i]); - yield return (block is null ? null : new ExecutionPayloadBodyV1Result(block.Transactions, block.Withdrawals)); + yield return block is null ? null : new ExecutionPayloadBodyV1Result(block.Transactions, block.Withdrawals); } yield break; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs new file mode 100644 index 00000000000..342ac850f40 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs @@ -0,0 +1,49 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Nethermind.Blockchain; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.JsonRpc; +using Nethermind.Logging; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Merge.Plugin.Handlers; + + +public class GetPayloadBodiesByHashV2Handler(IBlockTree blockTree, ILogManager logManager) : GetPayloadBodiesByHashV1Handler(blockTree, logManager), IAsyncHandler, IEnumerable> +{ + public new Task>> HandleAsync(IReadOnlyList blockHashes) + { + if (!CheckHashCount(blockHashes, out string? error)) + { + return ResultWrapper>.Fail(error!, MergeErrorCodes.TooLargeRequest); + } + + return Task.FromResult(ResultWrapper>.Success(GetRequests(blockHashes))); + } + + private IEnumerable GetRequests(IReadOnlyList blockHashes) + { + for (int i = 0; i < blockHashes.Count; i++) + { + Block? block = _blockTree.FindBlock(blockHashes[i]); + + if (block is null) + { + yield return null; + continue; + } + + (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests) = block!.Requests.SplitRequests(); + yield return new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests); + } + + yield break; + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV1Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV1Handler.cs index 0ca3a7e5af7..c3098efb039 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV1Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV1Handler.cs @@ -13,10 +13,10 @@ namespace Nethermind.Merge.Plugin.Handlers; public class GetPayloadBodiesByRangeV1Handler : IGetPayloadBodiesByRangeV1Handler { - private const int MaxCount = 1024; + protected const int MaxCount = 1024; - private readonly IBlockTree _blockTree; - private readonly ILogger _logger; + protected readonly IBlockTree _blockTree; + protected readonly ILogger _logger; public GetPayloadBodiesByRangeV1Handler(IBlockTree blockTree, ILogManager logManager) { @@ -24,24 +24,37 @@ public GetPayloadBodiesByRangeV1Handler(IBlockTree blockTree, ILogManager logMan _logger = logManager.GetClassLogger(); } - public Task>> Handle(long start, long count) + protected bool CheckRangeCount(long start, long count, out string? error, out int errorCode) { if (start < 1 || count < 1) { - var error = $"'{nameof(start)}' and '{nameof(count)}' must be positive numbers"; + error = $"'{nameof(start)}' and '{nameof(count)}' must be positive numbers"; - if (_logger.IsError) _logger.Error($"{nameof(GetPayloadBodiesByRangeV1Handler)}: ${error}"); + if (_logger.IsError) _logger.Error($"{GetType().Name}: ${error}"); - return ResultWrapper>.Fail(error, ErrorCodes.InvalidParams); + errorCode = ErrorCodes.InvalidParams; + return false; } if (count > MaxCount) { - var error = $"The number of requested bodies must not exceed {MaxCount}"; + error = $"The number of requested bodies must not exceed {MaxCount}"; + + if (_logger.IsError) _logger.Error($"{GetType().Name}: {error}"); - if (_logger.IsError) _logger.Error($"{nameof(GetPayloadBodiesByRangeV1Handler)}: {error}"); + errorCode = MergeErrorCodes.TooLargeRequest; + return false; + } + error = null; + errorCode = 0; + return true; + } - return ResultWrapper>.Fail(error, MergeErrorCodes.TooLargeRequest); + public Task>> Handle(long start, long count) + { + if (!CheckRangeCount(start, count, out string? error, out int errorCode)) + { + return ResultWrapper>.Fail(error!, errorCode); } return ResultWrapper>.Success(GetRequests(start, count)); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs new file mode 100644 index 00000000000..97f4cbb9b0f --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs @@ -0,0 +1,52 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Nethermind.Blockchain; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.JsonRpc; +using Nethermind.Logging; +using Nethermind.Merge.Plugin.Data; +using Nethermind.Merge.Plugin.Handlers; + +namespace Nethermind.Merge.Plugin.handlers; + +public class GetPayloadBodiesByRangeV2Handler(IBlockTree blockTree, ILogManager logManager) : GetPayloadBodiesByRangeV1Handler(blockTree, logManager), IGetPayloadBodiesByRangeV2Handler +{ + public new Task>> Handle(long start, long count) + { + if (!CheckRangeCount(start, count, out string? error, out int errorCode)) + { + return ResultWrapper>.Fail(error!, errorCode); + } + + return Task.FromResult(ResultWrapper>.Success(GetRequests(start, count))); + } + + + private IEnumerable GetRequests(long start, long count) + { + var headNumber = _blockTree.Head?.Number ?? 0; + for (long i = start, c = Math.Min(start + count - 1, headNumber); i <= c; i++) + { + Block? block = _blockTree.FindBlock(i); + + if (block is null) + { + yield return null; + continue; + } + + (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests) = block!.Requests.SplitRequests(); + yield return new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests); + } + + yield break; + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs new file mode 100644 index 00000000000..9cd35c7d626 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs @@ -0,0 +1,14 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Threading.Tasks; +using Nethermind.JsonRpc; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Merge.Plugin.Handlers; + +public interface IGetPayloadBodiesByRangeV2Handler +{ + Task>> Handle(long start, long count); +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs index fc0e6578291..7d62b4021b0 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Collections.Generic; using System.Threading.Tasks; using Nethermind.Consensus.Producers; using Nethermind.Core.Crypto; @@ -23,4 +24,16 @@ public partial interface IEngineRpcModule : IRpcModule IsSharable = true, IsImplemented = true)] public Task> engine_getPayloadV4(byte[] payloadId); + + [JsonRpcMethod( + Description = "Returns an array of execution payload bodies for the list of provided block hashes.", + IsSharable = true, + IsImplemented = true)] + Task>> engine_getPayloadBodiesByHashV2(IReadOnlyList blockHashes); + + [JsonRpcMethod( + Description = "Returns an array of execution payload bodies for the provided number range", + IsSharable = true, + IsImplemented = true)] + Task>> engine_getPayloadBodiesByRangeV2(long start, long count); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs index c1b63e3d301..bde3c4c1146 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs @@ -29,7 +29,7 @@ public partial interface IEngineRpcModule : IRpcModule Description = "Returns an array of execution payload bodies for the list of provided block hashes.", IsSharable = true, IsImplemented = true)] - Task>> engine_getPayloadBodiesByHashV1(IList blockHashes); + Task>> engine_getPayloadBodiesByHashV1(IReadOnlyList blockHashes); [JsonRpcMethod( Description = "Returns an array of execution payload bodies for the provided number range", diff --git a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs index 97504e3ab2b..283ce8231aa 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs @@ -26,6 +26,7 @@ using Nethermind.Merge.Plugin.BlockProduction; using Nethermind.Merge.Plugin.BlockProduction.Boost; using Nethermind.Merge.Plugin.GC; +using Nethermind.Merge.Plugin.handlers; using Nethermind.Merge.Plugin.Handlers; using Nethermind.Merge.Plugin.InvalidChainTracker; using Nethermind.Merge.Plugin.Synchronization; @@ -358,6 +359,8 @@ public Task InitRpcModules() _api.Config().SimulateBlockProduction), new GetPayloadBodiesByHashV1Handler(_api.BlockTree, _api.LogManager), new GetPayloadBodiesByRangeV1Handler(_api.BlockTree, _api.LogManager), + new GetPayloadBodiesByHashV2Handler(_api.BlockTree, _api.LogManager), + new GetPayloadBodiesByRangeV2Handler(_api.BlockTree, _api.LogManager), new ExchangeTransitionConfigurationV1Handler(_poSSwitcher, _api.LogManager), new ExchangeCapabilitiesHandler(_api.RpcCapabilitiesProvider, _api.LogManager), new GetBlobsHandler(_api.TxPool), diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs index 7411f2299d1..0f45fe0ddbf 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs @@ -27,6 +27,9 @@ using Nethermind.Specs.ChainSpecStyle; using Nethermind.Serialization.Rlp; using Nethermind.Optimism.Rpc; +using Nethermind.Core; +using Nethermind.JsonRpc.Modules.Eth; +using Nethermind.Merge.Plugin.handlers; namespace Nethermind.Optimism; @@ -268,6 +271,8 @@ public async Task InitRpcModules() _api.Config().SimulateBlockProduction), new GetPayloadBodiesByHashV1Handler(_api.BlockTree, _api.LogManager), new GetPayloadBodiesByRangeV1Handler(_api.BlockTree, _api.LogManager), + new GetPayloadBodiesByHashV2Handler(_api.BlockTree, _api.LogManager), + new GetPayloadBodiesByRangeV2Handler(_api.BlockTree, _api.LogManager), new ExchangeTransitionConfigurationV1Handler(_api.PoSSwitcher, _api.LogManager), new ExchangeCapabilitiesHandler(_api.RpcCapabilitiesProvider, _api.LogManager), new GetBlobsHandler(_api.TxPool), From f4db109d7edbe3169c9594d676b99e7abc838cda Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 13 Sep 2024 10:35:46 +0200 Subject: [PATCH 308/551] Resolved payload bodies --- .../Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs | 2 +- .../EngineModuleTests.HelperFunctions.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs index 329fa928204..aef2ed8bee3 100644 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -63,7 +63,7 @@ public void Setup() return new TransactionResult(); }); - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index ccd261e1276..63bf7410ad6 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -145,8 +145,8 @@ private static ExecutionPayloadV4 CreateBlockRequestV4(MergeTestBlockchain chain blockRequestV4.TryGetBlock(out Block? block); Snapshot before = chain.State.TakeSnapshot(); - var blockHashStore = new BlockhashStore(chain.BlockTree, chain.SpecProvider, chain.State); - blockHashStore.ApplyHistoryBlockHashes(block!.Header); + var blockHashStore = new BlockhashStore(chain.SpecProvider, chain.State); + blockHashStore.ApplyBlockhashStateChanges(block!.Header); chain.ConsensusRequestsProcessor?.ProcessRequests(chain.SpecProvider.GenesisSpec, chain.State, block!, Array.Empty()); From 5f2434c1e8d07df8035d0aa603ab47089198339a Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 13 Sep 2024 12:48:46 +0200 Subject: [PATCH 309/551] Removed log message --- src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs b/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs index e951e03226a..b8c6ef1331f 100644 --- a/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs +++ b/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs @@ -138,7 +138,6 @@ await WaitForMainChainChange((e) => } catch (Exception e) { - Console.Out.WriteLine($"Its {e}"); if (_logger.IsError) _logger.Error("full pruning failed. ", e); } finally From d7d0c046960e83dba4149f75bd3e26605761d32d Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 13 Sep 2024 16:46:40 +0200 Subject: [PATCH 310/551] Cleanup the branch --- .../ValidatorExit/WithdrawRequestsContract.cs | 74 ------------------- .../DepositProcessorTests.cs | 51 +++++++++---- .../Requests/ConsensusRequestsProcessor.cs | 1 - .../Requests/DepositsProcessor.cs | 7 +- .../Requests/WithdrawalRequestsProcessor.cs | 5 +- .../Nethermind.Evm.Test/InvalidOpcodeTests.cs | 11 +-- .../Nethermind.Evm/ExecutionEnvironment.cs | 4 - .../ITransactionProcessor.cs | 30 -------- .../Nethermind.Init/InitializeStateDb.cs | 1 - .../Properties/launchSettings.json | 2 +- .../ChainSpecBasedSpecProviderTests.cs | 1 - .../ChainSpecBasedSpecProvider.cs | 1 - .../Nethermind.Specs/Forks/00_Olympic.cs | 1 - .../Nethermind.Specs/ReleaseSpec.cs | 1 - .../StateProviderTests.cs | 4 +- .../StatsCollectorTests.cs | 4 +- .../Nethermind.State/StateProvider.cs | 18 ++--- .../SynchronizerTests.cs | 1 - .../Nethermind.Trie/Pruning/TinyTreePath.cs | 1 - 19 files changed, 54 insertions(+), 164 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs diff --git a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs b/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs deleted file mode 100644 index a03761f5582..00000000000 --- a/src/Nethermind/Nethermind.Blockchain/ValidatorExit/WithdrawRequestsContract.cs +++ /dev/null @@ -1,74 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using System.Reflection.Metadata; -using Nethermind.Blockchain.Contracts; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Specs; -using Nethermind.Crypto; -using Nethermind.Evm; -using Nethermind.Evm.Tracing; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.Int256; -using Nethermind.State; - -namespace Nethermind.Blockchain.ValidatorExit; - -public class WithdrawRequestsHandler -{ - private readonly ITransactionProcessor _transactionProcessor; - private const long GasLimit = 30_000_000L; - - public WithdrawRequestsHandler( - ITransactionProcessor transactionProcessor) - { - _transactionProcessor = transactionProcessor; - } - WithdrawalRequest[] CalculateValidatorExits(IReleaseSpec spec, IWorldState state, BlockHeader header) - { - CallOutputTracer tracer = new(); - - try - { - Transaction? transaction = new() - { - Value = UInt256.Zero, - Data = Array.Empty(), - To = spec.Eip7002ContractAddress, // ToDo set default address - SenderAddress = Address.SystemUser, - GasLimit = GasLimit, - GasPrice = UInt256.Zero, - }; - transaction.Hash = transaction.CalculateHash(); - - _transactionProcessor.Execute(transaction, new BlockExecutionContext(header), tracer); - var result = tracer.ReturnValue; - if (result == null || result.Length == 0) - return Array.Empty(); - - int sizeOfClass = 20 + 48 + 8; - int count = result.Length / sizeOfClass; - var withdrawalRequests = new List(count); - for (int i = 0; i < count; ++i) - { - WithdrawalRequest request = new(); - Span span = new Span(result, i * sizeOfClass, sizeOfClass); - request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); - request.ValidatorPubkey = span.Slice(20, 48).ToArray(); - request.Amount = BitConverter.ToUInt64(span.Slice(68, 8)); - - withdrawalRequests.Add(request); - } - - return withdrawalRequests.ToArray(); - } - catch (Exception) - { - // add logger - return null; - } - } -} diff --git a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs index 567c075d02c..af3e12b1505 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs @@ -2,9 +2,15 @@ // SPDX-License-Identifier: LGPL-3.0-only using System.Linq; +using FluentAssertions; using Nethermind.Abi; +using Nethermind.Consensus.Requests; +using Nethermind.Core; using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using NSubstitute; using NUnit.Framework; @@ -12,12 +18,12 @@ namespace Nethermind.Consensus.Test; public class DepositProcessorTests { - private AbiSignature depositEventABI = new AbiSignature("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); - - // ToDo this test is not finished and needs to be rewritten [Test] - public void CanParseDeposit() + public void ShouldProcessDeposit() { + Block block = Build.A.Block.TestObject; + DepositsProcessor depositsProcessor = new(); + var deposit = new Deposit() { Amount = 32000000000, @@ -29,18 +35,31 @@ public void CanParseDeposit() WithdrawalCredentials = Bytes.FromHexString("0000000000000000000000000000000000000000000000000000000000000002") }; - var bytes = Bytes.FromHexString( - "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080040597307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000"); - AbiEncoder abiEncoder = new AbiEncoder(); - var result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, bytes); - var newDeposit = new Deposit() - { - Pubkey = (byte[])result[0], - WithdrawalCredentials = (byte[])result[1], - Amount = ((byte[])result[2]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), - Signature = (byte[])result[3], - Index = ((byte[])result[4]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), - }; + TxReceipt txReceipt = Build.A.Receipt.WithLogs( + Build.A.LogEntry.WithData( + Bytes.FromHexString( + "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080040597307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000" + ) + ) + .WithAddress( + new Core.Address(Bytes.FromHexString("0x00000000219ab540356cbb839cbe05303d7705fa")) + ).TestObject + ).TestObject; + + IReleaseSpec spec = Substitute.For(); + + spec.DepositsEnabled.Returns(true); + spec.DepositContractAddress.Returns( + new Core.Address(Bytes.FromHexString("0x00000000219ab540356cbb839cbe05303d7705fa")) + ); + + var processedDeposits = depositsProcessor.ProcessDeposits(block, new[] { txReceipt }, spec).ToList(); + + Assert.That(processedDeposits, Has.Count.EqualTo(1)); + + Deposit processedDeposit = processedDeposits[0]; + + processedDeposit.Should().BeEquivalentTo(deposit); } } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 0a15e7fc61d..9e7bcb54b22 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -26,7 +26,6 @@ public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, T using ArrayPoolList requestsList = new(receipts.Length * 2); - // Process deposits requestsList.AddRange(_depositsProcessor.ProcessDeposits(block, receipts, spec)); requestsList.AddRange(_withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state, block)); diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 80578cf578a..ad019a67f81 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -1,13 +1,12 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Collections.Generic; using Nethermind.Abi; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Specs; -using System.Linq; -using Nethermind.Core.Extensions; namespace Nethermind.Consensus.Requests; @@ -36,9 +35,9 @@ public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, I { Pubkey = (byte[])result[0], WithdrawalCredentials = (byte[])result[1], - Amount = ((byte[])result[2]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), // ToDo not optimal - optimize + Amount = BitConverter.ToUInt64((byte[])result[2], 0), Signature = (byte[])result[3], - Index = ((byte[])result[4]).Reverse().ToArray().ToULongFromBigEndianByteArrayWithoutLeadingZeros(), // ToDo not optimal - optimize + Index = BitConverter.ToUInt64((byte[])result[4], 0) }; yield return newDeposit; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 47f49379906..452757e9fba 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Buffers.Binary; using System.Collections.Generic; using System.Linq; using Nethermind.Core; @@ -29,7 +30,7 @@ public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, yield break; Address eip7002Account = spec.Eip7002ContractAddress; - if (!state.AccountExists(eip7002Account)) // not needed anymore? + if (!state.AccountExists(eip7002Account)) yield break; CallOutputTracer tracer = new(); @@ -58,7 +59,7 @@ public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, Span span = new Span(result, i * sizeOfClass, sizeOfClass); request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); request.ValidatorPubkey = span.Slice(20, 48).ToArray(); - request.Amount = BitConverter.ToUInt64(span.Slice(68, 8).ToArray().Reverse().ToArray()); // ToDo Optimize + request.Amount = BinaryPrimitives.ReadUInt64BigEndian(span.Slice(68, 8)); yield return request; } diff --git a/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs b/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs index 7c43f8a4e30..bbba90f37f4 100644 --- a/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs @@ -112,14 +112,6 @@ public class InvalidOpcodeTests : VirtualMachineTestsBase } ).ToArray(); - private static readonly Instruction[] PragueInstructions = - CancunInstructions.Union( - new Instruction[] - { - // Instruction.AUTH, - // Instruction.AUTHCALL - } - ).ToArray(); private readonly Dictionary _validOpcodes = new() @@ -136,8 +128,7 @@ private readonly Dictionary _validOpcodes {(ForkActivation)MainnetSpecProvider.LondonBlockNumber, LondonInstructions}, {MainnetSpecProvider.ShanghaiActivation, ShanghaiInstructions}, {MainnetSpecProvider.CancunActivation, CancunInstructions}, - {MainnetSpecProvider.PragueActivation, PragueInstructions}, - {(long.MaxValue, ulong.MaxValue), PragueInstructions} + {(long.MaxValue, ulong.MaxValue), CancunInstructions} }; private const string InvalidOpCodeErrorMessage = "BadInstruction"; diff --git a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs index d17eb9f58b9..ec6600fef8e 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs @@ -77,9 +77,5 @@ public ExecutionEnvironment /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. public readonly int CallDepth; - - /// - /// this field keeps track of wether the execution envirement was initiated by a systemTx. - public readonly bool IsSystemEnv; } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs index 9d4622dc862..86cb5b6d32c 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs @@ -7,36 +7,6 @@ using Nethermind.Evm.Tracing; namespace Nethermind.Evm.TransactionProcessing; - -[Flags] -public enum ExecutionOptions -{ - /// - /// Just accumulate the state - /// - None = 0, - - /// - /// Commit the state after execution - /// - Commit = 1, - - /// - /// Restore state after execution - /// - Restore = 2, - - /// - /// Skip potential fail checks - /// - NoValidation = Commit | 4, - - /// - /// Commit and later restore state also skip validation, use for CallAndRestore - /// - CommitAndRestore = Commit | Restore | NoValidation -} - public interface ITransactionProcessor { /// diff --git a/src/Nethermind/Nethermind.Init/InitializeStateDb.cs b/src/Nethermind/Nethermind.Init/InitializeStateDb.cs index 42f259e45c8..8ca20a82750 100644 --- a/src/Nethermind/Nethermind.Init/InitializeStateDb.cs +++ b/src/Nethermind/Nethermind.Init/InitializeStateDb.cs @@ -86,7 +86,6 @@ public Task Execute(CancellationToken cancellationToken) syncConfig.DownloadBodiesInFastSync = true; } - _api.NodeStorageFactory.DetectCurrentKeySchemeFrom(getApi.DbProvider.StateDb); IKeyValueStore codeDb = getApi.DbProvider.CodeDb; IKeyValueStoreWithBatching stateDb = getApi.DbProvider.StateDb; IPersistenceStrategy persistenceStrategy; diff --git a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json index da27c06e51c..c4f8094122a 100644 --- a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json +++ b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json @@ -93,7 +93,7 @@ }, "Holesky": { "commandName": "Project", - "commandLineArgs": "-c holesky -dd .data --JsonRpc.UnsecureDevNoRpcAuthentication true", + "commandLineArgs": "-c holesky -dd .data", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs index f9e44d771a9..734b84f298f 100644 --- a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs @@ -737,7 +737,6 @@ void TestTransitions(ForkActivation activation, Action changes) r.MaximumUncleCount = 2; r.WithdrawalTimestamp = ulong.MaxValue; r.Eip4844TransitionTimestamp = ulong.MaxValue; - r.AuRaSystemCalls = false; }); TestTransitions((ForkActivation)1L, r => diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index 191c2921b4d..52f0b94f7df 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -252,7 +252,6 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip6780Enabled = (chainSpec.Parameters.Eip6780TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; - releaseSpec.AuRaSystemCalls = chainSpec.SealEngineType == SealEngineType.AuRa; releaseSpec.IsEip2935Enabled = (chainSpec.Parameters.Eip2935TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip2935ContractAddress = chainSpec.Parameters.Eip2935ContractAddress; diff --git a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs index f66845fae60..2aaffc45998 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs @@ -30,7 +30,6 @@ protected Olympic() // The below addresses are added for all forks, but the given EIPs can be enabled at a specific timestamp or block. Eip7002ContractAddress = Eip7002Constants.WithdrawalRequestPredeployAddress; DepositContractAddress = Eip6110Constants.MainnetDepositContractAddress; - AuRaSystemCalls = false; } public static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Olympic()); diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index 24e4e6f0138..507070aeb7f 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -70,7 +70,6 @@ public bool IsEip1559Enabled public long Eip1559TransitionBlock { get; set; } public ulong WithdrawalTimestamp { get; set; } public ulong Eip4844TransitionTimestamp { get; set; } - public bool AuRaSystemCalls { get; set; } public Address Eip1559FeeCollector { get; set; } public UInt256? Eip1559BaseFeeMinValue { get; set; } public UInt256 ForkBaseFee { get; set; } = Eip1559Constants.DefaultForkBaseFee; diff --git a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs index 8197dae5530..ee924de5b4e 100644 --- a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs @@ -69,7 +69,7 @@ public void Eip_158_touch_zero_value_system_account_is_not_deleted() provider.Commit(Homestead.Instance); var releaseSpec = new ReleaseSpec() { IsEip158Enabled = true }; - provider.InsertCode(systemUser, System.Text.Encoding.UTF8.GetBytes(""), releaseSpec, false); + provider.InsertCode(systemUser, System.Text.Encoding.UTF8.GetBytes(""), releaseSpec); provider.Commit(releaseSpec); provider.GetAccount(systemUser).Should().NotBeNull(); @@ -182,7 +182,7 @@ public void Restore_in_the_middle() provider.CreateAccount(_address1, 1); provider.AddToBalance(_address1, 1, Frontier.Instance); provider.IncrementNonce(_address1); - provider.InsertCode(_address1, new byte[] { 1 }, Frontier.Instance, false); + provider.InsertCode(_address1, new byte[] { 1 }, Frontier.Instance); provider.UpdateStorageRoot(_address1, Hash2); Assert.That(provider.GetNonce(_address1), Is.EqualTo(UInt256.One)); diff --git a/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs b/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs index bcdc414e3c1..21c6b823c78 100644 --- a/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs @@ -31,10 +31,10 @@ public void Can_collect_stats([Values(false, true)] bool parallel) WorldState stateProvider = new(trieStore, codeDb, LimboLogs.Instance); stateProvider.CreateAccount(TestItem.AddressA, 1); - stateProvider.InsertCode(TestItem.AddressA, new byte[] { 1, 2, 3 }, Istanbul.Instance, false); + stateProvider.InsertCode(TestItem.AddressA, new byte[] { 1, 2, 3 }, Istanbul.Instance); stateProvider.CreateAccount(TestItem.AddressB, 1); - stateProvider.InsertCode(TestItem.AddressB, new byte[] { 1, 2, 3, 4 }, Istanbul.Instance, false); + stateProvider.InsertCode(TestItem.AddressB, new byte[] { 1, 2, 3, 4 }, Istanbul.Instance); for (int i = 0; i < 1000; i++) { diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 6b08afbfc32..5721d140f5c 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -116,10 +116,8 @@ public UInt256 GetBalance(Address address) return account?.Balance ?? UInt256.Zero; } - public void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false, bool isSystemCall = false) + public void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) { - if (isSystemCall && address == Address.SystemUser) return; - _needsStateRootUpdate = true; // Don't reinsert if already inserted. This can be the case when the same @@ -167,14 +165,14 @@ public void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory c } } - private void SetNewBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSubtracting, bool isSystemCall = false) + private void SetNewBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSubtracting) { _needsStateRootUpdate = true; Account GetThroughCacheCheckExists() { Account result = GetThroughCache(address); - if (result is null && !isSystemCall) + if (result is null) { if (_logger.IsError) _logger.Error("Updating balance of a non-existing account"); throw new InvalidOperationException("Updating balance of a non-existing account"); @@ -192,7 +190,6 @@ Account GetThroughCacheCheckExists() if (releaseSpec.IsEip158Enabled && !isSubtracting) { Account touched = GetThroughCacheCheckExists(); - if (touched is null) return; if (_logger.IsTrace) _logger.Trace($" Touch {address} (balance)"); if (touched.IsEmpty) @@ -205,7 +202,6 @@ Account GetThroughCacheCheckExists() } Account account = GetThroughCacheCheckExists(); - if (account is null) return; if (isSubtracting && account.Balance < balanceChange) { @@ -219,16 +215,16 @@ Account GetThroughCacheCheckExists() PushUpdate(address, changedAccount); } - public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSystemCall = false) + public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) { _needsStateRootUpdate = true; - SetNewBalance(address, balanceChange, releaseSpec, true, isSystemCall); + SetNewBalance(address, balanceChange, releaseSpec, true); } - public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSystemCall = false) + public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) { _needsStateRootUpdate = true; - SetNewBalance(address, balanceChange, releaseSpec, false, isSystemCall); + SetNewBalance(address, balanceChange, releaseSpec, false); } /// diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs index c2f2e08128e..6509942731e 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs @@ -38,7 +38,6 @@ using Nethermind.Trie.Pruning; using NSubstitute; using NUnit.Framework; -using Nethermind.Synchronization.SnapSync; using Nethermind.Trie; namespace Nethermind.Synchronization.Test diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs b/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs index de1d3bcc3bc..c15a5a9f906 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Nethermind.Core.Crypto; From 51c1701a8ebfb85a924bfa879188d98ed5fc179c Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Fri, 13 Sep 2024 16:48:16 +0200 Subject: [PATCH 311/551] Cleanup --- .../TransactionProcessing/ITransactionProcessor.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs index 86cb5b6d32c..9829c66f564 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs @@ -1,8 +1,6 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; -using System.Diagnostics.CodeAnalysis; using Nethermind.Core; using Nethermind.Evm.Tracing; From eebac4f21b976f3a67743985d33897fcfdab8b88 Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Sat, 14 Sep 2024 05:38:05 +0300 Subject: [PATCH 312/551] minor refactor --- .../Requests/DepositsProcessor.cs | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index ad019a67f81..b485374ac05 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -17,33 +17,30 @@ public class DepositsProcessor : IDepositsProcessor public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { - if (spec.DepositsEnabled) + if (!spec.DepositsEnabled) + yield break; + for (int i = 0; i < receipts.Length; i++) { - for (int i = 0; i < receipts.Length; i++) + LogEntry[]? logEntries = receipts[i].Logs; + if (logEntries is null) + continue; + for (int index = 0; index < logEntries.Length; index++) { - LogEntry[]? logEntries = receipts[i].Logs; - if (logEntries is not null) - { - for (int index = 0; index < logEntries.Length; index++) - { - LogEntry log = logEntries[index]; - if (log.LoggersAddress == spec.DepositContractAddress) - { - var result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, log.Data); + LogEntry log = logEntries[index]; + if (log.LoggersAddress != spec.DepositContractAddress) + continue; + var result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, log.Data); - var newDeposit = new Deposit() - { - Pubkey = (byte[])result[0], - WithdrawalCredentials = (byte[])result[1], - Amount = BitConverter.ToUInt64((byte[])result[2], 0), - Signature = (byte[])result[3], - Index = BitConverter.ToUInt64((byte[])result[4], 0) - }; + var newDeposit = new Deposit() + { + Pubkey = (byte[])result[0], + WithdrawalCredentials = (byte[])result[1], + Amount = BitConverter.ToUInt64((byte[])result[2], 0), + Signature = (byte[])result[3], + Index = BitConverter.ToUInt64((byte[])result[4], 0) + }; - yield return newDeposit; - } - } - } + yield return newDeposit; } } } From c8434ab8acc38a0b247e14b36cb4660b169bac1a Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Sat, 14 Sep 2024 07:23:58 +0300 Subject: [PATCH 313/551] Reduce allocation + minors + optimize `ToULongFromBigEndianByteArrayWithoutLeadingZeros` --- .../Requests/DepositsProcessor.cs | 12 ++++++------ .../Requests/WithdrawalRequestsProcessor.cs | 13 +++++++------ .../ConsensusRequests/ConsensusRequest.cs | 3 ++- .../ConsensusRequests/Deposit.cs | 5 +++-- .../ConsensusRequests/WithdrawalRequest.cs | 5 +++-- .../Extensions/UInt64Extensions.cs | 2 +- .../InvalidBlockInterceptor.cs | 1 - .../Messages/BlockBodiesMessageSerializer.cs | 19 +++++++------------ .../WithdrawalRequestDecoder.cs | 8 ++++---- 9 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index b485374ac05..3236304dc70 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -29,15 +29,15 @@ public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, I LogEntry log = logEntries[index]; if (log.LoggersAddress != spec.DepositContractAddress) continue; - var result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, log.Data); + var result = (byte[][])abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, log.Data); var newDeposit = new Deposit() { - Pubkey = (byte[])result[0], - WithdrawalCredentials = (byte[])result[1], - Amount = BitConverter.ToUInt64((byte[])result[2], 0), - Signature = (byte[])result[3], - Index = BitConverter.ToUInt64((byte[])result[4], 0) + Pubkey = result[0], + WithdrawalCredentials = result[1], + Amount = BitConverter.ToUInt64(result[2], 0), + Signature = result[3], + Index = BitConverter.ToUInt64(result[4], 0) }; yield return newDeposit; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 452757e9fba..ecb931d357f 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -55,12 +55,13 @@ public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, int count = result.Length / sizeOfClass; for (int i = 0; i < count; ++i) { - WithdrawalRequest request = new(); - Span span = new Span(result, i * sizeOfClass, sizeOfClass); - request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); - request.ValidatorPubkey = span.Slice(20, 48).ToArray(); - request.Amount = BinaryPrimitives.ReadUInt64BigEndian(span.Slice(68, 8)); - + Memory memory = result.AsMemory(i * sizeOfClass, sizeOfClass); + WithdrawalRequest request = new() + { + SourceAddress = new Address(memory.Slice(0, 20).AsArray()), + ValidatorPubkey = memory.Slice(20, 48), + Amount = BinaryPrimitives.ReadUInt64BigEndian(memory.Slice(68, 8).Span) + }; yield return request; } } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index 0fb8952b9cc..835c5c5dedb 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Text.Json.Serialization; namespace Nethermind.Core.ConsensusRequests; @@ -24,7 +25,7 @@ public class ConsensusRequest public Address? SourceAddressField { get; protected set; } [JsonIgnore] - public byte[]? PubKeyField { get; set; } + public Memory? PubKeyField { get; set; } [JsonIgnore] public byte[]? WithdrawalCredentialsField { get; protected set; } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs index aff4e517adb..a3606fe25e9 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using Nethermind.Core.Extensions; using System.Text; @@ -15,7 +16,7 @@ public Deposit() { Type = ConsensusRequestsType.Deposit; } - public byte[]? Pubkey + public Memory? Pubkey { get { return PubKeyField; } set { PubKeyField = value; } @@ -50,7 +51,7 @@ public string ToString(string indentation) => @$"{indentation}{nameof(Deposit)} {nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, {nameof(Amount)}: {Amount}, {nameof(Signature)}: {Signature?.ToHexString()}, - {nameof(Pubkey)}: {Pubkey?.ToHexString()}}}"; + {nameof(Pubkey)}: {Pubkey?.Span.ToHexString()}}}"; } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs index ee2dc15775e..361b1dbb95a 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using Nethermind.Core.Extensions; using System.Text; @@ -21,7 +22,7 @@ public Address? SourceAddress set { SourceAddressField = value; } } - public byte[]? ValidatorPubkey + public Memory? ValidatorPubkey { get { return PubKeyField; } set { PubKeyField = value; } @@ -36,7 +37,7 @@ public ulong Amount public string ToString(string indentation) => @$"{indentation}{nameof(WithdrawalRequest)} {{{nameof(SourceAddress)}: {SourceAddress}, - {nameof(ValidatorPubkey)}: {ValidatorPubkey?.ToHexString()}, + {nameof(ValidatorPubkey)}: {ValidatorPubkey?.Span.ToHexString()}, {nameof(Amount)}: {Amount}}}"; diff --git a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs index 9c1c0bf0f13..2cccf213241 100644 --- a/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs +++ b/src/Nethermind/Nethermind.Core/Extensions/UInt64Extensions.cs @@ -22,7 +22,7 @@ public static ulong ToULongFromBigEndianByteArrayWithoutLeadingZeros(this ReadOn for (int i = 0; i < length; i++) { - value += (ulong)bytes[length - 1 - i] << 8 * i; + value = (value << 8) | bytes[i]; } return value; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs index 58e82e4552c..d3ae6bfd5fb 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs @@ -5,7 +5,6 @@ using Nethermind.Core; using Nethermind.Logging; using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices.Marshalling; namespace Nethermind.Merge.Plugin.InvalidChainTracker; diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index 12d667640e9..e050302d37d 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -68,19 +68,14 @@ public int GetLength(BlockBody item, RlpBehaviors rlpBehaviors) public int GetBodyLength(BlockBody b) { - if (b.Withdrawals is not null) - { - if (b.Requests is not null) - { - return Rlp.LengthOfSequence(GetTxLength(b.Transactions)) + - Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)) + Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)) + - Rlp.LengthOfSequence(GetRequestsLength(b.Requests)); - } - return Rlp.LengthOfSequence(GetTxLength(b.Transactions)) + - Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)) + Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)); - } return Rlp.LengthOfSequence(GetTxLength(b.Transactions)) + - Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)); + Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)) + + (b.Withdrawals is not null + ? Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)) + : 0) + + (b.Requests is not null + ? Rlp.LengthOfSequence(GetRequestsLength(b.Requests)) + : 0); } private int GetTxLength(Transaction[] transactions) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs index bc928f87980..900d1507250 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs @@ -21,12 +21,12 @@ public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = int _ = rlpStream.ReadSequenceLength(); Address sourceAddress = rlpStream.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); - byte[] ValidatorPubkey = rlpStream.DecodeByteArray(); + byte[] validatorPubkey = rlpStream.DecodeByteArray(); ulong amount = rlpStream.DecodeULong(); return new WithdrawalRequest() { SourceAddress = sourceAddress, - ValidatorPubkey = ValidatorPubkey, + ValidatorPubkey = validatorPubkey, Amount = amount }; } @@ -36,12 +36,12 @@ public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpB int _ = decoderContext.ReadSequenceLength(); Address sourceAddress = decoderContext.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); - byte[] ValidatorPubkey = decoderContext.DecodeByteArray(); + byte[] validatorPubkey = decoderContext.DecodeByteArray(); ulong amount = decoderContext.DecodeULong(); return new WithdrawalRequest() { SourceAddress = sourceAddress, - ValidatorPubkey = ValidatorPubkey, + ValidatorPubkey = validatorPubkey, Amount = amount }; } From b653664dfef94d4d2312ad9bbdc4ca20b2be9ddb Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Sat, 14 Sep 2024 07:28:51 +0300 Subject: [PATCH 314/551] fix --- .../Requests/DepositsProcessor.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 3236304dc70..7d6ec11b03e 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -29,15 +29,15 @@ public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, I LogEntry log = logEntries[index]; if (log.LoggersAddress != spec.DepositContractAddress) continue; - var result = (byte[][])abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, log.Data); + object[] result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, log.Data); var newDeposit = new Deposit() { - Pubkey = result[0], - WithdrawalCredentials = result[1], - Amount = BitConverter.ToUInt64(result[2], 0), - Signature = result[3], - Index = BitConverter.ToUInt64(result[4], 0) + Pubkey = (byte[])result[0], + WithdrawalCredentials = (byte[])result[1], + Amount = BitConverter.ToUInt64((byte[])result[2], 0), + Signature = (byte[])result[3], + Index = BitConverter.ToUInt64((byte[])result[4], 0) }; yield return newDeposit; From 0abb556a5f5b7a8b9791463dfb3c4dc04959a170 Mon Sep 17 00:00:00 2001 From: Ahmad Bitar <33181301+smartprogrammer93@users.noreply.github.com> Date: Sat, 14 Sep 2024 07:29:36 +0300 Subject: [PATCH 315/551] Update src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs --- src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs index 63b04be3326..370e237c8bf 100644 --- a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs @@ -24,9 +24,9 @@ protected override void Initialize(ConsensusRequest[] requests) { var key = 0; - foreach (ConsensusRequest exit in requests) + foreach (ConsensusRequest req in requests) { - Set(Rlp.Encode(key++).Bytes, _codec.Encode(exit, RlpBehaviors.SkipTypedWrapping).Bytes); + Set(Rlp.Encode(key++).Bytes, _codec.Encode(req, RlpBehaviors.SkipTypedWrapping).Bytes); } } From 01deb2aedb2e5ba072d86b2d1999271023e171d0 Mon Sep 17 00:00:00 2001 From: Ahmad Bitar <33181301+smartprogrammer93@users.noreply.github.com> Date: Sat, 14 Sep 2024 07:29:44 +0300 Subject: [PATCH 316/551] Update src/Nethermind/Nethermind.Specs/ReleaseSpec.cs --- src/Nethermind/Nethermind.Specs/ReleaseSpec.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index 507070aeb7f..753b229426f 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -86,7 +86,12 @@ public bool IsEip1559Enabled public bool IsEip6780Enabled { get; set; } public bool IsEip4788Enabled { get; set; } public bool IsEip7002Enabled { get; set; } - public Address Eip7002ContractAddress { get; set; } + private Address? _eip7002ContractAddress; + public Address? Eip7002ContractAddress + { + get => IsEip7002Enabled ? _eip7002ContractAddress: null; + set => _eip7002ContractAddress = value; + } private Address _eip4788ContractAddress; public Address Eip4788ContractAddress From 3d5bde2c3c581c9c1f5f7b32aa47c89d369fc26f Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Sat, 14 Sep 2024 07:33:43 +0300 Subject: [PATCH 317/551] fix whitespace and build issue --- src/Nethermind/Nethermind.Specs/ReleaseSpec.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index 753b229426f..8f1315229cd 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -86,10 +86,11 @@ public bool IsEip1559Enabled public bool IsEip6780Enabled { get; set; } public bool IsEip4788Enabled { get; set; } public bool IsEip7002Enabled { get; set; } - private Address? _eip7002ContractAddress; - public Address? Eip7002ContractAddress + + private Address _eip7002ContractAddress; + public Address Eip7002ContractAddress { - get => IsEip7002Enabled ? _eip7002ContractAddress: null; + get => IsEip7002Enabled ? _eip7002ContractAddress : null; set => _eip7002ContractAddress = value; } From 2a60176880e0a421a316c2ca4a9ec1bd4ddc15d6 Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Sat, 14 Sep 2024 07:46:28 +0300 Subject: [PATCH 318/551] fix test --- .../DepositProcessorTests.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs index af3e12b1505..0ab384c1db4 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Linq; using FluentAssertions; using Nethermind.Abi; @@ -38,13 +39,13 @@ public void ShouldProcessDeposit() TxReceipt txReceipt = Build.A.Receipt.WithLogs( Build.A.LogEntry.WithData( - Bytes.FromHexString( - "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080040597307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000" + Bytes.FromHexString( + "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080040597307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000" + ) ) - ) - .WithAddress( - new Core.Address(Bytes.FromHexString("0x00000000219ab540356cbb839cbe05303d7705fa")) - ).TestObject + .WithAddress( + new Core.Address(Bytes.FromHexString("0x00000000219ab540356cbb839cbe05303d7705fa")) + ).TestObject ).TestObject; IReleaseSpec spec = Substitute.For(); @@ -60,6 +61,10 @@ public void ShouldProcessDeposit() Deposit processedDeposit = processedDeposits[0]; - processedDeposit.Should().BeEquivalentTo(deposit); + processedDeposit.Amount.Should().Be(deposit.Amount); + processedDeposit.Index.Should().Be(deposit.Index); + processedDeposit.Pubkey?.Span.SequenceEqual(deposit.Pubkey.Value.Span).Should().BeTrue(); + processedDeposit.Signature?.SequenceEqual(deposit.Signature).Should().BeTrue(); + processedDeposit.WithdrawalCredentials?.SequenceEqual(deposit.WithdrawalCredentials).Should().BeTrue(); } } From 3e156c9e05c5c28582dd89c0d8c80c54ade091fe Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 16 Aug 2024 17:25:03 +0200 Subject: [PATCH 319/551] spec changes start (cherry picked from commit df5ba74b72190aba4e0333d943558ecdb2d82296) --- .../Nethermind.Core/AuthorizationTuple.cs | 35 ------ .../Nethermind.Core/Eip7702Constants.cs | 5 +- .../Nethermind.Crypto/EthereumEcdsa.cs | 11 +- .../AuthorizedCodeInfoRepository.cs | 91 -------------- .../Nethermind.Evm/CodeInfoRepository.cs | 115 +++++++++++++++++- .../Nethermind.Evm/ICodeInfoRepository.cs | 2 + .../TransactionProcessor.cs | 24 ++-- .../Nethermind.Evm/TxExecutionContext.cs | 4 +- 8 files changed, 127 insertions(+), 160 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index ae980e7afb0..82da41b5284 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -35,39 +35,4 @@ public AuthorizationTuple( /// may be recovered at a later point. /// public Address? Authority { get; set; } = authority; - - /// - /// Determines if this is wellformed according to spec. - /// - /// - /// - /// - /// - public bool IsValidForExecution(IAccountStateProvider accountStateProvider, ulong chainId, [NotNullWhen(false)] out string? error) - { - if (Authority is null) - { - error = "Bad signature."; - return false; - } - if (ChainId != 0 && chainId != ChainId) - { - error = $"Chain id ({ChainId}) does not match."; - return false; - } - if (accountStateProvider.HasCode(Authority)) - { - error = $"Authority ({Authority}) has code deployed."; - return false; - } - - UInt256 authNonce = accountStateProvider.GetNonce(Authority); - if (Nonce is not null && authNonce != Nonce) - { - error = $"Skipping tuple in authorization_list because nonce is set to {Nonce}, but authority ({Authority}) has {authNonce}."; - return false; - } - error = null; - return true; - } } diff --git a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs index 041156355c8..5dbbf59d9a4 100644 --- a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs +++ b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs @@ -2,13 +2,10 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Nethermind.Core; public static class Eip7702Constants { public const byte Magic = 0x05; + public static ReadOnlySpan DelegationHeader => [0xef, 0x01, 0x00]; } diff --git a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs index e105c94c2a7..4defe519ac7 100644 --- a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs @@ -29,20 +29,15 @@ public class EthereumEcdsa : Ecdsa, IEthereumEcdsa private readonly AuthorizationTupleDecoder _tupleDecoder = new(); private readonly ulong _chainIdValue; - private readonly ILogger _logger; + public ulong ChainId => _chainIdValue; - public EthereumEcdsa(ulong chainId, ILogManager logManager) + public EthereumEcdsa(ulong chainId) { - _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _chainIdValue = chainId; } public void Sign(PrivateKey privateKey, Transaction tx, bool isEip155Enabled) { - if (_logger.IsDebug) - _logger.Debug( - $"Signing transaction {tx.SenderAddress} -> {tx.To} ({tx.Value}) with data of length {tx.Data?.Length}"); - if (tx.Type != TxType.Legacy) { tx.ChainId = _chainIdValue; @@ -55,8 +50,6 @@ public void Sign(PrivateKey privateKey, Transaction tx, bool isEip155Enabled) { tx.Signature.V = tx.Signature.V + 8 + 2 * _chainIdValue; } - - if (_logger.IsDebug) _logger.Debug($"Transaction {tx.SenderAddress} -> {tx.To} ({tx.Value}) signed"); } /// diff --git a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs deleted file mode 100644 index b89ef877348..00000000000 --- a/src/Nethermind/Nethermind.Evm/AuthorizedCodeInfoRepository.cs +++ /dev/null @@ -1,91 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.Crypto; -using Nethermind.Core.Specs; -using Nethermind.Core; -using Nethermind.Evm.CodeAnalysis; -using Nethermind.State; -using System; -using System.Collections.Generic; -using Nethermind.Logging; -using Nethermind.Crypto; - -namespace Nethermind.Evm; -public class AuthorizedCodeInfoRepository : ICodeInfoRepository -{ - public IEnumerable
AuthorizedAddresses => _authorizedCode.Keys; - private readonly Dictionary _authorizedCode = new(); - private readonly EthereumEcdsa _ethereumEcdsa; - private readonly ICodeInfoRepository _codeInfoRepository; - private readonly ulong _chainId; - private readonly ILogger _logger; - private readonly byte[] _internalBuffer = new byte[128]; - - public AuthorizedCodeInfoRepository(ICodeInfoRepository codeInfoRepository, ulong chainId, ILogger? logger = null) - { - _codeInfoRepository = codeInfoRepository; - _chainId = chainId; - _ethereumEcdsa = new EthereumEcdsa(_chainId, NullLogManager.Instance); - _logger = logger ?? NullLogger.Instance; - _internalBuffer[0] = Eip7702Constants.Magic; - } - public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => - _authorizedCode.TryGetValue(codeSource, out CodeInfo result) - ? result - : _codeInfoRepository.GetCachedCodeInfo(worldState, codeSource, vmSpec); - - public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) => _codeInfoRepository.GetOrAdd(codeHash, initCode); - - public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) => - _codeInfoRepository.InsertCode(state, code, codeOwner, spec); - - /// - /// Copy code from and set it to override . - /// Main use for this is for https://eips.ethereum.org/EIPS/eip-7702 - /// - public void CopyCodeAndOverwrite( - IWorldState worldState, - Address codeSource, - Address target, - IReleaseSpec vmSpec) - { - if (!_authorizedCode.ContainsKey(target)) - { - _authorizedCode.Add(target, GetCachedCodeInfo(worldState, codeSource, vmSpec)); - } - } - - /// - /// Build a code cache from transaction authorization_list authorized by signature. - /// eip-7702 - /// - public void InsertFromAuthorizations( - IWorldState worldState, - AuthorizationTuple?[] authorizations, - IReleaseSpec spec) - { - _authorizedCode.Clear(); - - //TODO optimize - foreach (AuthorizationTuple? authTuple in authorizations) - { - if (authTuple is null) - continue; - authTuple.Authority = authTuple.Authority ?? _ethereumEcdsa.RecoverAddress(authTuple); - - string? error; - if (!authTuple.IsValidForExecution(worldState, _chainId, out error)) - { - if (_logger.IsDebug) _logger.Debug($"Skipping tuple in authorization_list: {error}"); - continue; - } - CopyCodeAndOverwrite(worldState, authTuple.CodeAddress, authTuple.Authority, spec); - } - } - - public void ClearAuthorizations() - { - _authorizedCode.Clear(); - } -} diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index c1466f866f2..3317998a984 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -16,6 +16,9 @@ using Nethermind.Evm.Precompiles.Bls; using Nethermind.Evm.Precompiles.Snarks; using Nethermind.State; +using Nethermind.Int256; +using Nethermind.Crypto; +using System.Linq; namespace Nethermind.Evm; @@ -62,6 +65,7 @@ public bool TryGet(in ValueHash256 codeHash, [NotNullWhen(true)] out CodeInfo? c private static readonly FrozenDictionary _precompiles = InitializePrecompiledContracts(); private static readonly CodeLruCache _codeCache = new(); private readonly FrozenDictionary _localPrecompiles; + private readonly EthereumEcdsa _ethereumEcdsa; private static FrozenDictionary InitializePrecompiledContracts() { @@ -95,11 +99,12 @@ private static FrozenDictionary InitializePrecompiledCon }.ToFrozenDictionary(); } - public CodeInfoRepository(ConcurrentDictionary, bool)>? precompileCache = null) + public CodeInfoRepository(ulong chainId, ConcurrentDictionary, bool)>? precompileCache = null) { + _ethereumEcdsa = new EthereumEcdsa(chainId); _localPrecompiles = precompileCache is null ? _precompiles - : _precompiles.ToFrozenDictionary(kvp => kvp.Key, kvp => CreateCachedPrecompile(kvp, precompileCache)); + : _precompiles.ToFrozenDictionary(kvp => kvp.Key, kvp => CreateCachedPrecompile(kvp, precompileCache)); } public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) @@ -121,11 +126,16 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR { byte[]? code = worldState.GetCode(codeHash); + if (HasDelegatedCode(code)) + { + code = worldState.GetCode(ParseDelegatedAddress(code)); + } + if (code is null) { MissingCode(codeSource, codeHash); } - + cachedCodeInfo = new CodeInfo(code); cachedCodeInfo.AnalyseInBackgroundIfRequired(); _codeCache.Set(codeHash, cachedCodeInfo); @@ -168,6 +178,105 @@ public void InsertCode(IWorldState state, ReadOnlyMemory code, Address cod _codeCache.Set(codeHash, codeInfo); } + + /// + /// Insert code delegations from transaction authorization_list authorized by signature, + /// and return all authority addresses that was accessed. + /// eip-7702 + /// + public IEnumerable
InsertFromAuthorizations( + IWorldState worldState, + AuthorizationTuple?[] authorizations, + IReleaseSpec spec) + { + List
result = new List
(); + //TODO optimize + foreach (AuthorizationTuple? authTuple in authorizations) + { + if (authTuple is null) + continue; + authTuple.Authority = authTuple.Authority ?? _ethereumEcdsa.RecoverAddress(authTuple); + if (!result.Contains(authTuple.Authority)) + result.Add(authTuple.Authority); + string? error; + if (!IsValidForExecution(authTuple, worldState, _ethereumEcdsa.ChainId, spec, out error)) + { + continue; + } + InsertAuthorizedCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); + } + return result; + + void InsertAuthorizedCode(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) + { + byte[] authorizedBuffer = new byte[Eip7702Constants.DelegationHeader.Length + Address.Size]; + codeSource.Bytes.CopyTo(authorizedBuffer, Eip7702Constants.DelegationHeader.Length); + Hash256 codeHash = Keccak.Compute(authorizedBuffer); + state.InsertCode(authority, codeHash, authorizedBuffer.AsMemory(), spec); + _codeCache.Set(codeHash, new CodeInfo(authorizedBuffer)); + state.IncrementNonce(authority); + } + } + + /// + /// Determines if a is wellformed according to spec. + /// + private bool IsValidForExecution( + AuthorizationTuple authorizationTuple, + IWorldState stateProvider, + ulong chainId, + IReleaseSpec spec, + [NotNullWhen(false)] out string? error) + { + if (authorizationTuple.Authority is null) + { + error = "Bad signature."; + return false; + } + if (authorizationTuple.ChainId != 0 && chainId != authorizationTuple.ChainId) + { + error = $"Chain id ({authorizationTuple.ChainId}) does not match."; + return false; + } + if (stateProvider.HasCode(authorizationTuple.Authority) + && HasDelegatedCode(stateProvider, authorizationTuple.Authority, spec)) + { + error = $"Authority ({authorizationTuple.Authority}) has code deployed."; + return false; + } + UInt256 authNonce = stateProvider.GetNonce(authorizationTuple.Authority); + if (authorizationTuple.Nonce is not null && authNonce != authorizationTuple.Nonce) + { + error = $"Skipping tuple in authorization_list because nonce is set to {authorizationTuple.Nonce}, but authority ({authorizationTuple.Authority}) has {authNonce}."; + return false; + } + + error = null; + return true; + } + + private bool HasDelegatedCode(IWorldState worldState, Address source, IReleaseSpec spec) + { + CodeInfo codeInfo = GetCachedCodeInfo(worldState, source, spec); + return + HasDelegatedCode(codeInfo.MachineCode.Span); + } + + private static bool HasDelegatedCode(ReadOnlySpan code) + { + return + code.Length >= Eip7702Constants.DelegationHeader.Length + && Eip7702Constants.DelegationHeader.SequenceEqual( + code.Slice(Eip7702Constants.DelegationHeader.Length)); + } + + private static Address ParseDelegatedAddress(byte[] code) + { + if (code.Length != Eip7702Constants.DelegationHeader.Length + Address.Size) + throw new ArgumentException("Not valid delegation code.", nameof(code)); + return new Address(code.Skip(Eip7702Constants.DelegationHeader.Length).ToArray()); + } + private CodeInfo CreateCachedPrecompile( in KeyValuePair originalPrecompile, ConcurrentDictionary, bool)> cache) => diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index 6fde3cbfe7f..820334727fc 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -15,4 +16,5 @@ public interface ICodeInfoRepository CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec); + IEnumerable
InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index f9c2e51d896..8aff0609f7b 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -33,7 +33,6 @@ public class TransactionProcessor : ITransactionProcessor protected IWorldState WorldState { get; private init; } protected IVirtualMachine VirtualMachine { get; private init; } private readonly ICodeInfoRepository _codeInfoRepository; - private AuthorizedCodeInfoRepository? _authorizedCodeInfoRepository; [Flags] protected enum ExecutionOptions @@ -82,7 +81,7 @@ public TransactionProcessor( WorldState = worldState; VirtualMachine = virtualMachine; _codeInfoRepository = codeInfoRepository; - Ecdsa = new EthereumEcdsa(specProvider.ChainId, logManager); + Ecdsa = new EthereumEcdsa(specProvider.ChainId); } public TransactionResult CallAndRestore(Transaction transaction, in BlockExecutionContext blCtx, ITxTracer txTracer) => @@ -129,16 +128,11 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (!(result = BuyGas(tx, header, spec, tracer, opts, effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment))) return result; if (!(result = ValidateNonce(tx))) return result; - ICodeInfoRepository codeInfoRepository = _codeInfoRepository; if (spec.IsEip7702Enabled) - { - _authorizedCodeInfoRepository ??= new(codeInfoRepository, SpecProvider.ChainId, Logger); - _authorizedCodeInfoRepository.ClearAuthorizations(); - codeInfoRepository = _authorizedCodeInfoRepository; - + { if (tx.HasAuthorizationList) { - _authorizedCodeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); + _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); } } @@ -146,7 +140,7 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); - ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, codeInfoRepository); + ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository); long gasAvailable = tx.GasLimit - intrinsicGas; ExecuteEvmCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); @@ -428,7 +422,7 @@ protected ExecutionEnvironment BuildExecutionEnvironment( Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0); if (recipient is null) ThrowInvalidDataException("Recipient has not been resolved properly before tx execution"); - TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes, codeInfoRepository); + TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data ?? Memory.Empty) @@ -483,7 +477,7 @@ protected void ExecuteEvmCall( if (tx.IsContractCreation) { // if transaction is a contract creation then recipient address is the contract deployment address - PrepareAccountForContractDeployment(env.ExecutingAccount, env.TxExecutionContext.CodeInfoRepository, spec); + PrepareAccountForContractDeployment(env.ExecutingAccount, _codeInfoRepository, spec); } ExecutionType executionType = tx.IsContractCreation ? ExecutionType.CREATE : ExecutionType.TRANSACTION; @@ -530,7 +524,7 @@ protected void ExecuteEvmCall( if (unspentGas >= codeDepositGasCost) { var code = substate.Output.ToArray(); - env.TxExecutionContext.CodeInfoRepository.InsertCode(WorldState, code, env.ExecutingAccount, spec); + _codeInfoRepository.InsertCode(WorldState, code, env.ExecutingAccount, spec); unspentGas -= codeDepositGasCost; } @@ -563,7 +557,7 @@ protected void ExecuteEvmCall( header.GasUsed += spentGas; } - private void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionEnvironment env, EvmState state) + private void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionEnvironment env, EvmState state, IEnumerable
authorities) { if (spec.UseTxAccessLists) { @@ -583,7 +577,7 @@ private void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, Execu if (spec.IsEip7702Enabled) { - foreach (Address authorized in _authorizedCodeInfoRepository!.AuthorizedAddresses) + foreach (Address authorized in authorities) { state.WarmUp(authorized); } diff --git a/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs b/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs index e1aa68c2b4e..640c7c30a0e 100644 --- a/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs +++ b/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs @@ -10,13 +10,11 @@ public readonly struct TxExecutionContext( in BlockExecutionContext blockExecutionContext, Address origin, in UInt256 gasPrice, - byte[][] blobVersionedHashes, - ICodeInfoRepository codeInfoRepository) + byte[][] blobVersionedHashes) { public readonly BlockExecutionContext BlockExecutionContext = blockExecutionContext; public Address Origin { get; } = origin; public UInt256 GasPrice { get; } = gasPrice; public byte[][]? BlobVersionedHashes { get; } = blobVersionedHashes; - public ICodeInfoRepository CodeInfoRepository { get; } = codeInfoRepository; } } From ceeee20d530ff0bc1d9754e5a29a3d6c19af26cb Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 16 Aug 2024 17:46:20 +0200 Subject: [PATCH 320/551] revert nonce increments (cherry picked from commit 77f242390ae6c61f0286af7b11481bc50449f973) --- .../TransactionProcessorEip7702Tests.cs | 6 ++--- .../TransactionProcessor.cs | 24 +++++++++---------- .../OptimismTransactionProcessor.cs | 9 +++---- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 3ca91acf9c6..f084a53e597 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -120,9 +120,9 @@ public static IEnumerable SenderSignerCases() yield return new object[] { TestItem.PrivateKeyA, TestItem.PrivateKeyA }; } [TestCaseSource(nameof(SenderSignerCases))] - public void Execute_SenderAndSignerCombinationsWithCodeThatSavesCallerAddress_SenderAddressIsSaved(PrivateKey sender, PrivateKey signer) + public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_SenderAddressIsSaved(PrivateKey sender, PrivateKey signer) { - Address codeSource = TestItem.AddressC; + Address codeSource = TestItem.AddressB; _stateProvider.CreateAccount(sender.Address, 1.Ether()); //Save caller in storage slot 0 byte[] code = Prepare.EvmCode @@ -136,7 +136,7 @@ public void Execute_SenderAndSignerCombinationsWithCodeThatSavesCallerAddress_Se .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, 0)) + .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 8aff0609f7b..f8d084d293a 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -126,24 +126,24 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (!(result = ValidateSender(tx, header, spec, tracer, opts))) return result; if (!(result = BuyGas(tx, header, spec, tracer, opts, effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment))) return result; - if (!(result = ValidateNonce(tx))) return result; + if (!(result = IncrementNonce(tx, header, spec, tracer, opts))) return result; + + if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); + + IEnumerable
authorities = Array.Empty
(); if (spec.IsEip7702Enabled) { if (tx.HasAuthorizationList) { - _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); + authorities = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); } } - IncrementNonce(tx, header, spec, tracer, opts); - - if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); - ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository); long gasAvailable = tx.GasLimit - intrinsicGas; - ExecuteEvmCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); + ExecuteEvmCall(tx, header, spec, tracer, opts, authorities, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode); // Finalize @@ -395,7 +395,7 @@ protected virtual TransactionResult BuyGas(Transaction tx, BlockHeader header, I return TransactionResult.Ok; } - protected virtual TransactionResult ValidateNonce(Transaction tx) + protected virtual TransactionResult IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) { if (tx.IsSystem()) return TransactionResult.Ok; @@ -404,12 +404,9 @@ protected virtual TransactionResult ValidateNonce(Transaction tx) TraceLogInvalidTx(tx, $"WRONG_TRANSACTION_NONCE: {tx.Nonce} (expected {WorldState.GetNonce(tx.SenderAddress)})"); return "wrong transaction nonce"; } - return TransactionResult.Ok; - } - protected virtual void IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) - { WorldState.IncrementNonce(tx.SenderAddress); + return TransactionResult.Ok; } protected ExecutionEnvironment BuildExecutionEnvironment( @@ -451,6 +448,7 @@ protected void ExecuteEvmCall( IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, + IEnumerable
authorities, in long gasAvailable, in ExecutionEnvironment env, out TransactionSubstate? substate, @@ -484,7 +482,7 @@ protected void ExecuteEvmCall( using (EvmState state = new(unspentGas, env, executionType, true, snapshot, false)) { - WarmUp(tx, header, spec, env, state); + WarmUp(tx, header, spec, env, state, authorities); substate = !tracer.IsTracingActions ? VirtualMachine.Run(state, WorldState, tracer) diff --git a/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs index ea2c0209c61..aa71d1fae45 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs @@ -131,12 +131,13 @@ protected override TransactionResult BuyGas(Transaction tx, BlockHeader header, return TransactionResult.Ok; } - protected override TransactionResult ValidateNonce(Transaction tx) + protected override TransactionResult IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) { - if (tx.IsDeposit()) - return TransactionResult.Ok; + if (!tx.IsDeposit()) + return base.IncrementNonce(tx, header, spec, tracer, opts); - return base.ValidateNonce(tx); + WorldState.IncrementNonce(tx.SenderAddress!); + return TransactionResult.Ok; } protected override TransactionResult ValidateSender(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) => From d4e329814301c720e6d8f7091e987dc7c2c65234 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 16 Aug 2024 18:38:47 +0200 Subject: [PATCH 321/551] intrinsic gas (cherry picked from commit bf81101f665b96dd99f2313fabb76dd4276ba957) --- src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index 6179f51fa30..f2e1c978418 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -94,7 +94,7 @@ private static long AuthorizationListCost(Transaction transaction, IReleaseSpec if (authorizationList.Length != 0) { - return GasCostOf.PerAuthBaseCost * authorizationList.Length; + return GasCostOf.NewAccount * authorizationList.Length; } } From 58da91dbda59b6a216812bed9a3f408df141e3bd Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 16 Sep 2024 15:47:16 +0200 Subject: [PATCH 322/551] cherry-picking --- src/tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests b/src/tests index ebbaa54c7a9..8c215d6b56f 160000 --- a/src/tests +++ b/src/tests @@ -1 +1 @@ -Subproject commit ebbaa54c7a90e74313b846369fe87e9bd3a58369 +Subproject commit 8c215d6b56fed36501d04c165093357f102de2ac From 129f1344ba30f03bc95dc5b00203f773f0cc3a9c Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 19 Aug 2024 12:54:33 +0200 Subject: [PATCH 323/551] build fix (cherry picked from commit 3d94703aeb2e174eb853ae1fa6ec0caa850dc38f) --- .../Nethermind.AuRa.Test/AuRaSealerTests.cs | 2 +- .../Contract/TxPriorityContractTests.cs | 2 +- .../Producers/DevBlockproducerTests.cs | 2 +- .../Receipts/PersistentReceiptStorageTests.cs | 2 +- .../Receipts/ReceiptsIteratorTests.cs | 2 +- .../Receipts/ReceiptsRecoveryTests.cs | 2 +- .../Nethermind.Blockchain.Test/ReorgTests.cs | 4 +- .../CliqueBlockProducerTests.cs | 4 +- .../CliqueSealEngineTests.cs | 2 +- .../Nethermind.Clique.Test/CliqueTests.cs | 2 +- .../SnapshotManagerTests.cs | 2 +- .../AuRaBlockProcessor.cs | 2 +- .../Processing/ReadOnlyTxProcessingEnv.cs | 2 +- .../Blockchain/TestBlockchain.cs | 6 +- .../Builders/BlockTreeBuilder.cs | 2 +- .../Builders/TransactionBuilder.cs | 4 +- .../Crypto/EthereumEcdsaTests.cs | 14 +-- .../Encoding/BlockDecoderTests.cs | 2 +- .../Encoding/ShardBlobTxDecoderTests.cs | 4 +- .../Encoding/TxDecoderTests.cs | 98 ++++--------------- .../Nethermind.Core.Test/SignerTests.cs | 4 +- ...oryTests.cs => CodeInfoRepositoryTests.cs} | 51 +++------- .../Eip3529RefundsTests.cs | 2 +- .../Nethermind.Evm.Test/Eip6780Tests.cs | 2 +- .../EvmPooledMemoryTests.cs | 4 +- .../StorageAndSelfDestructTests.cs | 8 +- .../Tracing/GasEstimationTests.cs | 4 +- .../TransactionProcessorEip4844Tests.cs | 4 +- .../TransactionProcessorEip7702Tests.cs | 4 +- .../TransactionProcessorFeeTests.cs | 4 +- .../TransactionProcessorTests.cs | 4 +- .../VirtualMachineTestsBase.cs | 4 +- .../Precompiles/EcRecoverPrecompile.cs | 2 +- .../TransactionProcessor.cs | 2 +- .../Nethermind.Evm/TxExecutionContext.cs | 4 +- .../Nethermind.Evm/VirtualMachine.cs | 2 +- .../TxPoolBridgeTests.cs | 2 +- .../OverridableCodeInfoRepository.cs | 5 + .../SimulateReadOnlyBlocksProcessingEnv.cs | 2 +- .../Nethermind.Init/Steps/InitCrypto.cs | 2 +- .../Steps/InitializeBlockchain.cs | 2 +- .../Modules/Eth/EthRpcModuleTests.cs | 2 +- .../Modules/ParityRpcModuleTests.cs | 2 +- .../Modules/PersonalRpcModuleTests.cs | 2 +- .../Modules/Proof/ProofRpcModuleTests.cs | 4 +- .../Modules/TestRpcBlockchain.cs | 2 +- .../Modules/Trace/ParityStyleTracerTests.cs | 4 +- .../ProcessedTransactionsDbCleanerTests.cs | 2 +- .../Synchronization/MergeBlockDownloader.cs | 2 +- .../Nethermind.Mev.Test/MevMegabundleTests.cs | 2 +- .../V62/BlockBodiesMessageSerializerTests.cs | 8 +- .../V62/TransactionsMessageSerializerTests.cs | 20 ++-- .../Eth/V66/Eth66ProtocolHandlerTests.cs | 2 +- .../AuthEip8MessageSerializerTests.cs | 4 +- .../Handshake/AuthMessageSerializerTests.cs | 4 +- .../EncryptionHandshakeServiceTests.cs | 2 +- .../SyncThreadTests.cs | 4 +- .../Blocks/BlockDownloader.cs | 2 +- .../ReceiptStorageTests.cs | 2 +- .../TxBroadcasterTests.cs | 2 +- .../Nethermind.TxPool.Test/TxPoolTests.cs | 4 +- .../Nethermind.Wallet.Test/WalletTests.cs | 2 +- 62 files changed, 137 insertions(+), 219 deletions(-) rename src/Nethermind/Nethermind.Evm.Test/{AuthorizedCodeInfoRepositoryTests.cs => CodeInfoRepositoryTests.cs} (52%) diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuRaSealerTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuRaSealerTests.cs index 156a0517116..3868396dabf 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuRaSealerTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuRaSealerTests.cs @@ -73,7 +73,7 @@ public async Task seal_can_recover_address() block = await _auRaSealer.SealBlock(block, CancellationToken.None); - EthereumEcdsa ecdsa = new(BlockchainIds.Morden, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.Morden); Signature signature = new(block.Header.AuRaSignature); signature.V += Signature.VOffset; Address? recoveredAddress = ecdsa.RecoverAddress(signature, block.Header.CalculateHash(RlpBehaviors.ForSealing)); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/TxPriorityContractTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/TxPriorityContractTests.cs index 1caa20bf3a9..d1554f7b638 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Contract/TxPriorityContractTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/TxPriorityContractTests.cs @@ -296,7 +296,7 @@ public class TxPermissionContractBlockchainWithBlocks : TxPermissionContractBloc { protected override async Task AddBlocksOnStart() { - EthereumEcdsa ecdsa = new(ChainSpec.ChainId, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(ChainSpec.ChainId); await AddBlock( SignTransactions(ecdsa, TestItem.PrivateKeyA, 0, diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs index 3afe77c9aa6..fa9634a956d 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs @@ -58,7 +58,7 @@ public void Test() LimboLogs.Instance); StateReader stateReader = new(trieStore, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); BlockhashProvider blockhashProvider = new(blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new( blockhashProvider, specProvider, diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Receipts/PersistentReceiptStorageTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Receipts/PersistentReceiptStorageTests.cs index 9128bc17e76..e09182ba04e 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Receipts/PersistentReceiptStorageTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Receipts/PersistentReceiptStorageTests.cs @@ -48,7 +48,7 @@ public PersistentReceiptStorageTests(bool useCompactReceipts) public void SetUp() { MainnetSpecProvider specProvider = MainnetSpecProvider.Instance; - EthereumEcdsa ethereumEcdsa = new(specProvider.ChainId, LimboLogs.Instance); + EthereumEcdsa ethereumEcdsa = new(specProvider.ChainId); _receiptConfig = new ReceiptConfig(); _receiptsRecovery = new(ethereumEcdsa, specProvider); _receiptsDb = new TestMemColumnsDb(); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsIteratorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsIteratorTests.cs index da658279ddc..a97147ae00f 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsIteratorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsIteratorTests.cs @@ -107,7 +107,7 @@ private ReceiptsIterator CreateIterator(TxReceipt[] receipts, Block block) Span span = stream.AsSpan(); TestMemDb blockDb = new TestMemDb(); ReceiptsRecovery recovery = new ReceiptsRecovery( - new EthereumEcdsa(MainnetSpecProvider.Instance.ChainId, LimboLogs.Instance), + new EthereumEcdsa(MainnetSpecProvider.Instance.ChainId), MainnetSpecProvider.Instance, false ); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsRecoveryTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsRecoveryTests.cs index fbf4bf4cde7..6d72e44f4f9 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsRecoveryTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Receipts/ReceiptsRecoveryTests.cs @@ -20,7 +20,7 @@ public class ReceiptsRecoveryTests public void Setup() { MainnetSpecProvider specProvider = MainnetSpecProvider.Instance; - EthereumEcdsa ethereumEcdsa = new(specProvider.ChainId, LimboLogs.Instance); + EthereumEcdsa ethereumEcdsa = new(specProvider.ChainId); _receiptsRecovery = new ReceiptsRecovery(ethereumEcdsa, specProvider); } diff --git a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs index e6d0ba95a9c..fa629f88730 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs @@ -39,7 +39,7 @@ public void Setup() WorldState stateProvider = new(trieStore, memDbProvider.CodeDb, LimboLogs.Instance); StateReader stateReader = new(trieStore, memDbProvider.CodeDb, LimboLogs.Instance); ISpecProvider specProvider = MainnetSpecProvider.Instance; - EthereumEcdsa ecdsa = new(1, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(1); ITransactionComparerProvider transactionComparerProvider = new TransactionComparerProvider(specProvider, _blockTree); @@ -57,7 +57,7 @@ public void Setup() LimboLogs.Instance, transactionComparerProvider.GetDefaultComparer()); BlockhashProvider blockhashProvider = new(_blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new( blockhashProvider, specProvider, diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs index 7dee4e7ff94..69e6cb7156f 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs @@ -51,7 +51,7 @@ private class On private readonly ILogger _logger; private static readonly ITimestamper _timestamper = Timestamper.Default; private readonly CliqueConfig _cliqueConfig; - private readonly EthereumEcdsa _ethereumEcdsa = new(BlockchainIds.Goerli, LimboLogs.Instance); + private readonly EthereumEcdsa _ethereumEcdsa = new(BlockchainIds.Goerli); private readonly Dictionary _logManagers = new(); private readonly Dictionary _snapshotManager = new(); private readonly Dictionary _blockTrees = new(); @@ -128,7 +128,7 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f _genesis.Header.Hash = _genesis.Header.CalculateHash(); _genesis3Validators.Header.Hash = _genesis3Validators.Header.CalculateHash(); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); TransactionProcessor transactionProcessor = new(goerliSpecProvider, stateProvider, new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, nodeLogManager), codeInfoRepository, diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueSealEngineTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueSealEngineTests.cs index 14f1e249ab9..38eefe80efe 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueSealEngineTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueSealEngineTests.cs @@ -98,7 +98,7 @@ public void Setup_chain() private CliqueSealer BuildSealer(int currentBlock, IDb db) { - IEthereumEcdsa ecdsa = new EthereumEcdsa(BlockchainIds.Goerli, LimboLogs.Instance); + IEthereumEcdsa ecdsa = new EthereumEcdsa(BlockchainIds.Goerli); CliqueConfig config = new(); int currentSignerIndex = (currentBlock % _signers.Count); _currentSigner = _signers[currentSignerIndex]; diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueTests.cs index 21c436e18ca..5bdaa0eac99 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueTests.cs @@ -60,7 +60,7 @@ public void Setup_chain() MemDb db = new(); CliqueConfig config = new(); - _ecdsa = new EthereumEcdsa(BlockchainIds.Goerli, LimboLogs.Instance); + _ecdsa = new EthereumEcdsa(BlockchainIds.Goerli); _snapshotManager = new SnapshotManager(config, db, _blockTree, _ecdsa, LimboLogs.Instance); _clique = new CliqueSealer(new Signer(BlockchainIds.Goerli, key, LimboLogs.Instance), config, _snapshotManager, LimboLogs.Instance); _sealValidator = new CliqueSealValidator(config, _snapshotManager, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Clique.Test/SnapshotManagerTests.cs b/src/Nethermind/Nethermind.Clique.Test/SnapshotManagerTests.cs index 618c4cdac1a..549f5175241 100644 --- a/src/Nethermind/Nethermind.Clique.Test/SnapshotManagerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/SnapshotManagerTests.cs @@ -98,7 +98,7 @@ public void Recognises_signer_turn() Block genesis = CliqueTests.GetGenesis(); Snapshot snapshot = snapshotManager.GetOrCreateSnapshot(0, genesis.Hash); // Here we use a random chain id, should be test independent. - SnapshotManager manager = new(CliqueConfig.Default, _snapshotDb, _blockTree, new EthereumEcdsa(BlockchainIds.GenericNonRealNetwork, LimboLogs.Instance), LimboLogs.Instance); + SnapshotManager manager = new(CliqueConfig.Default, _snapshotDb, _blockTree, new EthereumEcdsa(BlockchainIds.GenericNonRealNetwork), LimboLogs.Instance); // Block 1 Assert.IsTrue(manager.IsInTurn(snapshot, 1, _signer1)); Assert.IsFalse(manager.IsInTurn(snapshot, 1, _signer2)); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index ee442a373b5..51190c3dd7e 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -142,7 +142,7 @@ private AddingTxEventArgs CheckTxPosdaoRules(AddingTxEventArgs args) if (tx.Signature is not null) { IReleaseSpec spec = _specProvider.GetSpec(args.Block.Header); - EthereumEcdsa ecdsa = new(_specProvider.ChainId, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(_specProvider.ChainId); Address txSenderAddress = ecdsa.RecoverAddress(tx, !spec.ValidateChainId); if (tx.SenderAddress != txSenderAddress) { diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs index 183a594d6d0..8115d0d3af3 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs @@ -48,7 +48,7 @@ public ReadOnlyTxProcessingEnv( IWorldState? worldStateToWarmUp = null ) : base(worldStateManager, readOnlyBlockTree, specProvider, logManager, worldStateToWarmUp) { - CodeInfoRepository = new CodeInfoRepository((worldStateToWarmUp as IPreBlockCaches)?.Caches.PrecompileCache); + CodeInfoRepository = new CodeInfoRepository(1,(worldStateToWarmUp as IPreBlockCaches)?.Caches.PrecompileCache); Machine = new VirtualMachine(BlockhashProvider, specProvider, CodeInfoRepository, logManager); BlockTree = readOnlyBlockTree ?? throw new ArgumentNullException(nameof(readOnlyBlockTree)); BlockhashProvider = new BlockhashProvider(BlockTree, specProvider, StateProvider, logManager); diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index dfa45462790..3e8b5f68aaa 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -126,7 +126,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = Timestamper = new ManualTimestamper(new DateTime(2020, 2, 15, 12, 50, 30, DateTimeKind.Utc)); JsonSerializer = new EthereumJsonSerializer(); SpecProvider = CreateSpecProvider(specProvider ?? MainnetSpecProvider.Instance); - EthereumEcdsa = new EthereumEcdsa(SpecProvider.ChainId, LogManager); + EthereumEcdsa = new EthereumEcdsa(SpecProvider.ChainId); DbProvider = await CreateDbProvider(); TrieStore = new TrieStore(StateDb, LogManager); State = new WorldState(TrieStore, DbProvider.CodeDb, LogManager, new PreBlockCaches()); @@ -184,7 +184,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = NonceManager = new NonceManager(chainHeadInfoProvider.AccountStateProvider); _trieStoreWatcher = new TrieStoreBoundaryWatcher(WorldStateManager, BlockTree, LogManager); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); ReceiptStorage = new InMemoryReceiptStorage(blockTree: BlockTree); VirtualMachine virtualMachine = new(new BlockhashProvider(BlockTree, SpecProvider, State, LogManager), SpecProvider, codeInfoRepository, LogManager); TxProcessor = new TransactionProcessor(SpecProvider, State, virtualMachine, codeInfoRepository, LogManager); @@ -206,7 +206,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = SealEngine = new SealEngine(sealer, Always.Valid); BloomStorage bloomStorage = new(new BloomConfig(), new MemDb(), new InMemoryDictionaryFileStoreFactory()); - ReceiptsRecovery receiptsRecovery = new(new EthereumEcdsa(SpecProvider.ChainId, LimboLogs.Instance), SpecProvider); + ReceiptsRecovery receiptsRecovery = new(new EthereumEcdsa(SpecProvider.ChainId), SpecProvider); LogFinder = new LogFinder(BlockTree, ReceiptStorage, ReceiptStorage, bloomStorage, LimboLogs.Instance, receiptsRecovery); BeaconBlockRootHandler = new BeaconBlockRootHandler(); BlockProcessor = CreateBlockProcessor(); diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockTreeBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockTreeBuilder.cs index 1f509b8e621..52f1039b9cf 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockTreeBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockTreeBuilder.cs @@ -383,7 +383,7 @@ public static void ExtendTree(IBlockTree blockTree, long newChainLength) public BlockTreeBuilder WithTransactions(IReceiptStorage receiptStorage, Func>? logsForBlockBuilder = null) { - _ecdsa = new EthereumEcdsa(BlockTree.ChainId, LimboLogs.Instance); + _ecdsa = new EthereumEcdsa(BlockTree.ChainId); _receiptStorage = receiptStorage; _logCreationFunction = logsForBlockBuilder; return this; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index 9b2092310fb..2a47a676728 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -257,7 +257,7 @@ public TransactionBuilder Signed(IEthereumEcdsa ecdsa, PrivateKey privateKey, public TransactionBuilder Signed(PrivateKey? privateKey = null) { privateKey ??= TestItem.IgnoredPrivateKey; - EthereumEcdsa ecdsa = new(TestObjectInternal.ChainId ?? TestBlockchainIds.ChainId, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(TestObjectInternal.ChainId ?? TestBlockchainIds.ChainId); return Signed(ecdsa, privateKey, isEip155Enabled: true); } @@ -274,7 +274,7 @@ public TransactionBuilder SignedAndResolved(IEthereumEcdsa ecdsa, PrivateKey public TransactionBuilder SignedAndResolved(PrivateKey? privateKey = null) { privateKey ??= TestItem.IgnoredPrivateKey; - EthereumEcdsa ecdsa = new(TestObjectInternal.ChainId ?? TestBlockchainIds.ChainId, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(TestObjectInternal.ChainId ?? TestBlockchainIds.ChainId); ecdsa.Sign(privateKey, TestObjectInternal, true); TestObjectInternal.SenderAddress = privateKey.Address; return this; diff --git a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs index aeb32b08131..59747b9914e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs @@ -26,7 +26,7 @@ public class EthereumEcdsaTests [TestCaseSource(nameof(TestCaseSources))] public void Signature_verify_test((string Name, Transaction Tx) testCase) { - EthereumEcdsa ecdsa = new(BlockchainIds.Sepolia, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.Sepolia); ecdsa.Verify(testCase.Tx.SenderAddress!, testCase.Tx); } @@ -35,7 +35,7 @@ public void Signature_verify_test((string Name, Transaction Tx) testCase) [TestCase(false)] public void Signature_test_sepolia(bool eip155) { - EthereumEcdsa ecdsa = new(BlockchainIds.Sepolia, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.Sepolia); PrivateKey key = Build.A.PrivateKey.TestObject; Transaction tx = Build.A.Transaction.TestObject; ecdsa.Sign(key, tx, eip155); @@ -47,7 +47,7 @@ public void Signature_test_sepolia(bool eip155) [TestCase(false)] public void Signature_test_sepolia_1559(bool eip155) { - EthereumEcdsa ecdsa = new(BlockchainIds.Sepolia, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.Sepolia); PrivateKey key = Build.A.PrivateKey.TestObject; Transaction tx = Build.A.Transaction.WithType(TxType.EIP1559).TestObject; ecdsa.Sign(key, tx, eip155); @@ -59,7 +59,7 @@ public void Signature_test_sepolia_1559(bool eip155) [TestCase(false)] public void Signature_test_olympic(bool isEip155Enabled) { - EthereumEcdsa ecdsa = new(BlockchainIds.Mainnet, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.Mainnet); PrivateKey key = Build.A.PrivateKey.TestObject; Transaction tx = Build.A.Transaction.TestObject; ecdsa.Sign(key, tx, isEip155Enabled); @@ -71,7 +71,7 @@ public void Signature_test_olympic(bool isEip155Enabled) public void Sign_generic_network() { // maybe make random id so it captures the idea that signature should work irrespective of chain - EthereumEcdsa ecdsa = new(BlockchainIds.GenericNonRealNetwork, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.GenericNonRealNetwork); PrivateKey key = Build.A.PrivateKey.TestObject; Transaction tx = Build.A.Transaction.TestObject; ecdsa.Sign(key, tx, true); @@ -88,7 +88,7 @@ public static IEnumerable AuthorityTupleTestCaseSources() [TestCaseSource(nameof(AuthorityTupleTestCaseSources))] public void RecoverAddress_AuthorizationTupleOfDifferentSize_RecoversAddressCorrectly(AuthorizationTuple authorization) { - EthereumEcdsa ecdsa = new(BlockchainIds.GenericNonRealNetwork, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.GenericNonRealNetwork); Address? authority = ecdsa.RecoverAddress(authorization); @@ -102,7 +102,7 @@ private static AuthorizationTuple CreateAuthorizationTuple(ulong chainId, Addres Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; rlp.Data.AsSpan().CopyTo(code.Slice(1)); - EthereumEcdsa ecdsa = new(1, new OneLoggerLogManager(NullLogger.Instance)); + EthereumEcdsa ecdsa = new(1); PrivateKey signer = Build.A.PrivateKey.TestObject; Signature sig = ecdsa.Sign(signer, Keccak.Compute(code)); diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index bf378f9d01c..2b9b49dda37 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -28,7 +28,7 @@ public BlockDecoderTests() .WithData(new byte[] { (byte)i }) .WithNonce((UInt256)i) .WithValue((UInt256)i) - .Signed(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), TestItem.PrivateKeyA, true) + .Signed(new EthereumEcdsa(TestBlockchainIds.ChainId), TestItem.PrivateKeyA, true) .TestObject; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ShardBlobTxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ShardBlobTxDecoderTests.cs index 90d31d84929..be0fc49632c 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ShardBlobTxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ShardBlobTxDecoderTests.cs @@ -39,7 +39,7 @@ public void Roundtrip_ExecutionPayloadForm_for_shard_blobs((Transaction Tx, stri rlpStream.Position = 0; Transaction? decoded = _txDecoder.Decode(rlpStream); decoded!.SenderAddress = - new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance).RecoverAddress(decoded); + new EthereumEcdsa(TestBlockchainIds.ChainId).RecoverAddress(decoded); decoded.Hash = decoded.CalculateHash(); decoded.Should().BeEquivalentTo(testCase.Tx, testCase.Description); } @@ -55,7 +55,7 @@ public void Roundtrip_ValueDecoderContext_ExecutionPayloadForm_for_shard_blobs(( rlpStream.Position = 0; Transaction? decoded = _txDecoder.Decode(ref decoderContext); decoded!.SenderAddress = - new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance).RecoverAddress(decoded); + new EthereumEcdsa(TestBlockchainIds.ChainId).RecoverAddress(decoded); decoded.Hash = decoded.CalculateHash(); decoded.Should().BeEquivalentTo(testCase.Tx, testCase.Description); } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs index 8bdc7cb4d44..76dcc48a671 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/TxDecoderTests.cs @@ -24,32 +24,10 @@ public class TxDecoderTests { private readonly TxDecoder _txDecoder = new(); - public static IEnumerable<(Transaction, string)> ExtendedTestCaseSource() + public static IEnumerable<(TransactionBuilder, string)> TestObjectsSource() { - foreach ((Transaction, string) item in TestCaseSource()) - { - yield return item; - } - - yield return (Build.A.Transaction - .WithMaxFeePerGas(2.GWei()) - .WithType(TxType.SetCode) - .WithGasPrice(0) - .WithChainId(1559) - .WithAuthorizationCode([new AuthorizationTuple(0, TestItem.AddressF, 0, 0, [], [])]) - .SignedAndResolved().TestObject, "EIP 7702 with one tuple"); - yield return (Build.A.Transaction - .WithMaxFeePerGas(2.GWei()) - .WithType(TxType.SetCode) - .WithGasPrice(0) - .WithChainId(1559) - .WithAuthorizationCode([]) - .SignedAndResolved().TestObject, "EIP 7702 with empty list"); - } - public static IEnumerable<(Transaction, string)> TestCaseSource() - { - yield return (Build.A.Transaction.SignedAndResolved().TestObject, "basic"); - yield return (Build.A.Transaction.SignedAndResolved().WithNonce(0).TestObject, "basic with nonce=0"); + yield return (Build.A.Transaction.SignedAndResolved(), "basic"); + yield return (Build.A.Transaction.SignedAndResolved().WithNonce(0), "basic with nonce=0"); yield return (Build.A.Transaction .WithData(new byte[] { 1, 2, 3 }) .WithType(TxType.AccessList) @@ -59,7 +37,7 @@ public class TxDecoderTests .AddAddress(Address.Zero) .AddStorage(1) .Build()) - .SignedAndResolved().TestObject, "access list"); + .SignedAndResolved(), "access list"); yield return (Build.A.Transaction .WithData(new byte[] { 1, 2, 3 }) .WithType(TxType.EIP1559) @@ -70,22 +48,25 @@ public class TxDecoderTests .AddAddress(Address.Zero) .AddStorage(1) .Build()) - .SignedAndResolved().TestObject, "EIP1559 - access list"); + .SignedAndResolved(), "EIP1559 - access list"); yield return (Build.A.Transaction .WithType(TxType.EIP1559) .WithMaxFeePerGas(50) .WithMaxPriorityFeePerGas(10) .WithChainId(0) - .SignedAndResolved().TestObject, "EIP 1559"); + .SignedAndResolved(), "EIP 1559"); yield return (Build.A.Transaction .WithMaxFeePerGas(2.GWei()) .WithType(TxType.EIP1559) .WithGasPrice(0) .WithChainId(1559) - .SignedAndResolved().TestObject, "EIP 1559 second test case"); + .SignedAndResolved(), "EIP 1559 second test case"); } - [TestCaseSource(nameof(ExtendedTestCaseSource))] + public static IEnumerable<(Transaction, string)> TestCaseSource() + => TestObjectsSource().Select(tos => (tos.Item1.TestObject, tos.Item2)); + + [TestCaseSource(nameof(TestCaseSource))] [Repeat(10)] // Might wanna increase this to double check when changing logic as on lower value, it does not reproduce. public void CanCorrectlyCalculateTxHash_when_called_concurrently((Transaction Tx, string Description) testCase) { @@ -110,7 +91,7 @@ public void CanCorrectlyCalculateTxHash_when_called_concurrently((Transaction Tx Task.WaitAll(tasks.ToArray()); } - [TestCaseSource(nameof(ExtendedTestCaseSource))] + [TestCaseSource(nameof(TestCaseSource))] public void Roundtrip((Transaction Tx, string Description) testCase) { RlpStream rlpStream = new(_txDecoder.GetLength(testCase.Tx, RlpBehaviors.None)); @@ -118,12 +99,12 @@ public void Roundtrip((Transaction Tx, string Description) testCase) rlpStream.Position = 0; Transaction? decoded = _txDecoder.Decode(rlpStream); decoded!.SenderAddress = - new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance).RecoverAddress(decoded); + new EthereumEcdsa(TestBlockchainIds.ChainId).RecoverAddress(decoded); decoded.Hash = decoded.CalculateHash(); decoded.EqualToTransaction(testCase.Tx); } - [TestCaseSource(nameof(ExtendedTestCaseSource))] + [TestCaseSource(nameof(TestCaseSource))] public void Roundtrip_ValueDecoderContext((Transaction Tx, string Description) testCase) { RlpStream rlpStream = new(10000); @@ -134,12 +115,12 @@ public void Roundtrip_ValueDecoderContext((Transaction Tx, string Description) t rlpStream.Position = 0; Transaction? decoded = _txDecoder.Decode(ref decoderContext); decoded!.SenderAddress = - new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance).RecoverAddress(decoded); + new EthereumEcdsa(TestBlockchainIds.ChainId).RecoverAddress(decoded); decoded.Hash = decoded.CalculateHash(); decoded.EqualToTransaction(testCase.Tx); } - [TestCaseSource(nameof(ExtendedTestCaseSource))] + [TestCaseSource(nameof(TestCaseSource))] public void Roundtrip_ValueDecoderContext_WithMemorySlice((Transaction Tx, string Description) testCase) { RlpStream rlpStream = new(10000); @@ -149,12 +130,12 @@ public void Roundtrip_ValueDecoderContext_WithMemorySlice((Transaction Tx, strin rlpStream.Position = 0; Transaction? decoded = _txDecoder.Decode(ref decoderContext); decoded!.SenderAddress = - new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance).RecoverAddress(decoded); + new EthereumEcdsa(TestBlockchainIds.ChainId).RecoverAddress(decoded); decoded.Hash = decoded.CalculateHash(); decoded.EqualToTransaction(testCase.Tx); } - [TestCaseSource(nameof(ExtendedTestCaseSource))] + [TestCaseSource(nameof(TestCaseSource))] public void ValueDecoderContext_DecodeWithMemorySlice_ShouldUseSameBuffer((Transaction Tx, string Description) testCase) { if (!testCase.Tx.Data.HasValue || testCase.Tx.Data.Value.Length == 0) return; @@ -252,7 +233,7 @@ private void ValueDecoderContext_return_the_same_transaction_as_rlp_stream( Assert.That(encodedWithDecodedByValueDecoderContext.Bytes, Is.EqualTo(encoded.Bytes)); } - [TestCaseSource(nameof(ExtendedTestCaseSource))] + [TestCaseSource(nameof(TestCaseSource))] public void Rlp_encode_should_return_the_same_as_rlp_stream_encoding( (Transaction Tx, string Description) testCase) { @@ -394,46 +375,5 @@ public void Duplicate_storage_keys_result_in_different_hashes() new Hash256("0x0a956694228afe4577bd94fcf8a3aa8544bbadcecfe0d66ccad8ec7ae56c025f") ); } - - public static IEnumerable AuthorizationTupleCases() - { - yield return null!; - yield return []; - yield return [new AuthorizationTuple(0, Address.Zero, 0, 0, [], [])]; - yield return [new AuthorizationTuple(0, Address.Zero, null, 0, [], [])]; - yield return - [ - new AuthorizationTuple(0, Address.Zero, 0, 0, [], []), - new AuthorizationTuple(0, Address.Zero, null, 0, [], []), - new AuthorizationTuple(ulong.MaxValue, new Address(Enumerable.Range(0, 20).Select(i => (byte)0xff).ToArray()), UInt256.MaxValue, 0, Enumerable.Range(0, 32).Select(i => (byte)0xff).ToArray(), Enumerable.Range(0, 32).Select(i => (byte)0xff).ToArray()), - ]; - yield return - [ - new AuthorizationTuple(0, TestItem.AddressA, null, ulong.MinValue, [0x0], [0x0]), - new AuthorizationTuple(0, TestItem.AddressF, 0, ulong.MinValue, [0x0], [0x0]) - ]; - } - - [TestCaseSource(nameof(AuthorizationTupleCases))] - public void TxAuthorizationTupleEncodeAndDecode(AuthorizationTuple[] authorizations) - { - Transaction tx = Build.A.Transaction - .WithMaxFeePerGas(2.GWei()) - .WithType(TxType.SetCode) - .WithGasPrice(0) - .WithChainId(1559) - .WithAuthorizationCode(authorizations) - .SignedAndResolved().TestObject; - RlpStream rlpStream = new(_txDecoder.GetLength(tx, RlpBehaviors.None)); - - _txDecoder.Encode(rlpStream, tx); - rlpStream.Position = 0; - Transaction? decoded = _txDecoder.Decode(rlpStream); - decoded!.SenderAddress = - new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance).RecoverAddress(decoded); - - Assert.That(tx.Hash, Is.EqualTo(decoded.CalculateHash())); - } - } } diff --git a/src/Nethermind/Nethermind.Core.Test/SignerTests.cs b/src/Nethermind/Nethermind.Core.Test/SignerTests.cs index 42e2c036366..53683e27c9c 100644 --- a/src/Nethermind/Nethermind.Core.Test/SignerTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/SignerTests.cs @@ -32,7 +32,7 @@ public void Hex_and_back_again(string hexSignature) [Test] public void Sign_and_recover() { - EthereumEcdsa ethereumEcdsa = new(BlockchainIds.Olympic, LimboLogs.Instance); + EthereumEcdsa ethereumEcdsa = new(BlockchainIds.Olympic); Hash256 message = Keccak.Compute("Test message"); PrivateKey privateKey = Build.A.PrivateKey.TestObject; @@ -43,7 +43,7 @@ public void Sign_and_recover() [Test] public void Decompress() { - EthereumEcdsa ethereumEcdsa = new(BlockchainIds.Olympic, LimboLogs.Instance); + EthereumEcdsa ethereumEcdsa = new(BlockchainIds.Olympic); PrivateKey privateKey = Build.A.PrivateKey.TestObject; CompressedPublicKey compressedPublicKey = privateKey.CompressedPublicKey; PublicKey expected = privateKey.PublicKey; diff --git a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs similarity index 52% rename from src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs rename to src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 4438c9fcdca..9edb8f9f12d 100644 --- a/src/Nethermind/Nethermind.Evm.Test/AuthorizedCodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -21,24 +21,20 @@ namespace Nethermind.Evm.Test; [TestFixture] -public class AuthorizedCodeInfoRepositoryTests +public class CodeInfoRepositoryTests { [Test] public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() { PrivateKey authority = TestItem.PrivateKeyA; - ICodeInfoRepository mockCodeRepository = Substitute.For(); - mockCodeRepository - .GetCachedCodeInfo(Arg.Any(), authority.Address, Arg.Any()) - .Returns(new CodeInfo([])); - AuthorizedCodeInfoRepository sut = new(mockCodeRepository, 1, NullLogger.Instance); + CodeInfoRepository sut = new(1); var tuples = new[] { CreateAuthorizationTuple(authority, 1, TestItem.AddressB, (UInt256)0), }; - sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + IEnumerable
result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); - sut.AuthorizedAddresses.Should().BeEquivalentTo([authority.Address]); + result.Should().BeEquivalentTo([authority.Address]); } public static IEnumerable AuthorizationCases() @@ -60,15 +56,11 @@ public static IEnumerable AuthorizationCases() [TestCaseSource(nameof(AuthorizationCases))] public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_InsertsExpectedCount(AuthorizationTuple[] tuples, int expectedCount) { - ICodeInfoRepository mockCodeRepository = Substitute.For(); - mockCodeRepository - .GetCachedCodeInfo(Arg.Any(), Arg.Any
(), Arg.Any()) - .Returns(new CodeInfo(Array.Empty())); - AuthorizedCodeInfoRepository sut = new(mockCodeRepository, 1, NullLogger.Instance); + CodeInfoRepository sut = new(1); - sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + IEnumerable
result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); - sut.AuthorizedAddresses.Count().Should().Be(expectedCount); + result.Count().Should().Be(expectedCount); } [Test] @@ -78,38 +70,17 @@ public void InsertFromAuthorizations_AuthorityHasCode_NoCodeIsInserted() Address codeSource = TestItem.AddressB; IWorldState mockWorldState = Substitute.For(); mockWorldState.HasCode(authority.Address).Returns(true); - AuthorizedCodeInfoRepository sut = new(Substitute.For(), 1, NullLogger.Instance); + CodeInfoRepository sut = new(1); var tuples = new[] { CreateAuthorizationTuple(authority, 1, codeSource, (UInt256)0), }; - sut.InsertFromAuthorizations(mockWorldState, tuples, Substitute.For()); + IEnumerable
result = sut.InsertFromAuthorizations(mockWorldState, tuples, Substitute.For()); - sut.AuthorizedAddresses.Count().Should().Be(0); + result.Count().Should().Be(0); } - [Test] - public void ClearAuthorizations_HasAuthorizedAddresses_AuthorizationsAreClear() - { - ICodeInfoRepository mockCodeRepository = Substitute.For(); - mockCodeRepository - .GetCachedCodeInfo(Arg.Any(), Arg.Any
(), Arg.Any()) - .Returns(new CodeInfo(Array.Empty())); - AuthorizedCodeInfoRepository sut = new(mockCodeRepository, 1, NullLogger.Instance); - var tuples = new[] - { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, (UInt256)0), - CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressB, (UInt256)0), - }; - sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); - - sut.AuthorizedAddresses.Count().Should().Be(2); - - sut.ClearAuthorizations(); - - sut.AuthorizedAddresses.Count().Should().Be(0); - } private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) { @@ -118,7 +89,7 @@ private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ul Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; rlp.Data.AsSpan().CopyTo(code.Slice(1)); - EthereumEcdsa ecdsa = new(1, new OneLoggerLogManager(NullLogger.Instance)); + EthereumEcdsa ecdsa = new(1); Signature sig = ecdsa.Sign(signer, Keccak.Compute(code)); return new AuthorizationTuple(chainId, codeAddress, nonce, sig, signer.Address); diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip3529RefundsTests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip3529RefundsTests.cs index 81c276ef05d..510bc998b7d 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip3529RefundsTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip3529RefundsTests.cs @@ -146,7 +146,7 @@ public void After_3529_self_destruct_has_zero_refund(bool eip3529Enabled) long gasLimit = 1000000; - EthereumEcdsa ecdsa = new(1, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(1); // deploy create 2 Transaction tx0 = Build.A.Transaction.WithCode(initOfCreate2Code).WithGasLimit(gasLimit).SignedAndResolved(ecdsa, TestItem.PrivateKeyA).TestObject; // invoke create 2 to deploy contract diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs index 37d6a951800..91e5329b87b 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs @@ -39,7 +39,7 @@ public class Eip6780Tests : VirtualMachineTestsBase private Address _contractAddress; private byte[] _initCode; private readonly long _gasLimit = 1000000; - private readonly EthereumEcdsa _ecdsa = new(1, LimboLogs.Instance); + private readonly EthereumEcdsa _ecdsa = new(1); [SetUp] public override void Setup() diff --git a/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs index ab88c978cae..3e08ed2a8b5 100644 --- a/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs @@ -143,7 +143,7 @@ public void GetTrace_memory_should_not_overflow() private static readonly Address to = new Address("0x000000000000000000000000636f6e7472616374"); private static readonly Address coinbase = new Address("0x4444588443C3a91288c5002483449Aba1054192b"); // for testing purposes, particular chain id does not matter. Maybe make random id so it captures the idea that signature should would irrespective of chain - private static readonly EthereumEcdsa ethereumEcdsa = new(BlockchainIds.GenericNonRealNetwork, LimboLogs.Instance); + private static readonly EthereumEcdsa ethereumEcdsa = new(BlockchainIds.GenericNonRealNetwork); private static string run(byte[] input) { long blocknr = 12965000; @@ -158,7 +158,7 @@ private static string run(byte[] input) new MemDb(), LimboLogs.Instance); ISpecProvider specProvider = new TestSpecProvider(London.Instance); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new( new TestBlockhashProvider(specProvider), specProvider, diff --git a/src/Nethermind/Nethermind.Evm.Test/StorageAndSelfDestructTests.cs b/src/Nethermind/Nethermind.Evm.Test/StorageAndSelfDestructTests.cs index 9477089d2db..97b553f28d8 100644 --- a/src/Nethermind/Nethermind.Evm.Test/StorageAndSelfDestructTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/StorageAndSelfDestructTests.cs @@ -63,7 +63,7 @@ public void Load_self_destruct() long gasLimit = 1000000; - EthereumEcdsa ecdsa = new(1, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(1); Transaction initTx = Build.A.Transaction.WithCode(initByteCode).WithGasLimit(gasLimit).SignedAndResolved(ecdsa, TestItem.PrivateKeyA).TestObject; Transaction tx1 = Build.A.Transaction.WithCode(byteCode1).WithGasLimit(gasLimit).WithNonce(1).SignedAndResolved(ecdsa, TestItem.PrivateKeyA).TestObject; Transaction tx2 = Build.A.Transaction.WithCode(byteCode2).WithGasLimit(gasLimit).WithNonce(2).SignedAndResolved(ecdsa, TestItem.PrivateKeyA).TestObject; @@ -142,7 +142,7 @@ public void Destroy_restore_store() long gasLimit = 1000000; - EthereumEcdsa ecdsa = new(1, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(1); // deploy create 2 Transaction tx0 = Build.A.Transaction.WithCode(initOfCreate2Code).WithGasLimit(gasLimit).SignedAndResolved(ecdsa, TestItem.PrivateKeyA).TestObject; // invoke create 2 to deploy contract @@ -247,7 +247,7 @@ public void Destroy_restore_store_different_cells() long gasLimit = 1000000; - EthereumEcdsa ecdsa = new(1, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(1); // deploy create 2 Transaction tx0 = Build.A.Transaction.WithCode(initOfCreate2Code).WithGasLimit(gasLimit).SignedAndResolved(ecdsa, TestItem.PrivateKeyA).TestObject; // invoke create 2 to deploy contract @@ -364,7 +364,7 @@ public void Destroy_restore_store_different_cells_previously_existing() long gasLimit = 1000000; - EthereumEcdsa ecdsa = new(1, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(1); // deploy create 2 Transaction tx0 = Build.A.Transaction.WithCode(initOfCreate2Code).WithGasLimit(gasLimit).SignedAndResolved(ecdsa, TestItem.PrivateKeyA).TestObject; // call contract once diff --git a/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs b/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs index def68b3ca1d..6259babaeb6 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs @@ -362,10 +362,10 @@ public TestEnvironment() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); tracer = new(); BlocksConfig blocksConfig = new(); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs index 562b27e937e..ff5be83be44 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs @@ -35,10 +35,10 @@ public void Setup() _specProvider = new TestSpecProvider(Cancun.Instance); TrieStore trieStore = new(stateDb, LimboLogs.Instance); _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); } diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index f084a53e597..d09057654a9 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -39,10 +39,10 @@ public void Setup() _specProvider = new TestSpecProvider(Prague.Instance); TrieStore trieStore = new(stateDb, LimboLogs.Instance); _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); } [Test] diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs index e0185255a0b..5a7461c898a 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs @@ -42,10 +42,10 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); } [TestCase(true, true)] diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs index 3a7139dc4b6..7b32f5be3ea 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs @@ -58,10 +58,10 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); } [TestCase(true, true)] diff --git a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs index 229a5a591b6..e097ec7c147 100644 --- a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs +++ b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs @@ -66,9 +66,9 @@ public virtual void Setup() _stateDb = new MemDb(); ITrieStore trieStore = new TrieStore(_stateDb, logManager); TestState = new WorldState(trieStore, codeDb, logManager); - _ethereumEcdsa = new EthereumEcdsa(SpecProvider.ChainId, logManager); + _ethereumEcdsa = new EthereumEcdsa(SpecProvider.ChainId); IBlockhashProvider blockhashProvider = new TestBlockhashProvider(SpecProvider); - CodeInfoRepository = new CodeInfoRepository(); + CodeInfoRepository = new CodeInfoRepository(1); Machine = new VirtualMachine(blockhashProvider, SpecProvider, CodeInfoRepository, logManager); _processor = new TransactionProcessor(SpecProvider, TestState, Machine, CodeInfoRepository, logManager); } diff --git a/src/Nethermind/Nethermind.Evm/Precompiles/EcRecoverPrecompile.cs b/src/Nethermind/Nethermind.Evm/Precompiles/EcRecoverPrecompile.cs index 037e1637d18..93a3b7994d1 100644 --- a/src/Nethermind/Nethermind.Evm/Precompiles/EcRecoverPrecompile.cs +++ b/src/Nethermind/Nethermind.Evm/Precompiles/EcRecoverPrecompile.cs @@ -26,7 +26,7 @@ private EcRecoverPrecompile() public long BaseGasCost(IReleaseSpec releaseSpec) => 3000L; - private readonly EthereumEcdsa _ecdsa = new(BlockchainIds.Mainnet, LimboLogs.Instance); + private readonly EthereumEcdsa _ecdsa = new(BlockchainIds.Mainnet); private readonly byte[] _zero31 = new byte[31]; diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index f8d084d293a..c92bab3f517 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -419,7 +419,7 @@ protected ExecutionEnvironment BuildExecutionEnvironment( Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0); if (recipient is null) ThrowInvalidDataException("Recipient has not been resolved properly before tx execution"); - TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); + TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes, codeInfoRepository); CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data ?? Memory.Empty) diff --git a/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs b/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs index 640c7c30a0e..e1aa68c2b4e 100644 --- a/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs +++ b/src/Nethermind/Nethermind.Evm/TxExecutionContext.cs @@ -10,11 +10,13 @@ public readonly struct TxExecutionContext( in BlockExecutionContext blockExecutionContext, Address origin, in UInt256 gasPrice, - byte[][] blobVersionedHashes) + byte[][] blobVersionedHashes, + ICodeInfoRepository codeInfoRepository) { public readonly BlockExecutionContext BlockExecutionContext = blockExecutionContext; public Address Origin { get; } = origin; public UInt256 GasPrice { get; } = gasPrice; public byte[][]? BlobVersionedHashes { get; } = blobVersionedHashes; + public ICodeInfoRepository CodeInfoRepository { get; } = codeInfoRepository; } } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 14d631b17d1..64dd3236890 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2110,7 +2110,7 @@ private EvmExceptionType InstructionCall( !UpdateMemoryCost(vmState, ref gasAvailable, in dataOffset, dataLength) || !UpdateMemoryCost(vmState, ref gasAvailable, in outputOffset, outputLength) || !UpdateGas(gasExtra, ref gasAvailable)) return EvmExceptionType.OutOfGas; - + CodeInfo codeInfo = vmState.Env.TxExecutionContext.CodeInfoRepository.GetCachedCodeInfo(_state, codeSource, spec); codeInfo.AnalyseInBackgroundIfRequired(); diff --git a/src/Nethermind/Nethermind.Facade.Test/TxPoolBridgeTests.cs b/src/Nethermind/Nethermind.Facade.Test/TxPoolBridgeTests.cs index 65cc8729908..a9a0bcc4a31 100644 --- a/src/Nethermind/Nethermind.Facade.Test/TxPoolBridgeTests.cs +++ b/src/Nethermind/Nethermind.Facade.Test/TxPoolBridgeTests.cs @@ -34,7 +34,7 @@ public void SetUp() [Test] public void Timestamp_is_set_on_transactions() { - Transaction tx = Build.A.Transaction.WithSenderAddress(TestItem.AddressA).Signed(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), TestItem.PrivateKeyA).TestObject; + Transaction tx = Build.A.Transaction.WithSenderAddress(TestItem.AddressA).Signed(new EthereumEcdsa(TestBlockchainIds.ChainId), TestItem.PrivateKeyA).TestObject; _txSender.SendTransaction(tx, TxHandlingOptions.PersistentBroadcast); _txPool.Received().SubmitTx(Arg.Is(tx => tx.Timestamp != UInt256.Zero), TxHandlingOptions.PersistentBroadcast); } diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index be4843429fb..2e6da9eae00 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -45,4 +45,9 @@ public void ClearOverwrites() { _codeOverwrites.Clear(); } + + public IEnumerable
InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec) + { + return codeInfoRepository.InsertFromAuthorizations(worldState, authorizations, spec); + } } diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs index ba6e190c4e2..447aa8855dd 100644 --- a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs @@ -65,7 +65,7 @@ public SimulateReadOnlyBlocksProcessingEnv( BlockhashProvider = new SimulateBlockhashProvider(new BlockhashProvider(BlockTree, specProvider, StateProvider, logManager), BlockTree); StateProvider = WorldStateManager.GlobalWorldState; StateReader = WorldStateManager.GlobalStateReader; - CodeInfoRepository = new OverridableCodeInfoRepository(new CodeInfoRepository()); + CodeInfoRepository = new OverridableCodeInfoRepository(new CodeInfoRepository(1)); VirtualMachine = new SimulateVirtualMachine(new VirtualMachine(BlockhashProvider, specProvider, CodeInfoRepository, logManager)); _transactionProcessor = new SimulateTransactionProcessor(SpecProvider, StateProvider, VirtualMachine, CodeInfoRepository, _logManager, validate); _blockValidator = CreateValidator(); diff --git a/src/Nethermind/Nethermind.Init/Steps/InitCrypto.cs b/src/Nethermind/Nethermind.Init/Steps/InitCrypto.cs index 7dfe8751497..aa3a7f6a91c 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitCrypto.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitCrypto.cs @@ -22,7 +22,7 @@ public InitCrypto(INethermindApi api) [Todo(Improve.Refactor, "Automatically scan all the references solutions?")] public virtual Task Execute(CancellationToken _) { - _api.EthereumEcdsa = new EthereumEcdsa(_api.SpecProvider!.ChainId, _api.LogManager); + _api.EthereumEcdsa = new EthereumEcdsa(_api.SpecProvider!.ChainId); return Task.CompletedTask; } } diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs index 21189802d53..e3b3628f4e7 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs @@ -83,7 +83,7 @@ protected virtual Task InitBlockchain() new RecoverSignatures(getApi.EthereumEcdsa, txPool, getApi.SpecProvider, getApi.LogManager)); PreBlockCaches? preBlockCaches = (_api.WorldState as IPreBlockCaches)?.Caches; - CodeInfoRepository codeInfoRepository = new(preBlockCaches?.PrecompileCache); + CodeInfoRepository codeInfoRepository = new(1, preBlockCaches?.PrecompileCache); VirtualMachine virtualMachine = CreateVirtualMachine(codeInfoRepository); _api.TransactionProcessor = CreateTransactionProcessor(codeInfoRepository, virtualMachine); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs index b613c75e75c..c5b2ae5db1a 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs @@ -1035,7 +1035,7 @@ public async Task Send_transaction_with_signature_will_not_try_to_sign() txSender.SendTransaction(Arg.Any(), TxHandlingOptions.PersistentBroadcast).Returns((TestItem.KeccakA, AcceptTxResult.Accepted)); ctx.Test = await TestRpcBlockchain.ForTest(SealEngineType.NethDev).WithBlockchainBridge(bridge).WithTxSender(txSender).Build(); - Transaction tx = Build.A.Transaction.Signed(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), TestItem.PrivateKeyA).TestObject; + Transaction tx = Build.A.Transaction.Signed(new EthereumEcdsa(TestBlockchainIds.ChainId), TestItem.PrivateKeyA).TestObject; string serialized = await ctx.Test.TestEthRpc("eth_sendRawTransaction", Rlp.Encode(tx, RlpBehaviors.None).Bytes.ToHexString()); await txSender.Received().SendTransaction(Arg.Any(), TxHandlingOptions.PersistentBroadcast); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs index 8b4a3052a6c..3fd4d6dbac0 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs @@ -56,7 +56,7 @@ public void Initialize() { LimboLogs logger = LimboLogs.Instance; MainnetSpecProvider specProvider = MainnetSpecProvider.Instance; - _ethereumEcdsa = new(specProvider.ChainId, logger); + _ethereumEcdsa = new(specProvider.ChainId); Peer peerA = SetUpPeerA(); //standard case Peer peerB = SetUpPeerB(); //Session is null diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/PersonalRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/PersonalRpcModuleTests.cs index ce707f19bab..19a04413700 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/PersonalRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/PersonalRpcModuleTests.cs @@ -23,7 +23,7 @@ public class PersonalRpcModuleTests public void Initialize() { _wallet = new DevWallet(new WalletConfig(), LimboLogs.Instance); - _ecdsa = new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance); + _ecdsa = new EthereumEcdsa(TestBlockchainIds.ChainId); _keyStore = Substitute.For(); } diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index 22d8e66c775..7f74b75145a 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -76,7 +76,7 @@ public async Task Setup() ProofModuleFactory moduleFactory = new( _worldStateManager, _blockTree, - new CompositeBlockPreprocessorStep(new RecoverSignatures(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), NullTxPool.Instance, _specProvider, LimboLogs.Instance)), + new CompositeBlockPreprocessorStep(new RecoverSignatures(new EthereumEcdsa(TestBlockchainIds.ChainId), NullTxPool.Instance, _specProvider, LimboLogs.Instance)), receiptStorage, _specProvider, LimboLogs.Instance); @@ -220,7 +220,7 @@ public async Task Get_receipt_when_block_has_few_receipts(bool withHeader, strin ProofModuleFactory moduleFactory = new ProofModuleFactory( _worldStateManager, _blockTree, - new CompositeBlockPreprocessorStep(new RecoverSignatures(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), NullTxPool.Instance, _specProvider, LimboLogs.Instance)), + new CompositeBlockPreprocessorStep(new RecoverSignatures(new EthereumEcdsa(TestBlockchainIds.ChainId), NullTxPool.Instance, _specProvider, LimboLogs.Instance)), _receiptFinder, _specProvider, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TestRpcBlockchain.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TestRpcBlockchain.cs index 6fba1d025d9..819c8464f75 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TestRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/TestRpcBlockchain.cs @@ -142,7 +142,7 @@ protected override async Task Build( ITxSigner txSigner = new WalletTxSigner(TestWallet, specProvider.ChainId); TxSealer = new TxSealer(txSigner, Timestamper); - TxSender ??= new TxPoolSender(TxPool, TxSealer, NonceManager, EthereumEcdsa ?? new EthereumEcdsa(specProvider.ChainId, LogManager)); + TxSender ??= new TxPoolSender(TxPool, TxSealer, NonceManager, EthereumEcdsa ?? new EthereumEcdsa(specProvider.ChainId)); GasPriceOracle ??= new GasPriceOracle(BlockFinder, SpecProvider, LogManager); FeeHistoryOracle ??= new FeeHistoryOracle(BlockTree, ReceiptStorage, SpecProvider); ISyncConfig syncConfig = new SyncConfig(); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs index a1abfd07f20..9df80dcb638 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs @@ -63,7 +63,7 @@ public void Setup() _stateReader = new StateReader(trieStore, codeDb, LimboLogs.Instance); BlockhashProvider blockhashProvider = new(_blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new(blockhashProvider, specProvider, codeInfoRepository, LimboLogs.Instance); TransactionProcessor transactionProcessor = new(specProvider, stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); @@ -78,7 +78,7 @@ public void Setup() new BlockhashStore(specProvider, stateProvider), LimboLogs.Instance); - RecoverSignatures txRecovery = new(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), NullTxPool.Instance, specProvider, LimboLogs.Instance); + RecoverSignatures txRecovery = new(new EthereumEcdsa(TestBlockchainIds.ChainId), NullTxPool.Instance, specProvider, LimboLogs.Instance); _processor = new BlockchainProcessor(_blockTree, blockProcessor, txRecovery, _stateReader, LimboLogs.Instance, BlockchainProcessor.Options.NoReceipts); Block genesis = Build.A.Block.Genesis.TestObject; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ProcessedTransactionsDbCleanerTests.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ProcessedTransactionsDbCleanerTests.cs index ee17433c037..cffc22457db 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ProcessedTransactionsDbCleanerTests.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ProcessedTransactionsDbCleanerTests.cs @@ -35,7 +35,7 @@ Transaction GetTx(PrivateKey sender) .WithMaxFeePerGas(UInt256.One) .WithMaxPriorityFeePerGas(UInt256.One) .WithNonce(UInt256.Zero) - .SignedAndResolved(new EthereumEcdsa(_specProvider.ChainId, _logManager), sender).TestObject; + .SignedAndResolved(new EthereumEcdsa(_specProvider.ChainId), sender).TestObject; } IColumnsDb columnsDb = new MemColumnsDb(BlobTxsColumns.ProcessedTxs); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeBlockDownloader.cs b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeBlockDownloader.cs index e808719cf13..6dda2612c56 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeBlockDownloader.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/MergeBlockDownloader.cs @@ -65,7 +65,7 @@ public MergeBlockDownloader( _syncReport = syncReport ?? throw new ArgumentNullException(nameof(syncReport)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _beaconPivot = beaconPivot; - _receiptsRecovery = new ReceiptsRecovery(new EthereumEcdsa(specProvider.ChainId, logManager), specProvider); + _receiptsRecovery = new ReceiptsRecovery(new EthereumEcdsa(specProvider.ChainId), specProvider); _fullStateFinder = fullStateFinder ?? throw new ArgumentNullException(nameof(fullStateFinder)); _logger = logManager.GetClassLogger(); } diff --git a/src/Nethermind/Nethermind.Mev.Test/MevMegabundleTests.cs b/src/Nethermind/Nethermind.Mev.Test/MevMegabundleTests.cs index a2992904998..f014b39d0c0 100644 --- a/src/Nethermind/Nethermind.Mev.Test/MevMegabundleTests.cs +++ b/src/Nethermind/Nethermind.Mev.Test/MevMegabundleTests.cs @@ -27,7 +27,7 @@ BundleTransaction BuildTransaction(PrivateKey sender, bool canRevert = false) return tx; } - EthereumEcdsa ecdsa = new(BlockchainIds.Mainnet, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.Mainnet); BundleTransaction tx = BuildTransaction(TestItem.PrivateKeyB); BundleTransaction revertingTx = BuildTransaction(TestItem.PrivateKeyA, true); diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V62/BlockBodiesMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V62/BlockBodiesMessageSerializerTests.cs index c011f42da5f..338ae5d04b5 100644 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V62/BlockBodiesMessageSerializerTests.cs +++ b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V62/BlockBodiesMessageSerializerTests.cs @@ -47,7 +47,7 @@ private static IEnumerable GetBlockBodyValues() BlockHeader header = Build.A.BlockHeader.TestObject; Transaction tx = Build.A.Transaction .WithTo(TestItem.AddressA) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject; tx.SenderAddress = null; @@ -79,21 +79,21 @@ private static IEnumerable GetBlockBodyValues() .WithChainId(TestBlockchainIds.ChainId) .WithTo(TestItem.AddressA) .WithShardBlobTxTypeAndFields(1) - .SignedAndResolved(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), + .SignedAndResolved(new EthereumEcdsa(TestBlockchainIds.ChainId), TestItem.PrivateKeyA) .TestObject, Build.A.Transaction .WithChainId(TestBlockchainIds.ChainId) .WithTo(TestItem.AddressA) .WithShardBlobTxTypeAndFields(2) - .SignedAndResolved(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), + .SignedAndResolved(new EthereumEcdsa(TestBlockchainIds.ChainId), TestItem.PrivateKeyA) .TestObject, Build.A.Transaction .WithChainId(TestBlockchainIds.ChainId) .WithTo(TestItem.AddressA) .WithShardBlobTxTypeAndFields(3, false) - .SignedAndResolved(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), + .SignedAndResolved(new EthereumEcdsa(TestBlockchainIds.ChainId), TestItem.PrivateKeyA) .TestObject, }, new[] { header }, diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V62/TransactionsMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V62/TransactionsMessageSerializerTests.cs index 1003b9d29e3..a2c9071df99 100644 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V62/TransactionsMessageSerializerTests.cs +++ b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V62/TransactionsMessageSerializerTests.cs @@ -121,7 +121,7 @@ public static IEnumerable> GetTransactions() { Build.A.Transaction .WithTo(TestItem.AddressA) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject }; @@ -130,36 +130,36 @@ public static IEnumerable> GetTransactions() Build.A.Transaction .WithType(TxType.Legacy) .WithTo(TestItem.AddressA) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject, Build.A.Transaction .WithTo(TestItem.AddressA) .WithShardBlobTxTypeAndFields(1) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject, Build.A.Transaction .WithType(TxType.AccessList) .WithTo(TestItem.AddressA) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject, Build.A.Transaction .WithTo(TestItem.AddressA) .WithShardBlobTxTypeAndFields(2) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject, Build.A.Transaction .WithType(TxType.EIP1559) .WithTo(TestItem.AddressA) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject, Build.A.Transaction .WithTo(TestItem.AddressA) .WithShardBlobTxTypeAndFields(3) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject, Build.A.Transaction .WithType(TxType.EIP1559) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject, }; @@ -169,12 +169,12 @@ public static IEnumerable> GetTransactions() Build.A.Transaction .WithTo(TestItem.AddressA) .WithShardBlobTxTypeAndFields(1) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject, Build.A.Transaction .WithTo(TestItem.AddressA) .WithShardBlobTxTypeAndFields(2) - .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance), TestItem.PrivateKeyA) + .SignedAndResolved(new EthereumEcdsa(BlockchainIds.Sepolia), TestItem.PrivateKeyA) .TestObject }; } diff --git a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V66/Eth66ProtocolHandlerTests.cs b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V66/Eth66ProtocolHandlerTests.cs index d46fe53acef..3e933943923 100644 --- a/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V66/Eth66ProtocolHandlerTests.cs +++ b/src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V66/Eth66ProtocolHandlerTests.cs @@ -207,7 +207,7 @@ public void Can_handle_get_pooled_transactions() [Test] public void Can_handle_pooled_transactions() { - Transaction tx = Build.A.Transaction.Signed(new EthereumEcdsa(1, LimboLogs.Instance), TestItem.PrivateKeyA).TestObject; + Transaction tx = Build.A.Transaction.Signed(new EthereumEcdsa(1), TestItem.PrivateKeyA).TestObject; var msg65 = new PooledTransactionsMessage(new ArrayPoolList(1) { tx }); var msg66 = new Network.P2P.Subprotocols.Eth.V66.Messages.PooledTransactionsMessage(1111, msg65); diff --git a/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/AuthEip8MessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/AuthEip8MessageSerializerTests.cs index 7d155359e69..d4a6eeab330 100644 --- a/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/AuthEip8MessageSerializerTests.cs +++ b/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/AuthEip8MessageSerializerTests.cs @@ -50,7 +50,7 @@ private void TestEncodeDecode(IEthereumEcdsa ecdsa) [TestCase(BlockchainIds.EthereumClassicTestnet)] public void Encode_decode_before_eip155(int chainId) { - EthereumEcdsa ecdsa = new(BlockchainIds.Olympic, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.Olympic); TestEncodeDecode(ecdsa); } @@ -58,7 +58,7 @@ public void Encode_decode_before_eip155(int chainId) [TestCase(BlockchainIds.Sepolia)] public void Encode_decode_with_eip155(int chainId) { - EthereumEcdsa ecdsa = new(BlockchainIds.Olympic, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.Olympic); TestEncodeDecode(ecdsa); } diff --git a/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/AuthMessageSerializerTests.cs b/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/AuthMessageSerializerTests.cs index 3b6626bb38c..fac56e55d35 100644 --- a/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/AuthMessageSerializerTests.cs +++ b/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/AuthMessageSerializerTests.cs @@ -52,7 +52,7 @@ private void TestEncodeDecode(IEthereumEcdsa ecdsa) [TestCase(BlockchainIds.EthereumClassicTestnet)] public void Encode_decode_before_eip155(int chainId) { - EthereumEcdsa ecdsa = new(BlockchainIds.Olympic, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.Olympic); TestEncodeDecode(ecdsa); } @@ -60,7 +60,7 @@ public void Encode_decode_before_eip155(int chainId) [TestCase(BlockchainIds.Sepolia)] public void Encode_decode_with_eip155(int chainId) { - EthereumEcdsa ecdsa = new(BlockchainIds.Olympic, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(BlockchainIds.Olympic); TestEncodeDecode(ecdsa); } } diff --git a/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/EncryptionHandshakeServiceTests.cs b/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/EncryptionHandshakeServiceTests.cs index 1876ed8d3a1..566387af20f 100644 --- a/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/EncryptionHandshakeServiceTests.cs +++ b/src/Nethermind/Nethermind.Network.Test/Rlpx/Handshake/EncryptionHandshakeServiceTests.cs @@ -48,7 +48,7 @@ public void TearDown() _trueCryptoRandom?.Dispose(); } - private readonly IEthereumEcdsa _ecdsa = new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance); // TODO: separate general crypto signer from Ethereum transaction signing + private readonly IEthereumEcdsa _ecdsa = new EthereumEcdsa(BlockchainIds.Sepolia); // TODO: separate general crypto signer from Ethereum transaction signing private IMessageSerializationService _messageSerializationService; diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs index 2dcffeb14e0..ecd34afc769 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs @@ -263,7 +263,7 @@ private SyncTestContext CreateSyncManager(int index) InMemoryReceiptStorage receiptStorage = new(); - EthereumEcdsa ecdsa = new(specProvider.ChainId, logManager); + EthereumEcdsa ecdsa = new(specProvider.ChainId); BlockTree tree = Build.A.BlockTree().WithoutSettingHead.TestObject; ITransactionComparerProvider transactionComparerProvider = new TransactionComparerProvider(specProvider, tree); @@ -276,7 +276,7 @@ private SyncTestContext CreateSyncManager(int index) logManager, transactionComparerProvider.GetDefaultComparer()); BlockhashProvider blockhashProvider = new(tree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new(blockhashProvider, specProvider, codeInfoRepository, logManager); Always sealValidator = Always.Valid; diff --git a/src/Nethermind/Nethermind.Synchronization/Blocks/BlockDownloader.cs b/src/Nethermind/Nethermind.Synchronization/Blocks/BlockDownloader.cs index f2344bb8488..765c0f7e7a4 100644 --- a/src/Nethermind/Nethermind.Synchronization/Blocks/BlockDownloader.cs +++ b/src/Nethermind/Nethermind.Synchronization/Blocks/BlockDownloader.cs @@ -79,7 +79,7 @@ public BlockDownloader( _betterPeerStrategy = betterPeerStrategy ?? throw new ArgumentNullException(nameof(betterPeerStrategy)); _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - _receiptsRecovery = new ReceiptsRecovery(new EthereumEcdsa(_specProvider.ChainId, logManager), _specProvider); + _receiptsRecovery = new ReceiptsRecovery(new EthereumEcdsa(_specProvider.ChainId), _specProvider); _syncBatchSize = syncBatchSize ?? new SyncBatchSize(logManager); _blockTree.NewHeadBlock += BlockTreeOnNewHeadBlock; } diff --git a/src/Nethermind/Nethermind.TxPool.Test/ReceiptStorageTests.cs b/src/Nethermind/Nethermind.TxPool.Test/ReceiptStorageTests.cs index 51fd3449f06..634ca9a9c46 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/ReceiptStorageTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/ReceiptStorageTests.cs @@ -40,7 +40,7 @@ public ReceiptStorageTests(bool useEip2718) public void Setup() { _specProvider = MainnetSpecProvider.Instance; - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); _blockTree = Build.A.BlockTree() .WithBlocks(Build.A.Block.TestObject) .TestObject; diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxBroadcasterTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxBroadcasterTests.cs index 6cd66531054..1a6db97812a 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxBroadcasterTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxBroadcasterTests.cs @@ -56,7 +56,7 @@ public void Setup() { _logManager = LimboLogs.Instance; _specProvider = MainnetSpecProvider.Instance; - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, _logManager); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); _blockTree = Substitute.For(); _comparer = new TransactionComparerProvider(_specProvider, _blockTree).GetDefaultComparer(); _txPoolConfig = new TxPoolConfig(); diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index 7e8291e932d..e0edc311b5c 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -51,7 +51,7 @@ public void Setup() { _logManager = LimboLogs.Instance; _specProvider = MainnetSpecProvider.Instance; - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, _logManager); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); var trieStore = new TrieStore(new MemDb(), _logManager); var codeDb = new MemDb(); _stateProvider = new WorldState(trieStore, codeDb, _logManager); @@ -96,7 +96,7 @@ public void should_delete_peers() public void should_ignore_transactions_with_different_chain_id() { _txPool = CreatePool(null, new TestSpecProvider(Shanghai.Instance)); - EthereumEcdsa ecdsa = new(BlockchainIds.Sepolia, _logManager); // default is mainnet, we're passing sepolia + EthereumEcdsa ecdsa = new(BlockchainIds.Sepolia); // default is mainnet, we're passing sepolia Transaction tx = Build.A.Transaction.SignedAndResolved(ecdsa, TestItem.PrivateKeyA).TestObject; AcceptTxResult result = _txPool.SubmitTx(tx, TxHandlingOptions.PersistentBroadcast); _txPool.GetPendingTransactionsCount().Should().Be(0); diff --git a/src/Nethermind/Nethermind.Wallet.Test/WalletTests.cs b/src/Nethermind/Nethermind.Wallet.Test/WalletTests.cs index 35bfc3eedb3..a39be4e3011 100644 --- a/src/Nethermind/Nethermind.Wallet.Test/WalletTests.cs +++ b/src/Nethermind/Nethermind.Wallet.Test/WalletTests.cs @@ -136,7 +136,7 @@ public void Each_account_can_sign_with_simple_key([ValueSource(nameof(WalletType [Test] public void Can_sign_on_networks_with_chain_id([ValueSource(nameof(WalletTypes))] WalletType walletType, [Values(0ul, 1ul, 40000ul, ulong.MaxValue / 3)] ulong chainId) { - EthereumEcdsa ecdsa = new EthereumEcdsa(chainId, LimboLogs.Instance); + EthereumEcdsa ecdsa = new EthereumEcdsa(chainId); Context ctx = _cachedWallets[walletType]; for (int i = 1; i <= (walletType == WalletType.Memory ? 10 : 3); i++) { From 0237c49adc10ed7341bd035a159a0c9269c5770d Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 20 Aug 2024 14:00:30 +0200 Subject: [PATCH 324/551] fx unittest (cherry picked from commit 7dbfcc39b275aa91bf673d9960abb05d953a62ee) --- .../CodeInfoRepositoryTests.cs | 26 +++++++++++++++++-- .../Nethermind.Evm/CodeInfoRepository.cs | 15 +++++------ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 9edb8f9f12d..dd6a39621f7 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -17,6 +17,7 @@ using Nethermind.State; using Nethermind.Core.Specs; using Nethermind.Evm.CodeAnalysis; +using Nethermind.Core.Extensions; namespace Nethermind.Evm.Test; @@ -70,17 +71,38 @@ public void InsertFromAuthorizations_AuthorityHasCode_NoCodeIsInserted() Address codeSource = TestItem.AddressB; IWorldState mockWorldState = Substitute.For(); mockWorldState.HasCode(authority.Address).Returns(true); + mockWorldState.GetCode(authority.Address).Returns(new byte[32]); CodeInfoRepository sut = new(1); var tuples = new[] { CreateAuthorizationTuple(authority, 1, codeSource, (UInt256)0), }; - IEnumerable
result = sut.InsertFromAuthorizations(mockWorldState, tuples, Substitute.For()); + sut.InsertFromAuthorizations(mockWorldState, tuples, Substitute.For()); - result.Count().Should().Be(0); + mockWorldState.DidNotReceive().InsertCode(Arg.Any
(), Arg.Any>(), Arg.Any()); } + [Test] + public void InsertFromAuthorizations_AuthorityHasDelegatedCode_CodeIsInserted() + { + PrivateKey authority = TestItem.PrivateKeyA; + Address codeSource = TestItem.AddressB; + IWorldState mockWorldState = Substitute.For(); + mockWorldState.HasCode(authority.Address).Returns(true); + byte[] code = new byte[23]; + Eip7702Constants.DelegationHeader.CopyTo(code); + mockWorldState.GetCode(authority.Address).Returns(code); + CodeInfoRepository sut = new(1); + var tuples = new[] + { + CreateAuthorizationTuple(authority, 1, codeSource, (UInt256)0), + }; + + sut.InsertFromAuthorizations(mockWorldState, tuples, Substitute.For()); + + mockWorldState.Received().InsertCode(authority.Address, Arg.Any(), Arg.Any>(), Arg.Any(), Arg.Any()); + } private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) { diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 3317998a984..f2626df9ce4 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -178,7 +178,6 @@ public void InsertCode(IWorldState state, ReadOnlyMemory code, Address cod _codeCache.Set(codeHash, codeInfo); } - /// /// Insert code delegations from transaction authorization_list authorized by signature, /// and return all authority addresses that was accessed. @@ -200,10 +199,10 @@ public IEnumerable
InsertFromAuthorizations( result.Add(authTuple.Authority); string? error; if (!IsValidForExecution(authTuple, worldState, _ethereumEcdsa.ChainId, spec, out error)) - { continue; - } + InsertAuthorizedCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); + worldState.IncrementNonce(authTuple.Authority); } return result; @@ -214,7 +213,6 @@ void InsertAuthorizedCode(IWorldState state, Address codeSource, Address authori Hash256 codeHash = Keccak.Compute(authorizedBuffer); state.InsertCode(authority, codeHash, authorizedBuffer.AsMemory(), spec); _codeCache.Set(codeHash, new CodeInfo(authorizedBuffer)); - state.IncrementNonce(authority); } } @@ -239,7 +237,7 @@ private bool IsValidForExecution( return false; } if (stateProvider.HasCode(authorizationTuple.Authority) - && HasDelegatedCode(stateProvider, authorizationTuple.Authority, spec)) + && !HasDelegatedCode(stateProvider, authorizationTuple.Authority)) { error = $"Authority ({authorizationTuple.Authority}) has code deployed."; return false; @@ -255,11 +253,10 @@ private bool IsValidForExecution( return true; } - private bool HasDelegatedCode(IWorldState worldState, Address source, IReleaseSpec spec) + private bool HasDelegatedCode(IWorldState worldState, Address source) { - CodeInfo codeInfo = GetCachedCodeInfo(worldState, source, spec); return - HasDelegatedCode(codeInfo.MachineCode.Span); + HasDelegatedCode(worldState.GetCode(source)); } private static bool HasDelegatedCode(ReadOnlySpan code) @@ -267,7 +264,7 @@ private static bool HasDelegatedCode(ReadOnlySpan code) return code.Length >= Eip7702Constants.DelegationHeader.Length && Eip7702Constants.DelegationHeader.SequenceEqual( - code.Slice(Eip7702Constants.DelegationHeader.Length)); + code.Slice(0, Eip7702Constants.DelegationHeader.Length)); } private static Address ParseDelegatedAddress(byte[] code) From 2e8eddb1488001f06fb9056fc6e23b7305bf7f73 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 22 Aug 2024 12:36:11 +0200 Subject: [PATCH 325/551] spec changes (cherry picked from commit 0cc3cfe695e11fdf4e08efae8fa1787334007526) --- .../Ethereum.Basic.Test/TransactionTests.cs | 2 +- .../KeyAddressTests.cs | 2 +- .../Ethereum.Test.Base/BlockchainTestBase.cs | 4 +-- .../Ethereum.Test.Base/GeneralTestBase.cs | 2 +- .../TransactionTests.cs | 2 +- .../CodeInfoRepositoryTests.cs | 31 +++++++++++++++--- .../Nethermind.Evm/CodeInfoRepository.cs | 32 ++++++++++++++++--- .../Nethermind.Evm/ICodeInfoRepository.cs | 2 +- .../TransactionProcessor.cs | 18 +++++------ .../OverridableCodeInfoRepository.cs | 2 +- .../OptimismTransactionProcessor.cs | 4 +-- 11 files changed, 74 insertions(+), 27 deletions(-) diff --git a/src/Nethermind/Ethereum.Basic.Test/TransactionTests.cs b/src/Nethermind/Ethereum.Basic.Test/TransactionTests.cs index 1ce9cf6f735..4d1b4cfea7d 100644 --- a/src/Nethermind/Ethereum.Basic.Test/TransactionTests.cs +++ b/src/Nethermind/Ethereum.Basic.Test/TransactionTests.cs @@ -39,7 +39,7 @@ public static IEnumerable LoadTests() [TestCaseSource(nameof(LoadTests))] public void Test(TransactionTest test) { - EthereumEcdsa ethereumEcdsa = new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance); + EthereumEcdsa ethereumEcdsa = new EthereumEcdsa(TestBlockchainIds.ChainId); Transaction decodedUnsigned = Rlp.Decode(test.Unsigned); Assert.That(decodedUnsigned.Value, Is.EqualTo(test.Value), "value"); Assert.That(decodedUnsigned.GasPrice, Is.EqualTo(test.GasPrice), "gasPrice"); diff --git a/src/Nethermind/Ethereum.KeyAddress.Test/KeyAddressTests.cs b/src/Nethermind/Ethereum.KeyAddress.Test/KeyAddressTests.cs index 0384a6b5a4b..944ef338d97 100644 --- a/src/Nethermind/Ethereum.KeyAddress.Test/KeyAddressTests.cs +++ b/src/Nethermind/Ethereum.KeyAddress.Test/KeyAddressTests.cs @@ -26,7 +26,7 @@ public class KeyAddressTests public void SetUp() { Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); - _ecdsa = new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance); + _ecdsa = new EthereumEcdsa(TestBlockchainIds.ChainId); } private static IEnumerable LoadTests() diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs index 132c8c4bb2f..11a8841a92f 100644 --- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs @@ -131,7 +131,7 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? specProvider.UpdateMergeTransitionInfo(0, 0); } - IEthereumEcdsa ecdsa = new EthereumEcdsa(specProvider.ChainId, _logManager); + IEthereumEcdsa ecdsa = new EthereumEcdsa(specProvider.ChainId); TrieStore trieStore = new(stateDb, _logManager); IWorldState stateProvider = new WorldState(trieStore, codeDb, _logManager); @@ -148,7 +148,7 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? IHeaderValidator headerValidator = new HeaderValidator(blockTree, Sealer, specProvider, _logManager); IUnclesValidator unclesValidator = new UnclesValidator(blockTree, headerValidator, _logManager); IBlockValidator blockValidator = new BlockValidator(txValidator, headerValidator, unclesValidator, specProvider, _logManager); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); IVirtualMachine virtualMachine = new VirtualMachine( blockhashProvider, specProvider, diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index e583a78b423..2e6758b1ccf 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -75,7 +75,7 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) TrieStore trieStore = new(stateDb, _logManager); WorldState stateProvider = new(trieStore, codeDb, _logManager); IBlockhashProvider blockhashProvider = new TestBlockhashProvider(); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); IVirtualMachine virtualMachine = new VirtualMachine( blockhashProvider, specProvider, diff --git a/src/Nethermind/Ethereum.Transaction.Test/TransactionTests.cs b/src/Nethermind/Ethereum.Transaction.Test/TransactionTests.cs index 23682737ab7..ec1f5c3b4ce 100644 --- a/src/Nethermind/Ethereum.Transaction.Test/TransactionTests.cs +++ b/src/Nethermind/Ethereum.Transaction.Test/TransactionTests.cs @@ -190,7 +190,7 @@ private void RunTest(TransactionTest test, IReleaseSpec spec) Signature expectedSignature = new(validTest.R, validTest.S, validTest.V); Assert.That(transaction.Signature, Is.EqualTo(expectedSignature), "signature"); - IEthereumEcdsa ecdsa = new EthereumEcdsa(useChainId ? BlockchainIds.Mainnet : 0UL, LimboLogs.Instance); + IEthereumEcdsa ecdsa = new EthereumEcdsa(useChainId ? BlockchainIds.Mainnet : 0UL); bool verified = ecdsa.Verify( validTest.Sender, transaction); diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index dd6a39621f7..7e399647478 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -18,6 +18,8 @@ using Nethermind.Core.Specs; using Nethermind.Evm.CodeAnalysis; using Nethermind.Core.Extensions; +using Nethermind.Db; +using Nethermind.Trie.Pruning; namespace Nethermind.Evm.Test; @@ -33,9 +35,9 @@ public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() { CreateAuthorizationTuple(authority, 1, TestItem.AddressB, (UInt256)0), }; - IEnumerable
result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + CodeInsertResult result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); - result.Should().BeEquivalentTo([authority.Address]); + result.Addresses.Should().BeEquivalentTo([authority.Address]); } public static IEnumerable AuthorizationCases() @@ -59,9 +61,9 @@ public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_Inserts { CodeInfoRepository sut = new(1); - IEnumerable
result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + CodeInsertResult result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); - result.Count().Should().Be(expectedCount); + result.Addresses.Count().Should().Be(expectedCount); } [Test] @@ -104,6 +106,27 @@ public void InsertFromAuthorizations_AuthorityHasDelegatedCode_CodeIsInserted() mockWorldState.Received().InsertCode(authority.Address, Arg.Any(), Arg.Any>(), Arg.Any(), Arg.Any()); } + [Test] + public void InsertFromAuthorizations_AuthorityHasZeroNonce_NonceIsIncrementedByOne() + { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + PrivateKey authority = TestItem.PrivateKeyA; + Address codeSource = TestItem.AddressB; + stateProvider.CreateAccount(authority.Address, 0); + CodeInfoRepository sut = new(1); + var tuples = new[] + { + CreateAuthorizationTuple(authority, 1, codeSource, (UInt256)0), + }; + + sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For()); + + Assert.That(stateProvider.GetNonce(authority.Address), Is.EqualTo((UInt256)1)); + } + private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) { AuthorizationTupleDecoder decoder = new(); diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index f2626df9ce4..87f6f25b9c6 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -183,28 +183,37 @@ public void InsertCode(IWorldState state, ReadOnlyMemory code, Address cod /// and return all authority addresses that was accessed. /// eip-7702 ///
- public IEnumerable
InsertFromAuthorizations( + public CodeInsertResult InsertFromAuthorizations( IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec) { - List
result = new List
(); + List
result = new(); + int refunds = 0; //TODO optimize foreach (AuthorizationTuple? authTuple in authorizations) { if (authTuple is null) continue; authTuple.Authority = authTuple.Authority ?? _ethereumEcdsa.RecoverAddress(authTuple); + string? error; + if (!result.Contains(authTuple.Authority)) result.Add(authTuple.Authority); - string? error; + if (!IsValidForExecution(authTuple, worldState, _ethereumEcdsa.ChainId, spec, out error)) continue; InsertAuthorizedCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); + + if (!worldState.AccountExists(authTuple.Authority)) + worldState.CreateAccount(authTuple.Authority, 0); + else + refunds++; + worldState.IncrementNonce(authTuple.Authority); } - return result; + return new CodeInsertResult(result, refunds); void InsertAuthorizedCode(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) { @@ -305,3 +314,18 @@ private class CachedPrecompile( } } } +public readonly struct CodeInsertResult +{ + public CodeInsertResult(IEnumerable
addresses, int refunds) + { + Addresses = addresses; + Refunds = refunds; + } + public CodeInsertResult() + { + Addresses = Array.Empty
(); + } + public readonly IEnumerable
Addresses; + public readonly int Refunds; +} + diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index 820334727fc..3c575400523 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -16,5 +16,5 @@ public interface ICodeInfoRepository CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec); - IEnumerable
InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec); + CodeInsertResult InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index c92bab3f517..0f1b6db5256 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -130,20 +130,19 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); - IEnumerable
authorities = Array.Empty
(); - + CodeInsertResult codeInsertResult = new(); if (spec.IsEip7702Enabled) { if (tx.HasAuthorizationList) { - authorities = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); + codeInsertResult = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); } } ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository); long gasAvailable = tx.GasLimit - intrinsicGas; - ExecuteEvmCall(tx, header, spec, tracer, opts, authorities, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); + ExecuteEvmCall(tx, header, spec, tracer, opts, codeInsertResult, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode); // Finalize @@ -448,7 +447,7 @@ protected void ExecuteEvmCall( IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, - IEnumerable
authorities, + CodeInsertResult codeInsertResult, in long gasAvailable, in ExecutionEnvironment env, out TransactionSubstate? substate, @@ -482,7 +481,7 @@ protected void ExecuteEvmCall( using (EvmState state = new(unspentGas, env, executionType, true, snapshot, false)) { - WarmUp(tx, header, spec, env, state, authorities); + WarmUp(tx, header, spec, env, state, codeInsertResult.Addresses); substate = !tracer.IsTracingActions ? VirtualMachine.Run(state, WorldState, tracer) @@ -543,7 +542,7 @@ protected void ExecuteEvmCall( statusCode = StatusCode.Success; } - spentGas = Refund(tx, header, spec, opts, substate, unspentGas, env.TxExecutionContext.GasPrice); + spentGas = Refund(tx, header, spec, opts, substate, unspentGas, env.TxExecutionContext.GasPrice, codeInsertResult.Refunds); } catch (Exception ex) when (ex is EvmException or OverflowException) // TODO: OverflowException? still needed? hope not { @@ -620,7 +619,7 @@ protected void TraceLogInvalidTx(Transaction transaction, string reason) } protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionOptions opts, - in TransactionSubstate substate, in long unspentGas, in UInt256 gasPrice) + in TransactionSubstate substate, in long unspentGas, in UInt256 gasPrice, int codeInsertRefunds) { long spentGas = tx.GasLimit; if (!substate.IsError) @@ -629,7 +628,8 @@ protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec s long refund = substate.ShouldRevert ? 0 : RefundHelper.CalculateClaimableRefund(spentGas, - substate.Refund + substate.DestroyList.Count * RefundOf.Destroy(spec.IsEip3529Enabled), spec); + substate.Refund + substate.DestroyList.Count * RefundOf.Destroy(spec.IsEip3529Enabled) + + (GasCostOf.NewAccount-GasCostOf.PerAuthBaseCost) * codeInsertRefunds, spec); if (Logger.IsTrace) Logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + refund); diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index 2e6da9eae00..718d51d7395 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -46,7 +46,7 @@ public void ClearOverwrites() _codeOverwrites.Clear(); } - public IEnumerable
InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec) + public CodeInsertResult InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec) { return codeInfoRepository.InsertFromAuthorizations(worldState, authorizations, spec); } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs index aa71d1fae45..ddc26add7aa 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismTransactionProcessor.cs @@ -160,7 +160,7 @@ protected override void PayFees(Transaction tx, BlockHeader header, IReleaseSpec } protected override long Refund(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionOptions opts, - in TransactionSubstate substate, in long unspentGas, in UInt256 gasPrice) + in TransactionSubstate substate, in long unspentGas, in UInt256 gasPrice, int refunds) { // if deposit: skip refunds, skip tipping coinbase // Regolith changes this behaviour to report the actual gasUsed instead of always reporting all gas used. @@ -171,6 +171,6 @@ protected override long Refund(Transaction tx, BlockHeader header, IReleaseSpec return tx.IsOPSystemTransaction ? 0 : tx.GasLimit; } - return base.Refund(tx, header, spec, opts, substate, unspentGas, gasPrice); + return base.Refund(tx, header, spec, opts, substate, unspentGas, gasPrice, refunds); } } From da3e3bd79ba33aa90223620515051d5c9e5a8890 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 22 Aug 2024 13:55:32 +0200 Subject: [PATCH 326/551] unit tests (cherry picked from commit 021792d5b6003fd0f1ee26b2d38682f0f57f1e10) --- .../CodeInfoRepositoryTests.cs | 70 +++++++++++++++---- .../Nethermind.Evm/CodeInfoRepository.cs | 4 +- 2 files changed, 60 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 7e399647478..6434004c0cb 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -20,6 +20,7 @@ using Nethermind.Core.Extensions; using Nethermind.Db; using Nethermind.Trie.Pruning; +using System.Diagnostics.Tracing; namespace Nethermind.Evm.Test; @@ -44,26 +45,35 @@ public static IEnumerable AuthorizationCases() { yield return new object[] { - new[] - { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, (UInt256)0), - //Wrong chain id - CreateAuthorizationTuple(TestItem.PrivateKeyA, 0, TestItem.AddressB, (UInt256)0), - //wrong nonce - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, (UInt256)1), - } - , 1 + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, (UInt256)0), + true + }; + yield return new object[] + { + //Wrong chain id + CreateAuthorizationTuple(TestItem.PrivateKeyB, 2, TestItem.AddressB, (UInt256)0), + false + }; + yield return new object[] + { + //wrong nonce + CreateAuthorizationTuple(TestItem.PrivateKeyC, 1, TestItem.AddressB, (UInt256)1), + false }; } [TestCaseSource(nameof(AuthorizationCases))] - public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_InsertsExpectedCount(AuthorizationTuple[] tuples, int expectedCount) + public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_InsertsIfExpected(AuthorizationTuple tuple, bool shouldInsert) { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); CodeInfoRepository sut = new(1); - CodeInsertResult result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + CodeInsertResult result = sut.InsertFromAuthorizations(stateProvider, [tuple], Substitute.For()); - result.Addresses.Count().Should().Be(expectedCount); + Assert.That(stateProvider.HasCode(result.Addresses.First()), Is.EqualTo(shouldInsert)); } [Test] @@ -127,6 +137,42 @@ public void InsertFromAuthorizations_AuthorityHasZeroNonce_NonceIsIncrementedByO Assert.That(stateProvider.GetNonce(authority.Address), Is.EqualTo((UInt256)1)); } + [Test] + public void InsertFromAuthorizations_FourAuthorizationInTotalButTwoAreInvalid_ResultContainsAllFour() + { + CodeInfoRepository sut = new(1); + var tuples = new[] + { + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, (UInt256)0), + CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, (UInt256)0), + CreateAuthorizationTuple(TestItem.PrivateKeyC, 2, TestItem.AddressF, (UInt256)0), + CreateAuthorizationTuple(TestItem.PrivateKeyD, 1, TestItem.AddressF, (UInt256)1), + }; + CodeInsertResult result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + + result.Addresses.Should().BeEquivalentTo([TestItem.AddressA, TestItem.AddressB, TestItem.AddressC, TestItem.AddressD]); + } + + [Test] + public void InsertFromAuthorizations_AuthorizationsHasOneExistingAccount_ResultHaveOneRefund() + { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + CodeInfoRepository sut = new(1); + var tuples = new[] + { + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, (UInt256)0), + CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, (UInt256)0), + }; + stateProvider.CreateAccount(TestItem.AddressA, 0); + + CodeInsertResult result = sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For()); + + result.Refunds.Should().Be(1); + } + private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) { AuthorizationTupleDecoder decoder = new(); diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 87f6f25b9c6..633974fc4ff 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -204,13 +204,13 @@ public CodeInsertResult InsertFromAuthorizations( if (!IsValidForExecution(authTuple, worldState, _ethereumEcdsa.ChainId, spec, out error)) continue; - InsertAuthorizedCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); - if (!worldState.AccountExists(authTuple.Authority)) worldState.CreateAccount(authTuple.Authority, 0); else refunds++; + InsertAuthorizedCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); + worldState.IncrementNonce(authTuple.Authority); } return new CodeInsertResult(result, refunds); From 7f7e2ee1ec37a5c0bf399b8031aff42c846d2ff4 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 22 Aug 2024 14:10:38 +0200 Subject: [PATCH 327/551] Merge branch 'pectra' into feature/eip-7702 (cherry picked from commit c7e9f61c86c1edd0f7f3d3593292274d01fe75f9) --- .../PragueBlockChainTests.cs | 25 + .../PragueStateTests.cs | 22 + .../Ethereum.Blockchain.Test/EIP6110Tests.cs | 26 + .../Ethereum.Test.Base/BlockchainTestBase.cs | 16 +- .../Ethereum.Test.Base/GeneralStateTest.cs | 2 + .../Ethereum.Test.Base/GeneralTestBase.cs | 3 +- .../Ethereum.Test.Base/JsonToEthereumTest.cs | 3 + ...sts.TestAccountAbstractionRpcBlockchain.cs | 1 + .../AuraBlockProcessorTests.cs | 1 + .../AuRaContractGasLimitOverrideTests.cs | 3 +- .../Transactions/TxCertifierFilterTests.cs | 5 +- .../Transactions/TxPermissionFilterTest.cs | 1 + .../BlockProcessorTests.cs | 2 + .../Producers/DevBlockproducerTests.cs | 1 + .../Nethermind.Blockchain.Test/ReorgTests.cs | 1 + .../Validators/BlockValidatorTests.cs | 48 ++ .../Validators/WithdrawalValidatorTests.cs | 7 +- .../BeaconBlockRoot/BeaconBlockRootHandler.cs | 70 ++- .../IBeaconBlockRootHandler.cs | 6 +- .../Contracts/Contract.cs | 1 - .../FullPruning/FullPruner.cs | 1 + .../Nethermind.Blockchain/GenesisLoader.cs | 3 - .../CliqueBlockProducerTests.cs | 2 + .../AuRaBlockProcessor.cs | 10 +- .../NullBeaconBlockRootHandler.cs | 17 - .../InitializeBlockchainAuRa.cs | 1 + .../StartBlockProducerAuRa.cs | 1 + .../CliqueBlockProducer.cs | 4 +- .../CliquePlugin.cs | 1 + .../NethDevPlugin.cs | 1 + .../DepositProcessorTests.cs | 65 +++ .../Nethermind.Consensus/EngineApiVersions.cs | 1 + .../Messages/BlockErrorMessages.cs | 8 +- .../Processing/BlockExtensions.cs | 4 +- .../Processing/BlockProcessor.cs | 24 +- .../Processing/ReadOnlyChainProcessingEnv.cs | 1 + .../Producers/BlockProducerEnvFactory.cs | 12 +- .../Producers/BlockToProduce.cs | 9 +- .../Producers/PayloadAttributes.cs | 4 +- .../Requests/ConsensusRequestsProcessor.cs | 40 ++ .../Requests/ConsolidationRequestProcessor.cs | 66 +++ .../Requests/DepositsProcessor.cs | 53 ++ .../Requests/IConsensusRequestsProcessor.cs | 13 + .../Requests/IDepositsProcessor.cs | 14 + .../Requests/WithdrawalRequestsProcessor.cs | 64 +++ .../Validators/BlockValidator.cs | 188 +++++-- .../Blockchain/TestBlockchain.cs | 23 +- .../Builders/BlockBuilder.cs | 23 + .../Builders/BlockHeaderBuilder.cs | 6 + .../Builders/Build.Deposit.cs | 9 + .../Builders/Build.WithdrawalRequest.cs | 9 + .../Builders/ConsolidationRequestBuilder.cs | 32 ++ .../Builders/DepositBuilder.cs | 45 ++ .../Nethermind.Core.Test/Builders/TestItem.cs | 23 + .../Builders/WithdrawalRequestBuilder.cs | 33 ++ .../Encoding/BlockDecoderTests.cs | 38 ++ .../Encoding/ConsensusRequestDecoderTests.cs | 214 +++++++ .../Encoding/HeaderDecoderTests.cs | 36 ++ src/Nethermind/Nethermind.Core/Block.cs | 20 +- src/Nethermind/Nethermind.Core/BlockBody.cs | 14 +- src/Nethermind/Nethermind.Core/BlockHeader.cs | 12 +- .../ConsensusRequests/ConsensusRequest.cs | 95 ++++ .../ConsensusRequests/ConsolidationRequest.cs | 45 ++ .../ConsensusRequests/Deposit.cs | 57 ++ .../ConsensusRequests/WithdrawalRequest.cs | 44 ++ .../Nethermind.Core/Eip6110Constants.cs | 10 + .../Nethermind.Core/Eip7002Constants.cs | 9 + .../Nethermind.Core/Eip7251Constants.cs | 9 + .../Nethermind.Core/Specs/IReleaseSpec.cs | 45 +- .../Nethermind.Core/TransactionExtensions.cs | 6 +- src/Nethermind/Nethermind.Core/Withdrawal.cs | 1 + .../Nethermind.Db/IPruningConfig.cs | 0 src/Nethermind/Nethermind.Db/PruningConfig.cs | 0 .../Nethermind.Evm.Benchmark/EvmBenchmarks.cs | 5 +- .../MultipleUnsignedOperations.cs | 5 +- .../StaticCallBenchmarks.cs | 5 +- .../ConsolidationRequestProcessorTest.cs | 97 ++++ .../Nethermind.Evm.Test/InvalidOpcodeTests.cs | 12 +- .../VirtualMachineTestsBase.cs | 8 + .../WithdrawalRequestsProcessorTests.cs | 97 ++++ .../Nethermind.Evm/CodeInfoRepository.cs | 4 +- src/Nethermind/Nethermind.Evm/EvmStack.cs | 9 +- .../Nethermind.Evm/ExecutionEnvironment.cs | 42 +- .../Nethermind.Evm/ICodeInfoRepository.cs | 2 +- .../ITransactionProcessor.cs | 31 + .../SystemTxProcessor.cs | 528 ++++++++++++++++++ .../TransactionProcessor.cs | 129 ++--- .../TransactionResult.cs | 23 + .../Nethermind.Evm/VirtualMachine.cs | 66 +-- .../Nethermind.Facade/Eth/BlockForRpc.cs | 7 + .../OverridableCodeInfoRepository.cs | 4 +- .../SimulateReadOnlyBlocksProcessingEnv.cs | 1 + .../Nethermind.Init/InitializeStateDb.cs | 1 + .../Steps/InitializeBlockchain.cs | 1 + .../EthModuleBenchmarks.cs | 2 +- .../Modules/Proof/ProofRpcModuleTests.cs | 42 +- .../Modules/Trace/ParityStyleTracerTests.cs | 1 + .../AuRaMergeEngineModuleTests.cs | 30 +- .../AuRaMergeBlockProcessor.cs | 15 +- .../AuRaMergeBlockProducerEnvFactory.cs | 18 +- .../InitializeBlockchainAuRaMerge.cs | 3 + .../ConsensusRequestsProcessorMock.cs | 37 ++ .../EngineModuleTests.HelperFunctions.cs | 64 ++- .../EngineModuleTests.PayloadProduction.cs | 10 +- .../EngineModuleTests.Setup.cs | 48 +- .../EngineModuleTests.Synchronization.cs | 36 +- .../EngineModuleTests.V1.cs | 30 +- .../EngineModuleTests.V2.cs | 7 +- .../EngineModuleTests.V3.cs | 5 +- .../EngineModuleTests.V4.cs | 505 +++++++++++++++++ .../Boost/BoostBlockImprovementContext.cs | 2 +- .../Data/ExecutionPayload.cs | 100 +++- .../Data/ExecutionPayloadBodyV1Result.cs | 6 +- .../Data/ExecutionPayloadBodyV2Result.cs | 44 ++ .../Data/ExecutionPayloadV3.cs | 30 +- .../Data/ExecutionPayloadV4.cs | 111 ++++ .../Data/GetPayloadV2Result.cs | 15 +- .../Data/GetPayloadV3Result.cs | 16 +- .../Data/GetPayloadV4Result.cs | 9 + .../Data/IExecutionPayloadParams.cs | 29 +- .../EngineRpcModule.Cancun.cs | 2 +- .../EngineRpcModule.Prague.cs | 33 ++ .../EngineRpcModule.Shanghai.cs | 4 +- .../EngineRpcModule.cs | 8 +- .../Handlers/EngineRpcCapabilitiesProvider.cs | 7 + .../GetPayloadBodiesByHashV1Handler.cs | 29 +- .../GetPayloadBodiesByHashV2Handler.cs | 49 ++ .../GetPayloadBodiesByRangeV1Handler.cs | 33 +- .../GetPayloadBodiesByRangeV2Handler.cs | 52 ++ .../Handlers/GetPayloadV1Handler.cs | 10 +- .../Handlers/GetPayloadV4Handler.cs | 24 + .../IGetPayloadBodiesByRangeV2Handler.cs | 14 + .../IEngineRpcModule.Prague.cs | 39 ++ .../IEngineRpcModule.Shanghai.cs | 2 +- .../InvalidBlockInterceptor.cs | 6 +- .../Nethermind.Merge.Plugin/MergePlugin.cs | 4 + .../Synchronization/ChainLevelHelper.cs | 2 +- .../MevRpcModuleTests.TestMevRpcBlockchain.cs | 1 + .../Messages/BlockBodiesMessageSerializer.cs | 30 +- .../InitializeBlockchainOptimism.cs | 1 + .../OptimismBlockProcessor.cs | 6 +- .../OptimismBlockProducerEnvFactory.cs | 1 + .../Nethermind.Optimism/OptimismPlugin.cs | 6 + .../OptimismReceiptStorageDecoder.cs | 2 +- .../ReadOnlyChainProcessingEnv.cs | 1 + .../Properties/launchSettings.json | 4 +- .../Nethermind.Runner/configs/volta.cfg | 3 +- .../BlockDecoder.cs | 133 ++++- .../ConsensusRequestDecoder.cs | 128 +++++ .../ConsolidationRequestDecoder.cs | 66 +++ .../DepositDecoder.cs | 89 +++ .../HeaderDecoder.cs | 26 +- .../Nethermind.Serialization.Rlp/RlpStream.cs | 3 + .../WithdrawalRequestDecoder.cs | 66 +++ .../ChainSpecBasedSpecProviderTests.cs | 7 +- .../OverridableReleaseSpec.cs | 12 +- .../ChainSpecStyle/ChainParameters.cs | 6 + .../ChainSpecBasedSpecProvider.cs | 11 + .../ChainSpecStyle/ChainSpecLoader.cs | 29 +- .../Json/ChainSpecParamsJson.cs | 6 + .../Nethermind.Specs/Forks/00_Olympic.cs | 6 + .../Nethermind.Specs/Forks/18_Prague.cs | 3 + .../Nethermind.Specs/MainnetSpecProvider.cs | 1 + .../Nethermind.Specs/ReleaseSpec.cs | 17 +- .../SystemTransactionReleaseSpec.cs | 14 +- .../StateProviderTests.cs | 4 +- .../StatsCollectorTests.cs | 4 +- .../Nethermind.State/IWorldState.cs | 6 +- .../Nethermind.State/Proofs/PatriciaTrieT.cs | 3 +- .../Nethermind.State/Proofs/RequestsTrie.cs | 39 ++ .../Nethermind.State/Proofs/WithdrawalTrie.cs | 2 +- .../Nethermind.State/StateProvider.cs | 21 +- src/Nethermind/Nethermind.State/WorldState.cs | 14 +- .../SyncThreadTests.cs | 2 + .../SynchronizerTests.cs | 1 + .../Nethermind.Trie/PatriciaTree.cs | 2 +- .../Nethermind.Trie/Pruning/TinyTreePath.cs | 1 + .../Nethermind.Trie/TrieStoreWithReadFlags.cs | 1 - 178 files changed, 4495 insertions(+), 602 deletions(-) create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueBlockChainTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs create mode 100644 src/Nethermind/Ethereum.Blockchain.Test/EIP6110Tests.cs mode change 100755 => 100644 src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs delete mode 100644 src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs create mode 100644 src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs create mode 100644 src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/ConsolidationRequestBuilder.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs create mode 100644 src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs create mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs create mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs create mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs create mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs create mode 100644 src/Nethermind/Nethermind.Core/Eip6110Constants.cs create mode 100644 src/Nethermind/Nethermind.Core/Eip7002Constants.cs create mode 100644 src/Nethermind/Nethermind.Core/Eip7251Constants.cs mode change 100755 => 100644 src/Nethermind/Nethermind.Db/IPruningConfig.cs mode change 100755 => 100644 src/Nethermind/Nethermind.Db/PruningConfig.cs create mode 100644 src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs create mode 100644 src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs create mode 100644 src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs create mode 100644 src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionResult.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs create mode 100644 src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueBlockChainTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueBlockChainTests.cs new file mode 100644 index 00000000000..2474c0cfa2b --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueBlockChainTests.cs @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Ethereum.Test.Base; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +[Explicit("These tests are not ready yet")] +public class PragueBlockChainTests : BlockchainTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public async Task Test(BlockchainTest test) => await RunTest(test); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/blockchain_tests/prague"); + return loader.LoadTests().OfType(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs new file mode 100644 index 00000000000..107b4e249f1 --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.Linq; +using Ethereum.Test.Base; +using FluentAssertions; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Pyspec.Test; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +[Explicit("These tests are not ready yet")] +public class PragueStateTests : GeneralStateTestBase +{ + [TestCaseSource(nameof(LoadTests))] + public void Test(GeneralStateTest test) => RunTest(test).Pass.Should().BeTrue(); + + private static IEnumerable LoadTests() + { + TestsSourceLoader loader = new(new LoadPyspecTestsStrategy(), $"fixtures/state_tests/prague"); + return loader.LoadTests().Cast(); + } +} diff --git a/src/Nethermind/Ethereum.Blockchain.Test/EIP6110Tests.cs b/src/Nethermind/Ethereum.Blockchain.Test/EIP6110Tests.cs new file mode 100644 index 00000000000..d55bf6b3af1 --- /dev/null +++ b/src/Nethermind/Ethereum.Blockchain.Test/EIP6110Tests.cs @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Ethereum.Test.Base; +using NUnit.Framework; + +namespace Ethereum.Blockchain.Test +{ + [TestFixture] + [Parallelizable(ParallelScope.All)] + public class Eip6110Tests : GeneralStateTestBase + { + [TestCaseSource(nameof(LoadTests))] + public void Test(GeneralStateTest test) + { + Assert.True(RunTest(test).Pass); + } + + public static IEnumerable LoadTests() + { + var loader = new TestsSourceLoader(new LoadGeneralStateTestsStrategy(), "stEIP6110"); + return (IEnumerable)loader.LoadTests(); + } + } +} diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs index 11a8841a92f..0afabd5c361 100644 --- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs @@ -155,21 +155,23 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? codeInfoRepository, _logManager); + TransactionProcessor? txProcessor = new( + specProvider, + stateProvider, + virtualMachine, + codeInfoRepository, + _logManager); + IBlockProcessor blockProcessor = new BlockProcessor( specProvider, blockValidator, rewardCalculator, - new BlockProcessor.BlockValidationTransactionsExecutor( - new TransactionProcessor( - specProvider, - stateProvider, - virtualMachine, - codeInfoRepository, - _logManager), + new BlockProcessor.BlockValidationTransactionsExecutor(txProcessor, stateProvider), stateProvider, receiptStorage, new BlockhashStore(specProvider, stateProvider), + txProcessor, _logManager); IBlockchainProcessor blockchainProcessor = new BlockchainProcessor( diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs index 46e1f68a3de..09158536941 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs @@ -37,6 +37,8 @@ public class GeneralStateTest : IEthereumTest public UInt256? ParentBlobGasUsed { get; set; } public UInt256? ParentExcessBlobGas { get; set; } + public Hash256? RequestsRoot { get; set; } + public override string ToString() { return $"{Path.GetFileName(Category)}.{Name}_{ForkName}"; diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index 2e6758b1ccf..334f1f4dd48 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -109,6 +109,7 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) header.ParentBeaconBlockRoot = test.CurrentBeaconRoot; header.ExcessBlobGas = test.CurrentExcessBlobGas ?? (test.Fork is Cancun ? 0ul : null); header.BlobGasUsed = BlobGasCalculator.CalculateBlobGas(test.Transaction); + header.RequestsRoot = test.RequestsRoot; Stopwatch stopwatch = Stopwatch.StartNew(); IReleaseSpec? spec = specProvider.GetSpec((ForkActivation)test.CurrentNumber); @@ -178,7 +179,7 @@ private static void InitializeTestState(GeneralStateTest test, WorldState stateP } stateProvider.CreateAccount(accountState.Key, accountState.Value.Balance); - stateProvider.InsertCode(accountState.Key, accountState.Value.Code, specProvider.GenesisSpec); + stateProvider.InsertCode(accountState.Key, accountState.Value.Code, specProvider.GenesisSpec, false); stateProvider.SetNonce(accountState.Key, accountState.Value.Nonce); } diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index d180fa40dd8..5e33bde1488 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -208,6 +208,7 @@ public static IEnumerable Convert(string name, GeneralStateTes } List blockchainTests = new(); + Console.WriteLine($"Loaded {testJson}"); foreach (KeyValuePair postStateBySpec in testJson.Post) { int iterationNumber = 0; @@ -287,9 +288,11 @@ public static IEnumerable Convert(string json) { Dictionary testsInFile = _serializer.Deserialize>(json); + List tests = new(); foreach (KeyValuePair namedTest in testsInFile) { + Console.WriteLine($"Loading {namedTest.Key}\n {namedTest.Value.Post}"); tests.AddRange(Convert(namedTest.Key, namedTest.Value)); } diff --git a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs index 4529540fa5b..15789b99c74 100644 --- a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs @@ -190,6 +190,7 @@ protected override BlockProcessor CreateBlockProcessor() State, ReceiptStorage, new BlockhashStore(SpecProvider, State), + TxProcessor, LogManager); AbiParameterConverter.RegisterFactory(new AbiTypeFactory(new AbiTuple())); diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs index cfbfb9cb9d7..f9c5eee3961 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs @@ -160,6 +160,7 @@ void Process(AuRaBlockProcessor auRaBlockProcessor, int blockNumber, Hash256 sta LimboLogs.Instance, Substitute.For(), new WithdrawalProcessor(stateProvider, LimboLogs.Instance), + transactionProcessor, null, txFilter, contractRewriter: contractRewriter); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs index 7df3df7dcca..24b29330e4c 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; using FluentAssertions; @@ -17,7 +16,6 @@ using Nethermind.Consensus.Validators; using Nethermind.Core; using Nethermind.Logging; -using Nethermind.Trie.Pruning; using NUnit.Framework; namespace Nethermind.AuRa.Test.Contract; @@ -101,6 +99,7 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, + TxProcessor, null, null, GasLimitCalculator as AuRaContractGasLimitOverride); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs index 00a2894d175..f6403fa1184 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs @@ -19,7 +19,6 @@ using Nethermind.Core.Specs; using Nethermind.Core.Test.Builders; using Nethermind.Logging; -using Nethermind.Trie.Pruning; using Nethermind.TxPool; using NSubstitute; using NSubstitute.ExceptionExtensions; @@ -157,8 +156,8 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, - null - ); + TxProcessor, + null); } protected override Task AddBlocksOnStart() => Task.CompletedTask; diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs index e18f723dbf9..7bae62ac4df 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxPermissionFilterTest.cs @@ -298,6 +298,7 @@ protected override BlockProcessor CreateBlockProcessor() LimboLogs.Instance, BlockTree, NullWithdrawalProcessor.Instance, + TxProcessor, null, PermissionBasedTxFilter); } diff --git a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs index 58b3d0317bf..8e8172f1b0a 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/BlockProcessorTests.cs @@ -50,6 +50,7 @@ public void Prepared_block_contains_author_field() stateProvider, NullReceiptStorage.Instance, Substitute.For(), + transactionProcessor, LimboLogs.Instance); BlockHeader header = Build.A.BlockHeader.WithAuthor(TestItem.AddressD).TestObject; @@ -79,6 +80,7 @@ public void Recovers_state_on_cancel() stateProvider, NullReceiptStorage.Instance, Substitute.For(), + transactionProcessor, LimboLogs.Instance); BlockHeader header = Build.A.BlockHeader.WithNumber(1).WithAuthor(TestItem.AddressD).TestObject; diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs index fa9634a956d..78e1b46d72f 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs @@ -78,6 +78,7 @@ public void Test() stateProvider, NullReceiptStorage.Instance, new BlockhashStore(specProvider, stateProvider), + txProcessor, LimboLogs.Instance); BlockchainProcessor blockchainProcessor = new( blockTree, diff --git a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs index fa629f88730..a9d6497b430 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs @@ -78,6 +78,7 @@ public void Setup() stateProvider, NullReceiptStorage.Instance, new BlockhashStore(MainnetSpecProvider.Instance, stateProvider), + transactionProcessor, LimboLogs.Instance); _blockchainProcessor = new BlockchainProcessor( _blockTree, diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs index 8d5848e1052..860f9dab86e 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs @@ -3,6 +3,7 @@ using Nethermind.Consensus.Messages; using Nethermind.Consensus.Validators; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -202,5 +203,52 @@ public void ValidateSuggestedBlock_SuggestedBlockIsInvalid_CorrectErrorIsSet(Blo Assert.That(error, Does.StartWith(expectedError)); } + + [Test] + public void ValidateBodyAgainstHeader_BlockHasInvalidRequestRoot_ReturnsFalse() + { + Block block = Build.A.Block + .WithConsensusRequests(new ConsensusRequest[] { + Build.Deposit.WithIndex(0).TestObject, + Build.WithdrawalRequest.TestObject + }) + .TestObject; + block.Header.RequestsRoot = Keccak.OfAnEmptyString; + + Assert.That( + BlockValidator.ValidateBodyAgainstHeader(block.Header, block.Body), + Is.False); + } + + [Test] + public void ValidateBodyRequests_BlockHasReuests_InOrder_ReturnsTrue() + { + Block block = Build.A.Block + .WithConsensusRequests(new ConsensusRequest[] { + Build.Deposit.WithIndex(0).TestObject, + Build.WithdrawalRequest.TestObject + }) + .TestObject; + + Assert.That( + BlockValidator.ValidateRequestsOrder(block, out string? _), + Is.True); + } + + [Test] + public void ValidateBodyRequests_BlockHasReuests_OutOfOrder_ReturnsFalse() + { + Block block = Build.A.Block + .WithConsensusRequests(new ConsensusRequest[] { + Build.WithdrawalRequest.TestObject, + Build.Deposit.WithIndex(0).TestObject + }) + .TestObject; + + Assert.That( + BlockValidator.ValidateRequestsOrder(block, out string? _), + Is.False); + } + } } diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/WithdrawalValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/WithdrawalValidatorTests.cs index e26ab68e503..8d065f2666e 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/WithdrawalValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/WithdrawalValidatorTests.cs @@ -39,8 +39,7 @@ public void Withdrawals_with_incorrect_withdrawals_root_are_invalid() { ISpecProvider specProvider = new CustomSpecProvider(((ForkActivation)0, Shanghai.Instance)); BlockValidator blockValidator = new(Always.Valid, Always.Valid, Always.Valid, specProvider, LimboLogs.Instance); - Withdrawal[] withdrawals = { TestItem.WithdrawalA_1Eth, TestItem.WithdrawalB_2Eth }; - Hash256 withdrawalRoot = new WithdrawalTrie(withdrawals).RootHash; + Withdrawal[] withdrawals = [TestItem.WithdrawalA_1Eth, TestItem.WithdrawalB_2Eth]; bool isValid = blockValidator.ValidateSuggestedBlock(Build.A.Block.WithWithdrawals(withdrawals).WithWithdrawalsRoot(TestItem.KeccakD).TestObject); Assert.False(isValid); } @@ -50,7 +49,7 @@ public void Empty_withdrawals_are_valid_post_shanghai() { ISpecProvider specProvider = new CustomSpecProvider(((ForkActivation)0, Shanghai.Instance)); BlockValidator blockValidator = new(Always.Valid, Always.Valid, Always.Valid, specProvider, LimboLogs.Instance); - Withdrawal[] withdrawals = { }; + Withdrawal[] withdrawals = []; Hash256 withdrawalRoot = new WithdrawalTrie(withdrawals).RootHash; bool isValid = blockValidator.ValidateSuggestedBlock(Build.A.Block.WithWithdrawals(withdrawals).WithWithdrawalsRoot(withdrawalRoot).TestObject); Assert.True(isValid); @@ -61,7 +60,7 @@ public void Correct_withdrawals_block_post_shanghai() { ISpecProvider specProvider = new CustomSpecProvider(((ForkActivation)0, Shanghai.Instance)); BlockValidator blockValidator = new(Always.Valid, Always.Valid, Always.Valid, specProvider, LimboLogs.Instance); - Withdrawal[] withdrawals = { TestItem.WithdrawalA_1Eth, TestItem.WithdrawalB_2Eth }; + Withdrawal[] withdrawals = [TestItem.WithdrawalA_1Eth, TestItem.WithdrawalB_2Eth]; Hash256 withdrawalRoot = new WithdrawalTrie(withdrawals).RootHash; bool isValid = blockValidator.ValidateSuggestedBlock(Build.A.Block.WithWithdrawals(withdrawals).WithWithdrawalsRoot(withdrawalRoot).TestObject); Assert.True(isValid); diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs index 89276e3c7f8..7f9244a187a 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/BeaconBlockRootHandler.cs @@ -1,39 +1,57 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Core.Specs; +using System; using Nethermind.Core; -using Nethermind.Int256; -using Nethermind.State; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.State; -namespace Nethermind.Consensus.BeaconBlockRoot; - +namespace Nethermind.Blockchain.BeaconBlockRoot; public class BeaconBlockRootHandler : IBeaconBlockRootHandler { - public void ApplyContractStateChanges(Block block, IReleaseSpec spec, IWorldState stateProvider) + private readonly ITransactionProcessor _processor; + private static Address Default4788Address = new Address("0x000f3df6d732807ef1319fb7b8bb8522d0beac02"); + private readonly ILogger _logger; + private const long GasLimit = 30_000_000L; + public BeaconBlockRootHandler( + ITransactionProcessor processor, + ILogManager logManager) { + _processor = processor; + _logger = logManager.GetClassLogger(); + } + public void ExecuteSystemCall(Block block, IReleaseSpec spec) + { + BlockHeader? header = block.Header; if (!spec.IsBeaconBlockRootAvailable || - block.IsGenesis || - block.Header.ParentBeaconBlockRoot is null) - return; - - Address eip4788Account = spec.Eip4788ContractAddress ?? Eip4788Constants.BeaconRootsAddress; - - if (!stateProvider.AccountExists(eip4788Account)) - return; - - UInt256 timestamp = (UInt256)block.Timestamp; - Hash256 parentBeaconBlockRoot = block.ParentBeaconBlockRoot; - - UInt256.Mod(timestamp, Eip4788Constants.HistoryBufferLength, out UInt256 timestampReduced); - UInt256 rootIndex = timestampReduced + Eip4788Constants.HistoryBufferLength; - - StorageCell tsStorageCell = new(eip4788Account, timestampReduced); - StorageCell brStorageCell = new(eip4788Account, rootIndex); - - stateProvider.Set(tsStorageCell, Bytes.WithoutLeadingZeros(timestamp.ToBigEndian()).ToArray()); - stateProvider.Set(brStorageCell, Bytes.WithoutLeadingZeros(parentBeaconBlockRoot.Bytes).ToArray()); + header.IsGenesis || + header.ParentBeaconBlockRoot is null) return; + + Transaction? transaction = new() + { + Value = UInt256.Zero, + Data = header.ParentBeaconBlockRoot.Bytes.ToArray(), + To = spec.Eip4788ContractAddress ?? Default4788Address, + SenderAddress = Address.SystemUser, + GasLimit = GasLimit, + GasPrice = UInt256.Zero, + }; + transaction.Hash = transaction.CalculateHash(); + + try + { + _processor.Execute(transaction, header, NullTxTracer.Instance); + } + catch (Exception e) + { + if (_logger.IsError) _logger.Error("Error during calling BeaconBlockRoot contract", e); + } } } diff --git a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs index d30074fc4cc..8ed27077c04 100644 --- a/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs +++ b/src/Nethermind/Nethermind.Blockchain/BeaconBlockRoot/IBeaconBlockRootHandler.cs @@ -1,12 +1,12 @@ // SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using Nethermind.Core.Specs; using Nethermind.Core; +using Nethermind.Core.Specs; using Nethermind.State; -namespace Nethermind.Consensus.BeaconBlockRoot; +namespace Nethermind.Blockchain.BeaconBlockRoot; public interface IBeaconBlockRootHandler { - void ApplyContractStateChanges(Block block, IReleaseSpec spec, IWorldState state); + void ExecuteSystemCall(Block block, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs b/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs index cbb39fff9f0..3b4eec49104 100644 --- a/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs +++ b/src/Nethermind/Nethermind.Blockchain/Contracts/Contract.cs @@ -201,7 +201,6 @@ protected byte[] CallCore(ITransactionProcessor transactionProcessor, BlockHeade return tracer.ReturnValue; } } - protected object[] DecodeReturnData(string functionName, byte[] data) { AbiEncodingInfo abiEncodingInfo = AbiDefinition.GetFunction(functionName).GetReturnInfo(); diff --git a/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs b/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs old mode 100755 new mode 100644 index b8c6ef1331f..e951e03226a --- a/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs +++ b/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs @@ -138,6 +138,7 @@ await WaitForMainChainChange((e) => } catch (Exception e) { + Console.Out.WriteLine($"Its {e}"); if (_logger.IsError) _logger.Error("full pruning failed. ", e); } finally diff --git a/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs b/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs index 28f4979bafe..83263ec8fcb 100644 --- a/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs +++ b/src/Nethermind/Nethermind.Blockchain/GenesisLoader.cs @@ -14,7 +14,6 @@ using Nethermind.Evm.TransactionProcessing; using Nethermind.Specs.ChainSpecStyle; using Nethermind.State; -using Nethermind.Consensus.BeaconBlockRoot; namespace Nethermind.Blockchain { @@ -24,7 +23,6 @@ public class GenesisLoader private readonly ISpecProvider _specProvider; private readonly IWorldState _stateProvider; private readonly ITransactionProcessor _transactionProcessor; - private readonly BeaconBlockRootHandler _beaconBlockRootHandler; public GenesisLoader( ChainSpec chainSpec, @@ -36,7 +34,6 @@ public GenesisLoader( _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _stateProvider = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider)); _transactionProcessor = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor)); - _beaconBlockRootHandler = new BeaconBlockRootHandler(); } public Block Load() diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs index 69e6cb7156f..63c2696a38d 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs @@ -141,6 +141,7 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f stateProvider, NullReceiptStorage.Instance, new BlockhashStore(goerliSpecProvider, stateProvider), + transactionProcessor, nodeLogManager); BlockchainProcessor processor = new(blockTree, blockProcessor, new AuthorRecoveryStep(snapshotManager), stateReader, nodeLogManager, BlockchainProcessor.Options.NoReceipts); @@ -160,6 +161,7 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f minerStateProvider, NullReceiptStorage.Instance, new BlockhashStore(goerliSpecProvider, minerStateProvider), + minerTransactionProcessor, nodeLogManager); BlockchainProcessor minerProcessor = new(blockTree, minerBlockProcessor, new AuthorRecoveryStep(snapshotManager), stateReader, nodeLogManager, BlockchainProcessor.Options.NoReceipts); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 51190c3dd7e..dda607567c3 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -8,6 +8,7 @@ using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.AuRa.Validators; using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; @@ -17,6 +18,7 @@ using Nethermind.Crypto; using Nethermind.Evm; using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; using Nethermind.TxPool; @@ -42,11 +44,13 @@ public AuRaBlockProcessor( ILogManager logManager, IBlockFinder blockTree, IWithdrawalProcessor withdrawalProcessor, + ITransactionProcessor transactionProcessor, IAuRaValidator? auRaValidator, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, ContractRewriter? contractRewriter = null, - IBlockCachePreWarmer? preWarmer = null) + IBlockCachePreWarmer? preWarmer = null, + IConsensusRequestsProcessor? consensusRequestsProcessor = null) : base( specProvider, blockValidator, @@ -55,9 +59,11 @@ public AuRaBlockProcessor( stateProvider, receiptStorage, new BlockhashStore(specProvider, stateProvider), + transactionProcessor, logManager, withdrawalProcessor, - preWarmer: preWarmer) + preWarmer: preWarmer, + consensusRequestsProcessor: consensusRequestsProcessor) { _specProvider = specProvider; _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs b/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs deleted file mode 100644 index 96138999814..00000000000 --- a/src/Nethermind/Nethermind.Consensus.AuRa/BeaconBlockRoot/NullBeaconBlockRootHandler.cs +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Consensus.BeaconBlockRoot; -using Nethermind.Core; -using Nethermind.Core.Specs; -using Nethermind.State; - -namespace Nethermind.Consensus.AuRa.BeaconBlockRoot; -internal class NullBeaconBlockRootHandler : IBeaconBlockRootHandler -{ - public void ApplyContractStateChanges(Block block, IReleaseSpec spec, IWorldState state) - { - } - - public static IBeaconBlockRootHandler Instance { get; } = new NullBeaconBlockRootHandler(); -} diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs index 9253574e72a..3bfac506256 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs @@ -109,6 +109,7 @@ protected virtual AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter, B _api.LogManager, _api.BlockTree!, NullWithdrawalProcessor.Instance, + _api.TransactionProcessor, CreateAuRaValidator(), txFilter, GetGasLimitCalculator(), diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs index ee84c5f21a2..4abf23d082e 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/StartBlockProducerAuRa.cs @@ -157,6 +157,7 @@ private BlockProcessor CreateBlockProcessor(IReadOnlyTxProcessingScope changeabl _api.LogManager, _api.BlockTree, NullWithdrawalProcessor.Instance, + _api.TransactionProcessor, _validator, auRaTxFilter, CreateGasLimitCalculator(_api) as AuRaContractGasLimitOverride, diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index 3f2b574975b..421cbe19677 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -15,6 +15,7 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Transactions; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Crypto; @@ -493,7 +494,8 @@ ILogManager logManager header, selectedTxs, Array.Empty(), - spec.WithdrawalsEnabled ? Enumerable.Empty() : null + spec.WithdrawalsEnabled ? Enumerable.Empty() : null, + spec.RequestsEnabled ? Enumerable.Empty() : null ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index e8dbbcf0175..aa279192cb7 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -112,6 +112,7 @@ public IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null) scope.WorldState, NullReceiptStorage.Instance, new BlockhashStore(getFromApi.SpecProvider, scope.WorldState), + getFromApi.TransactionProcessor, getFromApi.LogManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(scope.WorldState, getFromApi.LogManager))); diff --git a/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs b/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs index 4297e243a42..c1dec5aeddd 100644 --- a/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Ethash/NethDevPlugin.cs @@ -82,6 +82,7 @@ public IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null) scope.WorldState, NullReceiptStorage.Instance, new BlockhashStore(getFromApi.SpecProvider, scope.WorldState), + getFromApi.TransactionProcessor, getFromApi.LogManager); IBlockchainProcessor producerChainProcessor = new BlockchainProcessor( diff --git a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs new file mode 100644 index 00000000000..af3e12b1505 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs @@ -0,0 +1,65 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Linq; +using FluentAssertions; +using Nethermind.Abi; +using Nethermind.Consensus.Requests; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using NSubstitute; +using NUnit.Framework; + + +namespace Nethermind.Consensus.Test; + +public class DepositProcessorTests +{ + [Test] + public void ShouldProcessDeposit() + { + Block block = Build.A.Block.TestObject; + DepositsProcessor depositsProcessor = new(); + + var deposit = new Deposit() + { + Amount = 32000000000, + Index = 0, + Pubkey = Bytes.FromHexString( + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"), + Signature = Bytes.FromHexString( + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003"), + WithdrawalCredentials = + Bytes.FromHexString("0000000000000000000000000000000000000000000000000000000000000002") + }; + + TxReceipt txReceipt = Build.A.Receipt.WithLogs( + Build.A.LogEntry.WithData( + Bytes.FromHexString( + "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080040597307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000" + ) + ) + .WithAddress( + new Core.Address(Bytes.FromHexString("0x00000000219ab540356cbb839cbe05303d7705fa")) + ).TestObject + ).TestObject; + + IReleaseSpec spec = Substitute.For(); + + spec.DepositsEnabled.Returns(true); + spec.DepositContractAddress.Returns( + new Core.Address(Bytes.FromHexString("0x00000000219ab540356cbb839cbe05303d7705fa")) + ); + + var processedDeposits = depositsProcessor.ProcessDeposits(block, new[] { txReceipt }, spec).ToList(); + + Assert.That(processedDeposits, Has.Count.EqualTo(1)); + + Deposit processedDeposit = processedDeposits[0]; + + processedDeposit.Should().BeEquivalentTo(deposit); + } +} diff --git a/src/Nethermind/Nethermind.Consensus/EngineApiVersions.cs b/src/Nethermind/Nethermind.Consensus/EngineApiVersions.cs index 598c8784907..145810a7364 100644 --- a/src/Nethermind/Nethermind.Consensus/EngineApiVersions.cs +++ b/src/Nethermind/Nethermind.Consensus/EngineApiVersions.cs @@ -8,4 +8,5 @@ public static class EngineApiVersions public const int Paris = 1; public const int Shanghai = 2; public const int Cancun = 3; + public const int Prague = 4; } diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index d949d8fcfe5..b40be7bc3aa 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -2,7 +2,8 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; -using Nethermind.Crypto; +using Nethermind.Core.Crypto; +using Nethermind.Serialization.Json; namespace Nethermind.Consensus.Messages; public static class BlockErrorMessages @@ -116,4 +117,9 @@ public static string InvalidTxInBlock(int i) => public const string NegativeGasUsed = "NegativeGasUsed: Cannot be negative."; + + public static string MissingRequests => "MissingRequests: Requests cannot be null in block when EIP-6110 or EIP-7002 are activated."; + public static string RequestsNotEnabled => "RequestsNotEnabled: Requests must be null in block when EIP-6110 and EIP-7002 are not activated."; + public static string InvalidRequestsRoot(Hash256? expected, Hash256? actual) => $"InvalidRequestsRoot: Requests root hash mismatch in block: expected {expected}, got {actual}"; + public static string InvalidRequestsOrder => "InvalidRequestsOrder: Requests are not in the correct order in block."; } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs index ba82ee02eb8..6e0eab907da 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs @@ -18,8 +18,8 @@ internal static class BlockExtensions { public static Block CreateCopy(this Block block, BlockHeader header) => block is BlockToProduce blockToProduce - ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals) - : new Block(header, block.Transactions, block.Uncles, block.Withdrawals); + ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals, blockToProduce.Requests) + : new Block(header, block.Transactions, block.Uncles, block.Withdrawals, block.Requests); public static IEnumerable GetTransactions(this Block block) => block is BlockToProduce blockToProduce diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index fe9ad56f4d7..f1d13e5ceae 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -9,10 +9,11 @@ using System.Threading; using System.Threading.Tasks; using Nethermind.Blockchain; +using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Blockchain.Blocks; using Nethermind.Blockchain.Find; using Nethermind.Blockchain.Receipts; -using Nethermind.Consensus.BeaconBlockRoot; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; @@ -22,6 +23,7 @@ using Nethermind.Crypto; using Nethermind.Evm; using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Specs.Forks; @@ -42,6 +44,8 @@ public partial class BlockProcessor : IBlockProcessor private readonly IBlockValidator _blockValidator; private readonly IRewardCalculator _rewardCalculator; private readonly IBlockProcessor.IBlockTransactionsExecutor _blockTransactionsExecutor; + + private readonly IConsensusRequestsProcessor _consensusRequestsProcessor; private readonly IBlockhashStore _blockhashStore; private readonly IBlockCachePreWarmer? _preWarmer; private const int MaxUncommittedBlocks = 64; @@ -60,10 +64,13 @@ public BlockProcessor( IWorldState? stateProvider, IReceiptStorage? receiptStorage, IBlockhashStore? blockHashStore, + ITransactionProcessor transactionProcessor, ILogManager? logManager, IWithdrawalProcessor? withdrawalProcessor = null, + IBeaconBlockRootHandler? beaconBlockRootHandler = null, IReceiptsRootCalculator? receiptsRootCalculator = null, - IBlockCachePreWarmer? preWarmer = null) + IBlockCachePreWarmer? preWarmer = null, + IConsensusRequestsProcessor? consensusRequestsProcessor = null) { _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); @@ -74,9 +81,11 @@ public BlockProcessor( _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); _receiptsRootCalculator = receiptsRootCalculator ?? ReceiptsRootCalculator.Instance; + _beaconBlockRootHandler = beaconBlockRootHandler ?? new BeaconBlockRootHandler(transactionProcessor, logManager); + _consensusRequestsProcessor = consensusRequestsProcessor ?? new ConsensusRequestsProcessor(transactionProcessor); + _blockhashStore = blockHashStore ?? throw new ArgumentNullException(nameof(blockHashStore)); _preWarmer = preWarmer; - _beaconBlockRootHandler = new BeaconBlockRootHandler(); ReceiptsTracer = new BlockReceiptsTracer(); } @@ -256,7 +265,7 @@ protected virtual TxReceipt[] ProcessBlock( ReceiptsTracer.SetOtherTracer(blockTracer); ReceiptsTracer.StartNewBlockTrace(block); - _beaconBlockRootHandler.ApplyContractStateChanges(block, spec, _stateProvider); + _beaconBlockRootHandler.ExecuteSystemCall(block, spec); _blockhashStore.ApplyBlockhashStateChanges(block.Header); _stateProvider.Commit(spec, commitStorageRoots: false); @@ -271,6 +280,8 @@ protected virtual TxReceipt[] ProcessBlock( block.Header.ReceiptsRoot = _receiptsRootCalculator.GetReceiptsRoot(receipts, spec, block.ReceiptsRoot); ApplyMinerRewards(block, blockTracer, spec); _withdrawalProcessor.ProcessWithdrawals(block, spec); + _consensusRequestsProcessor.ProcessRequests(spec, _stateProvider, block, receipts); + ReceiptsTracer.EndBlockTrace(); _stateProvider.Commit(spec, commitStorageRoots: true); @@ -295,7 +306,7 @@ protected virtual TxReceipt[] ProcessBlock( // TODO: block processor pipeline private void StoreTxReceipts(Block block, TxReceipt[] txReceipts) { - // Setting canonical is done when the BlockAddedToMain event is firec + // Setting canonical is done when the BlockAddedToMain event is fired _receiptStorage.Insert(block, txReceipts, false); } @@ -328,8 +339,9 @@ private Block PrepareBlockForProcessing(Block suggestedBlock) ReceiptsRoot = bh.ReceiptsRoot, BaseFeePerGas = bh.BaseFeePerGas, WithdrawalsRoot = bh.WithdrawalsRoot, + RequestsRoot = bh.RequestsRoot, IsPostMerge = bh.IsPostMerge, - ParentBeaconBlockRoot = bh.ParentBeaconBlockRoot, + ParentBeaconBlockRoot = bh.ParentBeaconBlockRoot }; if (!ShouldComputeStateRoot(bh)) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs index f4bc42832c2..9112c38d115 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyChainProcessingEnv.cs @@ -68,6 +68,7 @@ IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor scope.WorldState, receiptStorage, new BlockhashStore(specProvider, scope.WorldState), + scope.TransactionProcessor, logManager); } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index a2c71caa342..1e66df7efa1 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -7,6 +7,7 @@ using Nethermind.Config; using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; @@ -33,6 +34,7 @@ public class BlockProducerEnvFactory : IBlockProducerEnvFactory protected readonly ITransactionComparerProvider _transactionComparerProvider; protected readonly IBlocksConfig _blocksConfig; protected readonly ILogManager _logManager; + private readonly IConsensusRequestsProcessor? _consensusRequestsProcessor; public IBlockTransactionsExecutorFactory TransactionsExecutorFactory { get; set; } @@ -47,7 +49,8 @@ public BlockProducerEnvFactory( ITxPool txPool, ITransactionComparerProvider transactionComparerProvider, IBlocksConfig blocksConfig, - ILogManager logManager) + ILogManager logManager, + IConsensusRequestsProcessor? consensusRequestsProcessor = null) { _worldStateManager = worldStateManager; _blockTree = blockTree; @@ -60,6 +63,7 @@ public BlockProducerEnvFactory( _transactionComparerProvider = transactionComparerProvider; _blocksConfig = blocksConfig; _logManager = logManager; + _consensusRequestsProcessor = consensusRequestsProcessor; TransactionsExecutorFactory = new BlockProducerTransactionsExecutorFactory(specProvider, logManager); } @@ -149,8 +153,10 @@ protected virtual BlockProcessor CreateBlockProcessor( readOnlyTxProcessingEnv.WorldState, receiptStorage, new BlockhashStore(_specProvider, readOnlyTxProcessingEnv.WorldState), + readOnlyTxProcessingEnv.TransactionProcessor, logManager, - new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.WorldState, logManager))); - + new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.WorldState, logManager)), + consensusRequestsProcessor: _consensusRequestsProcessor + ); } } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs index 7a23c516027..be52d7b7203 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; //TODO: Redo clique block producer [assembly: InternalsVisibleTo("Nethermind.Consensus.Clique")] @@ -29,12 +30,12 @@ internal class BlockToProduce : Block } } - public BlockToProduce( - BlockHeader blockHeader, + public BlockToProduce(BlockHeader blockHeader, IEnumerable transactions, IEnumerable uncles, - IEnumerable? withdrawals = null) - : base(blockHeader, Array.Empty(), uncles, withdrawals) + IEnumerable? withdrawals = null, + IEnumerable? requests = null) + : base(blockHeader, Array.Empty(), uncles, withdrawals, requests) { Transactions = transactions; } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs index 0a38cffe602..d565349875e 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/PayloadAttributes.cs @@ -155,7 +155,7 @@ public virtual PayloadAttributesValidationResult Validate( apiVersion: apiVersion, actualVersion: this.GetVersion(), timestampVersion: specProvider.GetSpec(ForkActivation.TimestampOnly(Timestamp)) - .ExpectedEngineSpecVersion(), + .ExpectedPayloadAttributesVersion(), "PayloadAttributesV", out error); } @@ -172,7 +172,7 @@ public static int GetVersion(this PayloadAttributes executionPayload) => _ => EngineApiVersions.Paris }; - public static int ExpectedEngineSpecVersion(this IReleaseSpec spec) => + public static int ExpectedPayloadAttributesVersion(this IReleaseSpec spec) => spec switch { { IsEip4844Enabled: true } => EngineApiVersions.Cancun, diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs new file mode 100644 index 00000000000..e8dd43b8de8 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -0,0 +1,40 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Linq; +using Nethermind.Core; +using Nethermind.Core.Collections; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Serialization.Rlp; +using Nethermind.State; +using Nethermind.State.Proofs; + +namespace Nethermind.Consensus.Requests; + +public class ConsensusRequestsProcessor(ITransactionProcessor transactionProcessor) : IConsensusRequestsProcessor +{ + private readonly ConsolidationRequestsProcessor _consolidationRequestsProcessor = new(transactionProcessor); + private readonly WithdrawalRequestsProcessor _withdrawalRequestsProcessor = new(transactionProcessor); + private readonly IDepositsProcessor _depositsProcessor = new DepositsProcessor(); + + public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) + { + if (!spec.RequestsEnabled) + return; + + using ArrayPoolList requestsList = new(receipts.Length * 2); + + requestsList.AddRange(_depositsProcessor.ProcessDeposits(block, receipts, spec)); + requestsList.AddRange(_withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state, block)); + requestsList.AddRange(_consolidationRequestsProcessor.ReadConsolidationRequests(spec, state, block)); + + ConsensusRequest[] requests = requestsList.ToArray(); + Hash256 root = new RequestsTrie(requests).RootHash; + block.Body.Requests = requests; + block.Header.RequestsRoot = root; + } +} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs new file mode 100644 index 00000000000..876abdfe8d3 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs @@ -0,0 +1,66 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; +using Nethermind.State; + +namespace Nethermind.Consensus.Requests; + +// https://eips.ethereum.org/EIPS/eip-7251#block-processing +public class ConsolidationRequestsProcessor(ITransactionProcessor transactionProcessor) +{ + private const long GasLimit = 30_000_000L; + + public IEnumerable ReadConsolidationRequests(IReleaseSpec spec, IWorldState state, Block block) + { + if (!spec.ConsolidationRequestsEnabled) + yield break; + + Address eip7251Account = spec.Eip7251ContractAddress; + if (!state.AccountExists(eip7251Account)) // not needed anymore? + yield break; + + CallOutputTracer tracer = new(); + + Transaction? transaction = new() + { + Value = UInt256.Zero, + Data = Array.Empty(), + To = spec.Eip7251ContractAddress, + SenderAddress = Address.SystemUser, + GasLimit = GasLimit, + GasPrice = UInt256.Zero, + }; + transaction.Hash = transaction.CalculateHash(); + + transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); + var result = tracer.ReturnValue; + if (result == null || result.Length == 0) + yield break; + + int sizeOfClass = 20 + 48 + 48; + int count = result.Length / sizeOfClass; + for (int i = 0; i < count; ++i) + { + ConsolidationRequest request = new(); + Span span = new Span(result, i * sizeOfClass, sizeOfClass); + request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); + request.SourcePubkey = span.Slice(20, 48).ToArray(); + request.TargetPubkey = span.Slice(68, 48).ToArray(); + + yield return request; + } + } +} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs new file mode 100644 index 00000000000..4566019db4f --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -0,0 +1,53 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Nethermind.Abi; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Specs; +using System.Linq; +using Nethermind.Core.Extensions; +using System; +using Nethermind.Int256; + +namespace Nethermind.Consensus.Requests; + +public class DepositsProcessor : IDepositsProcessor +{ + private AbiSignature depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); + AbiEncoder abiEncoder = AbiEncoder.Instance; + + public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) + { + if (spec.DepositsEnabled) + { + for (int i = 0; i < receipts.Length; i++) + { + LogEntry[]? logEntries = receipts[i].Logs; + if (logEntries is not null) + { + for (int index = 0; index < logEntries.Length; index++) + { + LogEntry log = logEntries[index]; + if (log.LoggersAddress == spec.DepositContractAddress) + { + var result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, log.Data); + + var newDeposit = new Deposit() + { + Pubkey = (byte[])result[0], + WithdrawalCredentials = (byte[])result[1], + Amount = BitConverter.ToUInt64((byte[])result[2], 0), + Signature = (byte[])result[3], + Index = BitConverter.ToUInt64((byte[])result[4], 0) + }; + + yield return newDeposit; + } + } + } + } + } + } +} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs new file mode 100644 index 00000000000..01ed8f37278 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs @@ -0,0 +1,13 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.State; + +namespace Nethermind.Consensus.Requests; + +public interface IConsensusRequestsProcessor +{ + void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts); +} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs new file mode 100644 index 00000000000..f73cdaa4556 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs @@ -0,0 +1,14 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Specs; + +namespace Nethermind.Consensus.Requests; + +public interface IDepositsProcessor +{ + IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec); +} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs new file mode 100644 index 00000000000..37b9a3ee6ec --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -0,0 +1,64 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; +using Nethermind.State; +using System.Buffers.Binary; + +namespace Nethermind.Consensus.Requests; + +// https://eips.ethereum.org/EIPS/eip-7002#block-processing +public class WithdrawalRequestsProcessor(ITransactionProcessor transactionProcessor) +{ + private const long GasLimit = 30_000_000L; + + public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state, Block block) + { + if (!spec.WithdrawalRequestsEnabled) + yield break; + + Address eip7002Account = spec.Eip7002ContractAddress; + if (!state.AccountExists(eip7002Account)) // not needed anymore? + yield break; + + CallOutputTracer tracer = new(); + + Transaction? transaction = new() + { + Value = UInt256.Zero, + Data = Array.Empty(), + To = spec.Eip7002ContractAddress, + SenderAddress = Address.SystemUser, + GasLimit = GasLimit, + GasPrice = UInt256.Zero, + }; + transaction.Hash = transaction.CalculateHash(); + + transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); + var result = tracer.ReturnValue; + if (result == null || result.Length == 0) + yield break; + + int sizeOfClass = 20 + 48 + 8; + int count = result.Length / sizeOfClass; + for (int i = 0; i < count; ++i) + { + WithdrawalRequest request = new(); + Span span = new Span(result, i * sizeOfClass, sizeOfClass); + request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); + request.ValidatorPubkey = span.Slice(20, 48).ToArray(); + request.Amount = BinaryPrimitives.ReadUInt64BigEndian(span.Slice(68, 8)); + + yield return request; + } + } +} diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 04e0ca08f68..9652e89cb54 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -2,6 +2,9 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; using System.Text; using Nethermind.Blockchain; using Nethermind.Consensus.Messages; @@ -12,32 +15,25 @@ using Nethermind.Evm; using Nethermind.Int256; using Nethermind.Logging; +using Nethermind.Serialization.Rlp; using Nethermind.State.Proofs; using Nethermind.TxPool; namespace Nethermind.Consensus.Validators; -public class BlockValidator : IBlockValidator +public class BlockValidator( + ITxValidator? txValidator, + IHeaderValidator? headerValidator, + IUnclesValidator? unclesValidator, + ISpecProvider? specProvider, + ILogManager? logManager) + : IBlockValidator { - private readonly IHeaderValidator _headerValidator; - private readonly ITxValidator _txValidator; - private readonly IUnclesValidator _unclesValidator; - private readonly ISpecProvider _specProvider; - private readonly ILogger _logger; - - public BlockValidator( - ITxValidator? txValidator, - IHeaderValidator? headerValidator, - IUnclesValidator? unclesValidator, - ISpecProvider? specProvider, - ILogManager? logManager) - { - _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - _txValidator = txValidator ?? throw new ArgumentNullException(nameof(txValidator)); - _unclesValidator = unclesValidator ?? throw new ArgumentNullException(nameof(unclesValidator)); - _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); - _headerValidator = headerValidator ?? throw new ArgumentNullException(nameof(headerValidator)); - } + private readonly IHeaderValidator _headerValidator = headerValidator ?? throw new ArgumentNullException(nameof(headerValidator)); + private readonly ITxValidator _txValidator = txValidator ?? throw new ArgumentNullException(nameof(txValidator)); + private readonly IUnclesValidator _unclesValidator = unclesValidator ?? throw new ArgumentNullException(nameof(unclesValidator)); + private readonly ISpecProvider _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); + private readonly ILogger _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle) { @@ -149,6 +145,9 @@ public bool ValidateSuggestedBlock(Block block, out string? errorMessage, bool v { return false; } + + if (!ValidateRequests(block, spec, out errorMessage)) + return false; } return true; @@ -178,56 +177,61 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B /// true if the is valid; otherwise, false. public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, out string? error) { - bool isValid = processedBlock.Header.Hash == suggestedBlock.Header.Hash; - - if (isValid) + if (processedBlock.Header.Hash == suggestedBlock.Header.Hash) { error = null; return true; } + if (_logger.IsWarn) _logger.Warn($"Processed block {processedBlock.ToString(Block.Format.Short)} is invalid:"); if (_logger.IsWarn) _logger.Warn($"- hash: expected {suggestedBlock.Hash}, got {processedBlock.Hash}"); error = null; if (processedBlock.Header.GasUsed != suggestedBlock.Header.GasUsed) { if (_logger.IsWarn) _logger.Warn($"- gas used: expected {suggestedBlock.Header.GasUsed}, got {processedBlock.Header.GasUsed} (diff: {processedBlock.Header.GasUsed - suggestedBlock.Header.GasUsed})"); - error = error ?? BlockErrorMessages.HeaderGasUsedMismatch; + error ??= BlockErrorMessages.HeaderGasUsedMismatch; } if (processedBlock.Header.Bloom != suggestedBlock.Header.Bloom) { if (_logger.IsWarn) _logger.Warn($"- bloom: expected {suggestedBlock.Header.Bloom}, got {processedBlock.Header.Bloom}"); - error = error ?? BlockErrorMessages.InvalidLogsBloom; + error ??= BlockErrorMessages.InvalidLogsBloom; } if (processedBlock.Header.ReceiptsRoot != suggestedBlock.Header.ReceiptsRoot) { if (_logger.IsWarn) _logger.Warn($"- receipts root: expected {suggestedBlock.Header.ReceiptsRoot}, got {processedBlock.Header.ReceiptsRoot}"); - error = error ?? BlockErrorMessages.InvalidReceiptsRoot; + error ??= BlockErrorMessages.InvalidReceiptsRoot; } if (processedBlock.Header.StateRoot != suggestedBlock.Header.StateRoot) { if (_logger.IsWarn) _logger.Warn($"- state root: expected {suggestedBlock.Header.StateRoot}, got {processedBlock.Header.StateRoot}"); - error = error ?? BlockErrorMessages.InvalidStateRoot; + error ??= BlockErrorMessages.InvalidStateRoot; } if (processedBlock.Header.BlobGasUsed != suggestedBlock.Header.BlobGasUsed) { if (_logger.IsWarn) _logger.Warn($"- blob gas used: expected {suggestedBlock.Header.BlobGasUsed}, got {processedBlock.Header.BlobGasUsed}"); - error = error ?? BlockErrorMessages.HeaderBlobGasMismatch; + error ??= BlockErrorMessages.HeaderBlobGasMismatch; } if (processedBlock.Header.ExcessBlobGas != suggestedBlock.Header.ExcessBlobGas) { if (_logger.IsWarn) _logger.Warn($"- excess blob gas: expected {suggestedBlock.Header.ExcessBlobGas}, got {processedBlock.Header.ExcessBlobGas}"); - error = error ?? BlockErrorMessages.IncorrectExcessBlobGas; + error ??= BlockErrorMessages.IncorrectExcessBlobGas; } if (processedBlock.Header.ParentBeaconBlockRoot != suggestedBlock.Header.ParentBeaconBlockRoot) { if (_logger.IsWarn) _logger.Warn($"- parent beacon block root : expected {suggestedBlock.Header.ParentBeaconBlockRoot}, got {processedBlock.Header.ParentBeaconBlockRoot}"); - error = error ?? BlockErrorMessages.InvalidParentBeaconBlockRoot; + error ??= BlockErrorMessages.InvalidParentBeaconBlockRoot; + } + + if (processedBlock.Header.RequestsRoot != suggestedBlock.Header.RequestsRoot) + { + if (_logger.IsWarn) _logger.Warn($"- requests root : expected {suggestedBlock.Header.RequestsRoot}, got {processedBlock.Header.RequestsRoot}"); + error ??= BlockErrorMessages.InvalidRequestsRoot(suggestedBlock.Header.RequestsRoot, processedBlock.Header.RequestsRoot); } for (int i = 0; i < processedBlock.Transactions.Length; i++) @@ -235,14 +239,16 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B if (receipts[i].Error is not null && receipts[i].GasUsed == 0 && receipts[i].Error == "invalid") { if (_logger.IsWarn) _logger.Warn($"- invalid transaction {i}"); - error = error ?? BlockErrorMessages.InvalidTxInBlock(i); + error ??= BlockErrorMessages.InvalidTxInBlock(i); } } + if (suggestedBlock.ExtraData is not null) { if (_logger.IsWarn) _logger.Warn($"- block extra data : {suggestedBlock.ExtraData.ToHexString()}, UTF8: {Encoding.UTF8.GetString(suggestedBlock.ExtraData)}"); } - return isValid; + + return false; } public bool ValidateWithdrawals(Block block, out string? error) => @@ -284,6 +290,65 @@ private bool ValidateWithdrawals(Block block, IReleaseSpec spec, out string? err return true; } + public bool ValidateRequests(Block block, out string? error) => + ValidateRequests(block, _specProvider.GetSpec(block.Header), out error); + + public bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) + { + if (spec.RequestsEnabled && block.Requests is null) + { + error = BlockErrorMessages.MissingRequests; + + if (_logger.IsWarn) _logger.Warn(error); + + return false; + } + + if (!spec.RequestsEnabled && block.Requests is not null) + { + error = BlockErrorMessages.RequestsNotEnabled; + + if (_logger.IsWarn) _logger.Warn(error); + + return false; + } + + if (!ValidateRequestsHashMatches(block, out Hash256 requestsRoot)) + { + error = BlockErrorMessages.InvalidRequestsRoot(block.Header.RequestsRoot, requestsRoot); + if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.RequestsRoot}, got {requestsRoot}"); + + return false; + } + + // validate that the requests types are in ascending order + if (!ValidateRequestsOrder(block, out error)) + { + if (_logger.IsWarn) _logger.Warn(error); + return false; + } + + error = null; + return true; + } + + public static bool ValidateRequestsOrder(Block block, out string? error) + { + if (block.Requests is not null) + { + for (int i = 1; i < block.Requests.Length; i++) + { + if (block.Requests[i].Type < block.Requests[i - 1].Type) + { + error = BlockErrorMessages.InvalidRequestsOrder; + return false; + } + } + } + error = null; + return true; + } + private bool ValidateTransactions(Block block, IReleaseSpec spec, out string? errorMessage) { Transaction[] transactions = block.Transactions; @@ -364,46 +429,49 @@ private bool ValidateEip4844Fields(Block block, IReleaseSpec spec, out string? e } public static bool ValidateBodyAgainstHeader(BlockHeader header, BlockBody toBeValidated) => - ValidateTxRootMatchesTxs(header, toBeValidated, out _) && - ValidateUnclesHashMatches(header, toBeValidated, out _) && - ValidateWithdrawalsHashMatches(header, toBeValidated, out _); + ValidateTxRootMatchesTxs(header, toBeValidated, out _) + && ValidateUnclesHashMatches(header, toBeValidated, out _) + && ValidateWithdrawalsHashMatches(header, toBeValidated, out _) + && ValidateRequestsHashMatches(header, toBeValidated, out _); - public static bool ValidateTxRootMatchesTxs(Block block, out Hash256 txRoot) - { - return ValidateTxRootMatchesTxs(block.Header, block.Body, out txRoot); - } - public static bool ValidateTxRootMatchesTxs(BlockHeader header, BlockBody body, out Hash256 txRoot) - { - txRoot = TxTrie.CalculateRoot(body.Transactions); - return txRoot == header.TxRoot; - } + public static bool ValidateTxRootMatchesTxs(Block block, out Hash256 txRoot) => + ValidateTxRootMatchesTxs(block.Header, block.Body, out txRoot); - public static bool ValidateUnclesHashMatches(Block block, out Hash256 unclesHash) - { - return ValidateUnclesHashMatches(block.Header, block.Body, out unclesHash); - } + public static bool ValidateTxRootMatchesTxs(BlockHeader header, BlockBody body, out Hash256 txRoot) => + (txRoot = TxTrie.CalculateRoot(body.Transactions)) == header.TxRoot; - public static bool ValidateUnclesHashMatches(BlockHeader header, BlockBody body, out Hash256 unclesHash) - { - unclesHash = UnclesHash.Calculate(body.Uncles); + public static bool ValidateUnclesHashMatches(Block block, out Hash256 unclesHash) => + ValidateUnclesHashMatches(block.Header, block.Body, out unclesHash); - return header.UnclesHash == unclesHash; - } + public static bool ValidateUnclesHashMatches(BlockHeader header, BlockBody body, out Hash256 unclesHash) => + (unclesHash = UnclesHash.Calculate(body.Uncles)) == header.UnclesHash; - public static bool ValidateWithdrawalsHashMatches(Block block, out Hash256? withdrawalsRoot) - { - return ValidateWithdrawalsHashMatches(block.Header, block.Body, out withdrawalsRoot); - } + public static bool ValidateWithdrawalsHashMatches(Block block, out Hash256? withdrawalsRoot) => + ValidateWithdrawalsHashMatches(block.Header, block.Body, out withdrawalsRoot); public static bool ValidateWithdrawalsHashMatches(BlockHeader header, BlockBody body, out Hash256? withdrawalsRoot) { - withdrawalsRoot = null; if (body.Withdrawals is null) + { + withdrawalsRoot = null; return header.WithdrawalsRoot is null; + } + + return (withdrawalsRoot = new WithdrawalTrie(body.Withdrawals).RootHash) == header.WithdrawalsRoot; + } - withdrawalsRoot = new WithdrawalTrie(body.Withdrawals).RootHash; + public static bool ValidateRequestsHashMatches(Block block, out Hash256? requestsRoot) => + ValidateRequestsHashMatches(block.Header, block.Body, out requestsRoot); + + public static bool ValidateRequestsHashMatches(BlockHeader header, BlockBody body, out Hash256? requestsRoot) + { + if (body.Requests == null) + { + requestsRoot = null; + return header.RequestsRoot is null; + } - return header.WithdrawalsRoot == withdrawalsRoot; + return (requestsRoot = new RequestsTrie(body.Requests).RootHash) == header.RequestsRoot; } private static string Invalid(Block block) => diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 3e8b5f68aaa..b3fdbcdc5c9 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Nethermind.Blockchain; using Nethermind.Blockchain.Blocks; +using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Blockchain.Find; using Nethermind.Blockchain.FullPruning; using Nethermind.Blockchain.Headers; @@ -14,10 +15,10 @@ using Nethermind.Blockchain.Synchronization; using Nethermind.Config; using Nethermind.Consensus; -using Nethermind.Consensus.BeaconBlockRoot; using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; @@ -37,6 +38,7 @@ using Nethermind.Specs.Test; using Nethermind.State; using Nethermind.State.Repositories; +using Nethermind.Synchronization; using Nethermind.Trie; using Nethermind.Trie.Pruning; using Nethermind.TxPool; @@ -55,7 +57,6 @@ public class TestBlockchain : IDisposable public IDb CodeDb => DbProvider.CodeDb; public IWorldStateManager WorldStateManager { get; set; } = null!; public IBlockProcessor BlockProcessor { get; set; } = null!; - public IBeaconBlockRootHandler BeaconBlockRootHandler { get; set; } = null!; public IBlockchainProcessor BlockchainProcessor { get; set; } = null!; public IBlockPreprocessorStep BlockPreprocessorStep { get; set; } = null!; @@ -109,6 +110,8 @@ protected TestBlockchain() private ReceiptCanonicalityMonitor? _canonicalityMonitor; public IBlockValidator BlockValidator { get; set; } = null!; + + public IBeaconBlockRootHandler BeaconBlockRootHandler { get; set; } = null!; public BuildBlocksWhenRequested BlockProductionTrigger { get; } = new(); public IReadOnlyTrieStore ReadOnlyTrieStore { get; private set; } = null!; @@ -117,6 +120,7 @@ protected TestBlockchain() public ProducedBlockSuggester Suggester { get; protected set; } = null!; + public IConsensusRequestsProcessor? ConsensusRequestsProcessor { get; protected set; } = null!; public ChainLevelInfoRepository ChainLevelInfoRepository { get; protected set; } = null!; public static TransactionBuilder BuildSimpleTransaction => Builders.Build.A.Transaction.SignedAndResolved(TestItem.PrivateKeyA).To(AccountB); @@ -134,7 +138,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = // Eip4788 precompile state account if (specProvider?.GenesisSpec?.IsBeaconBlockRootAvailable ?? false) { - State.CreateAccount(SpecProvider.GenesisSpec.Eip4788ContractAddress, 1); + State.CreateAccount(SpecProvider.GenesisSpec.Eip4788ContractAddress!, 1); } // Eip2935 @@ -193,6 +197,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = HeaderValidator = new HeaderValidator(BlockTree, Always.Valid, SpecProvider, LogManager); _canonicalityMonitor ??= new ReceiptCanonicalityMonitor(ReceiptStorage, LogManager); + BeaconBlockRootHandler = new BeaconBlockRootHandler(TxProcessor, LogManager); BlockValidator = new BlockValidator( new TxValidator(SpecProvider.ChainId), @@ -208,7 +213,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = BloomStorage bloomStorage = new(new BloomConfig(), new MemDb(), new InMemoryDictionaryFileStoreFactory()); ReceiptsRecovery receiptsRecovery = new(new EthereumEcdsa(SpecProvider.ChainId), SpecProvider); LogFinder = new LogFinder(BlockTree, ReceiptStorage, ReceiptStorage, bloomStorage, LimboLogs.Instance, receiptsRecovery); - BeaconBlockRootHandler = new BeaconBlockRootHandler(); + BeaconBlockRootHandler = new BeaconBlockRootHandler(TxProcessor, LogManager); BlockProcessor = CreateBlockProcessor(); BlockchainProcessor chainProcessor = new(BlockTree, BlockProcessor, BlockPreprocessorStep, StateReader, LogManager, Consensus.Processing.BlockchainProcessor.Options.Default); @@ -357,6 +362,12 @@ protected virtual Block GetGenesisBlock() genesisBlockBuilder.WithParentBeaconBlockRoot(Keccak.Zero); } + if (SpecProvider.GenesisSpec.RequestsEnabled) + { + genesisBlockBuilder.WithConsensusRequests(0); + } + + genesisBlockBuilder.WithStateRoot(State.StateRoot); return genesisBlockBuilder.TestObject; } @@ -377,7 +388,9 @@ protected virtual IBlockProcessor CreateBlockProcessor() => State, ReceiptStorage, new BlockhashStore(SpecProvider, State), - LogManager); + TxProcessor, + LogManager, + consensusRequestsProcessor: ConsensusRequestsProcessor); public async Task WaitForNewHead() { diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index bcd67e3caa4..a43039ef8af 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Crypto; @@ -275,6 +276,28 @@ public BlockBuilder WithWithdrawals(params Withdrawal[]? withdrawals) return this; } + public BlockBuilder WithConsensusRequests(int count) + { + var consensusRequests = new ConsensusRequest[count]; + + for (var i = 0; i < count; i++) + consensusRequests[i] = new(); + + return WithConsensusRequests(consensusRequests); + } + + public BlockBuilder WithConsensusRequests(params ConsensusRequest[]? requests) + { + TestObjectInternal = TestObjectInternal + .WithReplacedBody(TestObjectInternal.Body.WithChangedConsensusRequests(requests)); + + TestObjectInternal.Header.RequestsRoot = requests is null + ? null + : new RequestsTrie(requests).RootHash; + + return this; + } + public BlockBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRoot) { TestObjectInternal.Header.ParentBeaconBlockRoot = parentBeaconBlockRoot; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs index 6ce7af4acd1..81d12c7a463 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs @@ -195,4 +195,10 @@ public BlockHeaderBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRo TestObjectInternal.ParentBeaconBlockRoot = parentBeaconBlockRoot; return this; } + + public BlockHeaderBuilder WithRequestsRoot(Hash256? requestsRoot) + { + TestObjectInternal.RequestsRoot = requestsRoot; + return this; + } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs new file mode 100644 index 00000000000..a665ac91bba --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core.Test.Builders; + +public partial class Build +{ + public static DepositBuilder Deposit => new(); +} diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs new file mode 100644 index 00000000000..29332f47d5c --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core.Test.Builders; + +public partial class Build +{ + public static WithdrawalRequestBuilder WithdrawalRequest => new(); +} diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/ConsolidationRequestBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/ConsolidationRequestBuilder.cs new file mode 100644 index 00000000000..63628ef305b --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Builders/ConsolidationRequestBuilder.cs @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core.Test.Builders; +using Nethermind.Core.ConsensusRequests; + +public class ConsolidationRequestBuilder : BuilderBase +{ + public ConsolidationRequestBuilder() => TestObject = new(); + + public ConsolidationRequestBuilder WithSourceAddress(Address sourceAddress) + { + TestObject.SourceAddress = sourceAddress; + + return this; + } + + public ConsolidationRequestBuilder WithSourcePubkey(byte[] SourcePubkey) + { + TestObject.SourcePubkey = SourcePubkey; + + return this; + } + + public ConsolidationRequestBuilder WithTargetPubkey(byte[] TargetPubkey) + { + TestObject.TargetPubkey = TargetPubkey; + + return this; + } + +} diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs new file mode 100644 index 00000000000..48a06b77f8e --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs @@ -0,0 +1,45 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.ConsensusRequests; + +namespace Nethermind.Core.Test.Builders; + +public class DepositBuilder : BuilderBase +{ + public DepositBuilder() => TestObject = new(); + + public DepositBuilder WithAmount(ulong amount) + { + TestObject.Amount = amount; + + return this; + } + + public DepositBuilder WithIndex(ulong index) + { + TestObject.Index = index; + + return this; + } + + public DepositBuilder WithWithdrawalCredentials(byte[] withdrawalCredentials) + { + TestObject.WithdrawalCredentials = withdrawalCredentials; + + return this; + } + + public DepositBuilder WithSignature(byte[] signature) + { + TestObject.Signature = signature; + + return this; + } + public DepositBuilder WithPublicKey(byte[] pubKey) + { + TestObject.Pubkey = pubKey; + + return this; + } +} diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index a653619f397..ac8cf8e0313 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -5,6 +5,7 @@ using System.IO; using System.Net; using System.Text.Json; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Crypto; using Nethermind.Int256; @@ -99,6 +100,28 @@ public static Hash256 KeccakFromNumber(int i) public static Withdrawal WithdrawalE_5Eth = new() { Address = AddressE, Index = 5, ValidatorIndex = 2005, AmountInGwei = 5_000_000_000 }; public static Withdrawal WithdrawalF_6Eth = new() { Address = AddressF, Index = 6, ValidatorIndex = 2006, AmountInGwei = 6_000_000_000 }; + public static Deposit DepositA_1Eth = new() { Index = 1, Pubkey = PublicKeyA.Bytes, Amount = 1_000_000_000, WithdrawalCredentials = AddressA.Bytes, Signature = KeccakA.Bytes.ToArray() }; + public static Deposit DepositB_2Eth = new() { Index = 2, Pubkey = PublicKeyB.Bytes, Amount = 2_000_000_000, WithdrawalCredentials = AddressB.Bytes, Signature = KeccakB.Bytes.ToArray() }; + public static Deposit DepositC_3Eth = new() { Index = 3, Pubkey = PublicKeyC.Bytes, Amount = 3_000_000_000, WithdrawalCredentials = AddressC.Bytes, Signature = KeccakC.Bytes.ToArray() }; + public static Deposit DepositD_4Eth = new() { Index = 4, Pubkey = PublicKeyD.Bytes, Amount = 4_000_000_000, WithdrawalCredentials = AddressD.Bytes, Signature = KeccakD.Bytes.ToArray() }; + public static Deposit DepositE_5Eth = new() { Index = 5, Pubkey = PublicKeyE.Bytes, Amount = 5_000_000_000, WithdrawalCredentials = AddressE.Bytes, Signature = KeccakE.Bytes.ToArray() }; + public static Deposit DepositF_6Eth = new() { Index = 6, Pubkey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray() }; + + + public static WithdrawalRequest WithdrawalRequestA = new() { SourceAddress = AddressA, ValidatorPubkey = PublicKeyA.Bytes }; + public static WithdrawalRequest WithdrawalRequestB = new() { SourceAddress = AddressB, ValidatorPubkey = PublicKeyB.Bytes }; + public static WithdrawalRequest WithdrawalRequestC = new() { SourceAddress = AddressC, ValidatorPubkey = PublicKeyC.Bytes }; + public static WithdrawalRequest WithdrawalRequestD = new() { SourceAddress = AddressD, ValidatorPubkey = PublicKeyD.Bytes }; + public static WithdrawalRequest WithdrawalRequestE = new() { SourceAddress = AddressE, ValidatorPubkey = PublicKeyE.Bytes }; + public static WithdrawalRequest WithdrawalRequestF = new() { SourceAddress = AddressF, ValidatorPubkey = PublicKeyF.Bytes }; + + public static ConsolidationRequest ConsolidationRequestA = new() { SourceAddress = AddressA, SourcePubkey = PublicKeyA.Bytes, TargetPubkey = PublicKeyB.Bytes }; + public static ConsolidationRequest ConsolidationRequestB = new() { SourceAddress = AddressB, SourcePubkey = PublicKeyB.Bytes, TargetPubkey = PublicKeyC.Bytes }; + public static ConsolidationRequest ConsolidationRequestC = new() { SourceAddress = AddressC, SourcePubkey = PublicKeyC.Bytes, TargetPubkey = PublicKeyD.Bytes }; + public static ConsolidationRequest ConsolidationRequestD = new() { SourceAddress = AddressD, SourcePubkey = PublicKeyD.Bytes, TargetPubkey = PublicKeyE.Bytes }; + public static ConsolidationRequest ConsolidationRequestE = new() { SourceAddress = AddressE, SourcePubkey = PublicKeyE.Bytes, TargetPubkey = PublicKeyF.Bytes }; + public static ConsolidationRequest ConsolidationRequestF = new() { SourceAddress = AddressF, SourcePubkey = PublicKeyF.Bytes, TargetPubkey = PublicKeyA.Bytes }; + public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); public static IPEndPoint IPEndPointC = IPEndPoint.Parse("10.0.0.3"); diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs new file mode 100644 index 00000000000..4a80e64beca --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core.Test.Builders; +using Nethermind.Core.ConsensusRequests; + +public class WithdrawalRequestBuilder : BuilderBase +{ + public WithdrawalRequestBuilder() => TestObject = new(); + + + public WithdrawalRequestBuilder WithAmount(ulong amount) + { + TestObject.Amount = amount; + + return this; + } + + public WithdrawalRequestBuilder WithSourceAddress(Address sourceAddress) + { + TestObject.SourceAddress = sourceAddress; + + return this; + } + + public WithdrawalRequestBuilder WithValidatorPubkey(byte[] ValidatorPubkey) + { + TestObject.ValidatorPubkey = ValidatorPubkey; + + return this; + } + +} diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 2b9b49dda37..8350699b8fa 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -3,10 +3,12 @@ using System; using System.IO; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; using Nethermind.Crypto; +using Nethermind.Evm.Tracing.GethStyle.Custom.JavaScript; using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Serialization.Rlp; @@ -41,6 +43,32 @@ public BlockDecoderTests() .TestObject; } + var requests = new ConsensusRequest[8]; + + for (var i = 0; i < requests.Length; i++) + { + if (i % 2 == 0) + { + requests[i] = Build.Deposit + .WithIndex(long.MaxValue) + .WithPublicKey(new byte[] { (byte)i }) + .WithSignature(new byte[] { (byte)i }) + .WithWithdrawalCredentials(new byte[] { (byte)i }) + .WithAmount(int.MaxValue) + .TestObject; + } + else + { + byte[] ValidatorPubkey = new byte[48]; + ValidatorPubkey[11] = 11; + requests[i] = Build.WithdrawalRequest + .WithSourceAddress(TestItem.AddressA) + .WithValidatorPubkey(ValidatorPubkey) + .WithAmount(int.MaxValue) + .TestObject; + } + } + _scenarios = new[] { Build.A.Block.WithNumber(1).TestObject, @@ -86,6 +114,16 @@ public BlockDecoderTests() .WithBlobGasUsed(ulong.MaxValue) .WithExcessBlobGas(ulong.MaxValue) .WithMixHash(Keccak.EmptyTreeHash) + .TestObject, + Build.A.Block.WithNumber(1) + .WithBaseFeePerGas(1) + .WithTransactions(transactions) + .WithUncles(uncles) + .WithWithdrawals(8) + .WithBlobGasUsed(ulong.MaxValue) + .WithExcessBlobGas(ulong.MaxValue) + .WithMixHash(Keccak.EmptyTreeHash) + .WithConsensusRequests(requests) .TestObject }; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs new file mode 100644 index 00000000000..7d9b039283e --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs @@ -0,0 +1,214 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using FluentAssertions; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Extensions; +using Nethermind.Evm.Tracing.GethStyle.Custom.JavaScript; +using Nethermind.Serialization.Rlp; +using NUnit.Framework; +using Nethermind.Core.Test.Builders; + +namespace Nethermind.Core.Test.Encoding; + +public class ConsensusRequestDecoderTests +{ + [Test] + public void Roundtrip_deposit() + { + ConsensusRequest deposit = new Deposit() + { + Index = long.MaxValue, + Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + + byte[] rlp = Rlp.Encode(deposit).Bytes; + ConsensusRequest decoded = Rlp.Decode(rlp); + + decoded.Should().BeEquivalentTo(deposit); + } + + [Test] + public void Roundtrip_withdrawalRequest() + { + byte[] ValidatorPubkey = new byte[48]; + ValidatorPubkey[11] = 11; + ConsensusRequest withdrawalRequest = new WithdrawalRequest() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = ValidatorPubkey, + Amount = int.MaxValue + }; + + byte[] rlp = Rlp.Encode(withdrawalRequest).Bytes; + ConsensusRequest decoded = Rlp.Decode(rlp); + + decoded.Should().BeEquivalentTo(withdrawalRequest); + } + + [Test] + public void Roundtrip_consolidationRequest() + { + byte[] SourcePubkey = new byte[48]; + SourcePubkey[11] = 11; + byte[] TargetPubkey = new byte[48]; + TargetPubkey[22] = 22; + ConsensusRequest consolidationRequest = new ConsolidationRequest() + { + SourceAddress = TestItem.AddressA, + SourcePubkey = SourcePubkey, + TargetPubkey = TargetPubkey + }; + + byte[] rlp = Rlp.Encode(consolidationRequest).Bytes; + ConsensusRequest decoded = Rlp.Decode(rlp); + + decoded.Should().BeEquivalentTo(consolidationRequest); + } + + [Test] + public void Should_decode_deposit_with_ValueDecoderContext() + { + ConsensusRequest deposit = new Deposit() + { + Index = long.MaxValue, + Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + RlpStream stream = new(1024); + ConsensusRequestDecoder codec = new(); + + codec.Encode(stream, deposit); + + Rlp.ValueDecoderContext decoderContext = new(stream.Data.AsSpan()); + Deposit? decoded = (Deposit?)codec.Decode(ref decoderContext); + + decoded.Should().BeEquivalentTo(deposit); + } + + [Test] + public void Should_decode_withdrawalRequest_with_ValueDecoderContext() + { + ConsensusRequest withdrawalRequest = new WithdrawalRequest() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + RlpStream stream = new(1024); + ConsensusRequestDecoder codec = new(); + + codec.Encode(stream, withdrawalRequest); + + Rlp.ValueDecoderContext decoderContext = new(stream.Data.AsSpan()); + WithdrawalRequest? decoded = (WithdrawalRequest?)codec.Decode(ref decoderContext); + + decoded.Should().BeEquivalentTo(withdrawalRequest); + } + + [Test] + public void Should_decode_consolidationRequest_with_ValueDecoderContext() + { + ConsensusRequest consolidationRequest = new ConsolidationRequest() + { + SourceAddress = TestItem.AddressA, + SourcePubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + TargetPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes() + }; + RlpStream stream = new(1024); + ConsensusRequestDecoder codec = new(); + + codec.Encode(stream, consolidationRequest); + + Rlp.ValueDecoderContext decoderContext = new(stream.Data.AsSpan()); + ConsolidationRequest? decoded = (ConsolidationRequest?)codec.Decode(ref decoderContext); + + decoded.Should().BeEquivalentTo(consolidationRequest); + } + + [Test] + public void Should_encode_deposit_same_for_Rlp_Encode_and_ConsensusRequestDecoder_Encode() + { + ConsensusRequest deposit = new Deposit() + { + Index = long.MaxValue, + Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + byte[] rlp1 = new ConsensusRequestDecoder().Encode(deposit).Bytes; + byte[] rlp2 = Rlp.Encode(deposit).Bytes; + + rlp1.Should().BeEquivalentTo(rlp2); + } + + [Test] + public void Should_encode_withdrawalRequest_same_for_Rlp_Encode_and_ConsensusRequestDecoder_Encode() + { + ConsensusRequest withdrawalRequest = new WithdrawalRequest() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }; + byte[] rlp1 = new ConsensusRequestDecoder().Encode(withdrawalRequest).Bytes; + byte[] rlp2 = Rlp.Encode(withdrawalRequest).Bytes; + + rlp1.Should().BeEquivalentTo(rlp2); + } + + [Test] + public void Should_encode_consolidationRequest_same_for_Rlp_Encode_and_ConsensusRequestDecoder_Encode() + { + ConsensusRequest consolidationRequest = new ConsolidationRequest() + { + SourceAddress = TestItem.AddressA, + SourcePubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + TargetPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes() + }; + byte[] rlp1 = new ConsensusRequestDecoder().Encode(consolidationRequest).Bytes; + byte[] rlp2 = Rlp.Encode(consolidationRequest).Bytes; + + rlp1.Should().BeEquivalentTo(rlp2); + } + + [Test] + public void Should_encode_ConsensusRequests_Array() + { + ConsensusRequest[] requests = new ConsensusRequest[] + { + new Deposit() + { + Index = long.MaxValue, + Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }, + new WithdrawalRequest() + { + SourceAddress = TestItem.AddressA, + ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + Amount = int.MaxValue + }, + new ConsolidationRequest() + { + SourceAddress = TestItem.AddressA, + SourcePubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), + TargetPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes() + } + }; + + byte[] rlp = Rlp.Encode(requests).Bytes; + RlpStream rlpStream = new(rlp); + ConsensusRequest[] decoded = Rlp.DecodeArray(rlpStream, new ConsensusRequestDecoder()); + decoded.Should().BeEquivalentTo(requests); + } +} diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs index 380e9a66f9a..587f3476ccb 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs @@ -156,6 +156,42 @@ public void Can_encode_decode_with_cancun_fields(ulong? blobGasUsed, ulong? exce blockHeader.ExcessBlobGas.Should().Be(excessBlobGas); } + [Test] + public void Can_encode_decode_with_WithdrawalRequestRoot() + { + BlockHeader header = Build.A.BlockHeader + .WithTimestamp(ulong.MaxValue) + .WithBaseFee(1) + .WithWithdrawalsRoot(Keccak.Zero) + .WithBlobGasUsed(0) + .WithExcessBlobGas(0) + .WithParentBeaconBlockRoot(TestItem.KeccakB) + .WithRequestsRoot(Keccak.Zero).TestObject; + + Rlp rlp = Rlp.Encode(header); + BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); + + blockHeader.ParentBeaconBlockRoot.Should().Be(TestItem.KeccakB); + } + + [Test] + public void Can_encode_decode_with_ValidatorExitRoot_equals_to_null() + { + BlockHeader header = Build.A.BlockHeader + .WithTimestamp(ulong.MaxValue) + .WithBaseFee(1) + .WithWithdrawalsRoot(Keccak.Zero) + .WithBlobGasUsed(0) + .WithExcessBlobGas(0) + .WithParentBeaconBlockRoot(TestItem.KeccakB) + .WithRequestsRoot(Keccak.Zero).TestObject; + + Rlp rlp = Rlp.Encode(header); + BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); + + blockHeader.ParentBeaconBlockRoot.Should().Be(TestItem.KeccakB); + } + public static IEnumerable CancunFieldsSource() { yield return new object?[] { null, null, null }; diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index 2cf65535a9c..609455b96d3 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using System.Linq; using System.Text; +using Nethermind.Core.ConsensusRequests; using System.Text.Json.Serialization; using Nethermind.Core.Collections; using Nethermind.Core.Crypto; @@ -22,19 +23,23 @@ public Block(BlockHeader header, BlockBody body) Body = body ?? throw new ArgumentNullException(nameof(body)); } - public Block( - BlockHeader header, + public Block(BlockHeader header, IEnumerable transactions, IEnumerable uncles, - IEnumerable? withdrawals = null) + IEnumerable? withdrawals = null, + IEnumerable? requests = null) { Header = header ?? throw new ArgumentNullException(nameof(header)); - Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray()); + Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray(), requests?.ToArray()); } public Block(BlockHeader header) : this( header, - new(null, null, header.WithdrawalsRoot is null ? null : Array.Empty()) + new( + null, + null, + header.WithdrawalsRoot is null ? null : Array.Empty(), + header.RequestsRoot is null ? null : Array.Empty()) ) { } @@ -58,7 +63,8 @@ public Transaction[] Transactions public BlockHeader[] Uncles => Body.Uncles; // do not add setter here - public Withdrawal[]? Withdrawals => Body.Withdrawals; + public Withdrawal[]? Withdrawals => Body.Withdrawals; // do not add setter here + public ConsensusRequest[]? Requests => Body.Requests; // do not add setter here public Hash256? Hash => Header.Hash; // do not add setter here @@ -111,6 +117,8 @@ public Transaction[] Transactions public Hash256? WithdrawalsRoot => Header.WithdrawalsRoot; // do not add setter here public Hash256? ParentBeaconBlockRoot => Header.ParentBeaconBlockRoot; // do not add setter here + public Hash256? RequestsRoot => Header.RequestsRoot; // do not add setter here + [JsonIgnore] public ArrayPoolList? AccountChanges { get; set; } [JsonIgnore] diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 76658c6ab8a..26b918ef28f 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -2,25 +2,28 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Core { public class BlockBody { - public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null) + public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null, ConsensusRequest[]? requests = null) { Transactions = transactions ?? Array.Empty(); Uncles = uncles ?? Array.Empty(); Withdrawals = withdrawals; + Requests = requests; } public BlockBody() : this(null, null, null) { } - public BlockBody WithChangedTransactions(Transaction[] transactions) => new(transactions, Uncles, Withdrawals); + public BlockBody WithChangedTransactions(Transaction[] transactions) => new(transactions, Uncles, Withdrawals, Requests); - public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals); + public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals, Requests); - public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals); + public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals, Requests); + public BlockBody WithChangedConsensusRequests(ConsensusRequest[]? consensusRequests) => new(Transactions, Uncles, Withdrawals, consensusRequests); public static BlockBody WithOneTransactionOnly(Transaction tx) => new(new[] { tx }, null, null); @@ -29,7 +32,8 @@ public BlockBody() : this(null, null, null) { } public BlockHeader[] Uncles { get; } public Withdrawal[]? Withdrawals { get; } + public ConsensusRequest[]? Requests { get; set; } - public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0; + public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0 && (Requests?.Length ?? 0) == 0; } } diff --git a/src/Nethermind/Nethermind.Core/BlockHeader.cs b/src/Nethermind/Nethermind.Core/BlockHeader.cs index e337ab3c735..1ddd19503b9 100644 --- a/src/Nethermind/Nethermind.Core/BlockHeader.cs +++ b/src/Nethermind/Nethermind.Core/BlockHeader.cs @@ -27,7 +27,8 @@ public BlockHeader( byte[] extraData, ulong? blobGasUsed = null, ulong? excessBlobGas = null, - Hash256? parentBeaconBlockRoot = null) + Hash256? parentBeaconBlockRoot = null, + Hash256? requestsRoot = null) { ParentHash = parentHash; UnclesHash = unclesHash; @@ -38,6 +39,7 @@ public BlockHeader( Timestamp = timestamp; ExtraData = extraData; ParentBeaconBlockRoot = parentBeaconBlockRoot; + RequestsRoot = requestsRoot; BlobGasUsed = blobGasUsed; ExcessBlobGas = excessBlobGas; } @@ -70,11 +72,13 @@ public BlockHeader( public UInt256 BaseFeePerGas { get; set; } public Hash256? WithdrawalsRoot { get; set; } public Hash256? ParentBeaconBlockRoot { get; set; } + public Hash256? RequestsRoot { get; set; } public ulong? BlobGasUsed { get; set; } public ulong? ExcessBlobGas { get; set; } public bool HasBody => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash) || (UnclesHash is not null && UnclesHash != Keccak.OfAnEmptySequenceRlp) - || (WithdrawalsRoot is not null && WithdrawalsRoot != Keccak.EmptyTreeHash); + || (WithdrawalsRoot is not null && WithdrawalsRoot != Keccak.EmptyTreeHash) + || (RequestsRoot is not null && RequestsRoot != Keccak.EmptyTreeHash); public bool HasTransactions => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash); @@ -115,6 +119,10 @@ public string ToString(string indent) } builder.AppendLine($"{indent}IsPostMerge: {IsPostMerge}"); builder.AppendLine($"{indent}TotalDifficulty: {TotalDifficulty}"); + if (RequestsRoot is not null) + { + builder.AppendLine($"{indent}RequestsRoot: {RequestsRoot}"); + } return builder.ToString(); } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs new file mode 100644 index 00000000000..efd61b189ac --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -0,0 +1,95 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + + +using System.Text.Json.Serialization; + +namespace Nethermind.Core.ConsensusRequests; + +public enum ConsensusRequestsType : byte +{ + Deposit = 0, + WithdrawalRequest = 1, + ConsolidationRequest = 2 +} + +public class ConsensusRequest +{ + [JsonIgnore] + public ConsensusRequestsType Type { get; protected set; } + + [JsonIgnore] + public ulong AmountField { get; protected set; } + + [JsonIgnore] + public Address? SourceAddressField { get; protected set; } + + [JsonIgnore] + public byte[]? PubKeyField { get; set; } + + [JsonIgnore] + public byte[]? WithdrawalCredentialsField { get; protected set; } + + [JsonIgnore] + public byte[]? SignatureField { get; protected set; } + + [JsonIgnore] + public ulong? IndexField { get; protected set; } +} + +public static class ConsensusRequestExtensions +{ + public static (int depositCount, int withdrawalRequestCount, int consolidationRequestCount) GetTypeCounts(this ConsensusRequest[]? requests) + { + int depositCount = 0; + int withdrawalRequestCount = 0; + int consolidationRequestCount = 0; + int length = requests?.Length ?? 0; + for (int i = 0; i < length; i++) + { + if (requests![i].Type == ConsensusRequestsType.Deposit) + { + depositCount++; + } + else if (requests[i].Type == ConsensusRequestsType.WithdrawalRequest) + { + withdrawalRequestCount++; + } + else + { + consolidationRequestCount++; + } + } + + return (depositCount, withdrawalRequestCount, consolidationRequestCount); + } + + public static (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests, ConsolidationRequest[]? consolidationRequests) SplitRequests(this ConsensusRequest[]? requests) + { + if (requests is null) return (null, null, null); + (int depositCount, int withdrawalRequestCount, int consolidationRequestCount) = requests.GetTypeCounts(); + Deposit[]? deposits = new Deposit[depositCount]; + WithdrawalRequest[]? withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; + ConsolidationRequest[]? consolidationRequests = new ConsolidationRequest[consolidationRequestCount]; + int depositIndex = 0; + int withdrawalRequestIndex = 0; + int consolidationRequestIndex = 0; + for (int i = 0; i < requests.Length; i++) + { + if (requests[i].Type == ConsensusRequestsType.Deposit) + { + deposits[depositIndex++] = (Deposit)requests[i]; + } + else if (requests[i].Type == ConsensusRequestsType.WithdrawalRequest) + { + withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)requests[i]; + } + else + { + consolidationRequests[consolidationRequestIndex++] = (ConsolidationRequest)requests[i]; + } + } + + return (deposits, withdrawalRequests, consolidationRequests); + } +} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs new file mode 100644 index 00000000000..57a205cab08 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs @@ -0,0 +1,45 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Extensions; +using System.Text; + +namespace Nethermind.Core.ConsensusRequests; + +/// +/// Represents a Deposit that has been validated at the consensus layer. +/// +public class ConsolidationRequest : ConsensusRequest +{ + public ConsolidationRequest() + { + Type = ConsensusRequestsType.ConsolidationRequest; + } + public Address? SourceAddress + { + get { return SourceAddressField; } + set { SourceAddressField = value; } + } + + public byte[]? SourcePubkey + { + get { return PubKeyField; } + set { PubKeyField = value; } + } + + public byte[]? TargetPubkey + { + get { return WithdrawalCredentialsField; } + set { WithdrawalCredentialsField = value; } + } + + public override string ToString() => ToString(string.Empty); + + public string ToString(string indentation) => @$"{indentation}{nameof(ConsolidationRequest)} + {{ {nameof(SourceAddress)}: {SourceAddress}, + {nameof(SourcePubkey)}: {SourcePubkey?.ToHexString()}, + {nameof(TargetPubkey)}: {TargetPubkey?.ToHexString()}, + }}"; + + +} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs new file mode 100644 index 00000000000..73e3b7d7aec --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -0,0 +1,57 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Extensions; +using System.Text; + +namespace Nethermind.Core.ConsensusRequests; + +/// +/// Represents a Deposit that has been validated at the consensus layer. +/// +public class Deposit : ConsensusRequest +{ + public Deposit() + { + Type = ConsensusRequestsType.Deposit; + Amount = 0; + } + public byte[]? Pubkey + { + get { return PubKeyField; } + set { PubKeyField = value; } + } + + public byte[]? WithdrawalCredentials + { + get { return WithdrawalCredentialsField; } + set { WithdrawalCredentialsField = value; } + } + + public ulong Amount + { + get { return AmountField; } + set { AmountField = value; } + } + + public byte[]? Signature + { + get { return SignatureField; } + set { SignatureField = value; } + } + public ulong? Index + { + get { return IndexField; } + set { IndexField = value; } + } + public override string ToString() => ToString(string.Empty); + + public string ToString(string indentation) => @$"{indentation}{nameof(Deposit)} + {{{nameof(Index)}: {Index}, + {nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, + {nameof(Amount)}: {Amount}, + {nameof(Signature)}: {Signature?.ToHexString()}, + {nameof(Pubkey)}: {Pubkey?.ToHexString()}}}"; + + +} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs new file mode 100644 index 00000000000..e916dad0590 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Extensions; +using System.Text; + +namespace Nethermind.Core.ConsensusRequests; + +/// +/// Represents a Deposit that has been validated at the consensus layer. +/// +public class WithdrawalRequest : ConsensusRequest +{ + public WithdrawalRequest() + { + Type = ConsensusRequestsType.WithdrawalRequest; + Amount = 0; + } + public Address? SourceAddress + { + get { return SourceAddressField; } + set { SourceAddressField = value; } + } + + public byte[]? ValidatorPubkey + { + get { return PubKeyField; } + set { PubKeyField = value; } + } + + public ulong Amount + { + get { return AmountField; } + set { AmountField = value; } + } + public override string ToString() => ToString(string.Empty); + + public string ToString(string indentation) => @$"{indentation}{nameof(WithdrawalRequest)} + {{{nameof(SourceAddress)}: {SourceAddress}, + {nameof(ValidatorPubkey)}: {ValidatorPubkey?.ToHexString()}, + {nameof(Amount)}: {Amount}}}"; + + +} diff --git a/src/Nethermind/Nethermind.Core/Eip6110Constants.cs b/src/Nethermind/Nethermind.Core/Eip6110Constants.cs new file mode 100644 index 00000000000..6fd77bc88b0 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Eip6110Constants.cs @@ -0,0 +1,10 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core; + +public static class Eip6110Constants +{ + public static readonly Address MainnetDepositContractAddress = new("0x00000000219ab540356cbb839cbe05303d7705fa"); + +} diff --git a/src/Nethermind/Nethermind.Core/Eip7002Constants.cs b/src/Nethermind/Nethermind.Core/Eip7002Constants.cs new file mode 100644 index 00000000000..b7f1ec1e36f --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Eip7002Constants.cs @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core; + +public static class Eip7002Constants +{ + public static readonly Address WithdrawalRequestPredeployAddress = new("0x00A3ca265EBcb825B45F985A16CEFB49958cE017"); +} diff --git a/src/Nethermind/Nethermind.Core/Eip7251Constants.cs b/src/Nethermind/Nethermind.Core/Eip7251Constants.cs new file mode 100644 index 00000000000..4fc30bd2601 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/Eip7251Constants.cs @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +namespace Nethermind.Core; + +public static class Eip7251Constants +{ + public static readonly Address ConsolidationRequestPredeployAddress = new("0x00b42dbF2194e931E80326D950320f7d9Dbeac02"); +} diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 5d4f0781189..c9eda1a8f8f 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -203,7 +203,6 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// /// bool IsEip158IgnoredAccount(Address address); - /// /// BaseFee opcode /// @@ -266,7 +265,31 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// Parent Beacon Block precompile ///
bool IsEip4788Enabled { get; } - Address Eip4788ContractAddress { get; } + Address? Eip4788ContractAddress { get; } + + + /// + /// EIP-6110: Supply validator deposits on chain + /// + bool IsEip6110Enabled { get; } + bool DepositsEnabled => IsEip6110Enabled; + Address DepositContractAddress { get; } + + /// + /// Execution layer triggerable exits + /// + bool IsEip7002Enabled { get; } + bool WithdrawalRequestsEnabled => IsEip7002Enabled; + Address Eip7002ContractAddress { get; } + + + /// + /// EIP-7251: triggered consolidations + /// + bool IsEip7251Enabled { get; } + bool ConsolidationRequestsEnabled => IsEip7251Enabled; + Address Eip7251ContractAddress { get; } + /// /// Save historical block hashes in state @@ -374,8 +397,26 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool IsBeaconBlockRootAvailable => IsEip4788Enabled; public bool IsBlockHashInStateAvailable => IsEip7709Enabled; public bool MCopyIncluded => IsEip5656Enabled; + + /// + /// AuRaSystemCalls - true + /// GethStyleSystemCalls - false + /// + /// + /// We support two types of system calls in Nethermind: + /// 1. Geth-style: + /// - We don't create a system account if it doesn't exist. + /// - We adhere to geth behavior for State clearing - no state touch for subtraction. + /// - We don't use a custom release spec for those transactions. + /// 2. AuRa (Parity-style): + /// - We create a system account if it doesn't exist. + /// - We use a custom release spec with EIP158 disabled. + /// + public bool AuRaSystemCalls { get; } public bool BlobBaseFeeEnabled => IsEip4844Enabled; bool IsAuthorizationListEnabled => IsEip7702Enabled; + + public bool RequestsEnabled => ConsolidationRequestsEnabled || WithdrawalRequestsEnabled || DepositsEnabled; } } diff --git a/src/Nethermind/Nethermind.Core/TransactionExtensions.cs b/src/Nethermind/Nethermind.Core/TransactionExtensions.cs index 412bce0e3c8..cfb60440ae6 100644 --- a/src/Nethermind/Nethermind.Core/TransactionExtensions.cs +++ b/src/Nethermind/Nethermind.Core/TransactionExtensions.cs @@ -65,7 +65,9 @@ public static bool IsAboveInitCode(this Transaction tx, IReleaseSpec spec) { return tx.IsContractCreation && spec.IsEip3860Enabled && (tx.DataLength) > spec.MaxInitCodeSize; } - - + public static bool IsGethStyleSystemCall(this Transaction tx, IReleaseSpec spec) => + tx.IsSystem() && !spec.AuRaSystemCalls; + public static bool IsAuRaSystemCall(this Transaction tx, IReleaseSpec spec) => + tx.IsSystem() && spec.AuRaSystemCalls; } } diff --git a/src/Nethermind/Nethermind.Core/Withdrawal.cs b/src/Nethermind/Nethermind.Core/Withdrawal.cs index 13741586406..daaaeafb4af 100644 --- a/src/Nethermind/Nethermind.Core/Withdrawal.cs +++ b/src/Nethermind/Nethermind.Core/Withdrawal.cs @@ -45,3 +45,4 @@ public class Withdrawal .Append($"{nameof(AmountInGwei)}: {AmountInGwei}}}") .ToString(); } + diff --git a/src/Nethermind/Nethermind.Db/IPruningConfig.cs b/src/Nethermind/Nethermind.Db/IPruningConfig.cs old mode 100755 new mode 100644 diff --git a/src/Nethermind/Nethermind.Db/PruningConfig.cs b/src/Nethermind/Nethermind.Db/PruningConfig.cs old mode 100755 new mode 100644 diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs index 2ab7e98f9e8..4399d6eaca1 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs @@ -55,8 +55,9 @@ public void GlobalSetup() codeInfo: new CodeInfo(ByteCode), value: 0, transferValue: 0, - txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, new AuthorizedCodeInfoRepository(codeInfoRepository, MainnetSpecProvider.Instance.ChainId)), - inputData: default + txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), + inputData: default, + isSystemExecutionEnv: false ); _evmState = new EvmState(long.MaxValue, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs index 803443a850e..acc3c85632e 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs @@ -87,8 +87,9 @@ public void GlobalSetup() codeInfo: new CodeInfo(_bytecode.Concat(_bytecode).Concat(_bytecode).Concat(_bytecode).ToArray()), value: 0, transferValue: 0, - txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, new AuthorizedCodeInfoRepository(codeInfoRepository, MainnetSpecProvider.Instance.ChainId)), - inputData: default + txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, codeInfoRepository), + inputData: default, + isSystemExecutionEnv: false ); _evmState = new EvmState(100_000_000L, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs index 3b7323058d6..0dc55f90381 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs @@ -98,8 +98,9 @@ public void GlobalSetup() codeInfo: new CodeInfo(Bytecode), value: 0, transferValue: 0, - txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, new AuthorizedCodeInfoRepository(codeInfoRepository, MainnetSpecProvider.Instance.ChainId)), - inputData: default + txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, codeInfoRepository), + inputData: default, + isSystemExecutionEnv: false ); _evmState = new EvmState(100_000_000L, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs new file mode 100644 index 00000000000..057b2a9cc89 --- /dev/null +++ b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs @@ -0,0 +1,97 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Linq; +using FluentAssertions; +using Nethermind.Consensus.Requests; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.Crypto; +using Nethermind.Db; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Specs; +using Nethermind.State; +using Nethermind.Trie.Pruning; +using NSubstitute; +using NUnit.Framework; + + +namespace Nethermind.Evm.Test; + +public class ConsolidationRequestProcessorTests +{ + + private ISpecProvider _specProvider; + private IEthereumEcdsa _ethereumEcdsa; + private ITransactionProcessor _transactionProcessor; + private IWorldState _stateProvider; + + private ICodeInfoRepository _codeInfoRepository; + + private static readonly UInt256 AccountBalance = 1.Ether(); + + private readonly Address eip7251Account = Eip7251Constants.ConsolidationRequestPredeployAddress; + + [SetUp] + public void Setup() + { + _specProvider = MainnetSpecProvider.Instance; + MemDb stateDb = new(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); + _stateProvider.CreateAccount(eip7251Account, AccountBalance); + _stateProvider.Commit(_specProvider.GenesisSpec); + _stateProvider.CommitTree(0); + + _codeInfoRepository = new CodeInfoRepository(); + + VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); + + _transactionProcessor = Substitute.For(); + + _transactionProcessor.Execute(Arg.Any(), Arg.Any(), Arg.Any()) + .Returns(ci => + { + CallOutputTracer tracer = ci.Arg(); + tracer.ReturnValue = Bytes.FromHexString("a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000effffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ffffffffffffffff"); + return new TransactionResult(); + }); + + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + } + + + [Test] + public void ShouldProcessConsolidationRequest() + { + + IReleaseSpec spec = Substitute.For(); + spec.ConsolidationRequestsEnabled.Returns(true); + spec.Eip7251ContractAddress.Returns(eip7251Account); + + Block block = Build.A.Block.TestObject; + + ConsolidationRequestsProcessor ConsolidationRequestsProcessor = new(transactionProcessor: _transactionProcessor); + + var ConsolidationRequest = new ConsolidationRequest() + { + SourceAddress = new Address(Bytes.FromHexString("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), + SourcePubkey = Bytes.FromHexString("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"), + TargetPubkey = Bytes.FromHexString("0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000") + }; + + var ConsolidationRequests = ConsolidationRequestsProcessor.ReadConsolidationRequests(spec, _stateProvider, block).ToList(); + + Assert.That(ConsolidationRequests, Has.Count.EqualTo(10)); + + ConsolidationRequest ConsolidationRequestResult = ConsolidationRequests[0]; + + ConsolidationRequestResult.Should().BeEquivalentTo(ConsolidationRequest); + } +} diff --git a/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs b/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs index 59844dba4c0..7c43f8a4e30 100644 --- a/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs @@ -112,6 +112,15 @@ public class InvalidOpcodeTests : VirtualMachineTestsBase } ).ToArray(); + private static readonly Instruction[] PragueInstructions = + CancunInstructions.Union( + new Instruction[] + { + // Instruction.AUTH, + // Instruction.AUTHCALL + } + ).ToArray(); + private readonly Dictionary _validOpcodes = new() { @@ -127,7 +136,8 @@ private readonly Dictionary _validOpcodes {(ForkActivation)MainnetSpecProvider.LondonBlockNumber, LondonInstructions}, {MainnetSpecProvider.ShanghaiActivation, ShanghaiInstructions}, {MainnetSpecProvider.CancunActivation, CancunInstructions}, - {(long.MaxValue, ulong.MaxValue), CancunInstructions} + {MainnetSpecProvider.PragueActivation, PragueInstructions}, + {(long.MaxValue, ulong.MaxValue), PragueInstructions} }; private const string InvalidOpCodeErrorMessage = "BadInstruction"; diff --git a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs index e097ec7c147..b93ceb38d31 100644 --- a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs +++ b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs @@ -92,6 +92,14 @@ protected GethLikeTxTrace ExecuteAndTrace(long blockNumber, long gasLimit, param return tracer.BuildResult(); } + protected GethLikeTxTrace ExecuteAndTrace(long gasLimit, params byte[] code) + { + GethLikeTxMemoryTracer tracer = new(GethTraceOptions.Default); + (Block block, Transaction transaction) = PrepareTx(Activation, gasLimit, code); + _processor.Execute(transaction, block.Header, tracer); + return tracer.BuildResult(); + } + protected GethLikeTxTrace ExecuteAndTraceToFile(Action dumpCallback, byte[] code, GethTraceOptions options) { GethLikeTxFileTracer tracer = new(dumpCallback, options); diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs new file mode 100644 index 00000000000..b73564c0c8b --- /dev/null +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -0,0 +1,97 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Linq; +using FluentAssertions; +using Nethermind.Consensus.Requests; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.Crypto; +using Nethermind.Db; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Specs; +using Nethermind.State; +using Nethermind.Trie.Pruning; +using NSubstitute; +using NUnit.Framework; + + +namespace Nethermind.Evm.Test; + +public class WithdrawalRequestProcessorTests +{ + + private ISpecProvider _specProvider; + private IEthereumEcdsa _ethereumEcdsa; + private ITransactionProcessor _transactionProcessor; + private IWorldState _stateProvider; + + private ICodeInfoRepository _codeInfoRepository; + + private static readonly UInt256 AccountBalance = 1.Ether(); + + private readonly Address eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; + + [SetUp] + public void Setup() + { + _specProvider = MainnetSpecProvider.Instance; + MemDb stateDb = new(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); + _stateProvider.CreateAccount(eip7002Account, AccountBalance); + _stateProvider.Commit(_specProvider.GenesisSpec); + _stateProvider.CommitTree(0); + + _codeInfoRepository = new CodeInfoRepository(); + + VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); + + _transactionProcessor = Substitute.For(); + + _transactionProcessor.Execute(Arg.Any(), Arg.Any(), Arg.Any()) + .Returns(ci => + { + CallOutputTracer tracer = ci.Arg(); + tracer.ReturnValue = Bytes.FromHexString("a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000effffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ffffffffffffffff"); + return new TransactionResult(); + }); + + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + } + + + [Test] + public void ShouldProcessWithdrawalRequest() + { + + IReleaseSpec spec = Substitute.For(); + spec.WithdrawalRequestsEnabled.Returns(true); + spec.Eip7002ContractAddress.Returns(eip7002Account); + + Block block = Build.A.Block.TestObject; + + WithdrawalRequestsProcessor withdrawalRequestsProcessor = new(transactionProcessor: _transactionProcessor); + + var withdrawalRequest = new WithdrawalRequest() + { + SourceAddress = new Address(Bytes.FromHexString("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), + ValidatorPubkey = Bytes.FromHexString("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"), + Amount = 0 + }; + + var withdrawalRequests = withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, _stateProvider, block).ToList(); + + Assert.That(withdrawalRequests, Has.Count.EqualTo(16)); + + WithdrawalRequest withdrawalRequestResult = withdrawalRequests[0]; + + withdrawalRequestResult.Should().BeEquivalentTo(withdrawalRequest); + } +} diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 633974fc4ff..7177fd2d92a 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -168,13 +168,13 @@ public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) return codeInfo; } - public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) + public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv) { CodeInfo codeInfo = new(code); codeInfo.AnalyseInBackgroundIfRequired(); Hash256 codeHash = code.Length == 0 ? Keccak.OfAnEmptyString : Keccak.Compute(code.Span); - state.InsertCode(codeOwner, codeHash, code, spec); + state.InsertCode(codeOwner, codeHash, code, spec, isSystemEnv); _codeCache.Set(codeHash, codeInfo); } diff --git a/src/Nethermind/Nethermind.Evm/EvmStack.cs b/src/Nethermind/Nethermind.Evm/EvmStack.cs index 40875409b4b..0af3abc94d3 100644 --- a/src/Nethermind/Nethermind.Evm/EvmStack.cs +++ b/src/Nethermind/Nethermind.Evm/EvmStack.cs @@ -310,14 +310,9 @@ public readonly Span PeekWord256() return _bytes.Slice(head * WordSize, WordSize); } - public Address PopAddress() + public Address? PopAddress() { - if (Head-- == 0) - { - return null; - } - - return new Address(_bytes.Slice(Head * WordSize + WordSize - AddressSize, AddressSize).ToArray()); + return Head-- == 0 ? null : new Address(_bytes.Slice(Head * WordSize + WordSize - AddressSize, AddressSize).ToArray()); } public ref byte PopBytesByRef() diff --git a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs index f64570c9430..cb7a163a7ae 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs @@ -8,17 +8,33 @@ namespace Nethermind.Evm { - public readonly struct ExecutionEnvironment( - CodeInfo codeInfo, - Address executingAccount, - Address caller, - Address? codeSource, - ReadOnlyMemory inputData, - in TxExecutionContext txExecutionContext, - UInt256 transferValue, - UInt256 value, - int callDepth = 0) + public readonly struct ExecutionEnvironment { + public ExecutionEnvironment + ( + CodeInfo codeInfo, + Address executingAccount, + Address caller, + Address? codeSource, + ReadOnlyMemory inputData, + in TxExecutionContext txExecutionContext, + UInt256 transferValue, + UInt256 value, + bool isSystemExecutionEnv, + int callDepth = 0) + { + CodeInfo = codeInfo; + ExecutingAccount = executingAccount; + Caller = caller; + CodeSource = codeSource; + InputData = inputData; + TxExecutionContext = txExecutionContext; + TransferValue = transferValue; + Value = value; + CallDepth = callDepth; + IsSystemEnv = isSystemExecutionEnv; + } + /// /// Parsed bytecode for the current call. /// @@ -62,6 +78,10 @@ public readonly struct ExecutionEnvironment( public readonly UInt256 Value = value; /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. - public readonly int CallDepth = callDepth; + public readonly int CallDepth; + + /// + /// this field keeps track of wether the execution envirement was initiated by a systemTx. + public readonly bool IsSystemEnv; } } diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index 3c575400523..47e1d4c7b44 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -15,6 +15,6 @@ public interface ICodeInfoRepository { CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); - void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec); + void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv); CodeInsertResult InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs index 96ac8e27948..9d4622dc862 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs @@ -1,11 +1,42 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; +using System.Diagnostics.CodeAnalysis; using Nethermind.Core; using Nethermind.Evm.Tracing; namespace Nethermind.Evm.TransactionProcessing; +[Flags] +public enum ExecutionOptions +{ + /// + /// Just accumulate the state + /// + None = 0, + + /// + /// Commit the state after execution + /// + Commit = 1, + + /// + /// Restore state after execution + /// + Restore = 2, + + /// + /// Skip potential fail checks + /// + NoValidation = Commit | 4, + + /// + /// Commit and later restore state also skip validation, use for CallAndRestore + /// + CommitAndRestore = Commit | Restore | NoValidation +} + public interface ITransactionProcessor { /// diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs new file mode 100644 index 00000000000..333ce0dcd88 --- /dev/null +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs @@ -0,0 +1,528 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Diagnostics.CodeAnalysis; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm.CodeAnalysis; +using Nethermind.Evm.Tracing; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Specs; +using Nethermind.State; +using Nethermind.State.Tracing; +using static Nethermind.Core.Extensions.MemoryExtensions; + +using static Nethermind.Evm.VirtualMachine; + +namespace Nethermind.Evm.TransactionProcessing +{ + public class SystemTxProcessor : ITransactionProcessor + { + protected EthereumEcdsa Ecdsa { get; private init; } + protected ILogger Logger { get; private init; } + protected IReleaseSpec Spec { get; private init; } + protected IWorldState WorldState { get; private init; } + protected IVirtualMachine VirtualMachine { get; private init; } + + private readonly ICodeInfoRepository _codeInfoRepository; + public SystemTxProcessor( + IReleaseSpec? spec, + IWorldState? worldState, + IVirtualMachine? virtualMachine, + ICodeInfoRepository? codeInfoRepository, + EthereumEcdsa? ecdsa, + ILogger? logger) + { + Logger = logger ?? throw new ArgumentNullException(nameof(logger)); + Spec = spec ?? throw new ArgumentNullException(nameof(spec)); + WorldState = worldState ?? throw new ArgumentNullException(nameof(worldState)); + VirtualMachine = virtualMachine ?? throw new ArgumentNullException(nameof(virtualMachine)); + _codeInfoRepository = codeInfoRepository ?? throw new ArgumentNullException(nameof(codeInfoRepository)); + Ecdsa = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa)); + } + public TransactionResult CallAndRestore(Transaction transaction, in BlockExecutionContext blCtx, ITxTracer txTracer) => + Execute(transaction, in blCtx, txTracer, ExecutionOptions.CommitAndRestore); + + public TransactionResult BuildUp(Transaction transaction, in BlockExecutionContext blCtx, ITxTracer txTracer) + { + // we need to treat the result of previous transaction as the original value of next transaction + // when we do not commit + WorldState.TakeSnapshot(true); + return Execute(transaction, in blCtx, txTracer, ExecutionOptions.None); + } + + public TransactionResult Execute(Transaction transaction, in BlockExecutionContext blCtx, ITxTracer txTracer) => + Execute(transaction, in blCtx, txTracer, ExecutionOptions.Commit); + + public TransactionResult Trace(Transaction transaction, in BlockExecutionContext blCtx, ITxTracer txTracer) => + Execute(transaction, in blCtx, txTracer, ExecutionOptions.NoValidation); + + protected virtual void UpdateSpecBasedOnSystemProcessor(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) + { + header = blCtx.Header; + if (Spec.AuRaSystemCalls) + { + spec = new SystemTransactionReleaseSpec(Spec); + } + else + { + spec = Spec; + } + } + + protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) + { + UpdateSpecBasedOnSystemProcessor(blCtx, out BlockHeader header, out IReleaseSpec spec); + + // restore is CallAndRestore - previous call, we will restore state after the execution + bool restore = opts.HasFlag(ExecutionOptions.Restore); + // commit - is for standard execute, we will commit thee state after execution + // !commit - is for build up during block production, we won't commit state after each transaction to support rollbacks + // we commit only after all block is constructed + bool commit = opts.HasFlag(ExecutionOptions.Commit) || !spec.IsEip658Enabled; + + TransactionResult result; + if (!(result = ValidateStatic(tx, header, spec, tracer, opts, out long intrinsicGas))) return result; + + UInt256 effectiveGasPrice = tx.CalculateEffectiveGasPrice(spec.IsEip1559Enabled, header.BaseFeePerGas); + + UpdateMetrics(opts, effectiveGasPrice); + + bool deleteCallerAccount = RecoverSenderIfNeeded(tx, spec, opts, effectiveGasPrice); + + if (!(result = ValidateSender(tx, header, spec, tracer, opts))) return result; + if (!(result = BuyGas(tx, header, spec, tracer, opts, effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment))) return result; + if (!(result = IncrementNonce(tx, header, spec, tracer, opts))) return result; + + if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance); + + ExecutionEnvironment env = BuildExecutionEnvironment(tx, blCtx, spec, effectiveGasPrice); + + long gasAvailable = tx.GasLimit - intrinsicGas; + ExecuteEvmCall(tx, header, spec, tracer, opts, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); + PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode); + + // Finalize + if (restore) + { + WorldState.Reset(); + if (deleteCallerAccount) + { + WorldState.DeleteAccount(tx.SenderAddress); + } + else + { + if (!opts.HasFlag(ExecutionOptions.NoValidation)) + WorldState.AddToBalance(tx.SenderAddress, senderReservedGasPayment, spec); + + WorldState.Commit(spec); + } + } + else if (commit) + { + WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullStateTracer.Instance); + } + + if (tracer.IsTracingReceipt) + { + Hash256 stateRoot = null; + if (!spec.IsEip658Enabled) + { + WorldState.RecalculateStateRoot(); + stateRoot = WorldState.StateRoot; + } + + if (statusCode == StatusCode.Failure) + { + byte[] output = (substate?.ShouldRevert ?? false) ? substate.Output.ToArray() : Array.Empty(); + tracer.MarkAsFailed(env.ExecutingAccount, spentGas, output, substate?.Error, stateRoot); + } + else + { + LogEntry[] logs = substate.Logs.Count != 0 ? substate.Logs.ToArray() : Array.Empty(); + tracer.MarkAsSuccess(env.ExecutingAccount, spentGas, substate.Output.ToArray(), logs, stateRoot); + } + } + + return TransactionResult.Ok; + } + + private static void UpdateMetrics(ExecutionOptions opts, UInt256 effectiveGasPrice) + { + if (opts == ExecutionOptions.Commit || opts == ExecutionOptions.None) + { + float gasPrice = (float)((double)effectiveGasPrice / 1_000_000_000.0); + Metrics.MinGasPrice = Math.Min(gasPrice, Metrics.MinGasPrice); + Metrics.MaxGasPrice = Math.Max(gasPrice, Metrics.MaxGasPrice); + + Metrics.BlockMinGasPrice = Math.Min(gasPrice, Metrics.BlockMinGasPrice); + Metrics.BlockMaxGasPrice = Math.Max(gasPrice, Metrics.BlockMaxGasPrice); + + Metrics.AveGasPrice = (Metrics.AveGasPrice * Metrics.Transactions + gasPrice) / (Metrics.Transactions + 1); + Metrics.EstMedianGasPrice += Metrics.AveGasPrice * 0.01f * float.Sign(gasPrice - Metrics.EstMedianGasPrice); + Metrics.Transactions++; + + Metrics.BlockAveGasPrice = (Metrics.BlockAveGasPrice * Metrics.BlockTransactions + gasPrice) / (Metrics.BlockTransactions + 1); + Metrics.BlockEstMedianGasPrice += Metrics.BlockAveGasPrice * 0.01f * float.Sign(gasPrice - Metrics.BlockEstMedianGasPrice); + Metrics.BlockTransactions++; + } + } + + /// + /// Validates the transaction, in a static manner (i.e. without accesing state/storage). + /// It basically ensures the transaction is well formed (i.e. no null values where not allowed, no overflows, etc). + /// As a part of validating the transaction the premium per gas will be calculated, to save computation this + /// is returned in an out parameter. + /// + /// The transaction to validate + /// The block containing the transaction. Only BaseFee is being used from the block atm. + /// The release spec with which the transaction will be executed + /// The transaction tracer + /// Options (Flags) to use for execution + /// Computed premium per gas + /// + protected virtual TransactionResult ValidateStatic(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, out long intrinsicGas) + { + intrinsicGas = IntrinsicGasCalculator.Calculate(tx, spec); + + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + if (tx.SenderAddress is null) + { + TraceLogInvalidTx(tx, "SENDER_NOT_SPECIFIED"); + return "sender not specified"; + } + + if (validate && tx.Nonce >= ulong.MaxValue - 1) + { + // we are here if nonce is at least (ulong.MaxValue - 1). If tx is contract creation, + // it is max possible value. Otherwise, (ulong.MaxValue - 1) is allowed, but ulong.MaxValue not. + if (tx.IsContractCreation || tx.Nonce == ulong.MaxValue) + { + TraceLogInvalidTx(tx, "NONCE_OVERFLOW"); + return "nonce overflow"; + } + } + + if (tx.IsAboveInitCode(spec)) + { + TraceLogInvalidTx(tx, $"CREATE_TRANSACTION_SIZE_EXCEEDS_MAX_INIT_CODE_SIZE {tx.DataLength} > {spec.MaxInitCodeSize}"); + return "EIP-3860 - transaction size over max init code size"; + } + + return TransactionResult.Ok; + } + + // TODO Should we remove this already + protected bool RecoverSenderIfNeeded(Transaction tx, IReleaseSpec spec, ExecutionOptions opts, in UInt256 effectiveGasPrice) + { + bool commit = opts.HasFlag(ExecutionOptions.Commit) || !spec.IsEip658Enabled; + bool restore = opts.HasFlag(ExecutionOptions.Restore); + bool noValidation = opts.HasFlag(ExecutionOptions.NoValidation); + + bool deleteCallerAccount = false; + + Address sender = tx.SenderAddress; + if (sender is null || (!WorldState.AccountExists(sender) && !tx.IsGethStyleSystemCall(spec))) + { + if (Logger.IsDebug) Logger.Debug($"TX sender account does not exist {sender} - trying to recover it"); + + // hacky fix for the potential recovery issue + if (tx.Signature is not null) + tx.SenderAddress = Ecdsa.RecoverAddress(tx, !spec.ValidateChainId); + + if (sender != tx.SenderAddress) + { + if (Logger.IsWarn) + Logger.Warn($"TX recovery issue fixed - tx was coming with sender {sender} and the now it recovers to {tx.SenderAddress}"); + sender = tx.SenderAddress; + } + else + { + TraceLogInvalidTx(tx, $"SENDER_ACCOUNT_DOES_NOT_EXIST {sender}"); + if (!commit || noValidation || effectiveGasPrice.IsZero) + { + deleteCallerAccount = !commit || restore; + WorldState.CreateAccount(sender, in UInt256.Zero); + } + } + + if (sender is null) + { + ThrowInvalidDataException($"Failed to recover sender address on tx {tx.Hash} when previously recovered sender account did not exist."); + } + } + + return deleteCallerAccount; + } + + + protected virtual TransactionResult ValidateSender(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) + { + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + if (validate && WorldState.IsInvalidContractSender(spec, tx.SenderAddress)) + { + TraceLogInvalidTx(tx, "SENDER_IS_CONTRACT"); + return "sender has deployed code"; + } + + return TransactionResult.Ok; + } + + protected virtual TransactionResult BuyGas(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, + in UInt256 effectiveGasPrice, out UInt256 premiumPerGas, out UInt256 senderReservedGasPayment) + { + premiumPerGas = UInt256.Zero; + senderReservedGasPayment = UInt256.Zero; + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + if (validate) WorldState.SubtractFromBalance(tx.SenderAddress, senderReservedGasPayment, spec); + + return TransactionResult.Ok; + } + + protected virtual TransactionResult IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) + { + return TransactionResult.Ok; + } + + protected virtual ExecutionEnvironment BuildExecutionEnvironment( + Transaction tx, + in BlockExecutionContext blCtx, + IReleaseSpec spec, + in UInt256 effectiveGasPrice) + { + Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0); + if (recipient is null) ThrowInvalidDataException("Recipient has not been resolved properly before tx execution"); + + TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); + + CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data?.AsArray() ?? Array.Empty()) + : _codeInfoRepository.GetCachedCodeInfo(WorldState, recipient, spec); + + byte[] inputData = tx.IsMessageCall ? tx.Data.AsArray() ?? Array.Empty() : Array.Empty(); + + return new ExecutionEnvironment + ( + txExecutionContext: in executionContext, + value: tx.Value, + transferValue: tx.Value, + caller: tx.SenderAddress, + codeSource: recipient, + executingAccount: recipient, + inputData: inputData, + codeInfo: codeInfo, + isSystemExecutionEnv: true + ); + } + + protected void ExecuteEvmCall( + Transaction tx, + BlockHeader header, + IReleaseSpec spec, + ITxTracer tracer, + ExecutionOptions opts, + in long gasAvailable, + in ExecutionEnvironment env, + out TransactionSubstate? substate, + out long spentGas, + out byte statusCode) + { + bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); + + substate = null; + spentGas = tx.GasLimit; + statusCode = StatusCode.Failure; + + long unspentGas = gasAvailable; + + Snapshot snapshot = WorldState.TakeSnapshot(); + + // Fixes eth_estimateGas. + // If sender is SystemUser subtracting value will cause InsufficientBalanceException + if (validate) + WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec, true); + + try + { + if (tx.IsContractCreation) + { + // if transaction is a contract creation then recipient address is the contract deployment address + PrepareAccountForContractDeployment(env.ExecutingAccount, spec); + } + + ExecutionType executionType = tx.IsContractCreation ? ExecutionType.CREATE : ExecutionType.TRANSACTION; + + using (EvmState state = new(unspentGas, env, executionType, true, snapshot, false)) + { + if (spec.UseTxAccessLists) + { + state.WarmUp(tx.AccessList); // eip-2930 + } + + if (spec.UseHotAndColdStorage) + { + state.WarmUp(tx.SenderAddress); // eip-2929 + state.WarmUp(env.ExecutingAccount); // eip-2929 + } + + if (spec.AddCoinbaseToTxAccessList) + { + state.WarmUp(header.GasBeneficiary); + } + + substate = !tracer.IsTracingActions + ? VirtualMachine.Run(state, WorldState, tracer) + : VirtualMachine.Run(state, WorldState, tracer); + + unspentGas = state.GasAvailable; + + if (tracer.IsTracingAccess) + { + tracer.ReportAccess(state.AccessedAddresses, state.AccessedStorageCells); + } + } + + if (substate.ShouldRevert || substate.IsError) + { + if (Logger.IsTrace) + Logger.Trace("Restoring state from before transaction"); + WorldState.Restore(snapshot); + } + else + { + // tks: there is similar code fo contract creation from init and from CREATE + // this may lead to inconsistencies (however it is tested extensively in blockchain tests) + if (tx.IsContractCreation) + { + long codeDepositGasCost = CodeDepositHandler.CalculateCost(substate.Output.Length, spec); + if (unspentGas < codeDepositGasCost && spec.ChargeForTopLevelCreate) + { + ThrowOutOfGasException(); + } + + if (CodeDepositHandler.CodeIsInvalid(spec, substate.Output)) + { + ThrowInvalidCodeException(); + } + + if (unspentGas >= codeDepositGasCost) + { + var code = substate.Output.ToArray(); + _codeInfoRepository.InsertCode(WorldState, code, env.ExecutingAccount, spec, env.IsSystemEnv); + + unspentGas -= codeDepositGasCost; + } + } + + foreach (Address toBeDestroyed in substate.DestroyList) + { + if (Logger.IsTrace) + Logger.Trace($"Destroying account {toBeDestroyed}"); + + WorldState.ClearStorage(toBeDestroyed); + WorldState.DeleteAccount(toBeDestroyed); + + if (tracer.IsTracingRefunds) + tracer.ReportRefund(RefundOf.Destroy(spec.IsEip3529Enabled)); + } + + statusCode = StatusCode.Success; + } + + spentGas = Refund(tx, header, spec, opts, substate, unspentGas, env.TxExecutionContext.GasPrice); + } + catch (Exception ex) when (ex is EvmException or OverflowException) // TODO: OverflowException? still needed? hope not + { + if (Logger.IsTrace) Logger.Trace($"EVM EXCEPTION: {ex.GetType().Name}:{ex.Message}"); + WorldState.Restore(snapshot); + } + } + + protected virtual void PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) + { + return; + } + + protected void PrepareAccountForContractDeployment(Address contractAddress, IReleaseSpec spec) + { + if (WorldState.AccountExists(contractAddress)) + { + CodeInfo codeInfo = _codeInfoRepository.GetCachedCodeInfo(WorldState, contractAddress, spec); + bool codeIsNotEmpty = codeInfo.MachineCode.Length != 0; + bool accountNonceIsNotZero = WorldState.GetNonce(contractAddress) != 0; + + // TODO: verify what should happen if code info is a precompile + // (but this would generally be a hash collision) + if (codeIsNotEmpty || accountNonceIsNotZero) + { + if (Logger.IsTrace) + { + Logger.Trace($"Contract collision at {contractAddress}"); + } + + ThrowTransactionCollisionException(); + } + + // we clean any existing storage (in case of a previously called self destruct) + WorldState.UpdateStorageRoot(contractAddress, Keccak.EmptyTreeHash); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + protected void TraceLogInvalidTx(Transaction transaction, string reason) + { + if (Logger.IsTrace) Logger.Trace($"Invalid tx {transaction.Hash} ({reason})"); + } + + protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionOptions opts, + in TransactionSubstate substate, in long unspentGas, in UInt256 gasPrice) + { + long spentGas = tx.GasLimit; + if (!substate.IsError) + { + spentGas -= unspentGas; + long refund = substate.ShouldRevert + ? 0 + : RefundHelper.CalculateClaimableRefund(spentGas, + substate.Refund + substate.DestroyList.Count * RefundOf.Destroy(spec.IsEip3529Enabled), spec); + + if (Logger.IsTrace) + Logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + refund); + // If noValidation we didn't charge for gas, so do not refund + if (!opts.HasFlag(ExecutionOptions.NoValidation)) + WorldState.AddToBalance(tx.SenderAddress, (ulong)(unspentGas + refund) * gasPrice, spec, true); + spentGas -= refund; + } + + return spentGas; + } + + [DoesNotReturn] + [StackTraceHidden] + private static void ThrowInvalidDataException(string message) => throw new InvalidDataException(message); + + [DoesNotReturn] + [StackTraceHidden] + private static void ThrowInvalidCodeException() => throw new InvalidCodeException(); + + [DoesNotReturn] + [StackTraceHidden] + private static void ThrowOutOfGasException() => throw new OutOfGasException(); + + [DoesNotReturn] + [StackTraceHidden] + private static void ThrowTransactionCollisionException() => throw new TransactionCollisionException(); + } +} + + diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 0f1b6db5256..c40f5c2137c 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -34,35 +34,6 @@ public class TransactionProcessor : ITransactionProcessor protected IVirtualMachine VirtualMachine { get; private init; } private readonly ICodeInfoRepository _codeInfoRepository; - [Flags] - protected enum ExecutionOptions - { - /// - /// Just accumulate the state - /// - None = 0, - - /// - /// Commit the state after execution - /// - Commit = 1, - - /// - /// Restore state after execution - /// - Restore = 2, - - /// - /// Skip potential fail checks - /// - NoValidation = Commit | 4, - - /// - /// Commit and later restore state also skip validation, use for CallAndRestore - /// - CommitAndRestore = Commit | Restore | NoValidation - } - public TransactionProcessor( ISpecProvider? specProvider, IWorldState? worldState, @@ -103,10 +74,13 @@ public TransactionResult Trace(Transaction transaction, in BlockExecutionContext protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionContext blCtx, ITxTracer tracer, ExecutionOptions opts) { - BlockHeader header = blCtx.Header; - IReleaseSpec spec = SpecProvider.GetSpec(header); + GetSpecFromHeader(blCtx, out BlockHeader header, out IReleaseSpec spec); + if (tx.IsSystem()) - spec = new SystemTransactionReleaseSpec(spec); + { + ITransactionProcessor systemProcessor = new SystemTxProcessor(spec, WorldState, VirtualMachine, _codeInfoRepository, Ecdsa, Logger); + return systemProcessor.Execute(tx, blCtx, tracer); + } // restore is CallAndRestore - previous call, we will restore state after the execution bool restore = opts.HasFlag(ExecutionOptions.Restore); @@ -157,8 +131,8 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon { if (!opts.HasFlag(ExecutionOptions.NoValidation)) WorldState.AddToBalance(tx.SenderAddress, senderReservedGasPayment, spec); - if (!tx.IsSystem()) - WorldState.DecrementNonce(tx.SenderAddress); + + WorldState.DecrementNonce(tx.SenderAddress); WorldState.Commit(spec); } @@ -192,6 +166,12 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon return TransactionResult.Ok; } + private void GetSpecFromHeader(BlockExecutionContext blCtx, out BlockHeader header, out IReleaseSpec spec) + { + header = blCtx.Header; + spec = SpecProvider.GetSpec(header); + } + private static void UpdateMetrics(ExecutionOptions opts, UInt256 effectiveGasPrice) { if (opts is ExecutionOptions.Commit or ExecutionOptions.None && (effectiveGasPrice[2] | effectiveGasPrice[3]) == 0) @@ -256,19 +236,16 @@ protected virtual TransactionResult ValidateStatic(Transaction tx, BlockHeader h return "EIP-3860 - transaction size over max init code size"; } - if (!tx.IsSystem()) + if (tx.GasLimit < intrinsicGas) { - if (tx.GasLimit < intrinsicGas) - { - TraceLogInvalidTx(tx, $"GAS_LIMIT_BELOW_INTRINSIC_GAS {tx.GasLimit} < {intrinsicGas}"); - return "gas limit below intrinsic gas"; - } + TraceLogInvalidTx(tx, $"GAS_LIMIT_BELOW_INTRINSIC_GAS {tx.GasLimit} < {intrinsicGas}"); + return "gas limit below intrinsic gas"; + } - if (validate && tx.GasLimit > header.GasLimit - header.GasUsed) - { - TraceLogInvalidTx(tx, $"BLOCK_GAS_LIMIT_EXCEEDED {tx.GasLimit} > {header.GasLimit} - {header.GasUsed}"); - return "block gas limit exceeded"; - } + if (validate && tx.GasLimit > header.GasLimit - header.GasUsed) + { + TraceLogInvalidTx(tx, $"BLOCK_GAS_LIMIT_EXCEEDED {tx.GasLimit} > {header.GasLimit} - {header.GasUsed}"); + return "block gas limit exceeded"; } return TransactionResult.Ok; } @@ -337,7 +314,7 @@ protected virtual TransactionResult BuyGas(Transaction tx, BlockHeader header, I senderReservedGasPayment = UInt256.Zero; bool validate = !opts.HasFlag(ExecutionOptions.NoValidation); - if (!tx.IsSystem() && validate) + if (validate) { if (!tx.TryCalculatePremiumPerGas(header.BaseFeePerGas, out premiumPerGas)) { @@ -361,10 +338,13 @@ protected virtual TransactionResult BuyGas(Transaction tx, BlockHeader header, I TraceLogInvalidTx(tx, $"INSUFFICIENT_MAX_FEE_PER_GAS_FOR_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}, MAX_FEE_PER_GAS: {tx.MaxFeePerGas}"); return "insufficient MaxFeePerGas for sender balance"; } + if (tx.SupportsBlobs) { - overflows = UInt256.MultiplyOverflow(BlobGasCalculator.CalculateBlobGas(tx), (UInt256)tx.MaxFeePerBlobGas, out UInt256 maxBlobGasFee); - if (overflows || UInt256.AddOverflow(maxGasFee, maxBlobGasFee, out UInt256 multidimGasFee) || multidimGasFee > balanceLeft) + overflows = UInt256.MultiplyOverflow(BlobGasCalculator.CalculateBlobGas(tx), + (UInt256)tx.MaxFeePerBlobGas, out UInt256 maxBlobGasFee); + if (overflows || UInt256.AddOverflow(maxGasFee, maxBlobGasFee, out UInt256 multidimGasFee) || + multidimGasFee > balanceLeft) { TraceLogInvalidTx(tx, $"INSUFFICIENT_MAX_FEE_PER_BLOB_GAS_FOR_SENDER_BALANCE: ({tx.SenderAddress})_BALANCE = {senderBalance}"); return "insufficient sender balance"; @@ -372,13 +352,15 @@ protected virtual TransactionResult BuyGas(Transaction tx, BlockHeader header, I } } - overflows = UInt256.MultiplyOverflow((UInt256)tx.GasLimit, effectiveGasPrice, out senderReservedGasPayment); + overflows = UInt256.MultiplyOverflow((UInt256)tx.GasLimit, effectiveGasPrice, + out senderReservedGasPayment); if (!overflows && tx.SupportsBlobs) { overflows = !BlobGasCalculator.TryCalculateBlobGasPrice(header, tx, out UInt256 blobGasFee); if (!overflows) { - overflows = UInt256.AddOverflow(senderReservedGasPayment, blobGasFee, out senderReservedGasPayment); + overflows = UInt256.AddOverflow(senderReservedGasPayment, blobGasFee, + out senderReservedGasPayment); } } @@ -396,8 +378,6 @@ protected virtual TransactionResult BuyGas(Transaction tx, BlockHeader header, I protected virtual TransactionResult IncrementNonce(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts) { - if (tx.IsSystem()) return TransactionResult.Ok; - if (tx.Nonce != WorldState.GetNonce(tx.SenderAddress)) { TraceLogInvalidTx(tx, $"WRONG_TRANSACTION_NONCE: {tx.Nonce} (expected {WorldState.GetNonce(tx.SenderAddress)})"); @@ -437,7 +417,8 @@ protected ExecutionEnvironment BuildExecutionEnvironment( codeSource: recipient, executingAccount: recipient, inputData: inputData, - codeInfo: codeInfo + codeInfo: codeInfo, + isSystemExecutionEnv: false ); } @@ -466,8 +447,7 @@ protected void ExecuteEvmCall( // Fixes eth_estimateGas. // If sender is SystemUser subtracting value will cause InsufficientBalanceException - if (validate || !tx.IsSystem()) - WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); + WorldState.SubtractFromBalance(tx.SenderAddress, tx.Value, spec); try { @@ -521,7 +501,7 @@ protected void ExecuteEvmCall( if (unspentGas >= codeDepositGasCost) { var code = substate.Output.ToArray(); - _codeInfoRepository.InsertCode(WorldState, code, env.ExecutingAccount, spec); + _codeInfoRepository.InsertCode(WorldState, code, env.ExecutingAccount, spec, env.IsSystemEnv); unspentGas -= codeDepositGasCost; } @@ -550,7 +530,7 @@ protected void ExecuteEvmCall( WorldState.Restore(snapshot); } - if (validate && !tx.IsSystem()) + if (validate) header.GasUsed += spentGas; } @@ -583,22 +563,19 @@ private void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, Execu protected virtual void PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) { - if (!tx.IsSystem()) + bool gasBeneficiaryNotDestroyed = substate?.DestroyList.Contains(header.GasBeneficiary) != true; + if (statusCode == StatusCode.Failure || gasBeneficiaryNotDestroyed) { - bool gasBeneficiaryNotDestroyed = substate?.DestroyList.Contains(header.GasBeneficiary) != true; - if (statusCode == StatusCode.Failure || gasBeneficiaryNotDestroyed) - { - UInt256 fees = (UInt256)spentGas * premiumPerGas; - UInt256 burntFees = !tx.IsFree() ? (UInt256)spentGas * header.BaseFeePerGas : 0; + UInt256 fees = (UInt256)spentGas * premiumPerGas; + UInt256 burntFees = !tx.IsFree() ? (UInt256)spentGas * header.BaseFeePerGas : 0; - WorldState.AddToBalanceAndCreateIfNotExists(header.GasBeneficiary, fees, spec); + WorldState.AddToBalanceAndCreateIfNotExists(header.GasBeneficiary, fees, spec); - if (spec.IsEip1559Enabled && spec.Eip1559FeeCollector is not null && !burntFees.IsZero) - WorldState.AddToBalanceAndCreateIfNotExists(spec.Eip1559FeeCollector, burntFees, spec); + if (spec.IsEip1559Enabled && spec.Eip1559FeeCollector is not null && !burntFees.IsZero) + WorldState.AddToBalanceAndCreateIfNotExists(spec.Eip1559FeeCollector, burntFees, spec); - if (tracer.IsTracingFees) - tracer.ReportFees(fees, burntFees); - } + if (tracer.IsTracingFees) + tracer.ReportFees(fees, burntFees); } } @@ -658,18 +635,4 @@ protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec s [StackTraceHidden] private static void ThrowTransactionCollisionException() => throw new TransactionCollisionException(); } - - public readonly struct TransactionResult(string? error) - { - public static readonly TransactionResult Ok = new(); - public static readonly TransactionResult MalformedTransaction = new("malformed"); - [MemberNotNullWhen(true, nameof(Fail))] - [MemberNotNullWhen(false, nameof(Success))] - public string? Error { get; } = error; - public bool Fail => Error is not null; - public bool Success => Error is null; - public static implicit operator TransactionResult(string? error) => new(error); - public static implicit operator bool(TransactionResult result) => result.Success; - public override string ToString() => Error is not null ? $"Fail : {Error}" : "Success"; - } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionResult.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionResult.cs new file mode 100644 index 00000000000..b23f5706214 --- /dev/null +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionResult.cs @@ -0,0 +1,23 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Nethermind.Evm.TransactionProcessing; +public readonly struct TransactionResult(string? error) +{ + public static readonly TransactionResult Ok = new(); + public static readonly TransactionResult MalformedTransaction = new("malformed"); + [MemberNotNullWhen(true, nameof(Fail))] + [MemberNotNullWhen(false, nameof(Success))] + public string? Error { get; } = error; + public bool Fail => Error is not null; + public bool Success => Error is null; + public static implicit operator TransactionResult(string? error) => new(error); + public static implicit operator bool(TransactionResult result) => result.Success; +} diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 64dd3236890..7a04e5d670a 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -29,6 +29,7 @@ namespace Nethermind.Evm; using System.Linq; using Int256; + public class VirtualMachine : IVirtualMachine { public const int MaxCallDepth = 1024; @@ -235,7 +236,7 @@ public TransactionSubstate Run(EvmState state, IWorldState worl if (typeof(TTracingActions) == typeof(IsTracing)) _txTracer.ReportActionError(callResult.ExceptionType); _state.Restore(currentState.Snapshot); - RevertParityTouchBugAccount(spec); + RevertParityTouchBugAccount(spec, state.Env.IsSystemEnv); if (currentState.IsTopLevel) { @@ -335,7 +336,7 @@ public TransactionSubstate Run(EvmState state, IWorldState worl if (gasAvailableForCodeDeposit >= codeDepositGasCost && !invalidCode) { ReadOnlyMemory code = callResult.Output; - codeInfoRepository.InsertCode(_state, code, callCodeOwner, spec); + codeInfoRepository.InsertCode(_state, code, callCodeOwner, spec, state.Env.IsSystemEnv); currentState.GasAvailable -= codeDepositGasCost; @@ -413,7 +414,7 @@ public TransactionSubstate Run(EvmState state, IWorldState worl _state.Restore(currentState.Snapshot); - RevertParityTouchBugAccount(spec); + RevertParityTouchBugAccount(spec, state.Env.IsSystemEnv); if (txTracer.IsTracingInstructions) { @@ -444,13 +445,13 @@ public TransactionSubstate Run(EvmState state, IWorldState worl } } - private void RevertParityTouchBugAccount(IReleaseSpec spec) + private void RevertParityTouchBugAccount(IReleaseSpec spec, bool isSystemEnv) { if (_parityTouchBugAccount.ShouldDelete) { if (_state.AccountExists(_parityTouchBugAccount.Address)) { - _state.AddToBalance(_parityTouchBugAccount.Address, UInt256.Zero, spec); + _state.AddToBalance(_parityTouchBugAccount.Address, UInt256.Zero, spec, isSystemEnv); } _parityTouchBugAccount.ShouldDelete = false; @@ -555,7 +556,7 @@ private CallResult ExecutePrecompile(EvmState state, IReleaseSpec spec) } else { - _state.AddToBalance(state.Env.ExecutingAccount, transferValue, spec); + _state.AddToBalance(state.Env.ExecutingAccount, transferValue, spec, state.Env.IsSystemEnv); } // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-161.md @@ -619,7 +620,7 @@ private CallResult ExecuteCall(EvmState vmState, ReadOnlyM } else { - _state.AddToBalance(env.ExecutingAccount, env.TransferValue, spec); + _state.AddToBalance(env.ExecutingAccount, env.TransferValue, spec, vmState.Env.IsSystemEnv); } if (vmState.ExecutionType.IsAnyCreate() && spec.ClearEmptyAccountWhenTouched) @@ -2081,6 +2082,7 @@ private EvmExceptionType InstructionCall( if (vmState.IsStatic && !transferValue.IsZero && instruction != Instruction.CALLCODE) return EvmExceptionType.StaticCallViolation; Address caller = instruction == Instruction.DELEGATECALL ? env.Caller : env.ExecutingAccount; + Address target = instruction == Instruction.CALL || instruction == Instruction.STATICCALL ? codeSource : env.ExecutingAccount; @@ -2130,8 +2132,7 @@ private EvmExceptionType InstructionCall( gasLimitUl += GasCostOf.CallStipend; } - if (env.CallDepth >= MaxCallDepth || - !transferValue.IsZero && _state.GetBalance(env.ExecutingAccount) < transferValue) + if (env.CallDepth >= MaxCallDepth || !transferValue.IsZero && _state.GetBalance(env.ExecutingAccount) < transferValue) { _returnDataBuffer = Array.Empty(); stack.PushZero(); @@ -2153,7 +2154,7 @@ private EvmExceptionType InstructionCall( } Snapshot snapshot = _state.TakeSnapshot(); - _state.SubtractFromBalance(caller, transferValue, spec); + _state.SubtractFromBalance(caller, transferValue, spec, env.IsSystemEnv); if (codeInfo.IsEmpty && typeof(TTracingInstructions) != typeof(IsTracing) && !_txTracer.IsTracingActions) { @@ -2175,7 +2176,8 @@ private EvmExceptionType InstructionCall( transferValue: transferValue, value: callValue, inputData: callData, - codeInfo: codeInfo + codeInfo: codeInfo, + isSystemExecutionEnv: env.IsSystemEnv ); if (typeof(TLogger) == typeof(IsTracing)) _logger.Trace($"Tx call gas {gasLimitUl}"); if (outputLength == 0) @@ -2301,13 +2303,13 @@ private EvmExceptionType InstructionSelfDestruct(EvmState vmState, ref } else if (!inheritor.Equals(executingAccount)) { - _state.AddToBalance(inheritor, result, spec); + _state.AddToBalance(inheritor, result, spec, vmState.Env.IsSystemEnv); } if (spec.SelfdestructOnlyOnSameTransaction && !createInSameTx && inheritor.Equals(executingAccount)) return EvmExceptionType.None; // don't burn eth when contract is not destroyed per EIP clarification - _state.SubtractFromBalance(executingAccount, result, spec); + _state.SubtractFromBalance(executingAccount, result, spec, vmState.Env.IsSystemEnv); return EvmExceptionType.None; } @@ -2414,7 +2416,7 @@ private EvmExceptionType InstructionSelfDestruct(EvmState vmState, ref _state.ClearStorage(contractAddress); } - _state.SubtractFromBalance(env.ExecutingAccount, value, spec); + _state.SubtractFromBalance(env.ExecutingAccount, value, spec, env.IsSystemEnv); // Do not add the initCode to the cache as it is // pointing to data in this tx and will become invalid @@ -2432,7 +2434,8 @@ private EvmExceptionType InstructionSelfDestruct(EvmState vmState, ref codeInfo: codeInfo, inputData: default, transferValue: value, - value: value + value: value, + isSystemExecutionEnv: env.IsSystemEnv ); EvmState callState = new( callGas, @@ -2748,30 +2751,13 @@ private void EndInstructionTraceError(long gasAvailable, EvmExceptionType evmExc _txTracer.ReportOperationError(evmExceptionType); } - private static ExecutionType GetCallExecutionType(Instruction instruction, bool isPostMerge = false) - { - ExecutionType executionType; - if (instruction == Instruction.CALL) + private static ExecutionType GetCallExecutionType(Instruction instruction, bool isPostMerge = false) => + instruction switch { - executionType = ExecutionType.CALL; - } - else if (instruction == Instruction.DELEGATECALL) - { - executionType = ExecutionType.DELEGATECALL; - } - else if (instruction == Instruction.STATICCALL) - { - executionType = ExecutionType.STATICCALL; - } - else if (instruction == Instruction.CALLCODE) - { - executionType = ExecutionType.CALLCODE; - } - else - { - throw new NotSupportedException($"Execution type is undefined for {instruction.GetName(isPostMerge)}"); - } - - return executionType; - } + Instruction.CALL => ExecutionType.CALL, + Instruction.DELEGATECALL => ExecutionType.DELEGATECALL, + Instruction.STATICCALL => ExecutionType.STATICCALL, + Instruction.CALLCODE => ExecutionType.CALLCODE, + _ => throw new NotSupportedException($"Execution type is undefined for {instruction.GetName(isPostMerge)}") + }; } diff --git a/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs index dc0925282ad..a40d330386a 100644 --- a/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs @@ -12,6 +12,7 @@ using Nethermind.Serialization.Rlp; using System.Text.Json.Serialization; using System.Runtime.CompilerServices; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Facade.Eth; @@ -82,6 +83,8 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s Uncles = block.Uncles.Select(o => o.Hash); Withdrawals = block.Withdrawals; WithdrawalsRoot = block.Header.WithdrawalsRoot; + Requests = block.Requests; + RequestsRoot = block.Header.RequestsRoot; } public Address Author { get; set; } @@ -139,4 +142,8 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Hash256? ParentBeaconBlockRoot { get; set; } + public IEnumerable? Requests { get; set; } + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public Hash256? RequestsRoot { get; set; } } diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index 718d51d7395..7dbcf7c23ab 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -23,8 +23,8 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) => codeInfoRepository.GetOrAdd(codeHash, initCode); - public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) => - codeInfoRepository.InsertCode(state, code, codeOwner, spec); + public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv) => + codeInfoRepository.InsertCode(state, code, codeOwner, spec, isSystemEnv); public void SetCodeOverwrite( IWorldState worldState, diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs index 447aa8855dd..26a538c8294 100644 --- a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs @@ -112,5 +112,6 @@ public IBlockProcessor GetProcessor(bool validate) => StateProvider, NullReceiptStorage.Instance, new BlockhashStore(SpecProvider, StateProvider), + _transactionProcessor, _logManager); } diff --git a/src/Nethermind/Nethermind.Init/InitializeStateDb.cs b/src/Nethermind/Nethermind.Init/InitializeStateDb.cs index 92a230e99b1..8c574eaf38c 100644 --- a/src/Nethermind/Nethermind.Init/InitializeStateDb.cs +++ b/src/Nethermind/Nethermind.Init/InitializeStateDb.cs @@ -86,6 +86,7 @@ public Task Execute(CancellationToken cancellationToken) syncConfig.DownloadBodiesInFastSync = true; } + _api.NodeStorageFactory.DetectCurrentKeySchemeFrom(getApi.DbProvider.StateDb); IKeyValueStore codeDb = getApi.DbProvider.CodeDb; IKeyValueStoreWithBatching stateDb = getApi.DbProvider.StateDb; IPersistenceStrategy persistenceStrategy; diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs index e3b3628f4e7..4cc16575599 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs @@ -238,6 +238,7 @@ protected virtual BlockProcessor CreateBlockProcessor(BlockCachePreWarmer? preWa worldState, _api.ReceiptStorage, new BlockhashStore(_api.SpecProvider!, worldState), + _api.TransactionProcessor, _api.LogManager, preWarmer: preWarmer ); diff --git a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs index 1eaddd43c83..f82c8ee6540 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs @@ -95,7 +95,7 @@ TransactionProcessor transactionProcessor IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor = new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider); BlockProcessor blockProcessor = new(specProvider, Always.Valid, new RewardCalculator(specProvider), transactionsExecutor, - stateProvider, NullReceiptStorage.Instance, new BlockhashStore(specProvider, stateProvider), LimboLogs.Instance); + stateProvider, NullReceiptStorage.Instance, new BlockhashStore(specProvider, stateProvider), transactionProcessor, LimboLogs.Instance); EthereumEcdsa ecdsa = new(specProvider.ChainId, LimboLogs.Instance); BlockchainProcessor blockchainProcessor = new( diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index 7f74b75145a..9d5fea089a8 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -362,7 +362,7 @@ public async Task Can_call_with_storage_load() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -375,7 +375,7 @@ public async Task Can_call_with_many_storage_loads() .Op(Instruction.SLOAD) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -388,7 +388,7 @@ public async Task Can_call_with_storage_write() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -402,7 +402,7 @@ public async Task Can_call_with_extcodecopy() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -416,7 +416,7 @@ public async Task Can_call_with_extcodecopy_to_system_account() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -427,7 +427,7 @@ public async Task Can_call_with_extcodesize() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -438,7 +438,7 @@ public async Task Can_call_with_extcodesize_to_system_account() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -450,7 +450,7 @@ public async Task Can_call_with_extcodehash() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -462,7 +462,7 @@ public async Task Can_call_with_extcodehash_to_system_account() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -473,7 +473,7 @@ public async Task Can_call_with_just_basic_addresses() .Op(Instruction.STOP) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -486,7 +486,7 @@ public async Task Can_call_with_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -498,7 +498,7 @@ public async Task Can_call_with_self_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -510,7 +510,7 @@ public async Task Can_call_with_balance_of_system_account() .Op(Instruction.BALANCE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -562,7 +562,7 @@ public async Task Can_call_with_delegate_call_to_system_account() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2)); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -598,7 +598,7 @@ public async Task Can_call_with_call_with_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -615,7 +615,7 @@ public async Task Can_call_with_static_call() .Op(Instruction.STATICCALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -632,7 +632,7 @@ public async Task Can_call_with_delegate_call() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(_createSystemAccount && _useNonZeroGasPrice ? 3 : 2)); + Assert.That(result.Accounts.Length, Is.EqualTo(_createSystemAccount ? 3 : 2)); } [TestCase] @@ -650,7 +650,7 @@ public async Task Can_call_with_call_with_non_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -663,7 +663,7 @@ public async Task Can_call_with_self_destruct() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -691,7 +691,7 @@ public async Task Can_call_with_many_storage_writes() .Op(Instruction.SSTORE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); } [TestCase] @@ -909,7 +909,7 @@ private void AddAccount(WorldState stateProvider, Address account, UInt256 initi private void AddCode(WorldState stateProvider, Address account, byte[] code) { - stateProvider.InsertCode(account, code, MuirGlacier.Instance); + stateProvider.InsertCode(account, code, MuirGlacier.Instance, false); stateProvider.Commit(MainnetSpecProvider.Instance.GenesisSpec, NullStateTracer.Instance); } } diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs index 9df80dcb638..c8b507d6412 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs @@ -76,6 +76,7 @@ public void Setup() stateProvider, NullReceiptStorage.Instance, new BlockhashStore(specProvider, stateProvider), + transactionProcessor, LimboLogs.Instance); RecoverSignatures txRecovery = new(new EthereumEcdsa(TestBlockchainIds.ChainId), NullTxPool.Instance, specProvider, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index cb62bfc5cb8..9fa1e0c60b4 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -14,6 +14,7 @@ using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Core; using Nethermind.Core.Crypto; @@ -42,8 +43,9 @@ public class AuRaMergeEngineModuleTests : EngineModuleTests protected override MergeTestBlockchain CreateBaseBlockchain( IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadService = null, - ILogManager? logManager = null) - => new MergeAuRaTestBlockchain(mergeConfig, mockedPayloadService); + ILogManager? logManager = null, + IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) + => new MergeAuRaTestBlockchain(mergeConfig, mockedPayloadService, logManager, mockedConsensusRequestsProcessor); protected override Hash256 ExpectedBlockHash => new("0x990d377b67dbffee4a60db6f189ae479ffb406e8abea16af55e0469b8524cf46"); @@ -56,10 +58,18 @@ int ErrorCode ) input) => base.forkchoiceUpdatedV2_should_validate_withdrawals(input); + [TestCase( + "0xe97d919a17fa5011ff3a08ffb07657ed9e1aaf5ff649888e5d7f605006caf598", + "0x91675165328fd9a5f25375eb1a468b65b927a1415afd18ff51eeef287ca71fae", + "0x692ba034d9dc8c4c2d7d172a2fb1f3773f8a250fde26501b99d2733a2b48e70b", + "0x3c6a8926870bdeff")] + public override Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) + => base.Should_process_block_as_expected_V4(latestValidHash, blockHash, stateRoot, payloadId); + [TestCase( "0xe168b70ac8a6f7d90734010030801fbb2dcce03a657155c4024b36ba8d1e3926", - "0x3e604e45a9a74b66a7e03f828cc2597f0cb5f5e7dc50c9211be3a62fbcd6396d", - "0xdbd87b98a6be7d4e3f11ff8500c38a0736d9a5e7a47b5cb25628d37187a98cb9", + "0x310f4c8c949eb758faa4497e293bb18ef27a465af16553e5fc03752d3be19cc3", + "0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f", "0xcdd08163eccae523")] public override Task Should_process_block_as_expected_V2(string latestValidHash, string blockHash, string stateRoot, string payloadId) => base.Should_process_block_as_expected_V2(latestValidHash, blockHash, stateRoot, payloadId); @@ -91,9 +101,10 @@ class MergeAuRaTestBlockchain : MergeTestBlockchain { private AuRaNethermindApi? _api; - public MergeAuRaTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null) - : base(mergeConfig, mockedPayloadPreparationService) + public MergeAuRaTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null, IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) + : base(mergeConfig, mockedPayloadPreparationService, logManager, mockedConsensusRequestsProcessor) { + ConsensusRequestsProcessor = mockedConsensusRequestsProcessor; SealEngineType = Core.SealEngineType.AuRa; } @@ -132,8 +143,10 @@ protected override IBlockProcessor CreateBlockProcessor() State, ReceiptStorage, new BlockhashStore(SpecProvider, State), + TxProcessor, LogManager, - WithdrawalProcessor); + WithdrawalProcessor, + consensusRequestsProcessor: ConsensusRequestsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } @@ -167,7 +180,8 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT TxPool, transactionComparerProvider, blocksConfig, - LogManager); + LogManager, + ConsensusRequestsProcessor); BlockProducerEnv blockProducerEnv = blockProducerEnvFactory.Create(); diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 1a55b725abd..21890e4e1f6 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -5,6 +5,7 @@ using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Validators; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; @@ -13,6 +14,7 @@ using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; @@ -20,8 +22,7 @@ namespace Nethermind.Merge.AuRa; public class AuRaMergeBlockProcessor : AuRaBlockProcessor { - public AuRaMergeBlockProcessor( - ISpecProvider specProvider, + public AuRaMergeBlockProcessor(ISpecProvider specProvider, IBlockValidator blockValidator, IRewardCalculator rewardCalculator, IBlockProcessor.IBlockTransactionsExecutor blockTransactionsExecutor, @@ -30,11 +31,13 @@ public AuRaMergeBlockProcessor( ILogManager logManager, IBlockTree blockTree, IWithdrawalProcessor withdrawalProcessor, - IAuRaValidator? validator, + ITransactionProcessor transactionProcessor, + IAuRaValidator? validator = null, ITxFilter? txFilter = null, AuRaContractGasLimitOverride? gasLimitOverride = null, ContractRewriter? contractRewriter = null, - IBlockCachePreWarmer? preWarmer = null + IBlockCachePreWarmer? preWarmer = null, + IConsensusRequestsProcessor? consensusRequestsProcessor = null ) : base( specProvider, blockValidator, @@ -45,11 +48,13 @@ public AuRaMergeBlockProcessor( logManager, blockTree, withdrawalProcessor, + transactionProcessor, validator, txFilter, gasLimitOverride, contractRewriter, - preWarmer + preWarmer, + consensusRequestsProcessor ) { } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index f91dac19352..128b6a6098c 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -4,14 +4,13 @@ using Nethermind.Blockchain; using Nethermind.Blockchain.Receipts; using Nethermind.Config; -using Nethermind.Consensus.AuRa.Config; using Nethermind.Consensus.AuRa.InitializationSteps; using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; -using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; @@ -24,6 +23,7 @@ namespace Nethermind.Merge.AuRa; public class AuRaMergeBlockProducerEnvFactory : BlockProducerEnvFactory { private readonly AuRaNethermindApi _auraApi; + private readonly IConsensusRequestsProcessor? _consensusRequestsProcessor; public AuRaMergeBlockProducerEnvFactory( AuRaNethermindApi auraApi, @@ -37,7 +37,8 @@ public AuRaMergeBlockProducerEnvFactory( ITxPool txPool, ITransactionComparerProvider transactionComparerProvider, IBlocksConfig blocksConfig, - ILogManager logManager) : base( + ILogManager logManager, + IConsensusRequestsProcessor? consensusRequestsProcessor = null) : base( worldStateManager, blockTree, specProvider, @@ -48,9 +49,11 @@ public AuRaMergeBlockProducerEnvFactory( txPool, transactionComparerProvider, blocksConfig, - logManager) + logManager, + consensusRequestsProcessor) { _auraApi = auraApi; + _consensusRequestsProcessor = consensusRequestsProcessor; } protected override BlockProcessor CreateBlockProcessor( @@ -77,9 +80,10 @@ protected override BlockProcessor CreateBlockProcessor( new AuraWithdrawalProcessor( withdrawalContractFactory.Create(readOnlyTxProcessingEnv.TransactionProcessor), logManager - ) - ), - null); + ) + ), + readOnlyTxProcessingEnv.TransactionProcessor, + consensusRequestsProcessor: _consensusRequestsProcessor); } protected override TxPoolTxSource CreateTxPoolTxSource( diff --git a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs index cf4b4d4b6be..90015484baa 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs @@ -5,7 +5,9 @@ using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.InitializationSteps; using Nethermind.Consensus.AuRa.Validators; +using Nethermind.Consensus.Withdrawals; using Nethermind.Consensus.Processing; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Transactions; using Nethermind.Core; using Nethermind.Evm.TransactionProcessing; @@ -44,6 +46,7 @@ protected override AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter, _api.BlockTree!, new AuraWithdrawalProcessor( withdrawalContractFactory.Create(transactionProcessor!), _api.LogManager), + _api.TransactionProcessor!, CreateAuRaValidator(), txFilter, GetGasLimitCalculator(), diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs new file mode 100644 index 00000000000..c16093dc3fb --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using MathNet.Numerics.Distributions; +using Nethermind.Consensus.Requests; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.State; +using Nethermind.State.Proofs; + +namespace Nethermind.Merge.Plugin.Test; + +public class ConsensusRequestsProcessorMock : IConsensusRequestsProcessor +{ + public static ConsensusRequest[] Requests = + [ + TestItem.DepositA_1Eth, + TestItem.DepositB_2Eth, + TestItem.WithdrawalRequestA, + TestItem.WithdrawalRequestB, + TestItem.ConsolidationRequestA, + TestItem.ConsolidationRequestB + ]; + + public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) + { + if (block.IsGenesis) + return; + + block.Body.Requests = Requests; + Hash256 root = new RequestsTrie(Requests).RootHash; + block.Header.RequestsRoot = root; + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index dd4de68d98d..5e6c8ab1c98 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -20,7 +20,8 @@ using Nethermind.Specs; using Nethermind.Specs.Forks; using Nethermind.State; -using Nethermind.Consensus.BeaconBlockRoot; +using Nethermind.Core.ConsensusRequests; +using Microsoft.CodeAnalysis; namespace Nethermind.Merge.Plugin.Test { @@ -28,7 +29,6 @@ namespace Nethermind.Merge.Plugin.Test public partial class EngineModuleTests { private static readonly DateTime Timestamp = DateTimeOffset.FromUnixTimeSeconds(1000).UtcDateTime; - private static readonly IBeaconBlockRootHandler _beaconBlockRootHandler = new BeaconBlockRootHandler(); private ITimestamper Timestamper { get; } = new ManualTimestamper(Timestamp); private void AssertExecutionStatusChanged(IBlockFinder blockFinder, Hash256 headBlockHash, Hash256 finalizedBlockHash, Hash256 safeBlockHash) @@ -124,7 +124,6 @@ private static ExecutionPayloadV3 CreateBlockRequestV3(MergeTestBlockchain chain blockRequestV3.TryGetBlock(out Block? block); Snapshot before = chain.State.TakeSnapshot(); - _beaconBlockRootHandler.ApplyContractStateChanges(block!, chain.SpecProvider.GenesisSpec, chain.State); var blockHashStore = new BlockhashStore(chain.SpecProvider, chain.State); blockHashStore.ApplyBlockhashStateChanges(block!.Header); chain.WithdrawalProcessor?.ProcessWithdrawals(block!, chain.SpecProvider.GenesisSpec); @@ -139,9 +138,63 @@ private static ExecutionPayloadV3 CreateBlockRequestV3(MergeTestBlockchain chain return blockRequestV3; } + private static ExecutionPayloadV4 CreateBlockRequestV4(MergeTestBlockchain chain, ExecutionPayload parent, Address miner, Withdrawal[]? withdrawals = null, + ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null, ConsensusRequest[]? requests = null) + { + ExecutionPayloadV4 blockRequestV4 = CreateBlockRequestInternal(parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, parentBeaconBlockRoot: parentBeaconBlockRoot, requests: requests); + blockRequestV4.TryGetBlock(out Block? block); + + Snapshot before = chain.State.TakeSnapshot(); + var blockHashStore = new BlockhashStore(chain.SpecProvider, chain.State); + blockHashStore.ApplyBlockhashStateChanges(block!.Header); + + chain.ConsensusRequestsProcessor?.ProcessRequests(chain.SpecProvider.GenesisSpec, chain.State, block!, Array.Empty()); + + chain.State.Commit(chain.SpecProvider.GenesisSpec); + chain.State.RecalculateStateRoot(); + blockRequestV4.StateRoot = chain.State.StateRoot; + chain.State.Restore(before); + + TryCalculateHash(blockRequestV4, out Hash256? hash); + blockRequestV4.BlockHash = hash; + return blockRequestV4; + } + private static T CreateBlockRequestInternal(ExecutionPayload parent, Address miner, Withdrawal[]? withdrawals = null, - ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null) where T : ExecutionPayload, new() + ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null, ConsensusRequest[]? requests = null + ) where T : ExecutionPayload, new() { + Deposit[]? deposits = null; + WithdrawalRequest[]? withdrawalRequests = null; + ConsolidationRequest[]? consolidationRequests = null; + + if (requests is not null) + { + (int depositCount, int withdrawalRequestCount, int consolidationRequestCount) = requests.GetTypeCounts(); + deposits = new Deposit[depositCount]; + withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; + consolidationRequests = new ConsolidationRequest[consolidationRequestCount]; + int depositIndex = 0; + int withdrawalRequestIndex = 0; + int consolidationRequestIndex = 0; + for (int i = 0; i < requests.Length; ++i) + { + ConsensusRequest request = requests[i]; + if (request.Type == ConsensusRequestsType.Deposit) + { + deposits[depositIndex++] = (Deposit)request; + } + else if (request.Type == ConsensusRequestsType.WithdrawalRequest) + { + withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)request; + } + else + { + consolidationRequests[consolidationRequestIndex++] = (ConsolidationRequest)request; + } + } + } + T blockRequest = new() { ParentHash = parent.BlockHash, @@ -157,6 +210,9 @@ private static T CreateBlockRequestInternal(ExecutionPayload parent, Address BlobGasUsed = blobGasUsed, ExcessBlobGas = excessBlobGas, ParentBeaconBlockRoot = parentBeaconBlockRoot, + DepositRequests = deposits, + WithdrawalRequests = withdrawalRequests, + ConsolidationRequests = consolidationRequests, }; blockRequest.SetTransactions(transactions ?? Array.Empty()); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs index da0502dba1e..3f4ee0c4213 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.PayloadProduction.cs @@ -343,8 +343,8 @@ public async Task TestTwoTransaction_SameContract_WithBlockImprovement() using SemaphoreSlim blockImprovementLock = new(0); - MergeTestBlockchain blockchain = CreateBaseBlockchain(null, null, LimboLogs.Instance); - blockchain.InitialStateMutator = (state) => + MergeTestBlockchain blockchain = CreateBaseBlockchain(logManager: LimboLogs.Instance); + blockchain.InitialStateMutator = state => { state.CreateAccount(new Address("0xBC2Fd1637C49839aDB7Bb57F9851EAE3194A90f7"), (UInt256)1200482917041833040, 1); }; @@ -472,7 +472,7 @@ public async Task Cannot_build_invalid_block_with_the_branch() // we build one more block on the same level Block block31B = chain.PostMergeBlockProducer!.PrepareEmptyBlock(block30.Header, payloadAttributes); - await rpc.engine_newPayloadV1(new ExecutionPayload(block31B)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(block31B)); // ...and we change the main chain, so main chain now is 30->31B, block improvement for block 32A is still in progress string? payloadId = rpc.engine_forkchoiceUpdatedV1( @@ -585,7 +585,7 @@ await rpc.engine_forkchoiceUpdatedV1( PostMergeBlockProducer blockProducer = chain.PostMergeBlockProducer!; Block emptyBlock = blockProducer.PrepareEmptyBlock(chain.BlockTree.Head!.Header, new PayloadAttributes { Timestamp = (ulong)DateTime.UtcNow.AddDays(5).Ticks, PrevRandao = TestItem.KeccakA, SuggestedFeeRecipient = Address.Zero }); - Task> result1 = await rpc.engine_newPayloadV1(new ExecutionPayload(emptyBlock)); + Task> result1 = await rpc.engine_newPayloadV1(ExecutionPayload.Create(emptyBlock)); result1.Result.Data.Status.Should().Be(PayloadStatus.Valid); } @@ -608,7 +608,7 @@ await rpc.engine_forkchoiceUpdatedV2( Withdrawals = [TestItem.WithdrawalA_1Eth] }; Block emptyBlock = blockProducer.PrepareEmptyBlock(chain.BlockTree.Head!.Header, payloadAttributes); - Task> result1 = await rpc.engine_newPayloadV2(new ExecutionPayload(emptyBlock)); + Task> result1 = await rpc.engine_newPayloadV2(ExecutionPayload.Create(emptyBlock)); result1.Result.Data.Status.Should().Be(PayloadStatus.Valid); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index c499adefe37..2f5d7471043 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -14,6 +14,7 @@ using Nethermind.Consensus.Comparers; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; +using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; @@ -25,14 +26,17 @@ using Nethermind.Crypto; using Nethermind.Db; using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Facade.Eth; using Nethermind.HealthChecks; using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Merge.Plugin.BlockProduction; using Nethermind.Merge.Plugin.GC; +using Nethermind.Merge.Plugin.handlers; using Nethermind.Merge.Plugin.Handlers; using Nethermind.Merge.Plugin.Synchronization; +using Nethermind.Merge.Plugin.Test.Synchronization; using Nethermind.Specs; using Nethermind.Specs.ChainSpecStyle; using Nethermind.Specs.Forks; @@ -52,19 +56,26 @@ public Task Setup() return KzgPolynomialCommitments.InitializeAsync(); } - protected virtual MergeTestBlockchain CreateBaseBlockchain(IMergeConfig? mergeConfig = null, - IPayloadPreparationService? mockedPayloadService = null, ILogManager? logManager = null) => - new(mergeConfig, mockedPayloadService, logManager); - - - protected async Task CreateBlockchain(IReleaseSpec? releaseSpec = null, IMergeConfig? mergeConfig = null, - IPayloadPreparationService? mockedPayloadService = null) - => await CreateBaseBlockchain(mergeConfig, mockedPayloadService) + protected virtual MergeTestBlockchain CreateBaseBlockchain( + IMergeConfig? mergeConfig = null, + IPayloadPreparationService? mockedPayloadService = null, + ILogManager? logManager = null, + IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) => + new(mergeConfig, mockedPayloadService, logManager, mockedConsensusRequestsProcessor); + + + protected async Task CreateBlockchain( + IReleaseSpec? releaseSpec = null, + IMergeConfig? mergeConfig = null, + IPayloadPreparationService? mockedPayloadService = null, + ILogManager? logManager = null, + IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) + => await CreateBaseBlockchain(mergeConfig, mockedPayloadService, logManager, mockedConsensusRequestsProcessor) .Build(new TestSingleReleaseSpecProvider(releaseSpec ?? London.Instance)); protected async Task CreateBlockchain(ISpecProvider specProvider, ILogManager? logManager = null) - => await CreateBaseBlockchain(null, null, logManager).Build(specProvider); + => await CreateBaseBlockchain(logManager: logManager).Build(specProvider); private IEngineRpcModule CreateEngineModule(MergeTestBlockchain chain, ISyncConfig? syncConfig = null, TimeSpan? newPayloadTimeout = null, int newPayloadCacheSize = 50) { @@ -94,6 +105,10 @@ private IEngineRpcModule CreateEngineModule(MergeTestBlockchain chain, ISyncConf chain.PayloadPreparationService!, chain.SpecProvider!, chain.LogManager), + new GetPayloadV4Handler( + chain.PayloadPreparationService!, + chain.SpecProvider!, + chain.LogManager), new NewPayloadHandler( chain.BlockValidator, chain.BlockTree, @@ -126,6 +141,8 @@ private IEngineRpcModule CreateEngineModule(MergeTestBlockchain chain, ISyncConf new BlocksConfig().SecondsPerSlot), new GetPayloadBodiesByHashV1Handler(chain.BlockTree, chain.LogManager), new GetPayloadBodiesByRangeV1Handler(chain.BlockTree, chain.LogManager), + new GetPayloadBodiesByHashV2Handler(chain.BlockTree, chain.LogManager), + new GetPayloadBodiesByRangeV2Handler(chain.BlockTree, chain.LogManager), new ExchangeTransitionConfigurationV1Handler(chain.PoSSwitcher, chain.LogManager), new ExchangeCapabilitiesHandler(capabilitiesProvider, chain.LogManager), chain.SpecProvider, @@ -163,13 +180,14 @@ public MergeTestBlockchain ThrottleBlockProcessor(int delayMs) return this; } - public MergeTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null) + public MergeTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null, IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) { GenesisBlockBuilder = Core.Test.Builders.Build.A.Block.Genesis.Genesis.WithTimestamp(1UL); MergeConfig = mergeConfig ?? new MergeConfig() { TerminalTotalDifficulty = "0" }; PayloadPreparationService = mockedPayloadPreparationService; SyncPeerPool = Substitute.For(); LogManager = logManager ?? LogManager; + ConsensusRequestsProcessor = mockedConsensusRequestsProcessor; } protected override Task AddBlocksOnStart() => Task.CompletedTask; @@ -207,8 +225,8 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT TxPool, transactionComparerProvider, blocksConfig, - LogManager); - + LogManager, + ConsensusRequestsProcessor); BlockProducerEnv blockProducerEnv = blockProducerEnvFactory.Create(); PostMergeBlockProducer? postMergeBlockProducer = blockProducerFactory.Create(blockProducerEnv); @@ -220,6 +238,8 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT LogManager, TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot), 50000); // by default we want to avoid cleanup payload effects in testing + + ConsensusRequestsProcessor ??= new ConsensusRequestsProcessor(TxProcessor); return new MergeBlockProducer(preMergeBlockProducer, postMergeBlockProducer, PoSSwitcher); } @@ -235,8 +255,10 @@ protected override IBlockProcessor CreateBlockProcessor() State, ReceiptStorage, new BlockhashStore(SpecProvider, State), + TxProcessor, LogManager, - WithdrawalProcessor); + WithdrawalProcessor, + consensusRequestsProcessor: ConsensusRequestsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Synchronization.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Synchronization.cs index 4b5e9ad8f13..c3c2f884436 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Synchronization.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Synchronization.cs @@ -55,7 +55,7 @@ public async Task forkChoiceUpdatedV1_unknown_block_initiates_syncing() .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - await rpc.engine_newPayloadV1(new ExecutionPayload(block)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(block)); // sync has not started yet chain.BeaconSync!.IsBeaconSyncHeadersFinished().Should().BeTrue(); chain.BeaconSync.IsBeaconSyncFinished(block.Header).Should().BeTrue(); @@ -225,7 +225,7 @@ public async Task forkChoiceUpdatedV1_unknown_block_parent_while_syncing_initiat .WithPostMergeFlag(true) .TestObject; - await rpc.engine_newPayloadV1(new ExecutionPayload(block)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(block)); // sync has not started yet chain.BeaconSync!.IsBeaconSyncHeadersFinished().Should().BeTrue(); chain.BeaconSync.IsBeaconSyncFinished(block.Header).Should().BeTrue(); @@ -259,7 +259,7 @@ public async Task forkChoiceUpdatedV1_unknown_block_parent_while_syncing_initiat pointers.LowestInsertedHeader = block.Header; AssertBlockTreePointers(chain.BlockTree, pointers); - await rpc.engine_newPayloadV1(new ExecutionPayload(nextUnconnectedBlock)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(nextUnconnectedBlock)); forkchoiceStateV1 = new(nextUnconnectedBlock.Hash!, startingHead, startingHead); forkchoiceUpdatedResult = await rpc.engine_forkchoiceUpdatedV1(forkchoiceStateV1); forkchoiceUpdatedResult.Data.PayloadStatus.Status.Should() @@ -298,7 +298,7 @@ public async Task should_return_invalid_lvh_null_on_invalid_blocks_during_the_sy .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - ExecutionPayload startingNewPayload = new(block); + ExecutionPayload startingNewPayload = ExecutionPayload.Create(block); await rpc.engine_newPayloadV1(startingNewPayload); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); @@ -320,7 +320,7 @@ public async Task should_return_invalid_lvh_null_on_invalid_blocks_during_the_sy r.TryGetBlock(out Block? newBlock); newBlock!.Header.GasLimit = long.MaxValue; // incorrect gas limit newBlock.Header.Hash = newBlock.CalculateHash(); - ResultWrapper payloadStatus = await rpc.engine_newPayloadV1(new ExecutionPayload(newBlock)); + ResultWrapper payloadStatus = await rpc.engine_newPayloadV1(ExecutionPayload.Create(newBlock)); payloadStatus.Data.Status.Should().Be(nameof(PayloadStatusV1.Invalid).ToUpper()); payloadStatus.Data.LatestValidHash.Should().BeNull(); } @@ -333,7 +333,7 @@ public async Task newPayloadV1_can_insert_blocks_from_cache_when_syncing() IEngineRpcModule rpc = CreateEngineModule(chain); Hash256 startingHead = chain.BlockTree.HeadHash; - ExecutionPayload parentBlockRequest = new(Build.A.Block.WithNumber(2).TestObject); + ExecutionPayload parentBlockRequest = ExecutionPayload.Create(Build.A.Block.WithNumber(2).TestObject); ExecutionPayload[] requests = CreateBlockRequestBranch(chain, parentBlockRequest, Address.Zero, 7); ResultWrapper payloadStatus; foreach (ExecutionPayload r in requests) @@ -391,7 +391,7 @@ public async Task first_new_payload_set_beacon_main_chain() .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - ExecutionPayload startingNewPayload = new(block); + ExecutionPayload startingNewPayload = ExecutionPayload.Create(block); await rpc.engine_newPayloadV1(startingNewPayload); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); ResultWrapper forkchoiceUpdatedResult = @@ -432,7 +432,7 @@ public async Task repeated_new_payloads_do_not_change_metadata() .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - ExecutionPayload startingNewPayload = new(block); + ExecutionPayload startingNewPayload = ExecutionPayload.Create(block); await rpc.engine_newPayloadV1(startingNewPayload); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); ResultWrapper forkchoiceUpdatedResult = @@ -490,7 +490,7 @@ public async Task Can_set_beacon_pivot_in_new_payload_if_null() newBlock2.CalculateHash(); chain.BeaconPivot!.BeaconPivotExists().Should().BeFalse(); - ResultWrapper result = await rpc.engine_newPayloadV1(new ExecutionPayload(newBlock2)); + ResultWrapper result = await rpc.engine_newPayloadV1(ExecutionPayload.Create(newBlock2)); result.Data.Status.Should().Be(PayloadStatus.Syncing); chain.BeaconPivot.BeaconPivotExists().Should().BeTrue(); } @@ -524,7 +524,7 @@ public async Task BeaconMainChain_is_correctly_set_when_block_was_not_processed( .WithStateRoot(new Hash256("0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f")).TestObject; newBlock2.CalculateHash(); - await rpc.engine_newPayloadV1(new ExecutionPayload(newBlock2)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(newBlock2)); await rpc.engine_forkchoiceUpdatedV1(new ForkchoiceStateV1(newBlock2.Hash!, newBlock2.Hash!, newBlock2.Hash!), null); chain.BlockTree.FindLevel(10)!.BlockInfos[0].Metadata.Should().Be(BlockMetadata.None); @@ -562,7 +562,7 @@ public async Task Repeated_block_do_not_change_metadata() newBlock2.CalculateHash(); await chain.BlockTree.SuggestBlockAsync(newBlock2!, BlockTreeSuggestOptions.FillBeaconBlock); - await rpc.engine_newPayloadV1(new ExecutionPayload(newBlock2)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(newBlock2)); Block? block = chain.BlockTree.FindBlock(newBlock2.GetOrCalculateHash(), BlockTreeLookupOptions.None); block?.TotalDifficulty.Should().NotBe((UInt256)0); BlockInfo? blockInfo = chain.BlockTree.FindLevel(newBlock2.Number!)?.BlockInfos[0]; @@ -590,7 +590,7 @@ public async Task second_new_payload_should_not_set_beacon_main_chain() .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - ExecutionPayload startingNewPayload = new(block); + ExecutionPayload startingNewPayload = ExecutionPayload.Create(block); await rpc.engine_newPayloadV1(startingNewPayload); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); ResultWrapper forkchoiceUpdatedResult = @@ -650,7 +650,7 @@ public async Task should_reorg_during_the_sync(int initialChainPayloadsCount, in .WithAuthor(Address.Zero) .WithPostMergeFlag(true) .TestObject; - ExecutionPayload startingNewPayload = new(block); + ExecutionPayload startingNewPayload = ExecutionPayload.Create(block); await rpc.engine_newPayloadV1(startingNewPayload); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); await rpc.engine_forkchoiceUpdatedV1(forkchoiceStateV1); @@ -691,7 +691,7 @@ public async Task Blocks_from_cache_inserted_when_fast_headers_sync_finish_befor using MergeTestBlockchain chain = await CreateBlockchain(); Hash256 startingHead = chain.BlockTree.HeadHash; IEngineRpcModule rpc = CreateEngineModule(chain); - ExecutionPayload[] requests = CreateBlockRequestBranch(chain, new ExecutionPayload(chain.BlockTree.Head!), Address.Zero, 7); + ExecutionPayload[] requests = CreateBlockRequestBranch(chain, ExecutionPayload.Create(chain.BlockTree.Head!), Address.Zero, 7); ResultWrapper payloadStatus; for (int i = 4; i < requests.Length - 1; i++) @@ -739,7 +739,7 @@ public async Task Maintain_correct_pointers_for_beacon_sync_in_archive_sync() Hash256 startingHead = chain.BlockTree.HeadHash; // create 7 block gap int gap = 7; - ExecutionPayload headBlockRequest = new(chain.BlockTree.Head!); + ExecutionPayload headBlockRequest = ExecutionPayload.Create(chain.BlockTree.Head!); Block[] missingBlocks = new Block[gap]; for (int i = 0; i < gap; i++) { @@ -851,7 +851,7 @@ public async Task Blocks_before_pivots_should_not_be_added_if_node_has_never_bee IEngineRpcModule rpc = CreateEngineModule(chain, syncConfig); Block blockBeforePivot = syncedBlockTree.FindBlock(2, BlockTreeLookupOptions.None)!; - ExecutionPayload prePivotRequest = new(blockBeforePivot); + ExecutionPayload prePivotRequest = ExecutionPayload.Create(blockBeforePivot); ResultWrapper payloadStatus = await rpc.engine_newPayloadV1(prePivotRequest); payloadStatus.Data.Status.Should().Be(nameof(PayloadStatusV1.Syncing).ToUpper()); chain.BlockTree.FindBlock(prePivotRequest.BlockHash).Should().BeNull(); @@ -876,7 +876,7 @@ public async Task Blocks_before_pivots_should_not_be_added_if_node_has_been_sync IEngineRpcModule rpc = CreateEngineModule(chain, syncConfig); Block blockBeforePivot = syncedBlockTree.FindBlock(2, BlockTreeLookupOptions.None)!; - ExecutionPayload prePivotRequest = new(blockBeforePivot); + ExecutionPayload prePivotRequest = ExecutionPayload.Create(blockBeforePivot); ResultWrapper payloadStatus = await rpc.engine_newPayloadV1(prePivotRequest); payloadStatus.Data.Status.Should().Be(nameof(PayloadStatus.Valid).ToUpper()); chain.BlockTree.FindBlock(prePivotRequest.BlockHash).Should().NotBeNull(); @@ -898,7 +898,7 @@ public async Task Maintain_correct_pointers_for_beacon_sync_in_fast_sync() // create block gap from fast sync pivot int gap = 7; ExecutionPayload[] requests = - CreateBlockRequestBranch(chain, new ExecutionPayload(syncedBlockTree.Head!), Address.Zero, gap); + CreateBlockRequestBranch(chain, ExecutionPayload.Create(syncedBlockTree.Head!), Address.Zero, gap); // setting up beacon pivot ExecutionPayload pivotRequest = CreateBlockRequest(chain, requests[^1], Address.Zero); ResultWrapper payloadStatus = await rpc.engine_newPayloadV1(pivotRequest); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs index 9f3f8db4439..0e6d59ef663 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V1.cs @@ -445,7 +445,7 @@ public async Task executePayloadV1_rejects_block_with_invalid_receiptsRoot() [Test] public async Task executePayloadV1_result_is_fail_when_blockchainprocessor_report_exception() { - using MergeTestBlockchain chain = await CreateBaseBlockchain(null, null) + using MergeTestBlockchain chain = await CreateBaseBlockchain() .Build(new TestSingleReleaseSpecProvider(London.Instance)); IEngineRpcModule rpc = CreateEngineModule(chain); @@ -481,7 +481,7 @@ public virtual async Task executePayloadV1_accepts_already_known_block(bool thro await chain.BlockTree.SuggestBlockAsync(block!); await bestBlockProcessed.WaitAsync(); - ExecutionPayload blockRequest = new(block); + ExecutionPayload blockRequest = ExecutionPayload.Create(block); ResultWrapper executePayloadResult = await rpc.engine_newPayloadV1(blockRequest); executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); } @@ -641,13 +641,13 @@ public async Task forkChoiceUpdatedV1_no_common_branch_fails() Block parent = Build.A.Block.WithNumber(2).WithParentHash(TestItem.KeccakA).WithNonce(0).WithDifficulty(0).TestObject; Block block = Build.A.Block.WithNumber(3).WithParent(parent).WithNonce(0).WithDifficulty(0).TestObject; - await rpc.engine_newPayloadV1(new ExecutionPayload(parent)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(parent)); ForkchoiceStateV1 forkchoiceStateV1 = new(parent.Hash!, startingHead, startingHead); ResultWrapper forkchoiceUpdatedResult = await rpc.engine_forkchoiceUpdatedV1(forkchoiceStateV1); forkchoiceUpdatedResult.Data.PayloadStatus.Status.Should().Be("SYNCING"); - await rpc.engine_newPayloadV1(new ExecutionPayload(block)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(block)); ForkchoiceStateV1 forkchoiceStateV11 = new(parent.Hash!, startingHead, startingHead); ResultWrapper forkchoiceUpdatedResult_1 = await rpc.engine_forkchoiceUpdatedV1(forkchoiceStateV11); @@ -668,7 +668,7 @@ public async Task forkChoiceUpdatedV1_block_still_processing() chain.ThrottleBlockProcessor(200); ResultWrapper newPayloadV1 = - await rpc.engine_newPayloadV1(new ExecutionPayload(block)); + await rpc.engine_newPayloadV1(ExecutionPayload.Create(block)); newPayloadV1.Data.Status.Should().Be("SYNCING"); ForkchoiceStateV1 forkchoiceStateV1 = new(block.Hash!, startingHead, startingHead); @@ -696,7 +696,7 @@ public async Task AlreadyKnown_not_cached_block_should_return_valid() .WithBeneficiary(Build.An.Address.TestObject) .TestObject; - (await rpc.engine_newPayloadV1(new ExecutionPayload(b4))).Data.Status.Should().Be(PayloadStatus.Valid); + (await rpc.engine_newPayloadV1(ExecutionPayload.Create(b4))).Data.Status.Should().Be(PayloadStatus.Valid); Block? b5 = Build.A.Block .WithNumber(b4.Number + 1) @@ -706,8 +706,8 @@ public async Task AlreadyKnown_not_cached_block_should_return_valid() .WithStateRoot(b4.StateRoot!) .TestObject; - (await rpc.engine_newPayloadV1(new ExecutionPayload(b5))).Data.Status.Should().Be(PayloadStatus.Valid); - (await rpc.engine_newPayloadV1(new ExecutionPayload(b5))).Data.Status.Should().Be(PayloadStatus.Valid); + (await rpc.engine_newPayloadV1(ExecutionPayload.Create(b5))).Data.Status.Should().Be(PayloadStatus.Valid); + (await rpc.engine_newPayloadV1(ExecutionPayload.Create(b5))).Data.Status.Should().Be(PayloadStatus.Valid); } [Test, NonParallelizable] @@ -741,8 +741,8 @@ public async Task Invalid_block_on_processing_wont_be_accepted_if_sent_twice_in_ .TestObject; chain.ThrottleBlockProcessor(1000); // throttle the block processor enough so that the block processing queue is never empty - (await rpc.engine_newPayloadV1(new ExecutionPayload(block))).Data.Status.Should().Be(PayloadStatus.Syncing); - (await rpc.engine_newPayloadV1(new ExecutionPayload(block))).Data.Status.Should().BeOneOf(PayloadStatus.Syncing); + (await rpc.engine_newPayloadV1(ExecutionPayload.Create(block))).Data.Status.Should().Be(PayloadStatus.Syncing); + (await rpc.engine_newPayloadV1(ExecutionPayload.Create(block))).Data.Status.Should().BeOneOf(PayloadStatus.Syncing); } [Test] @@ -849,10 +849,10 @@ public async Task executePayloadV1_on_top_of_terminal_block() .WithStateRoot(new Hash256("0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f")) .WithDifficulty(0).WithNonce(0).TestObject; firstPoSBlock.CalculateHash(); - ExecutionPayload executionPayload = new(firstPoSBlock); + ExecutionPayload executionPayload = ExecutionPayload.Create(firstPoSBlock); ResultWrapper resultWrapper = await rpc.engine_newPayloadV1(executionPayload); resultWrapper.Data.Status.Should().Be(PayloadStatus.Valid); - new ExecutionPayload(chain.BlockTree.BestSuggestedBody!).Should().BeEquivalentTo(executionPayload); + ExecutionPayload.Create(chain.BlockTree.BestSuggestedBody!).Should().BeEquivalentTo(executionPayload); } [Test] @@ -894,7 +894,7 @@ public async Task executePayloadV1_on_top_of_not_processed_invalid_terminal_bloc .WithStateRoot(new Hash256("0x1ef7300d8961797263939a3d29bbba4ccf1702fabf02d8ad7a20b454edb6fd2f")) .WithDifficulty(0).WithNonce(0).TestObject; firstPoSBlock.CalculateHash(); - ExecutionPayload executionPayload = new(firstPoSBlock); + ExecutionPayload executionPayload = ExecutionPayload.Create(firstPoSBlock); ResultWrapper resultWrapper = await rpc.engine_newPayloadV1(executionPayload); resultWrapper.Data.Status.Should().Be(PayloadStatus.Invalid); resultWrapper.Data.LatestValidHash.Should().Be(Keccak.Zero); @@ -908,7 +908,7 @@ public async Task executePayloadV1_accepts_first_block() ExecutionPayload executionPayload = CreateBlockRequest(chain, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD); ResultWrapper resultWrapper = await rpc.engine_newPayloadV1(executionPayload); resultWrapper.Data.Status.Should().Be(PayloadStatus.Valid); - new ExecutionPayload(chain.BlockTree.BestSuggestedBody!).Should().BeEquivalentTo(executionPayload); + ExecutionPayload.Create(chain.BlockTree.BestSuggestedBody!).Should().BeEquivalentTo(executionPayload); } [Test] @@ -1530,7 +1530,7 @@ public async Task Should_return_ClientVersionV1() [Test] public async Task Should_return_capabilities() { - using MergeTestBlockchain chain = await CreateBlockchain(Cancun.Instance); + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance); IEngineRpcModule rpcModule = CreateEngineModule(chain); IOrderedEnumerable expected = typeof(IEngineRpcModule).GetMethods() .Select(m => m.Name) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs index 1e8855b494e..7eda65bf5cb 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs @@ -110,8 +110,7 @@ public virtual async Task Should_process_block_as_expected_V2(string latestValid }, Array.Empty(), Array.Empty(), - withdrawals - ); + withdrawals); GetPayloadV2Result expectedPayload = new(block, UInt256.Zero); response = await RpcTest.TestSerializedRequest(rpc, "engine_getPayloadV2", expectedPayloadId); @@ -125,7 +124,7 @@ public virtual async Task Should_process_block_as_expected_V2(string latestValid })); response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV2", - chain.JsonSerializer.Serialize(new ExecutionPayload(block))); + chain.JsonSerializer.Serialize(ExecutionPayload.Create(block))); successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); @@ -478,7 +477,7 @@ await rpc.engine_forkchoiceUpdatedV2(new ForkchoiceStateV1(executionPayload1.Blo .WithWithdrawals(withdrawals.ToArray()) .TestObject; - ResultWrapper fcuResult = await rpc.engine_newPayloadV2(new ExecutionPayload(newBlock)); + ResultWrapper fcuResult = await rpc.engine_newPayloadV2(ExecutionPayload.Create(newBlock)); fcuResult.Data.Status.Should().Be(PayloadStatus.Valid); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs index ebc6b40d7c2..c97412ffb34 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs @@ -355,10 +355,13 @@ public async Task NewPayloadV3_should_verify_blob_versioned_hashes_again Substitute.For>(), Substitute.For>(), Substitute.For>(), + Substitute.For>(), newPayloadHandlerMock, Substitute.For(), - Substitute.For, IEnumerable>>(), + Substitute.For, IEnumerable>>(), Substitute.For(), + Substitute.For, IEnumerable>>(), + Substitute.For(), Substitute.For>(), Substitute.For, IEnumerable>>(), chain.SpecProvider, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs new file mode 100644 index 00000000000..7ec6ba4f282 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -0,0 +1,505 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using FluentAssertions; +using Nethermind.Blockchain; +using Nethermind.Consensus.Producers; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; +using Nethermind.Core.Test.Builders; +using Nethermind.Int256; +using Nethermind.JsonRpc; +using Nethermind.JsonRpc.Test; +using Nethermind.Merge.Plugin.Data; +using Nethermind.Specs.Forks; +using NSubstitute; +using NUnit.Framework; + +namespace Nethermind.Merge.Plugin.Test; + +public partial class EngineModuleTests +{ + [TestCase( + "0x948f67f47376af5d09cc39ec25a84c84774f14b2e80289064c2de73db33cc573", + "0xb8e06e1a99d81358edd0a581fef980aff00cc9c316da8119bec7a13a6e6fa167", + "0xa272b2f949e4a0e411c9b45542bd5d0ef3c311b5f26c4ed6b7a8d4f605a91154", + "0x96b752d22831ad92")] + public virtual async Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, + string stateRoot, string payloadId) + { + using MergeTestBlockchain chain = + await CreateBlockchain(Prague.Instance, new MergeConfig { TerminalTotalDifficulty = "0" }); + IEngineRpcModule rpc = CreateEngineModule(chain); + Hash256 startingHead = chain.BlockTree.HeadHash; + Hash256 prevRandao = Keccak.Zero; + Address feeRecipient = TestItem.AddressC; + ulong timestamp = Timestamper.UnixTime.Seconds; + var fcuState = new + { + headBlockHash = startingHead.ToString(), + safeBlockHash = startingHead.ToString(), + finalizedBlockHash = Keccak.Zero.ToString() + }; + Withdrawal[] withdrawals = new[] + { + new Withdrawal { Index = 1, AmountInGwei = 3, Address = TestItem.AddressB, ValidatorIndex = 2 } + }; + var payloadAttrs = new + { + timestamp = timestamp.ToHexString(true), + prevRandao = prevRandao.ToString(), + suggestedFeeRecipient = feeRecipient.ToString(), + withdrawals, + parentBeaconBLockRoot = Keccak.Zero + }; + string?[] @params = new string?[] + { + chain.JsonSerializer.Serialize(fcuState), chain.JsonSerializer.Serialize(payloadAttrs) + }; + string expectedPayloadId = payloadId; + + string response = await RpcTest.TestSerializedRequest(rpc, "engine_forkchoiceUpdatedV3", @params!); + JsonRpcSuccessResponse? successResponse = chain.JsonSerializer.Deserialize(response); + + successResponse.Should().NotBeNull(); + response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse + { + Id = successResponse.Id, + Result = new ForkchoiceUpdatedV1Result + { + PayloadId = expectedPayloadId, + PayloadStatus = new PayloadStatusV1 + { + LatestValidHash = new(latestValidHash), + Status = PayloadStatus.Valid, + ValidationError = null + } + } + })); + + Hash256 expectedBlockHash = new(blockHash); + Block block = new( + new( + startingHead, + Keccak.OfAnEmptySequenceRlp, + feeRecipient, + UInt256.Zero, + 1, + chain.BlockTree.Head!.GasLimit, + timestamp, + Bytes.FromHexString("0x4e65746865726d696e64") // Nethermind + ) + { + BlobGasUsed = 0, + ExcessBlobGas = 0, + BaseFeePerGas = 0, + Bloom = Bloom.Empty, + GasUsed = 0, + Hash = expectedBlockHash, + MixHash = prevRandao, + ParentBeaconBlockRoot = Keccak.Zero, + ReceiptsRoot = chain.BlockTree.Head!.ReceiptsRoot!, + StateRoot = new(stateRoot), + }, + Array.Empty(), + Array.Empty(), + withdrawals); + GetPayloadV4Result expectedPayload = new(block, UInt256.Zero, new BlobsBundleV1(block)); + + response = await RpcTest.TestSerializedRequest(rpc, "engine_getPayloadV4", expectedPayloadId); + successResponse = chain.JsonSerializer.Deserialize(response); + + successResponse.Should().NotBeNull(); + response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse + { + Id = successResponse.Id, + Result = expectedPayload + })); + + response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV4", + chain.JsonSerializer.Serialize(ExecutionPayloadV4.Create(block)), "[]", Keccak.Zero.ToString(true)); + successResponse = chain.JsonSerializer.Deserialize(response); + + successResponse.Should().NotBeNull(); + response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse + { + Id = successResponse.Id, + Result = new PayloadStatusV1 + { + LatestValidHash = expectedBlockHash, + Status = PayloadStatus.Valid, + ValidationError = null + } + })); + + fcuState = new + { + headBlockHash = expectedBlockHash.ToString(true), + safeBlockHash = expectedBlockHash.ToString(true), + finalizedBlockHash = startingHead.ToString(true) + }; + @params = new[] { chain.JsonSerializer.Serialize(fcuState), null }; + + response = await RpcTest.TestSerializedRequest(rpc, "engine_forkchoiceUpdatedV3", @params!); + successResponse = chain.JsonSerializer.Deserialize(response); + + successResponse.Should().NotBeNull(); + response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse + { + Id = successResponse.Id, + Result = new ForkchoiceUpdatedV1Result + { + PayloadId = null, + PayloadStatus = new PayloadStatusV1 + { + LatestValidHash = expectedBlockHash, + Status = PayloadStatus.Valid, + ValidationError = null + } + } + })); + } + + [TestCase(30)] + public async Task can_progress_chain_one_by_one_v4(int count) + { + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance); + IEngineRpcModule rpc = CreateEngineModule(chain); + Hash256 lastHash = (await ProduceBranchV4(rpc, chain, count, CreateParentBlockRequestOnHead(chain.BlockTree), true)) + .LastOrDefault()?.BlockHash ?? Keccak.Zero; + chain.BlockTree.HeadHash.Should().Be(lastHash); + Block? last = RunForAllBlocksInBranch(chain.BlockTree, chain.BlockTree.HeadHash, b => b.IsGenesis, true); + last.Should().NotBeNull(); + last!.IsGenesis.Should().BeTrue(); + } + + [TestCase(30)] + public async Task can_progress_chain_one_by_one_v4_with_requests(int count) + { + ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + IEngineRpcModule rpc = CreateEngineModule(chain); + Hash256 lastHash = (await ProduceBranchV4(rpc, chain, count, CreateParentBlockRequestOnHead(chain.BlockTree), true)) + .LastOrDefault()?.BlockHash ?? Keccak.Zero; + chain.BlockTree.HeadHash.Should().Be(lastHash); + Block? last = RunForAllBlocksInBranch(chain.BlockTree, chain.BlockTree.HeadHash, b => b.IsGenesis, true); + last.Should().NotBeNull(); + last!.IsGenesis.Should().BeTrue(); + + Block? head = chain.BlockTree.Head; + head!.Requests!.Length.Should().Be(ConsensusRequestsProcessorMock.Requests.Length); + } + + private async Task> ProduceBranchV4(IEngineRpcModule rpc, + MergeTestBlockchain chain, + int count, ExecutionPayload startingParentBlock, bool setHead, Hash256? random = null) + { + List blocks = new(); + ExecutionPayload parentBlock = startingParentBlock; + parentBlock.TryGetBlock(out Block? block); + UInt256? startingTotalDifficulty = block!.IsGenesis + ? block.Difficulty : chain.BlockFinder.FindHeader(block!.Header!.ParentHash!)!.TotalDifficulty; + BlockHeader parentHeader = block!.Header; + parentHeader.TotalDifficulty = startingTotalDifficulty + + parentHeader.Difficulty; + for (int i = 0; i < count; i++) + { + ExecutionPayloadV4? getPayloadResult = await BuildAndGetPayloadOnBranchV4(rpc, chain, parentHeader, + parentBlock.Timestamp + 12, + random ?? TestItem.KeccakA, Address.Zero); + PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero)).Data; + payloadStatusResponse.Status.Should().Be(PayloadStatus.Valid); + if (setHead) + { + Hash256 newHead = getPayloadResult!.BlockHash; + ForkchoiceStateV1 forkchoiceStateV1 = new(newHead, newHead, newHead); + ResultWrapper setHeadResponse = await rpc.engine_forkchoiceUpdatedV3(forkchoiceStateV1); + setHeadResponse.Data.PayloadStatus.Status.Should().Be(PayloadStatus.Valid); + setHeadResponse.Data.PayloadId.Should().Be(null); + } + + blocks.Add(getPayloadResult); + parentBlock = getPayloadResult; + parentBlock.TryGetBlock(out block!); + block.Header.TotalDifficulty = parentHeader.TotalDifficulty + block.Header.Difficulty; + parentHeader = block.Header; + } + + return blocks; + } + + private async Task BuildAndGetPayloadOnBranchV4( + IEngineRpcModule rpc, MergeTestBlockchain chain, BlockHeader parentHeader, + ulong timestamp, Hash256 random, Address feeRecipient) + { + PayloadAttributes payloadAttributes = + new() { Timestamp = timestamp, PrevRandao = random, SuggestedFeeRecipient = feeRecipient, ParentBeaconBlockRoot = Keccak.Zero, Withdrawals = [] }; + + // we're using payloadService directly, because we can't use fcU for branch + string payloadId = chain.PayloadPreparationService!.StartPreparingPayload(parentHeader, payloadAttributes)!; + + ResultWrapper getPayloadResult = + await rpc.engine_getPayloadV4(Bytes.FromHexString(payloadId)); + return getPayloadResult.Data!.ExecutionPayload!; + } + + [Test] + public async Task getPayloadBodiesByRangeV2_should_fail_when_too_many_payloads_requested() + { + using MergeTestBlockchain chain = await CreateBlockchain(); + IEngineRpcModule rpc = CreateEngineModule(chain); + Task>> result = + rpc.engine_getPayloadBodiesByRangeV2(1, 1025); + + result.Result.ErrorCode.Should().Be(MergeErrorCodes.TooLargeRequest); + } + + [Test] + public async Task getPayloadBodiesByHashV2_should_fail_when_too_many_payloads_requested() + { + using MergeTestBlockchain chain = await CreateBlockchain(); + IEngineRpcModule rpc = CreateEngineModule(chain); + Hash256[] hashes = Enumerable.Repeat(TestItem.KeccakA, 1025).ToArray(); + Task>> result = + rpc.engine_getPayloadBodiesByHashV2(hashes); + + result.Result.ErrorCode.Should().Be(MergeErrorCodes.TooLargeRequest); + } + + [Test] + public async Task getPayloadBodiesByRangeV2_should_fail_when_params_below_1() + { + using MergeTestBlockchain chain = await CreateBlockchain(); + IEngineRpcModule rpc = CreateEngineModule(chain); + Task>> result = + rpc.engine_getPayloadBodiesByRangeV2(0, 1); + + result.Result.ErrorCode.Should().Be(ErrorCodes.InvalidParams); + + result = await rpc.engine_getPayloadBodiesByRangeV2(1, 0); + + result.Result.ErrorCode.Should().Be(ErrorCodes.InvalidParams); + } + + [Test] + public async Task getPayloadBodiesByRangeV2_should_return_up_to_best_body_number() + { + IBlockTree? blockTree = Substitute.For(); + + blockTree.FindBlock(Arg.Any()) + .Returns(i => Build.A.Block.WithNumber(i.ArgAt(0)).TestObject); + blockTree.Head.Returns(Build.A.Block.WithNumber(5).TestObject); + + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance); + chain.BlockTree = blockTree; + + IEngineRpcModule rpc = CreateEngineModule(chain); + IEnumerable payloadBodies = + rpc.engine_getPayloadBodiesByRangeV2(1, 7).Result.Data; + + payloadBodies.Count().Should().Be(5); + } + + private static IEnumerable> GetPayloadRequestsTestCases() + { + yield return ConsensusRequestsProcessorMock.Requests; + } + + [TestCaseSource(nameof(GetPayloadRequestsTestCases))] + public virtual async Task + getPayloadBodiesByHashV2_should_return_payload_bodies_in_order_of_request_block_hashes_and_null_for_unknown_hashes( + ConsensusRequest[]? requests) + { + + Deposit[]? deposits = null; + WithdrawalRequest[]? withdrawalRequests = null; + ConsolidationRequest[]? consolidationRequests = null; + + if (requests is not null) + { + (deposits, withdrawalRequests, consolidationRequests) = requests.SplitRequests(); + } + + ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); + + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + IEngineRpcModule rpc = CreateEngineModule(chain); + ExecutionPayloadV4 executionPayload1 = await SendNewBlockV3(rpc, chain, requests); + Transaction[] txs = BuildTransactions( + chain, executionPayload1.BlockHash, TestItem.PrivateKeyA, TestItem.AddressB, 3, 0, out _, out _); + + chain.AddTransactions(txs); + + ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV3(rpc, chain, true, Array.Empty()); + Hash256[] blockHashes = new Hash256[] + { + executionPayload1.BlockHash, TestItem.KeccakA, executionPayload2.BlockHash + }; + IEnumerable payloadBodies = + rpc.engine_getPayloadBodiesByHashV2(blockHashes).Result.Data; + ExecutionPayloadBodyV2Result?[] expected = { + new (Array.Empty(), Array.Empty() , deposits, withdrawalRequests, consolidationRequests), + null, + new (txs, Array.Empty(), deposits, withdrawalRequests, consolidationRequests), + }; + + payloadBodies.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering()); + } + + [TestCaseSource(nameof(GetPayloadRequestsTestCases))] + public virtual async Task + getPayloadBodiesByRangeV2_should_return_payload_bodies_in_order_of_request_range_and_null_for_unknown_indexes( + ConsensusRequest[]? requests) + { + + Deposit[]? deposits = null; + WithdrawalRequest[]? withdrawalRequests = null; + ConsolidationRequest[]? consolidationRequests = null; + + if (requests is not null) + { + (int depositCount, int withdrawalRequestCount, int consolidationRequestCount) = requests.GetTypeCounts(); + deposits = new Deposit[depositCount]; + withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; + consolidationRequests = new ConsolidationRequest[consolidationRequestCount]; + int depositIndex = 0; + int withdrawalRequestIndex = 0; + int consolidationRequestIndex = 0; + for (int i = 0; i < requests.Length; ++i) + { + ConsensusRequest request = requests[i]; + if (request.Type == ConsensusRequestsType.Deposit) + { + deposits[depositIndex++] = (Deposit)request; + } + else if (request.Type == ConsensusRequestsType.WithdrawalRequest) + { + withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)request; + } + else + { + consolidationRequests[consolidationRequestIndex++] = (ConsolidationRequest)request; + + } + } + } + + ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); + + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + IEngineRpcModule rpc = CreateEngineModule(chain); + ExecutionPayloadV4 executionPayload1 = await SendNewBlockV3(rpc, chain, requests); + Transaction[] txs = BuildTransactions( + chain, executionPayload1.BlockHash, TestItem.PrivateKeyA, TestItem.AddressB, 3, 0, out _, out _); + + chain.AddTransactions(txs); + + ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV3(rpc, chain, true, Array.Empty()); + + await rpc.engine_forkchoiceUpdatedV3(new ForkchoiceStateV1(executionPayload2.BlockHash!, + executionPayload2.BlockHash!, executionPayload2.BlockHash!)); + + + IEnumerable payloadBodies = + rpc.engine_getPayloadBodiesByRangeV2(1, 3).Result.Data; + ExecutionPayloadBodyV2Result?[] expected = + { + new (txs, Array.Empty() , deposits, withdrawalRequests, consolidationRequests), + }; + + payloadBodies.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering()); + + + } + + [Test] + public async Task getPayloadBodiesByRangeV2_empty_response() + { + using MergeTestBlockchain chain = await CreateBlockchain(); + IEngineRpcModule rpc = CreateEngineModule(chain); + IEnumerable payloadBodies = + rpc.engine_getPayloadBodiesByRangeV2(1, 1).Result.Data; + ExecutionPayloadBodyV2Result?[] expected = Array.Empty(); + + payloadBodies.Should().BeEquivalentTo(expected); + } + + private async Task SendNewBlockV3(IEngineRpcModule rpc, MergeTestBlockchain chain, ConsensusRequest[]? requests) + { + ExecutionPayloadV4 executionPayload = CreateBlockRequestV4(chain, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, Array.Empty(), 0, 0, Array.Empty(), parentBeaconBlockRoot: TestItem.KeccakA, requests: requests); + ResultWrapper executePayloadResult = await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot); + + executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); + + return executionPayload; + } + + private async Task BuildAndSendNewBlockV3( + IEngineRpcModule rpc, + MergeTestBlockchain chain, + bool waitForBlockImprovement, + Withdrawal[]? withdrawals) + { + Hash256 head = chain.BlockTree.HeadHash; + ulong timestamp = Timestamper.UnixTime.Seconds; + Hash256 random = Keccak.Zero; + Address feeRecipient = Address.Zero; + ExecutionPayloadV4 executionPayload = await BuildAndGetPayloadResultV3(rpc, chain, head, + Keccak.Zero, head, timestamp, random, feeRecipient, withdrawals, waitForBlockImprovement); + ResultWrapper executePayloadResult = + await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot); + executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); + return executionPayload; + } + + private async Task BuildAndGetPayloadResultV3( + IEngineRpcModule rpc, + MergeTestBlockchain chain, + Hash256 headBlockHash, + Hash256 finalizedBlockHash, + Hash256 safeBlockHash, + ulong timestamp, + Hash256 random, + Address feeRecipient, + Withdrawal[]? withdrawals, + bool waitForBlockImprovement = true) + { + using SemaphoreSlim blockImprovementLock = new SemaphoreSlim(0); + + if (waitForBlockImprovement) + { + chain.PayloadPreparationService!.BlockImproved += (s, e) => + { + blockImprovementLock.Release(1); + }; + } + + ForkchoiceStateV1 forkchoiceState = new ForkchoiceStateV1(headBlockHash, finalizedBlockHash, safeBlockHash); + PayloadAttributes payloadAttributes = new PayloadAttributes + { + Timestamp = timestamp, + PrevRandao = random, + SuggestedFeeRecipient = feeRecipient, + ParentBeaconBlockRoot = Keccak.Zero, + Withdrawals = withdrawals, + }; + + ResultWrapper result = rpc.engine_forkchoiceUpdatedV3(forkchoiceState, payloadAttributes).Result; + string? payloadId = result.Data.PayloadId; + + if (waitForBlockImprovement) + await blockImprovementLock.WaitAsync(10000); + + ResultWrapper getPayloadResult = + await rpc.engine_getPayloadV4(Bytes.FromHexString(payloadId!)); + + return getPayloadResult.Data!.ExecutionPayload!; + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs index 03ca0a9a2f6..e90d8d8401b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/BlockProduction/Boost/BoostBlockImprovementContext.cs @@ -55,7 +55,7 @@ public BoostBlockImprovementContext(Block currentBestBlock, CurrentBestBlock = block; BlockFees = _feesTracer.Fees; _stateReader.TryGetAccount(parentHeader.StateRoot!, payloadAttributes.SuggestedFeeRecipient, out account); - await _boostRelay.SendPayload(new BoostExecutionPayloadV1 { Block = new ExecutionPayload(block), Profit = account.Balance - balanceBefore }, cancellationToken); + await _boostRelay.SendPayload(new BoostExecutionPayloadV1 { Block = ExecutionPayload.Create(block), Profit = account.Balance - balanceBefore }, cancellationToken); } return CurrentBestBlock; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index 3b3e8c41c1a..4e33c0ce23a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using Nethermind.Core; using Nethermind.Core.Crypto; @@ -12,36 +12,20 @@ using Nethermind.Serialization.Rlp; using Nethermind.State.Proofs; using System.Text.Json.Serialization; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Merge.Plugin.Data; +public interface IExecutionPayloadFactory where TExecutionPayload : ExecutionPayload +{ + static abstract TExecutionPayload Create(Block block); +} + /// /// Represents an object mapping the ExecutionPayload structure of the beacon chain spec. /// -public class ExecutionPayload : IForkValidator, IExecutionPayloadParams +public class ExecutionPayload : IForkValidator, IExecutionPayloadParams, IExecutionPayloadFactory { - public ExecutionPayload() { } // Needed for tests - - public ExecutionPayload(Block block) - { - BlockHash = block.Hash!; - ParentHash = block.ParentHash!; - FeeRecipient = block.Beneficiary!; - StateRoot = block.StateRoot!; - BlockNumber = block.Number; - GasLimit = block.GasLimit; - GasUsed = block.GasUsed; - ReceiptsRoot = block.ReceiptsRoot!; - LogsBloom = block.Bloom!; - PrevRandao = block.MixHash ?? Keccak.Zero; - ExtraData = block.ExtraData!; - Timestamp = block.Timestamp; - BaseFeePerGas = block.BaseFeePerGas; - Withdrawals = block.Withdrawals; - - SetTransactions(block.Transactions); - } - public UInt256 BaseFeePerGas { get; set; } public Hash256 BlockHash { get; set; } = Keccak.Zero; @@ -92,6 +76,26 @@ public byte[][] Transactions public Withdrawal[]? Withdrawals { get; set; } + /// + /// Gets or sets a collection of as defined in + /// EIP-6110. + /// + public virtual Deposit[]? DepositRequests { get; set; } + + + /// + /// Gets or sets a collection of as defined in + /// EIP-7002. + /// + public virtual WithdrawalRequest[]? WithdrawalRequests { get; set; } + + /// + /// Gets or sets a collection of as defined in + /// EIP-7251. + /// + public virtual ConsolidationRequest[]? ConsolidationRequests { get; set; } + + /// /// Gets or sets as defined in /// EIP-4844. @@ -113,13 +117,38 @@ public byte[][] Transactions [JsonIgnore] public Hash256? ParentBeaconBlockRoot { get; set; } + public static ExecutionPayload Create(Block block) => Create(block); + + protected static TExecutionPayload Create(Block block) where TExecutionPayload : ExecutionPayload, new() + { + TExecutionPayload executionPayload = new() + { + BlockHash = block.Hash!, + ParentHash = block.ParentHash!, + FeeRecipient = block.Beneficiary!, + StateRoot = block.StateRoot!, + BlockNumber = block.Number, + GasLimit = block.GasLimit, + GasUsed = block.GasUsed, + ReceiptsRoot = block.ReceiptsRoot!, + LogsBloom = block.Bloom!, + PrevRandao = block.MixHash ?? Keccak.Zero, + ExtraData = block.ExtraData!, + Timestamp = block.Timestamp, + BaseFeePerGas = block.BaseFeePerGas, + Withdrawals = block.Withdrawals, + }; + executionPayload.SetTransactions(block.Transactions); + return executionPayload; + } + /// /// Creates the execution block from payload. /// /// When this method returns, contains the execution block. /// A total difficulty of the block. /// true if block created successfully; otherwise, false. - public virtual bool TryGetBlock(out Block? block, UInt256? totalDifficulty = null) + public virtual bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? totalDifficulty = null) { try { @@ -195,7 +224,7 @@ public void SetTransactions(params Transaction[] transactions) ExecutionPayload IExecutionPayloadParams.ExecutionPayload => this; - public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error) + public ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error) { if (spec.IsEip4844Enabled) { @@ -203,12 +232,13 @@ public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, o return ValidationResult.Fail; } - int actualVersion = this switch + if (spec.RequestsEnabled) { - { BlobGasUsed: not null } or { ExcessBlobGas: not null } or { ParentBeaconBlockRoot: not null } => 3, - { Withdrawals: not null } => 2, - _ => 1 - }; + error = "ExecutionPayloadV4 expected"; + return ValidationResult.Fail; + } + + var actualVersion = GetExecutionPayloadVersion(); error = actualVersion switch { @@ -220,6 +250,14 @@ public virtual ValidationResult ValidateParams(IReleaseSpec spec, int version, o return error is null ? ValidationResult.Success : ValidationResult.Fail; } + private int GetExecutionPayloadVersion() => this switch + { + { DepositRequests: not null, WithdrawalRequests: not null } => 4, + { BlobGasUsed: not null } or { ExcessBlobGas: not null } or { ParentBeaconBlockRoot: not null } => 3, + { Withdrawals: not null } => 2, + _ => 1 + }; + public virtual bool ValidateFork(ISpecProvider specProvider) => !specProvider.GetSpec(BlockNumber, Timestamp).IsEip4844Enabled; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV1Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV1Result.cs index 2b20e438649..f6733147ad1 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV1Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV1Result.cs @@ -13,7 +13,7 @@ namespace Nethermind.Merge.Plugin.Data; public class ExecutionPayloadBodyV1Result { - public ExecutionPayloadBodyV1Result(IList transactions, IList? withdrawals) + public ExecutionPayloadBodyV1Result(IReadOnlyList transactions, IReadOnlyList? withdrawals) { ArgumentNullException.ThrowIfNull(transactions); @@ -28,8 +28,8 @@ public ExecutionPayloadBodyV1Result(IList transactions, IList Transactions { get; set; } + public IReadOnlyList Transactions { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public IList? Withdrawals { get; set; } + public IReadOnlyList? Withdrawals { get; set; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs new file mode 100644 index 00000000000..d929fcf6fd8 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using System.Text.Json.Serialization; + +namespace Nethermind.Merge.Plugin.Data; + +public class ExecutionPayloadBodyV2Result : ExecutionPayloadBodyV1Result +{ + public ExecutionPayloadBodyV2Result( + IReadOnlyList transactions, + IReadOnlyList? withdrawals, + IReadOnlyList? deposits, + IReadOnlyList? withdrawalsRequests, + IReadOnlyList? consolidationRequests + ) + : base(transactions, withdrawals) + { + DepositRequests = deposits; + WithdrawalRequests = withdrawalsRequests; + ConsolidationRequests = consolidationRequests; + } + + /// + /// Deposit requests . + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public IReadOnlyList? DepositRequests { get; set; } + + /// + /// Withdrawal requests . + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public IReadOnlyList? WithdrawalRequests { get; set; } + + /// + /// Consolidation requests . + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public IReadOnlyList? ConsolidationRequests { get; set; } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs index ff236bab63d..f05e355b183 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs @@ -1,8 +1,10 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Diagnostics.CodeAnalysis; using System.Text.Json.Serialization; using Nethermind.Core; +using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Int256; @@ -11,27 +13,29 @@ namespace Nethermind.Merge.Plugin.Data; /// /// Represents an object mapping the ExecutionPayloadV3 structure of the beacon chain spec. /// -public class ExecutionPayloadV3 : ExecutionPayload +public class ExecutionPayloadV3 : ExecutionPayload, IExecutionPayloadFactory { - public ExecutionPayloadV3() { } // Needed for tests - - public ExecutionPayloadV3(Block block) : base(block) + protected new static TExecutionPayload Create(Block block) where TExecutionPayload : ExecutionPayloadV3, new() { - ParentBeaconBlockRoot = block.ParentBeaconBlockRoot; - BlobGasUsed = block.BlobGasUsed; - ExcessBlobGas = block.ExcessBlobGas; + TExecutionPayload executionPayload = ExecutionPayload.Create(block); + executionPayload.ParentBeaconBlockRoot = block.ParentBeaconBlockRoot; + executionPayload.BlobGasUsed = block.BlobGasUsed; + executionPayload.ExcessBlobGas = block.ExcessBlobGas; + return executionPayload; } - public override bool TryGetBlock(out Block? block, UInt256? totalDifficulty = null) + public new static ExecutionPayloadV3 Create(Block block) => Create(block); + + public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? totalDifficulty = null) { if (!base.TryGetBlock(out block, totalDifficulty)) { return false; } - block!.Header.ParentBeaconBlockRoot = ParentBeaconBlockRoot; - block!.Header.BlobGasUsed = BlobGasUsed; - block!.Header.ExcessBlobGas = ExcessBlobGas; + block.Header.ParentBeaconBlockRoot = ParentBeaconBlockRoot; + block.Header.BlobGasUsed = BlobGasUsed; + block.Header.ExcessBlobGas = ExcessBlobGas; return true; } @@ -43,12 +47,12 @@ public override bool ValidateFork(ISpecProvider specProvider) => /// EIP-4844. /// [JsonRequired] - public override ulong? BlobGasUsed { get; set; } + public sealed override ulong? BlobGasUsed { get; set; } /// /// Gets or sets as defined in /// EIP-4844. /// [JsonRequired] - public override ulong? ExcessBlobGas { get; set; } + public sealed override ulong? ExcessBlobGas { get; set; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs new file mode 100644 index 00000000000..37fd1941352 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -0,0 +1,111 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.InteropServices.JavaScript; +using System.Text.Json.Serialization; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Int256; +using Nethermind.State.Proofs; + +namespace Nethermind.Merge.Plugin.Data; + +/// +/// Represents an object mapping the ExecutionPayloadV4 structure of the beacon chain spec. +/// +public class ExecutionPayloadV4 : ExecutionPayloadV3, IExecutionPayloadFactory +{ + protected new static TExecutionPayload Create(Block block) where TExecutionPayload : ExecutionPayloadV4, new() + { + TExecutionPayload executionPayload = ExecutionPayloadV3.Create(block); + ConsensusRequest[]? blockRequests = block.Requests; + if (blockRequests is null) + { + executionPayload.DepositRequests = Array.Empty(); + executionPayload.WithdrawalRequests = Array.Empty(); + executionPayload.ConsolidationRequests = Array.Empty(); + } + else + { + (executionPayload.DepositRequests, executionPayload.WithdrawalRequests, executionPayload.ConsolidationRequests) = blockRequests.SplitRequests(); + } + + return executionPayload; + } + + public new static ExecutionPayloadV4 Create(Block block) => Create(block); + + public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? totalDifficulty = null) + { + if (!base.TryGetBlock(out block, totalDifficulty)) + { + return false; + } + + var depositsLength = DepositRequests?.Length ?? 0; + var withdrawalRequestsLength = WithdrawalRequests?.Length ?? 0; + var consolidationRequestsLength = ConsolidationRequests?.Length ?? 0; + var requestsCount = depositsLength + withdrawalRequestsLength + consolidationRequestsLength; + if (requestsCount > 0) + { + var requests = new ConsensusRequest[requestsCount]; + int i = 0; + for (; i < depositsLength; ++i) + { + requests[i] = DepositRequests![i]; + } + + for (; i < depositsLength + withdrawalRequestsLength; ++i) + { + requests[i] = WithdrawalRequests![i - depositsLength]; + } + + for (; i < requestsCount; ++i) + { + requests[i] = ConsolidationRequests![i - depositsLength - withdrawalRequestsLength]; + } + + block.Body.Requests = requests; + block.Header.RequestsRoot = new RequestsTrie(requests).RootHash; + } + else + { + block.Body.Requests = Array.Empty(); + block.Header.RequestsRoot = Keccak.EmptyTreeHash; + } + + return true; + } + + public override bool ValidateFork(ISpecProvider specProvider) => + specProvider.GetSpec(BlockNumber, Timestamp).DepositsEnabled + && specProvider.GetSpec(BlockNumber, Timestamp).WithdrawalRequestsEnabled + && specProvider.GetSpec(BlockNumber, Timestamp).ConsolidationRequestsEnabled; + + /// + /// Gets or sets as defined in + /// EIP-6110. + /// + [JsonRequired] + public sealed override Deposit[]? DepositRequests { get; set; } + + /// + /// Gets or sets as defined in + /// EIP-7002. + /// + [JsonRequired] + public sealed override WithdrawalRequest[]? WithdrawalRequests { get; set; } + + /// + /// Gets or sets as defined in + /// EIP-7251. + /// + [JsonRequired] + public sealed override ConsolidationRequest[]? ConsolidationRequests { get; set; } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV2Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV2Result.cs index 78fffe38a86..70bc1ac1762 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV2Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV2Result.cs @@ -8,19 +8,16 @@ namespace Nethermind.Merge.Plugin.Data; -public class GetPayloadV2Result : IForkValidator +public class GetPayloadV2Result(Block block, UInt256 blockFees) + : IForkValidator where TVersionedExecutionPayload : ExecutionPayload, IExecutionPayloadParams, IExecutionPayloadFactory { - public GetPayloadV2Result(Block block, UInt256 blockFees) - { - BlockValue = blockFees; - ExecutionPayload = new(block); - } + public UInt256 BlockValue { get; } = blockFees; - public UInt256 BlockValue { get; } - - public virtual ExecutionPayload ExecutionPayload { get; } + public virtual TVersionedExecutionPayload ExecutionPayload { get; } = TVersionedExecutionPayload.Create(block); public bool ValidateFork(ISpecProvider specProvider) => ExecutionPayload.ValidateFork(specProvider); public override string ToString() => $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}}}"; } + +public class GetPayloadV2Result(Block block, UInt256 blockFees) : GetPayloadV2Result(block, blockFees); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV3Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV3Result.cs index 492d81ad71e..d2603f396c8 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV3Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV3Result.cs @@ -6,20 +6,16 @@ namespace Nethermind.Merge.Plugin.Data; -public class GetPayloadV3Result : GetPayloadV2Result +public class GetPayloadV3Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) + : GetPayloadV2Result(block, blockFees) + where TVersionedExecutionPayload : ExecutionPayloadV3, IExecutionPayloadParams, IExecutionPayloadFactory { - public GetPayloadV3Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : base(block, blockFees) - { - ExecutionPayload = new(block); - BlobsBundle = blobsBundle; - } - - public BlobsBundleV1 BlobsBundle { get; } - - public override ExecutionPayloadV3 ExecutionPayload { get; } + public BlobsBundleV1 BlobsBundle { get; } = blobsBundle; public bool ShouldOverrideBuilder { get; } public override string ToString() => $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}}}"; } + +public class GetPayloadV3Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : GetPayloadV3Result(block, blockFees, blobsBundle); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs new file mode 100644 index 00000000000..4f13cf363bf --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Int256; + +namespace Nethermind.Merge.Plugin.Data; + +public class GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : GetPayloadV3Result(block, blockFees, blobsBundle); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs index 3afb9a42338..46abda52dde 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs @@ -19,27 +19,22 @@ public interface IExecutionPayloadParams public enum ValidationResult : byte { Success, Fail, Invalid }; -public class ExecutionPayloadV3Params : IExecutionPayloadParams +public class ExecutionPayloadParams( + TVersionedExecutionPayload executionPayload, + byte[]?[] blobVersionedHashes, + Hash256? parentBeaconBlockRoot) + : IExecutionPayloadParams where TVersionedExecutionPayload : ExecutionPayload { - private readonly ExecutionPayloadV3 _executionPayload; - private readonly byte[]?[] _blobVersionedHashes; - private readonly Hash256? _parentBeaconBlockRoot; + public TVersionedExecutionPayload ExecutionPayload => executionPayload; - public ExecutionPayloadV3Params(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) - { - _executionPayload = executionPayload; - _blobVersionedHashes = blobVersionedHashes; - _parentBeaconBlockRoot = parentBeaconBlockRoot; - } - - public ExecutionPayload ExecutionPayload => _executionPayload; + ExecutionPayload IExecutionPayloadParams.ExecutionPayload => ExecutionPayload; public ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error) { - Transaction[]? transactions = null; + Transaction[]? transactions; try { - transactions = _executionPayload.GetTransactions(); + transactions = executionPayload.GetTransactions(); } catch (RlpException rlpException) { @@ -52,19 +47,19 @@ public ValidationResult ValidateParams(IReleaseSpec spec, int version, out strin .Where(t => t.BlobVersionedHashes is not null) .SelectMany(t => t.BlobVersionedHashes!); - if (!FlattenHashesFromTransactions(transactions).SequenceEqual(_blobVersionedHashes, Bytes.NullableEqualityComparer)) + if (!FlattenHashesFromTransactions(transactions).SequenceEqual(blobVersionedHashes, Bytes.NullableEqualityComparer)) { error = "Blob versioned hashes do not match"; return ValidationResult.Invalid; } - if (_parentBeaconBlockRoot is null) + if (parentBeaconBlockRoot is null) { error = "Parent beacon block root must be set"; return ValidationResult.Fail; } - _executionPayload.ParentBeaconBlockRoot = new Hash256(_parentBeaconBlockRoot); + executionPayload.ParentBeaconBlockRoot = new Hash256(parentBeaconBlockRoot); error = null; return ValidationResult.Success; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Cancun.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Cancun.cs index 4a28ae4ac0d..cb2d46cfb07 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Cancun.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Cancun.cs @@ -19,7 +19,7 @@ public Task> engine_forkchoiceUpdatedV3 => ForkchoiceUpdated(forkchoiceState, payloadAttributes, EngineApiVersions.Cancun); public Task> engine_newPayloadV3(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) => - NewPayload(new ExecutionPayloadV3Params(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Cancun); + NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Cancun); public async Task> engine_getPayloadV3(byte[] payloadId) => await _getPayloadHandlerV3.HandleAsync(payloadId); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs new file mode 100644 index 00000000000..f0f033ab4d5 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Threading.Tasks; +using Nethermind.Consensus; +using Nethermind.Core.Crypto; +using Nethermind.JsonRpc; +using Nethermind.Merge.Plugin.Data; +using Nethermind.Merge.Plugin.handlers; +using Nethermind.Merge.Plugin.Handlers; + +namespace Nethermind.Merge.Plugin; + +public partial class EngineRpcModule : IEngineRpcModule +{ + private readonly IAsyncHandler _getPayloadHandlerV4; + + private readonly IAsyncHandler, IEnumerable> _executionGetPayloadBodiesByHashV2Handler; + private readonly IGetPayloadBodiesByRangeV2Handler _executionGetPayloadBodiesByRangeV2Handler; + + public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) => + NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Prague); + + public async Task> engine_getPayloadV4(byte[] payloadId) => + await _getPayloadHandlerV4.HandleAsync(payloadId); + + public Task>> engine_getPayloadBodiesByHashV2(IReadOnlyList blockHashes) + => _executionGetPayloadBodiesByHashV2Handler.HandleAsync(blockHashes); + + public Task>> engine_getPayloadBodiesByRangeV2(long start, long count) + => _executionGetPayloadBodiesByRangeV2Handler.Handle(start, count); +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs index 5b9162d1e1c..9db57d25681 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs @@ -14,7 +14,7 @@ namespace Nethermind.Merge.Plugin; public partial class EngineRpcModule : IEngineRpcModule { - private readonly IAsyncHandler, IEnumerable> _executionGetPayloadBodiesByHashV1Handler; + private readonly IAsyncHandler, IEnumerable> _executionGetPayloadBodiesByHashV1Handler; private readonly IGetPayloadBodiesByRangeV1Handler _executionGetPayloadBodiesByRangeV1Handler; private readonly IAsyncHandler _getPayloadHandlerV2; @@ -24,7 +24,7 @@ public Task> engine_forkchoiceUpdatedV2 public Task> engine_getPayloadV2(byte[] payloadId) => _getPayloadHandlerV2.HandleAsync(payloadId); - public Task>> engine_getPayloadBodiesByHashV1(IList blockHashes) + public Task>> engine_getPayloadBodiesByHashV1(IReadOnlyList blockHashes) => _executionGetPayloadBodiesByHashV1Handler.HandleAsync(blockHashes); public Task>> engine_getPayloadBodiesByRangeV1(long start, long count) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs index 24aaf85a38b..413fde7ea0a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs @@ -24,10 +24,13 @@ public EngineRpcModule( IAsyncHandler getPayloadHandlerV1, IAsyncHandler getPayloadHandlerV2, IAsyncHandler getPayloadHandlerV3, + IAsyncHandler getPayloadHandlerV4, IAsyncHandler newPayloadV1Handler, IForkchoiceUpdatedHandler forkchoiceUpdatedV1Handler, - IAsyncHandler, IEnumerable> executionGetPayloadBodiesByHashV1Handler, + IAsyncHandler, IEnumerable> executionGetPayloadBodiesByHashV1Handler, IGetPayloadBodiesByRangeV1Handler executionGetPayloadBodiesByRangeV1Handler, + IAsyncHandler, IEnumerable> executionGetPayloadBodiesByHashV2Handler, + IGetPayloadBodiesByRangeV2Handler executionGetPayloadBodiesByRangeV2Handler, IHandler transitionConfigurationHandler, IHandler, IEnumerable> capabilitiesHandler, ISpecProvider specProvider, @@ -38,10 +41,13 @@ public EngineRpcModule( _getPayloadHandlerV1 = getPayloadHandlerV1; _getPayloadHandlerV2 = getPayloadHandlerV2; _getPayloadHandlerV3 = getPayloadHandlerV3; + _getPayloadHandlerV4 = getPayloadHandlerV4; _newPayloadV1Handler = newPayloadV1Handler; _forkchoiceUpdatedV1Handler = forkchoiceUpdatedV1Handler; _executionGetPayloadBodiesByHashV1Handler = executionGetPayloadBodiesByHashV1Handler; _executionGetPayloadBodiesByRangeV1Handler = executionGetPayloadBodiesByRangeV1Handler; + _executionGetPayloadBodiesByHashV2Handler = executionGetPayloadBodiesByHashV2Handler; + _executionGetPayloadBodiesByRangeV2Handler = executionGetPayloadBodiesByRangeV2Handler; _transitionConfigurationHandler = transitionConfigurationHandler; _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _gcKeeper = gcKeeper; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs index 729abe4ce86..32849aec183 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs @@ -46,6 +46,13 @@ public EngineRpcCapabilitiesProvider(ISpecProvider specProvider) _capabilities[nameof(IEngineRpcModule.engine_forkchoiceUpdatedV3)] = (spec.IsEip4844Enabled, spec.IsEip4844Enabled); _capabilities[nameof(IEngineRpcModule.engine_newPayloadV3)] = (spec.IsEip4844Enabled, spec.IsEip4844Enabled); #endregion + + #region Prague + _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.RequestsEnabled, spec.RequestsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.RequestsEnabled, spec.RequestsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByHashV2)] = (spec.RequestsEnabled, false); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByRangeV2)] = (spec.RequestsEnabled, false); + #endregion } return _capabilities; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs index 0e3f8cd63d2..10ea8cc9205 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs @@ -12,11 +12,11 @@ namespace Nethermind.Merge.Plugin.Handlers; -public class GetPayloadBodiesByHashV1Handler : IAsyncHandler, IEnumerable> +public class GetPayloadBodiesByHashV1Handler : IAsyncHandler, IEnumerable> { - private const int MaxCount = 1024; - private readonly IBlockTree _blockTree; - private readonly ILogger _logger; + protected const int MaxCount = 1024; + protected readonly IBlockTree _blockTree; + protected readonly ILogger _logger; public GetPayloadBodiesByHashV1Handler(IBlockTree blockTree, ILogManager logManager) { @@ -24,27 +24,36 @@ public GetPayloadBodiesByHashV1Handler(IBlockTree blockTree, ILogManager logMana _logger = logManager.GetClassLogger(); } - public Task>> HandleAsync(IList blockHashes) + protected bool CheckHashCount(IReadOnlyList blockHashes, out string? error) { if (blockHashes.Count > MaxCount) { - var error = $"The number of requested bodies must not exceed {MaxCount}"; + error = $"The number of requested bodies must not exceed {MaxCount}"; - if (_logger.IsError) _logger.Error($"{nameof(GetPayloadBodiesByHashV1Handler)}: {error}"); + if (_logger.IsError) _logger.Error($"{GetType().Name}: {error}"); + return false; + } + error = null; + return true; + } - return ResultWrapper>.Fail(error, MergeErrorCodes.TooLargeRequest); + public Task>> HandleAsync(IReadOnlyList blockHashes) + { + if (!CheckHashCount(blockHashes, out string? error)) + { + return ResultWrapper>.Fail(error!, MergeErrorCodes.TooLargeRequest); } return Task.FromResult(ResultWrapper>.Success(GetRequests(blockHashes))); } - private IEnumerable GetRequests(IList blockHashes) + private IEnumerable GetRequests(IReadOnlyList blockHashes) { for (int i = 0; i < blockHashes.Count; i++) { Block? block = _blockTree.FindBlock(blockHashes[i]); - yield return (block is null ? null : new ExecutionPayloadBodyV1Result(block.Transactions, block.Withdrawals)); + yield return block is null ? null : new ExecutionPayloadBodyV1Result(block.Transactions, block.Withdrawals); } yield break; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs new file mode 100644 index 00000000000..61913d4caad --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs @@ -0,0 +1,49 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Nethermind.Blockchain; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.JsonRpc; +using Nethermind.Logging; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Merge.Plugin.Handlers; + + +public class GetPayloadBodiesByHashV2Handler(IBlockTree blockTree, ILogManager logManager) : GetPayloadBodiesByHashV1Handler(blockTree, logManager), IAsyncHandler, IEnumerable> +{ + public new Task>> HandleAsync(IReadOnlyList blockHashes) + { + if (!CheckHashCount(blockHashes, out string? error)) + { + return ResultWrapper>.Fail(error!, MergeErrorCodes.TooLargeRequest); + } + + return Task.FromResult(ResultWrapper>.Success(GetRequests(blockHashes))); + } + + private IEnumerable GetRequests(IReadOnlyList blockHashes) + { + for (int i = 0; i < blockHashes.Count; i++) + { + Block? block = _blockTree.FindBlock(blockHashes[i]); + + if (block is null) + { + yield return null; + continue; + } + + (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests, ConsolidationRequest[]? consolidationRequests) = block!.Requests.SplitRequests(); + yield return new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests, consolidationRequests); + } + + yield break; + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV1Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV1Handler.cs index 0ca3a7e5af7..c3098efb039 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV1Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV1Handler.cs @@ -13,10 +13,10 @@ namespace Nethermind.Merge.Plugin.Handlers; public class GetPayloadBodiesByRangeV1Handler : IGetPayloadBodiesByRangeV1Handler { - private const int MaxCount = 1024; + protected const int MaxCount = 1024; - private readonly IBlockTree _blockTree; - private readonly ILogger _logger; + protected readonly IBlockTree _blockTree; + protected readonly ILogger _logger; public GetPayloadBodiesByRangeV1Handler(IBlockTree blockTree, ILogManager logManager) { @@ -24,24 +24,37 @@ public GetPayloadBodiesByRangeV1Handler(IBlockTree blockTree, ILogManager logMan _logger = logManager.GetClassLogger(); } - public Task>> Handle(long start, long count) + protected bool CheckRangeCount(long start, long count, out string? error, out int errorCode) { if (start < 1 || count < 1) { - var error = $"'{nameof(start)}' and '{nameof(count)}' must be positive numbers"; + error = $"'{nameof(start)}' and '{nameof(count)}' must be positive numbers"; - if (_logger.IsError) _logger.Error($"{nameof(GetPayloadBodiesByRangeV1Handler)}: ${error}"); + if (_logger.IsError) _logger.Error($"{GetType().Name}: ${error}"); - return ResultWrapper>.Fail(error, ErrorCodes.InvalidParams); + errorCode = ErrorCodes.InvalidParams; + return false; } if (count > MaxCount) { - var error = $"The number of requested bodies must not exceed {MaxCount}"; + error = $"The number of requested bodies must not exceed {MaxCount}"; + + if (_logger.IsError) _logger.Error($"{GetType().Name}: {error}"); - if (_logger.IsError) _logger.Error($"{nameof(GetPayloadBodiesByRangeV1Handler)}: {error}"); + errorCode = MergeErrorCodes.TooLargeRequest; + return false; + } + error = null; + errorCode = 0; + return true; + } - return ResultWrapper>.Fail(error, MergeErrorCodes.TooLargeRequest); + public Task>> Handle(long start, long count) + { + if (!CheckRangeCount(start, count, out string? error, out int errorCode)) + { + return ResultWrapper>.Fail(error!, errorCode); } return ResultWrapper>.Success(GetRequests(start, count)); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs new file mode 100644 index 00000000000..221fc6c2a2a --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs @@ -0,0 +1,52 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Nethermind.Blockchain; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; +using Nethermind.JsonRpc; +using Nethermind.Logging; +using Nethermind.Merge.Plugin.Data; +using Nethermind.Merge.Plugin.Handlers; + +namespace Nethermind.Merge.Plugin.handlers; + +public class GetPayloadBodiesByRangeV2Handler(IBlockTree blockTree, ILogManager logManager) : GetPayloadBodiesByRangeV1Handler(blockTree, logManager), IGetPayloadBodiesByRangeV2Handler +{ + public new Task>> Handle(long start, long count) + { + if (!CheckRangeCount(start, count, out string? error, out int errorCode)) + { + return ResultWrapper>.Fail(error!, errorCode); + } + + return Task.FromResult(ResultWrapper>.Success(GetRequests(start, count))); + } + + + private IEnumerable GetRequests(long start, long count) + { + var headNumber = _blockTree.Head?.Number ?? 0; + for (long i = start, c = Math.Min(start + count - 1, headNumber); i <= c; i++) + { + Block? block = _blockTree.FindBlock(i); + + if (block is null) + { + yield return null; + continue; + } + + (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests, ConsolidationRequest[]? consolidationRequests) = block!.Requests.SplitRequests(); + yield return new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests, consolidationRequests); + } + + yield break; + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV1Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV1Handler.cs index 20a27945f9b..2cd2defba3e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV1Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV1Handler.cs @@ -23,13 +23,9 @@ namespace Nethermind.Merge.Plugin.Handlers; /// a payload has been cancelled due to the timeout then execution client must respond with error message. /// Execution client may stop the building process with the corresponding payload_id value after serving this call. /// -public class GetPayloadV1Handler : GetPayloadHandlerBase +public class GetPayloadV1Handler(IPayloadPreparationService payloadPreparationService, ISpecProvider specProvider, ILogManager logManager) + : GetPayloadHandlerBase(1, payloadPreparationService, specProvider, logManager) { - public GetPayloadV1Handler(IPayloadPreparationService payloadPreparationService, ISpecProvider specProvider, ILogManager logManager) : base( - 1, payloadPreparationService, specProvider, logManager) - { - } - protected override ExecutionPayload GetPayloadResultFromBlock(IBlockProductionContext context) => - new(context.CurrentBestBlock!); + ExecutionPayload.Create(context.CurrentBestBlock!); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs new file mode 100644 index 00000000000..3071c32f39a --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Specs; +using Nethermind.Logging; +using Nethermind.Merge.Plugin.BlockProduction; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Merge.Plugin.Handlers; + +/// +/// +/// engine_getpayloadv3 +/// +public class GetPayloadV4Handler : GetPayloadHandlerBase +{ + public GetPayloadV4Handler(IPayloadPreparationService payloadPreparationService, ISpecProvider specProvider, ILogManager logManager) : base( + 4, payloadPreparationService, specProvider, logManager) + { + } + + protected override GetPayloadV4Result GetPayloadResultFromBlock(IBlockProductionContext context) => + new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!)); +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs new file mode 100644 index 00000000000..9cd35c7d626 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs @@ -0,0 +1,14 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Threading.Tasks; +using Nethermind.JsonRpc; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Merge.Plugin.Handlers; + +public interface IGetPayloadBodiesByRangeV2Handler +{ + Task>> Handle(long start, long count); +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs new file mode 100644 index 00000000000..7d62b4021b0 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs @@ -0,0 +1,39 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using System.Threading.Tasks; +using Nethermind.Consensus.Producers; +using Nethermind.Core.Crypto; +using Nethermind.JsonRpc; +using Nethermind.JsonRpc.Modules; +using Nethermind.Merge.Plugin.Data; + +namespace Nethermind.Merge.Plugin; + +public partial interface IEngineRpcModule : IRpcModule +{ + [JsonRpcMethod( + Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", + IsSharable = true, + IsImplemented = true)] + Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot); + + [JsonRpcMethod( + Description = "Returns the most recent version of an execution payload and fees with respect to the transaction set contained by the mempool.", + IsSharable = true, + IsImplemented = true)] + public Task> engine_getPayloadV4(byte[] payloadId); + + [JsonRpcMethod( + Description = "Returns an array of execution payload bodies for the list of provided block hashes.", + IsSharable = true, + IsImplemented = true)] + Task>> engine_getPayloadBodiesByHashV2(IReadOnlyList blockHashes); + + [JsonRpcMethod( + Description = "Returns an array of execution payload bodies for the provided number range", + IsSharable = true, + IsImplemented = true)] + Task>> engine_getPayloadBodiesByRangeV2(long start, long count); +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs index c1b63e3d301..bde3c4c1146 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs @@ -29,7 +29,7 @@ public partial interface IEngineRpcModule : IRpcModule Description = "Returns an array of execution payload bodies for the list of provided block hashes.", IsSharable = true, IsImplemented = true)] - Task>> engine_getPayloadBodiesByHashV1(IList blockHashes); + Task>> engine_getPayloadBodiesByHashV1(IReadOnlyList blockHashes); [JsonRpcMethod( Description = "Returns an array of execution payload bodies for the provided number range", diff --git a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs index 87cbb58f650..2c6dc8090b6 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs @@ -5,6 +5,7 @@ using Nethermind.Core; using Nethermind.Logging; using System.Diagnostics.CodeAnalysis; +using System.Runtime.InteropServices.Marshalling; namespace Nethermind.Merge.Plugin.InvalidChainTracker; @@ -148,7 +149,10 @@ private static bool ShouldNotTrackInvalidation(Block block) if (!BlockValidator.ValidateUnclesHashMatches(block, out _)) return true; - return !BlockValidator.ValidateWithdrawalsHashMatches(block, out _); + if (!BlockValidator.ValidateWithdrawalsHashMatches(block, out _)) + return true; + + return !BlockValidator.ValidateRequestsHashMatches(block, out _); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs index 6bcc5eb7990..cfcafbd6866 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs @@ -26,6 +26,7 @@ using Nethermind.Merge.Plugin.BlockProduction; using Nethermind.Merge.Plugin.BlockProduction.Boost; using Nethermind.Merge.Plugin.GC; +using Nethermind.Merge.Plugin.handlers; using Nethermind.Merge.Plugin.Handlers; using Nethermind.Merge.Plugin.InvalidChainTracker; using Nethermind.Merge.Plugin.Synchronization; @@ -320,6 +321,7 @@ public Task InitRpcModules() new GetPayloadV1Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new GetPayloadV2Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new GetPayloadV3Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), + new GetPayloadV4Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new NewPayloadHandler( _api.BlockValidator, _api.BlockTree, @@ -352,6 +354,8 @@ public Task InitRpcModules() _api.Config().SimulateBlockProduction), new GetPayloadBodiesByHashV1Handler(_api.BlockTree, _api.LogManager), new GetPayloadBodiesByRangeV1Handler(_api.BlockTree, _api.LogManager), + new GetPayloadBodiesByHashV2Handler(_api.BlockTree, _api.LogManager), + new GetPayloadBodiesByRangeV2Handler(_api.BlockTree, _api.LogManager), new ExchangeTransitionConfigurationV1Handler(_poSSwitcher, _api.LogManager), new ExchangeCapabilitiesHandler(_api.RpcCapabilitiesProvider, _api.LogManager), _api.SpecProvider, diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs index 3aed5334f49..9a3f7c1ca30 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs @@ -159,7 +159,7 @@ public bool TrySetNextBlocks(int maxCount, BlockDownloadContext context) { Block? block = _blockTree.FindBlock(hashesToRequest[i], BlockTreeLookupOptions.None); if (block is null) return false; - BlockBody blockBody = new(block.Transactions, block.Uncles, block?.Withdrawals); + BlockBody blockBody = new(block.Transactions, block.Uncles, block?.Withdrawals, block?.Requests); context.SetBody(i + offset, blockBody); } diff --git a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs index d1542d166db..943c453b71c 100644 --- a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs +++ b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs @@ -188,6 +188,7 @@ protected override BlockProcessor CreateBlockProcessor() State, ReceiptStorage, new BlockhashStore(SpecProvider, State), + TxProcessor, LogManager); _tracerFactory = new TracerFactory( diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index d4bba370b4f..15f100c9136 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -5,6 +5,7 @@ using DotNetty.Buffers; using Nethermind.Core; using Nethermind.Core.Buffers; +using Nethermind.Core.ConsensusRequests; using Nethermind.Serialization.Rlp; namespace Nethermind.Network.P2P.Subprotocols.Eth.V62.Messages @@ -58,6 +59,7 @@ private class BlockBodyDecoder : IRlpValueDecoder private readonly TxDecoder _txDecoder = new(); private readonly HeaderDecoder _headerDecoder = new(); private readonly WithdrawalDecoder _withdrawalDecoderDecoder = new(); + private readonly ConsensusRequestDecoder _requestsDecoder = new(); public int GetLength(BlockBody item, RlpBehaviors rlpBehaviors) { @@ -68,6 +70,12 @@ public int GetBodyLength(BlockBody b) { if (b.Withdrawals is not null) { + if (b.Requests is not null) + { + return Rlp.LengthOfSequence(GetTxLength(b.Transactions)) + + Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)) + Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)) + + Rlp.LengthOfSequence(GetRequestsLength(b.Requests)); + } return Rlp.LengthOfSequence(GetTxLength(b.Transactions)) + Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)) + Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)); } @@ -90,6 +98,11 @@ private int GetWithdrawalsLength(Withdrawal[] withdrawals) return withdrawals.Sum(t => _withdrawalDecoderDecoder.GetLength(t, RlpBehaviors.None)); } + private int GetRequestsLength(ConsensusRequest[] requests) + { + return requests.Sum(t => _requestsDecoder.GetLength(t, RlpBehaviors.None)); + } + public BlockBody? Decode(ref Rlp.ValueDecoderContext ctx, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int sequenceLength = ctx.ReadSequenceLength(); @@ -104,12 +117,18 @@ private int GetWithdrawalsLength(Withdrawal[] withdrawals) Transaction[] transactions = ctx.DecodeArray(_txDecoder); BlockHeader[] uncles = ctx.DecodeArray(_headerDecoder); Withdrawal[]? withdrawals = null; + ConsensusRequest[]? requests = null; if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) { withdrawals = ctx.DecodeArray(_withdrawalDecoderDecoder); } - return new BlockBody(transactions, uncles, withdrawals); + if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) + { + requests = ctx.DecodeArray(_requestsDecoder); + } + + return new BlockBody(transactions, uncles, withdrawals, requests); } public void Serialize(RlpStream stream, BlockBody body) @@ -135,6 +154,15 @@ public void Serialize(RlpStream stream, BlockBody body) stream.Encode(withdrawal); } } + + if (body.Requests is not null) + { + stream.StartSequence(GetRequestsLength(body.Requests)); + foreach (ConsensusRequest? request in body.Requests) + { + stream.Encode(request); + } + } } } } diff --git a/src/Nethermind/Nethermind.Optimism/InitializeBlockchainOptimism.cs b/src/Nethermind/Nethermind.Optimism/InitializeBlockchainOptimism.cs index 92ab38d4aad..738c90d4ddc 100644 --- a/src/Nethermind/Nethermind.Optimism/InitializeBlockchainOptimism.cs +++ b/src/Nethermind/Nethermind.Optimism/InitializeBlockchainOptimism.cs @@ -107,6 +107,7 @@ protected override BlockProcessor CreateBlockProcessor(BlockCachePreWarmer? preW new BlockhashStore(_api.SpecProvider, _api.WorldState), _api.LogManager, _api.SpecHelper, + _api.TransactionProcessor, contractRewriter, new BlockProductionWithdrawalProcessor(new NullWithdrawalProcessor()), preWarmer: preWarmer); diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs index 385e7217e3c..2c45d0404ad 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs @@ -11,6 +11,7 @@ using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; @@ -30,12 +31,13 @@ public OptimismBlockProcessor( IBlockhashStore? blockhashStore, ILogManager? logManager, IOptimismSpecHelper opSpecHelper, + ITransactionProcessor txProcessor, Create2DeployerContractRewriter contractRewriter, IWithdrawalProcessor? withdrawalProcessor = null, IBlockCachePreWarmer? preWarmer = null) : base(specProvider, blockValidator, rewardCalculator, blockTransactionsExecutor, - stateProvider, receiptStorage, blockhashStore, logManager, withdrawalProcessor, - ReceiptsRootCalculator.Instance, preWarmer) + stateProvider, receiptStorage, blockhashStore, txProcessor, logManager, withdrawalProcessor, + receiptsRootCalculator: ReceiptsRootCalculator.Instance, preWarmer: preWarmer) { ArgumentNullException.ThrowIfNull(stateProvider); _contractRewriter = contractRewriter; diff --git a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs index 1069b90a688..a8b548daed9 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismBlockProducerEnvFactory.cs @@ -79,6 +79,7 @@ protected override BlockProcessor CreateBlockProcessor( new BlockhashStore(specProvider, readOnlyTxProcessingEnv.WorldState), logManager, specHelper, + readOnlyTxProcessingEnv.TransactionProcessor, new Create2DeployerContractRewriter(specHelper, _specProvider, _blockTree), new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.WorldState, logManager))); } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs index 997d05beb7c..23e4b9faaa7 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs @@ -27,6 +27,9 @@ using Nethermind.Specs.ChainSpecStyle; using Nethermind.Serialization.Rlp; using Nethermind.Optimism.Rpc; +using Nethermind.Core; +using Nethermind.JsonRpc.Modules.Eth; +using Nethermind.Merge.Plugin.handlers; namespace Nethermind.Optimism; @@ -224,6 +227,7 @@ public async Task InitRpcModules() new GetPayloadV1Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new GetPayloadV2Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new GetPayloadV3Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), + new GetPayloadV4Handler(payloadPreparationService, _api.SpecProvider, _api.LogManager), new NewPayloadHandler( _api.BlockValidator, _api.BlockTree, @@ -256,6 +260,8 @@ public async Task InitRpcModules() _api.Config().SimulateBlockProduction), new GetPayloadBodiesByHashV1Handler(_api.BlockTree, _api.LogManager), new GetPayloadBodiesByRangeV1Handler(_api.BlockTree, _api.LogManager), + new GetPayloadBodiesByHashV2Handler(_api.BlockTree, _api.LogManager), + new GetPayloadBodiesByRangeV2Handler(_api.BlockTree, _api.LogManager), new ExchangeTransitionConfigurationV1Handler(_api.PoSSwitcher, _api.LogManager), new ExchangeCapabilitiesHandler(_api.RpcCapabilitiesProvider, _api.LogManager), _api.SpecProvider, diff --git a/src/Nethermind/Nethermind.Optimism/OptimismReceiptStorageDecoder.cs b/src/Nethermind/Nethermind.Optimism/OptimismReceiptStorageDecoder.cs index 38d3a9071b0..d3e95e82ef1 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismReceiptStorageDecoder.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismReceiptStorageDecoder.cs @@ -311,7 +311,7 @@ public int GetLength(OptimismTxReceipt item, RlpBehaviors rlpBehaviors) TxReceipt IRlpStreamDecoder.Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors) { - return Decode(rlpStream, rlpBehaviors); ; + return Decode(rlpStream, rlpBehaviors); } public void Encode(RlpStream stream, TxReceipt item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) diff --git a/src/Nethermind/Nethermind.Optimism/ReadOnlyChainProcessingEnv.cs b/src/Nethermind/Nethermind.Optimism/ReadOnlyChainProcessingEnv.cs index 96ee2ae5a7d..5e53485215b 100644 --- a/src/Nethermind/Nethermind.Optimism/ReadOnlyChainProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Optimism/ReadOnlyChainProcessingEnv.cs @@ -65,6 +65,7 @@ IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor new BlockhashStore(specProvider, scope.WorldState), logManager, opSpecHelper, + scope.TransactionProcessor, contractRewriter, withdrawalProcessor); } diff --git a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json index 3db3149a77d..da27c06e51c 100644 --- a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json +++ b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json @@ -28,7 +28,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" } }, - "Gnosis": { + "Gnosis": { "commandName": "Project", "commandLineArgs": "-c gnosis -dd .data", "environmentVariables": { @@ -93,7 +93,7 @@ }, "Holesky": { "commandName": "Project", - "commandLineArgs": "-c holesky -dd .data", + "commandLineArgs": "-c holesky -dd .data --JsonRpc.UnsecureDevNoRpcAuthentication true", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/src/Nethermind/Nethermind.Runner/configs/volta.cfg b/src/Nethermind/Nethermind.Runner/configs/volta.cfg index 3f1549a91cf..837c380940e 100644 --- a/src/Nethermind/Nethermind.Runner/configs/volta.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/volta.cfg @@ -33,4 +33,5 @@ "Merge": { "Enabled": false } -} \ No newline at end of file +} + diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 71a5256baf1..167d7ca4b2f 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -5,6 +5,7 @@ using System.Buffers; using System.Collections.Generic; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Serialization.Rlp { @@ -13,6 +14,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder private readonly HeaderDecoder _headerDecoder = new(); private readonly TxDecoder _txDecoder = new(); private readonly WithdrawalDecoder _withdrawalDecoder = new(); + private readonly ConsensusRequestDecoder _consensusRequestsDecoder = new(); public Block? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -52,8 +54,21 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder rlpStream.Check(unclesCheck); - List withdrawals = null; + List? withdrawals = DecodeWithdrawals(rlpStream, blockCheck); + List? requests = DecodeRequests(rlpStream, blockCheck); + if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + { + rlpStream.Check(blockCheck); + } + + return new(header, transactions, uncleHeaders, withdrawals, requests); + } + + + private List? DecodeWithdrawals(RlpStream rlpStream, int blockCheck) + { + List? withdrawals = null; if (rlpStream.Position != blockCheck) { bool lengthWasRead = true; @@ -81,15 +96,44 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder } } - if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + return withdrawals; + } + + private List? DecodeRequests(RlpStream rlpStream, int blockCheck) + { + List? requests = null; + if (rlpStream.Position != blockCheck) { - rlpStream.Check(blockCheck); + bool lengthWasRead = true; + try + { + rlpStream.PeekNextRlpLength(); + } + catch + { + lengthWasRead = false; + } + + if (lengthWasRead) + { + int requestsLength = rlpStream.ReadSequenceLength(); + int requestsCheck = rlpStream.Position + requestsLength; + requests = new(); + + while (rlpStream.Position < requestsCheck) + { + requests.Add(Rlp.Decode(rlpStream)); + } + + rlpStream.Check(requestsCheck); + } } - return new(header, transactions, uncleHeaders, withdrawals); + return requests; } - private (int Total, int Txs, int Uncles, int? Withdrawals) GetContentLength(Block item, RlpBehaviors rlpBehaviors) + + private (int Total, int Txs, int Uncles, int? Withdrawals, int? Requests) GetContentLength(Block item, RlpBehaviors rlpBehaviors) { int contentLength = _headerDecoder.GetLength(item.Header, rlpBehaviors); @@ -108,7 +152,16 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder contentLength += Rlp.LengthOfSequence(withdrawalsLength.Value); } - return (contentLength, txLength, unclesLength, withdrawalsLength); + int? consensusRequestsLength = null; + if (item.Requests is not null) + { + consensusRequestsLength = GetConsensusRequestsLength(item, rlpBehaviors); + + if (consensusRequestsLength.HasValue) + contentLength += Rlp.LengthOfSequence(consensusRequestsLength.Value); + } + + return (contentLength, txLength, unclesLength, withdrawalsLength, consensusRequestsLength); } private int GetUnclesLength(Block item, RlpBehaviors rlpBehaviors) @@ -148,6 +201,21 @@ private int GetTxLength(Block item, RlpBehaviors rlpBehaviors) return withdrawalLength; } + private int? GetConsensusRequestsLength(Block item, RlpBehaviors rlpBehaviors) + { + if (item.Requests is null) + return null; + + var consensusRequestsLength = 0; + + for (int i = 0, count = item.Requests.Length; i < count; i++) + { + consensusRequestsLength += _consensusRequestsDecoder.GetLength(item.Requests[i], rlpBehaviors); + } + + return consensusRequestsLength; + } + public int GetLength(Block? item, RlpBehaviors rlpBehaviors) { if (item is null) @@ -191,7 +259,20 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) decoderContext.Check(unclesCheck); - List withdrawals = null; + List? withdrawals = DecodeWithdrawals(ref decoderContext, blockCheck); + List? requests = DecodeRequests(ref decoderContext, blockCheck); + + if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + { + decoderContext.Check(blockCheck); + } + + return new(header, transactions, uncleHeaders, withdrawals, requests); + } + + private List? DecodeWithdrawals(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) + { + List? withdrawals = null; if (decoderContext.Position != blockCheck) { @@ -207,12 +288,28 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) decoderContext.Check(withdrawalsCheck); } - if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) + return withdrawals; + } + + private List? DecodeRequests(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) + { + List? requests = null; + + if (decoderContext.Position != blockCheck) { - decoderContext.Check(blockCheck); + int requestsLength = decoderContext.ReadSequenceLength(); + int requestsCheck = decoderContext.Position + requestsLength; + requests = new(); + + while (decoderContext.Position < requestsCheck) + { + requests.Add(Rlp.Decode(ref decoderContext)); + } + + decoderContext.Check(requestsCheck); } - return new(header, transactions, uncleHeaders, withdrawals); + return requests; } public Rlp Encode(Block? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -235,7 +332,7 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl return; } - (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength) = GetContentLength(item, rlpBehaviors); + (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength, int? requestsLength) = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.Header); stream.StartSequence(txsLength); @@ -259,6 +356,16 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl stream.Encode(item.Withdrawals[i]); } } + + if (requestsLength.HasValue) + { + stream.StartSequence(requestsLength.Value); + + for (int i = 0; i < item.Requests.Length; i++) + { + stream.Encode(item.Requests[i]); + } + } } public static ReceiptRecoveryBlock? DecodeToReceiptRecoveryBlock(MemoryManager? memoryManager, Memory memory, RlpBehaviors rlpBehaviors) @@ -287,6 +394,10 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl { decoderContext.SkipItem(); // Skip withdrawals } + if (decoderContext.Position != blockCheck) + { + decoderContext.SkipItem(); // Skip requests + } if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) { decoderContext.Check(blockCheck); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs new file mode 100644 index 00000000000..617f7423bf0 --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs @@ -0,0 +1,128 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core.ConsensusRequests; + +namespace Nethermind.Serialization.Rlp; + +public class ConsensusRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder +{ + private readonly WithdrawalRequestDecoder _withdrawalRequestDecoder = new(); + private readonly DepositDecoder _depositDecoder = new(); + private readonly ConsolidationRequestDecoder _consolidationRequestDecoder = new(); + public int GetContentLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) + { + int length = item.Type switch + { + ConsensusRequestsType.ConsolidationRequest => _consolidationRequestDecoder.GetContentLength((ConsolidationRequest)item, rlpBehaviors), + ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.GetContentLength((WithdrawalRequest)item, rlpBehaviors), + ConsensusRequestsType.Deposit => _depositDecoder.GetContentLength((Deposit)item, rlpBehaviors), + _ => throw new RlpException($"Unsupported consensus request type {item.Type}") + }; + return length; + } + + public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) + { + int length = item.Type switch + { + ConsensusRequestsType.ConsolidationRequest => _consolidationRequestDecoder.GetLength((ConsolidationRequest)item, rlpBehaviors), + ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.GetLength((WithdrawalRequest)item, rlpBehaviors), + ConsensusRequestsType.Deposit => _depositDecoder.GetLength((Deposit)item, rlpBehaviors), + _ => throw new RlpException($"Unsupported consensus request type {item.Type}") + }; + + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) + { + return Rlp.LengthOf((byte)item.Type) + length; + } + + return Rlp.LengthOfSequence(Rlp.LengthOf((byte)item.Type) + length); + } + + public ConsensusRequest? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (rlpStream.IsNextItemNull()) + { + rlpStream.ReadByte(); + return null; + } + + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.None) + { + rlpStream.ReadPrefixAndContentLength(); + } + + ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)rlpStream.ReadByte(); + + ConsensusRequest result = consensusRequestsType switch + { + ConsensusRequestsType.ConsolidationRequest => _consolidationRequestDecoder.Decode(rlpStream, rlpBehaviors), + ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(rlpStream, rlpBehaviors), + ConsensusRequestsType.Deposit => _depositDecoder.Decode(rlpStream, rlpBehaviors), + + _ => throw new RlpException($"Unsupported consensus request type {consensusRequestsType}") + }; + + return result; + } + + public ConsensusRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (decoderContext.IsNextItemNull()) + { + decoderContext.ReadByte(); + return null; + } + + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.None) + { + decoderContext.ReadPrefixAndContentLength(); + } + + ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)decoderContext.ReadByte(); + + ConsensusRequest result = consensusRequestsType switch + { + ConsensusRequestsType.ConsolidationRequest => _consolidationRequestDecoder.Decode(ref decoderContext, rlpBehaviors), + ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(ref decoderContext, rlpBehaviors), + ConsensusRequestsType.Deposit => _depositDecoder.Decode(ref decoderContext, rlpBehaviors), + _ => throw new RlpException($"Unsupported consensus request type {consensusRequestsType}") + }; + + return result; + } + + public void Encode(RlpStream stream, ConsensusRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + int contentLength = GetContentLength(item, rlpBehaviors); + int sequenceLength = Rlp.LengthOfSequence(contentLength); + + if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.None) + { + stream.StartByteArray(sequenceLength + 1, false); + } + + stream.WriteByte((byte)item.Type); + switch (item.Type) + { + case ConsensusRequestsType.ConsolidationRequest: + _consolidationRequestDecoder.Encode(stream, (ConsolidationRequest)item, rlpBehaviors); + break; + case ConsensusRequestsType.WithdrawalRequest: + _withdrawalRequestDecoder.Encode(stream, (WithdrawalRequest)item, rlpBehaviors); + break; + case ConsensusRequestsType.Deposit: + _depositDecoder.Encode(stream, (Deposit)item, rlpBehaviors); + break; + } + } + + public Rlp Encode(ConsensusRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + RlpStream rlpStream = new RlpStream(GetLength(item, rlpBehaviors)); + Encode(rlpStream, item, rlpBehaviors); + return new Rlp(rlpStream.Data.ToArray()); + } +} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs new file mode 100644 index 00000000000..3e978a7e02e --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs @@ -0,0 +1,66 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; + +namespace Nethermind.Serialization.Rlp; + +public class ConsolidationRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder +{ + public int GetLength(ConsolidationRequest item, RlpBehaviors rlpBehaviors) => + Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); + + public int GetContentLength(ConsolidationRequest item, RlpBehaviors rlpBehaviors) => + Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.SourcePubkey) + + Rlp.LengthOf(item.TargetPubkey); + + public ConsolidationRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + int _ = rlpStream.ReadSequenceLength(); + Address sourceAddress = rlpStream.DecodeAddress(); + ArgumentNullException.ThrowIfNull(sourceAddress); + byte[] SourcePubkey = rlpStream.DecodeByteArray(); + byte[] TargetPubkey = rlpStream.DecodeByteArray(); + return new ConsolidationRequest() + { + SourceAddress = sourceAddress, + SourcePubkey = SourcePubkey, + TargetPubkey = TargetPubkey + }; + } + + public ConsolidationRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + int _ = decoderContext.ReadSequenceLength(); + Address sourceAddress = decoderContext.DecodeAddress(); + ArgumentNullException.ThrowIfNull(sourceAddress); + byte[] SourcePubkey = decoderContext.DecodeByteArray(); + byte[] TargetPubkey = decoderContext.DecodeByteArray(); + return new ConsolidationRequest() + { + SourceAddress = sourceAddress, + SourcePubkey = SourcePubkey, + TargetPubkey = TargetPubkey + }; + } + + public void Encode(RlpStream stream, ConsolidationRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + int contentLength = GetContentLength(item, rlpBehaviors); + stream.StartSequence(contentLength); + stream.Encode(item.SourceAddress); + stream.Encode(item.SourcePubkey); + stream.Encode(item.TargetPubkey); + } + + public Rlp Encode(ConsolidationRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + RlpStream rlpStream = new(GetLength(item, rlpBehaviors)); + + Encode(rlpStream, item, rlpBehaviors); + + return new Rlp(rlpStream.Data.ToArray()); + } +} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs new file mode 100644 index 00000000000..9fdc2a3bd1e --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs @@ -0,0 +1,89 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.ConsensusRequests; + +namespace Nethermind.Serialization.Rlp; + +public class DepositDecoder : IRlpStreamDecoder, IRlpValueDecoder +{ + public static DepositDecoder Instance { get; } = new(); + + public Deposit? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (rlpStream.IsNextItemNull()) + { + rlpStream.ReadByte(); + + return null; + } + + rlpStream.ReadSequenceLength(); + + return new() + { + Pubkey = rlpStream.DecodeByteArray(), + WithdrawalCredentials = rlpStream.DecodeByteArray(), + Amount = rlpStream.DecodeULong(), + Signature = rlpStream.DecodeByteArray(), + Index = rlpStream.DecodeULong(), + }; + } + + public Deposit? Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (decoderContext.IsNextItemNull()) + { + decoderContext.ReadByte(); + + return null; + } + + decoderContext.ReadSequenceLength(); + + return new() + { + Pubkey = decoderContext.DecodeByteArray(), + WithdrawalCredentials = decoderContext.DecodeByteArray(), + Amount = decoderContext.DecodeULong(), + Signature = decoderContext.DecodeByteArray(), + Index = decoderContext.DecodeULong(), + }; + } + + public void Encode(RlpStream stream, Deposit? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + if (item is null) + { + stream.EncodeNullObject(); + return; + } + + var contentLength = GetContentLength(item, rlpBehaviors); + + stream.StartSequence(contentLength); + stream.Encode(item.Pubkey); + stream.Encode(item.WithdrawalCredentials); + stream.Encode(item.Amount); + stream.Encode(item.Signature); + stream.Encode(item.Index.Value); + } + + public Rlp Encode(Deposit? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + var stream = new RlpStream(GetLength(item, rlpBehaviors)); + + Encode(stream, item, rlpBehaviors); + + return new(stream.Data.ToArray()); + } + + public int GetContentLength(Deposit item, RlpBehaviors rlpBehaviors) => + Rlp.LengthOf(item.Pubkey) + + Rlp.LengthOf(item.WithdrawalCredentials) + + Rlp.LengthOf(item.Amount) + + Rlp.LengthOf(item.Signature) + + Rlp.LengthOf(item.Index); + + public int GetLength(Deposit item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); +} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index 80e1a500525..64353dfa7c5 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -73,7 +73,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder 0 && decoderContext.PeekPrefixAndContentLength().ContentLength == Hash256.Size) { @@ -85,10 +85,15 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder= 4 && decoderContext.Position != headerCheck) { blockHeader.ParentBeaconBlockRoot = decoderContext.DecodeKeccak(); } + + if (itemsRemaining >= 5 && decoderContext.Position != headerCheck) + { + blockHeader.RequestsRoot = decoderContext.DecodeKeccak(); + } } @@ -160,7 +165,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder 0 && rlpStream.PeekPrefixAndContentLength().ContentLength == Hash256.Size) { @@ -172,10 +177,15 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder= 4 && rlpStream.Position != headerCheck) { blockHeader.ParentBeaconBlockRoot = rlpStream.DecodeKeccak(); } + + if (itemsRemaining >= 5 && rlpStream.Position != headerCheck) + { + blockHeader.RequestsRoot = rlpStream.DecodeKeccak(); + } } if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) @@ -245,6 +255,11 @@ public void Encode(RlpStream rlpStream, BlockHeader? header, RlpBehaviors rlpBeh { rlpStream.Encode(header.ParentBeaconBlockRoot); } + + if (header.RequestsRoot is not null) + { + rlpStream.Encode(header.RequestsRoot); + } } public Rlp Encode(BlockHeader? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -286,7 +301,8 @@ private static int GetContentLength(BlockHeader? item, RlpBehaviors rlpBehaviors + (item.WithdrawalsRoot is null && item.BlobGasUsed is null && item.ExcessBlobGas is null ? 0 : Rlp.LengthOfKeccakRlp) + (item.ParentBeaconBlockRoot is null ? 0 : Rlp.LengthOfKeccakRlp) + (item.BlobGasUsed is null ? 0 : Rlp.LengthOf(item.BlobGasUsed.Value)) - + (item.ExcessBlobGas is null ? 0 : Rlp.LengthOf(item.ExcessBlobGas.Value)); + + (item.ExcessBlobGas is null ? 0 : Rlp.LengthOf(item.ExcessBlobGas.Value)) + + (item.RequestsRoot is null ? 0 : Rlp.LengthOf(item.RequestsRoot)); if (notForSealing) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs index fdf473c883f..c7804d7eeb6 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs @@ -16,6 +16,7 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Int256; +using Nethermind.Core.ConsensusRequests; namespace Nethermind.Serialization.Rlp { @@ -26,6 +27,7 @@ public class RlpStream private static readonly BlockInfoDecoder _blockInfoDecoder = new(); private static readonly TxDecoder _txDecoder = new(); private static readonly WithdrawalDecoder _withdrawalDecoder = new(); + private static readonly ConsensusRequestDecoder _requestsDecoder = new(); private static readonly LogEntryDecoder _logEntryDecoder = LogEntryDecoder.Instance; private readonly CappedArray _data; @@ -87,6 +89,7 @@ public void Encode(Transaction value, RlpBehaviors rlpBehaviors = RlpBehaviors.N } public void Encode(Withdrawal value) => _withdrawalDecoder.Encode(this, value); + public void Encode(ConsensusRequest value) => _requestsDecoder.Encode(this, value); public void Encode(LogEntry value) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs new file mode 100644 index 00000000000..bc928f87980 --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs @@ -0,0 +1,66 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; + +namespace Nethermind.Serialization.Rlp; + +public class WithdrawalRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder +{ + public int GetLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => + Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); + + public int GetContentLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => + Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey) + + Rlp.LengthOf(item.Amount); + + public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + int _ = rlpStream.ReadSequenceLength(); + Address sourceAddress = rlpStream.DecodeAddress(); + ArgumentNullException.ThrowIfNull(sourceAddress); + byte[] ValidatorPubkey = rlpStream.DecodeByteArray(); + ulong amount = rlpStream.DecodeULong(); + return new WithdrawalRequest() + { + SourceAddress = sourceAddress, + ValidatorPubkey = ValidatorPubkey, + Amount = amount + }; + } + + public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + int _ = decoderContext.ReadSequenceLength(); + Address sourceAddress = decoderContext.DecodeAddress(); + ArgumentNullException.ThrowIfNull(sourceAddress); + byte[] ValidatorPubkey = decoderContext.DecodeByteArray(); + ulong amount = decoderContext.DecodeULong(); + return new WithdrawalRequest() + { + SourceAddress = sourceAddress, + ValidatorPubkey = ValidatorPubkey, + Amount = amount + }; + } + + public void Encode(RlpStream stream, WithdrawalRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + int contentLength = GetContentLength(item, rlpBehaviors); + stream.StartSequence(contentLength); + stream.Encode(item.SourceAddress); + stream.Encode(item.ValidatorPubkey); + stream.Encode(item.Amount); + } + + public Rlp Encode(WithdrawalRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + RlpStream rlpStream = new(GetLength(item, rlpBehaviors)); + + Encode(rlpStream, item, rlpBehaviors); + + return new Rlp(rlpStream.Data.ToArray()); + } +} diff --git a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs index 5c847cdc750..fbfb6d81b8a 100644 --- a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs @@ -290,6 +290,9 @@ private static void VerifyGnosisShanghaiSpecifics(IReleaseSpec preShanghaiSpec, preShanghaiSpec.IsEip170Enabled.Should().Be(false); postShanghaiSpec.IsEip170Enabled.Should().Be(true); + + preShanghaiSpec.AuRaSystemCalls.Should().Be(true); + postShanghaiSpec.AuRaSystemCalls.Should().Be(true); } private static void VerifyGnosisPreShanghaiSpecifics(ISpecProvider specProvider) @@ -441,7 +444,8 @@ private static void CompareSpecs(IReleaseSpec expectedSpec, IReleaseSpec actualS .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.IsEip170Enabled)) .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.IsEip1283Enabled)) .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.LimitCodeSize)) - .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.UseConstantinopleNetGasMetering))) + .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.UseConstantinopleNetGasMetering)) + .Where(p => !isGnosis || p.Name != nameof(IReleaseSpec.AuRaSystemCalls))) { Assert.That(propertyInfo.GetValue(actualSpec), Is.EqualTo(propertyInfo.GetValue(expectedSpec)), activation + "." + propertyInfo.Name); @@ -739,6 +743,7 @@ void TestTransitions(ForkActivation activation, Action changes) r.MaximumUncleCount = 2; r.WithdrawalTimestamp = ulong.MaxValue; r.Eip4844TransitionTimestamp = ulong.MaxValue; + r.AuRaSystemCalls = false; }); TestTransitions((ForkActivation)1L, r => diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index 619f1a4a3e6..eae1c7db7a9 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -113,7 +113,6 @@ public OverridableReleaseSpec(IReleaseSpec spec) public bool IsEip4844Enabled => _spec.IsEip4844Enabled; public bool IsRip7212Enabled => _spec.IsRip7212Enabled; public bool IsEip3607Enabled { get; set; } - public bool IsEip158IgnoredAccount(Address address) { return _spec.IsEip158IgnoredAccount(address); @@ -145,6 +144,7 @@ public ulong Eip4844TransitionTimestamp _overridenEip4844TransitionTimeStamp = value; } } + public bool AuRaSystemCalls => _spec.AuRaSystemCalls; public bool IsEip1153Enabled => _spec.IsEip1153Enabled; public bool IsEip3651Enabled => _spec.IsEip3651Enabled; @@ -155,7 +155,11 @@ public ulong Eip4844TransitionTimestamp public bool IsEip5656Enabled => _spec.IsEip5656Enabled; public bool IsEip6780Enabled => _spec.IsEip6780Enabled; public bool IsEip4788Enabled => _spec.IsEip4788Enabled; - public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; + public Address? Eip4788ContractAddress => _spec.Eip4788ContractAddress; + public bool IsEip7002Enabled => _spec.IsEip7002Enabled; + public Address Eip7002ContractAddress => _spec.Eip7002ContractAddress; + public bool IsEip7251Enabled => _spec.IsEip7251Enabled; + public Address Eip7251ContractAddress => _spec.Eip7251ContractAddress; public bool IsEip2935Enabled => _spec.IsEip2935Enabled; public bool IsEip7709Enabled => _spec.IsEip7709Enabled; public Address Eip2935ContractAddress => _spec.Eip2935ContractAddress; @@ -163,5 +167,9 @@ public ulong Eip4844TransitionTimestamp public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; public long ElasticityMultiplier => _spec.ElasticityMultiplier; + + public bool IsEip6110Enabled => _spec.IsEip6110Enabled; + + public Address DepositContractAddress => _spec.DepositContractAddress; } } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs index 9761eefaca6..18e0c545ff3 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs @@ -117,6 +117,12 @@ public class ChainParameters public ulong? Eip6780TransitionTimestamp { get; set; } public ulong? Eip4788TransitionTimestamp { get; set; } public Address Eip4788ContractAddress { get; set; } + public ulong? Eip6110TransitionTimestamp { get; set; } + public Address DepositContractAddress { get; set; } + public ulong? Eip7002TransitionTimestamp { get; set; } + public Address Eip7002ContractAddress { get; set; } + public ulong? Eip7251TransitionTimestamp { get; set; } + public Address Eip7251ContractAddress { get; set; } public ulong? Eip2935TransitionTimestamp { get; set; } public Address Eip2935ContractAddress { get; set; } public ulong? Rip7212TransitionTimestamp { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index b098d0793ee..5790733e9ce 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -7,6 +7,7 @@ using System.Numerics; using System.Reflection; using Nethermind.Core; +using Nethermind.Core.Collections; using Nethermind.Core.Specs; using Nethermind.Int256; using Nethermind.Logging; @@ -251,11 +252,21 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip6780Enabled = (chainSpec.Parameters.Eip6780TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip4788Enabled = (chainSpec.Parameters.Eip4788TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip4788ContractAddress = chainSpec.Parameters.Eip4788ContractAddress; + releaseSpec.AuRaSystemCalls = chainSpec.SealEngineType == SealEngineType.AuRa; releaseSpec.IsEip2935Enabled = (chainSpec.Parameters.Eip2935TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.Eip2935ContractAddress = chainSpec.Parameters.Eip2935ContractAddress; releaseSpec.IsEip7702Enabled = (chainSpec.Parameters.Eip7702TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; + releaseSpec.IsEip6110Enabled = (chainSpec.Parameters.Eip6110TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; + releaseSpec.DepositContractAddress = chainSpec.Parameters.DepositContractAddress; + + releaseSpec.IsEip7002Enabled = (chainSpec.Parameters.Eip7002TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; + releaseSpec.Eip7002ContractAddress = chainSpec.Parameters.Eip7002ContractAddress; + + releaseSpec.IsEip7251Enabled = (chainSpec.Parameters.Eip7251TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; + releaseSpec.Eip7251ContractAddress = chainSpec.Parameters.Eip7251ContractAddress; + return releaseSpec; } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index c3ef15e6a1b..f1950b65229 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -11,6 +11,7 @@ using System.Text.Json; using Nethermind.Config; using Nethermind.Core; +using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Int256; using Nethermind.Serialization.Json; @@ -155,6 +156,13 @@ bool GetForInnerPathExistence(KeyValuePair o) => Eip1559BaseFeeInitialValue = chainSpecJson.Params.Eip1559BaseFeeInitialValue ?? Eip1559Constants.DefaultForkBaseFee, Eip1559BaseFeeMaxChangeDenominator = chainSpecJson.Params.Eip1559BaseFeeMaxChangeDenominator ?? Eip1559Constants.DefaultBaseFeeMaxChangeDenominator, + + Eip6110TransitionTimestamp = chainSpecJson.Params.Eip6110TransitionTimestamp, + DepositContractAddress = chainSpecJson.Params.DepositContractAddress ?? Eip6110Constants.MainnetDepositContractAddress, + Eip7002TransitionTimestamp = chainSpecJson.Params.Eip7002TransitionTimestamp, + Eip7002ContractAddress = chainSpecJson.Params.Eip7002ContractAddress ?? Eip7002Constants.WithdrawalRequestPredeployAddress, + Eip7251TransitionTimestamp = chainSpecJson.Params.Eip7251TransitionTimestamp, + Eip7251ContractAddress = chainSpecJson.Params.Eip7251ContractAddress ?? Eip7251Constants.ConsolidationRequestPredeployAddress, Eip1559FeeCollector = chainSpecJson.Params.Eip1559FeeCollector, Eip1559FeeCollectorTransition = chainSpecJson.Params.Eip1559FeeCollectorTransition, Eip1559BaseFeeMinValueTransition = chainSpecJson.Params.Eip1559BaseFeeMinValueTransition, @@ -414,9 +422,16 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.TxRoot = Keccak.EmptyTreeHash; genesisHeader.BaseFeePerGas = baseFee; bool withdrawalsEnabled = chainSpecJson.Params.Eip4895TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4895TransitionTimestamp; + bool depositsEnabled = chainSpecJson.Params.Eip6110TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip6110TransitionTimestamp; + bool withdrawalRequestsEnabled = chainSpecJson.Params.Eip7002TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip7002TransitionTimestamp; + bool consolidationRequestsEnabled = chainSpecJson.Params.Eip7251TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip7251TransitionTimestamp; if (withdrawalsEnabled) genesisHeader.WithdrawalsRoot = Keccak.EmptyTreeHash; + var requestsEnabled = depositsEnabled || withdrawalRequestsEnabled || consolidationRequestsEnabled; + if (requestsEnabled) + genesisHeader.RequestsRoot = Keccak.EmptyTreeHash; ; + bool isEip4844Enabled = chainSpecJson.Params.Eip4844TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4844TransitionTimestamp; if (isEip4844Enabled) { @@ -430,13 +445,25 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.ParentBeaconBlockRoot = Keccak.Zero; } + if (requestsEnabled) + { + genesisHeader.ReceiptsRoot = Keccak.EmptyTreeHash; + } + genesisHeader.AuRaStep = step; genesisHeader.AuRaSignature = auRaSignature; if (withdrawalsEnabled) - chainSpec.Genesis = new Block(genesisHeader, Array.Empty(), Array.Empty(), Array.Empty()); + chainSpec.Genesis = new Block( + genesisHeader, + Array.Empty(), + Array.Empty(), + Array.Empty(), + requestsEnabled ? Array.Empty() : null); else + { chainSpec.Genesis = new Block(genesisHeader); + } } private static void LoadAllocations(ChainSpecJson chainSpecJson, ChainSpec chainSpec) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs index 8f16193e8e7..c001f20213a 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/Json/ChainSpecParamsJson.cs @@ -147,6 +147,12 @@ internal class ChainSpecParamsJson public ulong? Eip4844MaxBlobGasPerBlock { get; set; } public UInt256? Eip4844MinBlobGasPrice { get; set; } public ulong? Eip4844TargetBlobGasPerBlock { get; set; } + public ulong? Eip6110TransitionTimestamp { get; set; } + public Address DepositContractAddress { get; set; } + public ulong? Eip7002TransitionTimestamp { get; set; } + public Address Eip7002ContractAddress { get; set; } + public ulong? Eip7251TransitionTimestamp { get; set; } + public Address Eip7251ContractAddress { get; set; } public ulong? Rip7212TransitionTimestamp { get; set; } public ulong? Eip7702TransitionTimestamp { get; set; } } diff --git a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs index 4180bb4cd52..81bd5d764fe 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/00_Olympic.cs @@ -26,6 +26,12 @@ protected Olympic() Eip1559TransitionBlock = long.MaxValue; ValidateChainId = true; ValidateReceipts = true; + + // The below addresses are added for all forks, but the given EIPs can be enabled at a specific timestamp or block. + Eip7251ContractAddress = Eip7251Constants.ConsolidationRequestPredeployAddress; + Eip7002ContractAddress = Eip7002Constants.WithdrawalRequestPredeployAddress; + DepositContractAddress = Eip6110Constants.MainnetDepositContractAddress; + AuRaSystemCalls = false; } public static IReleaseSpec Instance => LazyInitializer.EnsureInitialized(ref _instance, () => new Olympic()); diff --git a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs index c9822e42f86..7fd7e8c348d 100644 --- a/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs +++ b/src/Nethermind/Nethermind.Specs/Forks/18_Prague.cs @@ -17,6 +17,9 @@ protected Prague() IsEip2537Enabled = true; IsEip2935Enabled = true; IsEip7702Enabled = true; + IsEip6110Enabled = true; + IsEip7002Enabled = true; + IsEip7251Enabled = true; IsRip7212Enabled = true; Eip2935ContractAddress = Eip2935Constants.BlockHashHistoryAddress; } diff --git a/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs b/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs index ce8148f311a..6470a8a26b7 100644 --- a/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/MainnetSpecProvider.cs @@ -26,6 +26,7 @@ public class MainnetSpecProvider : ISpecProvider public const ulong BeaconChainGenesisTimestamp = 0x5fc63057; public const ulong ShanghaiBlockTimestamp = 0x64373057; public const ulong CancunBlockTimestamp = 0x65F1B057; + //TODO correct this timestamp! public const ulong PragueBlockTimestamp = ulong.MaxValue - 2; public const ulong OsakaBlockTimestamp = ulong.MaxValue - 1; diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index 6220b300830..0c3d36cb1a4 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -69,6 +69,7 @@ public ReleaseSpec Clone() public long Eip1559TransitionBlock { get; set; } public ulong WithdrawalTimestamp { get; set; } public ulong Eip4844TransitionTimestamp { get; set; } + public bool AuRaSystemCalls { get; set; } public Address Eip1559FeeCollector { get; set; } public UInt256? Eip1559BaseFeeMinValue { get; set; } public UInt256 ForkBaseFee { get; set; } = Eip1559Constants.DefaultForkBaseFee; @@ -85,6 +86,10 @@ public ReleaseSpec Clone() public bool IsEip6780Enabled { get; set; } public bool IsEip4788Enabled { get; set; } public bool IsEip7702Enabled { get; set; } + public bool IsEip7002Enabled { get; set; } + public Address Eip7002ContractAddress { get; set; } + public bool IsEip7251Enabled { get; set; } + public Address Eip7251ContractAddress { get; set; } private Address _eip4788ContractAddress; public Address Eip4788ContractAddress @@ -93,6 +98,14 @@ public Address Eip4788ContractAddress set => _eip4788ContractAddress = value; } + public bool IsEip6110Enabled { get; set; } + + private Address _depositContractAddress; + public Address DepositContractAddress + { + get => IsEip6110Enabled ? _depositContractAddress : null; + set => _depositContractAddress = value; + } public bool IsEip2935Enabled { get; set; } public bool IsEip7709Enabled { get; set; } @@ -102,5 +115,7 @@ public Address Eip2935ContractAddress get => IsEip2935Enabled ? _eip2935ContractAddress : null; set => _eip2935ContractAddress = value; } - }; + + + } } diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index 15f641da85e..8691ed86768 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -108,17 +108,13 @@ public SystemTransactionReleaseSpec(IReleaseSpec spec) public bool IsEip3541Enabled => _spec.IsEip3541Enabled; public bool IsEip3607Enabled => _spec.IsEip3607Enabled; - public bool IsEip158IgnoredAccount(Address address) { return _spec.IsEip158IgnoredAccount(address); } - public long Eip1559TransitionBlock => _spec.Eip1559TransitionBlock; public ulong WithdrawalTimestamp => _spec.WithdrawalTimestamp; - public ulong Eip4844TransitionTimestamp => _spec.Eip4844TransitionTimestamp; - public Address Eip1559FeeCollector => _spec.Eip1559FeeCollector; public bool IsEip1153Enabled => _spec.IsEip1153Enabled; public bool IsEip3651Enabled => _spec.IsEip3651Enabled; @@ -129,6 +125,12 @@ public bool IsEip158IgnoredAccount(Address address) public bool IsEip6780Enabled => _spec.IsEip6780Enabled; public bool IsEip4788Enabled => _spec.IsEip4788Enabled; public Address Eip4788ContractAddress => _spec.Eip4788ContractAddress; + + public bool AuRaSystemCalls => false; + public bool IsEip7002Enabled => _spec.IsEip7002Enabled; + public Address Eip7002ContractAddress => _spec.Eip7002ContractAddress; + public bool IsEip7251Enabled => _spec.IsEip7251Enabled; + public Address Eip7251ContractAddress => _spec.Eip7251ContractAddress; public bool IsEip2935Enabled => _spec.IsEip2935Enabled; public bool IsEip7709Enabled => _spec.IsEip7709Enabled; public Address Eip2935ContractAddress => _spec.Eip2935ContractAddress; @@ -136,5 +138,9 @@ public bool IsEip158IgnoredAccount(Address address) public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; public long ElasticityMultiplier => _spec.ElasticityMultiplier; + + public bool IsEip6110Enabled => _spec.IsEip6110Enabled; + + public Address DepositContractAddress => _spec.DepositContractAddress; } } diff --git a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs index ee924de5b4e..8197dae5530 100644 --- a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs @@ -69,7 +69,7 @@ public void Eip_158_touch_zero_value_system_account_is_not_deleted() provider.Commit(Homestead.Instance); var releaseSpec = new ReleaseSpec() { IsEip158Enabled = true }; - provider.InsertCode(systemUser, System.Text.Encoding.UTF8.GetBytes(""), releaseSpec); + provider.InsertCode(systemUser, System.Text.Encoding.UTF8.GetBytes(""), releaseSpec, false); provider.Commit(releaseSpec); provider.GetAccount(systemUser).Should().NotBeNull(); @@ -182,7 +182,7 @@ public void Restore_in_the_middle() provider.CreateAccount(_address1, 1); provider.AddToBalance(_address1, 1, Frontier.Instance); provider.IncrementNonce(_address1); - provider.InsertCode(_address1, new byte[] { 1 }, Frontier.Instance); + provider.InsertCode(_address1, new byte[] { 1 }, Frontier.Instance, false); provider.UpdateStorageRoot(_address1, Hash2); Assert.That(provider.GetNonce(_address1), Is.EqualTo(UInt256.One)); diff --git a/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs b/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs index 21c6b823c78..bcdc414e3c1 100644 --- a/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StatsCollectorTests.cs @@ -31,10 +31,10 @@ public void Can_collect_stats([Values(false, true)] bool parallel) WorldState stateProvider = new(trieStore, codeDb, LimboLogs.Instance); stateProvider.CreateAccount(TestItem.AddressA, 1); - stateProvider.InsertCode(TestItem.AddressA, new byte[] { 1, 2, 3 }, Istanbul.Instance); + stateProvider.InsertCode(TestItem.AddressA, new byte[] { 1, 2, 3 }, Istanbul.Instance, false); stateProvider.CreateAccount(TestItem.AddressB, 1); - stateProvider.InsertCode(TestItem.AddressB, new byte[] { 1, 2, 3, 4 }, Istanbul.Instance); + stateProvider.InsertCode(TestItem.AddressB, new byte[] { 1, 2, 3, 4 }, Istanbul.Instance, false); for (int i = 0; i < 1000; i++) { diff --git a/src/Nethermind/Nethermind.State/IWorldState.cs b/src/Nethermind/Nethermind.State/IWorldState.cs index 9c78813ce93..e90d806dc41 100644 --- a/src/Nethermind/Nethermind.State/IWorldState.cs +++ b/src/Nethermind/Nethermind.State/IWorldState.cs @@ -86,13 +86,13 @@ public interface IWorldState : IJournal, IReadOnlyStateProvider void CreateAccount(Address address, in UInt256 balance, in UInt256 nonce = default); void CreateAccountIfNotExists(Address address, in UInt256 balance, in UInt256 nonce = default); - void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false); + void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isSystemCall = false, bool isGenesis = false); - void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec); + void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec, bool isSystemCall = false); void AddToBalanceAndCreateIfNotExists(Address address, in UInt256 balanceChange, IReleaseSpec spec); - void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec); + void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec, bool isSystemCall = false); void UpdateStorageRoot(Address address, Hash256 storageRoot); diff --git a/src/Nethermind/Nethermind.State/Proofs/PatriciaTrieT.cs b/src/Nethermind/Nethermind.State/Proofs/PatriciaTrieT.cs index 4b28e2617d5..66be88ea5e6 100644 --- a/src/Nethermind/Nethermind.State/Proofs/PatriciaTrieT.cs +++ b/src/Nethermind/Nethermind.State/Proofs/PatriciaTrieT.cs @@ -22,13 +22,14 @@ public abstract class PatriciaTrie : PatriciaTree /// true to maintain an in-memory database for proof computation; /// otherwise, false. /// - public PatriciaTrie(T[]? list, bool canBuildProof, ICappedArrayPool? bufferPool = null) + protected PatriciaTrie(T[]? list, bool canBuildProof, ICappedArrayPool? bufferPool = null) : base(canBuildProof ? new MemDb() : NullDb.Instance, EmptyTreeHash, false, false, NullLogManager.Instance, bufferPool: bufferPool) { CanBuildProof = canBuildProof; if (list?.Length > 0) { + // ReSharper disable once VirtualMemberCallInConstructor Initialize(list); UpdateRootHash(); } diff --git a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs new file mode 100644 index 00000000000..63b04be3326 --- /dev/null +++ b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs @@ -0,0 +1,39 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core.Buffers; +using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Crypto; +using Nethermind.Serialization.Rlp; +using Nethermind.State.Trie; +using Nethermind.Trie; + +namespace Nethermind.State.Proofs; + +public class RequestsTrie : PatriciaTrie +{ + private static readonly ConsensusRequestDecoder _codec = new(); + + public RequestsTrie(ConsensusRequest[]? requests, bool canBuildProof = false, ICappedArrayPool? bufferPool = null) + : base(requests, canBuildProof, bufferPool) + { + } + + protected override void Initialize(ConsensusRequest[] requests) + { + var key = 0; + + foreach (ConsensusRequest exit in requests) + { + Set(Rlp.Encode(key++).Bytes, _codec.Encode(exit, RlpBehaviors.SkipTypedWrapping).Bytes); + } + } + + public static Hash256 CalculateRoot(ConsensusRequest[] requests) + { + using TrackingCappedArrayPool cappedArray = new(requests.Length * 4); + Hash256 rootHash = new RequestsTrie(requests, canBuildProof: false, bufferPool: cappedArray).RootHash; + return rootHash; + } +} diff --git a/src/Nethermind/Nethermind.State/Proofs/WithdrawalTrie.cs b/src/Nethermind/Nethermind.State/Proofs/WithdrawalTrie.cs index 144eaa018ee..c9bf10a1142 100644 --- a/src/Nethermind/Nethermind.State/Proofs/WithdrawalTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/WithdrawalTrie.cs @@ -17,7 +17,7 @@ public class WithdrawalTrie : PatriciaTrie /// /// The withdrawals to build the trie of. - public WithdrawalTrie(Withdrawal[] withdrawals, bool canBuildProof = false) + public WithdrawalTrie(Withdrawal[]? withdrawals, bool canBuildProof = false) : base(withdrawals, canBuildProof) => ArgumentNullException.ThrowIfNull(withdrawals); protected override void Initialize(Withdrawal[] withdrawals) diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 81cd907963b..d1e09026156 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -119,8 +119,10 @@ public UInt256 GetBalance(Address address) return account?.Balance ?? UInt256.Zero; } - public void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) + public void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false, bool isSystemCall = false) { + if (isSystemCall && address == Address.SystemUser) return; + _needsStateRootUpdate = true; // Don't reinsert if already inserted. This can be the case when the same @@ -168,14 +170,14 @@ public void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory c } } - private void SetNewBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSubtracting) + private void SetNewBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSubtracting, bool isSystemCall = false) { _needsStateRootUpdate = true; Account GetThroughCacheCheckExists() { Account result = GetThroughCache(address); - if (result is null) + if (result is null && !isSystemCall) { if (_logger.IsError) _logger.Error("Updating balance of a non-existing account"); throw new InvalidOperationException("Updating balance of a non-existing account"); @@ -193,6 +195,8 @@ Account GetThroughCacheCheckExists() if (releaseSpec.IsEip158Enabled && !isSubtracting) { Account touched = GetThroughCacheCheckExists(); + if (touched is null) return; + if (_logger.IsTrace) _logger.Trace($" Touch {address} (balance)"); if (touched.IsEmpty) { @@ -204,6 +208,7 @@ Account GetThroughCacheCheckExists() } Account account = GetThroughCacheCheckExists(); + if (account is null) return; if (isSubtracting && account.Balance < balanceChange) { @@ -217,16 +222,16 @@ Account GetThroughCacheCheckExists() PushUpdate(address, changedAccount); } - public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) + public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSystemCall = false) { _needsStateRootUpdate = true; - SetNewBalance(address, balanceChange, releaseSpec, true); + SetNewBalance(address, balanceChange, releaseSpec, true, isSystemCall); } - public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec) + public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec releaseSpec, bool isSystemCall = false) { _needsStateRootUpdate = true; - SetNewBalance(address, balanceChange, releaseSpec, false); + SetNewBalance(address, balanceChange, releaseSpec, false, isSystemCall); } /// @@ -758,7 +763,7 @@ private void PushUpdate(Address address, Account account) private void PushTouch(Address address, Account account, IReleaseSpec releaseSpec, bool isZero) { - if (isZero && releaseSpec.IsEip158IgnoredAccount(address)) return; + if (isZero && releaseSpec.IsEip158IgnoredAccount(address) && releaseSpec.AuRaSystemCalls) return; Push(ChangeType.Touch, address, account); } diff --git a/src/Nethermind/Nethermind.State/WorldState.cs b/src/Nethermind/Nethermind.State/WorldState.cs index 60f5492cd60..aa8fd4f170a 100644 --- a/src/Nethermind/Nethermind.State/WorldState.cs +++ b/src/Nethermind/Nethermind.State/WorldState.cs @@ -144,23 +144,21 @@ public void CreateAccount(Address address, in UInt256 balance, in UInt256 nonce { _stateProvider.CreateAccount(address, balance, nonce); } - - public void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) + public void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isSystemCall, bool isGenesis = false) { - _stateProvider.InsertCode(address, codeHash, code, spec, isGenesis); + _stateProvider.InsertCode(address, codeHash, code, spec, isGenesis, isSystemCall); } - - public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec) + public void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec, bool isSystemCall = false) { - _stateProvider.AddToBalance(address, balanceChange, spec); + _stateProvider.AddToBalance(address, balanceChange, spec, isSystemCall); } public void AddToBalanceAndCreateIfNotExists(Address address, in UInt256 balanceChange, IReleaseSpec spec) { _stateProvider.AddToBalanceAndCreateIfNotExists(address, balanceChange, spec); } - public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec) + public void SubtractFromBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec, bool isSystemCall = false) { - _stateProvider.SubtractFromBalance(address, balanceChange, spec); + _stateProvider.SubtractFromBalance(address, balanceChange, spec, isSystemCall); } public void UpdateStorageRoot(Address address, Hash256 storageRoot) { diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs index ecd34afc769..59168a2a9a7 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs @@ -302,6 +302,7 @@ private SyncTestContext CreateSyncManager(int index) stateProvider, receiptStorage, new BlockhashStore(specProvider, stateProvider), + txProcessor, logManager); RecoverSignatures step = new(ecdsa, txPool, specProvider, logManager); @@ -324,6 +325,7 @@ private SyncTestContext CreateSyncManager(int index) devState, receiptStorage, new BlockhashStore(specProvider, devState), + devTxProcessor, logManager); BlockchainProcessor devChainProcessor = new(tree, devBlockProcessor, step, stateReader, logManager, diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs index 6509942731e..c2f2e08128e 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SynchronizerTests.cs @@ -38,6 +38,7 @@ using Nethermind.Trie.Pruning; using NSubstitute; using NUnit.Framework; +using Nethermind.Synchronization.SnapSync; using Nethermind.Trie; namespace Nethermind.Synchronization.Test diff --git a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs index 3ab8c9d1127..32daed46b5d 100644 --- a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs +++ b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs @@ -1323,7 +1323,7 @@ public void Accept( // but we know that we have multiple optimizations and assumptions on trees ExpectAccounts = visitingOptions.ExpectAccounts, MaxDegreeOfParallelism = visitingOptions.MaxDegreeOfParallelism, - IsStorage = storageAddr is not null + IsStorage = storageAddr != null }; if (storageAddr is not null) diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs b/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs index c15a5a9f906..de1d3bcc3bc 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Nethermind.Core.Crypto; diff --git a/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs b/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs index 6c6a433d6da..557e519a36e 100644 --- a/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs +++ b/src/Nethermind/Nethermind.Trie/TrieStoreWithReadFlags.cs @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Trie.Pruning; From 8badf7dd60ef257da6f20a6037da716c8017a814 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 22 Aug 2024 14:21:21 +0200 Subject: [PATCH 328/551] Build fix (cherry picked from commit f65e216d5fb00d97120423d551bd3f1deb59a8fe) --- .../Core/AuthorizedCodeInfoRepository.cs | 8 ++++---- .../Rlp/RlpDecodeBlockBenchmark.cs | 2 +- .../Rlp/RlpEncodeBlockBenchmark.cs | 2 +- .../Rlp/RlpEncodeHeaderBenchmark.cs | 2 +- .../Nethermind.Evm.Benchmark/EvmBenchmarks.cs | 4 ++-- .../MultipleUnsignedOperations.cs | 2 +- .../StaticCallBenchmarks.cs | 2 +- .../ConsolidationRequestProcessorTest.cs | 4 ++-- .../WithdrawalRequestsProcessorTests.cs | 4 ++-- .../Nethermind.Evm/ExecutionEnvironment.cs | 16 ++++++++-------- .../TransactionProcessing/SystemTxProcessor.cs | 2 +- .../EthModuleBenchmarks.cs | 4 ++-- .../Eth62ProtocolHandlerBenchmarks.cs | 2 +- .../HandshakeBenchmarks.cs | 2 +- 14 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs index d65147dec71..adb1d2a0ba0 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs @@ -23,7 +23,7 @@ namespace Nethermind.Benchmarks.Core; [MemoryDiagnoser] -public class AuthorizedCodeInfoRepositoryBenchmark +public class CodeInfoRepositoryBenchmark { private IReleaseSpec _spec = MainnetSpecProvider.Instance.GetSpec(MainnetSpecProvider.PragueActivation); @@ -31,7 +31,7 @@ public class AuthorizedCodeInfoRepositoryBenchmark private AuthorizationTuple[] Tuples100; private AuthorizationTuple[] Tuples1k; - private AuthorizedCodeInfoRepository sut; + private CodeInfoRepository sut; private static EthereumEcdsa _ethereumEcdsa; private WorldState _stateProvider; @@ -45,8 +45,8 @@ public void GlobalSetup() _stateProvider.CreateAccount(Address.Zero, 100000000000000); _stateProvider.Commit(_spec); - _ethereumEcdsa = new(1, new OneLoggerLogManager(NullLogger.Instance)); - sut = new AuthorizedCodeInfoRepository(new CodeInfoRepository(), 1, NullLogger.Instance); + _ethereumEcdsa = new(1); + sut = new(1); var list = new List(); var rnd = new Random(); var addressBuffer = new byte[20]; diff --git a/src/Nethermind/Nethermind.Benchmark/Rlp/RlpDecodeBlockBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Rlp/RlpDecodeBlockBenchmark.cs index e5f923d7fc8..99f343246f4 100644 --- a/src/Nethermind/Nethermind.Benchmark/Rlp/RlpDecodeBlockBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Rlp/RlpDecodeBlockBenchmark.cs @@ -22,7 +22,7 @@ public RlpDecodeBlockBenchmark() var transactions = new Transaction[100]; for (int i = 0; i < 100; i++) { - transactions[i] = Build.A.Transaction.WithData(new byte[] { (byte)i }).WithNonce((UInt256)i).WithValue((UInt256)i).Signed(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), TestItem.PrivateKeyA).TestObject; + transactions[i] = Build.A.Transaction.WithData(new byte[] { (byte)i }).WithNonce((UInt256)i).WithValue((UInt256)i).Signed(new EthereumEcdsa(TestBlockchainIds.ChainId), TestItem.PrivateKeyA).TestObject; } _scenarios = new[] diff --git a/src/Nethermind/Nethermind.Benchmark/Rlp/RlpEncodeBlockBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Rlp/RlpEncodeBlockBenchmark.cs index c055004e014..12324708b79 100644 --- a/src/Nethermind/Nethermind.Benchmark/Rlp/RlpEncodeBlockBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Rlp/RlpEncodeBlockBenchmark.cs @@ -28,7 +28,7 @@ public RlpEncodeBlockBenchmark() var transactions = new Transaction[100]; for (int i = 0; i < 100; i++) { - transactions[i] = Build.A.Transaction.WithData(new byte[] { (byte)i }).WithNonce((UInt256)i).WithValue((UInt256)i).Signed(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), TestItem.PrivateKeyA).TestObject; + transactions[i] = Build.A.Transaction.WithData(new byte[] { (byte)i }).WithNonce((UInt256)i).WithValue((UInt256)i).Signed(new EthereumEcdsa(TestBlockchainIds.ChainId), TestItem.PrivateKeyA).TestObject; } _scenarios = new[] diff --git a/src/Nethermind/Nethermind.Benchmark/Rlp/RlpEncodeHeaderBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Rlp/RlpEncodeHeaderBenchmark.cs index a572eb1424b..eb30eb284ef 100644 --- a/src/Nethermind/Nethermind.Benchmark/Rlp/RlpEncodeHeaderBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Rlp/RlpEncodeHeaderBenchmark.cs @@ -27,7 +27,7 @@ public RlpEncodeHeaderBenchmark() var transactions = new Transaction[100]; for (int i = 0; i < 100; i++) { - transactions[i] = Build.A.Transaction.WithData(new byte[] { (byte)i }).WithNonce((UInt256)i).WithValue((UInt256)i).Signed(new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance), TestItem.PrivateKeyA).TestObject; + transactions[i] = Build.A.Transaction.WithData(new byte[] { (byte)i }).WithNonce((UInt256)i).WithValue((UInt256)i).Signed(new EthereumEcdsa(TestBlockchainIds.ChainId), TestItem.PrivateKeyA).TestObject; } _scenarios = new[] diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs index 4399d6eaca1..949d6b89cc3 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs @@ -44,7 +44,7 @@ public void GlobalSetup() _stateProvider = new WorldState(trieStore, codeDb, new OneLoggerLogManager(NullLogger.Instance)); _stateProvider.CreateAccount(Address.Zero, 1000.Ether()); _stateProvider.Commit(_spec); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(0); _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, LimboLogs.Instance); _environment = new ExecutionEnvironment @@ -55,7 +55,7 @@ public void GlobalSetup() codeInfo: new CodeInfo(ByteCode), value: 0, transferValue: 0, - txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null), + txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, codeInfoRepository), inputData: default, isSystemExecutionEnv: false ); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs index acc3c85632e..4f736d51335 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs @@ -76,7 +76,7 @@ public void GlobalSetup() _stateProvider.Commit(_spec); Console.WriteLine(MuirGlacier.Instance); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(0); _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, new OneLoggerLogManager(NullLogger.Instance)); _environment = new ExecutionEnvironment diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs index 0dc55f90381..90475d31476 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs @@ -87,7 +87,7 @@ public void GlobalSetup() _stateProvider.Commit(_spec); Console.WriteLine(MuirGlacier.Instance); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(0); _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, new OneLoggerLogManager(NullLogger.Instance)); _environment = new ExecutionEnvironment diff --git a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs index 057b2a9cc89..5f83f980809 100644 --- a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs +++ b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs @@ -49,7 +49,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - _codeInfoRepository = new CodeInfoRepository(); + _codeInfoRepository = new CodeInfoRepository(0); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); @@ -63,7 +63,7 @@ public void Setup() return new TransactionResult(); }); - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); } diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs index b73564c0c8b..0e02b37e349 100644 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -49,7 +49,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - _codeInfoRepository = new CodeInfoRepository(); + _codeInfoRepository = new CodeInfoRepository(1); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); @@ -63,7 +63,7 @@ public void Setup() return new TransactionResult(); }); - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, LimboLogs.Instance); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); } diff --git a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs index cb7a163a7ae..54a58622dd9 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs @@ -38,44 +38,44 @@ public ExecutionEnvironment /// /// Parsed bytecode for the current call. /// - public readonly CodeInfo CodeInfo = codeInfo; + public readonly CodeInfo CodeInfo; /// /// Currently executing account (in DELEGATECALL this will be equal to caller). /// - public readonly Address ExecutingAccount = executingAccount; + public readonly Address ExecutingAccount; /// /// Caller /// - public readonly Address Caller = caller; + public readonly Address Caller; /// /// Bytecode source (account address). /// - public readonly Address? CodeSource = codeSource; + public readonly Address? CodeSource; /// /// Parameters / arguments of the current call. /// - public readonly ReadOnlyMemory InputData = inputData; + public readonly ReadOnlyMemory InputData; /// /// Transaction originator /// - public readonly TxExecutionContext TxExecutionContext = txExecutionContext; + public readonly TxExecutionContext TxExecutionContext; /// /// ETH value transferred in this call. /// - public readonly UInt256 TransferValue = transferValue; + public readonly UInt256 TransferValue; /// /// Value information passed (it is different from transfer value in DELEGATECALL. /// DELEGATECALL behaves like a library call and it uses the value information from the caller even /// as no transfer happens. /// - public readonly UInt256 Value = value; + public readonly UInt256 Value; /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. public readonly int CallDepth; diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs index 333ce0dcd88..273620172aa 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/SystemTxProcessor.cs @@ -304,7 +304,7 @@ protected virtual ExecutionEnvironment BuildExecutionEnvironment( Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0); if (recipient is null) ThrowInvalidDataException("Recipient has not been resolved properly before tx execution"); - TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes); + TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes, _codeInfoRepository); CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data?.AsArray() ?? Array.Empty()) : _codeInfoRepository.GetCachedCodeInfo(WorldState, recipient, spec); diff --git a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs index f82c8ee6540..d1b8f6e8af6 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs @@ -81,7 +81,7 @@ public void GlobalSetup() new SyncConfig(), LimboLogs.Instance); _blockhashProvider = new BlockhashProvider(blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(1); _virtualMachine = new VirtualMachine(_blockhashProvider, specProvider, codeInfoRepository, LimboLogs.Instance); Block genesisBlock = Build.A.Block.Genesis.TestObject; @@ -97,7 +97,7 @@ TransactionProcessor transactionProcessor BlockProcessor blockProcessor = new(specProvider, Always.Valid, new RewardCalculator(specProvider), transactionsExecutor, stateProvider, NullReceiptStorage.Instance, new BlockhashStore(specProvider, stateProvider), transactionProcessor, LimboLogs.Instance); - EthereumEcdsa ecdsa = new(specProvider.ChainId, LimboLogs.Instance); + EthereumEcdsa ecdsa = new(specProvider.ChainId); BlockchainProcessor blockchainProcessor = new( blockTree, blockProcessor, diff --git a/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs b/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs index 0f8bae8edc8..5700d30de35 100644 --- a/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs +++ b/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs @@ -51,7 +51,7 @@ public void SetUp() _ser.Register(new TransactionsMessageSerializer()); _ser.Register(new StatusMessageSerializer()); NodeStatsManager stats = new NodeStatsManager(TimerFactory.Default, LimboLogs.Instance); - var ecdsa = new EthereumEcdsa(TestBlockchainIds.ChainId, LimboLogs.Instance); + var ecdsa = new EthereumEcdsa(TestBlockchainIds.ChainId); var tree = Build.A.BlockTree().TestObject; var stateProvider = new WorldState(new TrieStore(new MemDb(), LimboLogs.Instance), new MemDb(), LimboLogs.Instance); var specProvider = MainnetSpecProvider.Instance; diff --git a/src/Nethermind/Nethermind.Network.Benchmark/HandshakeBenchmarks.cs b/src/Nethermind/Nethermind.Network.Benchmark/HandshakeBenchmarks.cs index f41aba98baa..8b7c6d6f942 100644 --- a/src/Nethermind/Nethermind.Network.Benchmark/HandshakeBenchmarks.cs +++ b/src/Nethermind/Nethermind.Network.Benchmark/HandshakeBenchmarks.cs @@ -76,7 +76,7 @@ public void Dispose() } } - private readonly IEthereumEcdsa _ecdsa = new EthereumEcdsa(BlockchainIds.Sepolia, LimboLogs.Instance); // TODO: separate general crypto signer from Ethereum transaction signing + private readonly IEthereumEcdsa _ecdsa = new EthereumEcdsa(BlockchainIds.Sepolia); // TODO: separate general crypto signer from Ethereum transaction signing private IMessageSerializationService _messageSerializationService; From 3be0b1cf5cd0868ab04ab86935a65edecb6077d9 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 22 Aug 2024 22:15:37 +0200 Subject: [PATCH 329/551] change nonce to ulong (cherry picked from commit 29ea2ec2e4595952288840881ecb330c889af933) --- .../Crypto/EthereumEcdsaTests.cs | 6 +- .../AuthorizationTupleDecoderTests.cs | 50 +++----------- .../Nethermind.Core/AuthorizationTuple.cs | 6 +- .../CodeInfoRepositoryTests.cs | 28 ++++---- .../IntrinsicGasCalculatorTests.cs | 12 ++-- .../TransactionProcessorEip7702Tests.cs | 28 ++++---- .../Nethermind.Evm/CodeInfoRepository.cs | 69 +++++++++++-------- .../Eip7702/AuthorizationTupleDecoder.cs | 46 +++---------- 8 files changed, 98 insertions(+), 147 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs index 59747b9914e..28c28d275e8 100644 --- a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs @@ -81,8 +81,8 @@ public void Sign_generic_network() public static IEnumerable AuthorityTupleTestCaseSources() { - yield return CreateAuthorizationTuple(ulong.MaxValue, Build.A.Address.TestObjectInternal, UInt256.MaxValue); - yield return CreateAuthorizationTuple(1, Address.Zero, null); + yield return CreateAuthorizationTuple(ulong.MaxValue, Build.A.Address.TestObjectInternal, ulong.MaxValue); + yield return CreateAuthorizationTuple(1, Address.Zero, 0); } [TestCaseSource(nameof(AuthorityTupleTestCaseSources))] @@ -95,7 +95,7 @@ public void RecoverAddress_AuthorizationTupleOfDifferentSize_RecoversAddressCorr Assert.That(authority, Is.EqualTo(authorization.Authority)); } - private static AuthorizationTuple CreateAuthorizationTuple(ulong chainId, Address codeAddress, UInt256? nonce) + private static AuthorizationTuple CreateAuthorizationTuple(ulong chainId, Address codeAddress, ulong nonce) { AuthorizationTupleDecoder decoder = new(); RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs index fef9f103a7c..3a38781a4f4 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs @@ -21,12 +21,12 @@ public class AuthorizationTupleDecoderTests { public static IEnumerable AuthorizationTupleEncodeCases() { - yield return new AuthorizationTuple(0, Address.Zero, null, new Signature(new byte[64], 0)); + yield return new AuthorizationTuple(0, Address.Zero, 0, new Signature(new byte[64], 0)); yield return new AuthorizationTuple(0, Address.Zero, 0, new Signature(new byte[64], 0)); yield return new AuthorizationTuple( ulong.MaxValue, new Address(Enumerable.Range(0, 20).Select(i => (byte)0xff).ToArray()), - UInt256.MaxValue, + ulong.MaxValue, new Signature(Enumerable.Range(0, 64).Select(i => (byte)0xff).ToArray(), 1)); } @@ -41,33 +41,10 @@ public void Encode_TupleHasValues_TupleCanBeDecodedToEquivalentTuple(Authorizati sut.Decode(result).Should().BeEquivalentTo(item); } - - [Test] - public void Encode_NonceIsNull_NonceIsAlsoNullAfterDecoding() - { - AuthorizationTuple item = new(0, Address.Zero, null, new Signature(new byte[64], 0)); - AuthorizationTupleDecoder sut = new(); - - RlpStream result = sut.Encode(item); - result.Position = 0; - - Assert.That(sut.Decode(result).Nonce, Is.Null); - } - - [Test] - public void Decode_NonceItemListIsGreaterThan1_ThrowsRlpException() - { - RlpStream stream = TupleRlpStreamWithTwoNonces(); - - AuthorizationTupleDecoder sut = new(); - - Assert.That(() => sut.Decode(stream), Throws.TypeOf()); - } - [Test] - public void DecodeValueDecoderContext_NonceItemListIsGreaterThan1_ThrowsRlpException() + public void DecodeValueDecoderContext_CodeAddressIsNull_ThrowsArgumentNullException() { - RlpStream stream = TupleRlpStreamWithTwoNonces(); + RlpStream stream = TupleRlpStreamWithNull(); AuthorizationTupleDecoder sut = new(); Assert.That(() => @@ -75,30 +52,25 @@ public void DecodeValueDecoderContext_NonceItemListIsGreaterThan1_ThrowsRlpExcep Rlp.ValueDecoderContext decoderContext = new Rlp.ValueDecoderContext(stream.Data); sut.Decode(ref decoderContext, RlpBehaviors.None); } - , Throws.TypeOf()); + , Throws.TypeOf()); } - private static RlpStream TupleRlpStreamWithTwoNonces() + private static RlpStream TupleRlpStreamWithNull() { - ulong chainId = 0; - Address codeAddress = Address.Zero; - UInt256[] nonces = [0, 1]; + Address? codeAddress = null; Signature sig = new(new byte[64], 0); int length = - +Rlp.LengthOf(chainId) + + Rlp.LengthOf(1) + Rlp.LengthOf(codeAddress) - + Rlp.LengthOfSequence(Rlp.LengthOf(nonces[0]) + Rlp.LengthOf(nonces[1])) + + Rlp.LengthOf(0) + Rlp.LengthOf(sig.RecoveryId) + Rlp.LengthOf(sig.R) + Rlp.LengthOf(sig.S); - RlpStream stream = new RlpStream(Rlp.LengthOfSequence(length)); stream.StartSequence(length); - stream.Encode(chainId); + stream.Encode(1); stream.Encode(codeAddress); - stream.StartSequence(Rlp.LengthOf(nonces[0]) + Rlp.LengthOf(nonces[1])); - stream.Encode(nonces[0]); - stream.Encode(nonces[1]); + stream.Encode(0); stream.Encode(sig.RecoveryId); stream.Encode(sig.R); stream.Encode(sig.S); diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 82da41b5284..556ae402d95 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -12,14 +12,14 @@ namespace Nethermind.Core; public class AuthorizationTuple( ulong chainId, Address codeAddress, - UInt256? nonce, + ulong nonce, Signature sig, Address? authority = null) { public AuthorizationTuple( ulong chainId, Address codeAddress, - UInt256? nonce, + ulong nonce, ulong yParity, byte[] r, byte[] s, @@ -28,7 +28,7 @@ public AuthorizationTuple( public ulong ChainId { get; } = chainId; public Address CodeAddress { get; } = codeAddress ?? throw new ArgumentNullException(nameof(codeAddress)); - public UInt256? Nonce { get; } = nonce; + public ulong Nonce { get; } = nonce; public Signature AuthoritySignature { get; } = sig ?? throw new ArgumentNullException(nameof(sig)); /// diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 6434004c0cb..d3b3fe57b5e 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -34,7 +34,7 @@ public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() CodeInfoRepository sut = new(1); var tuples = new[] { - CreateAuthorizationTuple(authority, 1, TestItem.AddressB, (UInt256)0), + CreateAuthorizationTuple(authority, 1, TestItem.AddressB, 0), }; CodeInsertResult result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); @@ -45,19 +45,19 @@ public static IEnumerable AuthorizationCases() { yield return new object[] { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, (UInt256)0), + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, 0), true }; yield return new object[] { //Wrong chain id - CreateAuthorizationTuple(TestItem.PrivateKeyB, 2, TestItem.AddressB, (UInt256)0), + CreateAuthorizationTuple(TestItem.PrivateKeyB, 2, TestItem.AddressB, 0), false }; yield return new object[] { //wrong nonce - CreateAuthorizationTuple(TestItem.PrivateKeyC, 1, TestItem.AddressB, (UInt256)1), + CreateAuthorizationTuple(TestItem.PrivateKeyC, 1, TestItem.AddressB, 1), false }; } @@ -87,7 +87,7 @@ public void InsertFromAuthorizations_AuthorityHasCode_NoCodeIsInserted() CodeInfoRepository sut = new(1); var tuples = new[] { - CreateAuthorizationTuple(authority, 1, codeSource, (UInt256)0), + CreateAuthorizationTuple(authority, 1, codeSource, 0), }; sut.InsertFromAuthorizations(mockWorldState, tuples, Substitute.For()); @@ -108,7 +108,7 @@ public void InsertFromAuthorizations_AuthorityHasDelegatedCode_CodeIsInserted() CodeInfoRepository sut = new(1); var tuples = new[] { - CreateAuthorizationTuple(authority, 1, codeSource, (UInt256)0), + CreateAuthorizationTuple(authority, 1, codeSource, 0), }; sut.InsertFromAuthorizations(mockWorldState, tuples, Substitute.For()); @@ -129,7 +129,7 @@ public void InsertFromAuthorizations_AuthorityHasZeroNonce_NonceIsIncrementedByO CodeInfoRepository sut = new(1); var tuples = new[] { - CreateAuthorizationTuple(authority, 1, codeSource, (UInt256)0), + CreateAuthorizationTuple(authority, 1, codeSource, 0), }; sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For()); @@ -143,10 +143,10 @@ public void InsertFromAuthorizations_FourAuthorizationInTotalButTwoAreInvalid_Re CodeInfoRepository sut = new(1); var tuples = new[] { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, (UInt256)0), - CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, (UInt256)0), - CreateAuthorizationTuple(TestItem.PrivateKeyC, 2, TestItem.AddressF, (UInt256)0), - CreateAuthorizationTuple(TestItem.PrivateKeyD, 1, TestItem.AddressF, (UInt256)1), + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), + CreateAuthorizationTuple(TestItem.PrivateKeyC, 2, TestItem.AddressF, 0), + CreateAuthorizationTuple(TestItem.PrivateKeyD, 1, TestItem.AddressF, 1), }; CodeInsertResult result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); @@ -163,8 +163,8 @@ public void InsertFromAuthorizations_AuthorizationsHasOneExistingAccount_ResultH CodeInfoRepository sut = new(1); var tuples = new[] { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, (UInt256)0), - CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, (UInt256)0), + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), }; stateProvider.CreateAccount(TestItem.AddressA, 0); @@ -173,7 +173,7 @@ public void InsertFromAuthorizations_AuthorizationsHasOneExistingAccount_ResultH result.Refunds.Should().Be(1); } - private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) + private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) { AuthorizationTupleDecoder decoder = new(); RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index 660245da691..22ebda47e2b 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -125,7 +125,7 @@ void Test(IReleaseSpec spec, bool isAfterRepricing) [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)) @@ -135,14 +135,14 @@ [new AuthorizationTuple( [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)) @@ -152,21 +152,21 @@ [new AuthorizationTuple( [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(32)), + TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)) diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index d09057654a9..3b0900751ba 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -64,7 +64,7 @@ public void Execute_TxHasAuthorizationWithCodeThatSavesCallerAddress_ExpectedAdd .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) + .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, 0)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -99,7 +99,7 @@ public void Execute_TxHasAuthorizationCodeButAuthorityHasCode_NoAuthorizedCodeIs .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) + .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, 0)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -136,7 +136,7 @@ public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_ .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, null)) + .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, 0)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -153,17 +153,17 @@ public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_ public static IEnumerable DifferentCommitValues() { //Base case - yield return new object[] { 1ul, (UInt256)0, TestItem.AddressA.Bytes }; + yield return new object[] { 1ul, 0, TestItem.AddressA.Bytes }; //Wrong nonce - yield return new object[] { 1ul, (UInt256)1, new[] { (byte)0x0 } }; + yield return new object[] { 1ul, 1, new[] { (byte)0x0 } }; //Null nonce means it should be ignored - yield return new object[] { 1ul, null, TestItem.AddressA.Bytes }; + yield return new object[] { 1ul, 0, TestItem.AddressA.Bytes }; //Wrong chain id - yield return new object[] { 2ul, (UInt256)0, new[] { (byte)0x0 } }; + yield return new object[] { 2ul, 0, new[] { (byte)0x0 } }; } [TestCaseSource(nameof(DifferentCommitValues))] - public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorageSlot(ulong chainId, UInt256? nonce, byte[] expectedStorageValue) + public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorageSlot(ulong chainId, ulong nonce, byte[] expectedStorageValue) { PrivateKey sender = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; @@ -214,7 +214,7 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c _specProvider.ChainId, //Copy empty code so will not add to gas cost TestItem.AddressC, - null))) + 0))) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -252,7 +252,7 @@ public void Execute_TxAuthorizationListWithBALANCE_WarmAccountReadGasIsCharged() signer, _specProvider.ChainId, codeSource, - null)) + 0)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -300,12 +300,12 @@ public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstI signer, _specProvider.ChainId, firstCodeSource, - null), + 0), CreateAuthorizationTuple( signer, _specProvider.ChainId, secondCodeSource, - null), + 0), ]; if (reverseOrder) { @@ -354,7 +354,7 @@ public void Execute_FirstTxHasAuthorizedCodeThatIncrementsAndSecondDoesNot_Stora signer, _specProvider.ChainId, codeSource, - null)) + 0)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Transaction tx2 = Build.A.Transaction @@ -382,7 +382,7 @@ private void DeployCode(Address codeSource, byte[] code) _stateProvider.InsertCode(codeSource, Keccak.Compute(code), code, _specProvider.GetSpec(MainnetSpecProvider.PragueActivation)); } - private AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) + private AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) { AuthorizationTupleDecoder decoder = new(); RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 7177fd2d92a..3e0dc0fc1cd 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -114,35 +114,11 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR return _localPrecompiles[codeSource]; } - CodeInfo? cachedCodeInfo = null; - ValueHash256 codeHash = worldState.GetCodeHash(codeSource); - if (codeHash == Keccak.OfAnEmptyString.ValueHash256) - { - cachedCodeInfo = CodeInfo.Empty; - } + CodeInfo cachedCodeInfo = GetCachedCode(worldState, codeSource); - cachedCodeInfo ??= _codeCache.Get(codeHash); - if (cachedCodeInfo is null) + if (HasDelegatedCode(cachedCodeInfo.MachineCode.Span)) { - byte[]? code = worldState.GetCode(codeHash); - - if (HasDelegatedCode(code)) - { - code = worldState.GetCode(ParseDelegatedAddress(code)); - } - - if (code is null) - { - MissingCode(codeSource, codeHash); - } - - cachedCodeInfo = new CodeInfo(code); - cachedCodeInfo.AnalyseInBackgroundIfRequired(); - _codeCache.Set(codeHash, cachedCodeInfo); - } - else - { - Db.Metrics.IncrementCodeDbCache(); + cachedCodeInfo = GetCachedCode(worldState, ParseDelegatedAddress(cachedCodeInfo.MachineCode.Span)); } return cachedCodeInfo; @@ -153,6 +129,37 @@ static void MissingCode(Address codeSource, in ValueHash256 codeHash) { throw new NullReferenceException($"Code {codeHash} missing in the state for address {codeSource}"); } + + static CodeInfo GetCachedCode(IWorldState worldState, Address codeSource) + { + CodeInfo? cachedCodeInfo = null; + ValueHash256 codeHash = worldState.GetCodeHash(codeSource); + if (codeHash == Keccak.OfAnEmptyString.ValueHash256) + { + cachedCodeInfo = CodeInfo.Empty; + } + + cachedCodeInfo ??= _codeCache.Get(codeHash); + if (cachedCodeInfo is null) + { + byte[]? code = worldState.GetCode(codeHash); + + if (code is null) + { + MissingCode(codeSource, codeHash); + } + + cachedCodeInfo = new CodeInfo(code); + cachedCodeInfo.AnalyseInBackgroundIfRequired(); + _codeCache.Set(codeHash, cachedCodeInfo); + } + else + { + Db.Metrics.IncrementCodeDbCache(); + } + + return cachedCodeInfo; + } } public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) @@ -218,9 +225,11 @@ public CodeInsertResult InsertFromAuthorizations( void InsertAuthorizedCode(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) { byte[] authorizedBuffer = new byte[Eip7702Constants.DelegationHeader.Length + Address.Size]; + Eip7702Constants.DelegationHeader.CopyTo(authorizedBuffer); codeSource.Bytes.CopyTo(authorizedBuffer, Eip7702Constants.DelegationHeader.Length); Hash256 codeHash = Keccak.Compute(authorizedBuffer); state.InsertCode(authority, codeHash, authorizedBuffer.AsMemory(), spec); + _codeCache.Set(codeHash, new CodeInfo(authorizedBuffer)); } } @@ -252,7 +261,7 @@ private bool IsValidForExecution( return false; } UInt256 authNonce = stateProvider.GetNonce(authorizationTuple.Authority); - if (authorizationTuple.Nonce is not null && authNonce != authorizationTuple.Nonce) + if (authNonce != authorizationTuple.Nonce) { error = $"Skipping tuple in authorization_list because nonce is set to {authorizationTuple.Nonce}, but authority ({authorizationTuple.Authority}) has {authNonce}."; return false; @@ -276,11 +285,11 @@ private static bool HasDelegatedCode(ReadOnlySpan code) code.Slice(0, Eip7702Constants.DelegationHeader.Length)); } - private static Address ParseDelegatedAddress(byte[] code) + private static Address ParseDelegatedAddress(ReadOnlySpan code) { if (code.Length != Eip7702Constants.DelegationHeader.Length + Address.Size) throw new ArgumentException("Not valid delegation code.", nameof(code)); - return new Address(code.Skip(Eip7702Constants.DelegationHeader.Length).ToArray()); + return new Address(code.Slice(Eip7702Constants.DelegationHeader.Length).ToArray()); } private CodeInfo CreateCachedPrecompile( diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index bae9155aabe..eb6c6903cdf 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -20,14 +20,7 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R var chainId = stream.DecodeULong(); Address? codeAddress = stream.DecodeAddress(); - UInt256?[] nonces = stream.DecodeArray(s => s.DecodeUInt256()); - - UInt256? nonce = nonces.Length switch - { - 0 => null, - 1 => nonces[0], - _ => ThrowInvalidNonceRlpException() - }; + ulong nonce = stream.DecodeULong(); ulong yParity = stream.DecodeULong(); byte[] r = stream.DecodeByteArray(); @@ -51,14 +44,7 @@ public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp var chainId = decoderContext.DecodeULong(); Address codeAddress = decoderContext.DecodeAddress(); - int nonceLength = decoderContext.ReadSequenceLength(); - //Nonce is optional and is therefore made as a sequence - UInt256? nonce = nonceLength switch - { - 0 => null, - 1 => decoderContext.DecodeUInt256(), - _ => ThrowInvalidNonceRlpException() - }; + ulong nonce = decoderContext.DecodeULong(); ulong yParity = decoderContext.DecodeULong(); byte[] r = decoderContext.DecodeByteArray(); @@ -87,21 +73,13 @@ public void Encode(RlpStream stream, AuthorizationTuple item, RlpBehaviors rlpBe stream.StartSequence(contentLength); stream.Encode(item.ChainId); stream.Encode(item.CodeAddress); - if (item.Nonce is not null) - { - stream.StartSequence(Rlp.LengthOf(item.Nonce)); - stream.Encode((UInt256)item.Nonce); - } - else - { - stream.StartSequence(0); - } + stream.Encode(item.Nonce); stream.Encode(item.AuthoritySignature.RecoveryId); stream.Encode(item.AuthoritySignature.R); stream.Encode(item.AuthoritySignature.S); } - public RlpStream EncodeWithoutSignature(ulong chainId, Address codeAddress, UInt256? nonce) + public RlpStream EncodeWithoutSignature(ulong chainId, Address codeAddress, ulong nonce) { int contentLength = GetContentLengthWithoutSig(chainId, codeAddress, nonce); var totalLength = Rlp.LengthOfSequence(contentLength); @@ -110,21 +88,13 @@ public RlpStream EncodeWithoutSignature(ulong chainId, Address codeAddress, UInt return stream; } - public void EncodeWithoutSignature(RlpStream stream, ulong chainId, Address codeAddress, UInt256? nonce) + public void EncodeWithoutSignature(RlpStream stream, ulong chainId, Address codeAddress, ulong nonce) { int contentLength = GetContentLengthWithoutSig(chainId, codeAddress, nonce); stream.StartSequence(contentLength); stream.Encode(chainId); stream.Encode(codeAddress ?? throw new RlpException($"Invalid tx {nameof(AuthorizationTuple)} format - address is null")); - if (nonce is not null) - { - stream.StartSequence(Rlp.LengthOf(nonce)); - stream.Encode((UInt256)nonce); - } - else - { - stream.StartSequence(0); - } + stream.Encode(nonce); } public int GetLength(AuthorizationTuple item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(GetContentLength(item)); @@ -135,10 +105,10 @@ private static int GetContentLength(AuthorizationTuple tuple) => + Rlp.LengthOf(tuple.AuthoritySignature.R.AsSpan()) + Rlp.LengthOf(tuple.AuthoritySignature.S.AsSpan()); - private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress, UInt256? nonce) => + private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress, ulong nonce) => Rlp.LengthOf(chainId) + Rlp.LengthOf(codeAddress) - + (nonce is not null ? Rlp.LengthOfSequence(Rlp.LengthOf(nonce)) : Rlp.OfEmptySequence.Length); + + Rlp.LengthOf(nonce); [DoesNotReturn] [StackTraceHidden] From ac4fd87ae56bd63316d458b459eb9f2754da642d Mon Sep 17 00:00:00 2001 From: ak88 Date: Sat, 24 Aug 2024 23:03:48 +0200 Subject: [PATCH 330/551] refactor ChargeAccountAccessGas (cherry picked from commit 6625445609b50e06defe8c5f42d4df538ae6310e) --- .../Nethermind.Evm/CodeInfoRepository.cs | 82 +++++++++++-------- .../Nethermind.Evm/ICodeInfoRepository.cs | 2 + .../Nethermind.Evm/VirtualMachine.cs | 35 +++++--- .../OverridableCodeInfoRepository.cs | 6 ++ 4 files changed, 78 insertions(+), 47 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 3e0dc0fc1cd..86287b925fa 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -114,51 +114,52 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR return _localPrecompiles[codeSource]; } - CodeInfo cachedCodeInfo = GetCachedCode(worldState, codeSource); + CodeInfo cachedCodeInfo = InternalGetCachedCode(worldState, codeSource); - if (HasDelegatedCode(cachedCodeInfo.MachineCode.Span)) + if (IsDelegatedCode(cachedCodeInfo)) { - cachedCodeInfo = GetCachedCode(worldState, ParseDelegatedAddress(cachedCodeInfo.MachineCode.Span)); + cachedCodeInfo = InternalGetCachedCode(worldState, ParseDelegatedAddress(cachedCodeInfo.MachineCode.Span)); } return cachedCodeInfo; - [DoesNotReturn] - [StackTraceHidden] - static void MissingCode(Address codeSource, in ValueHash256 codeHash) + } + + private static CodeInfo InternalGetCachedCode(IWorldState worldState, Address codeSource) + { + CodeInfo? cachedCodeInfo = null; + ValueHash256 codeHash = worldState.GetCodeHash(codeSource); + if (codeHash == Keccak.OfAnEmptyString.ValueHash256) { - throw new NullReferenceException($"Code {codeHash} missing in the state for address {codeSource}"); + cachedCodeInfo = CodeInfo.Empty; } - static CodeInfo GetCachedCode(IWorldState worldState, Address codeSource) + cachedCodeInfo ??= _codeCache.Get(codeHash); + if (cachedCodeInfo is null) { - CodeInfo? cachedCodeInfo = null; - ValueHash256 codeHash = worldState.GetCodeHash(codeSource); - if (codeHash == Keccak.OfAnEmptyString.ValueHash256) - { - cachedCodeInfo = CodeInfo.Empty; - } + byte[]? code = worldState.GetCode(codeHash); - cachedCodeInfo ??= _codeCache.Get(codeHash); - if (cachedCodeInfo is null) + if (code is null) { - byte[]? code = worldState.GetCode(codeHash); + MissingCode(codeSource, codeHash); + } - if (code is null) - { - MissingCode(codeSource, codeHash); - } + cachedCodeInfo = new CodeInfo(code); + cachedCodeInfo.AnalyseInBackgroundIfRequired(); + _codeCache.Set(codeHash, cachedCodeInfo); + } + else + { + Db.Metrics.IncrementCodeDbCache(); + } - cachedCodeInfo = new CodeInfo(code); - cachedCodeInfo.AnalyseInBackgroundIfRequired(); - _codeCache.Set(codeHash, cachedCodeInfo); - } - else - { - Db.Metrics.IncrementCodeDbCache(); - } + return cachedCodeInfo; - return cachedCodeInfo; + [DoesNotReturn] + [StackTraceHidden] + static void MissingCode(Address codeSource, in ValueHash256 codeHash) + { + throw new NullReferenceException($"Code {codeHash} missing in the state for address {codeSource}"); } } @@ -217,7 +218,6 @@ public CodeInsertResult InsertFromAuthorizations( refunds++; InsertAuthorizedCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); - worldState.IncrementNonce(authTuple.Authority); } return new CodeInsertResult(result, refunds); @@ -274,15 +274,15 @@ private bool IsValidForExecution( private bool HasDelegatedCode(IWorldState worldState, Address source) { return - HasDelegatedCode(worldState.GetCode(source)); + IsDelegatedCode(InternalGetCachedCode(worldState, source)); } - private static bool HasDelegatedCode(ReadOnlySpan code) + private static bool IsDelegatedCode(CodeInfo code) { return - code.Length >= Eip7702Constants.DelegationHeader.Length + code.MachineCode.Length == 23 && Eip7702Constants.DelegationHeader.SequenceEqual( - code.Slice(0, Eip7702Constants.DelegationHeader.Length)); + code.MachineCode.Span.Slice(0, Eip7702Constants.DelegationHeader.Length)); } private static Address ParseDelegatedAddress(ReadOnlySpan code) @@ -297,6 +297,18 @@ private CodeInfo CreateCachedPrecompile( ConcurrentDictionary, bool)> cache) => new(new CachedPrecompile(originalPrecompile.Key.Value, originalPrecompile.Value.Precompile!, cache)); + public bool IsDelegation(IWorldState worldState, Address address,[NotNullWhen(true)] out Address? delegatedAddress) + { + CodeInfo codeInfo = InternalGetCachedCode(worldState, address); + if (IsDelegatedCode(codeInfo)) + { + delegatedAddress = ParseDelegatedAddress(codeInfo.MachineCode.Span); + return true; + } + delegatedAddress = null; + return false; + } + private class CachedPrecompile( Address address, IPrecompile precompile, diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index 47e1d4c7b44..63dc2744dfe 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -17,4 +18,5 @@ public interface ICodeInfoRepository CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv); CodeInsertResult InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec); + bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress); } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 7a04e5d670a..fd4737f640a 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -474,13 +474,25 @@ private static void UpdateGasUp(long refund, ref long gasAvailable) gasAvailable += refund; } - private bool ChargeAccountAccessGas(ref long gasAvailable, EvmState vmState, Address address, IReleaseSpec spec, bool chargeForWarm = true) + private bool ChargeAccountAccessGas(ref long gasAvailable, EvmState vmState, Address address, bool chargeForDelegation, IReleaseSpec spec, bool chargeForWarm = true) { // Console.WriteLine($"Accessing {address}"); + if (!spec.UseHotAndColdStorage) + { + return true; + } + if (chargeForDelegation + && vmState.Env.TxExecutionContext.CodeInfoRepository.IsDelegation(_state, address, out Address delegated)) + { + address = delegated; + if (!ChargeAccountGas(ref gasAvailable, vmState, address, spec)) + return false; + } + return ChargeAccountGas(ref gasAvailable, vmState, address, spec); - bool result = true; - if (spec.UseHotAndColdStorage) + bool ChargeAccountGas(ref long gasAvailable, EvmState vmState, Address address, IReleaseSpec spec) { + bool result = false; if (_txTracer.IsTracingAccess) // when tracing access we want cost as if it was warmed up from access list { vmState.WarmUp(address); @@ -495,9 +507,8 @@ private bool ChargeAccountAccessGas(ref long gasAvailable, EvmState vmState, Add { result = UpdateGas(GasCostOf.WarmStateRead, ref gasAvailable); } + return result; } - - return result; } private enum StorageAccessType @@ -1148,7 +1159,7 @@ private CallResult ExecuteCode( Address codeSource = stack.PopAddress(); if (codeSource is null) return EvmExceptionType.StackUnderflow; - if (!ChargeAccountAccessGas(ref gasAvailable, vmState, codeSource, spec)) return EvmExceptionType.OutOfGas; + if (!ChargeAccountAccessGas(ref gasAvailable, vmState, codeSource, true, spec)) return EvmExceptionType.OutOfGas; UInt256 callValue; switch (instruction) @@ -2277,7 +2288,7 @@ private EvmExceptionType InstructionSelfDestruct(EvmState vmState, ref Address inheritor = stack.PopAddress(); if (inheritor is null) return EvmExceptionType.StackUnderflow; - if (!ChargeAccountAccessGas(ref gasAvailable, vmState, inheritor, spec, false)) return EvmExceptionType.OutOfGas; + if (!ChargeAccountAccessGas(ref gasAvailable, vmState, inheritor, false, spec, false)) return EvmExceptionType.OutOfGas; Address executingAccount = vmState.Env.ExecutingAccount; bool createInSameTx = vmState.CreateList.Contains(executingAccount); diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index 7dbcf7c23ab..667901171fe 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; @@ -50,4 +51,9 @@ public CodeInsertResult InsertFromAuthorizations(IWorldState worldState, Authori { return codeInfoRepository.InsertFromAuthorizations(worldState, authorizations, spec); } + + public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) + { + return codeInfoRepository.IsDelegation(worldState, address, out delegatedAddress); + } } From bdf56f91072f049f2a5cd6eb5616e48c20869fdb Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 26 Aug 2024 22:16:22 +0200 Subject: [PATCH 331/551] gas fixes and bug (cherry picked from commit 2f705848ef723937a788d472bc50bbb5052d6b0d) --- .../Processing/ReadOnlyTxProcessingEnv.cs | 2 +- .../AuthorizationTupleDecoderTests.cs | 2 +- .../AccountStateProviderExtensions.cs | 4 +- .../Nethermind.Core/Eip7702Constants.cs | 3 + .../CodeInfoRepositoryTests.cs | 8 +- .../Nethermind.Evm/CodeInfoRepository.cs | 76 +++++++++++-------- .../Nethermind.Evm/ICodeInfoRepository.cs | 1 + .../TransactionProcessor.cs | 6 +- .../Nethermind.Evm/VirtualMachine.cs | 21 ++--- .../OverridableCodeInfoRepository.cs | 5 ++ .../Nethermind.State/IWorldStateExtensions.cs | 3 + 11 files changed, 76 insertions(+), 55 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs index 8115d0d3af3..1b961fb3e48 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs @@ -48,7 +48,7 @@ public ReadOnlyTxProcessingEnv( IWorldState? worldStateToWarmUp = null ) : base(worldStateManager, readOnlyBlockTree, specProvider, logManager, worldStateToWarmUp) { - CodeInfoRepository = new CodeInfoRepository(1,(worldStateToWarmUp as IPreBlockCaches)?.Caches.PrecompileCache); + CodeInfoRepository = new CodeInfoRepository(1, (worldStateToWarmUp as IPreBlockCaches)?.Caches.PrecompileCache); Machine = new VirtualMachine(BlockhashProvider, specProvider, CodeInfoRepository, logManager); BlockTree = readOnlyBlockTree ?? throw new ArgumentNullException(nameof(readOnlyBlockTree)); BlockhashProvider = new BlockhashProvider(BlockTree, specProvider, StateProvider, logManager); diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs index 3a38781a4f4..bb5f6fc15eb 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs @@ -60,7 +60,7 @@ private static RlpStream TupleRlpStreamWithNull() Address? codeAddress = null; Signature sig = new(new byte[64], 0); int length = - + Rlp.LengthOf(1) + +Rlp.LengthOf(1) + Rlp.LengthOf(codeAddress) + Rlp.LengthOf(0) + Rlp.LengthOf(sig.RecoveryId) diff --git a/src/Nethermind/Nethermind.Core/AccountStateProviderExtensions.cs b/src/Nethermind/Nethermind.Core/AccountStateProviderExtensions.cs index 45a8c09be5f..b07d3e9ebdd 100644 --- a/src/Nethermind/Nethermind.Core/AccountStateProviderExtensions.cs +++ b/src/Nethermind/Nethermind.Core/AccountStateProviderExtensions.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core.Specs; +using System; namespace Nethermind.Core { @@ -9,8 +10,5 @@ public static class AccountStateProviderExtensions { public static bool HasCode(this IAccountStateProvider stateProvider, Address address) => stateProvider.TryGetAccount(address, out AccountStruct account) && account.HasCode; - - public static bool IsInvalidContractSender(this IAccountStateProvider stateProvider, IReleaseSpec spec, Address address) => - spec.IsEip3607Enabled && stateProvider.HasCode(address); } } diff --git a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs index 5dbbf59d9a4..ecabb38051d 100644 --- a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs +++ b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs @@ -8,4 +8,7 @@ public static class Eip7702Constants { public const byte Magic = 0x05; public static ReadOnlySpan DelegationHeader => [0xef, 0x01, 0x00]; + public static bool IsDelegatedCode(ReadOnlySpan code) => + code.Length == DelegationHeader.Length + Address.Size + && DelegationHeader.SequenceEqual(code.Slice(0, DelegationHeader.Length)); } diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index d3b3fe57b5e..b4fca8a9e24 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -38,7 +38,7 @@ public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() }; CodeInsertResult result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); - result.Addresses.Should().BeEquivalentTo([authority.Address]); + result.AccessedAddresses.Should().BeEquivalentTo([authority.Address]); } public static IEnumerable AuthorizationCases() @@ -46,7 +46,7 @@ public static IEnumerable AuthorizationCases() yield return new object[] { CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, 0), - true + true }; yield return new object[] { @@ -73,7 +73,7 @@ public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_Inserts CodeInsertResult result = sut.InsertFromAuthorizations(stateProvider, [tuple], Substitute.For()); - Assert.That(stateProvider.HasCode(result.Addresses.First()), Is.EqualTo(shouldInsert)); + Assert.That(stateProvider.HasCode(result.AccessedAddresses.First()), Is.EqualTo(shouldInsert)); } [Test] @@ -150,7 +150,7 @@ public void InsertFromAuthorizations_FourAuthorizationInTotalButTwoAreInvalid_Re }; CodeInsertResult result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); - result.Addresses.Should().BeEquivalentTo([TestItem.AddressA, TestItem.AddressB, TestItem.AddressC, TestItem.AddressD]); + result.AccessedAddresses.Should().BeEquivalentTo([TestItem.AddressA, TestItem.AddressB, TestItem.AddressC, TestItem.AddressD]); } [Test] diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 86287b925fa..8efc954a06e 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -104,7 +104,7 @@ public CodeInfoRepository(ulong chainId, ConcurrentDictionary kvp.Key, kvp => CreateCachedPrecompile(kvp, precompileCache)); + : _precompiles.ToFrozenDictionary(kvp => kvp.Key, kvp => CreateCachedPrecompile(kvp, precompileCache)); } public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) @@ -116,13 +116,12 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR CodeInfo cachedCodeInfo = InternalGetCachedCode(worldState, codeSource); - if (IsDelegatedCode(cachedCodeInfo)) + if (Eip7702Constants.IsDelegatedCode(cachedCodeInfo.MachineCode.Span)) { cachedCodeInfo = InternalGetCachedCode(worldState, ParseDelegatedAddress(cachedCodeInfo.MachineCode.Span)); } return cachedCodeInfo; - } private static CodeInfo InternalGetCachedCode(IWorldState worldState, Address codeSource) @@ -188,7 +187,7 @@ public void InsertCode(IWorldState state, ReadOnlyMemory code, Address cod /// /// Insert code delegations from transaction authorization_list authorized by signature, - /// and return all authority addresses that was accessed. + /// and return all authority addresses that was accessed and amount of autorization refunds. /// eip-7702 /// public CodeInsertResult InsertFromAuthorizations( @@ -196,7 +195,7 @@ public CodeInsertResult InsertFromAuthorizations( AuthorizationTuple?[] authorizations, IReleaseSpec spec) { - List
result = new(); + HashSet
accessedAddresses = new(); int refunds = 0; //TODO optimize foreach (AuthorizationTuple? authTuple in authorizations) @@ -206,23 +205,20 @@ public CodeInsertResult InsertFromAuthorizations( authTuple.Authority = authTuple.Authority ?? _ethereumEcdsa.RecoverAddress(authTuple); string? error; - if (!result.Contains(authTuple.Authority)) - result.Add(authTuple.Authority); - - if (!IsValidForExecution(authTuple, worldState, _ethereumEcdsa.ChainId, spec, out error)) + if (!IsValidForExecution(authTuple, worldState, _ethereumEcdsa.ChainId, accessedAddresses, out error)) continue; - if (!worldState.AccountExists(authTuple.Authority)) - worldState.CreateAccount(authTuple.Authority, 0); - else + if (worldState.AccountExists(authTuple.Authority)) refunds++; + else + worldState.CreateAccount(authTuple.Authority, 0); - InsertAuthorizedCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); + InsertDelegationCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); worldState.IncrementNonce(authTuple.Authority); } - return new CodeInsertResult(result, refunds); + return new CodeInsertResult(accessedAddresses, refunds); - void InsertAuthorizedCode(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) + void InsertDelegationCode(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) { byte[] authorizedBuffer = new byte[Eip7702Constants.DelegationHeader.Length + Address.Size]; Eip7702Constants.DelegationHeader.CopyTo(authorizedBuffer); @@ -234,6 +230,26 @@ void InsertAuthorizedCode(IWorldState state, Address codeSource, Address authori } } + /// + /// Retrieves code hash of delegation if delegated. Otherwise code hash of . + /// + /// + /// + public ValueHash256 GetCodeHash(IWorldState worldState, Address address) + { + ValueHash256 codeHash = worldState.GetCodeHash(address); + if (codeHash == Keccak.OfAnEmptyString.ValueHash256) + return Keccak.OfAnEmptyString.ValueHash256; + + CodeInfo codeInfo = InternalGetCachedCode(worldState, address); + if (codeInfo.IsEmpty) + return Keccak.OfAnEmptyString.ValueHash256; + + if (Eip7702Constants.IsDelegatedCode(codeInfo.MachineCode.Span)) + return worldState.GetCodeHash(ParseDelegatedAddress(codeInfo.MachineCode.Span)); + return codeHash; + } + /// /// Determines if a is wellformed according to spec. /// @@ -241,7 +257,7 @@ private bool IsValidForExecution( AuthorizationTuple authorizationTuple, IWorldState stateProvider, ulong chainId, - IReleaseSpec spec, + HashSet
accessedAddresses, [NotNullWhen(false)] out string? error) { if (authorizationTuple.Authority is null) @@ -254,6 +270,8 @@ private bool IsValidForExecution( error = $"Chain id ({authorizationTuple.ChainId}) does not match."; return false; } + accessedAddresses.Add(authorizationTuple.Authority); + if (stateProvider.HasCode(authorizationTuple.Authority) && !HasDelegatedCode(stateProvider, authorizationTuple.Authority)) { @@ -274,15 +292,7 @@ private bool IsValidForExecution( private bool HasDelegatedCode(IWorldState worldState, Address source) { return - IsDelegatedCode(InternalGetCachedCode(worldState, source)); - } - - private static bool IsDelegatedCode(CodeInfo code) - { - return - code.MachineCode.Length == 23 - && Eip7702Constants.DelegationHeader.SequenceEqual( - code.MachineCode.Span.Slice(0, Eip7702Constants.DelegationHeader.Length)); + Eip7702Constants.IsDelegatedCode(InternalGetCachedCode(worldState, source).MachineCode.Span); } private static Address ParseDelegatedAddress(ReadOnlySpan code) @@ -297,16 +307,16 @@ private CodeInfo CreateCachedPrecompile( ConcurrentDictionary, bool)> cache) => new(new CachedPrecompile(originalPrecompile.Key.Value, originalPrecompile.Value.Precompile!, cache)); - public bool IsDelegation(IWorldState worldState, Address address,[NotNullWhen(true)] out Address? delegatedAddress) + public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) { CodeInfo codeInfo = InternalGetCachedCode(worldState, address); - if (IsDelegatedCode(codeInfo)) + if (Eip7702Constants.IsDelegatedCode(codeInfo.MachineCode.Span)) { delegatedAddress = ParseDelegatedAddress(codeInfo.MachineCode.Span); return true; } - delegatedAddress = null; - return false; + delegatedAddress = null; + return false; } private class CachedPrecompile( @@ -337,16 +347,16 @@ private class CachedPrecompile( } public readonly struct CodeInsertResult { - public CodeInsertResult(IEnumerable
addresses, int refunds) + public CodeInsertResult(IEnumerable
accessedAddresses, int refunds) { - Addresses = addresses; + AccessedAddresses = accessedAddresses; Refunds = refunds; } public CodeInsertResult() { - Addresses = Array.Empty
(); + AccessedAddresses = Array.Empty
(); } - public readonly IEnumerable
Addresses; + public readonly IEnumerable
AccessedAddresses; public readonly int Refunds; } diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index 63dc2744dfe..0f90b5450c9 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -15,6 +15,7 @@ namespace Nethermind.Evm; public interface ICodeInfoRepository { CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); + ValueHash256 GetCodeHash(IWorldState worldState, Address address); CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv); CodeInsertResult InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec); diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index c40f5c2137c..d903ff57352 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -106,7 +106,7 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon CodeInsertResult codeInsertResult = new(); if (spec.IsEip7702Enabled) - { + { if (tx.HasAuthorizationList) { codeInsertResult = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); @@ -461,7 +461,7 @@ protected void ExecuteEvmCall( using (EvmState state = new(unspentGas, env, executionType, true, snapshot, false)) { - WarmUp(tx, header, spec, env, state, codeInsertResult.Addresses); + WarmUp(tx, header, spec, env, state, codeInsertResult.AccessedAddresses); substate = !tracer.IsTracingActions ? VirtualMachine.Run(state, WorldState, tracer) @@ -606,7 +606,7 @@ protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec s ? 0 : RefundHelper.CalculateClaimableRefund(spentGas, substate.Refund + substate.DestroyList.Count * RefundOf.Destroy(spec.IsEip3529Enabled) - + (GasCostOf.NewAccount-GasCostOf.PerAuthBaseCost) * codeInsertRefunds, spec); + + (GasCostOf.NewAccount - GasCostOf.PerAuthBaseCost) * codeInsertRefunds, spec); if (Logger.IsTrace) Logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + refund); diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index fd4737f640a..da5a8c447ea 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -481,14 +481,15 @@ private bool ChargeAccountAccessGas(ref long gasAvailable, EvmState vmState, Add { return true; } - if (chargeForDelegation - && vmState.Env.TxExecutionContext.CodeInfoRepository.IsDelegation(_state, address, out Address delegated)) + bool notOutOfGas = ChargeAccountGas(ref gasAvailable, vmState, address, spec); + if (notOutOfGas + && chargeForDelegation + && vmState.Env.TxExecutionContext.CodeInfoRepository.IsDelegation(_state, address, out Address delegated) + ) { - address = delegated; - if (!ChargeAccountGas(ref gasAvailable, vmState, address, spec)) - return false; + return ChargeAccountGas(ref gasAvailable, vmState, delegated, spec); } - return ChargeAccountGas(ref gasAvailable, vmState, address, spec); + return notOutOfGas; bool ChargeAccountGas(ref long gasAvailable, EvmState vmState, Address address, IReleaseSpec spec) { @@ -1264,7 +1265,7 @@ private CallResult ExecuteCode( !UpdateMemoryCost(vmState, ref gasAvailable, in dataOffset, dataLength) || !UpdateMemoryCost(vmState, ref gasAvailable, in outputOffset, outputLength) || !UpdateGas(gasExtra, ref gasAvailable)) return EvmExceptionType.OutOfGas; - + CodeInfo codeInfo = vmState.Env.TxExecutionContext.CodeInfoRepository.GetCachedCodeInfo(_state, codeSource, spec); codeInfo.AnalyseInBackgroundIfRequired(); diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index 667901171fe..2a4ebc3ef06 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -56,4 +56,9 @@ public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(t { return codeInfoRepository.IsDelegation(worldState, address, out delegatedAddress); } + + public ValueHash256 GetCodeHash(IWorldState worldState, Address address) + { + return codeInfoRepository.GetCodeHash(worldState, address); + } } diff --git a/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs b/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs index f6ffa4250d1..56b66c6bfe1 100644 --- a/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs +++ b/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs @@ -25,6 +25,9 @@ public static void InsertCode(this IWorldState worldState, Address address, Read worldState.InsertCode(address, codeHash, code, spec, isGenesis); } + public static bool IsInvalidContractSender(this IWorldState stateProvider, IReleaseSpec spec, Address address) => + spec.IsEip3607Enabled && stateProvider.HasCode(address) && !Eip7702Constants.IsDelegatedCode(GetCode(stateProvider, address)); + public static string DumpState(this IWorldState stateProvider) { TreeDumper dumper = new(); From 61d59f7de3c0c775e593ff7232154da8c6ab4b2d Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 27 Aug 2024 14:12:40 +0200 Subject: [PATCH 332/551] merge fix (cherry picked from commit 0da8f101d31b9298594ad3022ff8ed03ba6bf850) --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index da5a8c447ea..befed353a70 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -493,7 +493,7 @@ private bool ChargeAccountAccessGas(ref long gasAvailable, EvmState vmState, Add bool ChargeAccountGas(ref long gasAvailable, EvmState vmState, Address address, IReleaseSpec spec) { - bool result = false; + bool result = true; if (_txTracer.IsTracingAccess) // when tracing access we want cost as if it was warmed up from access list { vmState.WarmUp(address); From b5cea7a88ac37e700ec2f1e8ecd7055f4bf07e43 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 28 Aug 2024 16:01:51 +0200 Subject: [PATCH 333/551] build fix (cherry picked from commit e043ac737011108cc943a3ca66507abf8de3a159) --- src/Nethermind/Nethermind.Mev/MevPlugin.cs | 2 +- .../Nethermind.Mev/Source/BundlePool.cs | 5 +++-- .../IReadOnlyStateProviderExtensions.cs | 22 +++++++++++++++++++ .../Nethermind.State/IWorldStateExtensions.cs | 11 +--------- 4 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs diff --git a/src/Nethermind/Nethermind.Mev/MevPlugin.cs b/src/Nethermind/Nethermind.Mev/MevPlugin.cs index 1eba1f786b2..6e6a9755dd6 100644 --- a/src/Nethermind/Nethermind.Mev/MevPlugin.cs +++ b/src/Nethermind/Nethermind.Mev/MevPlugin.cs @@ -74,7 +74,7 @@ public BundlePool BundlePool getFromApi.TxValidator!, getFromApi.SpecProvider!, _mevConfig, - getFromApi.ChainHeadStateProvider!, + getFromApi.WorldState!, getFromApi.LogManager, getFromApi.EthereumEcdsa!); } diff --git a/src/Nethermind/Nethermind.Mev/Source/BundlePool.cs b/src/Nethermind/Nethermind.Mev/Source/BundlePool.cs index 1b93b71505a..c821bd1ee7a 100644 --- a/src/Nethermind/Nethermind.Mev/Source/BundlePool.cs +++ b/src/Nethermind/Nethermind.Mev/Source/BundlePool.cs @@ -17,6 +17,7 @@ using Nethermind.Logging; using Nethermind.Mev.Data; using Nethermind.Mev.Execution; +using Nethermind.State; using Nethermind.TxPool; using Nethermind.TxPool.Collections; @@ -28,7 +29,7 @@ public class BundlePool : IBundlePool, ISimulatedBundleSource, IDisposable private readonly ITimestamper _timestamper; private readonly ITxValidator _txValidator; private readonly IMevConfig _mevConfig; - private readonly IAccountStateProvider _stateProvider; + private readonly IReadOnlyStateProvider _stateProvider; private readonly ISpecProvider _specProvider; private readonly IBlockTree _blockTree; private readonly IBundleSimulator _simulator; @@ -51,7 +52,7 @@ public BundlePool( ITxValidator txValidator, ISpecProvider specProvider, IMevConfig mevConfig, - IAccountStateProvider stateProvider, + IReadOnlyStateProvider stateProvider, ILogManager logManager, IEthereumEcdsa ecdsa) { diff --git a/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs b/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs new file mode 100644 index 00000000000..f2716948c61 --- /dev/null +++ b/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs @@ -0,0 +1,22 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Specs; +using System; + +namespace Nethermind.State +{ + public static class IReadOnlyStateProviderExtensions + { + public static byte[] GetCode(this IReadOnlyStateProvider stateProvider, Address address) + { + stateProvider.TryGetAccount(address, out AccountStruct account); + return !account.HasCode ? Array.Empty() : stateProvider.GetCode(account.CodeHash) ?? Array.Empty(); + } + + public static bool IsInvalidContractSender(this IReadOnlyStateProvider stateProvider, IReleaseSpec spec, Address address) => + spec.IsEip3607Enabled && stateProvider.HasCode(address) && !Eip7702Constants.IsDelegatedCode(GetCode(stateProvider, address)); + + } +} diff --git a/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs b/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs index 56b66c6bfe1..e4373299674 100644 --- a/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs +++ b/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs @@ -13,21 +13,12 @@ namespace Nethermind.State { public static class WorldStateExtensions { - public static byte[] GetCode(this IWorldState stateProvider, Address address) - { - stateProvider.TryGetAccount(address, out AccountStruct account); - return !account.HasCode ? Array.Empty() : stateProvider.GetCode(account.CodeHash) ?? Array.Empty(); - } - public static void InsertCode(this IWorldState worldState, Address address, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) { Hash256 codeHash = code.Length == 0 ? Keccak.OfAnEmptyString : Keccak.Compute(code.Span); worldState.InsertCode(address, codeHash, code, spec, isGenesis); } - - public static bool IsInvalidContractSender(this IWorldState stateProvider, IReleaseSpec spec, Address address) => - spec.IsEip3607Enabled && stateProvider.HasCode(address) && !Eip7702Constants.IsDelegatedCode(GetCode(stateProvider, address)); - + public static string DumpState(this IWorldState stateProvider) { TreeDumper dumper = new(); From 403207aba2c81dc935d2f14c28bd16d59c5db6ee Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 29 Aug 2024 18:36:32 +0200 Subject: [PATCH 334/551] refactor txprocessor to using accessed addresses (cherry picked from commit 73b86bd45f221e019eea6b418d019ea91d615ca9) --- .../Processing/RecoverSignature.cs | 1 - .../CodeInfoRepositoryTests.cs | 40 +++++++++------- .../Nethermind.Evm/CodeInfoRepository.cs | 31 +++++------- .../Nethermind.Evm/ICodeInfoRepository.cs | 3 +- .../TransactionProcessor.cs | 47 ++++++++++--------- .../OverridableCodeInfoRepository.cs | 11 ++++- 6 files changed, 71 insertions(+), 62 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index b7b79ae36a1..e4876b6c472 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -20,7 +20,6 @@ public class RecoverSignatures : IBlockPreprocessorStep private readonly IEthereumEcdsa _ecdsa; private readonly ITxPool _txPool; private readonly ISpecProvider _specProvider; - private readonly AuthorizationTupleDecoder _authorizationTupleDecoder = new(); private readonly ILogger _logger; /// diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index b4fca8a9e24..fd87bb44ab0 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -36,9 +36,10 @@ public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() { CreateAuthorizationTuple(authority, 1, TestItem.AddressB, 0), }; - CodeInsertResult result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + HashSet
accessedAddresses = new (); + int result = sut.InsertFromAuthorizations(Substitute.For(), tuples, accessedAddresses, Substitute.For()); - result.AccessedAddresses.Should().BeEquivalentTo([authority.Address]); + accessedAddresses.Should().BeEquivalentTo([authority.Address]); } public static IEnumerable AuthorizationCases() @@ -70,10 +71,10 @@ public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_Inserts TrieStore trieStore = new(stateDb, LimboLogs.Instance); IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); CodeInfoRepository sut = new(1); + HashSet
accessedAddresses = new (); + sut.InsertFromAuthorizations(stateProvider, [tuple], accessedAddresses, Substitute.For()); - CodeInsertResult result = sut.InsertFromAuthorizations(stateProvider, [tuple], Substitute.For()); - - Assert.That(stateProvider.HasCode(result.AccessedAddresses.First()), Is.EqualTo(shouldInsert)); + Assert.That(stateProvider.HasCode(tuple.Authority), Is.EqualTo(shouldInsert)); } [Test] @@ -89,8 +90,9 @@ public void InsertFromAuthorizations_AuthorityHasCode_NoCodeIsInserted() { CreateAuthorizationTuple(authority, 1, codeSource, 0), }; + HashSet
accessedAddresses = new(); - sut.InsertFromAuthorizations(mockWorldState, tuples, Substitute.For()); + sut.InsertFromAuthorizations(mockWorldState, tuples, accessedAddresses, Substitute.For()); mockWorldState.DidNotReceive().InsertCode(Arg.Any
(), Arg.Any>(), Arg.Any()); } @@ -100,20 +102,23 @@ public void InsertFromAuthorizations_AuthorityHasDelegatedCode_CodeIsInserted() { PrivateKey authority = TestItem.PrivateKeyA; Address codeSource = TestItem.AddressB; - IWorldState mockWorldState = Substitute.For(); - mockWorldState.HasCode(authority.Address).Returns(true); + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); byte[] code = new byte[23]; Eip7702Constants.DelegationHeader.CopyTo(code); - mockWorldState.GetCode(authority.Address).Returns(code); + stateProvider.CreateAccount(authority.Address, 0); + stateProvider.InsertCode(authority.Address,Keccak.Compute(code), code, Substitute.For()); CodeInfoRepository sut = new(1); var tuples = new[] { CreateAuthorizationTuple(authority, 1, codeSource, 0), }; - sut.InsertFromAuthorizations(mockWorldState, tuples, Substitute.For()); + sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For>(), Substitute.For()); - mockWorldState.Received().InsertCode(authority.Address, Arg.Any(), Arg.Any>(), Arg.Any(), Arg.Any()); + Assert.That(stateProvider.GetCode(authority.Address).Slice(3), Is.EqualTo(codeSource.Bytes)); } [Test] @@ -132,13 +137,13 @@ public void InsertFromAuthorizations_AuthorityHasZeroNonce_NonceIsIncrementedByO CreateAuthorizationTuple(authority, 1, codeSource, 0), }; - sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For()); + sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For>(), Substitute.For()); Assert.That(stateProvider.GetNonce(authority.Address), Is.EqualTo((UInt256)1)); } [Test] - public void InsertFromAuthorizations_FourAuthorizationInTotalButTwoAreInvalid_ResultContainsAllFour() + public void InsertFromAuthorizations_FourAuthorizationInTotalButOneHasInvalidNonce_ResultContainsThreeAddresses() { CodeInfoRepository sut = new(1); var tuples = new[] @@ -148,9 +153,10 @@ public void InsertFromAuthorizations_FourAuthorizationInTotalButTwoAreInvalid_Re CreateAuthorizationTuple(TestItem.PrivateKeyC, 2, TestItem.AddressF, 0), CreateAuthorizationTuple(TestItem.PrivateKeyD, 1, TestItem.AddressF, 1), }; - CodeInsertResult result = sut.InsertFromAuthorizations(Substitute.For(), tuples, Substitute.For()); + HashSet
addresses = new(); + sut.InsertFromAuthorizations(Substitute.For(), tuples, addresses, Substitute.For()); - result.AccessedAddresses.Should().BeEquivalentTo([TestItem.AddressA, TestItem.AddressB, TestItem.AddressC, TestItem.AddressD]); + addresses.Should().BeEquivalentTo([TestItem.AddressA, TestItem.AddressB, TestItem.AddressD]); } [Test] @@ -168,9 +174,9 @@ public void InsertFromAuthorizations_AuthorizationsHasOneExistingAccount_ResultH }; stateProvider.CreateAccount(TestItem.AddressA, 0); - CodeInsertResult result = sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For()); + int refunds = sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For>(), Substitute.For()); - result.Refunds.Should().Be(1); + refunds.Should().Be(1); } private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 8efc954a06e..c590548eddd 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -109,6 +109,11 @@ public CodeInfoRepository(ulong chainId, ConcurrentDictionary code, Address cod /// and return all authority addresses that was accessed and amount of autorization refunds. /// eip-7702 ///
- public CodeInsertResult InsertFromAuthorizations( + public int InsertFromAuthorizations( IWorldState worldState, AuthorizationTuple?[] authorizations, + ISet
accessedAddresses, IReleaseSpec spec) { - HashSet
accessedAddresses = new(); int refunds = 0; //TODO optimize foreach (AuthorizationTuple? authTuple in authorizations) @@ -216,7 +223,7 @@ public CodeInsertResult InsertFromAuthorizations( InsertDelegationCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); worldState.IncrementNonce(authTuple.Authority); } - return new CodeInsertResult(accessedAddresses, refunds); + return refunds; void InsertDelegationCode(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) { @@ -257,7 +264,7 @@ private bool IsValidForExecution( AuthorizationTuple authorizationTuple, IWorldState stateProvider, ulong chainId, - HashSet
accessedAddresses, + ISet
accessedAddresses, [NotNullWhen(false)] out string? error) { if (authorizationTuple.Authority is null) @@ -345,18 +352,4 @@ private class CachedPrecompile( } } } -public readonly struct CodeInsertResult -{ - public CodeInsertResult(IEnumerable
accessedAddresses, int refunds) - { - AccessedAddresses = accessedAddresses; - Refunds = refunds; - } - public CodeInsertResult() - { - AccessedAddresses = Array.Empty
(); - } - public readonly IEnumerable
AccessedAddresses; - public readonly int Refunds; -} diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index 0f90b5450c9..ce77d2a6029 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -15,9 +15,10 @@ namespace Nethermind.Evm; public interface ICodeInfoRepository { CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); + CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec, out Address? delegationAddress); ValueHash256 GetCodeHash(IWorldState worldState, Address address); CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec, bool isSystemEnv); - CodeInsertResult InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec); + int InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec); bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress); } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index d903ff57352..d3570146d8f 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -104,19 +104,20 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); - CodeInsertResult codeInsertResult = new(); + HashSet
accessedAddresses = new(); + int delegationRefunds = 0; if (spec.IsEip7702Enabled) { if (tx.HasAuthorizationList) { - codeInsertResult = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, spec); + delegationRefunds = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, accessedAddresses, spec); } } - ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository); + ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository, accessedAddresses); long gasAvailable = tx.GasLimit - intrinsicGas; - ExecuteEvmCall(tx, header, spec, tracer, opts, codeInsertResult, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); + ExecuteEvmCall(tx, header, spec, tracer, opts, delegationRefunds, accessedAddresses, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode); // Finalize @@ -393,16 +394,23 @@ protected ExecutionEnvironment BuildExecutionEnvironment( in BlockExecutionContext blCtx, IReleaseSpec spec, in UInt256 effectiveGasPrice, - ICodeInfoRepository codeInfoRepository) + ICodeInfoRepository codeInfoRepository, + HashSet
accessedAddresses) { Address recipient = tx.GetRecipient(tx.IsContractCreation ? WorldState.GetNonce(tx.SenderAddress) : 0); if (recipient is null) ThrowInvalidDataException("Recipient has not been resolved properly before tx execution"); - TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes, codeInfoRepository); + accessedAddresses.Add(recipient); + accessedAddresses.Add(tx.SenderAddress); + TxExecutionContext executionContext = new(in blCtx, tx.SenderAddress, effectiveGasPrice, tx.BlobVersionedHashes, codeInfoRepository); + Address? delegationAddress = null; CodeInfo codeInfo = tx.IsContractCreation ? new(tx.Data ?? Memory.Empty) - : codeInfoRepository.GetCachedCodeInfo(WorldState, recipient, spec); + : codeInfoRepository.GetCachedCodeInfo(WorldState, recipient, spec, out delegationAddress); + + if (delegationAddress is not null) + accessedAddresses.Add(delegationAddress); codeInfo.AnalyseInBackgroundIfRequired(); @@ -428,7 +436,8 @@ protected void ExecuteEvmCall( IReleaseSpec spec, ITxTracer tracer, ExecutionOptions opts, - CodeInsertResult codeInsertResult, + int delegationRefunds, + IEnumerable
accessedAddresses, in long gasAvailable, in ExecutionEnvironment env, out TransactionSubstate? substate, @@ -461,7 +470,7 @@ protected void ExecuteEvmCall( using (EvmState state = new(unspentGas, env, executionType, true, snapshot, false)) { - WarmUp(tx, header, spec, env, state, codeInsertResult.AccessedAddresses); + WarmUp(tx, header, spec, state, accessedAddresses); substate = !tracer.IsTracingActions ? VirtualMachine.Run(state, WorldState, tracer) @@ -522,7 +531,7 @@ protected void ExecuteEvmCall( statusCode = StatusCode.Success; } - spentGas = Refund(tx, header, spec, opts, substate, unspentGas, env.TxExecutionContext.GasPrice, codeInsertResult.Refunds); + spentGas = Refund(tx, header, spec, opts, substate, unspentGas, env.TxExecutionContext.GasPrice, delegationRefunds); } catch (Exception ex) when (ex is EvmException or OverflowException) // TODO: OverflowException? still needed? hope not { @@ -534,31 +543,25 @@ protected void ExecuteEvmCall( header.GasUsed += spentGas; } - private void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, ExecutionEnvironment env, EvmState state, IEnumerable
authorities) + private void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, EvmState state, IEnumerable
accessedAddresses) { if (spec.UseTxAccessLists) { state.WarmUp(tx.AccessList); // eip-2930 } - if (spec.UseHotAndColdStorage) + if (spec.UseHotAndColdStorage) // eip-2929 { - state.WarmUp(tx.SenderAddress); // eip-2929 - state.WarmUp(env.ExecutingAccount); // eip-2929 + foreach (Address authorized in accessedAddresses) + { + state.WarmUp(authorized); + } } if (spec.AddCoinbaseToTxAccessList) { state.WarmUp(header.GasBeneficiary!); } - - if (spec.IsEip7702Enabled) - { - foreach (Address authorized in authorities) - { - state.WarmUp(authorized); - } - } } protected virtual void PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index 2a4ebc3ef06..7b72db95249 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -21,6 +21,13 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR _codeOverwrites.TryGetValue(codeSource, out CodeInfo result) ? result : codeInfoRepository.GetCachedCodeInfo(worldState, codeSource, vmSpec); + public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec, out Address? delegationAddress) + { + delegationAddress = null; + return _codeOverwrites.TryGetValue(codeSource, out CodeInfo result) + ? result + : codeInfoRepository.GetCachedCodeInfo(worldState, codeSource, vmSpec); + } public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) => codeInfoRepository.GetOrAdd(codeHash, initCode); @@ -47,9 +54,9 @@ public void ClearOverwrites() _codeOverwrites.Clear(); } - public CodeInsertResult InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, IReleaseSpec spec) + public int InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec) { - return codeInfoRepository.InsertFromAuthorizations(worldState, authorizations, spec); + return codeInfoRepository.InsertFromAuthorizations(worldState, authorizations, accessedAddresses, spec); } public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) From bdc4dc0ae2619a3209a751648d19c32deba80df5 Mon Sep 17 00:00:00 2001 From: ak88 Date: Sun, 1 Sep 2024 21:39:02 +0200 Subject: [PATCH 335/551] fix (cherry picked from commit 215628a11f972d5b740835d748ed0dc6f6eb79e8) --- src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index c590548eddd..7ab83b5832b 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -123,9 +123,9 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR if (Eip7702Constants.IsDelegatedCode(cachedCodeInfo.MachineCode.Span)) { - Address delegatedAddress = ParseDelegatedAddress(cachedCodeInfo.MachineCode.Span); - cachedCodeInfo = InternalGetCachedCode(worldState, delegationAddress); - delegationAddress = delegatedAddress; + Address parsedDelegated = ParseDelegatedAddress(cachedCodeInfo.MachineCode.Span); + cachedCodeInfo = InternalGetCachedCode(worldState, parsedDelegated); + delegationAddress = parsedDelegated; } return cachedCodeInfo; From 93159d230ebc80e4a61598670a78cd29aa38a813 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 2 Sep 2024 19:44:47 +0200 Subject: [PATCH 336/551] encoder fix (cherry picked from commit 3b8d8fafda99120f84f636c11a6d057ea6b0f6dc) --- .../Eip7702/AuthorizationTupleDecoder.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index eb6c6903cdf..ccf37da5da3 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -3,6 +3,7 @@ using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; using Nethermind.Int256; using System; using System.Diagnostics; @@ -75,8 +76,8 @@ public void Encode(RlpStream stream, AuthorizationTuple item, RlpBehaviors rlpBe stream.Encode(item.CodeAddress); stream.Encode(item.Nonce); stream.Encode(item.AuthoritySignature.RecoveryId); - stream.Encode(item.AuthoritySignature.R); - stream.Encode(item.AuthoritySignature.S); + stream.Encode(new UInt256(item.AuthoritySignature.R, true)); + stream.Encode(new UInt256(item.AuthoritySignature.S, true)); } public RlpStream EncodeWithoutSignature(ulong chainId, Address codeAddress, ulong nonce) @@ -102,8 +103,8 @@ public void EncodeWithoutSignature(RlpStream stream, ulong chainId, Address code private static int GetContentLength(AuthorizationTuple tuple) => GetContentLengthWithoutSig(tuple.ChainId, tuple.CodeAddress, tuple.Nonce) + Rlp.LengthOf(tuple.AuthoritySignature.RecoveryId) - + Rlp.LengthOf(tuple.AuthoritySignature.R.AsSpan()) - + Rlp.LengthOf(tuple.AuthoritySignature.S.AsSpan()); + + Rlp.LengthOf(new UInt256(tuple.AuthoritySignature.R.AsSpan(), true)) + + Rlp.LengthOf(new UInt256(tuple.AuthoritySignature.S.AsSpan(), true)); private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress, ulong nonce) => Rlp.LengthOf(chainId) From bbc81a4dc1e40d14097f83cfb8d89466b98adcbe Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 2 Sep 2024 19:47:32 +0200 Subject: [PATCH 337/551] test strg (cherry picked from commit 62dfc7ff4b46856571c5e1bc0a78bf4ec9f70cc9) --- .../Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs index ee879258d11..198df85723e 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs @@ -20,7 +20,7 @@ public class LoadPyspecTestsStrategy : ITestLoadStrategy public IEnumerable Load(string testsDir, string wildcard = null) { - string testsDirectoryName = Path.Combine(AppContext.BaseDirectory, "PyTests", ArchiveVersion, ArchiveName.Split('.')[0]); + string testsDirectoryName = Path.Combine("C:/", ArchiveName.Split('.')[0]); if (!Directory.Exists(testsDirectoryName)) // Prevent redownloading the fixtures if they already exists with this version and archive name DownloadAndExtract(ArchiveVersion, ArchiveName, testsDirectoryName); bool isStateTest = testsDir.Contains("state_tests", StringComparison.InvariantCultureIgnoreCase); From cb6ac2d94b95b67f7fdbecee4ad0c9bc4bef0903 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 2 Sep 2024 22:16:48 +0200 Subject: [PATCH 338/551] fix extcodehash (cherry picked from commit 3dbb0ef655c715fda93b011656863c78ba143c83) --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index befed353a70..4c0f9ebcdf0 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -1894,7 +1894,9 @@ private CallResult ExecuteCode Date: Tue, 3 Sep 2024 13:57:34 +0200 Subject: [PATCH 339/551] 7702 refunds (cherry picked from commit 419d7270831a4ecf3078c694112cb7608dbb0b61) --- .../TransactionProcessor.cs | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index d3570146d8f..eefcca1ac70 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.Eventing.Reader; using System.IO; using System.Linq; using System.Runtime.CompilerServices; @@ -602,20 +603,33 @@ protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec s in TransactionSubstate substate, in long unspentGas, in UInt256 gasPrice, int codeInsertRefunds) { long spentGas = tx.GasLimit; + var codeInsertRefund = (GasCostOf.NewAccount - GasCostOf.PerAuthBaseCost) * codeInsertRefunds; + if (!substate.IsError) { spentGas -= unspentGas; - long refund = substate.ShouldRevert - ? 0 - : RefundHelper.CalculateClaimableRefund(spentGas, - substate.Refund + substate.DestroyList.Count * RefundOf.Destroy(spec.IsEip3529Enabled) - + (GasCostOf.NewAccount - GasCostOf.PerAuthBaseCost) * codeInsertRefunds, spec); + + long totalToRefund = codeInsertRefund; + if (!substate.ShouldRevert) + totalToRefund += substate.Refund + substate.DestroyList.Count * RefundOf.Destroy(spec.IsEip3529Enabled); + long actualRefund = RefundHelper.CalculateClaimableRefund(spentGas, totalToRefund, spec); + + if (Logger.IsTrace) + Logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + actualRefund); + // If noValidation we didn't charge for gas, so do not refund + if (!opts.HasFlag(ExecutionOptions.NoValidation)) + WorldState.AddToBalance(tx.SenderAddress, (ulong)(unspentGas + actualRefund) * gasPrice, spec); + spentGas -= actualRefund; + } + else if(codeInsertRefund > 0) + { + long refund = RefundHelper.CalculateClaimableRefund(spentGas, codeInsertRefund, spec); if (Logger.IsTrace) - Logger.Trace("Refunding unused gas of " + unspentGas + " and refund of " + refund); + Logger.Trace("Refunding delegations only: " + refund); // If noValidation we didn't charge for gas, so do not refund if (!opts.HasFlag(ExecutionOptions.NoValidation)) - WorldState.AddToBalance(tx.SenderAddress, (ulong)(unspentGas + refund) * gasPrice, spec); + WorldState.AddToBalance(tx.SenderAddress, (ulong)refund * gasPrice, spec); spentGas -= refund; } From 29257b2cd9d7c13fe8df7eee0914126399db6e23 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 4 Sep 2024 11:39:07 +0200 Subject: [PATCH 340/551] Use uint256 for sig values (cherry picked from commit 19f3ad5b92676208450d5099bfd85b2b04da43c9) --- .../Nethermind.Core/AuthorizationTuple.cs | 5 ++-- .../IntrinsicGasCalculatorTests.cs | 28 +++++++++---------- .../TransactionProcessor.cs | 7 ++--- .../Eip7702/AuthorizationTupleDecoder.cs | 8 +++--- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 556ae402d95..68f61a96e2f 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -6,7 +6,6 @@ using Nethermind.Int256; using Nethermind.Logging; using System; -using System.Diagnostics.CodeAnalysis; namespace Nethermind.Core; public class AuthorizationTuple( @@ -21,8 +20,8 @@ public AuthorizationTuple( Address codeAddress, ulong nonce, ulong yParity, - byte[] r, - byte[] s, + UInt256 r, + UInt256 s, Address? authority = null) : this(chainId, codeAddress, nonce, new Signature(r, s, yParity + Signature.VOffset), authority) { } diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index 22ebda47e2b..742a0d442bb 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -127,8 +127,8 @@ [new AuthorizationTuple( new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)) + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ], GasCostOf.PerAuthBaseCost); yield return ( @@ -137,15 +137,15 @@ [new AuthorizationTuple( new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)) + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ], GasCostOf.PerAuthBaseCost * 2); yield return ( @@ -154,22 +154,22 @@ [new AuthorizationTuple( new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)) + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ], GasCostOf.PerAuthBaseCost * 3); } @@ -194,8 +194,8 @@ public void Calculate_TxHasAuthorizationListBeforePrague_ThrowsInvalidDataExcept TestItem.AddressF, 0, TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)) + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ) .TestObject; diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index eefcca1ac70..bf4c3ffdbef 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -107,12 +107,9 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon HashSet
accessedAddresses = new(); int delegationRefunds = 0; - if (spec.IsEip7702Enabled) + if (spec.IsEip7702Enabled && tx.HasAuthorizationList) { - if (tx.HasAuthorizationList) - { - delegationRefunds = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, accessedAddresses, spec); - } + delegationRefunds = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, accessedAddresses, spec); } ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository, accessedAddresses); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index ccf37da5da3..c0b2638350d 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -24,8 +24,8 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R ulong nonce = stream.DecodeULong(); ulong yParity = stream.DecodeULong(); - byte[] r = stream.DecodeByteArray(); - byte[] s = stream.DecodeByteArray(); + UInt256 r = stream.DecodeUInt256(); + UInt256 s = stream.DecodeUInt256(); if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) stream.Check(check); return new AuthorizationTuple( @@ -48,8 +48,8 @@ public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp ulong nonce = decoderContext.DecodeULong(); ulong yParity = decoderContext.DecodeULong(); - byte[] r = decoderContext.DecodeByteArray(); - byte[] s = decoderContext.DecodeByteArray(); + UInt256 r = decoderContext.DecodeUInt256(); + UInt256 s = decoderContext.DecodeUInt256(); if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) decoderContext.Check(check); return new AuthorizationTuple( From aef10cece292e2151cf22baf47b23735e4cd1e34 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 4 Sep 2024 11:46:35 +0200 Subject: [PATCH 341/551] state test fix for auth list (cherry picked from commit 5c1e3dc3af4690575a3148be8e24364bb8a6c226) --- .../AuthorizationListJson.cs | 20 +++++++++++++ .../Ethereum.Test.Base/BlockchainTestBase.cs | 23 +++++++++++++++ .../Ethereum.Test.Base/GeneralTestBase.cs | 7 ++++- .../Ethereum.Test.Base/JsonToEthereumTest.cs | 29 +++++++++++++++++++ .../LegacyTransactionJson.cs | 1 + .../Ethereum.Test.Base/TransactionJson.cs | 3 ++ .../CodeInfoRepositoryTests.cs | 6 ++-- .../TransactionProcessor.cs | 2 +- .../Nethermind.State/IWorldStateExtensions.cs | 2 +- 9 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs diff --git a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs new file mode 100644 index 00000000000..58912aaa9e3 --- /dev/null +++ b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ethereum.Test.Base; +public class AuthorizationListJson +{ + public string ChainId { get; set; } + public string Address { get; set; } + public string Nonce { get; set; } + public string V { get; set; } + public string R { get; set; } + public string S { get; set; } + public string Signer { get; set; } +} diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs index 0afabd5c361..ea8fcf23da2 100644 --- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs @@ -37,6 +37,10 @@ using Nethermind.Trie.Pruning; using Nethermind.TxPool; using NUnit.Framework; +using Nethermind.Specs; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.Tracing.GethStyle.Custom.Native.Call; +using Nethermind.Evm.Tracing.GethStyle; namespace Ethereum.Test.Base { @@ -214,8 +218,27 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? Assert.Fail($"null hash in {test.Name} block {i}"); } + TestBlockJson testBlockJson = test.Blocks[i]; + + try { + + for (var y = 0; y < correctRlp[i].Block.Transactions.Length; y++) + { + Transaction tx = correctRlp[i].Block.Transactions[y]; + + //var txTracer = new NativeCallTracer(new Transaction(), GethTraceOptions.Default); + //txProcessor.Trace(tx, new BlockExecutionContext(correctRlp[i].Block.Header), txTracer); + + + + Address address = ecdsa.RecoverAddress(tx); + if (stateProvider.GetBalance(address) == 0) + { + throw new InvalidOperationException("Test tx sender is unfunded."); + } + } // TODO: mimic the actual behaviour where block goes through validating sync manager? correctRlp[i].Block.Header.IsPostMerge = correctRlp[i].Block.Difficulty == 0; if (!test.SealEngineUsed || blockValidator.ValidateSuggestedBlock(correctRlp[i].Block, out _)) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index 334f1f4dd48..e2003756f08 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -137,12 +137,17 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) Block block = Build.A.Block.WithTransactions(test.Transaction).WithHeader(header).TestObject; - bool isValid = _txValidator.IsWellFormed(test.Transaction, spec) && IsValidBlock(block, specProvider); + string error; + bool isValid = _txValidator.IsWellFormed(test.Transaction, spec, out error) && IsValidBlock(block, specProvider); if (isValid) { transactionProcessor.Execute(test.Transaction, new BlockExecutionContext(header), txTracer); } + else + { + _logger.Info($"Skipping invalid tx with error: {error}"); + } stopwatch.Stop(); diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index 5e33bde1488..0848b07a4dc 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -127,6 +127,7 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t { Transaction transaction = new(); + transaction.Type = string.IsNullOrEmpty(transactionJson.Type) ? TxType.Legacy : (TxType)ParseFromHex(transactionJson.Type); transaction.Value = transactionJson.Value[postStateJson.Indexes.Value]; transaction.GasLimit = transactionJson.GasLimit[postStateJson.Indexes.Gas]; transaction.GasPrice = transactionJson.GasPrice ?? transactionJson.MaxPriorityFeePerGas ?? 0; @@ -157,7 +158,35 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t if (transaction.BlobVersionedHashes?.Length > 0) transaction.Type = TxType.Blob; + if (transactionJson.AuthorizationList is not null) + { + transaction.AuthorizationList = + transactionJson.AuthorizationList + .Select(i => new AuthorizationTuple( + ParseFromHex(i.ChainId), + new Address(i.Address), + ParseFromHex(i.Nonce), + ParseFromHex(i.V), + new UInt256(Bytes.FromHexString(i.R)), + new UInt256(Bytes.FromHexString(i.S)))).ToArray(); + if (transaction.AuthorizationList.Any()) + { + transaction.Type = TxType.SetCode; + } + } + return transaction; + + static ulong ParseFromHex(string i) + { + Span bytes = stackalloc byte[8]; + var bytes1 = Bytes.FromHexString(i); + if (bytes1.Length <= 8) + { + bytes1.CopyTo(bytes); + } + return BitConverter.ToUInt64(bytes); + } } private static void ProcessAccessList(AccessListItemJson[]? accessList, AccessList.Builder builder) diff --git a/src/Nethermind/Ethereum.Test.Base/LegacyTransactionJson.cs b/src/Nethermind/Ethereum.Test.Base/LegacyTransactionJson.cs index db932e48913..0d93af017d5 100644 --- a/src/Nethermind/Ethereum.Test.Base/LegacyTransactionJson.cs +++ b/src/Nethermind/Ethereum.Test.Base/LegacyTransactionJson.cs @@ -14,6 +14,7 @@ public class LegacyTransactionJson public UInt256 Nonce { get; set; } public Address To { get; set; } public UInt256 Value { get; set; } + public string Sender { get; set; } public byte[] R { get; set; } public byte[] S { get; set; } public ulong V { get; set; } diff --git a/src/Nethermind/Ethereum.Test.Base/TransactionJson.cs b/src/Nethermind/Ethereum.Test.Base/TransactionJson.cs index 59658f8e876..63cc1bcd655 100644 --- a/src/Nethermind/Ethereum.Test.Base/TransactionJson.cs +++ b/src/Nethermind/Ethereum.Test.Base/TransactionJson.cs @@ -8,6 +8,8 @@ namespace Ethereum.Test.Base { public class TransactionJson { + public string Type { get; set; } + public string Sender { get; set; } public byte[][]? Data { get; set; } public long[]? GasLimit { get; set; } public UInt256? GasPrice { get; set; } @@ -19,6 +21,7 @@ public class TransactionJson public byte[]? SecretKey { get; set; } public AccessListItemJson[]?[]? AccessLists { get; set; } public AccessListItemJson[]? AccessList { get; set; } + public AuthorizationListJson[]? AuthorizationList { get; set; } public byte[]?[]? BlobVersionedHashes { get; set; } public UInt256? MaxFeePerBlobGas { get; set; } } diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index fd87bb44ab0..275ad8baa8f 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -36,7 +36,7 @@ public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() { CreateAuthorizationTuple(authority, 1, TestItem.AddressB, 0), }; - HashSet
accessedAddresses = new (); + HashSet
accessedAddresses = new(); int result = sut.InsertFromAuthorizations(Substitute.For(), tuples, accessedAddresses, Substitute.For()); accessedAddresses.Should().BeEquivalentTo([authority.Address]); @@ -71,7 +71,7 @@ public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_Inserts TrieStore trieStore = new(stateDb, LimboLogs.Instance); IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); CodeInfoRepository sut = new(1); - HashSet
accessedAddresses = new (); + HashSet
accessedAddresses = new(); sut.InsertFromAuthorizations(stateProvider, [tuple], accessedAddresses, Substitute.For()); Assert.That(stateProvider.HasCode(tuple.Authority), Is.EqualTo(shouldInsert)); @@ -109,7 +109,7 @@ public void InsertFromAuthorizations_AuthorityHasDelegatedCode_CodeIsInserted() byte[] code = new byte[23]; Eip7702Constants.DelegationHeader.CopyTo(code); stateProvider.CreateAccount(authority.Address, 0); - stateProvider.InsertCode(authority.Address,Keccak.Compute(code), code, Substitute.For()); + stateProvider.InsertCode(authority.Address, Keccak.Compute(code), code, Substitute.For()); CodeInfoRepository sut = new(1); var tuples = new[] { diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index bf4c3ffdbef..38c1b0aade9 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -618,7 +618,7 @@ protected virtual long Refund(Transaction tx, BlockHeader header, IReleaseSpec s WorldState.AddToBalance(tx.SenderAddress, (ulong)(unspentGas + actualRefund) * gasPrice, spec); spentGas -= actualRefund; } - else if(codeInsertRefund > 0) + else if (codeInsertRefund > 0) { long refund = RefundHelper.CalculateClaimableRefund(spentGas, codeInsertRefund, spec); diff --git a/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs b/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs index e4373299674..962a25859b2 100644 --- a/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs +++ b/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs @@ -18,7 +18,7 @@ public static void InsertCode(this IWorldState worldState, Address address, Read Hash256 codeHash = code.Length == 0 ? Keccak.OfAnEmptyString : Keccak.Compute(code.Span); worldState.InsertCode(address, codeHash, code, spec, isGenesis); } - + public static string DumpState(this IWorldState stateProvider) { TreeDumper dumper = new(); From 9b9eb2e35614481ad1d26c6965148fd196b6d988 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 4 Sep 2024 12:43:24 +0200 Subject: [PATCH 342/551] validate auth sig in txvalidator (cherry picked from commit 0739aaa7c4f7a8c6012fd4495996af4e8119fada) --- .../Messages/TxErrorMessages.cs | 2 + .../Validators/TxValidator.cs | 43 +++++++++++++------ 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs index c1f1146d3c2..a9b1cbd2674 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs @@ -74,6 +74,8 @@ public static string InvalidTxChainId(ulong expected, ulong? actual) => public const string MissingAuthorizationList = "MissingAuthorizationList: Must be set."; + public const string InvalidAuthoritySignature = "InvalidAuthoritySignature: Invalid signature in authorization list."; + public const string InvalidBlobCommitmentHash = "InvalidBlobCommitmentHash: Commitment hash does not match."; diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 52daeeaca05..3ab77afe8c2 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -2,12 +2,14 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Linq; using Nethermind.Consensus.Messages; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Crypto; +using Nethermind.Db; using Nethermind.Evm; using Nethermind.Int256; using Nethermind.TxPool; @@ -48,7 +50,7 @@ public bool IsWellFormed(Transaction transaction, IReleaseSpec releaseSpec, out && ValidateWithError(Validate1559GasFields(transaction, releaseSpec), TxErrorMessages.InvalidMaxPriorityFeePerGas, ref error) && ValidateWithError(Validate3860Rules(transaction, releaseSpec), TxErrorMessages.ContractSizeTooBig, ref error) && Validate4844Fields(transaction, ref error) - && ValidateAuthorityList(transaction, ref error); + && ValidateAuthorityList(transaction, releaseSpec, ref error); } private static bool Validate3860Rules(Transaction transaction, IReleaseSpec releaseSpec) => @@ -120,35 +122,45 @@ private bool ValidateSignature(Transaction tx, IReleaseSpec spec) { Signature? signature = tx.Signature; - if (signature is null) + if (!ValidateSignature(signature, spec)) { return false; } - UInt256 sValue = new(signature.SAsSpan, isBigEndian: true); - UInt256 rValue = new(signature.RAsSpan, isBigEndian: true); + if (signature.V is 27 or 28) + { + return true; + } - if (sValue.IsZero || sValue >= (spec.IsEip2Enabled ? Secp256K1Curve.HalfNPlusOne : Secp256K1Curve.N)) + if (tx.Type == TxType.Legacy && spec.IsEip155Enabled && (signature.V == _chainIdValue * 2 + 35ul || signature.V == _chainIdValue * 2 + 36ul)) { - return false; + return true; } - if (rValue.IsZero || rValue >= Secp256K1Curve.NMinusOne) + return !spec.ValidateChainId; + } + + private bool ValidateSignature(Signature signature, IReleaseSpec spec) + { + if (signature is null) { return false; } - if (signature.V is 27 or 28) + UInt256 sValue = new(signature.SAsSpan, isBigEndian: true); + UInt256 rValue = new(signature.RAsSpan, isBigEndian: true); + + if (sValue.IsZero || sValue >= (spec.IsEip2Enabled ? Secp256K1Curve.HalfNPlusOne : Secp256K1Curve.N)) { - return true; + return false; } - if (tx.Type == TxType.Legacy && spec.IsEip155Enabled && (signature.V == _chainIdValue * 2 + 35ul || signature.V == _chainIdValue * 2 + 36ul)) + if (rValue.IsZero || rValue >= Secp256K1Curve.NMinusOne) { - return true; + return false; } - return !spec.ValidateChainId; + return true; } private static bool Validate4844Fields(Transaction transaction, ref string? error) @@ -294,7 +306,7 @@ private static bool Validate4844Fields(Transaction transaction, ref string? erro return true; } - private bool ValidateAuthorityList(Transaction tx, ref string error) + private bool ValidateAuthorityList(Transaction tx, IReleaseSpec releaseSpec, ref string error) { if (tx.Type != TxType.SetCode) { @@ -309,6 +321,11 @@ private bool ValidateAuthorityList(Transaction tx, ref string error) error = TxErrorMessages.MissingAuthorizationList; return false; } + else if (tx.AuthorizationList.Any(a => !ValidateSignature(a.AuthoritySignature, releaseSpec))) + { + error = TxErrorMessages.InvalidAuthoritySignature; + return false; + } return true; } } From 1053f7a85ac41ee3fdd2e42ae812945450701690 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 4 Sep 2024 12:43:52 +0200 Subject: [PATCH 343/551] Revert "Use uint256 for sig values" This reverts commit 19f3ad5b92676208450d5099bfd85b2b04da43c9. (cherry picked from commit d18d4ea00a68a848ec60796a5fcb6f184f2cb404) --- .../Nethermind.Core/AuthorizationTuple.cs | 5 ++-- .../IntrinsicGasCalculatorTests.cs | 28 +++++++++---------- .../TransactionProcessor.cs | 7 +++-- .../Eip7702/AuthorizationTupleDecoder.cs | 8 +++--- 4 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 68f61a96e2f..556ae402d95 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -6,6 +6,7 @@ using Nethermind.Int256; using Nethermind.Logging; using System; +using System.Diagnostics.CodeAnalysis; namespace Nethermind.Core; public class AuthorizationTuple( @@ -20,8 +21,8 @@ public AuthorizationTuple( Address codeAddress, ulong nonce, ulong yParity, - UInt256 r, - UInt256 s, + byte[] r, + byte[] s, Address? authority = null) : this(chainId, codeAddress, nonce, new Signature(r, s, yParity + Signature.VOffset), authority) { } diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index 742a0d442bb..22ebda47e2b 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -127,8 +127,8 @@ [new AuthorizationTuple( new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)) ], GasCostOf.PerAuthBaseCost); yield return ( @@ -137,15 +137,15 @@ [new AuthorizationTuple( new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)) ], GasCostOf.PerAuthBaseCost * 2); yield return ( @@ -154,22 +154,22 @@ [new AuthorizationTuple( new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)) ], GasCostOf.PerAuthBaseCost * 3); } @@ -194,8 +194,8 @@ public void Calculate_TxHasAuthorizationListBeforePrague_ThrowsInvalidDataExcept TestItem.AddressF, 0, TestContext.CurrentContext.Random.NextULong(), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), - new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) + TestContext.CurrentContext.Random.NextBytes(10), + TestContext.CurrentContext.Random.NextBytes(10)) ) .TestObject; diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 38c1b0aade9..9cc3622666d 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -107,9 +107,12 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon HashSet
accessedAddresses = new(); int delegationRefunds = 0; - if (spec.IsEip7702Enabled && tx.HasAuthorizationList) + if (spec.IsEip7702Enabled) { - delegationRefunds = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, accessedAddresses, spec); + if (tx.HasAuthorizationList) + { + delegationRefunds = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, accessedAddresses, spec); + } } ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository, accessedAddresses); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index c0b2638350d..ccf37da5da3 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -24,8 +24,8 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R ulong nonce = stream.DecodeULong(); ulong yParity = stream.DecodeULong(); - UInt256 r = stream.DecodeUInt256(); - UInt256 s = stream.DecodeUInt256(); + byte[] r = stream.DecodeByteArray(); + byte[] s = stream.DecodeByteArray(); if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) stream.Check(check); return new AuthorizationTuple( @@ -48,8 +48,8 @@ public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp ulong nonce = decoderContext.DecodeULong(); ulong yParity = decoderContext.DecodeULong(); - UInt256 r = decoderContext.DecodeUInt256(); - UInt256 s = decoderContext.DecodeUInt256(); + byte[] r = decoderContext.DecodeByteArray(); + byte[] s = decoderContext.DecodeByteArray(); if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) decoderContext.Check(check); return new AuthorizationTuple( From 51856ad67c1641b321dc032eb7eb0543c9627f90 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 4 Sep 2024 16:53:45 +0200 Subject: [PATCH 344/551] unittest fixes (cherry picked from commit bf78353038e7b98552a430c995532b633129cace) --- ...tory.cs => CodeInfoRepositoryBenchmark.cs} | 0 .../IntrinsicGasCalculatorTests.cs | 6 +-- .../TransactionProcessorEip7702Tests.cs | 46 ++++++++----------- .../Eip7702/AuthorizationTupleDecoder.cs | 3 -- 4 files changed, 23 insertions(+), 32 deletions(-) rename src/Nethermind/Nethermind.Benchmark/Core/{AuthorizedCodeInfoRepository.cs => CodeInfoRepositoryBenchmark.cs} (100%) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs b/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs similarity index 100% rename from src/Nethermind/Nethermind.Benchmark/Core/AuthorizedCodeInfoRepository.cs rename to src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index 22ebda47e2b..2ca8e4a009d 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -130,7 +130,7 @@ [new AuthorizationTuple( TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)) ], - GasCostOf.PerAuthBaseCost); + GasCostOf.NewAccount); yield return ( [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), @@ -147,7 +147,7 @@ [new AuthorizationTuple( TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)) ], - GasCostOf.PerAuthBaseCost * 2); + GasCostOf.NewAccount * 2); yield return ( [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), @@ -171,7 +171,7 @@ [new AuthorizationTuple( TestContext.CurrentContext.Random.NextBytes(10), TestContext.CurrentContext.Random.NextBytes(10)) ], - GasCostOf.PerAuthBaseCost * 3); + GasCostOf.NewAccount * 3); } [TestCaseSource(nameof(AuthorizationListTestCaseSource))] public void Calculate_TxHasAuthorizationList_ReturnsExpectedCostOfTx((AuthorizationTuple[] AuthorizationList, long ExpectedCost) testCase) diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 3b0900751ba..175d9e2f5a9 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -63,7 +63,7 @@ public void Execute_TxHasAuthorizationWithCodeThatSavesCallerAddress_ExpectedAdd Transaction tx = Build.A.Transaction .WithType(TxType.SetCode) .WithTo(signer.Address) - .WithGasLimit(60_000) + .WithGasLimit(100_000) .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, 0)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; @@ -116,13 +116,13 @@ public void Execute_TxHasAuthorizationCodeButAuthorityHasCode_NoAuthorizedCodeIs public static IEnumerable SenderSignerCases() { - yield return new object[] { TestItem.PrivateKeyA, TestItem.PrivateKeyB }; - yield return new object[] { TestItem.PrivateKeyA, TestItem.PrivateKeyA }; + yield return new object[] { TestItem.PrivateKeyA, TestItem.PrivateKeyB, 0ul }; + yield return new object[] { TestItem.PrivateKeyA, TestItem.PrivateKeyA, 1ul }; } [TestCaseSource(nameof(SenderSignerCases))] - public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_SenderAddressIsSaved(PrivateKey sender, PrivateKey signer) + public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_SenderAddressIsSaved(PrivateKey sender, PrivateKey signer, ulong nonce) { - Address codeSource = TestItem.AddressB; + Address codeSource = TestItem.AddressC; _stateProvider.CreateAccount(sender.Address, 1.Ether()); //Save caller in storage slot 0 byte[] code = Prepare.EvmCode @@ -136,7 +136,7 @@ public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_ .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, 0)) + .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, nonce)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -148,18 +148,16 @@ public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_ ReadOnlySpan cell = _stateProvider.Get(new StorageCell(signer.Address, 0)); - Assert.That(new Address(cell.ToArray()), Is.EqualTo(sender.Address)); + Assert.That(sender.Address.Bytes, Is.EqualTo(cell.ToArray())); } public static IEnumerable DifferentCommitValues() { //Base case - yield return new object[] { 1ul, 0, TestItem.AddressA.Bytes }; + yield return new object[] { 1ul, 0ul, TestItem.AddressA.Bytes }; //Wrong nonce - yield return new object[] { 1ul, 1, new[] { (byte)0x0 } }; - //Null nonce means it should be ignored - yield return new object[] { 1ul, 0, TestItem.AddressA.Bytes }; + yield return new object[] { 1ul, 1ul, new[] { (byte)0x0 } }; //Wrong chain id - yield return new object[] { 2ul, 0, new[] { (byte)0x0 } }; + yield return new object[] { 2ul, 0ul, new[] { (byte)0x0 } }; } [TestCaseSource(nameof(DifferentCommitValues))] @@ -207,7 +205,7 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c Transaction tx = Build.A.Transaction .WithType(TxType.SetCode) .WithTo(signer.Address) - .WithGasLimit(GasCostOf.Transaction + GasCostOf.PerAuthBaseCost * count) + .WithGasLimit(GasCostOf.Transaction + GasCostOf.NewAccount * count) .WithAuthorizationCode(Enumerable.Range(0, count) .Select(i => CreateAuthorizationTuple( signer, @@ -226,7 +224,7 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c _transactionProcessor.Execute(tx, block.Header, tracer); - Assert.That(tracer.GasSpent, Is.EqualTo(GasCostOf.Transaction + GasCostOf.PerAuthBaseCost * count)); + Assert.That(tracer.GasSpent, Is.EqualTo(GasCostOf.Transaction + GasCostOf.NewAccount * count)); } [Test] @@ -265,15 +263,15 @@ public void Execute_TxAuthorizationListWithBALANCE_WarmAccountReadGasIsCharged() _transactionProcessor.Execute(tx, block.Header, tracer); //Tx should only be charged for warm state read Assert.That(tracer.GasSpent, Is.EqualTo(GasCostOf.Transaction - + GasCostOf.PerAuthBaseCost + + GasCostOf.NewAccount + Prague.Instance.GetBalanceCost() + GasCostOf.WarmStateRead + GasCostOf.VeryLow)); } - [TestCase(false, 1)] - [TestCase(true, 2)] - public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstInstanceIsUsed(bool reverseOrder, int expectedStoredValue) + [TestCase(2)] + [TestCase(1)] + public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyLastInstanceIsUsed(int expectedStoredValue) { PrivateKey sender = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; @@ -282,14 +280,14 @@ public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstI _stateProvider.CreateAccount(sender.Address, 1.Ether()); byte[] firstCode = Prepare.EvmCode - .PushData(1) + .PushData(0) .Op(Instruction.PUSH0) .Op(Instruction.SSTORE) .Done; DeployCode(firstCodeSource, firstCode); byte[] secondCode = Prepare.EvmCode - .PushData(2) + .PushData(expectedStoredValue) .Op(Instruction.PUSH0) .Op(Instruction.SSTORE) .Done; @@ -305,16 +303,12 @@ public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyFirstI signer, _specProvider.ChainId, secondCodeSource, - 0), + 1), ]; - if (reverseOrder) - { - authList = authList.Reverse(); - } Transaction tx = Build.A.Transaction .WithType(TxType.SetCode) .WithTo(signer.Address) - .WithGasLimit(60_000) + .WithGasLimit(100_000) .WithAuthorizationCode(authList) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index ccf37da5da3..0756ba3d029 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -2,13 +2,10 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; -using Nethermind.Core.Crypto; -using Nethermind.Core.Extensions; using Nethermind.Int256; using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.IO; namespace Nethermind.Serialization.Rlp; From 8335b613993d96357e5c1596639b9c84a3e97a12 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 4 Sep 2024 22:20:16 +0200 Subject: [PATCH 345/551] unique check auth sig validity (cherry picked from commit 6380314d3ce16b4bb90d4bd73eae18f3a8674910) --- .../Validators/TxValidator.cs | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 3ab77afe8c2..51be93f5610 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -50,7 +50,7 @@ public bool IsWellFormed(Transaction transaction, IReleaseSpec releaseSpec, out && ValidateWithError(Validate1559GasFields(transaction, releaseSpec), TxErrorMessages.InvalidMaxPriorityFeePerGas, ref error) && ValidateWithError(Validate3860Rules(transaction, releaseSpec), TxErrorMessages.ContractSizeTooBig, ref error) && Validate4844Fields(transaction, ref error) - && ValidateAuthorityList(transaction, releaseSpec, ref error); + && ValidateAuthorityList(transaction, ref error); } private static bool Validate3860Rules(Transaction transaction, IReleaseSpec releaseSpec) => @@ -163,6 +163,23 @@ private bool ValidateSignature(Signature signature, IReleaseSpec spec) return true; } + private bool ValidateAuthoritySignature(Signature signature) + { + if (signature is null) + { + return false; + } + + UInt256 sValue = new(signature.SAsSpan, isBigEndian: true); + + if (sValue >= Secp256K1Curve.HalfNPlusOne) + { + return false; + } + + return signature.RecoveryId is 0 or 1; + } + private static bool Validate4844Fields(Transaction transaction, ref string? error) { // Execution-payload version verification @@ -306,7 +323,7 @@ private static bool Validate4844Fields(Transaction transaction, ref string? erro return true; } - private bool ValidateAuthorityList(Transaction tx, IReleaseSpec releaseSpec, ref string error) + private bool ValidateAuthorityList(Transaction tx, ref string error) { if (tx.Type != TxType.SetCode) { @@ -321,7 +338,7 @@ private bool ValidateAuthorityList(Transaction tx, IReleaseSpec releaseSpec, ref error = TxErrorMessages.MissingAuthorizationList; return false; } - else if (tx.AuthorizationList.Any(a => !ValidateSignature(a.AuthoritySignature, releaseSpec))) + else if (tx.AuthorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature))) { error = TxErrorMessages.InvalidAuthoritySignature; return false; From d5b8037e45fa4f14d81fb08b6061c3747e5c3175 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 4 Sep 2024 22:20:41 +0200 Subject: [PATCH 346/551] test cleanup (cherry picked from commit cf58cd2871a6281c4bf131f0c8b2f43140f6c4e5) --- .../Ethereum.Test.Base/BlockchainTestBase.cs | 23 ------------------- .../Ethereum.Test.Base/JsonToEthereumTest.cs | 15 ++++++++---- 2 files changed, 11 insertions(+), 27 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs index ea8fcf23da2..0afabd5c361 100644 --- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs @@ -37,10 +37,6 @@ using Nethermind.Trie.Pruning; using Nethermind.TxPool; using NUnit.Framework; -using Nethermind.Specs; -using Nethermind.Evm.Tracing; -using Nethermind.Evm.Tracing.GethStyle.Custom.Native.Call; -using Nethermind.Evm.Tracing.GethStyle; namespace Ethereum.Test.Base { @@ -218,27 +214,8 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? Assert.Fail($"null hash in {test.Name} block {i}"); } - TestBlockJson testBlockJson = test.Blocks[i]; - - try { - - for (var y = 0; y < correctRlp[i].Block.Transactions.Length; y++) - { - Transaction tx = correctRlp[i].Block.Transactions[y]; - - //var txTracer = new NativeCallTracer(new Transaction(), GethTraceOptions.Default); - //txProcessor.Trace(tx, new BlockExecutionContext(correctRlp[i].Block.Header), txTracer); - - - - Address address = ecdsa.RecoverAddress(tx); - if (stateProvider.GetBalance(address) == 0) - { - throw new InvalidOperationException("Test tx sender is unfunded."); - } - } // TODO: mimic the actual behaviour where block goes through validating sync manager? correctRlp[i].Block.Header.IsPostMerge = correctRlp[i].Block.Difficulty == 0; if (!test.SealEngineUsed || blockValidator.ValidateSuggestedBlock(correctRlp[i].Block, out _)) diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index 0848b07a4dc..86d2f1a34ca 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -167,8 +167,8 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t new Address(i.Address), ParseFromHex(i.Nonce), ParseFromHex(i.V), - new UInt256(Bytes.FromHexString(i.R)), - new UInt256(Bytes.FromHexString(i.S)))).ToArray(); + Bytes.FromHexString(i.R), + Bytes.FromHexString(i.S))).ToArray(); if (transaction.AuthorizationList.Any()) { transaction.Type = TxType.SetCode; @@ -180,12 +180,19 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t static ulong ParseFromHex(string i) { Span bytes = stackalloc byte[8]; - var bytes1 = Bytes.FromHexString(i); + var bytes1 = Bytes.FromHexString(i).AsSpan(); if (bytes1.Length <= 8) { + bytes1.Reverse(); bytes1.CopyTo(bytes); } - return BitConverter.ToUInt64(bytes); + else + { + throw new InvalidDataException("Transaction json contains an invalid value for uint64."); + } + + var result = BitConverter.ToUInt64(bytes); + return result; } } From e996c173be3977e1491088cac1a6dc84c9938705 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 4 Sep 2024 22:33:17 +0200 Subject: [PATCH 347/551] unittest fix (cherry picked from commit 7974a8b5e9e6dc3bd3c633f9215e7421f561a955) --- src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index e0edc311b5c..b0ee1d771cb 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1677,7 +1677,7 @@ public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType .WithAuthorizationCodeIfAuthorizationListTx() .WithMaxFeePerGas(9.GWei()) .WithMaxPriorityFeePerGas(9.GWei()) - .WithGasLimit(txType != TxType.SetCode ? GasCostOf.Transaction : GasCostOf.Transaction + GasCostOf.PerAuthBaseCost) + .WithGasLimit(txType != TxType.SetCode ? GasCostOf.Transaction : GasCostOf.Transaction + GasCostOf.NewAccount) .WithTo(TestItem.AddressB) .SignedAndResolved(_ethereumEcdsa, TestItem.PrivateKeyA).TestObject; From 2ce9f73eca85bebb7ebecf64be884059642ff927 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 5 Sep 2024 15:54:58 +0200 Subject: [PATCH 348/551] do not allow empty auth list (cherry picked from commit 7b28007b51bd27d28709dccb66e19fad06543cf8) --- .../Validators/TxValidatorTests.cs | 34 +++++++++++++++++++ .../Validators/TxValidator.cs | 34 +++++++------------ .../Builders/TransactionBuilder.cs | 4 +-- .../TransactionProcessorEip7702Tests.cs | 4 +-- 4 files changed, 50 insertions(+), 26 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 74705102136..3ffe4f40676 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -566,6 +566,40 @@ public void IsWellFormed_AuthorizationListTxInPragueSpec_ReturnsTrue() Assert.That(txValidator.IsWellFormed(tx, Prague.Instance, out _), Is.True); } + [Test] + public void IsWellFormed_EmptyAuthorizationList_ReturnsFalse() + { + TransactionBuilder txBuilder = Build.A.Transaction + .WithType(TxType.SetCode) + .WithAuthorizationCode([]) + .WithMaxFeePerGas(100000) + .WithGasLimit(1000000) + .WithChainId(TestBlockchainIds.ChainId) + .SignedAndResolved(); + + Transaction tx = txBuilder.TestObject; + TxValidator txValidator = new(TestBlockchainIds.ChainId); + + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance, out _), Is.False); + } + + [Test] + public void IsWellFormed_NullAuthorizationList_ReturnsFalse() + { + TransactionBuilder txBuilder = Build.A.Transaction + .WithType(TxType.SetCode) + .WithAuthorizationCode((AuthorizationTuple[])null!) + .WithMaxFeePerGas(100000) + .WithGasLimit(1000000) + .WithChainId(TestBlockchainIds.ChainId) + .SignedAndResolved(); + + Transaction tx = txBuilder.TestObject; + TxValidator txValidator = new(TestBlockchainIds.ChainId); + + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance, out _), Is.False); + } + private static byte[] MakeArray(int count, params byte[] elements) => elements.Take(Math.Min(count, elements.Length)) .Concat(new byte[Math.Max(0, count - elements.Length)]) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 51be93f5610..94a57207f5c 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -122,26 +122,6 @@ private bool ValidateSignature(Transaction tx, IReleaseSpec spec) { Signature? signature = tx.Signature; - if (!ValidateSignature(signature, spec)) - { - return false; - } - - if (signature.V is 27 or 28) - { - return true; - } - - if (tx.Type == TxType.Legacy && spec.IsEip155Enabled && (signature.V == _chainIdValue * 2 + 35ul || signature.V == _chainIdValue * 2 + 36ul)) - { - return true; - } - - return !spec.ValidateChainId; - } - - private bool ValidateSignature(Signature signature, IReleaseSpec spec) - { if (signature is null) { return false; @@ -160,7 +140,17 @@ private bool ValidateSignature(Signature signature, IReleaseSpec spec) return false; } - return true; + if (signature.V is 27 or 28) + { + return true; + } + + if (tx.Type == TxType.Legacy && spec.IsEip155Enabled && (signature.V == _chainIdValue * 2 + 35ul || signature.V == _chainIdValue * 2 + 36ul)) + { + return true; + } + + return !spec.ValidateChainId; } private bool ValidateAuthoritySignature(Signature signature) @@ -333,7 +323,7 @@ private bool ValidateAuthorityList(Transaction tx, ref string error) return false; } } - else if (tx.AuthorizationList is null) + else if (tx.AuthorizationList is null || tx.AuthorizationList.Length == 0) { error = TxErrorMessages.MissingAuthorizationList; return false; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index 2a47a676728..7bd46b91214 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -230,9 +230,9 @@ public TransactionBuilder WithAuthorizationCode(AuthorizationTuple authTuple) TestObjectInternal.AuthorizationList = TestObjectInternal.AuthorizationList is not null ? [.. TestObjectInternal.AuthorizationList, authTuple] : [authTuple]; return this; } - public TransactionBuilder WithAuthorizationCode(IEnumerable authList) + public TransactionBuilder WithAuthorizationCode(AuthorizationTuple[] authList) { - TestObjectInternal.AuthorizationList = authList?.ToArray(); + TestObjectInternal.AuthorizationList = authList; return this; } diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 175d9e2f5a9..13d081b9975 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -212,7 +212,7 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c _specProvider.ChainId, //Copy empty code so will not add to gas cost TestItem.AddressC, - 0))) + 0)).ToArray()) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -293,7 +293,7 @@ public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyLastIn .Done; DeployCode(secondCodeSource, secondCode); - IEnumerable authList = [ + AuthorizationTuple[] authList = [ CreateAuthorizationTuple( signer, _specProvider.ChainId, From 2da81119c7ce8f94674729d31651b47b2e095e98 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 5 Sep 2024 18:45:29 +0200 Subject: [PATCH 349/551] tx pool check if sender is delegation (cherry picked from commit 8f5c16902cdbe19c160db13bdfd54a9c55d6d6e9) --- .../Nethermind.Blockchain.Test/ReorgTests.cs | 4 +++- .../CliqueBlockProducerTests.cs | 4 +++- .../InitializeBlockchainAuRa.cs | 5 ++++- .../Blockchain/TestBlockchain.cs | 4 +++- .../Steps/InitializeBlockchain.cs | 11 +++++++---- .../Modules/ParityRpcModuleTests.cs | 5 ++++- .../IReadOnlyStateProviderExtensions.cs | 2 -- .../SyncThreadTests.cs | 4 +++- .../Nethermind.TxPool.Test/TxPoolTests.cs | 2 ++ .../Filters/DeployedCodeFilter.cs | 12 ++++-------- .../Filters/IsValidTxSender.cs | 18 ++++++++++++++++++ .../Nethermind.TxPool/Nethermind.TxPool.csproj | 2 ++ src/Nethermind/Nethermind.TxPool/TxPool.cs | 10 +++++++++- 13 files changed, 62 insertions(+), 21 deletions(-) create mode 100644 src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs diff --git a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs index a9d6497b430..29f3785de67 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs @@ -55,7 +55,9 @@ public void Setup() new TxPoolConfig(), new TxValidator(specProvider.ChainId), LimboLogs.Instance, - transactionComparerProvider.GetDefaultComparer()); + transactionComparerProvider.GetDefaultComparer(), + new CodeInfoRepository(specProvider.ChainId), + stateProvider); BlockhashProvider blockhashProvider = new(_blockTree, specProvider, stateProvider, LimboLogs.Instance); CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new( diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs index 63c2696a38d..25db09916ea 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs @@ -114,7 +114,9 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f new TxPoolConfig(), new TxValidator(goerliSpecProvider.ChainId), _logManager, - transactionComparerProvider.GetDefaultComparer()); + transactionComparerProvider.GetDefaultComparer(), + new CodeInfoRepository(specProvider.ChainId), + stateProvider); _pools[privateKey] = txPool; BlockhashProvider blockhashProvider = new(blockTree, specProvider, stateProvider, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs index 3bfac506256..99b9e460011 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs @@ -23,6 +23,7 @@ using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; using Nethermind.Core; +using Nethermind.Evm; using Nethermind.Init.Steps; using Nethermind.Logging; using Nethermind.State; @@ -254,7 +255,7 @@ private IComparer CreateTxPoolTxComparer(TxPriorityContract? txPrio return CreateTxPoolTxComparer(); } - protected override TxPool.TxPool CreateTxPool() + protected override TxPool.TxPool CreateTxPool(IWorldState worldState, CodeInfoRepository codeInfoRepository) { // This has to be different object than the _processingReadOnlyTransactionProcessorSource as this is in separate thread var txPriorityContract = TxAuRaFilterBuilders.CreateTxPrioritySources(_api); @@ -274,6 +275,8 @@ protected override TxPool.TxPool CreateTxPool() _api.TxValidator, _api.LogManager, CreateTxPoolTxComparer(txPriorityContract, localDataSource), + codeInfoRepository, + worldState, _api.TxGossipPolicy, new TxFilterAdapter(_api.BlockTree, txPoolFilter, _api.LogManager), txPriorityContract is not null || localDataSource is not null); diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index b3fdbcdc5c9..0b1f178207c 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -322,7 +322,9 @@ protected virtual TxPool.TxPool CreateTxPool() => new TxPoolConfig() { BlobsSupport = BlobsSupportMode.InMemory }, new TxValidator(SpecProvider.ChainId), LogManager, - TransactionComparerProvider.GetDefaultComparer()); + TransactionComparerProvider.GetDefaultComparer(), + new CodeInfoRepository(SpecProvider.ChainId), + WorldStateManager.GlobalWorldState); protected virtual TxPoolTxSource CreateTxPoolTxSource() { diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs index 4cc16575599..a68a01b0237 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs @@ -73,7 +73,9 @@ protected virtual Task InitBlockchain() IReceiptConfig receiptConfig = getApi.Config(); IStateReader stateReader = setApi.StateReader!; - ITxPool txPool = _api.TxPool = CreateTxPool(); + PreBlockCaches? preBlockCaches = (_api.WorldState as IPreBlockCaches)?.Caches; + CodeInfoRepository codeInfoRepository = new(1, preBlockCaches?.PrecompileCache); + ITxPool txPool = _api.TxPool = CreateTxPool(_api.WorldState!, codeInfoRepository); ReceiptCanonicalityMonitor receiptCanonicalityMonitor = new(getApi.ReceiptStorage, _api.LogManager); getApi.DisposeStack.Push(receiptCanonicalityMonitor); @@ -82,8 +84,7 @@ protected virtual Task InitBlockchain() _api.BlockPreprocessor.AddFirst( new RecoverSignatures(getApi.EthereumEcdsa, txPool, getApi.SpecProvider, getApi.LogManager)); - PreBlockCaches? preBlockCaches = (_api.WorldState as IPreBlockCaches)?.Caches; - CodeInfoRepository codeInfoRepository = new(1, preBlockCaches?.PrecompileCache); + VirtualMachine virtualMachine = CreateVirtualMachine(codeInfoRepository); _api.TransactionProcessor = CreateTransactionProcessor(codeInfoRepository, virtualMachine); @@ -200,7 +201,7 @@ protected virtual IHealthHintService CreateHealthHintService() => protected virtual IBlockProductionPolicy CreateBlockProductionPolicy() => new BlockProductionPolicy(_api.Config()); - protected virtual TxPool.TxPool CreateTxPool() => + protected virtual TxPool.TxPool CreateTxPool(IWorldState worldState, CodeInfoRepository codeInfoRepository) => new(_api.EthereumEcdsa!, _api.BlobTxStorage ?? NullBlobTxStorage.Instance, new ChainHeadInfoProvider(_api.SpecProvider!, _api.BlockTree!, _api.StateReader!), @@ -208,6 +209,8 @@ protected virtual TxPool.TxPool CreateTxPool() => _api.TxValidator!, _api.LogManager, CreateTxPoolTxComparer(), + codeInfoRepository, + worldState, _api.TxGossipPolicy); protected IComparer CreateTxPoolTxComparer() => _api.TransactionComparerProvider!.GetDefaultComparer(); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs index 3fd4d6dbac0..034835b207e 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs @@ -35,6 +35,7 @@ using NSubstitute; using NUnit.Framework; using System; +using Nethermind.Evm; namespace Nethermind.JsonRpc.Test.Modules { @@ -79,7 +80,9 @@ public void Initialize() new TxPoolConfig(), new TxValidator(specProvider.ChainId), LimboLogs.Instance, - new TransactionComparerProvider(specProvider, _blockTree).GetDefaultComparer()); + new TransactionComparerProvider(specProvider, _blockTree).GetDefaultComparer(), + new CodeInfoRepository(specProvider.ChainId), + stateProvider); _receiptStorage = new InMemoryReceiptStorage(); diff --git a/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs b/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs index f2716948c61..7760d663352 100644 --- a/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs +++ b/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs @@ -14,9 +14,7 @@ public static byte[] GetCode(this IReadOnlyStateProvider stateProvider, Address stateProvider.TryGetAccount(address, out AccountStruct account); return !account.HasCode ? Array.Empty() : stateProvider.GetCode(account.CodeHash) ?? Array.Empty(); } - public static bool IsInvalidContractSender(this IReadOnlyStateProvider stateProvider, IReleaseSpec spec, Address address) => spec.IsEip3607Enabled && stateProvider.HasCode(address) && !Eip7702Constants.IsDelegatedCode(GetCode(stateProvider, address)); - } } diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs index 59168a2a9a7..e03d12caa2e 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs @@ -274,7 +274,9 @@ private SyncTestContext CreateSyncManager(int index) new TxPoolConfig(), new TxValidator(specProvider.ChainId), logManager, - transactionComparerProvider.GetDefaultComparer()); + transactionComparerProvider.GetDefaultComparer(), + new CodeInfoRepository(specProvider.ChainId), + stateProvider); BlockhashProvider blockhashProvider = new(tree, specProvider, stateProvider, LimboLogs.Instance); CodeInfoRepository codeInfoRepository = new(1); VirtualMachine virtualMachine = new(blockhashProvider, specProvider, codeInfoRepository, logManager); diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index b0ee1d771cb..ceec28b4b1e 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1728,6 +1728,8 @@ private TxPool CreatePool( new TxValidator(_specProvider.ChainId), _logManager, transactionComparerProvider.GetDefaultComparer(), + new CodeInfoRepository(specProvider.ChainId), + _stateProvider, ShouldGossip.Instance, incomingTxFilter, thereIsPriorityContract); diff --git a/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs b/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs index 12d6e5a7035..7272e313af4 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs @@ -3,23 +3,19 @@ using Nethermind.Core; using Nethermind.Core.Specs; +using Nethermind.Evm; +using Nethermind.State; namespace Nethermind.TxPool.Filters { /// /// Filters out transactions that sender has any code deployed. If is enabled. /// - internal sealed class DeployedCodeFilter : IIncomingTxFilter + internal sealed class DeployedCodeFilter(IWorldState worldState, ICodeInfoRepository codeInfoRepository, IChainHeadSpecProvider specProvider) : IIncomingTxFilter { - private readonly IChainHeadSpecProvider _specProvider; - - public DeployedCodeFilter(IChainHeadSpecProvider specProvider) - { - _specProvider = specProvider; - } public AcceptTxResult Accept(Transaction tx, ref TxFilteringState state, TxHandlingOptions txHandlingOptions) { - return _specProvider.GetCurrentHeadSpec().IsEip3607Enabled && state.SenderAccount.HasCode + return specProvider.GetCurrentHeadSpec().IsEip3607Enabled && state.SenderAccount.HasCode && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.IsDelegation(worldState, tx.SenderAddress!, out _)) ? AcceptTxResult.SenderIsContract : AcceptTxResult.Accepted; } diff --git a/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs b/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs new file mode 100644 index 00000000000..f139fa05e3d --- /dev/null +++ b/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.Evm; +using Nethermind.State; + +namespace Nethermind.TxPool.Filters; +public class IsValidTxSender(IWorldState worldState, ICodeInfoRepository codeInfoRepository, IChainHeadSpecProvider specProvider) +{ + public bool IsValid(Address sender) + { + return specProvider.GetCurrentHeadSpec().IsEip3607Enabled + && worldState.HasCode(sender) + && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.IsDelegation(worldState, sender, out _)); + } +} diff --git a/src/Nethermind/Nethermind.TxPool/Nethermind.TxPool.csproj b/src/Nethermind/Nethermind.TxPool/Nethermind.TxPool.csproj index 2f6f825141f..7c667ed34e8 100644 --- a/src/Nethermind/Nethermind.TxPool/Nethermind.TxPool.csproj +++ b/src/Nethermind/Nethermind.TxPool/Nethermind.TxPool.csproj @@ -13,6 +13,8 @@ + + diff --git a/src/Nethermind/Nethermind.TxPool/TxPool.cs b/src/Nethermind/Nethermind.TxPool/TxPool.cs index cbcbf4a1009..5d09aace6d1 100644 --- a/src/Nethermind/Nethermind.TxPool/TxPool.cs +++ b/src/Nethermind/Nethermind.TxPool/TxPool.cs @@ -16,8 +16,10 @@ using Nethermind.Core.Specs; using Nethermind.Core.Timers; using Nethermind.Crypto; +using Nethermind.Evm; using Nethermind.Int256; using Nethermind.Logging; +using Nethermind.State; using Nethermind.TxPool.Collections; using Nethermind.TxPool.Filters; using static Nethermind.TxPool.Collections.TxDistinctSortedPool; @@ -50,6 +52,8 @@ public class TxPool : ITxPool, IDisposable private readonly IBlobTxStorage _blobTxStorage; private readonly IChainHeadInfoProvider _headInfo; private readonly ITxPoolConfig _txPoolConfig; + private readonly ICodeInfoRepository _codeInfoRepository; + private readonly IWorldState _worldState; private readonly bool _blobReorgsSupportEnabled; private readonly ILogger _logger; @@ -91,6 +95,8 @@ public TxPool(IEthereumEcdsa ecdsa, ITxValidator validator, ILogManager? logManager, IComparer comparer, + ICodeInfoRepository codeInfoRepository, + IWorldState worldState, ITxGossipPolicy? transactionsGossipPolicy = null, IIncomingTxFilter? incomingTxFilter = null, bool thereIsPriorityContract = false) @@ -100,6 +106,8 @@ public TxPool(IEthereumEcdsa ecdsa, _blobTxStorage = blobTxStorage ?? throw new ArgumentNullException(nameof(blobTxStorage)); _headInfo = chainHeadInfoProvider ?? throw new ArgumentNullException(nameof(chainHeadInfoProvider)); _txPoolConfig = txPoolConfig; + _codeInfoRepository = codeInfoRepository; + _worldState = worldState; _blobReorgsSupportEnabled = txPoolConfig.BlobsSupport.SupportsReorgs(); _accounts = _accountCache = new AccountCache(_headInfo.AccountStateProvider); _specProvider = _headInfo.SpecProvider; @@ -149,7 +157,7 @@ public TxPool(IEthereumEcdsa ecdsa, postHashFilters.Add(incomingTxFilter); } - postHashFilters.Add(new DeployedCodeFilter(_specProvider)); + postHashFilters.Add(new DeployedCodeFilter(_worldState, _codeInfoRepository, _specProvider)); _postHashFilters = postHashFilters.ToArray(); From 22152a8948dc9d831ec10db6e88c76e65a1d2f9b Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 6 Sep 2024 13:08:38 +0200 Subject: [PATCH 350/551] unittest for TxPool (cherry picked from commit b1020eb7d6aa9469a5a3bfb74ecb9d6c4236393d) --- .../Nethermind.TxPool.Test/TxPoolTests.cs | 29 +++++++++++++++++++ src/Nethermind/Nethermind.TxPool/TxPool.cs | 6 +--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index ceec28b4b1e..06c9e82c6c1 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1690,6 +1690,35 @@ public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType _txPool.GetPendingTransactions().Should().NotContain(testTx); } + static IEnumerable<(byte[], AcceptTxResult)> CodeCases() + { + yield return (new byte[16], AcceptTxResult.SenderIsContract); + //Delegation code + yield return ([..Eip7702Constants.DelegationHeader, ..new byte[20]], AcceptTxResult.Accepted); + } + [TestCaseSource(nameof(CodeCases))] + public void SubmitTx_((byte[] code, AcceptTxResult expected) testCase) + { + ISpecProvider specProvider = GetPragueSpecProvider(); + TxPoolConfig txPoolConfig = new TxPoolConfig { Size = 30, PersistentBlobStorageSize = 0 }; + _txPool = CreatePool(txPoolConfig, specProvider); + + Transaction testTx = Build.A.Transaction + .WithNonce(0) + .WithMaxFeePerGas(9.GWei()) + .WithMaxPriorityFeePerGas(9.GWei()) + .WithGasLimit(100_000) + .WithTo(TestItem.AddressB) + .SignedAndResolved(_ethereumEcdsa, TestItem.PrivateKeyA).TestObject; + + EnsureSenderBalance(TestItem.PrivateKeyA.Address, UInt256.MaxValue); + + _stateProvider.InsertCode(TestItem.PrivateKeyA.Address, testCase.code, Prague.Instance); + + AcceptTxResult result = _txPool.SubmitTx(testTx, TxHandlingOptions.PersistentBroadcast); + result.Should().Be(testCase.expected); + } + private IDictionary GetPeers(int limit = 100) { var peers = new Dictionary(); diff --git a/src/Nethermind/Nethermind.TxPool/TxPool.cs b/src/Nethermind/Nethermind.TxPool/TxPool.cs index 5d09aace6d1..36fa328135b 100644 --- a/src/Nethermind/Nethermind.TxPool/TxPool.cs +++ b/src/Nethermind/Nethermind.TxPool/TxPool.cs @@ -52,8 +52,6 @@ public class TxPool : ITxPool, IDisposable private readonly IBlobTxStorage _blobTxStorage; private readonly IChainHeadInfoProvider _headInfo; private readonly ITxPoolConfig _txPoolConfig; - private readonly ICodeInfoRepository _codeInfoRepository; - private readonly IWorldState _worldState; private readonly bool _blobReorgsSupportEnabled; private readonly ILogger _logger; @@ -106,8 +104,6 @@ public TxPool(IEthereumEcdsa ecdsa, _blobTxStorage = blobTxStorage ?? throw new ArgumentNullException(nameof(blobTxStorage)); _headInfo = chainHeadInfoProvider ?? throw new ArgumentNullException(nameof(chainHeadInfoProvider)); _txPoolConfig = txPoolConfig; - _codeInfoRepository = codeInfoRepository; - _worldState = worldState; _blobReorgsSupportEnabled = txPoolConfig.BlobsSupport.SupportsReorgs(); _accounts = _accountCache = new AccountCache(_headInfo.AccountStateProvider); _specProvider = _headInfo.SpecProvider; @@ -157,7 +153,7 @@ public TxPool(IEthereumEcdsa ecdsa, postHashFilters.Add(incomingTxFilter); } - postHashFilters.Add(new DeployedCodeFilter(_worldState, _codeInfoRepository, _specProvider)); + postHashFilters.Add(new DeployedCodeFilter(worldState, codeInfoRepository, _specProvider)); _postHashFilters = postHashFilters.ToArray(); From 904bdb6812239e5b679d6e0d026b5dc5f79f63e8 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 9 Sep 2024 12:56:57 +0200 Subject: [PATCH 351/551] modified hive.json for debugging (cherry picked from commit d30e193f877be97d580cc226c9d246c81ae3f565) --- src/Nethermind/Chains/hive.json | 76 ++++++++++++++------------------- 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/src/Nethermind/Chains/hive.json b/src/Nethermind/Chains/hive.json index 805c6aaa175..0e0d1f800a6 100644 --- a/src/Nethermind/Chains/hive.json +++ b/src/Nethermind/Chains/hive.json @@ -26,7 +26,7 @@ "eip155Transition": "0x0", "maxCodeSizeTransition": "0x0", "maxCodeSize": 24576, - "maximumExtraDataSize": 102400, + "maximumExtraDataSize": "0x400", "eip140Transition": "0x0", "eip211Transition": "0x0", "eip214Transition": "0x0", @@ -51,57 +51,45 @@ "eip3529Transition": "0x0", "eip3541Transition": "0x0", "eip3198Transition": "0x0", - "MergeForkIdTransition": "0x64", - "networkID": "0x7", - "chainID": "0x7" + "eip3651TransitionTimestamp": "0x0", + "eip3855TransitionTimestamp": "0x0", + "eip3860TransitionTimestamp": "0x0", + "eip4895TransitionTimestamp": "0x0", + "eip4844TransitionTimestamp": "0x0", + "eip4788TransitionTimestamp": "0x0", + "eip1153TransitionTimestamp": "0x0", + "eip5656TransitionTimestamp": "0x0", + "eip6780TransitionTimestamp": "0x0", + "eip7702TransitionTimestamp": "0x0", + "chainID": "0x1" }, "genesis": { "seal": { "ethereum": { - "nonce": "0x0000000000000000" + "nonce": "0x0000000000000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000" } }, - "difficulty": "0x30000", + "difficulty": "0x00", "author": "0x0000000000000000000000000000000000000000", - "timestamp": "0x1234", - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000658bdf435d810c91414ec09147daa6db624063790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x2fefd8" + "timestamp": "0x00", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "extraData": "0x00", + "gasLimit": "0x016345785d8a0000", + "baseFeePerGas": "0x07" }, "accounts": { - "0xcf49fda3be353c69b41ed96333cd24302da4556f": { - "balance": "0x123450000000000000000" - }, - "0x0161e041aad467a890839d5b08b138c1e6373072": { - "balance": "0x123450000000000000000" - }, - "0x87da6a8c6e9eff15d703fc2773e32f6af8dbe301": { - "balance": "0x123450000000000000000" - }, - "0xb97de4b8c857e4f6bc354f226dc3249aaee49209": { - "balance": "0x123450000000000000000" - }, - "0xc5065c9eeebe6df2c2284d046bfc906501846c51": { - "balance": "0x123450000000000000000" - }, - "0x0000000000000000000000000000000000000314": { - "balance": "0x0", - "code": "0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a223e05d1461006a578063abd1a0cf1461008d578063abfced1d146100d4578063e05c914a14610110578063e6768b451461014c575b610000565b346100005761007761019d565b6040518082815260200191505060405180910390f35b34610000576100be600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506101a3565b6040518082815260200191505060405180910390f35b346100005761010e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506101ed565b005b346100005761014a600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610236565b005b346100005761017960048080359060200190919080359060200190919080359060200190919050506103c4565b60405180848152602001838152602001828152602001935050505060405180910390f35b60005481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b7f6031a8d62d7c95988fa262657cd92107d90ed96e08d8f867d32f26edfe85502260405180905060405180910390a17f47e2689743f14e97f7dcfa5eec10ba1dff02f83b3d1d4b9c07b206cbbda66450826040518082815260200191505060405180910390a1817fa48a6b249a5084126c3da369fbc9b16827ead8cb5cdc094b717d3f1dcd995e2960405180905060405180910390a27f7890603b316f3509577afd111710f9ebeefa15e12f72347d9dffd0d65ae3bade81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18073ffffffffffffffffffffffffffffffffffffffff167f7efef9ea3f60ddc038e50cccec621f86a0195894dc0520482abf8b5c6b659e4160405180905060405180910390a28181604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a05b5050565b6000600060008585859250925092505b935093509390505600a165627a7a72305820aaf842d0d0c35c45622c5263cbb54813d2974d3999c8c38551d7c613ea2bc1170029", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1234", - "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9": "0x01" - } - }, - "0x0000000000000000000000000000000000000315": { - "balance": "0x9999999999999999999999999999999", - "code": "0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063ef2769ca1461003e575b610000565b3461000057610078600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061007a565b005b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051809050600060405180830381858888f1935050505015610106578173ffffffffffffffffffffffffffffffffffffffff167f30a3c50752f2552dcc2b93f5b96866280816a986c0c0408cb6778b9fa198288f826040518082815260200191505060405180910390a25b5b50505600a165627a7a72305820637991fabcc8abad4294bf2bb615db78fbec4edff1635a2647d3894e2daf6a610029" - }, - "0x0000000000000000000000000000000000000316": { - "balance": "0x0", - "code": "0x444355" - }, - "0x0000000000000000000000000000000000000317": { - "balance": "0x0", - "code": "0x600160003555" + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x1d6329f1c35ca4bfabb9f5610000000000", + "code": "0x", + "storage": {} }, "0x0000000000000000000000000000000000000001": { "builtin": { @@ -206,4 +194,4 @@ } } } -} \ No newline at end of file +} From b6f2563c8f1f1e9640f344edbfd5aee19695f673 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 9 Sep 2024 13:05:33 +0200 Subject: [PATCH 352/551] hive test cfg (cherry picked from commit 68c3736618aa9ad79e837018d9a097d9a5d50b08) --- src/Nethermind/Nethermind.Runner/configs/hive.cfg | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Runner/configs/hive.cfg b/src/Nethermind/Nethermind.Runner/configs/hive.cfg index 4bbfac20a03..d0d51c733ce 100644 --- a/src/Nethermind/Nethermind.Runner/configs/hive.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/hive.cfg @@ -9,7 +9,12 @@ }, "JsonRpc": { "Enabled": true, - "Host": "0.0.0.0" + "Timeout": 20000, + "Host": "127.0.0.1", + "Port": 8545, + "EngineHost": "127.0.0.1", + "EnginePort": 8551, + "EngineEnabledModules": "net,eth,subscribe,engine,web3,client" }, "Network": { "ExternalIp": "127.0.0.1" From 6a77929cafab94c88875239d1ab9127ccadbb655 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 9 Sep 2024 15:23:06 +0200 Subject: [PATCH 353/551] cleanup (cherry picked from commit fc4553127aac4b135225e39dce76cfd365a64d1a) --- src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs | 2 +- .../Nethermind.TxPool/Filters/DeployedCodeFilter.cs | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index 06c9e82c6c1..297e1f42fd2 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1697,7 +1697,7 @@ public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType yield return ([..Eip7702Constants.DelegationHeader, ..new byte[20]], AcceptTxResult.Accepted); } [TestCaseSource(nameof(CodeCases))] - public void SubmitTx_((byte[] code, AcceptTxResult expected) testCase) + public void SubmitTx_CodeIsNotDelegationAndDelegation_DelegationIsAccepted((byte[] code, AcceptTxResult expected) testCase) { ISpecProvider specProvider = GetPragueSpecProvider(); TxPoolConfig txPoolConfig = new TxPoolConfig { Size = 30, PersistentBlobStorageSize = 0 }; diff --git a/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs b/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs index 7272e313af4..636c738a778 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs @@ -15,7 +15,10 @@ internal sealed class DeployedCodeFilter(IWorldState worldState, ICodeInfoReposi { public AcceptTxResult Accept(Transaction tx, ref TxFilteringState state, TxHandlingOptions txHandlingOptions) { - return specProvider.GetCurrentHeadSpec().IsEip3607Enabled && state.SenderAccount.HasCode && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.IsDelegation(worldState, tx.SenderAddress!, out _)) + return specProvider.GetCurrentHeadSpec().IsEip3607Enabled + && state.SenderAccount.HasCode + && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || + !codeInfoRepository.IsDelegation(worldState, tx.SenderAddress!, out _)) ? AcceptTxResult.SenderIsContract : AcceptTxResult.Accepted; } From 2f1e85c617deb4a4e321b1dc1c6466b24465f112 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 9 Sep 2024 15:25:29 +0200 Subject: [PATCH 354/551] Auth list in RPC (cherry picked from commit d11df9c17f2af42a5ff10040c63d5f3f554c65a8) --- src/Nethermind/Nethermind.Core/Transaction.cs | 1 + .../Eth/AuthorizationTupleForRpc.cs | 46 +++++++++++++++++++ .../Eth/TransactionForRpc.cs | 9 ++++ 3 files changed, 56 insertions(+) create mode 100644 src/Nethermind/Nethermind.Facade/Eth/AuthorizationTupleForRpc.cs diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index a8a05163eff..0fe03bd1a9e 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -46,6 +46,7 @@ public class Transaction public bool SupportsAccessList => Type >= TxType.AccessList && Type != TxType.DepositTx; public bool Supports1559 => Type >= TxType.EIP1559 && Type != TxType.DepositTx; public bool SupportsBlobs => Type == TxType.Blob && Type != TxType.DepositTx; + public bool SupportsAuthorizationList => Type == TxType.SetCode && Type != TxType.DepositTx; public long GasLimit { get; set; } public Address? To { get; set; } public UInt256 Value { get; set; } diff --git a/src/Nethermind/Nethermind.Facade/Eth/AuthorizationTupleForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/AuthorizationTupleForRpc.cs new file mode 100644 index 00000000000..f1813a09e38 --- /dev/null +++ b/src/Nethermind/Nethermind.Facade/Eth/AuthorizationTupleForRpc.cs @@ -0,0 +1,46 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core; +using Nethermind.Core.Eip2930; +using Nethermind.Evm.Tracing.GethStyle.Custom.JavaScript; +using Nethermind.Int256; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json.Serialization; + +namespace Nethermind.Facade.Eth +{ + public struct AuthorizationTupleForRpc + { + [JsonConstructor] + public AuthorizationTupleForRpc() + { + } + public AuthorizationTupleForRpc(UInt256 chainId, ulong nonce, Address address, UInt256? yParity, UInt256? s, UInt256? r) + { + ChainId = chainId; + Nonce = nonce; + Address = address; + YParity = yParity; + S = s; + R = r; + } + + public UInt256 ChainId { get; set; } + public ulong Nonce { get; set; } + public Address Address { get; set; } + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public UInt256? YParity { get; set; } + public UInt256? S { get; set; } + public UInt256? R { get; set; } + + public static IEnumerable FromAuthorizationList(AuthorizationTuple[] authorizationList) => + authorizationList.Select(tuple => new AuthorizationTupleForRpc(tuple.ChainId, + tuple.Nonce, + tuple.CodeAddress, + tuple.AuthoritySignature.RecoveryId, + new UInt256(tuple.AuthoritySignature.S), + new UInt256(tuple.AuthoritySignature.R))); + } +} diff --git a/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs index d51ed363156..c89afc84c37 100644 --- a/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs @@ -61,6 +61,14 @@ public TransactionForRpc(Hash256? blockHash, long? blockNumber, int? txIndex, Tr { AccessList = null; } + if (transaction.SupportsAuthorizationList) + { + AuthorizationList = transaction.AuthorizationList is null ? Array.Empty() : AuthorizationTupleForRpc.FromAuthorizationList(transaction.AuthorizationList); + } + else + { + AuthorizationList = null; + } MaxFeePerBlobGas = transaction.MaxFeePerBlobGas; BlobVersionedHashes = transaction.BlobVersionedHashes; @@ -126,6 +134,7 @@ public TransactionForRpc() { } public TxType Type { get; set; } public IEnumerable? AccessList { get; set; } + public IEnumerable? AuthorizationList{ get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public UInt256? MaxFeePerBlobGas { get; set; } // eip4844 From d59d3fa37d27b7781396431af1c9288b36f42bdd Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Tue, 10 Sep 2024 17:40:01 +0300 Subject: [PATCH 355/551] fix, disallow create tx in SetCode tx type (cherry picked from commit b3476646224b246f64caa7dfc16261912d8750e4) --- .../Validators/TxValidatorTests.cs | 12 +++++-- .../Messages/TxErrorMessages.cs | 4 +-- .../Validators/TxValidator.cs | 31 +++++++++---------- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 3ffe4f40676..f3f862e2181 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Numerics; using FluentAssertions; +using Nethermind.Consensus.Messages; using Nethermind.Consensus.Validators; using Nethermind.Core; using Nethermind.Core.Crypto; @@ -533,7 +534,7 @@ public void IsWellFormed_BlobTxHasProofOverTheSizeLimit_ReturnFalse() } [Test] - public void IsWellFormed_AuthorizationListTxInCancunSpec_ReturnsFalse() + public void IsWellFormed_CreateTxInSetCodeFalse() { TransactionBuilder txBuilder = Build.A.Transaction .WithType(TxType.SetCode) @@ -541,12 +542,17 @@ public void IsWellFormed_AuthorizationListTxInCancunSpec_ReturnsFalse() .WithMaxFeePerGas(100000) .WithGasLimit(1000000) .WithChainId(TestBlockchainIds.ChainId) - .SignedAndResolved(); + .SignedAndResolved() + .WithTo(null); Transaction tx = txBuilder.TestObject; TxValidator txValidator = new(TestBlockchainIds.ChainId); - Assert.That(txValidator.IsWellFormed(tx, Cancun.Instance, out _), Is.False); + Assert.Multiple(() => + { + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance, out string? error), Is.False); + Assert.That(error, Is.EqualTo(TxErrorMessages.NotAllowedCreateTransaction)); + }); } [Test] diff --git a/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs index a9b1cbd2674..af840ad0244 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs @@ -37,8 +37,8 @@ public static string InvalidTxChainId(ulong expected, ulong? actual) => public const string InvalidTransaction = $"InvalidTransaction: Cannot be {nameof(ShardBlobNetworkWrapper)}."; - public const string TxMissingTo = - "TxMissingTo: Must be set."; + public const string NotAllowedCreateTransaction = + "NotAllowedCreateTransaction: To must be set."; public const string BlobTxMissingMaxFeePerBlobGas = "BlobTxMissingMaxFeePerBlobGas: Must be set."; diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 94a57207f5c..e46defdcaf6 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -50,7 +50,7 @@ public bool IsWellFormed(Transaction transaction, IReleaseSpec releaseSpec, out && ValidateWithError(Validate1559GasFields(transaction, releaseSpec), TxErrorMessages.InvalidMaxPriorityFeePerGas, ref error) && ValidateWithError(Validate3860Rules(transaction, releaseSpec), TxErrorMessages.ContractSizeTooBig, ref error) && Validate4844Fields(transaction, ref error) - && ValidateAuthorityList(transaction, ref error); + && Validate7702(transaction, ref error); } private static bool Validate3860Rules(Transaction transaction, IReleaseSpec releaseSpec) => @@ -155,11 +155,6 @@ private bool ValidateSignature(Transaction tx, IReleaseSpec spec) private bool ValidateAuthoritySignature(Signature signature) { - if (signature is null) - { - return false; - } - UInt256 sValue = new(signature.SAsSpan, isBigEndian: true); if (sValue >= Secp256K1Curve.HalfNPlusOne) @@ -197,9 +192,9 @@ private static bool Validate4844Fields(Transaction transaction, ref string? erro return true; } - if (transaction.To is null) + if (transaction.IsContractCreation) { - error = TxErrorMessages.TxMissingTo; + error = TxErrorMessages.NotAllowedCreateTransaction; return false; } @@ -313,22 +308,26 @@ private static bool Validate4844Fields(Transaction transaction, ref string? erro return true; } - private bool ValidateAuthorityList(Transaction tx, ref string error) + private bool Validate7702(Transaction tx, ref string error) { if (tx.Type != TxType.SetCode) { - if (tx.AuthorizationList is not null) - { - error = TxErrorMessages.NotAllowedAuthorizationList; - return false; - } + if (tx.AuthorizationList is null) + return true; + error = TxErrorMessages.NotAllowedAuthorizationList; + return false; + } + if (tx.IsContractCreation) + { + error = TxErrorMessages.NotAllowedCreateTransaction; + return false; } - else if (tx.AuthorizationList is null || tx.AuthorizationList.Length == 0) + if (tx.AuthorizationList is null || tx.AuthorizationList.Length == 0) { error = TxErrorMessages.MissingAuthorizationList; return false; } - else if (tx.AuthorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature))) + if (tx.AuthorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature))) { error = TxErrorMessages.InvalidAuthoritySignature; return false; From 189e5662b8adb378b5a3dc01ac98d1186bc2dea0 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 12 Sep 2024 14:08:55 +0200 Subject: [PATCH 356/551] fix chainid (cherry picked from commit caed2f30ebce2777cf4610225c09d4040a7faa04) --- src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs index a68a01b0237..ac2ada7113e 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs @@ -74,7 +74,7 @@ protected virtual Task InitBlockchain() IStateReader stateReader = setApi.StateReader!; PreBlockCaches? preBlockCaches = (_api.WorldState as IPreBlockCaches)?.Caches; - CodeInfoRepository codeInfoRepository = new(1, preBlockCaches?.PrecompileCache); + CodeInfoRepository codeInfoRepository = new(_api.SpecProvider!.ChainId, preBlockCaches?.PrecompileCache); ITxPool txPool = _api.TxPool = CreateTxPool(_api.WorldState!, codeInfoRepository); ReceiptCanonicalityMonitor receiptCanonicalityMonitor = new(getApi.ReceiptStorage, _api.LogManager); From 0f388d130b0568c171a039d8d5f65ce75cc454ed Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 12 Sep 2024 14:58:58 +0200 Subject: [PATCH 357/551] revert temp path too long fix (cherry picked from commit bb7c803b4ca7458e9d08ca9d667b634f9588fc81) --- .../Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs index 198df85723e..ee879258d11 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs @@ -20,7 +20,7 @@ public class LoadPyspecTestsStrategy : ITestLoadStrategy public IEnumerable Load(string testsDir, string wildcard = null) { - string testsDirectoryName = Path.Combine("C:/", ArchiveName.Split('.')[0]); + string testsDirectoryName = Path.Combine(AppContext.BaseDirectory, "PyTests", ArchiveVersion, ArchiveName.Split('.')[0]); if (!Directory.Exists(testsDirectoryName)) // Prevent redownloading the fixtures if they already exists with this version and archive name DownloadAndExtract(ArchiveVersion, ArchiveName, testsDirectoryName); bool isStateTest = testsDir.Contains("state_tests", StringComparison.InvariantCultureIgnoreCase); From c938923322ab936963a079c5a537fbf7b7af0361 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Mon, 16 Sep 2024 19:00:12 +0200 Subject: [PATCH 358/551] small refactors --- .../Nethermind.Runner/Properties/launchSettings.json | 2 +- src/Nethermind/Nethermind.Runner/configs/volta.cfg | 1 - .../ConsensusRequestDecoder.cs | 2 +- .../Nethermind.Serialization.Rlp/HeaderDecoder.cs | 2 +- src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs | 2 +- .../WithdrawalRequestDecoder.cs | 10 +++++----- .../Nethermind.Specs.Test/OverridableReleaseSpec.cs | 2 -- .../ChainSpecStyle/ChainSpecLoader.cs | 11 ++++------- .../Nethermind.State/Proofs/RequestsTrie.cs | 8 ++------ src/Nethermind/Nethermind.Trie/PatriciaTree.cs | 2 +- 10 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json index c4f8094122a..3db3149a77d 100644 --- a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json +++ b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json @@ -28,7 +28,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" } }, - "Gnosis": { + "Gnosis": { "commandName": "Project", "commandLineArgs": "-c gnosis -dd .data", "environmentVariables": { diff --git a/src/Nethermind/Nethermind.Runner/configs/volta.cfg b/src/Nethermind/Nethermind.Runner/configs/volta.cfg index 7e182e8a9c9..0554cf082e6 100644 --- a/src/Nethermind/Nethermind.Runner/configs/volta.cfg +++ b/src/Nethermind/Nethermind.Runner/configs/volta.cfg @@ -34,4 +34,3 @@ "Enabled": false } } - diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs index be65abbeb8d..e06c135bd9b 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs @@ -9,7 +9,7 @@ namespace Nethermind.Serialization.Rlp; public class ConsensusRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder { private readonly WithdrawalRequestDecoder _withdrawalRequestDecoder = new(); - private readonly DepositDecoder _depositDecoder = new(); + private readonly DepositDecoder _depositDecoder = DepositDecoder.Instance; public int GetContentLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) { int length = item.Type switch diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index 64353dfa7c5..98dce2b0610 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -73,7 +73,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder 0 && decoderContext.PeekPrefixAndContentLength().ContentLength == Hash256.Size) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs index 8859089addb..c89263e5ba1 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs @@ -1572,7 +1572,7 @@ public T[] DecodeArray(IRlpValueDecoder? decoder = null, bool checkPositio } } int positionCheck = ReadSequenceLength() + Position; - int count = PeekNumberOfItemsRemaining(checkPositions ? positionCheck : (int?)null); + int count = PeekNumberOfItemsRemaining(checkPositions ? positionCheck : null); T[] result = new T[count]; for (int i = 0; i < result.Length; i++) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs index 900d1507250..4a0de9f3288 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs @@ -18,12 +18,12 @@ public int GetContentLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) = public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - int _ = rlpStream.ReadSequenceLength(); + _ = rlpStream.ReadSequenceLength(); Address sourceAddress = rlpStream.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); byte[] validatorPubkey = rlpStream.DecodeByteArray(); ulong amount = rlpStream.DecodeULong(); - return new WithdrawalRequest() + return new WithdrawalRequest { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey, @@ -33,12 +33,12 @@ public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { - int _ = decoderContext.ReadSequenceLength(); + _ = decoderContext.ReadSequenceLength(); Address sourceAddress = decoderContext.DecodeAddress(); ArgumentNullException.ThrowIfNull(sourceAddress); byte[] validatorPubkey = decoderContext.DecodeByteArray(); ulong amount = decoderContext.DecodeULong(); - return new WithdrawalRequest() + return new WithdrawalRequest { SourceAddress = sourceAddress, ValidatorPubkey = validatorPubkey, @@ -51,7 +51,7 @@ public void Encode(RlpStream stream, WithdrawalRequest item, RlpBehaviors rlpBeh int contentLength = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.SourceAddress); - stream.Encode(item.ValidatorPubkey); + stream.Encode(item.ValidatorPubkey!); stream.Encode(item.Amount); } diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index 322de3e3a82..d9f8df661e7 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -161,9 +161,7 @@ public ulong Eip4844TransitionTimestamp public UInt256 ForkBaseFee => _spec.ForkBaseFee; public UInt256 BaseFeeMaxChangeDenominator => _spec.BaseFeeMaxChangeDenominator; public long ElasticityMultiplier => _spec.ElasticityMultiplier; - public bool IsEip6110Enabled => _spec.IsEip6110Enabled; - public Address DepositContractAddress => _spec.DepositContractAddress; } } diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index a7274d9319c..8fbda844952 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -424,7 +424,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec if (withdrawalsEnabled) genesisHeader.WithdrawalsRoot = Keccak.EmptyTreeHash; - var requestsEnabled = depositsEnabled || withdrawalRequestsEnabled; + bool requestsEnabled = depositsEnabled || withdrawalRequestsEnabled; if (requestsEnabled) genesisHeader.RequestsRoot = Keccak.EmptyTreeHash; ; @@ -449,17 +449,14 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader.AuRaStep = step; genesisHeader.AuRaSignature = auRaSignature; - if (withdrawalsEnabled) - chainSpec.Genesis = new Block( + chainSpec.Genesis = !withdrawalsEnabled + ? new Block(genesisHeader) + : new Block( genesisHeader, Array.Empty(), Array.Empty(), Array.Empty(), requestsEnabled ? Array.Empty() : null); - else - { - chainSpec.Genesis = new Block(genesisHeader); - } } private static void LoadAllocations(ChainSpecJson chainSpecJson, ChainSpec chainSpec) diff --git a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs index 370e237c8bf..f33d484ef48 100644 --- a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs +++ b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs @@ -11,15 +11,11 @@ namespace Nethermind.State.Proofs; -public class RequestsTrie : PatriciaTrie +public class RequestsTrie(ConsensusRequest[]? requests, bool canBuildProof = false, ICappedArrayPool? bufferPool = null) + : PatriciaTrie(requests, canBuildProof, bufferPool) { private static readonly ConsensusRequestDecoder _codec = new(); - public RequestsTrie(ConsensusRequest[]? requests, bool canBuildProof = false, ICappedArrayPool? bufferPool = null) - : base(requests, canBuildProof, bufferPool) - { - } - protected override void Initialize(ConsensusRequest[] requests) { var key = 0; diff --git a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs index 32daed46b5d..3ab8c9d1127 100644 --- a/src/Nethermind/Nethermind.Trie/PatriciaTree.cs +++ b/src/Nethermind/Nethermind.Trie/PatriciaTree.cs @@ -1323,7 +1323,7 @@ public void Accept( // but we know that we have multiple optimizations and assumptions on trees ExpectAccounts = visitingOptions.ExpectAccounts, MaxDegreeOfParallelism = visitingOptions.MaxDegreeOfParallelism, - IsStorage = storageAddr != null + IsStorage = storageAddr is not null }; if (storageAddr is not null) From 291ba9b15dc10b2ee24c00c920645bed821656bf Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Mon, 16 Sep 2024 23:40:58 +0200 Subject: [PATCH 359/551] more basic refactors and cleanups --- ...sts.TestAccountAbstractionRpcBlockchain.cs | 0 .../AuraBlockProcessorTests.cs | 2 +- .../AuRaContractGasLimitOverrideTests.cs | 5 +- .../Transactions/TxCertifierFilterTests.cs | 2 +- .../Processing/BlockProcessor.cs | 2 +- .../Requests/ConsensusRequestsProcessor.cs | 22 ++++----- .../Requests/DepositsProcessor.cs | 46 ++++++++++------- .../Requests/IConsensusRequestsProcessor.cs | 2 +- .../Requests/IWithdrawalRequestsProcessor.cs | 2 +- .../Requests/WithdrawalRequestsProcessor.cs | 49 ++++++++++--------- .../Validators/BlockValidator.cs | 41 +++++++--------- src/Nethermind/Nethermind.Core/Withdrawal.cs | 1 - .../Nethermind.Evm.Test/InvalidOpcodeTests.cs | 1 - src/Nethermind/Nethermind.Evm/EvmStack.cs | 5 +- .../ITransactionProcessor.cs | 1 + .../SimulateReadOnlyBlocksProcessingEnv.cs | 3 +- .../ConsensusRequestsProcessorMock.cs | 2 +- .../Data/ExecutionPayload.cs | 2 +- .../Handlers/GetPayloadHandlerBase.cs | 28 +++++------ .../Handlers/GetPayloadV2Handler.cs | 11 ++--- .../Handlers/GetPayloadV3Handler.cs | 20 +++----- .../Handlers/GetPayloadV4Handler.cs | 16 +++--- .../InvalidBlockInterceptor.cs | 45 +++++------------ .../MevRpcModuleTests.TestMevRpcBlockchain.cs | 0 .../Messages/BlockBodiesMessageSerializer.cs | 38 ++++---------- 25 files changed, 145 insertions(+), 201 deletions(-) delete mode 100644 src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs delete mode 100644 src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs diff --git a/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs b/src/Nethermind/Nethermind.AccountAbstraction.Test/AccountAbstractionRpcModuleTests.TestAccountAbstractionRpcBlockchain.cs deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs index 5b885066c59..5ca0f63f74d 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/AuraBlockProcessorTests.cs @@ -163,7 +163,7 @@ void Process(AuRaBlockProcessor auRaBlockProcessor, int blockNumber, Hash256 sta Substitute.For(), new WithdrawalProcessor(stateProvider, LimboLogs.Instance), transactionProcessor, - null, + auRaValidator: null, txFilter, contractRewriter: contractRewriter); diff --git a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs index 23d71caed93..bcbe3b8be48 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Contract/AuRaContractGasLimitOverrideTests.cs @@ -102,9 +102,8 @@ protected override BlockProcessor CreateBlockProcessor() BlockTree, NullWithdrawalProcessor.Instance, TxProcessor, - null, - null, - GasLimitCalculator as AuRaContractGasLimitOverride, + auRaValidator: null, + gasLimitOverride: GasLimitCalculator as AuRaContractGasLimitOverride, preWarmer: CreateBlockCachePreWarmer()); } diff --git a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs index f94d1c372a0..c754ce285f8 100644 --- a/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs +++ b/src/Nethermind/Nethermind.AuRa.Test/Transactions/TxCertifierFilterTests.cs @@ -159,7 +159,7 @@ protected override BlockProcessor CreateBlockProcessor() BlockTree, NullWithdrawalProcessor.Instance, TxProcessor, - null, + auRaValidator: null, preWarmer: CreateBlockCachePreWarmer()); } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index ece10030cdf..114ccb31067 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -273,7 +273,7 @@ protected virtual TxReceipt[] ProcessBlock( block.Header.ReceiptsRoot = _receiptsRootCalculator.GetReceiptsRoot(receipts, spec, block.ReceiptsRoot); ApplyMinerRewards(block, blockTracer, spec); _withdrawalProcessor.ProcessWithdrawals(block, spec); - _consensusRequestsProcessor.ProcessRequests(spec, _stateProvider, block, receipts); + _consensusRequestsProcessor.ProcessRequests(block, _stateProvider, receipts, spec); ReceiptsTracer.EndBlockTrace(); diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 9e7bcb54b22..d44a33466a1 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -19,19 +19,19 @@ public class ConsensusRequestsProcessor(ITransactionProcessor transactionProcess private readonly WithdrawalRequestsProcessor _withdrawalRequestsProcessor = new(transactionProcessor); private readonly IDepositsProcessor _depositsProcessor = new DepositsProcessor(); - public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) + public void ProcessRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) { - if (!spec.DepositsEnabled && !spec.WithdrawalRequestsEnabled) - return; + if (spec.DepositsEnabled || spec.WithdrawalRequestsEnabled) + { + using ArrayPoolList requestsList = new(receipts.Length * 2); - using ArrayPoolList requestsList = new(receipts.Length * 2); + requestsList.AddRange(_depositsProcessor.ProcessDeposits(block, receipts, spec)); + requestsList.AddRange(_withdrawalRequestsProcessor.ReadWithdrawalRequests(block, state, spec)); - requestsList.AddRange(_depositsProcessor.ProcessDeposits(block, receipts, spec)); - requestsList.AddRange(_withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, state, block)); - - ConsensusRequest[] requests = requestsList.ToArray(); - Hash256 root = new RequestsTrie(requests).RootHash; - block.Body.Requests = requests; - block.Header.RequestsRoot = root; + ConsensusRequest[] requests = requestsList.ToArray(); + Hash256 root = new RequestsTrie(requests).RootHash; + block.Body.Requests = requests; + block.Header.RequestsRoot = root; + } } } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 7d6ec11b03e..307d88e402c 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -12,36 +12,44 @@ namespace Nethermind.Consensus.Requests; public class DepositsProcessor : IDepositsProcessor { - private AbiSignature depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); - AbiEncoder abiEncoder = new(); + private readonly AbiSignature _depositEventAbi = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); + private readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { if (!spec.DepositsEnabled) + { yield break; + } + for (int i = 0; i < receipts.Length; i++) { LogEntry[]? logEntries = receipts[i].Logs; - if (logEntries is null) - continue; - for (int index = 0; index < logEntries.Length; index++) + if (logEntries is not null) { - LogEntry log = logEntries[index]; - if (log.LoggersAddress != spec.DepositContractAddress) - continue; - object[] result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, log.Data); - - var newDeposit = new Deposit() + for (var j = 0; j < logEntries.Length; j++) { - Pubkey = (byte[])result[0], - WithdrawalCredentials = (byte[])result[1], - Amount = BitConverter.ToUInt64((byte[])result[2], 0), - Signature = (byte[])result[3], - Index = BitConverter.ToUInt64((byte[])result[4], 0) - }; - - yield return newDeposit; + LogEntry log = logEntries[j]; + if (log.LoggersAddress == spec.DepositContractAddress) + { + yield return DecodeDeposit(log); + } + } } } + + Deposit DecodeDeposit(LogEntry log) + { + object[] result = _abiEncoder.Decode(AbiEncodingStyle.None, _depositEventAbi, log.Data); + + return new Deposit + { + Pubkey = (byte[])result[0], + WithdrawalCredentials = (byte[])result[1], + Amount = BitConverter.ToUInt64((byte[])result[2], 0), + Signature = (byte[])result[3], + Index = BitConverter.ToUInt64((byte[])result[4], 0) + }; + } } } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs index 01ed8f37278..00ead1e8647 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs @@ -9,5 +9,5 @@ namespace Nethermind.Consensus.Requests; public interface IConsensusRequestsProcessor { - void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts); + void ProcessRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs index af378131da4..ba396ed1441 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs @@ -11,5 +11,5 @@ namespace Nethermind.Consensus.Requests; public interface IWithdrawalRequestsProcessor { - IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state, Block block); + IEnumerable ReadWithdrawalRequests(Block block, IWorldState state, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index ecb931d357f..564f2573f5d 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -23,19 +23,37 @@ namespace Nethermind.Consensus.Requests; public class WithdrawalRequestsProcessor(ITransactionProcessor transactionProcessor) : IWithdrawalRequestsProcessor { private const long GasLimit = 30_000_000L; + private const int SizeOfClass = 20 + 48 + 8; - public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, IWorldState state, Block block) + public IEnumerable ReadWithdrawalRequests(Block block, IWorldState state, IReleaseSpec spec) { - if (!spec.IsEip7002Enabled) + if (!spec.IsEip7002Enabled || !state.AccountExists(spec.Eip7002ContractAddress)) + { yield break; + } - Address eip7002Account = spec.Eip7002ContractAddress; - if (!state.AccountExists(eip7002Account)) - yield break; + byte[]? result = ExecuteTransaction(block, spec); + if (result?.Length > 0) + { + int count = result.Length / SizeOfClass; + for (int i = 0; i < count; ++i) + { + Memory memory = result.AsMemory(i * SizeOfClass, SizeOfClass); + WithdrawalRequest request = new() + { + SourceAddress = new Address(memory.Slice(0, 20).AsArray()), + ValidatorPubkey = memory.Slice(20, 48), + Amount = BinaryPrimitives.ReadUInt64BigEndian(memory.Slice(68, 8).Span) + }; + yield return request; + } + } + } + private byte[]? ExecuteTransaction(Block block, IReleaseSpec spec) + { CallOutputTracer tracer = new(); - - Transaction? transaction = new() + Transaction transaction = new() { Value = UInt256.Zero, Data = Array.Empty(), @@ -47,22 +65,7 @@ public IEnumerable ReadWithdrawalRequests(IReleaseSpec spec, transaction.Hash = transaction.CalculateHash(); transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); - var result = tracer.ReturnValue; - if (result == null || result.Length == 0) - yield break; - int sizeOfClass = 20 + 48 + 8; - int count = result.Length / sizeOfClass; - for (int i = 0; i < count; ++i) - { - Memory memory = result.AsMemory(i * sizeOfClass, sizeOfClass); - WithdrawalRequest request = new() - { - SourceAddress = new Address(memory.Slice(0, 20).AsArray()), - ValidatorPubkey = memory.Slice(20, 48), - Amount = BinaryPrimitives.ReadUInt64BigEndian(memory.Slice(68, 8).Span) - }; - yield return request; - } + return tracer.ReturnValue; } } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index d9aa2e9c3a3..3307e1e0242 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -35,25 +35,17 @@ public class BlockValidator( private readonly ISpecProvider _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); private readonly ILogger _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); - public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle) - { - return _headerValidator.Validate(header, parent, isUncle, out _); - } + public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle) => + _headerValidator.Validate(header, parent, isUncle, out _); - public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle, out string? error) - { - return _headerValidator.Validate(header, parent, isUncle, out error); - } + public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle, out string? error) => + _headerValidator.Validate(header, parent, isUncle, out error); - public bool Validate(BlockHeader header, bool isUncle) - { - return _headerValidator.Validate(header, isUncle, out _); - } + public bool Validate(BlockHeader header, bool isUncle) => + _headerValidator.Validate(header, isUncle, out _); - public bool Validate(BlockHeader header, bool isUncle, out string? error) - { - return _headerValidator.Validate(header, isUncle, out error); - } + public bool Validate(BlockHeader header, bool isUncle, out string? error) => + _headerValidator.Validate(header, isUncle, out error); /// /// Applies to blocks without parent @@ -80,10 +72,7 @@ public bool ValidateOrphanedBlock(Block block, out string? error) /// /// true if the is valid; otherwise, false. /// - public bool ValidateSuggestedBlock(Block block) - { - return ValidateSuggestedBlock(block, out _); - } + public bool ValidateSuggestedBlock(Block block) => ValidateSuggestedBlock(block, out _); /// /// Suggested block validation runs basic checks that can be executed before going through the expensive EVM processing. @@ -99,10 +88,14 @@ public bool ValidateSuggestedBlock(Block block, out string? errorMessage, bool v IReleaseSpec spec = _specProvider.GetSpec(block.Header); if (!ValidateTransactions(block, spec, out errorMessage)) + { return false; + } if (!ValidateEip4844Fields(block, spec, out errorMessage)) + { return false; + } if (spec.MaximumUncleCount < block.Uncles.Length) { @@ -147,7 +140,9 @@ public bool ValidateSuggestedBlock(Block block, out string? errorMessage, bool v } if (!ValidateRequests(block, spec, out errorMessage)) + { return false; + } } return true; @@ -161,10 +156,8 @@ public bool ValidateSuggestedBlock(Block block, out string? errorMessage, bool v /// List of tx receipts from the processed block (required only for better diagnostics when the receipt root is invalid). /// Block received from the network - unchanged. /// true if the is valid; otherwise, false. - public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) - { - return ValidateProcessedBlock(processedBlock, receipts, suggestedBlock, out _); - } + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock) => + ValidateProcessedBlock(processedBlock, receipts, suggestedBlock, out _); /// /// Processed block validation is comparing the block hashes (which include all other results). diff --git a/src/Nethermind/Nethermind.Core/Withdrawal.cs b/src/Nethermind/Nethermind.Core/Withdrawal.cs index daaaeafb4af..13741586406 100644 --- a/src/Nethermind/Nethermind.Core/Withdrawal.cs +++ b/src/Nethermind/Nethermind.Core/Withdrawal.cs @@ -45,4 +45,3 @@ public class Withdrawal .Append($"{nameof(AmountInGwei)}: {AmountInGwei}}}") .ToString(); } - diff --git a/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs b/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs index bbba90f37f4..59844dba4c0 100644 --- a/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/InvalidOpcodeTests.cs @@ -112,7 +112,6 @@ public class InvalidOpcodeTests : VirtualMachineTestsBase } ).ToArray(); - private readonly Dictionary _validOpcodes = new() { diff --git a/src/Nethermind/Nethermind.Evm/EvmStack.cs b/src/Nethermind/Nethermind.Evm/EvmStack.cs index 0af3abc94d3..ef6dc068bde 100644 --- a/src/Nethermind/Nethermind.Evm/EvmStack.cs +++ b/src/Nethermind/Nethermind.Evm/EvmStack.cs @@ -310,10 +310,7 @@ public readonly Span PeekWord256() return _bytes.Slice(head * WordSize, WordSize); } - public Address? PopAddress() - { - return Head-- == 0 ? null : new Address(_bytes.Slice(Head * WordSize + WordSize - AddressSize, AddressSize).ToArray()); - } + public Address? PopAddress() => Head-- == 0 ? null : new Address(_bytes.Slice(Head * WordSize + WordSize - AddressSize, AddressSize).ToArray()); public ref byte PopBytesByRef() { diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs index 9829c66f564..96ac8e27948 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs @@ -5,6 +5,7 @@ using Nethermind.Evm.Tracing; namespace Nethermind.Evm.TransactionProcessing; + public interface ITransactionProcessor { /// diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs index 159c74cd8c9..5196c1850ac 100644 --- a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs @@ -33,8 +33,7 @@ public class SimulateBlockValidationTransactionsExecutor( protected override BlockExecutionContext CreateBlockExecutionContext(Block block) => blobBaseFeeOverride is not null ? new BlockExecutionContext(block.Header, blobBaseFeeOverride.Value) : base.CreateBlockExecutionContext(block); - protected override void ProcessTransaction(in BlockExecutionContext blkCtx, Transaction currentTx, int index, - BlockReceiptsTracer receiptsTracer, ProcessingOptions processingOptions) + protected override void ProcessTransaction(in BlockExecutionContext blkCtx, Transaction currentTx, int index, BlockReceiptsTracer receiptsTracer, ProcessingOptions processingOptions) { if (!validate) { diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs index 14195d675ea..8f5eeee5c7e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs @@ -23,7 +23,7 @@ public class ConsensusRequestsProcessorMock : IConsensusRequestsProcessor TestItem.WithdrawalRequestB ]; - public void ProcessRequests(IReleaseSpec spec, IWorldState state, Block block, TxReceipt[] receipts) + public void ProcessRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) { if (block.IsGenesis) return; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index 9d45543fb9a..aeb2bda72fd 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -232,7 +232,7 @@ public ValidationResult ValidateParams(IReleaseSpec spec, int version, out strin return ValidationResult.Fail; } - var actualVersion = GetExecutionPayloadVersion(); + int actualVersion = GetExecutionPayloadVersion(); error = actualVersion switch { diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadHandlerBase.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadHandlerBase.cs index a42f88b2715..f658b2c215c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadHandlerBase.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadHandlerBase.cs @@ -11,26 +11,20 @@ namespace Nethermind.Merge.Plugin.Handlers; -public abstract class GetPayloadHandlerBase : IAsyncHandler where TGetPayloadResult : IForkValidator +public abstract class GetPayloadHandlerBase( + int apiVersion, + IPayloadPreparationService payloadPreparationService, + ISpecProvider specProvider, + ILogManager logManager) + : IAsyncHandler + where TGetPayloadResult : IForkValidator { - private readonly int _apiVersion; - private readonly IPayloadPreparationService _payloadPreparationService; - private readonly ISpecProvider _specProvider; - private readonly ILogger _logger; - - protected GetPayloadHandlerBase(int apiVersion, IPayloadPreparationService payloadPreparationService, - ISpecProvider specProvider, ILogManager logManager) - { - _apiVersion = apiVersion; - _payloadPreparationService = payloadPreparationService; - _specProvider = specProvider; - _logger = logManager.GetClassLogger(); - } + private readonly ILogger _logger = logManager.GetClassLogger(); public async Task> HandleAsync(byte[] payloadId) { string payloadStr = payloadId.ToHexString(true); - IBlockProductionContext? blockContext = await _payloadPreparationService.GetPayload(payloadStr); + IBlockProductionContext? blockContext = await payloadPreparationService.GetPayload(payloadStr); Block? block = blockContext?.CurrentBestBlock; if (blockContext is null || block is null) @@ -42,13 +36,13 @@ protected GetPayloadHandlerBase(int apiVersion, IPayloadPreparationService paylo TGetPayloadResult getPayloadResult = GetPayloadResultFromBlock(blockContext); - if (!getPayloadResult.ValidateFork(_specProvider)) + if (!getPayloadResult.ValidateFork(specProvider)) { if (_logger.IsWarn) _logger.Warn($"The payload is not supported by the current fork"); return ResultWrapper.Fail("unsupported fork", MergeErrorCodes.UnsupportedFork); } - if (_logger.IsInfo) _logger.Info($"GetPayloadV{_apiVersion} result: {block.Header.ToString(BlockHeader.Format.Full)}."); + if (_logger.IsInfo) _logger.Info($"GetPayloadV{apiVersion} result: {block.Header.ToString(BlockHeader.Format.Full)}."); Metrics.GetPayloadRequests++; Metrics.NumberOfTransactionsInGetPayload = block.Transactions.Length; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV2Handler.cs index 1fd7b21355b..6d2bdc932b5 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV2Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV2Handler.cs @@ -12,13 +12,12 @@ namespace Nethermind.Merge.Plugin.Handlers; /// /// engine_getpayloadv2. /// -public class GetPayloadV2Handler : GetPayloadHandlerBase +public class GetPayloadV2Handler( + IPayloadPreparationService payloadPreparationService, + ISpecProvider specProvider, + ILogManager logManager) + : GetPayloadHandlerBase(2, payloadPreparationService, specProvider, logManager) { - public GetPayloadV2Handler(IPayloadPreparationService payloadPreparationService, ISpecProvider specProvider, ILogManager logManager) : base( - 2, payloadPreparationService, specProvider, logManager) - { - } - protected override GetPayloadV2Result GetPayloadResultFromBlock(IBlockProductionContext context) => new(context.CurrentBestBlock!, context.BlockFees); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV3Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV3Handler.cs index 53f52a3187a..4d0a2f727ba 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV3Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV3Handler.cs @@ -14,24 +14,18 @@ namespace Nethermind.Merge.Plugin.Handlers; /// /// engine_getpayloadv3 /// -public class GetPayloadV3Handler : GetPayloadHandlerBase +public class GetPayloadV3Handler( + IPayloadPreparationService payloadPreparationService, + ISpecProvider specProvider, + ILogManager logManager, + CensorshipDetector? censorshipDetector = null) + : GetPayloadHandlerBase(3, payloadPreparationService, specProvider, logManager) { - private readonly CensorshipDetector? _censorshipDetector; - public GetPayloadV3Handler( - IPayloadPreparationService payloadPreparationService, - ISpecProvider specProvider, - ILogManager logManager, - CensorshipDetector? censorshipDetector = null) : base( - 3, payloadPreparationService, specProvider, logManager) - { - _censorshipDetector = censorshipDetector; - } - protected override GetPayloadV3Result GetPayloadResultFromBlock(IBlockProductionContext context) { return new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!)) { - ShouldOverrideBuilder = _censorshipDetector?.GetCensoredBlocks().Contains(new BlockNumberHash(context.CurrentBestBlock!)) ?? false + ShouldOverrideBuilder = censorshipDetector?.GetCensoredBlocks().Contains(new BlockNumberHash(context.CurrentBestBlock!)) ?? false }; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs index 648737f34b0..94a16c9ff70 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs @@ -14,20 +14,18 @@ namespace Nethermind.Merge.Plugin.Handlers; /// /// engine_getpayloadv3 /// -public class GetPayloadV4Handler : GetPayloadHandlerBase +public class GetPayloadV4Handler( + IPayloadPreparationService payloadPreparationService, + ISpecProvider specProvider, + ILogManager logManager, + CensorshipDetector? censorshipDetector = null) + : GetPayloadHandlerBase(4, payloadPreparationService, specProvider, logManager) { - private readonly CensorshipDetector? _censorshipDetector; - public GetPayloadV4Handler(IPayloadPreparationService payloadPreparationService, ISpecProvider specProvider, ILogManager logManager, CensorshipDetector? censorshipDetector = null) : base( - 4, payloadPreparationService, specProvider, logManager) - { - _censorshipDetector = censorshipDetector; - } - protected override GetPayloadV4Result GetPayloadResultFromBlock(IBlockProductionContext context) { return new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!)) { - ShouldOverrideBuilder = _censorshipDetector?.GetCensoredBlocks().Contains(new BlockNumberHash(context.CurrentBestBlock!)) ?? false + ShouldOverrideBuilder = censorshipDetector?.GetCensoredBlocks().Contains(new BlockNumberHash(context.CurrentBestBlock!)) ?? false }; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs index d3ae6bfd5fb..7c62b158219 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs @@ -18,10 +18,8 @@ public class InvalidBlockInterceptor( public bool ValidateOrphanedBlock(Block block, [NotNullWhen(false)] out string? error) => headerValidator.ValidateOrphanedBlock(block, out error); - public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle = false) - { - return Validate(header, parent, isUncle, out _); - } + public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle = false) => Validate(header, parent, isUncle, out _); + public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle, [NotNullWhen(false)] out string? error) { bool result = headerValidator.Validate(header, parent, isUncle, out error); @@ -39,10 +37,7 @@ public bool Validate(BlockHeader header, BlockHeader? parent, bool isUncle, [Not return result; } - public bool Validate(BlockHeader header, bool isUncle = false) - { - return Validate(header, isUncle, out _); - } + public bool Validate(BlockHeader header, bool isUncle = false) => Validate(header, isUncle, out _); public bool Validate(BlockHeader header, bool isUncle, [NotNullWhen(false)] out string? error) { @@ -78,10 +73,8 @@ public bool ValidateSuggestedBlock(Block block, [NotNullWhen(false)] out string? return result; } - public bool ValidateProcessedBlock(Block block, TxReceipt[] receipts, Block suggestedBlock) - { - return ValidateProcessedBlock(block, receipts, suggestedBlock, out _); - } + public bool ValidateProcessedBlock(Block block, TxReceipt[] receipts, Block suggestedBlock) => ValidateProcessedBlock(block, receipts, suggestedBlock, out _); + public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, Block suggestedBlock, [NotNullWhen(false)] out string? error) { bool result = headerValidator.ValidateProcessedBlock(processedBlock, receipts, suggestedBlock, out error); @@ -100,10 +93,7 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B return result; } - private static bool ShouldNotTrackInvalidation(BlockHeader header) - { - return !HeaderValidator.ValidateHash(header); - } + private static bool ShouldNotTrackInvalidation(BlockHeader header) => !HeaderValidator.ValidateHash(header); public bool ValidateWithdrawals(Block block, out string? error) { @@ -128,22 +118,11 @@ public bool ValidateWithdrawals(Block block, out string? error) return result; } - private static bool ShouldNotTrackInvalidation(Block block) - { - if (ShouldNotTrackInvalidation(block.Header)) - return true; - + private static bool ShouldNotTrackInvalidation(Block block) => + ShouldNotTrackInvalidation(block.Header) || // Body does not match header, but it does not mean the hash that the header point to is invalid. - if (!BlockValidator.ValidateTxRootMatchesTxs(block, out _)) - return true; - - if (!BlockValidator.ValidateUnclesHashMatches(block, out _)) - return true; - - if (!BlockValidator.ValidateWithdrawalsHashMatches(block, out _)) - return true; - - return !BlockValidator.ValidateRequestsHashMatches(block, out _); - } - + !BlockValidator.ValidateTxRootMatchesTxs(block, out _) || + !BlockValidator.ValidateUnclesHashMatches(block, out _) || + !BlockValidator.ValidateWithdrawalsHashMatches(block, out _) || + !BlockValidator.ValidateRequestsHashMatches(block, out _); } diff --git a/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs b/src/Nethermind/Nethermind.Mev.Test/MevRpcModuleTests.TestMevRpcBlockchain.cs deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index e050302d37d..65fd4af43d8 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -12,7 +12,7 @@ namespace Nethermind.Network.P2P.Subprotocols.Eth.V62.Messages { public class BlockBodiesMessageSerializer : IZeroInnerMessageSerializer { - private readonly BlockBodyDecoder _blockBodyDecoder = new BlockBodyDecoder(); + private readonly BlockBodyDecoder _blockBodyDecoder = new(); public void Serialize(IByteBuffer byteBuffer, BlockBodiesMessage message) { @@ -66,37 +66,19 @@ public int GetLength(BlockBody item, RlpBehaviors rlpBehaviors) return Rlp.LengthOfSequence(GetBodyLength(item)); } - public int GetBodyLength(BlockBody b) - { - return Rlp.LengthOfSequence(GetTxLength(b.Transactions)) + - Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)) - + (b.Withdrawals is not null - ? Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)) - : 0) - + (b.Requests is not null - ? Rlp.LengthOfSequence(GetRequestsLength(b.Requests)) - : 0); - } + public int GetBodyLength(BlockBody b) => + Rlp.LengthOfSequence(GetTxLength(b.Transactions)) + + Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)) + + (b.Withdrawals is not null ? Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)) : 0) + + (b.Requests is not null ? Rlp.LengthOfSequence(GetRequestsLength(b.Requests)) : 0); - private int GetTxLength(Transaction[] transactions) - { - return transactions.Sum(t => _txDecoder.GetLength(t, RlpBehaviors.None)); - } + private int GetTxLength(Transaction[] transactions) => transactions.Sum(t => _txDecoder.GetLength(t, RlpBehaviors.None)); - private int GetUnclesLength(BlockHeader[] headers) - { - return headers.Sum(t => _headerDecoder.GetLength(t, RlpBehaviors.None)); - } + private int GetUnclesLength(BlockHeader[] headers) => headers.Sum(t => _headerDecoder.GetLength(t, RlpBehaviors.None)); - private int GetWithdrawalsLength(Withdrawal[] withdrawals) - { - return withdrawals.Sum(t => _withdrawalDecoderDecoder.GetLength(t, RlpBehaviors.None)); - } + private int GetWithdrawalsLength(Withdrawal[] withdrawals) => withdrawals.Sum(t => _withdrawalDecoderDecoder.GetLength(t, RlpBehaviors.None)); - private int GetRequestsLength(ConsensusRequest[] requests) - { - return requests.Sum(t => _requestsDecoder.GetLength(t, RlpBehaviors.None)); - } + private int GetRequestsLength(ConsensusRequest[] requests) => requests.Sum(t => _requestsDecoder.GetLength(t, RlpBehaviors.None)); public BlockBody? Decode(ref Rlp.ValueDecoderContext ctx, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { From a0dbd21c245c755752442d28b3eef304f76a2369 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 17 Sep 2024 15:36:24 +0200 Subject: [PATCH 360/551] Solving errors --- .../Producers/DevBlockproducerTests.cs | 1 - .../Messages/TxErrorMessages.cs | 2 + .../Validators/BlockValidator.cs | 59 ------------------- .../TransactionProcessor.cs | 2 +- .../SimulateReadOnlyBlocksProcessingEnv.cs | 1 - .../Handlers/EngineRpcCapabilitiesProvider.cs | 8 +-- 6 files changed, 7 insertions(+), 66 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs index aa0d4a0f965..75bd5a9a1a6 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs @@ -81,7 +81,6 @@ public void Test() txProcessor, new BeaconBlockRootHandler(txProcessor), new BlockhashStore(specProvider, stateProvider), - txProcessor, LimboLogs.Instance); BlockchainProcessor blockchainProcessor = new( blockTree, diff --git a/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs index af840ad0244..2a8082895ff 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/TxErrorMessages.cs @@ -16,6 +16,8 @@ public static string InvalidTxType(string name) => $"InvalidTxType: Transaction type in {name} is not supported."; public const string IntrinsicGasTooLow = "IntrinsicGasTooLow: Gas limit is too low."; + public const string TxMissingTo = + "TxMissingTo: Must be set."; public const string InvalidTxSignature = "InvalidTxSignature: Signature is invalid."; diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index acbe87e9fab..f6e89a309cf 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -349,65 +349,6 @@ public static bool ValidateRequestsOrder(Block block, out string? error) return true; } - public bool ValidateRequests(Block block, out string? error) => - ValidateRequests(block, _specProvider.GetSpec(block.Header), out error); - - public bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) - { - if (spec.ConsensusRequestsEnabled && block.Requests is null) - { - error = BlockErrorMessages.MissingRequests; - - if (_logger.IsWarn) _logger.Warn(error); - - return false; - } - - if (!spec.ConsensusRequestsEnabled && block.Requests is not null) - { - error = BlockErrorMessages.RequestsNotEnabled; - - if (_logger.IsWarn) _logger.Warn(error); - - return false; - } - - if (!ValidateRequestsHashMatches(block, out Hash256 requestsRoot)) - { - error = BlockErrorMessages.InvalidRequestsRoot(block.Header.RequestsRoot, requestsRoot); - if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.RequestsRoot}, got {requestsRoot}"); - - return false; - } - - // validate that the requests types are in ascending order - if (!ValidateRequestsOrder(block, out error)) - { - if (_logger.IsWarn) _logger.Warn(error); - return false; - } - - error = null; - return true; - } - - public static bool ValidateRequestsOrder(Block block, out string? error) - { - if (block.Requests is not null) - { - for (int i = 1; i < block.Requests.Length; i++) - { - if (block.Requests[i].Type < block.Requests[i - 1].Type) - { - error = BlockErrorMessages.InvalidRequestsOrder; - return false; - } - } - } - error = null; - return true; - } - private bool ValidateTransactions(Block block, IReleaseSpec spec, out string? errorMessage) { Transaction[] transactions = block.Transactions; diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index a4259926e07..0a593309370 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -179,7 +179,7 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon { if (!opts.HasFlag(ExecutionOptions.NoValidation)) WorldState.AddToBalance(tx.SenderAddress!, senderReservedGasPayment, spec); - WorldState.DecrementNonce(tx); + DecrementNonce(tx); WorldState.Commit(spec); } diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs index c8fae0eccf3..8c8ac9395d8 100644 --- a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs @@ -118,6 +118,5 @@ public IBlockProcessor GetProcessor(bool validate, UInt256? blobBaseFeeOverride) _transactionProcessor, new BeaconBlockRootHandler(_transactionProcessor), new BlockhashStore(SpecProvider, StateProvider), - _transactionProcessor, _logManager); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs index 43db3f006ce..57d1ab5f5bd 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs @@ -49,10 +49,10 @@ public EngineRpcCapabilitiesProvider(ISpecProvider specProvider) #endregion #region Prague - _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.ConsensusRequestsEnabled, spec.ConsensusRequestsEnabled); - _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.ConsensusRequestsEnabled, spec.ConsensusRequestsEnabled); - _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByHashV2)] = (spec.ConsensusRequestsEnabled, false); - _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByRangeV2)] = (spec.ConsensusRequestsEnabled, false); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.RequestsEnabled, spec.RequestsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.RequestsEnabled, spec.RequestsEnabled); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByHashV2)] = (spec.RequestsEnabled, false); + _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByRangeV2)] = (spec.RequestsEnabled, false); #endregion #region Prague From 7ec64d2fd1b63d4be57da18c3659da8ed3ecbb92 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 17 Sep 2024 15:41:43 +0200 Subject: [PATCH 361/551] Builds error solved --- .../Validators/TxValidatorTests.cs | 11 ++++++----- .../Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs | 1 - .../Nethermind.Consensus.Clique/CliquePlugin.cs | 1 - .../CensorshipDetectorTests.cs | 5 ++++- .../Requests/WithdrawalRequestsProcessor.cs | 1 - .../Nethermind.Core.Test/Blockchain/TestBlockchain.cs | 1 - 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 15069253a45..3d89816ad73 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -541,8 +541,9 @@ public void IsWellFormed_CreateTxInSetCodeFalse() Assert.Multiple(() => { - Assert.That(txValidator.IsWellFormed(tx, Prague.Instance, out string? error), Is.False); - Assert.That(error, Is.EqualTo(TxErrorMessages.NotAllowedCreateTransaction)); + ValidationResult validationResult = txValidator.IsWellFormed(tx, Prague.Instance); + Assert.That(validationResult.AsBool(), Is.False); + Assert.That(validationResult.Error, Is.EqualTo(TxErrorMessages.NotAllowedCreateTransaction)); }); } @@ -560,7 +561,7 @@ public void IsWellFormed_AuthorizationListTxInPragueSpec_ReturnsTrue() Transaction tx = txBuilder.TestObject; TxValidator txValidator = new(TestBlockchainIds.ChainId); - Assert.That(txValidator.IsWellFormed(tx, Prague.Instance, out _), Is.True); + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance), Is.True); } [Test] @@ -577,7 +578,7 @@ public void IsWellFormed_EmptyAuthorizationList_ReturnsFalse() Transaction tx = txBuilder.TestObject; TxValidator txValidator = new(TestBlockchainIds.ChainId); - Assert.That(txValidator.IsWellFormed(tx, Prague.Instance, out _), Is.False); + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance), Is.False); } [Test] @@ -594,7 +595,7 @@ public void IsWellFormed_NullAuthorizationList_ReturnsFalse() Transaction tx = txBuilder.TestObject; TxValidator txValidator = new(TestBlockchainIds.ChainId); - Assert.That(txValidator.IsWellFormed(tx, Prague.Instance, out _), Is.False); + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance), Is.False); } private static byte[] MakeArray(int count, params byte[] elements) => diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index f179c480472..22253956f3d 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -64,7 +64,6 @@ public AuRaBlockProcessor( transactionProcessor, beaconBlockRootHandler, new BlockhashStore(specProvider, stateProvider), - transactionProcessor, logManager, withdrawalProcessor, preWarmer: preWarmer, diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs index 1c1432223b7..9167e80f900 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliquePlugin.cs @@ -115,7 +115,6 @@ public IBlockProducer InitBlockProducer(ITxSource? additionalTxSource = null) getFromApi.TransactionProcessor, new BeaconBlockRootHandler(scope.TransactionProcessor), new BlockhashStore(getFromApi.SpecProvider, scope.WorldState), - getFromApi.TransactionProcessor, getFromApi.LogManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(scope.WorldState, getFromApi.LogManager))); diff --git a/src/Nethermind/Nethermind.Consensus.Test/CensorshipDetectorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/CensorshipDetectorTests.cs index 4e8ba989451..99dde3519db 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/CensorshipDetectorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/CensorshipDetectorTests.cs @@ -16,6 +16,7 @@ using Nethermind.Core.Test.Builders; using Nethermind.Crypto; using Nethermind.Db; +using Nethermind.Evm; using Nethermind.Logging; using Nethermind.Specs; using Nethermind.Specs.Forks; @@ -260,7 +261,9 @@ private TxPool.TxPool CreatePool(bool eip1559Enabled = true) new TxPoolConfig(), new TxValidator(_specProvider.ChainId), _logManager, - _comparer); + _comparer, + new CodeInfoRepository(BlockchainIds.Mainnet), + _stateProvider); } private void BlockProcessingWorkflow(Block block) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 393d2dd8764..b85d3f9d45f 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -13,7 +13,6 @@ using Nethermind.Evm.TransactionProcessing; using Nethermind.Int256; using Nethermind.State; -using System.Buffers.Binary; namespace Nethermind.Consensus.Requests; diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 8ff80e3fce2..5589918ccf0 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -8,7 +8,6 @@ using Nethermind.Blockchain; using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Blockchain.Blocks; -using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Blockchain.Find; using Nethermind.Blockchain.Headers; using Nethermind.Blockchain.Receipts; From 3e8726edc9b375fd00642e3905cb12745cb95f88 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 17 Sep 2024 16:23:22 +0200 Subject: [PATCH 362/551] fix build errors --- .../Requests/WithdrawalRequestsProcessor.cs | 1 + .../Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs | 3 +-- .../EngineModuleTests.HelperFunctions.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 048b69ba8ab..7e0ea40a9c8 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Evm; diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs index aef2ed8bee3..3696e5d2dd7 100644 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -70,7 +70,6 @@ public void Setup() [Test] public void ShouldProcessWithdrawalRequest() { - IReleaseSpec spec = Substitute.For(); spec.IsEip7002Enabled.Returns(true); spec.Eip7002ContractAddress.Returns(eip7002Account); @@ -86,7 +85,7 @@ public void ShouldProcessWithdrawalRequest() Amount = 0 }; - var withdrawalRequests = withdrawalRequestsProcessor.ReadWithdrawalRequests(spec, _stateProvider, block).ToList(); + var withdrawalRequests = withdrawalRequestsProcessor.ReadWithdrawalRequests(block, _stateProvider, spec).ToList(); Assert.That(withdrawalRequests, Has.Count.EqualTo(16)); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index 63bf7410ad6..f33f0a7dc1f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -148,7 +148,7 @@ private static ExecutionPayloadV4 CreateBlockRequestV4(MergeTestBlockchain chain var blockHashStore = new BlockhashStore(chain.SpecProvider, chain.State); blockHashStore.ApplyBlockhashStateChanges(block!.Header); - chain.ConsensusRequestsProcessor?.ProcessRequests(chain.SpecProvider.GenesisSpec, chain.State, block!, Array.Empty()); + chain.ConsensusRequestsProcessor?.ProcessRequests(block!, chain.State, Array.Empty(),chain.SpecProvider.GenesisSpec); chain.State.Commit(chain.SpecProvider.GenesisSpec); chain.State.RecalculateStateRoot(); From 0db830c0d38155bbaf6122c807c2942438a2e983 Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 17 Sep 2024 16:48:12 +0200 Subject: [PATCH 363/551] cherry pick missing from 7702 --- .../Validators/TxValidatorTests.cs | 2 +- .../CodeInfoRepositoryTests.cs | 224 +++++++++++++++++- .../TransactionProcessorEip7702Tests.cs | 100 +++++++- .../Nethermind.Evm/CodeInfoRepository.cs | 74 +++--- .../Eth/TransactionForRpc.cs | 2 +- .../Modules/Eth/EthRpcModuleTests.cs | 64 +++++ .../Nethermind.State.Test/StateReaderTests.cs | 109 +++++++++ .../Nethermind.TxPool.Test/TxPoolTests.cs | 2 +- 8 files changed, 530 insertions(+), 47 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 3d89816ad73..13b4febd3cd 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -525,7 +525,7 @@ public void IsWellFormed_BlobTxHasProofOverTheSizeLimit_ReturnFalse() } [Test] - public void IsWellFormed_CreateTxInSetCodeFalse() + public void IsWellFormed_CreateTxInSetCode_ReturnsFalse() { TransactionBuilder txBuilder = Build.A.Transaction .WithType(TxType.SetCode) diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 275ad8baa8f..f983cb7f204 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -20,7 +20,6 @@ using Nethermind.Core.Extensions; using Nethermind.Db; using Nethermind.Trie.Pruning; -using System.Diagnostics.Tracing; namespace Nethermind.Evm.Test; @@ -178,6 +177,229 @@ public void InsertFromAuthorizations_AuthorizationsHasOneExistingAccount_ResultH refunds.Should().Be(1); } + public static IEnumerable CountsAsAccessedCases() + { + yield return new object[] + { + new AuthorizationTuple[] + { + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), + }, + new Address[] + { + TestItem.AddressA, + TestItem.AddressB + } + }; + yield return new object[] + { + new AuthorizationTuple[] + { + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + CreateAuthorizationTuple(TestItem.PrivateKeyB, 2, TestItem.AddressF, 0), + }, + new Address[] + { + TestItem.AddressA, + } + }; + yield return new object[] + { + new AuthorizationTuple[] + { + CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + //Bad signature + new AuthorizationTuple(1, TestItem.AddressF, 0, new Signature(new byte[65]), TestItem.AddressA) + }, + new Address[] + { + TestItem.AddressA, + } + }; + } + + [TestCaseSource(nameof(CountsAsAccessedCases))] + public void InsertFromAuthorizations_TwoValidAuthorizations_(AuthorizationTuple[] tuples, Address[] shouldCountAsAccessed) + { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + CodeInfoRepository sut = new(1); + stateProvider.CreateAccount(TestItem.AddressA, 0); + + ISet
accessedAddresses = new HashSet
(); + sut.InsertFromAuthorizations(stateProvider, tuples, accessedAddresses, Substitute.For()); + + accessedAddresses.Count.Should().Be(shouldCountAsAccessed.Length); + accessedAddresses.Should().Contain(shouldCountAsAccessed); + } + + public static IEnumerable NotDelegationCodeCases() + { + byte[] rndAddress = new byte[20]; + TestContext.CurrentContext.Random.NextBytes(rndAddress); + //Change first byte of the delegation header + byte[] code = [.. Eip7702Constants.DelegationHeader, .. rndAddress]; + code[0] = TestContext.CurrentContext.Random.NextByte(0xee); + yield return new object[] + { + code + }; + //Change second byte of the delegation header + code = [.. Eip7702Constants.DelegationHeader, .. rndAddress]; + code[1] = TestContext.CurrentContext.Random.NextByte(0x2, 0xff); + yield return new object[] + { + code + }; + //Change third byte of the delegation header + code = [.. Eip7702Constants.DelegationHeader, .. rndAddress]; + code[2] = TestContext.CurrentContext.Random.NextByte(0x1, 0xff); + yield return new object[] + { + code + }; + code = [.. Eip7702Constants.DelegationHeader, .. new byte[21]]; + yield return new object[] + { + code + }; + code = [.. Eip7702Constants.DelegationHeader, .. new byte[19]]; + yield return new object[] + { + code + }; + } + [TestCaseSource(nameof(NotDelegationCodeCases))] + public void IsDelegation_CodeIsNotDelegation_ReturnsFalse(byte[] code) + { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + stateProvider.CreateAccount(TestItem.AddressA, 0); + stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); + CodeInfoRepository sut = new(1); + + sut.IsDelegation(stateProvider, TestItem.AddressA, out _).Should().Be(false); + } + + + public static IEnumerable DelegationCodeCases() + { + byte[] address = new byte[20]; + byte[] code = [.. Eip7702Constants.DelegationHeader, .. address]; + yield return new object[] + { + code + }; + TestContext.CurrentContext.Random.NextBytes(address); + code = [.. Eip7702Constants.DelegationHeader, .. address]; + yield return new object[] + { + code + }; + } + [TestCaseSource(nameof(DelegationCodeCases))] + public void IsDelegation_CodeIsDelegation_ReturnsTrue(byte[] code) + { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + stateProvider.CreateAccount(TestItem.AddressA, 0); + stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); + CodeInfoRepository sut = new(1); + + sut.IsDelegation(stateProvider, TestItem.AddressA, out _).Should().Be(true); + } + + [TestCaseSource(nameof(DelegationCodeCases))] + public void IsDelegation_CodeIsDelegation_CorrectDelegationAddressIsSet(byte[] code) + { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + stateProvider.CreateAccount(TestItem.AddressA, 0); + stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); + CodeInfoRepository sut = new(1); + + Address result; + sut.IsDelegation(stateProvider, TestItem.AddressA, out result); + + result.Should().Be(new Address(code.Slice(3, Address.Size))); + } + + [TestCaseSource(nameof(DelegationCodeCases))] + public void GetCodeHash_CodeIsDelegation_ReturnsHashOfDelegated(byte[] code) + { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + stateProvider.CreateAccount(TestItem.AddressA, 0); + stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); + Address delegationAddress = new Address(code.Slice(3, Address.Size)); + byte[] delegationCode = new byte[32]; + stateProvider.CreateAccount(delegationAddress, 0); + stateProvider.InsertCode(delegationAddress, delegationCode, Substitute.For()); + + CodeInfoRepository sut = new(1); + + sut.GetCodeHash(stateProvider, TestItem.AddressA).Should().Be(Keccak.Compute(delegationCode).ValueHash256); + } + + [TestCaseSource(nameof(NotDelegationCodeCases))] + public void GetCodeHash_CodeIsNotDelegation_ReturnsCodeHashOfAddress(byte[] code) + { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + stateProvider.CreateAccount(TestItem.AddressA, 0); + stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); + + CodeInfoRepository sut = new(1); + + sut.GetCodeHash(stateProvider, TestItem.AddressA).Should().Be(Keccak.Compute(code).ValueHash256); + } + + [TestCaseSource(nameof(DelegationCodeCases))] + public void GetCachedCodeInfo_CodeIsDelegation_ReturnsCodeOfDelegation(byte[] code) + { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + stateProvider.CreateAccount(TestItem.AddressA, 0); + stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); + Address delegationAddress = new Address(code.Slice(3, Address.Size)); + stateProvider.CreateAccount(delegationAddress, 0); + byte[] delegationCode = new byte[32]; + stateProvider.InsertCode(delegationAddress, delegationCode, Substitute.For()); + CodeInfoRepository sut = new(1); + + CodeInfo result = sut.GetCachedCodeInfo(stateProvider, TestItem.AddressA, Substitute.For()); + result.MachineCode.ToArray().Should().BeEquivalentTo(delegationCode); + } + + [TestCaseSource(nameof(NotDelegationCodeCases))] + public void GetCachedCodeInfo_CodeIsNotDelegation_ReturnsCodeOfAddress(byte[] code) + { + IDb stateDb = new MemDb(); + IDb codeDb = new MemDb(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + stateProvider.CreateAccount(TestItem.AddressA, 0); + stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); + + CodeInfoRepository sut = new(1); + + sut.GetCachedCodeInfo(stateProvider, TestItem.AddressA, Substitute.For()).Should().BeEquivalentTo(new CodeInfo(code)); + } private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) { diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 13d081b9975..785c6b1306e 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -135,7 +135,7 @@ public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_ Transaction tx = Build.A.Transaction .WithType(TxType.SetCode) .WithTo(signer.Address) - .WithGasLimit(60_000) + .WithGasLimit(600_000) .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, nonce)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; @@ -146,9 +146,9 @@ public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_ _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); - ReadOnlySpan cell = _stateProvider.Get(new StorageCell(signer.Address, 0)); + ReadOnlySpan cellValue = _stateProvider.Get(new StorageCell(signer.Address, 0)); - Assert.That(sender.Address.Bytes, Is.EqualTo(cell.ToArray())); + Assert.That(cellValue.ToArray(), Is.EqualTo(sender.Address.Bytes)); } public static IEnumerable DifferentCommitValues() { @@ -178,7 +178,7 @@ public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorag Transaction tx = Build.A.Transaction .WithType(TxType.SetCode) .WithTo(signer.Address) - .WithGasLimit(60_000) + .WithGasLimit(100_000) .WithAuthorizationCode(CreateAuthorizationTuple(signer, chainId, codeSource, nonce)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; @@ -189,7 +189,8 @@ public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorag _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); - Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EqualTo(expectedStorageValue)); + var actual = _stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(); + Assert.That(actual, Is.EqualTo(expectedStorageValue)); } [TestCase(0)] @@ -370,6 +371,95 @@ public void Execute_FirstTxHasAuthorizedCodeThatIncrementsAndSecondDoesNot_Stora Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EquivalentTo(new[] { 1 })); } + public static IEnumerable OpcodesWithEXT() + { + //EXTCODESIZE should return the size of the delegated code + yield return new object[] { + Prepare.EvmCode + .PushData(TestItem.AddressA) + .Op(Instruction.EXTCODESIZE) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done, + new byte[]{ 2 + 22 } }; + //EXTCODEHASH should return the HASH of the delegated code + yield return new object[] { + Prepare.EvmCode + .PushData(TestItem.AddressA) + .Op(Instruction.EXTCODEHASH) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done, + Keccak.Compute( + Prepare.EvmCode + .PushData(TestItem.AddressA) + .Op(Instruction.EXTCODEHASH) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done).Bytes.ToArray() + }; + //EXTCOPYCODE should copy the delegated code + yield return new object[] { + Prepare.EvmCode + .PushData(TestItem.AddressA) + .Op(Instruction.DUP1) + .Op(Instruction.EXTCODESIZE) + .Op(Instruction.PUSH0) + .Op(Instruction.PUSH0) + .Op(Instruction.DUP4) + .Op(Instruction.EXTCODECOPY) + .Op(Instruction.PUSH0) + .Op(Instruction.MLOAD) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Op(Instruction.STOP) + .Done, + Prepare.EvmCode + .PushData(TestItem.AddressA) + .Op(Instruction.DUP1) + .Op(Instruction.EXTCODESIZE) + .Op(Instruction.PUSH0) + .Op(Instruction.PUSH0) + .Op(Instruction.DUP4) + .Op(Instruction.EXTCODECOPY) + .Op(Instruction.PUSH0) + .Op(Instruction.MLOAD) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Op(Instruction.STOP) + .Done + }; + } + [TestCaseSource(nameof(OpcodesWithEXT))] + public void Execute_DelegatedCodeUsesEXTOPCODES_StoresExpectedValue(byte[] code, byte[] expectedValue) + { + PrivateKey signer = TestItem.PrivateKeyA; + PrivateKey sender = TestItem.PrivateKeyB; + Address codeSource = TestItem.AddressC; + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + + DeployCode(codeSource, code); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(100_000) + .WithAuthorizationCode(CreateAuthorizationTuple( + signer, + _specProvider.ChainId, + codeSource, + 0)) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + + TransactionResult result = _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EquivalentTo(expectedValue)); + } + private void DeployCode(Address codeSource, byte[] code) { _stateProvider.CreateAccountIfNotExists(codeSource, 0); diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index e8d815312ae..c82b92cddca 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -24,44 +24,6 @@ namespace Nethermind.Evm; public class CodeInfoRepository : ICodeInfoRepository { - internal sealed class CodeLruCache - { - private const int CacheCount = 16; - private const int CacheMax = CacheCount - 1; - private readonly ClockCache[] _caches; - - public CodeLruCache() - { - _caches = new ClockCache[CacheCount]; - for (int i = 0; i < _caches.Length; i++) - { - // Cache per nibble to reduce contention as TxPool is very parallel - _caches[i] = new ClockCache(MemoryAllowance.CodeCacheSize / CacheCount); - } - } - - public CodeInfo? Get(in ValueHash256 codeHash) - { - ClockCache cache = _caches[GetCacheIndex(codeHash)]; - return cache.Get(codeHash); - } - - public bool Set(in ValueHash256 codeHash, CodeInfo codeInfo) - { - ClockCache cache = _caches[GetCacheIndex(codeHash)]; - return cache.Set(codeHash, codeInfo); - } - - private static int GetCacheIndex(in ValueHash256 codeHash) => codeHash.Bytes[^1] & CacheMax; - - public bool TryGet(in ValueHash256 codeHash, [NotNullWhen(true)] out CodeInfo? codeInfo) - { - codeInfo = Get(codeHash); - return codeInfo is not null; - } - } - - private static readonly FrozenDictionary _precompiles = InitializePrecompiledContracts(); private static readonly CodeLruCache _codeCache = new(); private readonly FrozenDictionary _localPrecompiles; @@ -351,5 +313,41 @@ private class CachedPrecompile( return result; } } + internal sealed class CodeLruCache + { + private const int CacheCount = 16; + private const int CacheMax = CacheCount - 1; + private readonly ClockCache[] _caches; + + public CodeLruCache() + { + _caches = new ClockCache[CacheCount]; + for (int i = 0; i < _caches.Length; i++) + { + // Cache per nibble to reduce contention as TxPool is very parallel + _caches[i] = new ClockCache(MemoryAllowance.CodeCacheSize / CacheCount); + } + } + + public CodeInfo? Get(in ValueHash256 codeHash) + { + ClockCache cache = _caches[GetCacheIndex(codeHash)]; + return cache.Get(codeHash); + } + + public bool Set(in ValueHash256 codeHash, CodeInfo codeInfo) + { + ClockCache cache = _caches[GetCacheIndex(codeHash)]; + return cache.Set(codeHash, codeInfo); + } + + private static int GetCacheIndex(in ValueHash256 codeHash) => codeHash.Bytes[^1] & CacheMax; + + public bool TryGet(in ValueHash256 codeHash, [NotNullWhen(true)] out CodeInfo? codeInfo) + { + codeInfo = Get(codeHash); + return codeInfo is not null; + } + } } diff --git a/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs index c89afc84c37..7f782ad84f7 100644 --- a/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs @@ -134,7 +134,7 @@ public TransactionForRpc() { } public TxType Type { get; set; } public IEnumerable? AccessList { get; set; } - public IEnumerable? AuthorizationList{ get; set; } + public IEnumerable? AuthorizationList { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public UInt256? MaxFeePerBlobGas { get; set; } // eip4844 diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs index 46033f3ed70..b15be4c3a0b 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs @@ -1197,6 +1197,70 @@ public async Task eth_getBlockByNumber_should_return_withdrawals_correctly() })), Is.EqualTo(result)); } + + [Test] + public async Task eth_sendRawTransaction_sender_with_non_delegated_code_is_rejected() + { + var specProvider = new TestSpecProvider(Prague.Instance); + specProvider.AllowTestChainOverride = false; + + TestRpcBlockchain Test = await TestRpcBlockchain.ForTest(SealEngineType.NethDev).Build(specProvider); + + Transaction testTx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithNonce(Test.State.GetNonce(TestItem.AddressA)) + .WithMaxFeePerGas(9.GWei()) + .WithMaxPriorityFeePerGas(9.GWei()) + .WithGasLimit(GasCostOf.Transaction + GasCostOf.NewAccount) + .WithAuthorizationCodeIfAuthorizationListTx() + .WithTo(TestItem.AddressA) + .SignedAndResolved(TestItem.PrivateKeyA).TestObject; + + string result = await Test.TestEthRpc("eth_sendRawTransaction", Bytes.ToHexString(Rlp.Encode(testTx).Bytes)); + + JsonRpcErrorResponse actual = new EthereumJsonSerializer().Deserialize(result); + Assert.That(actual.Error!.Message, Is.EqualTo(nameof(AcceptTxResult.SenderIsContract))); + } + + + [Test] + public async Task eth_sendRawTransaction_sender_with_delegated_code_is_accepted() + { + var specProvider = new TestSpecProvider(Prague.Instance); + specProvider.AllowTestChainOverride = false; + + TestRpcBlockchain test = await TestRpcBlockchain.ForTest(SealEngineType.NethDev).Build(specProvider); + + Transaction setCodeTx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithNonce(test.State.GetNonce(TestItem.AddressB)) + .WithMaxFeePerGas(9.GWei()) + .WithMaxPriorityFeePerGas(9.GWei()) + .WithGasLimit(GasCostOf.Transaction + GasCostOf.NewAccount) + .WithAuthorizationCode(test.EthereumEcdsa.Sign(TestItem.PrivateKeyB, 0, Address.Zero, (ulong)test.State.GetNonce(TestItem.AddressB) + 1)) + .WithTo(TestItem.AddressA) + .SignedAndResolved(TestItem.PrivateKeyB).TestObject; + + await test.AddBlock(setCodeTx); + + var code = test.State.GetCode(TestItem.AddressB); + + Assert.That(code!.Slice(0, 3), Is.EquivalentTo(Eip7702Constants.DelegationHeader.ToArray())); + + Transaction normalTx = Build.A.Transaction + .WithNonce(test.State.GetNonce(TestItem.AddressB)) + .WithMaxFeePerGas(9.GWei()) + .WithMaxPriorityFeePerGas(9.GWei()) + .WithGasLimit(GasCostOf.Transaction) + .WithTo(TestItem.AddressA) + .SignedAndResolved(TestItem.PrivateKeyB).TestObject; + + string result = await test.TestEthRpc("eth_sendRawTransaction", Bytes.ToHexString(Rlp.Encode(normalTx).Bytes)); + + JsonRpcSuccessResponse actual = new EthereumJsonSerializer().Deserialize(result); + Assert.That(actual.Result, Is.Not.Null); + } + private static (byte[] ByteCode, AccessListItemForRpc[] AccessList) GetTestAccessList(long loads = 2, bool allowSystemUser = true) { AccessListItemForRpc[] accessList = allowSystemUser diff --git a/src/Nethermind/Nethermind.State.Test/StateReaderTests.cs b/src/Nethermind/Nethermind.State.Test/StateReaderTests.cs index 5e56dd22f44..198c1e23560 100644 --- a/src/Nethermind/Nethermind.State.Test/StateReaderTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StateReaderTests.cs @@ -248,5 +248,114 @@ public void Can_collect_stats() var stats = stateReader.CollectStats(provider.StateRoot, new MemDb(), Logger); stats.AccountCount.Should().Be(1); } + + [Test] + public void IsInvalidContractSender_AccountHasCode_ReturnsTrue() + { + IReleaseSpec releaseSpec = Substitute.For(); + releaseSpec.IsEip3607Enabled.Returns(true); + releaseSpec.IsEip7702Enabled.Returns(true); + TrieStore trieStore = new TrieStore(new MemDb(), Logger); + WorldState sut = new(trieStore, new MemDb(), Logger); + sut.CreateAccount(TestItem.AddressA, 0); + sut.InsertCode(TestItem.AddressA, Keccak.Compute(new byte[1]), new byte[1], releaseSpec, false); + sut.Commit(MuirGlacier.Instance); + sut.CommitTree(0); + + bool result = sut.IsInvalidContractSender(releaseSpec, TestItem.AddressA); + + Assert.That(result, Is.True); + } + + [Test] + public void IsInvalidContractSender_AccountHasNoCode_ReturnsFalse() + { + IReleaseSpec releaseSpec = Substitute.For(); + releaseSpec.IsEip3607Enabled.Returns(true); + releaseSpec.IsEip7702Enabled.Returns(true); + TrieStore trieStore = new TrieStore(new MemDb(), Logger); + WorldState sut = new(trieStore, new MemDb(), Logger); + sut.CreateAccount(TestItem.AddressA, 0); + sut.Commit(MuirGlacier.Instance); + sut.CommitTree(0); + + bool result = sut.IsInvalidContractSender(releaseSpec, TestItem.AddressA); + + Assert.That(result, Is.False); + } + + [Test] + public void IsInvalidContractSender_AccountHasDelegatedCode_ReturnsFalse() + { + IReleaseSpec releaseSpec = Substitute.For(); + releaseSpec.IsEip3607Enabled.Returns(true); + releaseSpec.IsEip7702Enabled.Returns(true); + TrieStore trieStore = new TrieStore(new MemDb(), Logger); + WorldState sut = new(trieStore, new MemDb(), Logger); + sut.CreateAccount(TestItem.AddressA, 0); + byte[] code = [.. Eip7702Constants.DelegationHeader, .. new byte[20]]; + sut.InsertCode(TestItem.AddressA, Keccak.Compute(code), code, releaseSpec, false); + sut.Commit(MuirGlacier.Instance); + sut.CommitTree(0); + + bool result = sut.IsInvalidContractSender(releaseSpec, TestItem.AddressA); + + Assert.That(result, Is.False); + } + + [Test] + public void IsInvalidContractSender_AccountHasCodeButDelegateReturnsTrue_ReturnsFalse() + { + IReleaseSpec releaseSpec = Substitute.For(); + releaseSpec.IsEip3607Enabled.Returns(true); + releaseSpec.IsEip7702Enabled.Returns(true); + TrieStore trieStore = new TrieStore(new MemDb(), Logger); + WorldState sut = new(trieStore, new MemDb(), Logger); + sut.CreateAccount(TestItem.AddressA, 0); + byte[] code = new byte[20]; + sut.InsertCode(TestItem.AddressA, Keccak.Compute(code), code, releaseSpec, false); + sut.Commit(MuirGlacier.Instance); + sut.CommitTree(0); + + bool result = sut.IsInvalidContractSender(releaseSpec, TestItem.AddressA, () => true); + + Assert.That(result, Is.False); + } + + [Test] + public void IsInvalidContractSender_AccountHasDelegatedCodeBut7702IsNotEnabled_ReturnsTrue() + { + IReleaseSpec releaseSpec = Substitute.For(); + releaseSpec.IsEip3607Enabled.Returns(true); + TrieStore trieStore = new TrieStore(new MemDb(), Logger); + WorldState sut = new(trieStore, new MemDb(), Logger); + sut.CreateAccount(TestItem.AddressA, 0); + byte[] code = [.. Eip7702Constants.DelegationHeader, .. new byte[20]]; + sut.InsertCode(TestItem.AddressA, Keccak.Compute(code), code, releaseSpec, false); + sut.Commit(MuirGlacier.Instance); + sut.CommitTree(0); + + bool result = sut.IsInvalidContractSender(releaseSpec, TestItem.AddressA); + + Assert.That(result, Is.True); + } + + [Test] + public void IsInvalidContractSender_AccountHasDelegatedCodeBut3807IsNotEnabled_ReturnsFalse() + { + IReleaseSpec releaseSpec = Substitute.For(); + releaseSpec.IsEip7702Enabled.Returns(true); + TrieStore trieStore = new TrieStore(new MemDb(), Logger); + WorldState sut = new(trieStore, new MemDb(), Logger); + sut.CreateAccount(TestItem.AddressA, 0); + byte[] code = [.. Eip7702Constants.DelegationHeader, .. new byte[20]]; + sut.InsertCode(TestItem.AddressA, Keccak.Compute(code), code, releaseSpec, false); + sut.Commit(MuirGlacier.Instance); + sut.CommitTree(0); + + bool result = sut.IsInvalidContractSender(releaseSpec, TestItem.AddressA); + + Assert.That(result, Is.False); + } } } diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index 3dc70fa8fae..08b6ef8ea4c 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1694,7 +1694,7 @@ public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType { yield return (new byte[16], AcceptTxResult.SenderIsContract); //Delegation code - yield return ([..Eip7702Constants.DelegationHeader, ..new byte[20]], AcceptTxResult.Accepted); + yield return ([.. Eip7702Constants.DelegationHeader, .. new byte[20]], AcceptTxResult.Accepted); } [TestCaseSource(nameof(CodeCases))] public void SubmitTx_CodeIsNotDelegationAndDelegation_DelegationIsAccepted((byte[] code, AcceptTxResult expected) testCase) From b90b8834774cc05b51eb868491a694b68c908083 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 17 Sep 2024 17:38:31 +0200 Subject: [PATCH 364/551] fix whitespaces --- .../EngineModuleTests.HelperFunctions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index f33f0a7dc1f..f97dae4db93 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -148,7 +148,7 @@ private static ExecutionPayloadV4 CreateBlockRequestV4(MergeTestBlockchain chain var blockHashStore = new BlockhashStore(chain.SpecProvider, chain.State); blockHashStore.ApplyBlockhashStateChanges(block!.Header); - chain.ConsensusRequestsProcessor?.ProcessRequests(block!, chain.State, Array.Empty(),chain.SpecProvider.GenesisSpec); + chain.ConsensusRequestsProcessor?.ProcessRequests(block!, chain.State, Array.Empty(), chain.SpecProvider.GenesisSpec); chain.State.Commit(chain.SpecProvider.GenesisSpec); chain.State.RecalculateStateRoot(); From 453204743f049d4445fec77d88f72e01ba02e9a2 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 17 Sep 2024 20:35:55 +0200 Subject: [PATCH 365/551] fix merge tests --- .../EngineModuleTests.HelperFunctions.cs | 4 ++++ .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index f97dae4db93..f1605162f99 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -22,6 +22,8 @@ using Nethermind.State; using Nethermind.Core.ConsensusRequests; using Microsoft.CodeAnalysis; +using Nethermind.Blockchain.BeaconBlockRoot; +using Nethermind.Core.Specs; namespace Nethermind.Merge.Plugin.Test { @@ -144,6 +146,8 @@ private static ExecutionPayloadV4 CreateBlockRequestV4(MergeTestBlockchain chain ExecutionPayloadV4 blockRequestV4 = CreateBlockRequestInternal(parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, parentBeaconBlockRoot: parentBeaconBlockRoot, requests: requests); blockRequestV4.TryGetBlock(out Block? block); + var beaconBlockRootHandler = new BeaconBlockRootHandler(chain.TxProcessor); + beaconBlockRootHandler.StoreBeaconRoot(block!, chain.SpecProvider.GetSpec(block!.Header)); Snapshot before = chain.State.TakeSnapshot(); var blockHashStore = new BlockhashStore(chain.SpecProvider, chain.State); blockHashStore.ApplyBlockhashStateChanges(block!.Header); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index f368f2a45d5..d1b1175b6ce 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -346,7 +346,7 @@ public virtual async Task using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); - ExecutionPayloadV4 executionPayload1 = await SendNewBlockV3(rpc, chain, requests); + ExecutionPayloadV4 executionPayload1 = await SendNewBlockV4(rpc, chain, requests); Transaction[] txs = BuildTransactions( chain, executionPayload1.BlockHash, TestItem.PrivateKeyA, TestItem.AddressB, 3, 0, out _, out _); @@ -402,7 +402,7 @@ public virtual async Task using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); - ExecutionPayloadV4 executionPayload1 = await SendNewBlockV3(rpc, chain, requests); + ExecutionPayloadV4 executionPayload1 = await SendNewBlockV4(rpc, chain, requests); Transaction[] txs = BuildTransactions( chain, executionPayload1.BlockHash, TestItem.PrivateKeyA, TestItem.AddressB, 3, 0, out _, out _); @@ -438,7 +438,7 @@ public async Task getPayloadBodiesByRangeV2_empty_response() payloadBodies.Should().BeEquivalentTo(expected); } - private async Task SendNewBlockV3(IEngineRpcModule rpc, MergeTestBlockchain chain, ConsensusRequest[]? requests) + private async Task SendNewBlockV4(IEngineRpcModule rpc, MergeTestBlockchain chain, ConsensusRequest[]? requests) { ExecutionPayloadV4 executionPayload = CreateBlockRequestV4(chain, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, Array.Empty(), 0, 0, Array.Empty(), parentBeaconBlockRoot: TestItem.KeccakA, requests: requests); ResultWrapper executePayloadResult = await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot); From 93a7c756e933218528f850a663a7600927d54228 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 17 Sep 2024 20:47:29 +0200 Subject: [PATCH 366/551] cosmetic --- .../Requests/DepositsProcessor.cs | 6 +++--- .../EngineModuleTests.HelperFunctions.cs | 19 +------------------ 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs index 56f9e845819..79e37ef79cc 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs @@ -12,8 +12,8 @@ namespace Nethermind.Consensus.Requests; public class DepositsProcessor : IDepositsProcessor { - private AbiSignature depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); - AbiEncoder abiEncoder = AbiEncoder.Instance; + private readonly AbiSignature _depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); + private readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) { @@ -40,7 +40,7 @@ public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, I Deposit DecodeDeposit(LogEntry log) { - object[] result = abiEncoder.Decode(AbiEncodingStyle.None, depositEventABI, log.Data); + object[] result = _abiEncoder.Decode(AbiEncodingStyle.None, _depositEventABI, log.Data); return new Deposit { diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index f1605162f99..1fa8cc0d5d4 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -170,26 +170,9 @@ private static T CreateBlockRequestInternal(ExecutionPayload parent, Address { Deposit[]? deposits = null; WithdrawalRequest[]? withdrawalRequests = null; - if (requests is not null) { - (int depositCount, int withdrawalRequestCount) = requests.GetTypeCounts(); - deposits = new Deposit[depositCount]; - withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; - int depositIndex = 0; - int withdrawalRequestIndex = 0; - for (int i = 0; i < requests.Length; ++i) - { - ConsensusRequest request = requests[i]; - if (request.Type == ConsensusRequestsType.Deposit) - { - deposits[depositIndex++] = (Deposit)request; - } - else - { - withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)request; - } - } + (deposits, withdrawalRequests) = requests.SplitRequests(); } T blockRequest = new() From a739b2239f23762551adb15ecc26dce4d3234de1 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Tue, 17 Sep 2024 20:54:49 +0200 Subject: [PATCH 367/551] Null handling for requests --- .../EngineModuleTests.V4.cs | 10 +++++----- .../Handlers/GetPayloadBodiesByHashV2Handler.cs | 2 +- .../Handlers/GetPayloadBodiesByRangeV2Handler.cs | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index d1b1175b6ce..afce9fc1ece 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -352,7 +352,7 @@ public virtual async Task chain.AddTransactions(txs); - ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV3(rpc, chain, true, Array.Empty()); + ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); Hash256[] blockHashes = new Hash256[] { executionPayload1.BlockHash, TestItem.KeccakA, executionPayload2.BlockHash @@ -408,7 +408,7 @@ public virtual async Task chain.AddTransactions(txs); - ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV3(rpc, chain, true, Array.Empty()); + ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); await rpc.engine_forkchoiceUpdatedV3(new ForkchoiceStateV1(executionPayload2.BlockHash!, executionPayload2.BlockHash!, executionPayload2.BlockHash!)); @@ -448,7 +448,7 @@ private async Task SendNewBlockV4(IEngineRpcModule rpc, Merg return executionPayload; } - private async Task BuildAndSendNewBlockV3( + private async Task BuildAndSendNewBlockV4( IEngineRpcModule rpc, MergeTestBlockchain chain, bool waitForBlockImprovement, @@ -458,7 +458,7 @@ private async Task BuildAndSendNewBlockV3( ulong timestamp = Timestamper.UnixTime.Seconds; Hash256 random = Keccak.Zero; Address feeRecipient = Address.Zero; - ExecutionPayloadV4 executionPayload = await BuildAndGetPayloadResultV3(rpc, chain, head, + ExecutionPayloadV4 executionPayload = await BuildAndGetPayloadResultV4(rpc, chain, head, Keccak.Zero, head, timestamp, random, feeRecipient, withdrawals, waitForBlockImprovement); ResultWrapper executePayloadResult = await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot); @@ -466,7 +466,7 @@ private async Task BuildAndSendNewBlockV3( return executionPayload; } - private async Task BuildAndGetPayloadResultV3( + private async Task BuildAndGetPayloadResultV4( IEngineRpcModule rpc, MergeTestBlockchain chain, Hash256 headBlockHash, diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs index 342ac850f40..9a2764f1ad7 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs @@ -40,7 +40,7 @@ public class GetPayloadBodiesByHashV2Handler(IBlockTree blockTree, ILogManager l continue; } - (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests) = block!.Requests.SplitRequests(); + (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests) = block!.Requests?.SplitRequests() ?? (null, null); yield return new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs index 97f4cbb9b0f..74ab16de044 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs @@ -43,7 +43,7 @@ public class GetPayloadBodiesByRangeV2Handler(IBlockTree blockTree, ILogManager continue; } - (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests) = block!.Requests.SplitRequests(); + (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests) = block!.Requests?.SplitRequests() ?? (null, null); yield return new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests); } From fa10981dfe7d2ba581789d7069b4b8eed1818358 Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 17 Sep 2024 23:35:11 +0200 Subject: [PATCH 368/551] tx decoder for setcode --- src/Nethermind/Nethermind.Core/TxType.cs | 1 - .../Nethermind.Crypto/EthereumEcdsa.cs | 11 ++++++ .../Nethermind.Crypto/IEthereumEcdsa.cs | 2 + .../Nethermind.Crypto/NullEthereumEcdsa.cs | 6 +++ .../OptimismEthereumEcdsa.cs | 5 +++ .../Nethermind.Serialization.Rlp/TxDecoder.cs | 1 + .../TxDecoders/BaseTxDecoder.cs | 4 +- .../TxDecoders/SetCodeTxDecoder.cs | 38 +++++++++++++++++++ .../IReadOnlyStateProviderExtensions.cs | 25 +++++++++++- 9 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/TxDecoders/SetCodeTxDecoder.cs diff --git a/src/Nethermind/Nethermind.Core/TxType.cs b/src/Nethermind/Nethermind.Core/TxType.cs index 4aa2bf01ae6..8b9d2f65b92 100644 --- a/src/Nethermind/Nethermind.Core/TxType.cs +++ b/src/Nethermind/Nethermind.Core/TxType.cs @@ -9,7 +9,6 @@ public enum TxType : byte AccessList = 1, EIP1559 = 2, Blob = 3, - //TODO type has not been determined yet SetCode = 4, DepositTx = 0x7E, diff --git a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs index 4defe519ac7..22604c62c10 100644 --- a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs @@ -8,6 +8,7 @@ using System.Runtime.CompilerServices; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Serialization.Rlp; @@ -52,6 +53,16 @@ public void Sign(PrivateKey privateKey, Transaction tx, bool isEip155Enabled) } } + public AuthorizationTuple Sign(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) + { + RlpStream rlp = _tupleDecoder.EncodeWithoutSignature(chainId, codeAddress, nonce); + Span code = stackalloc byte[rlp.Length + 1]; + code[0] = Eip7702Constants.Magic; + rlp.Data.AsSpan().CopyTo(code.Slice(1)); + Signature sig = Sign(signer, Keccak.Compute(code)); + return new AuthorizationTuple(chainId, codeAddress, nonce, sig); + } + /// /// /// diff --git a/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs index d29e2549412..abe5e3c89e3 100644 --- a/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs @@ -4,6 +4,7 @@ using System; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Int256; namespace Nethermind.Crypto { @@ -15,5 +16,6 @@ public interface IEthereumEcdsa : IEcdsa Address? RecoverAddress(Signature signature, Hash256 message); Address? RecoverAddress(Span signatureBytes, Hash256 message); bool Verify(Address sender, Transaction tx); + AuthorizationTuple Sign(PrivateKey authority, ulong chainId, Address codeAddress, ulong nonce); } } diff --git a/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs index 077613e1d9c..4b8f931244c 100644 --- a/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs @@ -4,6 +4,7 @@ using System; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Int256; namespace Nethermind.Crypto { @@ -59,5 +60,10 @@ public bool Verify(Address sender, Transaction tx) { throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); } + + public AuthorizationTuple Sign(PrivateKey authority, ulong chainId, Address codeAddress, ulong nonce) + { + throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); + } } } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs b/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs index fcdb39e95ac..ea5c652a91c 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs @@ -35,4 +35,9 @@ public OptimismEthereumEcdsa(IEthereumEcdsa ethereumEcdsa) public bool Verify(Address sender, Transaction tx) => _ethereumEcdsa.Verify(sender, tx); public Address? RecoverAddress(AuthorizationTuple tuple) => _ethereumEcdsa.RecoverAddress(tuple); + + public AuthorizationTuple Sign(PrivateKey authority, ulong chainId, Address codeAddress, ulong nonce) + { + return _ethereumEcdsa.Sign(authority, chainId, codeAddress, nonce); + } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs index 612b9978acb..a08fb2b84d3 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs @@ -45,6 +45,7 @@ protected TxDecoder(Func? transactionFactory = null) RegisterDecoder(new AccessListTxDecoder(factory)); RegisterDecoder(new EIP1559TxDecoder(factory)); RegisterDecoder(new BlobTxDecoder(factory)); + RegisterDecoder(new SetCodeTxDecoder(factory)); } public void RegisterDecoder(ITxDecoder decoder) => _decoders[(int)decoder.Type] = decoder; diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoders/BaseTxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoders/BaseTxDecoder.cs index ab72eef75e7..a8918382c1d 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoders/BaseTxDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoders/BaseTxDecoder.cs @@ -155,7 +155,7 @@ protected virtual void DecodeGasPrice(Transaction transaction, ref Rlp.ValueDeco transaction.GasPrice = decoderContext.DecodeUInt256(); } - private Signature? DecodeSignature(Transaction transaction, RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected Signature? DecodeSignature(Transaction transaction, RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { ulong v = rlpStream.DecodeULong(); ReadOnlySpan rBytes = rlpStream.DecodeByteArraySpan(); @@ -163,7 +163,7 @@ protected virtual void DecodeGasPrice(Transaction transaction, ref Rlp.ValueDeco return DecodeSignature(v, rBytes, sBytes, transaction.Signature, rlpBehaviors); } - private Signature? DecodeSignature(Transaction transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected Signature? DecodeSignature(Transaction transaction, ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { ulong v = decoderContext.DecodeULong(); ReadOnlySpan rBytes = decoderContext.DecodeByteArraySpan(); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoders/SetCodeTxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoders/SetCodeTxDecoder.cs new file mode 100644 index 00000000000..ffc110f998b --- /dev/null +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoders/SetCodeTxDecoder.cs @@ -0,0 +1,38 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using Nethermind.Core; + +namespace Nethermind.Serialization.Rlp.TxDecoders; + +public sealed class SetCodeTxDecoder(Func? transactionFactory = null) + : BaseEIP1559TxDecoder(TxType.SetCode, transactionFactory) where T : Transaction, new() +{ + private AuthorizationTupleDecoder _authTupleDecoder = new(); + + protected override void DecodePayload(Transaction transaction, RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + base.DecodePayload(transaction, rlpStream, rlpBehaviors); + transaction.AuthorizationList = rlpStream.DecodeArray((s) => _authTupleDecoder.Decode(s, rlpBehaviors)); + } + + protected override void DecodePayload(Transaction transaction, ref Rlp.ValueDecoderContext decoderContext, + RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + base.DecodePayload(transaction, ref decoderContext, rlpBehaviors); + transaction.AuthorizationList = decoderContext.DecodeArray(_authTupleDecoder); + } + + protected override void EncodePayload(Transaction transaction, RlpStream stream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + base.EncodePayload(transaction, stream, rlpBehaviors); + stream.EncodeArray(transaction.AuthorizationList, rlpBehaviors); + } + + protected override int GetPayloadLength(Transaction transaction) + { + return base.GetPayloadLength(transaction) + + (transaction.AuthorizationList is null ? 1 : Rlp.LengthOfSequence(_authTupleDecoder.GetContentLength(transaction.AuthorizationList, RlpBehaviors.None))); + } +} diff --git a/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs b/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs index 7760d663352..7bda4915d2a 100644 --- a/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs +++ b/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs @@ -14,7 +14,28 @@ public static byte[] GetCode(this IReadOnlyStateProvider stateProvider, Address stateProvider.TryGetAccount(address, out AccountStruct account); return !account.HasCode ? Array.Empty() : stateProvider.GetCode(account.CodeHash) ?? Array.Empty(); } - public static bool IsInvalidContractSender(this IReadOnlyStateProvider stateProvider, IReleaseSpec spec, Address address) => - spec.IsEip3607Enabled && stateProvider.HasCode(address) && !Eip7702Constants.IsDelegatedCode(GetCode(stateProvider, address)); + /// + /// Checks if has code that is not a delegation, according to the rules of eip-3607 and eip-7702. + /// Where possible a cache for code lookup should be used, since the fallback will read from . + /// + /// + /// + /// + /// + /// + public static bool IsInvalidContractSender( + this IReadOnlyStateProvider stateProvider, + IReleaseSpec spec, + Address sender, + Func? isDelegatedCode = null) + { + return spec.IsEip3607Enabled + && stateProvider.HasCode(sender) + && (!spec.IsEip7702Enabled + || (isDelegatedCode != null + ? !isDelegatedCode() + : !Eip7702Constants.IsDelegatedCode(GetCode(stateProvider, sender)))); + } } + } From 7aa7aa85bc9b2a6862df24e35bbcfaa8c0093fd7 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 11 Sep 2024 11:09:05 +0200 Subject: [PATCH 369/551] RPC module tests for 7702 --- .../Validators/TxValidatorTests.cs | 27 +++++++++++++++++++ src/Nethermind/Nethermind.Core/Address.cs | 2 ++ .../Modules/Eth/EthRpcModuleTests.cs | 1 - 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 13b4febd3cd..47f47cc8b59 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -552,6 +552,7 @@ public void IsWellFormed_AuthorizationListTxInPragueSpec_ReturnsTrue() { TransactionBuilder txBuilder = Build.A.Transaction .WithType(TxType.SetCode) + .WithTo(TestItem.AddressA) .WithAuthorizationCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) @@ -569,6 +570,7 @@ public void IsWellFormed_EmptyAuthorizationList_ReturnsFalse() { TransactionBuilder txBuilder = Build.A.Transaction .WithType(TxType.SetCode) + .WithTo(TestItem.AddressA) .WithAuthorizationCode([]) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) @@ -586,6 +588,7 @@ public void IsWellFormed_NullAuthorizationList_ReturnsFalse() { TransactionBuilder txBuilder = Build.A.Transaction .WithType(TxType.SetCode) + .WithTo(TestItem.AddressA) .WithAuthorizationCode((AuthorizationTuple[])null!) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) @@ -598,6 +601,30 @@ public void IsWellFormed_NullAuthorizationList_ReturnsFalse() Assert.That(txValidator.IsWellFormed(tx, Prague.Instance), Is.False); } + public static object[] BadSignatures = + { + new object[] { 1ul, (UInt256)1, Secp256K1Curve.HalfNPlusOne, false}, + new object[] { 1ul, UInt256.Zero, Secp256K1Curve.HalfN, true }, + new object[] { 0ul, UInt256.Zero, UInt256.Zero, true }, + }; + [TestCaseSource(nameof(BadSignatures))] + public void IsWellFormed_AuthorizationTupleHasBadSignature_ReturnsFalse(ulong yParity, UInt256 r, UInt256 s, bool expected) + { + TransactionBuilder txBuilder = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(TestItem.AddressA) + .WithAuthorizationCode(new AuthorizationTuple(0, Address.Zero, 0, new Signature(r, s, yParity + Signature.VOffset))) + .WithMaxFeePerGas(100000) + .WithGasLimit(1000000) + .WithChainId(TestBlockchainIds.ChainId) + .SignedAndResolved(); + + Transaction tx = txBuilder.TestObject; + TxValidator txValidator = new(TestBlockchainIds.ChainId); + + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance).AsBool, Is.EqualTo(expected)); + } + private static byte[] MakeArray(int count, params byte[] elements) => elements.Take(Math.Min(count, elements.Length)) .Concat(new byte[Math.Max(0, count - elements.Length)]) diff --git a/src/Nethermind/Nethermind.Core/Address.cs b/src/Nethermind/Nethermind.Core/Address.cs index 0877e55a873..c1a18a3292b 100644 --- a/src/Nethermind/Nethermind.Core/Address.cs +++ b/src/Nethermind/Nethermind.Core/Address.cs @@ -3,6 +3,7 @@ using System; using System.ComponentModel; +using System.Diagnostics; using System.Globalization; using System.Numerics; using System.Runtime.CompilerServices; @@ -18,6 +19,7 @@ namespace Nethermind.Core { [JsonConverter(typeof(AddressConverter))] [TypeConverter(typeof(AddressTypeConverter))] + [DebuggerDisplay("{ToString()}")] public class Address : IEquatable
, IComparable
{ // Ensure that hashes are different for every run of the node and every node, so if are any hash collisions on diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs index b15be4c3a0b..0e33088dae0 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs @@ -1230,7 +1230,6 @@ public async Task eth_sendRawTransaction_sender_with_delegated_code_is_accepted( specProvider.AllowTestChainOverride = false; TestRpcBlockchain test = await TestRpcBlockchain.ForTest(SealEngineType.NethDev).Build(specProvider); - Transaction setCodeTx = Build.A.Transaction .WithType(TxType.SetCode) .WithNonce(test.State.GetNonce(TestItem.AddressB)) From c9c1afc1d0263e3ea7cfdae36ffc1f3ead6a2f5c Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 18 Sep 2024 00:29:05 +0200 Subject: [PATCH 370/551] cleanup after missing commit --- .../Ethereum.Test.Base/BlockchainTestBase.cs | 2 +- .../Ethereum.Test.Base/GeneralTestBase.cs | 13 ++++++++----- .../Core/CodeInfoRepositoryBenchmark.cs | 8 +++++--- .../Nethermind.Evm.Benchmark/EvmBenchmarks.cs | 3 +-- .../MultipleUnsignedOperations.cs | 3 +-- .../StaticCallBenchmarks.cs | 3 +-- .../Nethermind.Evm.Test/CodeInfoRepositoryTests.cs | 4 ++-- .../Eth62ProtocolHandlerBenchmarks.cs | 5 ++++- 8 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs index ba62c18508e..d958f3d2ec0 100644 --- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs @@ -149,7 +149,7 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? IHeaderValidator headerValidator = new HeaderValidator(blockTree, Sealer, specProvider, _logManager); IUnclesValidator unclesValidator = new UnclesValidator(blockTree, headerValidator, _logManager); IBlockValidator blockValidator = new BlockValidator(txValidator, headerValidator, unclesValidator, specProvider, _logManager); - CodeInfoRepository codeInfoRepository = new(); + CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); IVirtualMachine virtualMachine = new VirtualMachine( blockhashProvider, specProvider, diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index e2003756f08..d806879df6d 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -137,16 +137,19 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) Block block = Build.A.Block.WithTransactions(test.Transaction).WithHeader(header).TestObject; - string error; - bool isValid = _txValidator.IsWellFormed(test.Transaction, spec, out error) && IsValidBlock(block, specProvider); + bool blockIsValid = IsValidBlock(block, specProvider); + ValidationResult txIsValid = _txValidator.IsWellFormed(test.Transaction, spec); - if (isValid) + if (txIsValid && blockIsValid) { transactionProcessor.Execute(test.Transaction, new BlockExecutionContext(header), txTracer); } - else + else { - _logger.Info($"Skipping invalid tx with error: {error}"); + if (!txIsValid) + _logger.Info($"Skipping invalid tx with error: {txIsValid.Error}"); + else + _logger.Info($"Skipping invalid block: {block.ToString(Block.Format.Short)}"); } stopwatch.Stop(); diff --git a/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs index adb1d2a0ba0..37dc9e76597 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs @@ -34,6 +34,7 @@ public class CodeInfoRepositoryBenchmark private CodeInfoRepository sut; private static EthereumEcdsa _ethereumEcdsa; private WorldState _stateProvider; + private HashSet
_accessedAddresses; [GlobalSetup] public void GlobalSetup() @@ -45,6 +46,7 @@ public void GlobalSetup() _stateProvider.CreateAccount(Address.Zero, 100000000000000); _stateProvider.Commit(_spec); + _accessedAddresses = new HashSet
(); _ethereumEcdsa = new(1); sut = new(1); var list = new List(); @@ -63,7 +65,7 @@ public void GlobalSetup() Tuples100 = list.Take(100).ToArray(); Tuples1k = list.Take(1_000).ToArray(); - static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, UInt256? nonce) + static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) { AuthorizationTupleDecoder decoder = new(); RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); @@ -80,13 +82,13 @@ static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chai [Benchmark] public void Build100Tuples() { - sut.InsertFromAuthorizations(_stateProvider, Tuples100, _spec); + sut.InsertFromAuthorizations(_stateProvider, Tuples100, _accessedAddresses, _spec); } [Benchmark] public void Build1kTuples() { - sut.InsertFromAuthorizations(_stateProvider, Tuples1k, _spec); + sut.InsertFromAuthorizations(_stateProvider, Tuples1k, _accessedAddresses, _spec); } //[Benchmark] diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs index 949d6b89cc3..71b31c29ebc 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs @@ -56,8 +56,7 @@ public void GlobalSetup() value: 0, transferValue: 0, txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, codeInfoRepository), - inputData: default, - isSystemExecutionEnv: false + inputData: default ); _evmState = new EvmState(long.MaxValue, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs index 4f736d51335..13d36dd9f18 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs @@ -88,8 +88,7 @@ public void GlobalSetup() value: 0, transferValue: 0, txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, codeInfoRepository), - inputData: default, - isSystemExecutionEnv: false + inputData: default ); _evmState = new EvmState(100_000_000L, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs index 90475d31476..ca0f1afa3ac 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs @@ -99,8 +99,7 @@ public void GlobalSetup() value: 0, transferValue: 0, txExecutionContext: new TxExecutionContext(_header, Address.Zero, 0, null, codeInfoRepository), - inputData: default, - isSystemExecutionEnv: false + inputData: default ); _evmState = new EvmState(100_000_000L, _environment, ExecutionType.TRANSACTION, true, _stateProvider.TakeSnapshot(), false); diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index f983cb7f204..cf3f18b860d 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -23,7 +23,7 @@ namespace Nethermind.Evm.Test; -[TestFixture] +[TestFixture, Parallelizable] public class CodeInfoRepositoryTests { [Test] @@ -220,7 +220,7 @@ public static IEnumerable CountsAsAccessedCases() } [TestCaseSource(nameof(CountsAsAccessedCases))] - public void InsertFromAuthorizations_TwoValidAuthorizations_(AuthorizationTuple[] tuples, Address[] shouldCountAsAccessed) + public void InsertFromAuthorizations_CombinationOfValidAndInvalidTuples_AddsTheCorrectAddressesToAccessedAddresses(AuthorizationTuple[] tuples, Address[] shouldCountAsAccessed) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); diff --git a/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs b/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs index 5700d30de35..a63ad0ef40e 100644 --- a/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs +++ b/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs @@ -16,6 +16,7 @@ using Nethermind.Core.Timers; using Nethermind.Crypto; using Nethermind.Db; +using Nethermind.Evm; using Nethermind.Logging; using Nethermind.Network.P2P; using Nethermind.Network.P2P.Analyzers; @@ -62,7 +63,9 @@ public void SetUp() new TxPoolConfig(), new TxValidator(TestBlockchainIds.ChainId), LimboLogs.Instance, - new TransactionComparerProvider(specProvider, tree).GetDefaultComparer()); + new TransactionComparerProvider(specProvider, tree).GetDefaultComparer(), + new CodeInfoRepository(specProvider.ChainId), + stateProvider); ISyncServer syncSrv = Substitute.For(); BlockHeader head = Build.A.BlockHeader.WithNumber(1).TestObject; syncSrv.Head.Returns(head); From 5ac555e03c4fe030267f4a4e53ed6f7fa59d9636 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 18 Sep 2024 12:15:42 +0200 Subject: [PATCH 371/551] tx validator for setcode refactor --- .../Validators/TxValidatorTests.cs | 33 +++++++-- .../Validators/TxValidator.cs | 68 ++++++++++++++++++- 2 files changed, 95 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 47f47cc8b59..71e6e5d0296 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -562,7 +562,7 @@ public void IsWellFormed_AuthorizationListTxInPragueSpec_ReturnsTrue() Transaction tx = txBuilder.TestObject; TxValidator txValidator = new(TestBlockchainIds.ChainId); - Assert.That(txValidator.IsWellFormed(tx, Prague.Instance), Is.True); + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance).AsBool, Is.True); } [Test] @@ -580,9 +580,9 @@ public void IsWellFormed_EmptyAuthorizationList_ReturnsFalse() Transaction tx = txBuilder.TestObject; TxValidator txValidator = new(TestBlockchainIds.ChainId); - Assert.That(txValidator.IsWellFormed(tx, Prague.Instance), Is.False); + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance).AsBool, Is.False); } - + [Test] public void IsWellFormed_NullAuthorizationList_ReturnsFalse() { @@ -598,10 +598,10 @@ public void IsWellFormed_NullAuthorizationList_ReturnsFalse() Transaction tx = txBuilder.TestObject; TxValidator txValidator = new(TestBlockchainIds.ChainId); - Assert.That(txValidator.IsWellFormed(tx, Prague.Instance), Is.False); + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance).AsBool, Is.False); } - public static object[] BadSignatures = + private static object[] BadSignatures = { new object[] { 1ul, (UInt256)1, Secp256K1Curve.HalfNPlusOne, false}, new object[] { 1ul, UInt256.Zero, Secp256K1Curve.HalfN, true }, @@ -625,6 +625,29 @@ public void IsWellFormed_AuthorizationTupleHasBadSignature_ReturnsFalse(ulong yP Assert.That(txValidator.IsWellFormed(tx, Prague.Instance).AsBool, Is.EqualTo(expected)); } + private static IEnumerable NonSetCodeTypes() => + Enum.GetValues().Where(t => t != TxType.SetCode && t != TxType.DepositTx); + + [TestCaseSource(nameof(NonSetCodeTypes))] + public void IsWellFormed_NonSetCodeTxHasAuthorizationList_ReturnsFalse(TxType type) + { + var x = Enum.GetValues().Where(t => t != TxType.SetCode); + TransactionBuilder txBuilder = Build.A.Transaction + .WithType(type) + .WithTo(TestItem.AddressA) + .WithMaxFeePerGas(100000) + .WithGasLimit(1000000) + .WithChainId(TestBlockchainIds.ChainId) + .WithShardBlobTxTypeAndFieldsIfBlobTx() + .WithAuthorizationCode(new AuthorizationTuple(TestBlockchainIds.ChainId, TestItem.AddressA, 0, new Signature(new byte[65]))) + .SignedAndResolved(); + + Transaction tx = txBuilder.TestObject; + TxValidator txValidator = new(TestBlockchainIds.ChainId); + + Assert.That(txValidator.IsWellFormed(tx, Prague.Instance).Error, Is.EqualTo(TxErrorMessages.NotAllowedAuthorizationList)); + } + private static byte[] MakeArray(int count, params byte[] elements) => elements.Take(Math.Min(count, elements.Length)) .Concat(new byte[Math.Max(0, count - elements.Length)]) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 23e7f5fc810..fcc971435a6 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -12,6 +12,7 @@ using Nethermind.Db; using Nethermind.Evm; using Nethermind.Int256; +using System.Linq; namespace Nethermind.Consensus.Validators; @@ -26,6 +27,7 @@ public TxValidator(ulong chainId) new LegacySignatureTxValidator(chainId), ContractSizeTxValidator.Instance, NonBlobFieldsTxValidator.Instance, + NonSetCodeFieldsTxValidator.Instance ])); RegisterValidator(TxType.AccessList, new CompositeTxValidator([ new ReleaseSpecTxValidator(static spec => spec.IsEip2930Enabled), @@ -34,6 +36,7 @@ public TxValidator(ulong chainId) new ExpectedChainIdTxValidator(chainId), ContractSizeTxValidator.Instance, NonBlobFieldsTxValidator.Instance, + NonSetCodeFieldsTxValidator.Instance ])); RegisterValidator(TxType.EIP1559, new CompositeTxValidator([ new ReleaseSpecTxValidator(static spec => spec.IsEip1559Enabled), @@ -43,6 +46,7 @@ public TxValidator(ulong chainId) GasFieldsTxValidator.Instance, ContractSizeTxValidator.Instance, NonBlobFieldsTxValidator.Instance, + NonSetCodeFieldsTxValidator.Instance ])); RegisterValidator(TxType.Blob, new CompositeTxValidator([ new ReleaseSpecTxValidator(static spec => spec.IsEip4844Enabled), @@ -52,7 +56,18 @@ public TxValidator(ulong chainId) GasFieldsTxValidator.Instance, ContractSizeTxValidator.Instance, BlobFieldsTxValidator.Instance, - MempoolBlobTxValidator.Instance + MempoolBlobTxValidator.Instance, + NonSetCodeFieldsTxValidator.Instance + ])); + RegisterValidator(TxType.SetCode, new CompositeTxValidator([ + new ReleaseSpecTxValidator(static spec => spec.IsEip7702Enabled), + IntrinsicGasTxValidator.Instance, + SignatureTxValidator.Instance, + new ExpectedChainIdTxValidator(chainId), + GasFieldsTxValidator.Instance, + ContractSizeTxValidator.Instance, + NonBlobFieldsTxValidator.Instance, + SetCodeTxValidator.Instance, ])); } @@ -151,6 +166,18 @@ private NonBlobFieldsTxValidator() { } }; } +public sealed class NonSetCodeFieldsTxValidator : ITxValidator +{ + public static readonly NonSetCodeFieldsTxValidator Instance = new(); + private NonSetCodeFieldsTxValidator() { } + + public ValidationResult IsWellFormed(Transaction transaction, IReleaseSpec releaseSpec) => transaction switch + { + { AuthorizationList: not null } => TxErrorMessages.NotAllowedAuthorizationList, + _ => ValidationResult.Success + }; +} + public sealed class BlobFieldsTxValidator : ITxValidator { public static readonly BlobFieldsTxValidator Instance = new(); @@ -283,3 +310,42 @@ public sealed class SignatureTxValidator : BaseSignatureTxValidator public static readonly SignatureTxValidator Instance = new(); private SignatureTxValidator() { } } + +public sealed class SetCodeTxValidator : ITxValidator +{ + public static readonly SetCodeTxValidator Instance = new(); + private SetCodeTxValidator() { } + + public ValidationResult IsWellFormed(Transaction transaction, IReleaseSpec releaseSpec) + { + return Validate7702Fields(transaction); + } + + private ValidationResult Validate7702Fields(Transaction tx) + { + if (tx.IsContractCreation) + { + return TxErrorMessages.NotAllowedCreateTransaction; + } + if (tx.AuthorizationList is null || tx.AuthorizationList.Length == 0) + { + return TxErrorMessages.MissingAuthorizationList; + } + if (tx.AuthorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature))) + { + return TxErrorMessages.InvalidAuthoritySignature; + } + return ValidationResult.Success; + } + private bool ValidateAuthoritySignature(Signature signature) + { + UInt256 sValue = new(signature.SAsSpan, isBigEndian: true); + + if (sValue >= Secp256K1Curve.HalfNPlusOne) + { + return false; + } + + return signature.RecoveryId is 0 or 1; + } +} From 7b5f6275d5a75d9c656a8788b09a21e039fed38f Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 13:00:37 +0200 Subject: [PATCH 372/551] fix tests --- .../EngineModuleTests.V4.cs | 64 +++---------------- .../Data/ExecutionPayloadV4.cs | 18 +----- 2 files changed, 10 insertions(+), 72 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index afce9fc1ece..870935fedca 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -323,46 +323,23 @@ public virtual async Task if (requests is not null) { - (int depositCount, int withdrawalRequestCount) = requests.GetTypeCounts(); - deposits = new Deposit[depositCount]; - withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; - int depositIndex = 0; - int withdrawalRequestIndex = 0; - for (int i = 0; i < requests.Length; ++i) - { - ConsensusRequest request = requests[i]; - if (request.Type == ConsensusRequestsType.Deposit) - { - deposits[depositIndex++] = (Deposit)request; - } - else - { - withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)request; - } - } + (deposits, withdrawalRequests) = requests.SplitRequests(); } - ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); - using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); - ExecutionPayloadV4 executionPayload1 = await SendNewBlockV4(rpc, chain, requests); - Transaction[] txs = BuildTransactions( - chain, executionPayload1.BlockHash, TestItem.PrivateKeyA, TestItem.AddressB, 3, 0, out _, out _); - - chain.AddTransactions(txs); - + ExecutionPayloadV4 executionPayload1 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); - Hash256[] blockHashes = new Hash256[] - { + Hash256[] blockHashes = + [ executionPayload1.BlockHash, TestItem.KeccakA, executionPayload2.BlockHash - }; + ]; IEnumerable payloadBodies = rpc.engine_getPayloadBodiesByHashV2(blockHashes).Result.Data; ExecutionPayloadBodyV2Result?[] expected = { new (Array.Empty(), Array.Empty() , deposits, withdrawalRequests), null, - new (txs, Array.Empty(), deposits, withdrawalRequests), + new (Array.Empty(), Array.Empty(), deposits, withdrawalRequests), }; payloadBodies.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering()); @@ -379,34 +356,13 @@ public virtual async Task if (requests is not null) { - (int depositCount, int withdrawalRequestCount) = requests.GetTypeCounts(); - deposits = new Deposit[depositCount]; - withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; - int depositIndex = 0; - int withdrawalRequestIndex = 0; - for (int i = 0; i < requests.Length; ++i) - { - ConsensusRequest request = requests[i]; - if (request.Type == ConsensusRequestsType.Deposit) - { - deposits[depositIndex++] = (Deposit)request; - } - else - { - withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)request; - } - } + (deposits, withdrawalRequests) = requests.SplitRequests(); } ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); - using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); - ExecutionPayloadV4 executionPayload1 = await SendNewBlockV4(rpc, chain, requests); - Transaction[] txs = BuildTransactions( - chain, executionPayload1.BlockHash, TestItem.PrivateKeyA, TestItem.AddressB, 3, 0, out _, out _); - - chain.AddTransactions(txs); + await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); @@ -418,12 +374,10 @@ await rpc.engine_forkchoiceUpdatedV3(new ForkchoiceStateV1(executionPayload2.Blo rpc.engine_getPayloadBodiesByRangeV2(1, 3).Result.Data; ExecutionPayloadBodyV2Result?[] expected = { - new (txs, Array.Empty() , deposits, withdrawalRequests), + new (Array.Empty(), Array.Empty() , deposits, withdrawalRequests), }; payloadBodies.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering()); - - } [Test] diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index 7a02a4dd40b..0f7933be113 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -32,23 +32,7 @@ public class ExecutionPayloadV4 : ExecutionPayloadV3, IExecutionPayloadFactory Date: Wed, 18 Sep 2024 13:04:32 +0200 Subject: [PATCH 373/551] cosmetic --- .../EngineModuleTests.V4.cs | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 870935fedca..bfebe139a52 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -317,10 +317,8 @@ public virtual async Task getPayloadBodiesByHashV2_should_return_payload_bodies_in_order_of_request_block_hashes_and_null_for_unknown_hashes( ConsensusRequest[]? requests) { - Deposit[]? deposits = null; WithdrawalRequest[]? withdrawalRequests = null; - if (requests is not null) { (deposits, withdrawalRequests) = requests.SplitRequests(); @@ -341,7 +339,6 @@ public virtual async Task null, new (Array.Empty(), Array.Empty(), deposits, withdrawalRequests), }; - payloadBodies.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering()); } @@ -350,10 +347,8 @@ public virtual async Task getPayloadBodiesByRangeV2_should_return_payload_bodies_in_order_of_request_range_and_null_for_unknown_indexes( ConsensusRequest[]? requests) { - Deposit[]? deposits = null; WithdrawalRequest[]? withdrawalRequests = null; - if (requests is not null) { (deposits, withdrawalRequests) = requests.SplitRequests(); @@ -363,13 +358,10 @@ public virtual async Task using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); - ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); - await rpc.engine_forkchoiceUpdatedV3(new ForkchoiceStateV1(executionPayload2.BlockHash!, executionPayload2.BlockHash!, executionPayload2.BlockHash!)); - IEnumerable payloadBodies = rpc.engine_getPayloadBodiesByRangeV2(1, 3).Result.Data; ExecutionPayloadBodyV2Result?[] expected = @@ -392,16 +384,6 @@ public async Task getPayloadBodiesByRangeV2_empty_response() payloadBodies.Should().BeEquivalentTo(expected); } - private async Task SendNewBlockV4(IEngineRpcModule rpc, MergeTestBlockchain chain, ConsensusRequest[]? requests) - { - ExecutionPayloadV4 executionPayload = CreateBlockRequestV4(chain, CreateParentBlockRequestOnHead(chain.BlockTree), TestItem.AddressD, Array.Empty(), 0, 0, Array.Empty(), parentBeaconBlockRoot: TestItem.KeccakA, requests: requests); - ResultWrapper executePayloadResult = await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot); - - executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); - - return executionPayload; - } - private async Task BuildAndSendNewBlockV4( IEngineRpcModule rpc, MergeTestBlockchain chain, From f3c2c52138d5ed724c074cf7946267e4b687ba0a Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 13:12:20 +0200 Subject: [PATCH 374/551] fix whitespace? --- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index bfebe139a52..8df626fff7b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -328,10 +328,8 @@ public virtual async Task IEngineRpcModule rpc = CreateEngineModule(chain); ExecutionPayloadV4 executionPayload1 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); - Hash256[] blockHashes = - [ - executionPayload1.BlockHash, TestItem.KeccakA, executionPayload2.BlockHash - ]; + + Hash256[] blockHashes = [executionPayload1.BlockHash, TestItem.KeccakA, executionPayload2.BlockHash]; IEnumerable payloadBodies = rpc.engine_getPayloadBodiesByHashV2(blockHashes).Result.Data; ExecutionPayloadBodyV2Result?[] expected = { From 76b8b6f4143d2ba16675b8d624911c922c78f050 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 13:15:23 +0200 Subject: [PATCH 375/551] whitespace? --- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 8df626fff7b..1261dce80cc 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -328,7 +328,6 @@ public virtual async Task IEngineRpcModule rpc = CreateEngineModule(chain); ExecutionPayloadV4 executionPayload1 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); - Hash256[] blockHashes = [executionPayload1.BlockHash, TestItem.KeccakA, executionPayload2.BlockHash]; IEnumerable payloadBodies = rpc.engine_getPayloadBodiesByHashV2(blockHashes).Result.Data; From 540b86cbd89ac840a1a6c7c2ecd98c2814307aa9 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 13:24:05 +0200 Subject: [PATCH 376/551] fix test --- .../Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs index 3696e5d2dd7..820809bf95f 100644 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Linq; using FluentAssertions; using Nethermind.Consensus.Requests; @@ -91,6 +92,8 @@ public void ShouldProcessWithdrawalRequest() WithdrawalRequest withdrawalRequestResult = withdrawalRequests[0]; - withdrawalRequestResult.Should().BeEquivalentTo(withdrawalRequest); + withdrawalRequestResult.Should().BeEquivalentTo(withdrawalRequest, options => options + .Using>(ctx => ctx.Subject.Span.SequenceEqual(ctx.Expectation.Span).Should().BeTrue()) + .WhenTypeIs>()); } } From ce64d973332bdcf526b1de34a15c1f952b091349 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 13:40:13 +0200 Subject: [PATCH 377/551] cosmetic --- .../WithdrawalRequestsProcessorTests.cs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs index 820809bf95f..382afd6c0c2 100644 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -25,19 +25,17 @@ namespace Nethermind.Evm.Test; -public class WithdrawalRequestProcessorTests +public class WithdrawalRequestProcessorTests(ITransactionProcessor transactionProcessor) { private ISpecProvider _specProvider; - private IEthereumEcdsa _ethereumEcdsa; - private ITransactionProcessor _transactionProcessor; private IWorldState _stateProvider; private ICodeInfoRepository _codeInfoRepository; private static readonly UInt256 AccountBalance = 1.Ether(); - private readonly Address eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; + private readonly Address _eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; [SetUp] public void Setup() @@ -46,7 +44,7 @@ public void Setup() MemDb stateDb = new(); TrieStore trieStore = new(stateDb, LimboLogs.Instance); _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - _stateProvider.CreateAccount(eip7002Account, AccountBalance); + _stateProvider.CreateAccount(_eip7002Account, AccountBalance); _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); @@ -54,9 +52,9 @@ public void Setup() VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); - _transactionProcessor = Substitute.For(); + transactionProcessor = Substitute.For(); - _transactionProcessor.Execute(Arg.Any(), Arg.Any(), Arg.Any()) + transactionProcessor.Execute(Arg.Any(), Arg.Any(), Arg.Any()) .Returns(ci => { CallOutputTracer tracer = ci.Arg(); @@ -64,7 +62,7 @@ public void Setup() return new TransactionResult(); }); - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); + new EthereumEcdsa(_specProvider.ChainId); } @@ -73,11 +71,11 @@ public void ShouldProcessWithdrawalRequest() { IReleaseSpec spec = Substitute.For(); spec.IsEip7002Enabled.Returns(true); - spec.Eip7002ContractAddress.Returns(eip7002Account); + spec.Eip7002ContractAddress.Returns(_eip7002Account); Block block = Build.A.Block.TestObject; - WithdrawalRequestsProcessor withdrawalRequestsProcessor = new(transactionProcessor: _transactionProcessor); + WithdrawalRequestsProcessor withdrawalRequestsProcessor = new(transactionProcessor: transactionProcessor); var withdrawalRequest = new WithdrawalRequest() { From 66bd24e62b41167b78a1ebceef438a44bf5b8fde Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 13:45:04 +0200 Subject: [PATCH 378/551] fix test --- .../WithdrawalRequestsProcessorTests.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs index 382afd6c0c2..820809bf95f 100644 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -25,17 +25,19 @@ namespace Nethermind.Evm.Test; -public class WithdrawalRequestProcessorTests(ITransactionProcessor transactionProcessor) +public class WithdrawalRequestProcessorTests { private ISpecProvider _specProvider; + private IEthereumEcdsa _ethereumEcdsa; + private ITransactionProcessor _transactionProcessor; private IWorldState _stateProvider; private ICodeInfoRepository _codeInfoRepository; private static readonly UInt256 AccountBalance = 1.Ether(); - private readonly Address _eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; + private readonly Address eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; [SetUp] public void Setup() @@ -44,7 +46,7 @@ public void Setup() MemDb stateDb = new(); TrieStore trieStore = new(stateDb, LimboLogs.Instance); _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - _stateProvider.CreateAccount(_eip7002Account, AccountBalance); + _stateProvider.CreateAccount(eip7002Account, AccountBalance); _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); @@ -52,9 +54,9 @@ public void Setup() VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); - transactionProcessor = Substitute.For(); + _transactionProcessor = Substitute.For(); - transactionProcessor.Execute(Arg.Any(), Arg.Any(), Arg.Any()) + _transactionProcessor.Execute(Arg.Any(), Arg.Any(), Arg.Any()) .Returns(ci => { CallOutputTracer tracer = ci.Arg(); @@ -62,7 +64,7 @@ public void Setup() return new TransactionResult(); }); - new EthereumEcdsa(_specProvider.ChainId); + _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); } @@ -71,11 +73,11 @@ public void ShouldProcessWithdrawalRequest() { IReleaseSpec spec = Substitute.For(); spec.IsEip7002Enabled.Returns(true); - spec.Eip7002ContractAddress.Returns(_eip7002Account); + spec.Eip7002ContractAddress.Returns(eip7002Account); Block block = Build.A.Block.TestObject; - WithdrawalRequestsProcessor withdrawalRequestsProcessor = new(transactionProcessor: transactionProcessor); + WithdrawalRequestsProcessor withdrawalRequestsProcessor = new(transactionProcessor: _transactionProcessor); var withdrawalRequest = new WithdrawalRequest() { From 6465805e47c749999fa9fb67f1b40cef03cc3009 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 18 Sep 2024 13:57:21 +0200 Subject: [PATCH 379/551] fix tx pool tests --- src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index 08b6ef8ea4c..b61b9760331 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1790,7 +1790,6 @@ private static ISpecProvider GetPragueSpecProvider() { var specProvider = Substitute.For(); specProvider.GetSpec(Arg.Any()).Returns(Prague.Instance); - specProvider.GetSpec(Arg.Any()).Returns(Prague.Instance); return specProvider; } From 958df8a6705701e063820d1b6aeec66be07bcd43 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 18 Sep 2024 16:15:35 +0200 Subject: [PATCH 380/551] use BlockchainId instead --- .../Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs | 2 +- .../Nethermind.Core.Test/Blockchain/TestBlockchain.cs | 2 +- .../Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs | 2 +- .../Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs | 2 +- src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs | 2 +- .../Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs index 0e0768fe5d9..cc87fa625ba 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs @@ -48,7 +48,7 @@ public ReadOnlyTxProcessingEnv( IWorldState? worldStateToWarmUp = null ) : base(worldStateManager, readOnlyBlockTree, specProvider, logManager, worldStateToWarmUp) { - CodeInfoRepository = new CodeInfoRepository(1, (worldStateToWarmUp as IPreBlockCaches)?.Caches.PrecompileCache); + CodeInfoRepository = new CodeInfoRepository(specProvider.ChainId, (worldStateToWarmUp as IPreBlockCaches)?.Caches.PrecompileCache); Machine = new VirtualMachine(BlockhashProvider, specProvider, CodeInfoRepository, logManager); BlockTree = readOnlyBlockTree ?? throw new ArgumentNullException(nameof(readOnlyBlockTree)); BlockhashProvider = new BlockhashProvider(BlockTree, specProvider, StateProvider, logManager); diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 5589918ccf0..1d1b874cc43 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -187,7 +187,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = NonceManager = new NonceManager(chainHeadInfoProvider.AccountStateProvider); _trieStoreWatcher = new TrieStoreBoundaryWatcher(WorldStateManager, BlockTree, LogManager); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); ReceiptStorage = new InMemoryReceiptStorage(blockTree: BlockTree); VirtualMachine virtualMachine = new(new BlockhashProvider(BlockTree, SpecProvider, State, LogManager), SpecProvider, codeInfoRepository, LogManager); TxProcessor = new TransactionProcessor(SpecProvider, State, virtualMachine, codeInfoRepository, LogManager); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs index ff5be83be44..ac09dfa9bbe 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs @@ -35,7 +35,7 @@ public void Setup() _specProvider = new TestSpecProvider(Cancun.Instance); TrieStore trieStore = new(stateDb, LimboLogs.Instance); _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(_specProvider.ChainId); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 785c6b1306e..b87ed6c31bf 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -39,7 +39,7 @@ public void Setup() _specProvider = new TestSpecProvider(Prague.Instance); TrieStore trieStore = new(stateDb, LimboLogs.Instance); _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(_specProvider.ChainId); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); diff --git a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs index b93ceb38d31..f30ba5e586f 100644 --- a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs +++ b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs @@ -68,7 +68,7 @@ public virtual void Setup() TestState = new WorldState(trieStore, codeDb, logManager); _ethereumEcdsa = new EthereumEcdsa(SpecProvider.ChainId); IBlockhashProvider blockhashProvider = new TestBlockhashProvider(SpecProvider); - CodeInfoRepository = new CodeInfoRepository(1); + CodeInfoRepository = new CodeInfoRepository(SpecProvider.ChainId); Machine = new VirtualMachine(blockhashProvider, SpecProvider, CodeInfoRepository, logManager); _processor = new TransactionProcessor(SpecProvider, TestState, Machine, CodeInfoRepository, logManager); } diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs index 0e02b37e349..f60985dd373 100644 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -49,7 +49,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - _codeInfoRepository = new CodeInfoRepository(1); + _codeInfoRepository = new CodeInfoRepository(_specProvider.ChainId); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); From 3f5e57b4640db60c919adbf8e11c92c8f3aca6ee Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 18 Sep 2024 16:19:57 +0200 Subject: [PATCH 381/551] unnecessary using --- src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index c82b92cddca..80860055d80 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -18,7 +18,6 @@ using Nethermind.State; using Nethermind.Int256; using Nethermind.Crypto; -using System.Linq; namespace Nethermind.Evm; From 4c564b36161fac42f23f5278172aa90075a2684d Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 18 Sep 2024 17:18:52 +0200 Subject: [PATCH 382/551] use BlockchainId instead --- .../Producers/DevBlockproducerTests.cs | 2 +- src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs | 2 +- .../Nethermind.Clique.Test/CliqueBlockProducerTests.cs | 2 +- .../Nethermind.Core.Test/Blockchain/TestBlockchain.cs | 2 +- .../Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs | 2 +- src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs | 2 +- .../Nethermind.Evm.Test/Tracing/GasEstimationTests.cs | 2 +- .../Nethermind.Evm.Test/TransactionProcessorFeeTests.cs | 2 +- src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs | 2 +- .../Modules/Trace/ParityStyleTracerTests.cs | 2 +- .../Nethermind.Synchronization.Test/SyncThreadTests.cs | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs index 75bd5a9a1a6..be6b11b8c65 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs @@ -59,7 +59,7 @@ public void Test() LimboLogs.Instance); StateReader stateReader = new(trieStore, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); BlockhashProvider blockhashProvider = new(blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); VirtualMachine virtualMachine = new( blockhashProvider, specProvider, diff --git a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs index 6c190ae131e..66dda5cb578 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs @@ -60,7 +60,7 @@ public void Setup() new CodeInfoRepository(specProvider.ChainId), stateProvider); BlockhashProvider blockhashProvider = new(_blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); VirtualMachine virtualMachine = new( blockhashProvider, specProvider, diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs index d2922210c18..35869348401 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs @@ -131,7 +131,7 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f _genesis.Header.Hash = _genesis.Header.CalculateHash(); _genesis3Validators.Header.Hash = _genesis3Validators.Header.CalculateHash(); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); TransactionProcessor transactionProcessor = new(goerliSpecProvider, stateProvider, new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, nodeLogManager), codeInfoRepository, diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 1d1b874cc43..81c0955c251 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -187,7 +187,7 @@ protected virtual async Task Build(ISpecProvider? specProvider = NonceManager = new NonceManager(chainHeadInfoProvider.AccountStateProvider); _trieStoreWatcher = new TrieStoreBoundaryWatcher(WorldStateManager, BlockTree, LogManager); - CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(SpecProvider.ChainId); ReceiptStorage = new InMemoryReceiptStorage(blockTree: BlockTree); VirtualMachine virtualMachine = new(new BlockhashProvider(BlockTree, SpecProvider, State, LogManager), SpecProvider, codeInfoRepository, LogManager); TxProcessor = new TransactionProcessor(SpecProvider, State, virtualMachine, codeInfoRepository, LogManager); diff --git a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs index 5f83f980809..ee29008b8ae 100644 --- a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs +++ b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs @@ -49,7 +49,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - _codeInfoRepository = new CodeInfoRepository(0); + _codeInfoRepository = new CodeInfoRepository(_specProvider.ChainId); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs index 4d777d25d5d..49eee238201 100644 --- a/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs @@ -158,7 +158,7 @@ private static string Run(byte[] input) new MemDb(), LimboLogs.Instance); ISpecProvider specProvider = new TestSpecProvider(London.Instance); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); VirtualMachine virtualMachine = new( new TestBlockhashProvider(specProvider), specProvider, diff --git a/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs b/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs index 6259babaeb6..e621b3e968f 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs @@ -362,7 +362,7 @@ public TestEnvironment() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(_specProvider.ChainId); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs index 5a7461c898a..ee618ce0e46 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs @@ -42,7 +42,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(_specProvider.ChainId); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs index 7b32f5be3ea..e2346ec66d1 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs @@ -58,7 +58,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(_specProvider.ChainId); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs index 1809bc0f5be..e31803491b3 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs @@ -64,7 +64,7 @@ public void Setup() _stateReader = new StateReader(trieStore, codeDb, LimboLogs.Instance); BlockhashProvider blockhashProvider = new(_blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); VirtualMachine virtualMachine = new(blockhashProvider, specProvider, codeInfoRepository, LimboLogs.Instance); TransactionProcessor transactionProcessor = new(specProvider, stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs index dfd76d2fd39..e768d0ca11e 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs @@ -279,7 +279,7 @@ private SyncTestContext CreateSyncManager(int index) new CodeInfoRepository(specProvider.ChainId), stateProvider); BlockhashProvider blockhashProvider = new(tree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); VirtualMachine virtualMachine = new(blockhashProvider, specProvider, codeInfoRepository, logManager); Always sealValidator = Always.Valid; From ff823b02e4d2e551688395010c0ae648d424bbde Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 19:59:52 +0200 Subject: [PATCH 383/551] revert proof module --- .../Modules/Proof/ProofRpcModuleTests.cs | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs index 9d5fea089a8..7f74b75145a 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Proof/ProofRpcModuleTests.cs @@ -362,7 +362,7 @@ public async Task Can_call_with_storage_load() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -375,7 +375,7 @@ public async Task Can_call_with_many_storage_loads() .Op(Instruction.SLOAD) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -388,7 +388,7 @@ public async Task Can_call_with_storage_write() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -402,7 +402,7 @@ public async Task Can_call_with_extcodecopy() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -416,7 +416,7 @@ public async Task Can_call_with_extcodecopy_to_system_account() .Op(Instruction.EXTCODECOPY) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -427,7 +427,7 @@ public async Task Can_call_with_extcodesize() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -438,7 +438,7 @@ public async Task Can_call_with_extcodesize_to_system_account() .Op(Instruction.EXTCODESIZE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -450,7 +450,7 @@ public async Task Can_call_with_extcodehash() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -462,7 +462,7 @@ public async Task Can_call_with_extcodehash_to_system_account() .Op(Instruction.EXTCODEHASH) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -473,7 +473,7 @@ public async Task Can_call_with_just_basic_addresses() .Op(Instruction.STOP) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -486,7 +486,7 @@ public async Task Can_call_with_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -498,7 +498,7 @@ public async Task Can_call_with_self_balance() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -510,7 +510,7 @@ public async Task Can_call_with_balance_of_system_account() .Op(Instruction.BALANCE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -562,7 +562,7 @@ public async Task Can_call_with_delegate_call_to_system_account() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2)); } [TestCase] @@ -598,7 +598,7 @@ public async Task Can_call_with_call_with_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -615,7 +615,7 @@ public async Task Can_call_with_static_call() .Op(Instruction.STATICCALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -632,7 +632,7 @@ public async Task Can_call_with_delegate_call() .Op(Instruction.DELEGATECALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(_createSystemAccount ? 3 : 2)); + Assert.That(result.Accounts.Length, Is.EqualTo(_createSystemAccount && _useNonZeroGasPrice ? 3 : 2)); } [TestCase] @@ -650,7 +650,7 @@ public async Task Can_call_with_call_with_non_zero_value() .Op(Instruction.CALL) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -663,7 +663,7 @@ public async Task Can_call_with_self_destruct() .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(2 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -691,7 +691,7 @@ public async Task Can_call_with_many_storage_writes() .Op(Instruction.SSTORE) .Done; CallResultWithProof result = await TestCallWithCode(code); - Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_createSystemAccount ? 1 : 0))); + Assert.That(result.Accounts.Length, Is.EqualTo(1 + (_useNonZeroGasPrice ? 1 : 0))); } [TestCase] @@ -909,7 +909,7 @@ private void AddAccount(WorldState stateProvider, Address account, UInt256 initi private void AddCode(WorldState stateProvider, Address account, byte[] code) { - stateProvider.InsertCode(account, code, MuirGlacier.Instance, false); + stateProvider.InsertCode(account, code, MuirGlacier.Instance); stateProvider.Commit(MainnetSpecProvider.Instance.GenesisSpec, NullStateTracer.Instance); } } From 26536137fa124e7a2dc0c7422b25b9bb0ecf7b13 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 20:03:50 +0200 Subject: [PATCH 384/551] fix one more test --- .../Requests/WithdrawalRequestsProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 7e0ea40a9c8..93f04d38d55 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -25,7 +25,7 @@ public class WithdrawalRequestsProcessor(ITransactionProcessor transactionProces public IEnumerable ReadWithdrawalRequests(Block block, IWorldState state, IReleaseSpec spec) { - if (!spec.IsEip7002Enabled || !state.AccountExists(spec.Eip7002ContractAddress)) + if (!spec.WithdrawalRequestsEnabled || !state.AccountExists(spec.Eip7002ContractAddress)) { yield break; } From 1857a61f09b3d7d70d364f2b6f505a3e882924a3 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 20:06:27 +0200 Subject: [PATCH 385/551] fix whitespace --- src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index b61b9760331..2de472b35dd 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1694,7 +1694,7 @@ public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType { yield return (new byte[16], AcceptTxResult.SenderIsContract); //Delegation code - yield return ([.. Eip7702Constants.DelegationHeader, .. new byte[20]], AcceptTxResult.Accepted); + yield return ([..Eip7702Constants.DelegationHeader, ..new byte[20]], AcceptTxResult.Accepted); } [TestCaseSource(nameof(CodeCases))] public void SubmitTx_CodeIsNotDelegationAndDelegation_DelegationIsAccepted((byte[] code, AcceptTxResult expected) testCase) From 95fb7fa68977e2ac25ade8372462cfaaca70b803 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 20:10:26 +0200 Subject: [PATCH 386/551] whitespaces? --- src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index 2de472b35dd..c8a8e7c0a81 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1694,7 +1694,7 @@ public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType { yield return (new byte[16], AcceptTxResult.SenderIsContract); //Delegation code - yield return ([..Eip7702Constants.DelegationHeader, ..new byte[20]], AcceptTxResult.Accepted); + yield return ([.. Eip7702Constants.DelegationHeader,.. new byte[20]], AcceptTxResult.Accepted); } [TestCaseSource(nameof(CodeCases))] public void SubmitTx_CodeIsNotDelegationAndDelegation_DelegationIsAccepted((byte[] code, AcceptTxResult expected) testCase) From 5c41d0a7c40281da67580f2cf3dbb4ea3f306cf9 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 22:39:20 +0200 Subject: [PATCH 387/551] fix whitespace --- .../Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs | 3 --- .../ConsolidationRequestDecoder.cs | 1 - src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs index 69ce04f728b..c805ffae5f8 100644 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -32,11 +32,8 @@ public class WithdrawalRequestProcessorTests private IEthereumEcdsa _ethereumEcdsa; private ITransactionProcessor _transactionProcessor; private IWorldState _stateProvider; - private ICodeInfoRepository _codeInfoRepository; - private static readonly UInt256 AccountBalance = 1.Ether(); - private readonly Address eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; [SetUp] diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs index b15aca2f51b..355430d2ec9 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs @@ -10,7 +10,6 @@ namespace Nethermind.Serialization.Rlp; public class ConsolidationRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder { public static ConsolidationRequestDecoder Instance { get; } = new(); - public int GetLength(ConsolidationRequest item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index c8a8e7c0a81..b61b9760331 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1694,7 +1694,7 @@ public void Should_correctly_add_tx_to_local_pool_when_underpaid([Values] TxType { yield return (new byte[16], AcceptTxResult.SenderIsContract); //Delegation code - yield return ([.. Eip7702Constants.DelegationHeader,.. new byte[20]], AcceptTxResult.Accepted); + yield return ([.. Eip7702Constants.DelegationHeader, .. new byte[20]], AcceptTxResult.Accepted); } [TestCaseSource(nameof(CodeCases))] public void SubmitTx_CodeIsNotDelegationAndDelegation_DelegationIsAccepted((byte[] code, AcceptTxResult expected) testCase) From e8c178209243a0b5eeb7c9e5788f6e244073a845 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 22:43:32 +0200 Subject: [PATCH 388/551] ?fix --- .../Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 71e6e5d0296..486000e7bb9 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -582,7 +582,6 @@ public void IsWellFormed_EmptyAuthorizationList_ReturnsFalse() Assert.That(txValidator.IsWellFormed(tx, Prague.Instance).AsBool, Is.False); } - [Test] public void IsWellFormed_NullAuthorizationList_ReturnsFalse() { From e8011ff5fb3996171c1779791b3f5ea12f796f0e Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 22:47:17 +0200 Subject: [PATCH 389/551] fix --- src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index d806879df6d..a995bc78284 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -144,7 +144,7 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) { transactionProcessor.Execute(test.Transaction, new BlockExecutionContext(header), txTracer); } - else + else { if (!txIsValid) _logger.Info($"Skipping invalid tx with error: {txIsValid.Error}"); From 28839a9ab2635551b20ef9fc48ae7fe6e8316e68 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 22:56:21 +0200 Subject: [PATCH 390/551] fix Evm.Test --- .../Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs index ee29008b8ae..06f9249cbb1 100644 --- a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs +++ b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Linq; using FluentAssertions; using Nethermind.Consensus.Requests; @@ -92,6 +93,8 @@ public void ShouldProcessConsolidationRequest() ConsolidationRequest ConsolidationRequestResult = ConsolidationRequests[0]; - ConsolidationRequestResult.Should().BeEquivalentTo(ConsolidationRequest); + ConsolidationRequestResult.Should().BeEquivalentTo(ConsolidationRequest, options => options + .Using>(ctx => ctx.Subject.Span.SequenceEqual(ctx.Expectation.Span).Should().BeTrue()) + .WhenTypeIs>());; } } From 63e262c1bdaf170f01f5651627ea75c5583767bf Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 18 Sep 2024 22:58:48 +0200 Subject: [PATCH 391/551] fix --- .../Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs index 06f9249cbb1..df3fd5aeb54 100644 --- a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs +++ b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs @@ -95,6 +95,6 @@ public void ShouldProcessConsolidationRequest() ConsolidationRequestResult.Should().BeEquivalentTo(ConsolidationRequest, options => options .Using>(ctx => ctx.Subject.Span.SequenceEqual(ctx.Expectation.Span).Should().BeTrue()) - .WhenTypeIs>());; + .WhenTypeIs>()); } } From 2fac6223dbcad950e19a5fee3db8f713eec70e37 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 18 Sep 2024 23:21:01 +0200 Subject: [PATCH 392/551] use SpecProvider.ChainId in test --- src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index d806879df6d..040714bcaa5 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -75,7 +75,7 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) TrieStore trieStore = new(stateDb, _logManager); WorldState stateProvider = new(trieStore, codeDb, _logManager); IBlockhashProvider blockhashProvider = new TestBlockhashProvider(); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); IVirtualMachine virtualMachine = new VirtualMachine( blockhashProvider, specProvider, From d4b36c54296099a2fd1e362cf032d89e00c16b07 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 18 Sep 2024 23:29:03 +0200 Subject: [PATCH 393/551] small refactor TransactionProcessorEip7702Tests --- .../TransactionProcessorEip7702Tests.cs | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index b87ed6c31bf..61337f5e247 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -211,7 +211,6 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c .Select(i => CreateAuthorizationTuple( signer, _specProvider.ChainId, - //Copy empty code so will not add to gas cost TestItem.AddressC, 0)).ToArray()) .SignedAndResolved(_ethereumEcdsa, sender, true) @@ -399,22 +398,7 @@ public static IEnumerable OpcodesWithEXT() .Done).Bytes.ToArray() }; //EXTCOPYCODE should copy the delegated code - yield return new object[] { - Prepare.EvmCode - .PushData(TestItem.AddressA) - .Op(Instruction.DUP1) - .Op(Instruction.EXTCODESIZE) - .Op(Instruction.PUSH0) - .Op(Instruction.PUSH0) - .Op(Instruction.DUP4) - .Op(Instruction.EXTCODECOPY) - .Op(Instruction.PUSH0) - .Op(Instruction.MLOAD) - .Op(Instruction.PUSH0) - .Op(Instruction.SSTORE) - .Op(Instruction.STOP) - .Done, - Prepare.EvmCode + byte[] code = Prepare.EvmCode .PushData(TestItem.AddressA) .Op(Instruction.DUP1) .Op(Instruction.EXTCODESIZE) @@ -427,8 +411,12 @@ public static IEnumerable OpcodesWithEXT() .Op(Instruction.PUSH0) .Op(Instruction.SSTORE) .Op(Instruction.STOP) - .Done - }; + .Done; + yield return new object[] + { + code, + code + }; } [TestCaseSource(nameof(OpcodesWithEXT))] public void Execute_DelegatedCodeUsesEXTOPCODES_StoresExpectedValue(byte[] code, byte[] expectedValue) From f3301ad8bf4c4102573568bc0e09e8605af21ec5 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 18 Sep 2024 23:49:47 +0200 Subject: [PATCH 394/551] ignore authorization list if null TransactionForRpc --- src/Nethermind/Nethermind.Facade/Eth/AuthorizationTupleForRpc.cs | 1 - src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Facade/Eth/AuthorizationTupleForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/AuthorizationTupleForRpc.cs index f1813a09e38..cf3ce8211f6 100644 --- a/src/Nethermind/Nethermind.Facade/Eth/AuthorizationTupleForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/AuthorizationTupleForRpc.cs @@ -30,7 +30,6 @@ public AuthorizationTupleForRpc(UInt256 chainId, ulong nonce, Address address, U public UInt256 ChainId { get; set; } public ulong Nonce { get; set; } public Address Address { get; set; } - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public UInt256? YParity { get; set; } public UInt256? S { get; set; } public UInt256? R { get; set; } diff --git a/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs index 7f782ad84f7..db455437176 100644 --- a/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs @@ -134,6 +134,7 @@ public TransactionForRpc() { } public TxType Type { get; set; } public IEnumerable? AccessList { get; set; } + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public IEnumerable? AuthorizationList { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] From e7a91a20bc94ee68c40bd6b72d31c0e34684361b Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 18 Sep 2024 23:51:36 +0200 Subject: [PATCH 395/551] fix SimulateReadOnlyBlocksProcessingEnv --- .../Simulate/SimulateReadOnlyBlocksProcessingEnv.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs index 3ca75abe552..4087bd3b633 100644 --- a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs @@ -70,7 +70,7 @@ public SimulateReadOnlyBlocksProcessingEnv( BlockhashProvider = new SimulateBlockhashProvider(new BlockhashProvider(BlockTree, specProvider, StateProvider, logManager), BlockTree); StateProvider = WorldStateManager.GlobalWorldState; StateReader = WorldStateManager.GlobalStateReader; - CodeInfoRepository = new OverridableCodeInfoRepository(new CodeInfoRepository(1)); + CodeInfoRepository = new OverridableCodeInfoRepository(new CodeInfoRepository(specProvider.ChainId)); VirtualMachine = new SimulateVirtualMachine(new VirtualMachine(BlockhashProvider, specProvider, CodeInfoRepository, logManager)); _transactionProcessor = new SimulateTransactionProcessor(SpecProvider, StateProvider, VirtualMachine, CodeInfoRepository, _logManager, validate); _blockValidator = CreateValidator(); From 51a63dd25187167042342653a10ecc289e35e667 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 19 Sep 2024 00:02:29 +0200 Subject: [PATCH 396/551] fix EthModuleBenchmarks --- .../Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs index e75823b92e9..1a2cbeceebb 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs @@ -82,7 +82,7 @@ public void GlobalSetup() new SyncConfig(), LimboLogs.Instance); _blockhashProvider = new BlockhashProvider(blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(1); + CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); _virtualMachine = new VirtualMachine(_blockhashProvider, specProvider, codeInfoRepository, LimboLogs.Instance); Block genesisBlock = Build.A.Block.Genesis.TestObject; From ed6b5bf83b169e10cae6d9247c58b630dbf3c75e Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 19 Sep 2024 10:04:30 +0200 Subject: [PATCH 397/551] remove unnecessary ? --- .../Nethermind.Core/ConsensusRequests/ConsensusRequest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index 3af6628bb40..b5cbf9f8e34 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -63,8 +63,8 @@ public static (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests) Spl { if (requests is null) return (null, null); (int depositCount, int withdrawalRequestCount) = requests.GetTypeCounts(); - Deposit[]? deposits = new Deposit[depositCount]; - WithdrawalRequest[]? withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; + Deposit[] deposits = new Deposit[depositCount]; + WithdrawalRequest[] withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; int depositIndex = 0; int withdrawalRequestIndex = 0; for (int i = 0; i < requests.Length; i++) From a249a5808d1954ba6b4ca2129ad863d6e2b1bb9e Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 19 Sep 2024 10:05:20 +0200 Subject: [PATCH 398/551] Move engine_getPayloadBodiesByHash to IHandler, no Async needed --- .../EngineModuleTests.V2.cs | 2 +- .../EngineModuleTests.V3.cs | 4 +-- .../EngineModuleTests.V4.cs | 2 +- .../EngineRpcModule.Prague.cs | 6 ++-- .../EngineRpcModule.Shanghai.cs | 6 ++-- .../EngineRpcModule.cs | 4 +-- .../GetPayloadBodiesByHashV1Handler.cs | 32 ++++++------------- .../GetPayloadBodiesByHashV2Handler.cs | 29 ++++++----------- .../IEngineRpcModule.Prague.cs | 2 +- .../IEngineRpcModule.Shanghai.cs | 2 +- 10 files changed, 32 insertions(+), 57 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs index 7eda65bf5cb..bed2667371e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V2.cs @@ -341,7 +341,7 @@ public virtual async Task executionPayload1.BlockHash, TestItem.KeccakA, executionPayload2.BlockHash }; IEnumerable payloadBodies = - rpc.engine_getPayloadBodiesByHashV1(blockHashes).Result.Data; + rpc.engine_getPayloadBodiesByHashV1(blockHashes).Data; ExecutionPayloadBodyV1Result?[] expected = { new(Array.Empty(), withdrawals), null, new(txs, withdrawals) }; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs index e714737e35b..6f3bf5874ef 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs @@ -378,9 +378,9 @@ public async Task NewPayloadV3_should_verify_blob_versioned_hashes_again Substitute.For>(), newPayloadHandlerMock, Substitute.For(), - Substitute.For, IEnumerable>>(), + Substitute.For, IEnumerable>>(), Substitute.For(), - Substitute.For, IEnumerable>>(), + Substitute.For, IEnumerable>>(), Substitute.For(), Substitute.For>(), Substitute.For, IEnumerable>>(), diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 1261dce80cc..3c3874b2f8f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -330,7 +330,7 @@ public virtual async Task ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); Hash256[] blockHashes = [executionPayload1.BlockHash, TestItem.KeccakA, executionPayload2.BlockHash]; IEnumerable payloadBodies = - rpc.engine_getPayloadBodiesByHashV2(blockHashes).Result.Data; + rpc.engine_getPayloadBodiesByHashV2(blockHashes).Data; ExecutionPayloadBodyV2Result?[] expected = { new (Array.Empty(), Array.Empty() , deposits, withdrawalRequests), null, diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs index f0f033ab4d5..89e2b7e4c62 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs @@ -16,7 +16,7 @@ public partial class EngineRpcModule : IEngineRpcModule { private readonly IAsyncHandler _getPayloadHandlerV4; - private readonly IAsyncHandler, IEnumerable> _executionGetPayloadBodiesByHashV2Handler; + private readonly IHandler, IEnumerable> _executionGetPayloadBodiesByHashV2Handler; private readonly IGetPayloadBodiesByRangeV2Handler _executionGetPayloadBodiesByRangeV2Handler; public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) => @@ -25,8 +25,8 @@ public Task> engine_newPayloadV4(ExecutionPayload public async Task> engine_getPayloadV4(byte[] payloadId) => await _getPayloadHandlerV4.HandleAsync(payloadId); - public Task>> engine_getPayloadBodiesByHashV2(IReadOnlyList blockHashes) - => _executionGetPayloadBodiesByHashV2Handler.HandleAsync(blockHashes); + public ResultWrapper> engine_getPayloadBodiesByHashV2(IReadOnlyList blockHashes) + => _executionGetPayloadBodiesByHashV2Handler.Handle(blockHashes); public Task>> engine_getPayloadBodiesByRangeV2(long start, long count) => _executionGetPayloadBodiesByRangeV2Handler.Handle(start, count); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs index 9db57d25681..0b435dc1172 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Shanghai.cs @@ -14,7 +14,7 @@ namespace Nethermind.Merge.Plugin; public partial class EngineRpcModule : IEngineRpcModule { - private readonly IAsyncHandler, IEnumerable> _executionGetPayloadBodiesByHashV1Handler; + private readonly IHandler, IEnumerable> _executionGetPayloadBodiesByHashV1Handler; private readonly IGetPayloadBodiesByRangeV1Handler _executionGetPayloadBodiesByRangeV1Handler; private readonly IAsyncHandler _getPayloadHandlerV2; @@ -24,8 +24,8 @@ public Task> engine_forkchoiceUpdatedV2 public Task> engine_getPayloadV2(byte[] payloadId) => _getPayloadHandlerV2.HandleAsync(payloadId); - public Task>> engine_getPayloadBodiesByHashV1(IReadOnlyList blockHashes) - => _executionGetPayloadBodiesByHashV1Handler.HandleAsync(blockHashes); + public ResultWrapper> engine_getPayloadBodiesByHashV1(IReadOnlyList blockHashes) + => _executionGetPayloadBodiesByHashV1Handler.Handle(blockHashes); public Task>> engine_getPayloadBodiesByRangeV1(long start, long count) => _executionGetPayloadBodiesByRangeV1Handler.Handle(start, count); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs index 4d8cd4f994e..3ea4863fa05 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs @@ -27,9 +27,9 @@ public EngineRpcModule( IAsyncHandler getPayloadHandlerV4, IAsyncHandler newPayloadV1Handler, IForkchoiceUpdatedHandler forkchoiceUpdatedV1Handler, - IAsyncHandler, IEnumerable> executionGetPayloadBodiesByHashV1Handler, + IHandler, IEnumerable> executionGetPayloadBodiesByHashV1Handler, IGetPayloadBodiesByRangeV1Handler executionGetPayloadBodiesByRangeV1Handler, - IAsyncHandler, IEnumerable> executionGetPayloadBodiesByHashV2Handler, + IHandler, IEnumerable> executionGetPayloadBodiesByHashV2Handler, IGetPayloadBodiesByRangeV2Handler executionGetPayloadBodiesByRangeV2Handler, IHandler transitionConfigurationHandler, IHandler, IEnumerable> capabilitiesHandler, diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs index 10ea8cc9205..6171a306cb9 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV1Handler.cs @@ -12,17 +12,11 @@ namespace Nethermind.Merge.Plugin.Handlers; -public class GetPayloadBodiesByHashV1Handler : IAsyncHandler, IEnumerable> +public class GetPayloadBodiesByHashV1Handler(IBlockTree blockTree, ILogManager logManager) + : IHandler, IEnumerable> { - protected const int MaxCount = 1024; - protected readonly IBlockTree _blockTree; - protected readonly ILogger _logger; - - public GetPayloadBodiesByHashV1Handler(IBlockTree blockTree, ILogManager logManager) - { - _blockTree = blockTree; - _logger = logManager.GetClassLogger(); - } + private const int MaxCount = 1024; + private readonly ILogger _logger = logManager.GetClassLogger(); protected bool CheckHashCount(IReadOnlyList blockHashes, out string? error) { @@ -37,25 +31,17 @@ protected bool CheckHashCount(IReadOnlyList blockHashes, out string? er return true; } - public Task>> HandleAsync(IReadOnlyList blockHashes) - { - if (!CheckHashCount(blockHashes, out string? error)) - { - return ResultWrapper>.Fail(error!, MergeErrorCodes.TooLargeRequest); - } - - return Task.FromResult(ResultWrapper>.Success(GetRequests(blockHashes))); - } + public ResultWrapper> Handle(IReadOnlyList blockHashes) => + !CheckHashCount(blockHashes, out string? error) + ? ResultWrapper>.Fail(error!, MergeErrorCodes.TooLargeRequest) + : ResultWrapper>.Success(GetRequests(blockHashes)); private IEnumerable GetRequests(IReadOnlyList blockHashes) { for (int i = 0; i < blockHashes.Count; i++) { - Block? block = _blockTree.FindBlock(blockHashes[i]); - + Block? block = blockTree.FindBlock(blockHashes[i]); yield return block is null ? null : new ExecutionPayloadBodyV1Result(block.Transactions, block.Withdrawals); } - - yield break; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs index 9a2764f1ad7..ff64739b948 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs @@ -16,34 +16,23 @@ namespace Nethermind.Merge.Plugin.Handlers; -public class GetPayloadBodiesByHashV2Handler(IBlockTree blockTree, ILogManager logManager) : GetPayloadBodiesByHashV1Handler(blockTree, logManager), IAsyncHandler, IEnumerable> +public class GetPayloadBodiesByHashV2Handler(IBlockTree blockTree, ILogManager logManager) + : GetPayloadBodiesByHashV1Handler(blockTree, logManager), IHandler, IEnumerable> { - public new Task>> HandleAsync(IReadOnlyList blockHashes) - { - if (!CheckHashCount(blockHashes, out string? error)) - { - return ResultWrapper>.Fail(error!, MergeErrorCodes.TooLargeRequest); - } + private readonly IBlockTree _blockTree = blockTree; - return Task.FromResult(ResultWrapper>.Success(GetRequests(blockHashes))); - } + public new ResultWrapper> Handle(IReadOnlyList blockHashes) => + !CheckHashCount(blockHashes, out string? error) + ? ResultWrapper>.Fail(error!, MergeErrorCodes.TooLargeRequest) + : ResultWrapper>.Success(GetRequests(blockHashes)); private IEnumerable GetRequests(IReadOnlyList blockHashes) { for (int i = 0; i < blockHashes.Count; i++) { Block? block = _blockTree.FindBlock(blockHashes[i]); - - if (block is null) - { - yield return null; - continue; - } - - (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests) = block!.Requests?.SplitRequests() ?? (null, null); - yield return new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests); + (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests) = block?.Requests?.SplitRequests() ?? (null, null); + yield return block is null ? null : new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests); } - - yield break; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs index 7d62b4021b0..15f3577ce42 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs @@ -29,7 +29,7 @@ public partial interface IEngineRpcModule : IRpcModule Description = "Returns an array of execution payload bodies for the list of provided block hashes.", IsSharable = true, IsImplemented = true)] - Task>> engine_getPayloadBodiesByHashV2(IReadOnlyList blockHashes); + ResultWrapper> engine_getPayloadBodiesByHashV2(IReadOnlyList blockHashes); [JsonRpcMethod( Description = "Returns an array of execution payload bodies for the provided number range", diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs index bde3c4c1146..d3c383ed306 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Shanghai.cs @@ -29,7 +29,7 @@ public partial interface IEngineRpcModule : IRpcModule Description = "Returns an array of execution payload bodies for the list of provided block hashes.", IsSharable = true, IsImplemented = true)] - Task>> engine_getPayloadBodiesByHashV1(IReadOnlyList blockHashes); + ResultWrapper> engine_getPayloadBodiesByHashV1(IReadOnlyList blockHashes); [JsonRpcMethod( Description = "Returns an array of execution payload bodies for the provided number range", From b29802686341475a021d3a5f9f433a44b406b165 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 19 Sep 2024 10:06:28 +0200 Subject: [PATCH 399/551] syntatic suggar --- .../Data/ExecutionPayloadV4.cs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index 0f7933be113..cef9b04c3fb 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -25,16 +25,7 @@ public class ExecutionPayloadV4 : ExecutionPayloadV3, IExecutionPayloadFactory(block); ConsensusRequest[]? blockRequests = block.Requests; - if (blockRequests is null) - { - executionPayload.DepositRequests = Array.Empty(); - executionPayload.WithdrawalRequests = Array.Empty(); - } - else - { - (executionPayload.DepositRequests, executionPayload.WithdrawalRequests) = blockRequests.SplitRequests(); - } - + (executionPayload.DepositRequests, executionPayload.WithdrawalRequests) = blockRequests?.SplitRequests() ?? ([], []); return executionPayload; } From bc5130b6f464e932de9569ffcdfc4ded1a8e0547 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 19 Sep 2024 11:21:36 +0200 Subject: [PATCH 400/551] Consensus requests change class structure --- .../ConsensusRequests/ConsensusRequest.cs | 15 --------- .../ConsensusRequests/ConsolidationRequest.cs | 19 ++---------- .../ConsensusRequests/Deposit.cs | 31 +++---------------- .../ConsensusRequests/WithdrawalRequest.cs | 18 ++--------- 4 files changed, 11 insertions(+), 72 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index b0e2a074ca8..39ddf6c2ebf 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -21,21 +21,6 @@ public class ConsensusRequest [JsonIgnore] public ulong AmountField { get; protected set; } - - [JsonIgnore] - public Address? SourceAddressField { get; protected set; } - - [JsonIgnore] - public Memory? PubKeyField { get; set; } - - [JsonIgnore] - public byte[]? WithdrawalCredentialsField { get; protected set; } - - [JsonIgnore] - public byte[]? SignatureField { get; protected set; } - - [JsonIgnore] - public ulong? IndexField { get; protected set; } } public static class ConsensusRequestExtensions diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs index 57e3cc80f0b..08e95cdc0dd 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs @@ -14,23 +14,10 @@ public ConsolidationRequest() { Type = ConsensusRequestsType.ConsolidationRequest; } - public Address? SourceAddress - { - get { return SourceAddressField; } - set { SourceAddressField = value; } - } + public Address? SourceAddress { get; set; } + public Memory? SourcePubkey { get; set; } - public Memory? SourcePubkey - { - get { return PubKeyField; } - set { PubKeyField = value; } - } - - public byte[]? TargetPubkey - { - get { return WithdrawalCredentialsField; } - set { WithdrawalCredentialsField = value; } - } + public byte[]? TargetPubkey { get; set; } public override string ToString() => ToString(string.Empty); diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs index fc679f07c27..50b46fc27c2 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs @@ -16,34 +16,13 @@ public Deposit() Type = ConsensusRequestsType.Deposit; Amount = 0; } - public Memory? Pubkey - { - get { return PubKeyField; } - set { PubKeyField = value; } - } + public Memory? Pubkey { get; set; } + public byte[]? WithdrawalCredentials { get; set; } - public byte[]? WithdrawalCredentials - { - get { return WithdrawalCredentialsField; } - set { WithdrawalCredentialsField = value; } - } + public ulong Amount { get; set; } - public ulong Amount - { - get { return AmountField; } - set { AmountField = value; } - } - - public byte[]? Signature - { - get { return SignatureField; } - set { SignatureField = value; } - } - public ulong? Index - { - get { return IndexField; } - set { IndexField = value; } - } + public byte[]? Signature { get; set; } + public ulong? Index { get; set; } public override string ToString() => ToString(string.Empty); public string ToString(string indentation) => @$"{indentation}{nameof(Deposit)} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs index 355205d5174..f9d79f127c7 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs @@ -17,23 +17,11 @@ public WithdrawalRequest() Type = ConsensusRequestsType.WithdrawalRequest; Amount = 0; } - public Address? SourceAddress - { - get { return SourceAddressField; } - set { SourceAddressField = value; } - } + public Address? SourceAddress { get; set; } - public Memory? ValidatorPubkey - { - get { return PubKeyField; } - set { PubKeyField = value; } - } + public Memory? ValidatorPubkey { get; set; } - public ulong Amount - { - get { return AmountField; } - set { AmountField = value; } - } + public ulong Amount { get; set; } public override string ToString() => ToString(string.Empty); public string ToString(string indentation) => @$"{indentation}{nameof(WithdrawalRequest)} From d29ca4d2839d0e03eb59e786c6bafca2d015efae Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 19 Sep 2024 11:24:45 +0200 Subject: [PATCH 401/551] one more field --- .../Nethermind.Core/ConsensusRequests/ConsensusRequest.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index 39ddf6c2ebf..605b9620d19 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -18,9 +18,6 @@ public class ConsensusRequest { [JsonIgnore] public ConsensusRequestsType Type { get; protected set; } - - [JsonIgnore] - public ulong AmountField { get; protected set; } } public static class ConsensusRequestExtensions From 1518f276833fd2deb0c1646b83217a2360f30954 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 19 Sep 2024 11:28:53 +0200 Subject: [PATCH 402/551] class to abstract --- src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs | 2 +- .../Nethermind.Core/ConsensusRequests/ConsensusRequest.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index a43039ef8af..4b5e591949b 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -281,7 +281,7 @@ public BlockBuilder WithConsensusRequests(int count) var consensusRequests = new ConsensusRequest[count]; for (var i = 0; i < count; i++) - consensusRequests[i] = new(); + consensusRequests[i] = new Deposit(); return WithConsensusRequests(consensusRequests); } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs index 605b9620d19..92e4dd904e5 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs @@ -14,7 +14,7 @@ public enum ConsensusRequestsType : byte ConsolidationRequest = 2 } -public class ConsensusRequest +public abstract class ConsensusRequest { [JsonIgnore] public ConsensusRequestsType Type { get; protected set; } From 3acb335245a86ace2fb5a56ea8b0fc02ad4154f8 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 19 Sep 2024 11:39:28 +0200 Subject: [PATCH 403/551] Review fixes --- .../Validators/BlockValidatorTests.cs | 12 ++++++------ .../Validators/BlockValidator.cs | 4 ++-- .../Nethermind.Core.Test/Builders/Build.Deposit.cs | 2 +- .../Builders/Build.WithdrawalRequest.cs | 2 +- .../Encoding/BlockDecoderTests.cs | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs index 860f9dab86e..ebb834463d8 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs @@ -209,8 +209,8 @@ public void ValidateBodyAgainstHeader_BlockHasInvalidRequestRoot_ReturnsFalse() { Block block = Build.A.Block .WithConsensusRequests(new ConsensusRequest[] { - Build.Deposit.WithIndex(0).TestObject, - Build.WithdrawalRequest.TestObject + Build.A.Deposit.WithIndex(0).TestObject, + Build.A.WithdrawalRequest.TestObject }) .TestObject; block.Header.RequestsRoot = Keccak.OfAnEmptyString; @@ -225,8 +225,8 @@ public void ValidateBodyRequests_BlockHasReuests_InOrder_ReturnsTrue() { Block block = Build.A.Block .WithConsensusRequests(new ConsensusRequest[] { - Build.Deposit.WithIndex(0).TestObject, - Build.WithdrawalRequest.TestObject + Build.A.Deposit.WithIndex(0).TestObject, + Build.A.WithdrawalRequest.TestObject }) .TestObject; @@ -240,8 +240,8 @@ public void ValidateBodyRequests_BlockHasReuests_OutOfOrder_ReturnsFalse() { Block block = Build.A.Block .WithConsensusRequests(new ConsensusRequest[] { - Build.WithdrawalRequest.TestObject, - Build.Deposit.WithIndex(0).TestObject + Build.A.WithdrawalRequest.TestObject, + Build.A.Deposit.WithIndex(0).TestObject }) .TestObject; diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index c30dcb27781..5c75c77549c 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -286,7 +286,7 @@ private bool ValidateWithdrawals(Block block, IReleaseSpec spec, out string? err public bool ValidateRequests(Block block, out string? error) => ValidateRequests(block, _specProvider.GetSpec(block.Header), out error); - public bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) + private bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) { if (spec.ConsensusRequestsEnabled && block.Requests is null) { @@ -458,7 +458,7 @@ public static bool ValidateWithdrawalsHashMatches(BlockHeader header, BlockBody public static bool ValidateRequestsHashMatches(Block block, out Hash256? requestsRoot) => ValidateRequestsHashMatches(block.Header, block.Body, out requestsRoot); - public static bool ValidateRequestsHashMatches(BlockHeader header, BlockBody body, out Hash256? requestsRoot) + private static bool ValidateRequestsHashMatches(BlockHeader header, BlockBody body, out Hash256? requestsRoot) { if (body.Requests == null) { diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs index a665ac91bba..f8eda2c30dd 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs @@ -5,5 +5,5 @@ namespace Nethermind.Core.Test.Builders; public partial class Build { - public static DepositBuilder Deposit => new(); + public DepositBuilder Deposit => new(); } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs index 29332f47d5c..a6ac89905d4 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs @@ -5,5 +5,5 @@ namespace Nethermind.Core.Test.Builders; public partial class Build { - public static WithdrawalRequestBuilder WithdrawalRequest => new(); + public WithdrawalRequestBuilder WithdrawalRequest => new(); } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index 8350699b8fa..c18bb3ee666 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -49,7 +49,7 @@ public BlockDecoderTests() { if (i % 2 == 0) { - requests[i] = Build.Deposit + requests[i] = Build.A.Deposit .WithIndex(long.MaxValue) .WithPublicKey(new byte[] { (byte)i }) .WithSignature(new byte[] { (byte)i }) @@ -61,7 +61,7 @@ public BlockDecoderTests() { byte[] ValidatorPubkey = new byte[48]; ValidatorPubkey[11] = 11; - requests[i] = Build.WithdrawalRequest + requests[i] = Build.A.WithdrawalRequest .WithSourceAddress(TestItem.AddressA) .WithValidatorPubkey(ValidatorPubkey) .WithAmount(int.MaxValue) From 53043ad8ef11ac8d2ea78b66e5cb0a25211229a5 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 19 Sep 2024 14:05:06 +0200 Subject: [PATCH 404/551] extra test for refunds --- .../TransactionProcessorEip7702Tests.cs | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 61337f5e247..1d634ad0b93 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -227,6 +227,56 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c Assert.That(tracer.GasSpent, Is.EqualTo(GasCostOf.Transaction + GasCostOf.NewAccount * count)); } + private static IEnumerable EvmExecutionErrorCases() + { + byte[] runOutOfGasCode = Prepare.EvmCode + .Op(Instruction.CALLER) + .Op(Instruction.BALANCE) + .Op(Instruction.PUSH0) + .Op(Instruction.JUMP) + .Done; + yield return new object[] { runOutOfGasCode }; + byte[] revertExecution = Prepare.EvmCode + .Op(Instruction.REVERT) + .Done; + yield return new object[] { revertExecution }; + } + [TestCaseSource(nameof(EvmExecutionErrorCases))] + public void Execute_TxWithDelegationRunsOutOfGas_DelegationRefundIsStillApplied(byte[] executionErrorCode) + { + PrivateKey sender = TestItem.PrivateKeyA; + Address codeSource = TestItem.AddressB; + + _stateProvider.CreateAccount(codeSource, 0); + _stateProvider.InsertCode(codeSource, executionErrorCode, Prague.Instance); + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + + const long gasLimit = 10_000_000; + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(codeSource) + .WithGasLimit(gasLimit) + .WithAuthorizationCode( + CreateAuthorizationTuple( + sender, + _specProvider.ChainId, + Address.Zero, + 1) + ) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(long.MaxValue).TestObject; + + CallOutputTracer tracer = new(); + + _transactionProcessor.Execute(tx, block.Header, tracer); + + Assert.That(tracer.GasSpent, Is.EqualTo(gasLimit - GasCostOf.NewAccount + GasCostOf.PerAuthBaseCost)); + } + [Test] public void Execute_TxAuthorizationListWithBALANCE_WarmAccountReadGasIsCharged() { From d3197ec285d0a046108e9b498325a5d1c294c59b Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 19 Sep 2024 16:38:24 +0200 Subject: [PATCH 405/551] some cosmetic changes --- src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs | 2 +- .../Requests/ConsolidationRequestProcessor.cs | 2 +- src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs | 4 ---- src/Nethermind/Nethermind.Init/InitializeStateDb.cs | 1 - .../Nethermind.Runner/Properties/launchSettings.json | 2 +- 5 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index f5de4cfd434..6bf188363ec 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -187,7 +187,7 @@ private static void InitializeTestState(GeneralStateTest test, WorldState stateP } stateProvider.CreateAccount(accountState.Key, accountState.Value.Balance); - stateProvider.InsertCode(accountState.Key, accountState.Value.Code, specProvider.GenesisSpec, false); + stateProvider.InsertCode(accountState.Key, accountState.Value.Code, specProvider.GenesisSpec); stateProvider.SetNonce(accountState.Key, accountState.Value.Nonce); } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs index 876abdfe8d3..edc6b450b07 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs @@ -29,7 +29,7 @@ public IEnumerable ReadConsolidationRequests(IReleaseSpec yield break; Address eip7251Account = spec.Eip7251ContractAddress; - if (!state.AccountExists(eip7251Account)) // not needed anymore? + if (!state.AccountExists(eip7251Account)) yield break; CallOutputTracer tracer = new(); diff --git a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs index d17eb9f58b9..ec6600fef8e 100644 --- a/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs +++ b/src/Nethermind/Nethermind.Evm/ExecutionEnvironment.cs @@ -77,9 +77,5 @@ public ExecutionEnvironment /// If we call TX -> DELEGATECALL -> CALL -> STATICCALL then the call depth would be 3. public readonly int CallDepth; - - /// - /// this field keeps track of wether the execution envirement was initiated by a systemTx. - public readonly bool IsSystemEnv; } } diff --git a/src/Nethermind/Nethermind.Init/InitializeStateDb.cs b/src/Nethermind/Nethermind.Init/InitializeStateDb.cs index 42f259e45c8..8ca20a82750 100644 --- a/src/Nethermind/Nethermind.Init/InitializeStateDb.cs +++ b/src/Nethermind/Nethermind.Init/InitializeStateDb.cs @@ -86,7 +86,6 @@ public Task Execute(CancellationToken cancellationToken) syncConfig.DownloadBodiesInFastSync = true; } - _api.NodeStorageFactory.DetectCurrentKeySchemeFrom(getApi.DbProvider.StateDb); IKeyValueStore codeDb = getApi.DbProvider.CodeDb; IKeyValueStoreWithBatching stateDb = getApi.DbProvider.StateDb; IPersistenceStrategy persistenceStrategy; diff --git a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json index 63e90c8f550..3db3149a77d 100644 --- a/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json +++ b/src/Nethermind/Nethermind.Runner/Properties/launchSettings.json @@ -93,7 +93,7 @@ }, "Holesky": { "commandName": "Project", - "commandLineArgs": "-c holesky -dd .data --JsonRpc.UnsecureDevNoRpcAuthentication true", + "commandLineArgs": "-c holesky -dd .data", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } From 4e71d9a7633e538bf7a7563c907c0886beb994ae Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 19 Sep 2024 15:17:42 +0200 Subject: [PATCH 406/551] Test null address --- .../Builders/TransactionBuilder.cs | 3 -- .../Nethermind.Core/AuthorizationTuple.cs | 4 +-- .../Modules/Eth/EthRpcModuleTests.cs | 32 +++++++++++++++++ .../EngineModuleTests.HelperFunctions.cs | 11 ++++-- .../Eip7702/AuthorizationTupleDecoder.cs | 35 +++++++++++++------ 5 files changed, 67 insertions(+), 18 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs index 7bd46b91214..cf81f10a348 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TransactionBuilder.cs @@ -2,14 +2,11 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Generic; using System.Linq; using Nethermind.Core.Crypto; using Nethermind.Core.Eip2930; using Nethermind.Crypto; using Nethermind.Int256; -using Nethermind.Logging; -using Newtonsoft.Json.Linq; namespace Nethermind.Core.Test.Builders { diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 556ae402d95..de5deb59cec 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -27,9 +27,9 @@ public AuthorizationTuple( { } public ulong ChainId { get; } = chainId; - public Address CodeAddress { get; } = codeAddress ?? throw new ArgumentNullException(nameof(codeAddress)); + public Address CodeAddress { get; protected set; } = codeAddress ?? throw new ArgumentNullException(nameof(codeAddress)); public ulong Nonce { get; } = nonce; - public Signature AuthoritySignature { get; } = sig ?? throw new ArgumentNullException(nameof(sig)); + public Signature AuthoritySignature { get; protected set; } = sig ?? throw new ArgumentNullException(nameof(sig)); /// /// may be recovered at a later point. diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs index 551c7a0ceff..714f4aedf39 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs @@ -1269,6 +1269,38 @@ public async Task eth_sendRawTransaction_sender_with_delegated_code_is_accepted( Assert.That(actual.Result, Is.Not.Null); } + [Test] + public async Task eth_sendRawTransaction_returns_correct_error_if_AuthorityTuple_has_null_value() + { + var specProvider = new TestSpecProvider(Prague.Instance); + specProvider.AllowTestChainOverride = false; + + TestRpcBlockchain test = await TestRpcBlockchain.ForTest(SealEngineType.NethDev).Build(specProvider); + Transaction invalidSetCodeTx= Build.A.Transaction + .WithType(TxType.SetCode) + .WithNonce(test.State.GetNonce(TestItem.AddressB)) + .WithMaxFeePerGas(9.GWei()) + .WithMaxPriorityFeePerGas(9.GWei()) + .WithGasLimit(GasCostOf.Transaction + GasCostOf.NewAccount) + .WithAuthorizationCode(new AllowNullAuthorizationTuple(0, null, 0, new Signature(new byte[65]))) + .WithTo(TestItem.AddressA) + .SignedAndResolved(TestItem.PrivateKeyB).TestObject; + + string result = await test.TestEthRpc("eth_sendRawTransaction", Bytes.ToHexString(Rlp.Encode(invalidSetCodeTx).Bytes)); + + JsonRpcErrorResponse actual = new EthereumJsonSerializer().Deserialize(result); + Assert.That(actual.Error!.Code, Is.EqualTo(ErrorCodes.TransactionRejected)); + } + public class AllowNullAuthorizationTuple : AuthorizationTuple + { + public AllowNullAuthorizationTuple(ulong chainId, Address? codeAddress, ulong nonce, Signature? sig) + : base(chainId, Address.Zero, nonce, new Signature(new byte[65])) + { + CodeAddress = codeAddress!; + AuthoritySignature = sig!; + } + } + private static (byte[] ByteCode, AccessListItemForRpc[] AccessList) GetTestAccessList(long loads = 2, bool allowSystemUser = true) { AccessListItemForRpc[] accessList = allowSystemUser diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index 4680778eab6..4d8fb3051ea 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -119,8 +119,15 @@ private static ExecutionPayload CreateBlockRequest(MergeTestBlockchain chain, Ex return blockRequest; } - private static ExecutionPayloadV3 CreateBlockRequestV3(MergeTestBlockchain chain, ExecutionPayload parent, Address miner, Withdrawal[]? withdrawals = null, - ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null) + private static ExecutionPayloadV3 CreateBlockRequestV3( + MergeTestBlockchain chain, + ExecutionPayload parent, + Address miner, + Withdrawal[]? withdrawals = null, + ulong? blobGasUsed = null, + ulong? excessBlobGas = null, + Transaction[]? transactions = null, + Hash256? parentBeaconBlockRoot = null) { ExecutionPayloadV3 blockRequestV3 = CreateBlockRequestInternal(parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, parentBeaconBlockRoot: parentBeaconBlockRoot); blockRequestV3.TryGetBlock(out Block? block); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 0756ba3d029..b4ee97a1436 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -25,13 +25,20 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R byte[] s = stream.DecodeByteArray(); if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) stream.Check(check); - return new AuthorizationTuple( - chainId, - codeAddress!, - nonce, - yParity, - r, - s); + try + { + return new AuthorizationTuple( + chainId, + codeAddress!, + nonce, + yParity, + r, + s); + } + catch (ArgumentNullException e) + { + throw InvalidValueRlpException(e); + } } public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -49,13 +56,20 @@ public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp byte[] s = decoderContext.DecodeByteArray(); if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) decoderContext.Check(check); - return new AuthorizationTuple( + try + { + return new AuthorizationTuple( chainId, codeAddress!, nonce, yParity, r, s); + } + catch (ArgumentNullException e) + { + throw InvalidValueRlpException(e); + } } public RlpStream Encode(AuthorizationTuple item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -108,8 +122,7 @@ private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress + Rlp.LengthOf(codeAddress) + Rlp.LengthOf(nonce); - [DoesNotReturn] [StackTraceHidden] - private static UInt256 ThrowInvalidNonceRlpException() => - throw new RlpException("Invalid nonce length in authorization tuple."); + private static RlpException InvalidValueRlpException(ArgumentNullException e) => + new RlpException($"Invalid value for '{e.ParamName}' in '{nameof(AuthorizationTuple)}'", e); } From 3361a63e6a8190caeb9b65de1ddd2ae13883e02c Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 20 Sep 2024 12:04:01 +0200 Subject: [PATCH 407/551] remove unused --- .../Core/CodeInfoRepositoryBenchmark.cs | 7 ------- .../Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs index 37dc9e76597..2a12eaa790c 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs @@ -90,11 +90,4 @@ public void Build1kTuples() { sut.InsertFromAuthorizations(_stateProvider, Tuples1k, _accessedAddresses, _spec); } - - //[Benchmark] - //public void Build10kTuples() - //{ - // sut.InsertFromAuthorizations(_stateProvider, Tuples10k, _spec); - //} - } diff --git a/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs b/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs index c453ec659cd..8ab393480de 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs @@ -7,7 +7,7 @@ namespace Nethermind.TxPool.Filters { /// - /// Will recover authority from transactions with authority_list and filter any with bad signatures. + /// Will recover authority from transactions with authority_list /// /// internal sealed class RecoverAuthorityFilter(IEthereumEcdsa ecdsa) : IIncomingTxFilter { From 45bf7bd7cd3c5d54db1e1c043da938d78e70dcef Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 20 Sep 2024 12:26:13 +0200 Subject: [PATCH 408/551] enginemoduletest --- .../Nethermind.Benchmark.Runner/Program.cs | 33 ++- .../Core/RecoverSignaturesBenchmark.cs | 270 ++++++++++++++++++ .../EngineModuleTests.V4.cs | 36 +++ 3 files changed, 324 insertions(+), 15 deletions(-) create mode 100644 src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs diff --git a/src/Nethermind/Nethermind.Benchmark.Runner/Program.cs b/src/Nethermind/Nethermind.Benchmark.Runner/Program.cs index d4afb51ab17..aac8c8f270b 100644 --- a/src/Nethermind/Nethermind.Benchmark.Runner/Program.cs +++ b/src/Nethermind/Nethermind.Benchmark.Runner/Program.cs @@ -11,6 +11,7 @@ using BenchmarkDotNet.Running; using System.Linq; using BenchmarkDotNet.Toolchains.InProcess.NoEmit; +using Nethermind.Benchmarks.Core; namespace Nethermind.Benchmark.Runner { @@ -51,22 +52,24 @@ public static void Main(string[] args) typeof(Nethermind.EthereumTests.Benchmark.EthereumTests).Assembly, }; - if (Debugger.IsAttached) - { - BenchmarkSwitcher.FromAssemblies(additionalJobAssemblies.Union(simpleJobAssemblies).ToArray()).RunAll(new DebugInProcessConfig()); - } - else - { - foreach (Assembly assembly in additionalJobAssemblies) - { - BenchmarkRunner.Run(assembly, new DashboardConfig(Job.MediumRun.WithRuntime(CoreRuntime.Core80)), args); - } + BenchmarkRunner.Run(new DebugInProcessConfig()); - foreach (Assembly assembly in simpleJobAssemblies) - { - BenchmarkRunner.Run(assembly, new DashboardConfig(), args); - } - } + //if (Debugger.IsAttached) + //{ + // BenchmarkSwitcher.FromAssemblies(additionalJobAssemblies.Union(simpleJobAssemblies).ToArray()).RunAll(new DebugInProcessConfig()); + //} + //else + //{ + // foreach (Assembly assembly in additionalJobAssemblies) + // { + // BenchmarkRunner.Run(assembly, new DashboardConfig(Job.MediumRun.WithRuntime(CoreRuntime.Core80)), args); + // } + + // foreach (Assembly assembly in simpleJobAssemblies) + // { + // BenchmarkRunner.Run(assembly, new DashboardConfig(), args); + // } + //} } } } diff --git a/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs new file mode 100644 index 00000000000..86270cc5d0b --- /dev/null +++ b/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs @@ -0,0 +1,270 @@ +using BenchmarkDotNet.Attributes; +using Nethermind.Core.Crypto; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.Core; +using Nethermind.Crypto; +using Nethermind.Logging; +using Nethermind.Serialization.Rlp; +using Nethermind.Specs; +using System; +using System.Collections.Generic; +using Nethermind.Consensus.Processing; +using Nethermind.TxPool; +using Nethermind.Int256; +using System.Diagnostics.CodeAnalysis; +using Nethermind.State; +using static Microsoft.FSharp.Core.ByRefKinds; +using System.Linq; +using System.Threading.Tasks; + +namespace Nethermind.Benchmarks.Core +{ + [MemoryDiagnoser] + public class RecoverSignaturesBenchmark + { + private ISpecProvider _specProvider = MainnetSpecProvider.Instance; + + private static EthereumEcdsa _ethereumEcdsa; + private static RecoverSignatures _sut; + + private Block _block100TxWith1AuthSigs; + private Block _block3TxWith1AuthSigs; + private Block _block10TxWith0AuthSigs; + private Block _block10TxWith10AuthSigs; + + private static PrivateKey[] _privateKeys = Enumerable.Range(0, 1000) + .Select(i => Build.A.PrivateKey.TestObject) + .ToArray(); + + [GlobalSetup] + public void GlobalSetup() + { + _ethereumEcdsa = new(_specProvider.ChainId); + _sut = new(_ethereumEcdsa, new AlwaysReturnNullTxPool(), _specProvider, NullLogManager.Instance); + + _block100TxWith1AuthSigs = Build.A.Block + .WithHeader(new BlockHeader() + { + Timestamp = ulong.MaxValue, + Number = long.MaxValue + }) + .WithTransactions(CreateTransactions(100, 1)) + .TestObject; + + _block10TxWith10AuthSigs = Build.A.Block + .WithHeader(new BlockHeader() + { + Timestamp = ulong.MaxValue, + Number = long.MaxValue + }) + .WithTransactions(CreateTransactions(10, 10)) + .TestObject; + + _block3TxWith1AuthSigs = Build.A.Block + .WithHeader(new BlockHeader() + { + Timestamp = ulong.MaxValue, + Number = long.MaxValue + }) + .WithTransactions(CreateTransactions(3, 1)) + .TestObject; + + _block10TxWith0AuthSigs = Build.A.Block + .WithHeader(new BlockHeader() + { + Timestamp = ulong.MaxValue, + Number = long.MaxValue + }) + .WithTransactions(CreateTransactions(10, 0)) + .TestObject; + + static Transaction[] CreateTransactions(int txCount, int authPerTx) + { + var list = new List(); + for (int i = 0; i < txCount; i++) + { + PrivateKey signer = _privateKeys[i]; + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithAuthorizationCode( + Enumerable.Range(0, authPerTx).Select(y => + { + PrivateKey authority = _privateKeys[i + y + _privateKeys.Length / 2]; + return CreateAuthorizationTuple( + authority, + 1, + Address.Zero, + 1); + }).ToArray() + ) + .SignedAndResolved(signer) + .WithSenderAddress(null) + .TestObject; + list.Add(tx); + } + return list.ToArray(); + } + + static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) + { + AuthorizationTupleDecoder decoder = new(); + RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); + Span code = stackalloc byte[rlp.Length + 1]; + code[0] = Eip7702Constants.Magic; + rlp.Data.AsSpan().CopyTo(code.Slice(1)); + + Signature sig = _ethereumEcdsa.Sign(signer, Keccak.Compute(code)); + + return new AuthorizationTuple(chainId, codeAddress, nonce, sig); + } + } + + [IterationCleanup] + public void IterationCleanup() + { + ResetSigs(_block100TxWith1AuthSigs); + ResetSigs(_block10TxWith10AuthSigs); + ResetSigs(_block10TxWith0AuthSigs); + ResetSigs(_block3TxWith1AuthSigs); + + void ResetSigs(Block block) + { + Parallel.ForEach(block.Transactions, (t)=> + { + t.SenderAddress = null; + foreach (var tuple in t.AuthorizationList) + { + tuple.Authority = null; + } + }); + } + } + + [Benchmark] + public void Recover100TxSignaturesAndAuthoritySignatures() + { + _sut.RecoverData(_block100TxWith1AuthSigs); + } + + [Benchmark] + public void Recover10TxSignaturesWith10AuthoritySignatures() + { + _sut.RecoverData(_block10TxWith10AuthSigs); + } + + [Benchmark] + public void Recover3TxSignaturesWith1AuthoritySignatures() + { + _sut.RecoverData(_block3TxWith1AuthSigs); + } + + [Benchmark] + public void Recover10TxSignaturesWith0AuthoritySignatures() + { + _sut.RecoverData(_block10TxWith0AuthSigs); + } + + private class AlwaysReturnNullTxPool : ITxPool + { +#pragma warning disable 67 + public event EventHandler NewDiscovered; + public event EventHandler NewPending; + public event EventHandler RemovedPending; + public event EventHandler EvictedPending; +#pragma warning restore 67 + + public void AddPeer(ITxPoolPeer peer) + { + throw new NotImplementedException(); + } + + public bool ContainsTx(Hash256 hash, TxType txType) + { + throw new NotImplementedException(); + } + + public Transaction GetBestTx() + { + throw new NotImplementedException(); + } + + public IEnumerable GetBestTxOfEachSender() + { + throw new NotImplementedException(); + } + + public UInt256 GetLatestPendingNonce(Address address) + { + throw new NotImplementedException(); + } + + public int GetPendingBlobTransactionsCount() + { + throw new NotImplementedException(); + } + + public IDictionary GetPendingLightBlobTransactionsBySender() + { + throw new NotImplementedException(); + } + + public Transaction[] GetPendingTransactions() + { + throw new NotImplementedException(); + } + + public IDictionary GetPendingTransactionsBySender() + { + throw new NotImplementedException(); + } + + public Transaction[] GetPendingTransactionsBySender(Address address) + { + throw new NotImplementedException(); + } + + public int GetPendingTransactionsCount() + { + throw new NotImplementedException(); + } + + public bool IsKnown(Hash256 hash) + { + throw new NotImplementedException(); + } + + public void RemovePeer(PublicKey nodeId) + { + throw new NotImplementedException(); + } + + public bool RemoveTransaction(Hash256 hash) + { + throw new NotImplementedException(); + } + + public AcceptTxResult SubmitTx(Transaction tx, TxHandlingOptions handlingOptions) + { + throw new NotImplementedException(); + } + + public bool TryGetBlobAndProof(byte[] blobVersionedHash, [NotNullWhen(true)] out byte[] blob, [NotNullWhen(true)] out byte[] proof) + { + throw new NotImplementedException(); + } + + public bool TryGetPendingBlobTransaction(Hash256 hash, [NotNullWhen(true)] out Transaction blobTransaction) + { + throw new NotImplementedException(); + } + + public bool TryGetPendingTransaction(Hash256 hash, [NotNullWhen(true)] out Transaction transaction) + { + transaction = null; + return false; + } + } + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 6310c5df319..7918db73e3c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -167,6 +167,42 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid })); } + + [Test] + public async Task NewPayloadV4_reject_payload_with_bad_authorization_list_rlp() + { + ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + IEngineRpcModule rpc = CreateEngineModule(chain); + Hash256 lastHash = (await ProduceBranchV4(rpc, chain, 10, CreateParentBlockRequestOnHead(chain.BlockTree), true)) + .LastOrDefault()?.BlockHash ?? Keccak.Zero; + + Transaction invalidSetCodeTx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithNonce(0) + .WithMaxFeePerGas(9.GWei()) + .WithMaxPriorityFeePerGas(9.GWei()) + .WithGasLimit(100_000) + .WithAuthorizationCode(new JsonRpc.Test.Modules.Eth.EthRpcModuleTests.AllowNullAuthorizationTuple(0, null, 0, new Signature(new byte[65]))) + .WithTo(TestItem.AddressA) + .SignedAndResolved(TestItem.PrivateKeyB).TestObject; + + Block invalidBlock = Build.A.Block + .WithNumber(chain.BlockTree.Head!.Number + 1) + .WithTimestamp(chain.BlockTree.Head!.Timestamp + 12) + .WithTransactions([invalidSetCodeTx]) + .WithParentBeaconBlockRoot(chain.BlockTree.Head!.ParentBeaconBlockRoot) + .WithBlobGasUsed(0) + .WithExcessBlobGas(0) + .TestObject; + + ExecutionPayloadV4 executionPayload = ExecutionPayloadV4.Create(invalidBlock); + + var response = await rpc.engine_newPayloadV4(executionPayload, [], invalidBlock.ParentBeaconBlockRoot); + + Assert.That(response.Data.Status, Is.EqualTo("INVALID")); + } + [TestCase(30)] public async Task can_progress_chain_one_by_one_v4(int count) { From 28a0f7c8726f2fc8ca45cce301bdc64d3dab7b55 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 20 Sep 2024 12:45:38 +0200 Subject: [PATCH 409/551] improve recoversignatures --- .../Nethermind.Benchmark.Runner/Program.cs | 33 ++++++------ .../Core/RecoverSignaturesBenchmark.cs | 51 +++++++++++++++---- .../Processing/RecoverSignature.cs | 39 +++++++------- 3 files changed, 74 insertions(+), 49 deletions(-) diff --git a/src/Nethermind/Nethermind.Benchmark.Runner/Program.cs b/src/Nethermind/Nethermind.Benchmark.Runner/Program.cs index aac8c8f270b..d4afb51ab17 100644 --- a/src/Nethermind/Nethermind.Benchmark.Runner/Program.cs +++ b/src/Nethermind/Nethermind.Benchmark.Runner/Program.cs @@ -11,7 +11,6 @@ using BenchmarkDotNet.Running; using System.Linq; using BenchmarkDotNet.Toolchains.InProcess.NoEmit; -using Nethermind.Benchmarks.Core; namespace Nethermind.Benchmark.Runner { @@ -52,24 +51,22 @@ public static void Main(string[] args) typeof(Nethermind.EthereumTests.Benchmark.EthereumTests).Assembly, }; - BenchmarkRunner.Run(new DebugInProcessConfig()); - - //if (Debugger.IsAttached) - //{ - // BenchmarkSwitcher.FromAssemblies(additionalJobAssemblies.Union(simpleJobAssemblies).ToArray()).RunAll(new DebugInProcessConfig()); - //} - //else - //{ - // foreach (Assembly assembly in additionalJobAssemblies) - // { - // BenchmarkRunner.Run(assembly, new DashboardConfig(Job.MediumRun.WithRuntime(CoreRuntime.Core80)), args); - // } + if (Debugger.IsAttached) + { + BenchmarkSwitcher.FromAssemblies(additionalJobAssemblies.Union(simpleJobAssemblies).ToArray()).RunAll(new DebugInProcessConfig()); + } + else + { + foreach (Assembly assembly in additionalJobAssemblies) + { + BenchmarkRunner.Run(assembly, new DashboardConfig(Job.MediumRun.WithRuntime(CoreRuntime.Core80)), args); + } - // foreach (Assembly assembly in simpleJobAssemblies) - // { - // BenchmarkRunner.Run(assembly, new DashboardConfig(), args); - // } - //} + foreach (Assembly assembly in simpleJobAssemblies) + { + BenchmarkRunner.Run(assembly, new DashboardConfig(), args); + } + } } } } diff --git a/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs index 86270cc5d0b..80579d4dc18 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs @@ -13,8 +13,6 @@ using Nethermind.TxPool; using Nethermind.Int256; using System.Diagnostics.CodeAnalysis; -using Nethermind.State; -using static Microsoft.FSharp.Core.ByRefKinds; using System.Linq; using System.Threading.Tasks; @@ -28,6 +26,8 @@ public class RecoverSignaturesBenchmark private static EthereumEcdsa _ethereumEcdsa; private static RecoverSignatures _sut; + private Block _block100TxWith100AuthSigs; + private Block _block100TxWith10AuthSigs; private Block _block100TxWith1AuthSigs; private Block _block3TxWith1AuthSigs; private Block _block10TxWith0AuthSigs; @@ -43,6 +43,25 @@ public void GlobalSetup() _ethereumEcdsa = new(_specProvider.ChainId); _sut = new(_ethereumEcdsa, new AlwaysReturnNullTxPool(), _specProvider, NullLogManager.Instance); + var rnd = new Random(); + + _block100TxWith100AuthSigs = Build.A.Block + .WithHeader(new BlockHeader() + { + Timestamp = ulong.MaxValue, + Number = long.MaxValue + }) + .WithTransactions(CreateTransactions(100, 100)) + .TestObject; + _block100TxWith10AuthSigs = Build.A.Block + .WithHeader(new BlockHeader() + { + Timestamp = ulong.MaxValue, + Number = long.MaxValue + }) + .WithTransactions(CreateTransactions(100, 10)) + .TestObject; + _block100TxWith1AuthSigs = Build.A.Block .WithHeader(new BlockHeader() { @@ -79,7 +98,7 @@ public void GlobalSetup() .WithTransactions(CreateTransactions(10, 0)) .TestObject; - static Transaction[] CreateTransactions(int txCount, int authPerTx) + Transaction[] CreateTransactions(int txCount, int authPerTx) { var list = new List(); for (int i = 0; i < txCount; i++) @@ -94,9 +113,9 @@ static Transaction[] CreateTransactions(int txCount, int authPerTx) PrivateKey authority = _privateKeys[i + y + _privateKeys.Length / 2]; return CreateAuthorizationTuple( authority, - 1, + (ulong)rnd.NextInt64(), Address.Zero, - 1); + (ulong)rnd.NextInt64()); }).ToArray() ) .SignedAndResolved(signer) @@ -124,6 +143,8 @@ static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chai [IterationCleanup] public void IterationCleanup() { + ResetSigs(_block100TxWith100AuthSigs); + ResetSigs(_block100TxWith10AuthSigs); ResetSigs(_block100TxWith1AuthSigs); ResetSigs(_block10TxWith10AuthSigs); ResetSigs(_block10TxWith0AuthSigs); @@ -134,16 +155,28 @@ void ResetSigs(Block block) Parallel.ForEach(block.Transactions, (t)=> { t.SenderAddress = null; - foreach (var tuple in t.AuthorizationList) - { + t.Hash = null; + Parallel.ForEach(t.AuthorizationList, (tuple) => { tuple.Authority = null; - } + }); }); } } [Benchmark] - public void Recover100TxSignaturesAndAuthoritySignatures() + public void Recover100TxSignatureswith100AuthoritySignatures() + { + _sut.RecoverData(_block100TxWith100AuthSigs); + } + + [Benchmark] + public void Recover100TxSignatureswith10AuthoritySignatures() + { + _sut.RecoverData(_block100TxWith10AuthSigs); + } + + [Benchmark] + public void Recover100TxSignaturesWith1AuthoritySignatures() { _sut.RecoverData(_block100TxWith1AuthSigs); } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 2c417e737b1..7dc37854c7f 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -2,12 +2,9 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.IO; -using System.Linq; using System.Runtime.CompilerServices; using System.Threading.Tasks; using Nethermind.Core; -using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Logging; @@ -104,7 +101,7 @@ public void RecoverData(Block block) if (!ShouldRecoverSender(tx)) return; tx.SenderAddress = _ecdsa.RecoverAddress(tx, useSignatureChainId); - + RecoverAuthorities(tx); if (_logger.IsTrace) _logger.Trace($"Recovered {tx.SenderAddress} sender for {tx.Hash}"); }); } @@ -115,33 +112,31 @@ public void RecoverData(Block block) if (!ShouldRecoverSender(tx)) continue; tx.SenderAddress = _ecdsa.RecoverAddress(tx, useSignatureChainId); - + RecoverAuthorities(tx); if (_logger.IsTrace) _logger.Trace($"Recovered {tx.SenderAddress} sender for {tx.Hash}"); } } - if (releaseSpec.IsAuthorizationListEnabled) + void RecoverAuthorities(Transaction tx) { - foreach (Transaction tx in block.Transactions.AsSpan()) + if (!releaseSpec.IsAuthorizationListEnabled + || !tx.HasAuthorizationList) { - if (!tx.HasAuthorizationList) - { - continue; - } + return; + } - if (tx.AuthorizationList.Length >= 4) + if (tx.AuthorizationList.Length > 3) + { + Parallel.ForEach(tx.AuthorizationList, (tuple) => { - Parallel.ForEach(tx.AuthorizationList, (tuple) => - { - tuple.Authority = _ecdsa.RecoverAddress(tuple); - }); - } - else + tuple.Authority = _ecdsa.RecoverAddress(tuple); + }); + } + else + { + foreach (AuthorizationTuple tuple in tx.AuthorizationList.AsSpan()) { - foreach (AuthorizationTuple tuple in tx.AuthorizationList.AsSpan()) - { - tuple.Authority = _ecdsa.RecoverAddress(tuple); - } + tuple.Authority = _ecdsa.RecoverAddress(tuple); } } } From aec7e85edd8e48164806f46122e46a23e6278a3a Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 20 Sep 2024 13:12:31 +0200 Subject: [PATCH 410/551] fix test --- .../Core/RecoverSignaturesBenchmark.cs | 7 ++++--- .../Encoding/AuthorizationTupleDecoderTests.cs | 4 ++-- .../Modules/Eth/EthRpcModuleTests.cs | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs index 80579d4dc18..8ba383c4215 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs @@ -152,11 +152,12 @@ public void IterationCleanup() void ResetSigs(Block block) { - Parallel.ForEach(block.Transactions, (t)=> + Parallel.ForEach(block.Transactions, (t) => { t.SenderAddress = null; t.Hash = null; - Parallel.ForEach(t.AuthorizationList, (tuple) => { + Parallel.ForEach(t.AuthorizationList, (tuple) => + { tuple.Authority = null; }); }); @@ -299,5 +300,5 @@ public bool TryGetPendingTransaction(Hash256 hash, [NotNullWhen(true)] out Trans return false; } } - } + } } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs index bb5f6fc15eb..0d243601940 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs @@ -42,7 +42,7 @@ public void Encode_TupleHasValues_TupleCanBeDecodedToEquivalentTuple(Authorizati } [Test] - public void DecodeValueDecoderContext_CodeAddressIsNull_ThrowsArgumentNullException() + public void DecodeValueDecoderContext_CodeAddressIsNull_ThrowsRlpException() { RlpStream stream = TupleRlpStreamWithNull(); @@ -52,7 +52,7 @@ public void DecodeValueDecoderContext_CodeAddressIsNull_ThrowsArgumentNullExcept Rlp.ValueDecoderContext decoderContext = new Rlp.ValueDecoderContext(stream.Data); sut.Decode(ref decoderContext, RlpBehaviors.None); } - , Throws.TypeOf()); + , Throws.TypeOf()); } private static RlpStream TupleRlpStreamWithNull() diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs index 714f4aedf39..08cbed15504 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs @@ -1276,7 +1276,7 @@ public async Task eth_sendRawTransaction_returns_correct_error_if_AuthorityTuple specProvider.AllowTestChainOverride = false; TestRpcBlockchain test = await TestRpcBlockchain.ForTest(SealEngineType.NethDev).Build(specProvider); - Transaction invalidSetCodeTx= Build.A.Transaction + Transaction invalidSetCodeTx = Build.A.Transaction .WithType(TxType.SetCode) .WithNonce(test.State.GetNonce(TestItem.AddressB)) .WithMaxFeePerGas(9.GWei()) From 5e59935c435c0ea55d178b0998ba1860ce3ec305 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 20 Sep 2024 14:06:12 +0200 Subject: [PATCH 411/551] if sender recovered from pool also set authority --- .../Processing/RecoverSignature.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 7dc37854c7f..22d7e5d0894 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -79,6 +79,18 @@ public void RecoverData(Block block) { tx.SenderAddress = sender; + if (tx.HasAuthorizationList) + { + Parallel.For(0, tx.AuthorizationList.Length, (i) => + { + AuthorizationTuple tuple = tx.AuthorizationList[i]; + if (tuple.Authority is null) + { + tuple.Authority = poolTx.AuthorizationList[i].Authority; + } + }); + } + if (_logger.IsTrace) _logger.Trace($"Recovered {tx.SenderAddress} sender for {tx.Hash} (tx pool cached value: {sender})"); } else From 54a59ba17717d86050fe941f63f2d088812e98f5 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 20 Sep 2024 14:08:58 +0200 Subject: [PATCH 412/551] Apply suggestions from code review --- src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs | 2 +- .../Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs index 71b31c29ebc..08367798dd2 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs @@ -44,7 +44,7 @@ public void GlobalSetup() _stateProvider = new WorldState(trieStore, codeDb, new OneLoggerLogManager(NullLogger.Instance)); _stateProvider.CreateAccount(Address.Zero, 1000.Ether()); _stateProvider.Commit(_spec); - CodeInfoRepository codeInfoRepository = new(0); + CodeInfoRepository codeInfoRepository = new(BlockchainIds.Mainnet); _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, LimboLogs.Instance); _environment = new ExecutionEnvironment diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs index 13d36dd9f18..491674460e7 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs @@ -76,7 +76,7 @@ public void GlobalSetup() _stateProvider.Commit(_spec); Console.WriteLine(MuirGlacier.Instance); - CodeInfoRepository codeInfoRepository = new(0); + CodeInfoRepository codeInfoRepository = new(BlockchainIds.Mainnet); _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, new OneLoggerLogManager(NullLogger.Instance)); _environment = new ExecutionEnvironment From 9c3ec4d857c7915b0143ccc792f14c7c8789dde1 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 20 Sep 2024 14:11:13 +0200 Subject: [PATCH 413/551] cosmetic --- src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs index ca0f1afa3ac..4af14dd0d99 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs @@ -87,7 +87,7 @@ public void GlobalSetup() _stateProvider.Commit(_spec); Console.WriteLine(MuirGlacier.Instance); - CodeInfoRepository codeInfoRepository = new(0); + CodeInfoRepository codeInfoRepository = new(BlockchainIds.Mainnet); _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, new OneLoggerLogManager(NullLogger.Instance)); _environment = new ExecutionEnvironment From 7f48fd6ae89499548a68e681e9a2861f0ee4f051 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sat, 21 Sep 2024 00:07:21 +0200 Subject: [PATCH 414/551] a few optimizations --- .../Requests/ConsolidationRequestProcessor.cs | 18 ++++++++++-------- .../Requests/WithdrawalRequestsProcessor.cs | 9 +++++---- .../ConsensusRequests/ConsolidationRequest.cs | 4 ++-- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs index edc6b450b07..a8a313d0ecb 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs @@ -3,10 +3,8 @@ using System; using System.Collections.Generic; -using System.Linq; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Crypto; @@ -50,15 +48,19 @@ public IEnumerable ReadConsolidationRequests(IReleaseSpec if (result == null || result.Length == 0) yield break; + Memory memory = result.AsMemory(); int sizeOfClass = 20 + 48 + 48; - int count = result.Length / sizeOfClass; + int count = memory.Length / sizeOfClass; + for (int i = 0; i < count; ++i) { - ConsolidationRequest request = new(); - Span span = new Span(result, i * sizeOfClass, sizeOfClass); - request.SourceAddress = new Address(span.Slice(0, 20).ToArray()); - request.SourcePubkey = span.Slice(20, 48).ToArray(); - request.TargetPubkey = span.Slice(68, 48).ToArray(); + int offset = i * sizeOfClass; + ConsolidationRequest request = new() + { + SourceAddress = new Address(memory.Slice(offset, 20).AsArray()), + SourcePubkey = memory.Slice(offset + 20, 48), + TargetPubkey = memory.Slice(offset + 68, 48) + }; yield return request; } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 93f04d38d55..192f9ef62ea 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -33,15 +33,16 @@ public IEnumerable ReadWithdrawalRequests(Block block, IWorld byte[]? result = ExecuteTransaction(block, spec); if (result?.Length > 0) { + Memory memory = result.AsMemory(); int count = result.Length / SizeOfClass; for (int i = 0; i < count; ++i) { - Memory memory = result.AsMemory(i * SizeOfClass, SizeOfClass); + int offset = i * SizeOfClass; WithdrawalRequest request = new() { - SourceAddress = new Address(memory.Slice(0, 20).AsArray()), - ValidatorPubkey = memory.Slice(20, 48), - Amount = BinaryPrimitives.ReadUInt64BigEndian(memory.Slice(68, 8).Span) + SourceAddress = new Address(memory.Slice(offset, 20).AsArray()), + ValidatorPubkey = memory.Slice(offset + 20, 48), + Amount = BinaryPrimitives.ReadUInt64BigEndian(memory.Slice(offset + 68, 8).Span) }; yield return request; } diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs index 08e95cdc0dd..abf79b924a1 100644 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs +++ b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs @@ -17,14 +17,14 @@ public ConsolidationRequest() public Address? SourceAddress { get; set; } public Memory? SourcePubkey { get; set; } - public byte[]? TargetPubkey { get; set; } + public Memory? TargetPubkey { get; set; } public override string ToString() => ToString(string.Empty); public string ToString(string indentation) => @$"{indentation}{nameof(ConsolidationRequest)} {{ {nameof(SourceAddress)}: {SourceAddress}, {nameof(SourcePubkey)}: {SourcePubkey?.Span.ToHexString()}, - {nameof(TargetPubkey)}: {TargetPubkey?.ToHexString()}, + {nameof(TargetPubkey)}: {TargetPubkey?.Span.ToHexString()}, }}"; From 7da0be085cd4f1765bd346216b72018cc6cd477e Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sat, 21 Sep 2024 00:14:46 +0200 Subject: [PATCH 415/551] fix --- .../Requests/ConsolidationRequestProcessor.cs | 2 +- .../Requests/WithdrawalRequestsProcessor.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs index a8a313d0ecb..7bb42f5b38d 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs @@ -57,7 +57,7 @@ public IEnumerable ReadConsolidationRequests(IReleaseSpec int offset = i * sizeOfClass; ConsolidationRequest request = new() { - SourceAddress = new Address(memory.Slice(offset, 20).AsArray()), + SourceAddress = new Address(memory.Slice(offset, 20).ToArray()), SourcePubkey = memory.Slice(offset + 20, 48), TargetPubkey = memory.Slice(offset + 68, 48) }; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 192f9ef62ea..13cb1b5fe71 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -40,7 +40,7 @@ public IEnumerable ReadWithdrawalRequests(Block block, IWorld int offset = i * SizeOfClass; WithdrawalRequest request = new() { - SourceAddress = new Address(memory.Slice(offset, 20).AsArray()), + SourceAddress = new Address(memory.Slice(offset, 20).ToArray()), ValidatorPubkey = memory.Slice(offset + 20, 48), Amount = BinaryPrimitives.ReadUInt64BigEndian(memory.Slice(offset + 68, 8).Span) }; From 18a3e0e4ec370f335144c70f0b8cdab0860b7302 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Sat, 21 Sep 2024 00:25:35 +0200 Subject: [PATCH 416/551] cosmetic --- .../Requests/ConsolidationRequestProcessor.cs | 6 +++--- .../Requests/WithdrawalRequestsProcessor.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs index 7bb42f5b38d..56617ce2e9a 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs @@ -20,6 +20,7 @@ namespace Nethermind.Consensus.Requests; public class ConsolidationRequestsProcessor(ITransactionProcessor transactionProcessor) { private const long GasLimit = 30_000_000L; + private const int SizeOfClass = 20 + 48 + 48; public IEnumerable ReadConsolidationRequests(IReleaseSpec spec, IWorldState state, Block block) { @@ -49,12 +50,11 @@ public IEnumerable ReadConsolidationRequests(IReleaseSpec yield break; Memory memory = result.AsMemory(); - int sizeOfClass = 20 + 48 + 48; - int count = memory.Length / sizeOfClass; + int count = memory.Length / SizeOfClass; for (int i = 0; i < count; ++i) { - int offset = i * sizeOfClass; + int offset = i * SizeOfClass; ConsolidationRequest request = new() { SourceAddress = new Address(memory.Slice(offset, 20).ToArray()), diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 13cb1b5fe71..192f9ef62ea 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -40,7 +40,7 @@ public IEnumerable ReadWithdrawalRequests(Block block, IWorld int offset = i * SizeOfClass; WithdrawalRequest request = new() { - SourceAddress = new Address(memory.Slice(offset, 20).ToArray()), + SourceAddress = new Address(memory.Slice(offset, 20).AsArray()), ValidatorPubkey = memory.Slice(offset + 20, 48), Amount = BinaryPrimitives.ReadUInt64BigEndian(memory.Slice(offset + 68, 8).Span) }; From 58ae212d7e906bf50bfb7ccf2fd5df00a51980f4 Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Mon, 23 Sep 2024 13:12:33 +0200 Subject: [PATCH 417/551] cosmetic --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index fd7f5c78c09..aaceac18b3f 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -476,7 +476,6 @@ private static void UpdateGasUp(long refund, ref long gasAvailable) private bool ChargeAccountAccessGas(ref long gasAvailable, EvmState vmState, Address address, bool chargeForDelegation, IReleaseSpec spec, bool chargeForWarm = true) { - // Console.WriteLine($"Accessing {address}"); if (!spec.UseHotAndColdStorage) { return true; From 581321d00ad1507fd8f9c063438a9d80c88f34e0 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 23 Sep 2024 15:26:46 +0200 Subject: [PATCH 418/551] cosmetic cleanup --- .../Requests/ConsensusRequestsProcessor.cs | 1 - .../Requests/ConsolidationRequestProcessor.cs | 1 - .../Nethermind.Consensus/Validators/TxValidator.cs | 1 - src/Nethermind/Nethermind.Core/AuthorizationTuple.cs | 4 ---- src/Nethermind/Nethermind.Crypto/KeccakRlpStream.cs | 1 - .../Nethermind.Evm.Test/CodeInfoRepositoryTests.cs | 3 +-- .../ConsolidationRequestProcessorTest.cs | 4 ---- .../Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs | 3 +-- .../TransactionProcessorEip7702Tests.cs | 1 - .../TransactionProcessing/ITransactionProcessor.cs | 2 -- .../TransactionProcessing/TransactionProcessor.cs | 9 ++------- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 7 ++++--- .../Nethermind.Facade/Eth/AuthorizationTupleForRpc.cs | 2 -- src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs | 8 -------- .../Nethermind.State.Test/StateProviderTests.cs | 2 +- .../Nethermind.State.Test/StatsCollectorTests.cs | 4 ++-- .../Nethermind.Synchronization.Test/SynchronizerTests.cs | 1 - src/Nethermind/Nethermind.TxPool/Metrics.cs | 2 +- 18 files changed, 12 insertions(+), 44 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index abc6a04f840..0d0397b4bd1 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -9,7 +9,6 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Evm.TransactionProcessing; -using Nethermind.Serialization.Rlp; using Nethermind.State; using Nethermind.State.Proofs; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs index 56617ce2e9a..1ceeb7b3026 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using Nethermind.Core; using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Evm; diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index fcc971435a6..00aac542e9a 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -9,7 +9,6 @@ using Nethermind.TxPool; using Nethermind.Core.Crypto; using Nethermind.Crypto; -using Nethermind.Db; using Nethermind.Evm; using Nethermind.Int256; using System.Linq; diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index de5deb59cec..bed7a291247 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -2,11 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core.Crypto; -using Nethermind.Crypto; -using Nethermind.Int256; -using Nethermind.Logging; using System; -using System.Diagnostics.CodeAnalysis; namespace Nethermind.Core; public class AuthorizationTuple( diff --git a/src/Nethermind/Nethermind.Crypto/KeccakRlpStream.cs b/src/Nethermind/Nethermind.Crypto/KeccakRlpStream.cs index 4ec98398538..3a943a97bed 100644 --- a/src/Nethermind/Nethermind.Crypto/KeccakRlpStream.cs +++ b/src/Nethermind/Nethermind.Crypto/KeccakRlpStream.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using System.Runtime.InteropServices; using Nethermind.Core.Crypto; diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index cf3f18b860d..adb4c93e89a 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -11,7 +11,6 @@ using NUnit.Framework; using System; using System.Collections.Generic; -using System.Linq; using Nethermind.Core.Test.Builders; using FluentAssertions; using Nethermind.State; @@ -36,7 +35,7 @@ public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() CreateAuthorizationTuple(authority, 1, TestItem.AddressB, 0), }; HashSet
accessedAddresses = new(); - int result = sut.InsertFromAuthorizations(Substitute.For(), tuples, accessedAddresses, Substitute.For()); + sut.InsertFromAuthorizations(Substitute.For(), tuples, accessedAddresses, Substitute.For()); accessedAddresses.Should().BeEquivalentTo([authority.Address]); } diff --git a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs index df3fd5aeb54..a75f5d0d5aa 100644 --- a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs +++ b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs @@ -29,7 +29,6 @@ public class ConsolidationRequestProcessorTests { private ISpecProvider _specProvider; - private IEthereumEcdsa _ethereumEcdsa; private ITransactionProcessor _transactionProcessor; private IWorldState _stateProvider; @@ -63,8 +62,6 @@ public void Setup() tracer.ReturnValue = Bytes.FromHexString("a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000effffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ffffffffffffffff"); return new TransactionResult(); }); - - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); } @@ -90,7 +87,6 @@ public void ShouldProcessConsolidationRequest() var ConsolidationRequests = ConsolidationRequestsProcessor.ReadConsolidationRequests(spec, _stateProvider, block).ToList(); Assert.That(ConsolidationRequests, Has.Count.EqualTo(10)); - ConsolidationRequest ConsolidationRequestResult = ConsolidationRequests[0]; ConsolidationRequestResult.Should().BeEquivalentTo(ConsolidationRequest, options => options diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index 2ca8e4a009d..d1c068694da 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; using System.Collections.Generic; using System.IO; using FluentAssertions; @@ -181,7 +180,7 @@ public void Calculate_TxHasAuthorizationList_ReturnsExpectedCostOfTx((Authorizat .TestObject; IntrinsicGasCalculator.Calculate(tx, Prague.Instance) - .Should().Be(21000 + (testCase.ExpectedCost)); + .Should().Be(GasCostOf.Transaction + (testCase.ExpectedCost)); } [Test] diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 1d634ad0b93..cfd7e151a57 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -8,7 +8,6 @@ using Nethermind.Core.Test.Builders; using Nethermind.Crypto; using Nethermind.Db; -using Nethermind.Int256; using Nethermind.Evm.Tracing; using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs index bb38567e49e..96ac8e27948 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/ITransactionProcessor.cs @@ -1,8 +1,6 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; -using System.Diagnostics.CodeAnalysis; using Nethermind.Core; using Nethermind.Evm.Tracing; diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 684e42e6847..1424f76780f 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Diagnostics.Eventing.Reader; using System.IO; using System.Linq; using System.Runtime.CompilerServices; @@ -19,7 +18,6 @@ using Nethermind.Logging; using Nethermind.State; using Nethermind.State.Tracing; -using static Nethermind.Core.Extensions.MemoryExtensions; using static Nethermind.Evm.VirtualMachine; @@ -153,12 +151,9 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon HashSet
accessedAddresses = new(); int delegationRefunds = 0; - if (spec.IsEip7702Enabled) + if (spec.IsEip7702Enabled && tx.HasAuthorizationList) { - if (tx.HasAuthorizationList) - { - delegationRefunds = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, accessedAddresses, spec); - } + delegationRefunds = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, accessedAddresses, spec); } ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository, accessedAddresses); diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index db5aa8d169d..d62229f4044 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -1903,9 +1903,10 @@ private CallResult ExecuteCode Date: Tue, 24 Sep 2024 13:54:03 +0200 Subject: [PATCH 419/551] cosmetic --- .../TransactionProcessing/TransactionProcessor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 1424f76780f..4b6db98c536 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -605,9 +605,9 @@ private void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, EvmSt if (spec.UseHotAndColdStorage) // eip-2929 { - foreach (Address authorized in accessedAddresses) + foreach (Address accessed in accessedAddresses) { - state.WarmUp(authorized); + state.WarmUp(accessed); } } From 757d06f1cfd8d796bbf7ce7c5edf2cee06ec88cb Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 24 Sep 2024 14:24:40 +0200 Subject: [PATCH 420/551] removed metric --- .../Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs b/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs index 8ab393480de..2989cbed662 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs @@ -16,8 +16,6 @@ public AcceptTxResult Accept(Transaction tx, ref TxFilteringState state, TxHandl if (!tx.HasAuthorizationList) return AcceptTxResult.Accepted; - Metrics.PendingTransactionsWithExpensiveFiltering++; - foreach (AuthorizationTuple tuple in tx.AuthorizationList!) { if (tuple is null) From 1aa8096fb68188193fa2aa8209e450400c1d862d Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Wed, 25 Sep 2024 15:39:17 +0200 Subject: [PATCH 421/551] cosmetic --- src/Nethermind/Nethermind.State.Test/StateProviderTests.cs | 2 +- src/Nethermind/Nethermind.TxPool/AcceptTxResult.cs | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs index 8197dae5530..1379fa0373d 100644 --- a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs @@ -69,7 +69,7 @@ public void Eip_158_touch_zero_value_system_account_is_not_deleted() provider.Commit(Homestead.Instance); var releaseSpec = new ReleaseSpec() { IsEip158Enabled = true }; - provider.InsertCode(systemUser, System.Text.Encoding.UTF8.GetBytes(""), releaseSpec, false); + provider.InsertCode(systemUser, System.Text.Encoding.UTF8.GetBytes(""), releaseSpec); provider.Commit(releaseSpec); provider.GetAccount(systemUser).Should().NotBeNull(); diff --git a/src/Nethermind/Nethermind.TxPool/AcceptTxResult.cs b/src/Nethermind/Nethermind.TxPool/AcceptTxResult.cs index d0f7fe36598..f8a0033dfe7 100644 --- a/src/Nethermind/Nethermind.TxPool/AcceptTxResult.cs +++ b/src/Nethermind/Nethermind.TxPool/AcceptTxResult.cs @@ -90,11 +90,6 @@ namespace Nethermind.TxPool ///
public static readonly AcceptTxResult NotSupportedTxType = new(15, nameof(NotSupportedTxType)); - /// - /// Ignores transactions if authority in authority_list is unresolvable - /// - public static readonly AcceptTxResult FailedToResolveAuthority = new(16, nameof(FailedToResolveAuthority)); - private int Id { get; } private string Code { get; } private string? Message { get; } From d124cf72bb12ec5c14cc6ac33494a2b001414c72 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 25 Sep 2024 16:11:20 +0200 Subject: [PATCH 422/551] small optimization --- .../Core/CodeInfoRepositoryBenchmark.cs | 30 ++++++++++++++----- .../CodeInfoRepositoryTests.cs | 10 ++++--- .../Nethermind.Evm/CodeInfoRepository.cs | 8 +++-- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs index 2a12eaa790c..bdaf9ed2841 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs @@ -28,8 +28,10 @@ public class CodeInfoRepositoryBenchmark private IReleaseSpec _spec = MainnetSpecProvider.Instance.GetSpec(MainnetSpecProvider.PragueActivation); + private AuthorizationTuple[] Tuples1; + private AuthorizationTuple[] Tuples5; + private AuthorizationTuple[] Tuples10; private AuthorizationTuple[] Tuples100; - private AuthorizationTuple[] Tuples1k; private CodeInfoRepository sut; private static EthereumEcdsa _ethereumEcdsa; @@ -62,8 +64,10 @@ public void GlobalSetup() new Address(addressBuffer), 1)); } - Tuples100 = list.Take(100).ToArray(); - Tuples1k = list.Take(1_000).ToArray(); + Tuples1 = list.Take(1).ToArray(); + Tuples5 = list.Skip(1).Take(5).ToArray(); + Tuples10 = list.Skip(6).Take(10).ToArray(); + Tuples100 = list.Skip(16).Take(100).ToArray(); static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) { @@ -80,14 +84,26 @@ static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chai } [Benchmark] - public void Build100Tuples() + public void Build1Tuples() { - sut.InsertFromAuthorizations(_stateProvider, Tuples100, _accessedAddresses, _spec); + sut.InsertFromAuthorizations(_stateProvider, Tuples1, _accessedAddresses, _spec); + } + + [Benchmark] + public void Build5Tuples() + { + sut.InsertFromAuthorizations(_stateProvider, Tuples5, _accessedAddresses, _spec); } [Benchmark] - public void Build1kTuples() + public void Build10Tuples() { - sut.InsertFromAuthorizations(_stateProvider, Tuples1k, _accessedAddresses, _spec); + sut.InsertFromAuthorizations(_stateProvider, Tuples10, _accessedAddresses, _spec); + } + + [Benchmark] + public void Build100Tuples() + { + sut.InsertFromAuthorizations(_stateProvider, Tuples100, _accessedAddresses, _spec); } } diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index adb4c93e89a..656454f1f79 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -26,7 +26,7 @@ namespace Nethermind.Evm.Test; public class CodeInfoRepositoryTests { [Test] - public void InsertFromAuthorizations_AuthorityTupleIsCorrect_CodeIsInserted() + public void InsertFromAuthorizations_AuthorityTupleIsCorrect_AuthorityIsAddedToAccessedAddresses() { PrivateKey authority = TestItem.PrivateKeyA; CodeInfoRepository sut = new(1); @@ -119,8 +119,9 @@ public void InsertFromAuthorizations_AuthorityHasDelegatedCode_CodeIsInserted() Assert.That(stateProvider.GetCode(authority.Address).Slice(3), Is.EqualTo(codeSource.Bytes)); } - [Test] - public void InsertFromAuthorizations_AuthorityHasZeroNonce_NonceIsIncrementedByOne() + [TestCase(true)] + [TestCase(false)] + public void InsertFromAuthorizations_AuthorityAccountExistsOrNot_NonceIsIncrementedByOne(bool accountExists) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); @@ -128,7 +129,8 @@ public void InsertFromAuthorizations_AuthorityHasZeroNonce_NonceIsIncrementedByO IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); PrivateKey authority = TestItem.PrivateKeyA; Address codeSource = TestItem.AddressB; - stateProvider.CreateAccount(authority.Address, 0); + if (accountExists) + stateProvider.CreateAccount(authority.Address, 0); CodeInfoRepository sut = new(1); var tuples = new[] { diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 80860055d80..5878d043286 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -18,6 +18,8 @@ using Nethermind.State; using Nethermind.Int256; using Nethermind.Crypto; +using System.Threading; +using System.Threading.Tasks; namespace Nethermind.Evm; @@ -177,12 +179,14 @@ public int InsertFromAuthorizations( continue; if (worldState.AccountExists(authTuple.Authority)) + { refunds++; + worldState.IncrementNonce(authTuple.Authority); + } else - worldState.CreateAccount(authTuple.Authority, 0); + worldState.CreateAccount(authTuple.Authority, 0, 1); InsertDelegationCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); - worldState.IncrementNonce(authTuple.Authority); } return refunds; From f3bce87c4d5485a061852966a3a64bd4bb5549df Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 25 Sep 2024 16:11:59 +0200 Subject: [PATCH 423/551] small changes from review --- src/Nethermind/Nethermind.Core/Eip7702Constants.cs | 3 ++- src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs | 2 +- src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs | 8 ++++---- .../Eip7702/AuthorizationTupleDecoder.cs | 3 +++ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs index ecabb38051d..d54ff84f4b4 100644 --- a/src/Nethermind/Nethermind.Core/Eip7702Constants.cs +++ b/src/Nethermind/Nethermind.Core/Eip7702Constants.cs @@ -8,7 +8,8 @@ public static class Eip7702Constants { public const byte Magic = 0x05; public static ReadOnlySpan DelegationHeader => [0xef, 0x01, 0x00]; + private static readonly int HeaderLength = DelegationHeader.Length; public static bool IsDelegatedCode(ReadOnlySpan code) => - code.Length == DelegationHeader.Length + Address.Size + code.Length == HeaderLength + Address.Size && DelegationHeader.SequenceEqual(code.Slice(0, DelegationHeader.Length)); } diff --git a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs index 22604c62c10..5a7622d309e 100644 --- a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs @@ -28,7 +28,7 @@ public class EthereumEcdsa : Ecdsa, IEthereumEcdsa BigInteger.Parse("00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", NumberStyles.HexNumber); - private readonly AuthorizationTupleDecoder _tupleDecoder = new(); + private readonly AuthorizationTupleDecoder _tupleDecoder = AuthorizationTupleDecoder.Instance; private readonly ulong _chainIdValue; public ulong ChainId => _chainIdValue; diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 5878d043286..7102f3601f6 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -18,8 +18,6 @@ using Nethermind.State; using Nethermind.Int256; using Nethermind.Crypto; -using System.Threading; -using System.Threading.Tasks; namespace Nethermind.Evm; @@ -267,10 +265,12 @@ private bool HasDelegatedCode(IWorldState worldState, Address source) Eip7702Constants.IsDelegatedCode(InternalGetCachedCode(worldState, source).MachineCode.Span); } + /// + /// Parses delegation code to extract the contained address. + /// Assumes is delegation code! + /// private static Address ParseDelegatedAddress(ReadOnlySpan code) { - if (code.Length != Eip7702Constants.DelegationHeader.Length + Address.Size) - throw new ArgumentException("Not valid delegation code.", nameof(code)); return new Address(code.Slice(Eip7702Constants.DelegationHeader.Length).ToArray()); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index b4ee97a1436..535067e0680 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -3,6 +3,7 @@ using Nethermind.Core; using Nethermind.Int256; +using Nethermind.Serialization.Rlp.Eip2930; using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; @@ -11,6 +12,8 @@ namespace Nethermind.Serialization.Rlp; public class AuthorizationTupleDecoder : IRlpStreamDecoder, IRlpValueDecoder { + public static readonly AuthorizationTupleDecoder Instance = new(); + public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int length = stream.ReadSequenceLength(); From 0e23a9e8598c2223dfb13f0a3113ac3fcaeed2b1 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 11:08:28 +0200 Subject: [PATCH 424/551] changes around CodeInfoRepository --- .../CodeInfoRepositoryTests.cs | 4 +-- .../Nethermind.Evm/CodeInfoRepository.cs | 15 +++++----- .../Nethermind.Evm/ICodeInfoRepository.cs | 9 ++++-- .../Nethermind.Evm/VirtualMachine.cs | 2 +- .../OverridableCodeInfoRepository.cs | 29 +++++-------------- 5 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 656454f1f79..39685de2826 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -350,7 +350,7 @@ public void GetCodeHash_CodeIsDelegation_ReturnsHashOfDelegated(byte[] code) CodeInfoRepository sut = new(1); - sut.GetCodeHash(stateProvider, TestItem.AddressA).Should().Be(Keccak.Compute(delegationCode).ValueHash256); + sut.GetExecutableCodeHash(stateProvider, TestItem.AddressA).Should().Be(Keccak.Compute(delegationCode).ValueHash256); } [TestCaseSource(nameof(NotDelegationCodeCases))] @@ -365,7 +365,7 @@ public void GetCodeHash_CodeIsNotDelegation_ReturnsCodeHashOfAddress(byte[] code CodeInfoRepository sut = new(1); - sut.GetCodeHash(stateProvider, TestItem.AddressA).Should().Be(Keccak.Compute(code).ValueHash256); + sut.GetExecutableCodeHash(stateProvider, TestItem.AddressA).Should().Be(Keccak.Compute(code).ValueHash256); } [TestCaseSource(nameof(DelegationCodeCases))] diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 7102f3601f6..473287935ca 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -205,19 +205,20 @@ void InsertDelegationCode(IWorldState state, Address codeSource, Address authori ///
/// /// - public ValueHash256 GetCodeHash(IWorldState worldState, Address address) + public ValueHash256 GetExecutableCodeHash(IWorldState worldState, Address address) { ValueHash256 codeHash = worldState.GetCodeHash(address); if (codeHash == Keccak.OfAnEmptyString.ValueHash256) + { return Keccak.OfAnEmptyString.ValueHash256; + } CodeInfo codeInfo = InternalGetCachedCode(worldState, address); - if (codeInfo.IsEmpty) - return Keccak.OfAnEmptyString.ValueHash256; - - if (Eip7702Constants.IsDelegatedCode(codeInfo.MachineCode.Span)) - return worldState.GetCodeHash(ParseDelegatedAddress(codeInfo.MachineCode.Span)); - return codeHash; + return codeInfo.IsEmpty + ? Keccak.OfAnEmptyString.ValueHash256 + : Eip7702Constants.IsDelegatedCode(codeInfo.MachineCode.Span) + ? worldState.GetCodeHash(ParseDelegatedAddress(codeInfo.MachineCode.Span)) + : codeHash; } /// diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index a32e232c9c4..f1646fbbd2c 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -14,11 +14,16 @@ namespace Nethermind.Evm; public interface ICodeInfoRepository { - CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec); CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec, out Address? delegationAddress); - ValueHash256 GetCodeHash(IWorldState worldState, Address address); + ValueHash256 GetExecutableCodeHash(IWorldState worldState, Address address); CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec); int InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec); bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress); } + +public static class CodeInfoRepositoryExtensions +{ + public static CodeInfo GetCachedCodeInfo(this ICodeInfoRepository codeInfoRepository, IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) + => codeInfoRepository.GetCachedCodeInfo(worldState, codeSource, vmSpec, out _); +} diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index d62229f4044..3880b359cfd 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -1912,7 +1912,7 @@ private CallResult ExecuteCode _codeOverwrites = new(); - public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) => - _codeOverwrites.TryGetValue(codeSource, out CodeInfo result) - ? result - : codeInfoRepository.GetCachedCodeInfo(worldState, codeSource, vmSpec); public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec, out Address? delegationAddress) { delegationAddress = null; @@ -43,29 +39,18 @@ public void SetCodeOverwrite( { if (redirectAddress is not null) { - _codeOverwrites[redirectAddress] = GetCachedCodeInfo(worldState, key, vmSpec); + _codeOverwrites[redirectAddress] = this.GetCachedCodeInfo(worldState, key, vmSpec); } _codeOverwrites[key] = value; } - public void ClearOverwrites() - { - _codeOverwrites.Clear(); - } + public int InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec) => + codeInfoRepository.InsertFromAuthorizations(worldState, authorizations, accessedAddresses, spec); - public int InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec) - { - return codeInfoRepository.InsertFromAuthorizations(worldState, authorizations, accessedAddresses, spec); - } + public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => + codeInfoRepository.IsDelegation(worldState, address, out delegatedAddress); - public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) - { - return codeInfoRepository.IsDelegation(worldState, address, out delegatedAddress); - } - - public ValueHash256 GetCodeHash(IWorldState worldState, Address address) - { - return codeInfoRepository.GetCodeHash(worldState, address); - } + public ValueHash256 GetExecutableCodeHash(IWorldState worldState, Address address) => + codeInfoRepository.GetExecutableCodeHash(worldState, address); } From e66c64c24cd197f07ada2426dc437612038e4af6 Mon Sep 17 00:00:00 2001 From: Lukasz Rozmej Date: Thu, 26 Sep 2024 11:11:35 +0200 Subject: [PATCH 425/551] Update src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs --- src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 473287935ca..ac5c03438d6 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -280,17 +280,8 @@ private CodeInfo CreateCachedPrecompile( ConcurrentDictionary, bool)> cache) => new(new CachedPrecompile(originalPrecompile.Key.Value, originalPrecompile.Value.Precompile!, cache)); - public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) - { - CodeInfo codeInfo = InternalGetCachedCode(worldState, address); - if (Eip7702Constants.IsDelegatedCode(codeInfo.MachineCode.Span)) - { - delegatedAddress = ParseDelegatedAddress(codeInfo.MachineCode.Span); - return true; - } - delegatedAddress = null; - return false; - } + public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => + TryGetDelegatedAddress(InternalGetCachedCode(worldState, address).MachineCode.Span, out delegatedAddress); private class CachedPrecompile( Address address, From 667e1682c219598a6371a110571ae0a91a6d237a Mon Sep 17 00:00:00 2001 From: Lukasz Rozmej Date: Thu, 26 Sep 2024 11:12:50 +0200 Subject: [PATCH 426/551] Update src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs --- src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index ac5c03438d6..497fb27abac 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -82,11 +82,9 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR CodeInfo cachedCodeInfo = InternalGetCachedCode(worldState, codeSource); - if (Eip7702Constants.IsDelegatedCode(cachedCodeInfo.MachineCode.Span)) + if (TryGetDelegatedAddress(cachedCodeInfo.MachineCode.Span, out delegationAddress)) { - Address parsedDelegated = ParseDelegatedAddress(cachedCodeInfo.MachineCode.Span); - cachedCodeInfo = InternalGetCachedCode(worldState, parsedDelegated); - delegationAddress = parsedDelegated; + cachedCodeInfo = InternalGetCachedCode(worldState, delegationAddress); } return cachedCodeInfo; From 42ab153c770c78671c37dfb857e67f12b921b62e Mon Sep 17 00:00:00 2001 From: Lukasz Rozmej Date: Thu, 26 Sep 2024 11:13:19 +0200 Subject: [PATCH 427/551] Update src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs --- .../Nethermind.Consensus/Validators/TxValidator.cs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 00aac542e9a..e2947900cf4 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -326,15 +326,13 @@ private ValidationResult Validate7702Fields(Transaction tx) { return TxErrorMessages.NotAllowedCreateTransaction; } - if (tx.AuthorizationList is null || tx.AuthorizationList.Length == 0) + return tx.AuthorizationList switch { - return TxErrorMessages.MissingAuthorizationList; - } - if (tx.AuthorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature))) - { - return TxErrorMessages.InvalidAuthoritySignature; - } - return ValidationResult.Success; + null or { Length: 0 } => TxErrorMessages.MissingAuthorizationList, + var authorizationList when authorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature) => + TxErrorMessages.InvalidAuthoritySignature, + _ => ValidationResult.Success + }; } private bool ValidateAuthoritySignature(Signature signature) { From 085fa42e3fde51cf2636504df2c32001c10788f0 Mon Sep 17 00:00:00 2001 From: Lukasz Rozmej Date: Thu, 26 Sep 2024 11:13:48 +0200 Subject: [PATCH 428/551] Update src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs --- .../Nethermind.Consensus/Validators/TxValidator.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index e2947900cf4..42f2a32926f 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -338,11 +338,6 @@ private bool ValidateAuthoritySignature(Signature signature) { UInt256 sValue = new(signature.SAsSpan, isBigEndian: true); - if (sValue >= Secp256K1Curve.HalfNPlusOne) - { - return false; - } - - return signature.RecoveryId is 0 or 1; + return sValue < Secp256K1Curve.HalfNPlusOne && signature.RecoveryId is 0 or 1; } } From a7dd3d9c700def9f5527a652af86be1cf53ff449 Mon Sep 17 00:00:00 2001 From: Lukasz Rozmej Date: Thu, 26 Sep 2024 11:14:16 +0200 Subject: [PATCH 429/551] Update src/Nethermind/Nethermind.Evm/VirtualMachine.cs --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 3880b359cfd..813ec9789e8 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -481,14 +481,11 @@ private bool ChargeAccountAccessGas(ref long gasAvailable, EvmState vmState, Add return true; } bool notOutOfGas = ChargeAccountGas(ref gasAvailable, vmState, address, spec); - if (notOutOfGas - && chargeForDelegation - && vmState.Env.TxExecutionContext.CodeInfoRepository.IsDelegation(_state, address, out Address delegated) - ) - { - return ChargeAccountGas(ref gasAvailable, vmState, delegated, spec); - } - return notOutOfGas; + return notOutOfGas + && chargeForDelegation + && vmState.Env.TxExecutionContext.CodeInfoRepository.IsDelegation(_state, address, out Address delegated) + ? ChargeAccountGas(ref gasAvailable, vmState, delegated, spec) + : notOutOfGas; bool ChargeAccountGas(ref long gasAvailable, EvmState vmState, Address address, IReleaseSpec spec) { From 0b8062f7ea9f98c325938c70fb080c8ff6f74da4 Mon Sep 17 00:00:00 2001 From: Lukasz Rozmej Date: Thu, 26 Sep 2024 11:15:01 +0200 Subject: [PATCH 430/551] Update src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs --- .../Nethermind.Facade/Eth/TransactionForRpc.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs index db455437176..5b054f48106 100644 --- a/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/TransactionForRpc.cs @@ -61,14 +61,11 @@ public TransactionForRpc(Hash256? blockHash, long? blockNumber, int? txIndex, Tr { AccessList = null; } - if (transaction.SupportsAuthorizationList) - { - AuthorizationList = transaction.AuthorizationList is null ? Array.Empty() : AuthorizationTupleForRpc.FromAuthorizationList(transaction.AuthorizationList); - } - else - { - AuthorizationList = null; - } + AuthorizationList = transaction.SupportsAuthorizationList + ? transaction.AuthorizationList is null + ? Array.Empty() + : AuthorizationTupleForRpc.FromAuthorizationList(transaction.AuthorizationList) + : null; MaxFeePerBlobGas = transaction.MaxFeePerBlobGas; BlobVersionedHashes = transaction.BlobVersionedHashes; From 49105d2536348e3c081d29748ed76c2487ec565c Mon Sep 17 00:00:00 2001 From: Lukasz Rozmej Date: Thu, 26 Sep 2024 11:15:36 +0200 Subject: [PATCH 431/551] Update src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs --- .../IReadOnlyStateProviderExtensions.cs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs b/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs index 7bda4915d2a..2fdf091a047 100644 --- a/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs +++ b/src/Nethermind/Nethermind.State/IReadOnlyStateProviderExtensions.cs @@ -27,15 +27,11 @@ public static bool IsInvalidContractSender( this IReadOnlyStateProvider stateProvider, IReleaseSpec spec, Address sender, - Func? isDelegatedCode = null) - { - return spec.IsEip3607Enabled - && stateProvider.HasCode(sender) - && (!spec.IsEip7702Enabled - || (isDelegatedCode != null - ? !isDelegatedCode() - : !Eip7702Constants.IsDelegatedCode(GetCode(stateProvider, sender)))); - } + Func? isDelegatedCode = null) => + spec.IsEip3607Enabled + && stateProvider.HasCode(sender) + && (!spec.IsEip7702Enabled + || (!isDelegatedCode?.Invoke() ?? !Eip7702Constants.IsDelegatedCode(GetCode(stateProvider, sender)))); } } From 110a5b89077fa1c462888fe6d3d141b9bb4584a8 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 11:18:14 +0200 Subject: [PATCH 432/551] fixes --- .../Validators/TxValidator.cs | 2 +- .../Nethermind.Evm/CodeInfoRepository.cs | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 42f2a32926f..65646323cab 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -329,7 +329,7 @@ private ValidationResult Validate7702Fields(Transaction tx) return tx.AuthorizationList switch { null or { Length: 0 } => TxErrorMessages.MissingAuthorizationList, - var authorizationList when authorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature) => + var authorizationList when authorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature)) => TxErrorMessages.InvalidAuthoritySignature, _ => ValidationResult.Success }; diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 497fb27abac..0828c7c5140 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -214,8 +214,8 @@ public ValueHash256 GetExecutableCodeHash(IWorldState worldState, Address addres CodeInfo codeInfo = InternalGetCachedCode(worldState, address); return codeInfo.IsEmpty ? Keccak.OfAnEmptyString.ValueHash256 - : Eip7702Constants.IsDelegatedCode(codeInfo.MachineCode.Span) - ? worldState.GetCodeHash(ParseDelegatedAddress(codeInfo.MachineCode.Span)) + : TryGetDelegatedAddress(codeInfo.MachineCode.Span, out Address? delegationAddress) + ? worldState.GetCodeHash(delegationAddress) : codeHash; } @@ -268,9 +268,16 @@ private bool HasDelegatedCode(IWorldState worldState, Address source) /// Parses delegation code to extract the contained address. /// Assumes is delegation code! /// - private static Address ParseDelegatedAddress(ReadOnlySpan code) + private static bool TryGetDelegatedAddress(ReadOnlySpan code, [NotNullWhen(true)] out Address? address) { - return new Address(code.Slice(Eip7702Constants.DelegationHeader.Length).ToArray()); + if (Eip7702Constants.IsDelegatedCode(code)) + { + address = new Address(code.Slice(Eip7702Constants.DelegationHeader.Length).ToArray()); + return true; + } + + address = null; + return false; } private CodeInfo CreateCachedPrecompile( @@ -278,7 +285,7 @@ private CodeInfo CreateCachedPrecompile( ConcurrentDictionary, bool)> cache) => new(new CachedPrecompile(originalPrecompile.Key.Value, originalPrecompile.Value.Precompile!, cache)); - public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => + public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => TryGetDelegatedAddress(InternalGetCachedCode(worldState, address).MachineCode.Span, out delegatedAddress); private class CachedPrecompile( From c4b083d1916ed33d5f0b01f8646cf8e99bfa2e67 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 26 Sep 2024 11:19:13 +0200 Subject: [PATCH 433/551] avoid newing HashSet --- .../TransactionProcessing/TransactionProcessor.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 4b6db98c536..03f84af265f 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -41,6 +41,7 @@ public abstract class TransactionProcessorBase : ITransactionProcessor private readonly ICodeInfoRepository _codeInfoRepository; private SystemTransactionProcessor? _systemTransactionProcessor; private readonly ILogManager _logManager; + private readonly HashSet
_accessedAddresses = []; [Flags] protected enum ExecutionOptions @@ -149,17 +150,17 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); - HashSet
accessedAddresses = new(); + _accessedAddresses.Clear(); int delegationRefunds = 0; if (spec.IsEip7702Enabled && tx.HasAuthorizationList) { - delegationRefunds = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, accessedAddresses, spec); + delegationRefunds = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, _accessedAddresses, spec); } - ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository, accessedAddresses); + ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository, _accessedAddresses); long gasAvailable = tx.GasLimit - intrinsicGas; - ExecuteEvmCall(tx, header, spec, tracer, opts, delegationRefunds, accessedAddresses, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); + ExecuteEvmCall(tx, header, spec, tracer, opts, delegationRefunds, _accessedAddresses, gasAvailable, env, out TransactionSubstate? substate, out long spentGas, out byte statusCode); PayFees(tx, header, spec, tracer, substate, spentGas, premiumPerGas, statusCode); // Finalize From 1c695968421cbd6e486c365ca080c778156c8545 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 11:22:31 +0200 Subject: [PATCH 434/551] add NoContractCreationTxValidator, change SetCodeTxValidator to AuthorizationListTxValidator --- .../Validators/TxValidator.cs | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 65646323cab..070ab579360 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -66,7 +66,8 @@ public TxValidator(ulong chainId) GasFieldsTxValidator.Instance, ContractSizeTxValidator.Instance, NonBlobFieldsTxValidator.Instance, - SetCodeTxValidator.Instance, + NoContractCreationTxValidator.Instance, + AuthorizationListTxValidator.Instance, ])); } @@ -310,30 +311,28 @@ public sealed class SignatureTxValidator : BaseSignatureTxValidator private SignatureTxValidator() { } } -public sealed class SetCodeTxValidator : ITxValidator +public sealed class NoContractCreationTxValidator : ITxValidator { - public static readonly SetCodeTxValidator Instance = new(); - private SetCodeTxValidator() { } + public static readonly NoContractCreationTxValidator Instance = new(); + private NoContractCreationTxValidator() { } + public ValidationResult IsWellFormed(Transaction transaction, IReleaseSpec releaseSpec) => + transaction.IsContractCreation ? TxErrorMessages.NotAllowedCreateTransaction : ValidationResult.Success; +} - public ValidationResult IsWellFormed(Transaction transaction, IReleaseSpec releaseSpec) - { - return Validate7702Fields(transaction); - } +public sealed class AuthorizationListTxValidator : ITxValidator +{ + public static readonly AuthorizationListTxValidator Instance = new(); + private AuthorizationListTxValidator() { } - private ValidationResult Validate7702Fields(Transaction tx) - { - if (tx.IsContractCreation) - { - return TxErrorMessages.NotAllowedCreateTransaction; - } - return tx.AuthorizationList switch + public ValidationResult IsWellFormed(Transaction transaction, IReleaseSpec releaseSpec) => + transaction.AuthorizationList switch { null or { Length: 0 } => TxErrorMessages.MissingAuthorizationList, var authorizationList when authorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature)) => TxErrorMessages.InvalidAuthoritySignature, _ => ValidationResult.Success }; - } + private bool ValidateAuthoritySignature(Signature signature) { UInt256 sValue = new(signature.SAsSpan, isBigEndian: true); From 872902116c66525d38eae9e44c1bc4b9d6603652 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 11:29:46 +0200 Subject: [PATCH 435/551] Move code to value hashes --- .../Nethermind.Evm.Test/CodeInfoRepositoryTests.cs | 4 ++-- .../TransactionProcessorEip7702Tests.cs | 6 +++--- src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs | 5 ++--- .../Nethermind.State.Test/StateReaderTests.cs | 10 +++++----- src/Nethermind/Nethermind.State/IWorldState.cs | 2 +- .../Nethermind.State/IWorldStateExtensions.cs | 2 +- src/Nethermind/Nethermind.State/StateProvider.cs | 6 +++--- src/Nethermind/Nethermind.State/WorldState.cs | 2 +- 8 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 39685de2826..68559f57550 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -54,7 +54,7 @@ public static IEnumerable AuthorizationCases() false }; yield return new object[] - { + { //wrong nonce CreateAuthorizationTuple(TestItem.PrivateKeyC, 1, TestItem.AddressB, 1), false @@ -107,7 +107,7 @@ public void InsertFromAuthorizations_AuthorityHasDelegatedCode_CodeIsInserted() byte[] code = new byte[23]; Eip7702Constants.DelegationHeader.CopyTo(code); stateProvider.CreateAccount(authority.Address, 0); - stateProvider.InsertCode(authority.Address, Keccak.Compute(code), code, Substitute.For()); + stateProvider.InsertCode(authority.Address, ValueKeccak.Compute(code), code, Substitute.For()); CodeInfoRepository sut = new(1); var tuples = new[] { diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index cfd7e151a57..c6f99137f3d 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -151,7 +151,7 @@ public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_ } public static IEnumerable DifferentCommitValues() { - //Base case + //Base case yield return new object[] { 1ul, 0ul, TestItem.AddressA.Bytes }; //Wrong nonce yield return new object[] { 1ul, 1ul, new[] { (byte)0x0 } }; @@ -378,7 +378,7 @@ public void Execute_FirstTxHasAuthorizedCodeThatIncrementsAndSecondDoesNot_Stora PrivateKey signer = TestItem.PrivateKeyB; Address codeSource = TestItem.AddressC; _stateProvider.CreateAccount(sender.Address, 1.Ether()); - //Increment 1 everytime it's called + //Increment 1 everytime it's called byte[] code = Prepare.EvmCode .Op(Instruction.PUSH0) .Op(Instruction.SLOAD) @@ -500,7 +500,7 @@ public void Execute_DelegatedCodeUsesEXTOPCODES_StoresExpectedValue(byte[] code, private void DeployCode(Address codeSource, byte[] code) { _stateProvider.CreateAccountIfNotExists(codeSource, 0); - _stateProvider.InsertCode(codeSource, Keccak.Compute(code), code, _specProvider.GetSpec(MainnetSpecProvider.PragueActivation)); + _stateProvider.InsertCode(codeSource, ValueKeccak.Compute(code), code, _specProvider.GetSpec(MainnetSpecProvider.PragueActivation)); } private AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 0828c7c5140..eaf12167e32 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -146,7 +146,7 @@ public void InsertCode(IWorldState state, ReadOnlyMemory code, Address cod CodeInfo codeInfo = new(code); codeInfo.AnalyseInBackgroundIfRequired(); - Hash256 codeHash = code.Length == 0 ? Keccak.OfAnEmptyString : Keccak.Compute(code.Span); + ValueHash256 codeHash = code.Length == 0 ? ValueKeccak.OfAnEmptyString : ValueKeccak.Compute(code.Span); state.InsertCode(codeOwner, codeHash, code, spec); _codeCache.Set(codeHash, codeInfo); } @@ -191,9 +191,8 @@ void InsertDelegationCode(IWorldState state, Address codeSource, Address authori byte[] authorizedBuffer = new byte[Eip7702Constants.DelegationHeader.Length + Address.Size]; Eip7702Constants.DelegationHeader.CopyTo(authorizedBuffer); codeSource.Bytes.CopyTo(authorizedBuffer, Eip7702Constants.DelegationHeader.Length); - Hash256 codeHash = Keccak.Compute(authorizedBuffer); + ValueHash256 codeHash = ValueKeccak.Compute(authorizedBuffer); state.InsertCode(authority, codeHash, authorizedBuffer.AsMemory(), spec); - _codeCache.Set(codeHash, new CodeInfo(authorizedBuffer)); } } diff --git a/src/Nethermind/Nethermind.State.Test/StateReaderTests.cs b/src/Nethermind/Nethermind.State.Test/StateReaderTests.cs index 198c1e23560..bedccef85ce 100644 --- a/src/Nethermind/Nethermind.State.Test/StateReaderTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StateReaderTests.cs @@ -258,7 +258,7 @@ public void IsInvalidContractSender_AccountHasCode_ReturnsTrue() TrieStore trieStore = new TrieStore(new MemDb(), Logger); WorldState sut = new(trieStore, new MemDb(), Logger); sut.CreateAccount(TestItem.AddressA, 0); - sut.InsertCode(TestItem.AddressA, Keccak.Compute(new byte[1]), new byte[1], releaseSpec, false); + sut.InsertCode(TestItem.AddressA, ValueKeccak.Compute(new byte[1]), new byte[1], releaseSpec, false); sut.Commit(MuirGlacier.Instance); sut.CommitTree(0); @@ -294,7 +294,7 @@ public void IsInvalidContractSender_AccountHasDelegatedCode_ReturnsFalse() WorldState sut = new(trieStore, new MemDb(), Logger); sut.CreateAccount(TestItem.AddressA, 0); byte[] code = [.. Eip7702Constants.DelegationHeader, .. new byte[20]]; - sut.InsertCode(TestItem.AddressA, Keccak.Compute(code), code, releaseSpec, false); + sut.InsertCode(TestItem.AddressA, ValueKeccak.Compute(code), code, releaseSpec, false); sut.Commit(MuirGlacier.Instance); sut.CommitTree(0); @@ -313,7 +313,7 @@ public void IsInvalidContractSender_AccountHasCodeButDelegateReturnsTrue_Returns WorldState sut = new(trieStore, new MemDb(), Logger); sut.CreateAccount(TestItem.AddressA, 0); byte[] code = new byte[20]; - sut.InsertCode(TestItem.AddressA, Keccak.Compute(code), code, releaseSpec, false); + sut.InsertCode(TestItem.AddressA, ValueKeccak.Compute(code), code, releaseSpec, false); sut.Commit(MuirGlacier.Instance); sut.CommitTree(0); @@ -331,7 +331,7 @@ public void IsInvalidContractSender_AccountHasDelegatedCodeBut7702IsNotEnabled_R WorldState sut = new(trieStore, new MemDb(), Logger); sut.CreateAccount(TestItem.AddressA, 0); byte[] code = [.. Eip7702Constants.DelegationHeader, .. new byte[20]]; - sut.InsertCode(TestItem.AddressA, Keccak.Compute(code), code, releaseSpec, false); + sut.InsertCode(TestItem.AddressA, ValueKeccak.Compute(code), code, releaseSpec, false); sut.Commit(MuirGlacier.Instance); sut.CommitTree(0); @@ -349,7 +349,7 @@ public void IsInvalidContractSender_AccountHasDelegatedCodeBut3807IsNotEnabled_R WorldState sut = new(trieStore, new MemDb(), Logger); sut.CreateAccount(TestItem.AddressA, 0); byte[] code = [.. Eip7702Constants.DelegationHeader, .. new byte[20]]; - sut.InsertCode(TestItem.AddressA, Keccak.Compute(code), code, releaseSpec, false); + sut.InsertCode(TestItem.AddressA, ValueKeccak.Compute(code), code, releaseSpec, false); sut.Commit(MuirGlacier.Instance); sut.CommitTree(0); diff --git a/src/Nethermind/Nethermind.State/IWorldState.cs b/src/Nethermind/Nethermind.State/IWorldState.cs index 21ac37a2a64..ac5bf705ab6 100644 --- a/src/Nethermind/Nethermind.State/IWorldState.cs +++ b/src/Nethermind/Nethermind.State/IWorldState.cs @@ -87,7 +87,7 @@ public interface IWorldState : IJournal, IReadOnlyStateProvider void CreateAccount(Address address, in UInt256 balance, in UInt256 nonce = default); void CreateAccountIfNotExists(Address address, in UInt256 balance, in UInt256 nonce = default); - void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false); + void InsertCode(Address address, in ValueHash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false); void AddToBalance(Address address, in UInt256 balanceChange, IReleaseSpec spec); diff --git a/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs b/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs index 962a25859b2..2cdeadddb5e 100644 --- a/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs +++ b/src/Nethermind/Nethermind.State/IWorldStateExtensions.cs @@ -15,7 +15,7 @@ public static class WorldStateExtensions { public static void InsertCode(this IWorldState worldState, Address address, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) { - Hash256 codeHash = code.Length == 0 ? Keccak.OfAnEmptyString : Keccak.Compute(code.Span); + ValueHash256 codeHash = code.Length == 0 ? ValueKeccak.OfAnEmptyString : ValueKeccak.Compute(code.Span); worldState.InsertCode(address, codeHash, code, spec, isGenesis); } diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index 0afd1fdef0c..bd17f98dfe0 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -29,7 +29,7 @@ internal class StateProvider // Note: // False negatives are fine as they will just result in a overwrite set // False positives would be problematic as the code _must_ be persisted - private readonly ClockKeyCacheNonConcurrent _codeInsertFilter = new(1_024); + private readonly ClockKeyCacheNonConcurrent _codeInsertFilter = new(1_024); private readonly Dictionary _blockCache = new(4_096); private readonly ConcurrentDictionary? _preBlockCache; @@ -37,7 +37,7 @@ internal class StateProvider private readonly ILogger _logger; private readonly IKeyValueStore _codeDb; - private List _changes = new(Resettable.StartCapacity); + private readonly List _changes = new(Resettable.StartCapacity); internal readonly StateTree _tree; private readonly Func _getStateFromTrie; @@ -116,7 +116,7 @@ public UInt256 GetBalance(Address address) return account?.Balance ?? UInt256.Zero; } - public void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) + public void InsertCode(Address address, in ValueHash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) { _needsStateRootUpdate = true; diff --git a/src/Nethermind/Nethermind.State/WorldState.cs b/src/Nethermind/Nethermind.State/WorldState.cs index fa3753df79c..c18fb219381 100644 --- a/src/Nethermind/Nethermind.State/WorldState.cs +++ b/src/Nethermind/Nethermind.State/WorldState.cs @@ -143,7 +143,7 @@ public void CreateAccount(Address address, in UInt256 balance, in UInt256 nonce { _stateProvider.CreateAccount(address, balance, nonce); } - public void InsertCode(Address address, Hash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) + public void InsertCode(Address address, in ValueHash256 codeHash, ReadOnlyMemory code, IReleaseSpec spec, bool isGenesis = false) { _stateProvider.InsertCode(address, codeHash, code, spec, isGenesis); } From 407effa248d4cc03afcb4987196f9edc86c41d9a Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 11:32:05 +0200 Subject: [PATCH 436/551] ReadConsolidationRequests reorder params to have consistency --- .../Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs | 2 +- .../Requests/ConsolidationRequestProcessor.cs | 2 +- .../Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index 0d0397b4bd1..cefc5943b0c 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -29,7 +29,7 @@ public void ProcessRequests(Block block, IWorldState state, TxReceipt[] receipts requestsList.AddRange(_depositsProcessor.ProcessDeposits(block, receipts, spec)); requestsList.AddRange(_withdrawalRequestsProcessor.ReadWithdrawalRequests(block, state, spec)); - requestsList.AddRange(_consolidationRequestsProcessor.ReadConsolidationRequests(spec, state, block)); + requestsList.AddRange(_consolidationRequestsProcessor.ReadConsolidationRequests(block, state, spec)); ConsensusRequest[] requests = requestsList.ToArray(); Hash256 root = new RequestsTrie(requests).RootHash; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs index 1ceeb7b3026..12f57a5f583 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs @@ -21,7 +21,7 @@ public class ConsolidationRequestsProcessor(ITransactionProcessor transactionPro private const long GasLimit = 30_000_000L; private const int SizeOfClass = 20 + 48 + 48; - public IEnumerable ReadConsolidationRequests(IReleaseSpec spec, IWorldState state, Block block) + public IEnumerable ReadConsolidationRequests(Block block, IWorldState state, IReleaseSpec spec) { if (!spec.ConsolidationRequestsEnabled) yield break; diff --git a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs index a75f5d0d5aa..28f94574ca2 100644 --- a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs +++ b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs @@ -84,7 +84,7 @@ public void ShouldProcessConsolidationRequest() TargetPubkey = Bytes.FromHexString("0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000") }; - var ConsolidationRequests = ConsolidationRequestsProcessor.ReadConsolidationRequests(spec, _stateProvider, block).ToList(); + var ConsolidationRequests = ConsolidationRequestsProcessor.ReadConsolidationRequests(block, _stateProvider, spec).ToList(); Assert.That(ConsolidationRequests, Has.Count.EqualTo(10)); ConsolidationRequest ConsolidationRequestResult = ConsolidationRequests[0]; From a7035ce7f910f79891bcb2812660a57a60a10489 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 11:38:02 +0200 Subject: [PATCH 437/551] simplify IntrinsicGasCalculator --- .../Nethermind.Evm/IntrinsicGasCalculator.cs | 51 ++++--------------- 1 file changed, 10 insertions(+), 41 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index f2e1c978418..9c320369899 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -22,51 +22,36 @@ public static long Calculate(Transaction transaction, IReleaseSpec releaseSpec) long result = GasCostOf.Transaction; result += DataCost(transaction, releaseSpec); result += CreateCost(transaction, releaseSpec); - result += AccessListCost(transaction, releaseSpec); - result += AuthorizationListCost(transaction, releaseSpec); + result += AccessListCost(transaction); + result += AuthorizationListCost(transaction); return result; } - private static long CreateCost(Transaction transaction, IReleaseSpec releaseSpec) - { - long createCost = 0; - if (transaction.IsContractCreation && releaseSpec.IsEip2Enabled) - { - createCost += GasCostOf.TxCreate; - } - - return createCost; - } + private static long CreateCost(Transaction transaction, IReleaseSpec releaseSpec) => + transaction.IsContractCreation && releaseSpec.IsEip2Enabled ? GasCostOf.TxCreate : 0; private static long DataCost(Transaction transaction, IReleaseSpec releaseSpec) { - long txDataNonZeroGasCost = - releaseSpec.IsEip2028Enabled ? GasCostOf.TxDataNonZeroEip2028 : GasCostOf.TxDataNonZero; + long txDataNonZeroGasCost = releaseSpec.IsEip2028Enabled ? GasCostOf.TxDataNonZeroEip2028 : GasCostOf.TxDataNonZero; Span data = transaction.Data.GetValueOrDefault().Span; int totalZeros = data.CountZeros(); - var baseDataCost = (transaction.IsContractCreation && releaseSpec.IsEip3860Enabled + var baseDataCost = transaction.IsContractCreation && releaseSpec.IsEip3860Enabled ? EvmPooledMemory.Div32Ceiling((UInt256)data.Length) * GasCostOf.InitCodeWord - : 0); + : 0; return baseDataCost + totalZeros * GasCostOf.TxDataZero + (data.Length - totalZeros) * txDataNonZeroGasCost; } - private static long AccessListCost(Transaction transaction, IReleaseSpec releaseSpec) + private static long AccessListCost(Transaction transaction) { AccessList? accessList = transaction.AccessList; long accessListCost = 0; if (accessList is not null) { - if (!releaseSpec.UseTxAccessLists) - { - throw new InvalidDataException( - $"Transaction with an access list received within the context of {releaseSpec.Name}. Eip-2930 is not enabled."); - } - if (accessList.IsEmpty) return accessListCost; foreach ((Address address, AccessList.StorageKeysEnumerable storageKeys) entry in accessList) @@ -82,22 +67,6 @@ private static long AccessListCost(Transaction transaction, IReleaseSpec release return accessListCost; } - private static long AuthorizationListCost(Transaction transaction, IReleaseSpec releaseSpec) - { - AuthorizationTuple[]? authorizationList = transaction.AuthorizationList; - if (authorizationList is not null) - { - if (!releaseSpec.IsAuthorizationListEnabled) - { - throw new InvalidDataException($"Transaction with an authorization list received within the context of {releaseSpec.Name}. Eip-7702 is not enabled."); - } - - if (authorizationList.Length != 0) - { - return GasCostOf.NewAccount * authorizationList.Length; - } - } - - return 0; - } + private static long AuthorizationListCost(Transaction transaction) => + (transaction.AuthorizationList?.Length ?? 0) * GasCostOf.NewAccount; } From d0dd643f8b778499201acdfcd45f2e6effa31be9 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 11:45:13 +0200 Subject: [PATCH 438/551] simplify AccessListCost --- .../Nethermind.Core/Eip2930/AccessList.cs | 18 +++++++----------- .../Nethermind.Evm/IntrinsicGasCalculator.cs | 19 ++----------------- 2 files changed, 9 insertions(+), 28 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Eip2930/AccessList.cs b/src/Nethermind/Nethermind.Core/Eip2930/AccessList.cs index 86bc94d0809..9372639ce52 100644 --- a/src/Nethermind/Nethermind.Core/Eip2930/AccessList.cs +++ b/src/Nethermind/Nethermind.Core/Eip2930/AccessList.cs @@ -26,6 +26,7 @@ private AccessList(List<(Address address, int count)> addresses, List k public static AccessList Empty { get; } = new(new List<(Address, int)>(), new List()); public bool IsEmpty => _addresses.Count == 0; + public (int AddressesCount, int StorageKeysCount) Count => (_addresses.Count, _keys.Count); public class Builder { @@ -72,26 +73,21 @@ public AccessList Build() IEnumerator<(Address Address, StorageKeysEnumerable StorageKeys)> IEnumerable<(Address Address, StorageKeysEnumerable StorageKeys)>.GetEnumerator() => GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); - public struct Enumerator : IEnumerator<(Address Address, StorageKeysEnumerable StorageKeys)>, IEnumerator<(Address Address, IEnumerable StorageKeys)> + public struct Enumerator(AccessList accessList) : IEnumerator<(Address Address, StorageKeysEnumerable StorageKeys)>, + IEnumerator<(Address Address, IEnumerable StorageKeys)> { - private readonly AccessList _accessList; private int _index = -1; private int _keysIndex = 0; - public Enumerator(AccessList accessList) - { - _accessList = accessList; - } - public bool MoveNext() { _index++; if (_index > 0) { - _keysIndex += CollectionsMarshal.AsSpan(_accessList._addresses)[_index - 1].count; + _keysIndex += CollectionsMarshal.AsSpan(accessList._addresses)[_index - 1].count; } - return _index < _accessList._addresses.Count; + return _index < accessList._addresses.Count; } public void Reset() @@ -104,8 +100,8 @@ public readonly (Address Address, StorageKeysEnumerable StorageKeys) Current { get { - ref readonly var addressCount = ref CollectionsMarshal.AsSpan(_accessList._addresses)[_index]; - return (addressCount.address, new StorageKeysEnumerable(_accessList, _keysIndex, addressCount.count)); + ref readonly var addressCount = ref CollectionsMarshal.AsSpan(accessList._addresses)[_index]; + return (addressCount.address, new StorageKeysEnumerable(accessList, _keysIndex, addressCount.count)); } } diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index 9c320369899..0b1013681bd 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -48,23 +48,8 @@ private static long DataCost(Transaction transaction, IReleaseSpec releaseSpec) private static long AccessListCost(Transaction transaction) { - AccessList? accessList = transaction.AccessList; - long accessListCost = 0; - if (accessList is not null) - { - if (accessList.IsEmpty) return accessListCost; - - foreach ((Address address, AccessList.StorageKeysEnumerable storageKeys) entry in accessList) - { - accessListCost += GasCostOf.AccessAccountListEntry; - foreach (UInt256 _ in entry.storageKeys) - { - accessListCost += GasCostOf.AccessStorageListEntry; - } - } - } - - return accessListCost; + (int addressesCount, int storageKeysCount) = transaction.AccessList?.Count ?? (0, 0); + return addressesCount * GasCostOf.AccessAccountListEntry + storageKeysCount * GasCostOf.AccessAccountListEntry; } private static long AuthorizationListCost(Transaction transaction) => From 295854f2b7d9de14722d3ac2e0add726bc11be54 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 11:47:24 +0200 Subject: [PATCH 439/551] grab TxExecutionContext by reference --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 813ec9789e8..a7981d32875 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -160,7 +160,7 @@ public TransactionSubstate Run(EvmState state, IWorldState worl _txTracer = txTracer; _state = worldState; - TxExecutionContext txExecutionContext = state.Env.TxExecutionContext; + ref readonly TxExecutionContext txExecutionContext = ref state.Env.TxExecutionContext; ICodeInfoRepository codeInfoRepository = txExecutionContext.CodeInfoRepository; IReleaseSpec spec = _specProvider.GetSpec(txExecutionContext.BlockExecutionContext.Header.Number, txExecutionContext.BlockExecutionContext.Header.Timestamp); EvmState currentState = state; From c323baef985361cb8bb94a4937704f8c6a9f3d78 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 11:53:42 +0200 Subject: [PATCH 440/551] Invert VM condition for readability --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index a7981d32875..13b6cc29b22 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -26,7 +26,6 @@ [assembly: InternalsVisibleTo("Nethermind.Evm.Test")] namespace Nethermind.Evm; -using System.Linq; using Int256; @@ -1900,16 +1899,16 @@ private CallResult ExecuteCode Date: Thu, 26 Sep 2024 11:59:53 +0200 Subject: [PATCH 441/551] Simplify RecoverAuthorityFilter --- src/Nethermind/Nethermind.Core/Transaction.cs | 3 +++ .../Handlers/GetPayloadBodiesByHashV2Handler.cs | 2 -- .../Filters/RecoverAuthorityFilter.cs | 12 ++++-------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index 93e58c28396..636383d152a 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -4,6 +4,7 @@ using System; using System.Buffers; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.CompilerServices; using System.Text; @@ -57,6 +58,8 @@ public class Transaction public bool IsSigned => Signature is not null; public bool IsContractCreation => To is null; public bool IsMessageCall => To is not null; + + [MemberNotNullWhen(true, nameof(AuthorizationList))] public bool HasAuthorizationList => Type == TxType.SetCode && AuthorizationList is not null && diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs index 3134be241f1..0c95bbd88b0 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs @@ -34,7 +34,5 @@ public class GetPayloadBodiesByHashV2Handler(IBlockTree blockTree, ILogManager l (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests, ConsolidationRequest[]? consolidationRequests) = block?.Requests?.SplitRequests() ?? (null, null, null); yield return block is null ? null : new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests, consolidationRequests); } - - yield break; } } diff --git a/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs b/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs index 2989cbed662..8075d9d14dd 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/RecoverAuthorityFilter.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Threading.Tasks; using Nethermind.Core; using Nethermind.Crypto; @@ -13,17 +14,12 @@ internal sealed class RecoverAuthorityFilter(IEthereumEcdsa ecdsa) : IIncomingTx { public AcceptTxResult Accept(Transaction tx, ref TxFilteringState state, TxHandlingOptions handlingOptions) { - if (!tx.HasAuthorizationList) - return AcceptTxResult.Accepted; - - foreach (AuthorizationTuple tuple in tx.AuthorizationList!) + if (tx.HasAuthorizationList) { - if (tuple is null) + foreach (AuthorizationTuple tuple in tx.AuthorizationList) { - //Should not happen in production - continue; + tuple.Authority ??= ecdsa.RecoverAddress(tuple); } - tuple.Authority ??= ecdsa.RecoverAddress(tuple); } return AcceptTxResult.Accepted; From 141c565937e633da31c4d84746978b132ca54506 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 12:06:13 +0200 Subject: [PATCH 442/551] fix AuthorizationTupleDecoder --- .../Nethermind.Core/AuthorizationTuple.cs | 4 +- .../Eip7702/AuthorizationTupleDecoder.cs | 52 +++++++------------ .../Nethermind.Trie/Pruning/TinyTreePath.cs | 1 - 3 files changed, 21 insertions(+), 36 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index bed7a291247..061764fb0f6 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -23,9 +23,9 @@ public AuthorizationTuple( { } public ulong ChainId { get; } = chainId; - public Address CodeAddress { get; protected set; } = codeAddress ?? throw new ArgumentNullException(nameof(codeAddress)); + public Address CodeAddress { get; protected set; } = codeAddress; public ulong Nonce { get; } = nonce; - public Signature AuthoritySignature { get; protected set; } = sig ?? throw new ArgumentNullException(nameof(sig)); + public Signature AuthoritySignature { get; protected set; } = sig; /// /// may be recovered at a later point. diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 535067e0680..0e7beea1d8b 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -18,61 +18,48 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R { int length = stream.ReadSequenceLength(); int check = length + stream.Position; - - var chainId = stream.DecodeULong(); + ulong chainId = stream.DecodeULong(); Address? codeAddress = stream.DecodeAddress(); ulong nonce = stream.DecodeULong(); - ulong yParity = stream.DecodeULong(); byte[] r = stream.DecodeByteArray(); byte[] s = stream.DecodeByteArray(); + if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) - stream.Check(check); - try { - return new AuthorizationTuple( - chainId, - codeAddress!, - nonce, - yParity, - r, - s); + stream.Check(check); } - catch (ArgumentNullException e) + + if (codeAddress is null) { - throw InvalidValueRlpException(e); + ThrowMissingCodeAddressException(); } + + return new AuthorizationTuple(chainId, codeAddress, nonce, yParity, r, s); } public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int length = decoderContext.ReadSequenceLength(); int check = length + decoderContext.Position; - - var chainId = decoderContext.DecodeULong(); - Address codeAddress = decoderContext.DecodeAddress(); - + ulong chainId = decoderContext.DecodeULong(); + Address? codeAddress = decoderContext.DecodeAddress(); ulong nonce = decoderContext.DecodeULong(); - ulong yParity = decoderContext.DecodeULong(); byte[] r = decoderContext.DecodeByteArray(); byte[] s = decoderContext.DecodeByteArray(); + if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) - decoderContext.Check(check); - try { - return new AuthorizationTuple( - chainId, - codeAddress!, - nonce, - yParity, - r, - s); + decoderContext.Check(check); } - catch (ArgumentNullException e) + + if (codeAddress is null) { - throw InvalidValueRlpException(e); + ThrowMissingCodeAddressException(); } + + return new AuthorizationTuple(chainId, codeAddress, nonce, yParity, r, s); } public RlpStream Encode(AuthorizationTuple item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) @@ -125,7 +112,6 @@ private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress + Rlp.LengthOf(codeAddress) + Rlp.LengthOf(nonce); - [StackTraceHidden] - private static RlpException InvalidValueRlpException(ArgumentNullException e) => - new RlpException($"Invalid value for '{e.ParamName}' in '{nameof(AuthorizationTuple)}'", e); + [DoesNotReturn] + private static RlpException ThrowMissingCodeAddressException() => throw new RlpException("Missing code address for Authorization"); } diff --git a/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs b/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs index de1d3bcc3bc..c15a5a9f906 100644 --- a/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs +++ b/src/Nethermind/Nethermind.Trie/Pruning/TinyTreePath.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Nethermind.Core.Crypto; From 8607c8e69b92543c1a83f08342d254e8b9e01ded Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 12:13:03 +0200 Subject: [PATCH 443/551] remove IRlpObjectDecoder --- .../ConsolidationRequestDecoder.cs | 11 +---------- .../Eip7702/AuthorizationTupleDecoder.cs | 4 ++-- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs index 355430d2ec9..99b2f3e49e8 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs @@ -7,7 +7,7 @@ namespace Nethermind.Serialization.Rlp; -public class ConsolidationRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder +public class ConsolidationRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder { public static ConsolidationRequestDecoder Instance { get; } = new(); public int GetLength(ConsolidationRequest item, RlpBehaviors rlpBehaviors) => @@ -55,13 +55,4 @@ public void Encode(RlpStream stream, ConsolidationRequest item, RlpBehaviors rlp stream.Encode(item.SourcePubkey); stream.Encode(item.TargetPubkey); } - - public Rlp Encode(ConsolidationRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - RlpStream rlpStream = new(GetLength(item, rlpBehaviors)); - - Encode(rlpStream, item, rlpBehaviors); - - return new Rlp(rlpStream.Data.ToArray()); - } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 0e7beea1d8b..d33238046c7 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -24,7 +24,7 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R ulong yParity = stream.DecodeULong(); byte[] r = stream.DecodeByteArray(); byte[] s = stream.DecodeByteArray(); - + if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) { stream.Check(check); @@ -113,5 +113,5 @@ private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress + Rlp.LengthOf(nonce); [DoesNotReturn] - private static RlpException ThrowMissingCodeAddressException() => throw new RlpException("Missing code address for Authorization"); + private static void ThrowMissingCodeAddressException() => throw new RlpException("Missing code address for Authorization"); } From b998979e3ea1f0bcb901b1b5023b8a2bb7dd0e03 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 12:34:30 +0200 Subject: [PATCH 444/551] bring back exceptions in IntrinsicGasCalculator --- .../Nethermind.Evm/IntrinsicGasCalculator.cs | 72 ++++++++++++++----- .../Eip7702/AuthorizationTupleDecoder.cs | 1 + 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index 0b1013681bd..9e2ed17e886 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -2,30 +2,25 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.IO; -using System.Numerics; using Nethermind.Core; using Nethermind.Core.Eip2930; using Nethermind.Core.Specs; using Nethermind.Int256; -using System.Runtime.Intrinsics; -using System.Runtime.InteropServices; -using System.Runtime.CompilerServices; using Nethermind.Core.Extensions; namespace Nethermind.Evm; public static class IntrinsicGasCalculator { - public static long Calculate(Transaction transaction, IReleaseSpec releaseSpec) - { - long result = GasCostOf.Transaction; - result += DataCost(transaction, releaseSpec); - result += CreateCost(transaction, releaseSpec); - result += AccessListCost(transaction); - result += AuthorizationListCost(transaction); - return result; - } + public static long Calculate(Transaction transaction, IReleaseSpec releaseSpec) => + GasCostOf.Transaction + + DataCost(transaction, releaseSpec) + + CreateCost(transaction, releaseSpec) + + AccessListCost(transaction, releaseSpec) + + AuthorizationListCost(transaction, releaseSpec); private static long CreateCost(Transaction transaction, IReleaseSpec releaseSpec) => transaction.IsContractCreation && releaseSpec.IsEip2Enabled ? GasCostOf.TxCreate : 0; @@ -37,7 +32,7 @@ private static long DataCost(Transaction transaction, IReleaseSpec releaseSpec) int totalZeros = data.CountZeros(); - var baseDataCost = transaction.IsContractCreation && releaseSpec.IsEip3860Enabled + long baseDataCost = transaction.IsContractCreation && releaseSpec.IsEip3860Enabled ? EvmPooledMemory.Div32Ceiling((UInt256)data.Length) * GasCostOf.InitCodeWord : 0; @@ -46,12 +41,51 @@ private static long DataCost(Transaction transaction, IReleaseSpec releaseSpec) (data.Length - totalZeros) * txDataNonZeroGasCost; } - private static long AccessListCost(Transaction transaction) + private static long AccessListCost(Transaction transaction, IReleaseSpec releaseSpec) { - (int addressesCount, int storageKeysCount) = transaction.AccessList?.Count ?? (0, 0); - return addressesCount * GasCostOf.AccessAccountListEntry + storageKeysCount * GasCostOf.AccessAccountListEntry; + AccessList? accessList = transaction.AccessList; + if (accessList is not null) + { + if (!releaseSpec.UseTxAccessLists) + { + ThrowInvalidDataException(releaseSpec); + } + + (int addressesCount, int storageKeysCount) = accessList.Count; + return addressesCount * GasCostOf.AccessAccountListEntry + storageKeysCount * GasCostOf.AccessAccountListEntry; + } + + return 0; + + [DoesNotReturn] + [StackTraceHidden] + static void ThrowInvalidDataException(IReleaseSpec releaseSpec) + { + throw new InvalidDataException($"Transaction with an authorization list received within the context of {releaseSpec.Name}. Eip-7702 is not enabled."); + } } - private static long AuthorizationListCost(Transaction transaction) => - (transaction.AuthorizationList?.Length ?? 0) * GasCostOf.NewAccount; + private static long AuthorizationListCost(Transaction transaction, IReleaseSpec releaseSpec) + { + AuthorizationTuple[]? transactionAuthorizationList = transaction.AuthorizationList; + + if (transactionAuthorizationList is not null) + { + if (!releaseSpec.IsAuthorizationListEnabled) + { + ThrowInvalidDataException(releaseSpec); + } + + return transactionAuthorizationList.Length * GasCostOf.NewAccount; + } + + return 0; + + [DoesNotReturn] + [StackTraceHidden] + static void ThrowInvalidDataException(IReleaseSpec releaseSpec) + { + throw new InvalidDataException($"Transaction with an authorization list received within the context of {releaseSpec.Name}. Eip-7702 is not enabled."); + } + } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index d33238046c7..5190ccba14c 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -113,5 +113,6 @@ private static int GetContentLengthWithoutSig(ulong chainId, Address codeAddress + Rlp.LengthOf(nonce); [DoesNotReturn] + [StackTraceHidden] private static void ThrowMissingCodeAddressException() => throw new RlpException("Missing code address for Authorization"); } From 6a6db8b88f5d2e50edc974d7b8b86e440daee556 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 12:47:51 +0200 Subject: [PATCH 445/551] fix --- src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs index 9e2ed17e886..a8e5dc5c86f 100644 --- a/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs +++ b/src/Nethermind/Nethermind.Evm/IntrinsicGasCalculator.cs @@ -52,7 +52,7 @@ private static long AccessListCost(Transaction transaction, IReleaseSpec release } (int addressesCount, int storageKeysCount) = accessList.Count; - return addressesCount * GasCostOf.AccessAccountListEntry + storageKeysCount * GasCostOf.AccessAccountListEntry; + return addressesCount * GasCostOf.AccessAccountListEntry + storageKeysCount * GasCostOf.AccessStorageListEntry; } return 0; From 794f6dac3c97cf1513a5e39b7749f7861803f871 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 13:52:48 +0200 Subject: [PATCH 446/551] fix --- src/Nethermind/Nethermind.State/StateProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.State/StateProvider.cs b/src/Nethermind/Nethermind.State/StateProvider.cs index bd17f98dfe0..c4689da5d04 100644 --- a/src/Nethermind/Nethermind.State/StateProvider.cs +++ b/src/Nethermind/Nethermind.State/StateProvider.cs @@ -149,7 +149,7 @@ public void InsertCode(Address address, in ValueHash256 codeHash, ReadOnlyMemory throw new InvalidOperationException($"Account {address} is null when updating code hash"); } - if (account.CodeHash != codeHash) + if (account.CodeHash.ValueHash256 != codeHash) { if (_logger.IsDebug) _logger.Debug($" Update {address} C {account.CodeHash} -> {codeHash}"); Account changedAccount = account.WithChangedCodeHash(codeHash); From 5f714d133848f3bdffe479cbae34e951e3deabb1 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 14:10:45 +0200 Subject: [PATCH 447/551] More CodeInfoRepository changes --- .../CodeInfoRepositoryTests.cs | 32 ++++++------- .../Nethermind.Evm/CodeInfoRepository.cs | 47 ++++++------------- .../Nethermind.Evm/ICodeInfoRepository.cs | 3 +- .../TransactionProcessor.cs | 2 +- .../OverridableCodeInfoRepository.cs | 6 +-- 5 files changed, 35 insertions(+), 55 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 68559f57550..5a7e81802a1 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -26,7 +26,7 @@ namespace Nethermind.Evm.Test; public class CodeInfoRepositoryTests { [Test] - public void InsertFromAuthorizations_AuthorityTupleIsCorrect_AuthorityIsAddedToAccessedAddresses() + public void SetDelegations_AuthorityTupleIsCorrect_AuthorityIsAddedToAccessedAddresses() { PrivateKey authority = TestItem.PrivateKeyA; CodeInfoRepository sut = new(1); @@ -35,7 +35,7 @@ public void InsertFromAuthorizations_AuthorityTupleIsCorrect_AuthorityIsAddedToA CreateAuthorizationTuple(authority, 1, TestItem.AddressB, 0), }; HashSet
accessedAddresses = new(); - sut.InsertFromAuthorizations(Substitute.For(), tuples, accessedAddresses, Substitute.For()); + sut.SetDelegations(Substitute.For(), tuples, accessedAddresses, Substitute.For()); accessedAddresses.Should().BeEquivalentTo([authority.Address]); } @@ -62,7 +62,7 @@ public static IEnumerable AuthorizationCases() } [TestCaseSource(nameof(AuthorizationCases))] - public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_InsertsIfExpected(AuthorizationTuple tuple, bool shouldInsert) + public void SetDelegations_MixOfCorrectAndWrongChainIdAndNonce_InsertsIfExpected(AuthorizationTuple tuple, bool shouldInsert) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); @@ -70,13 +70,13 @@ public void InsertFromAuthorizations_MixOfCorrectAndWrongChainIdAndNonce_Inserts IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); CodeInfoRepository sut = new(1); HashSet
accessedAddresses = new(); - sut.InsertFromAuthorizations(stateProvider, [tuple], accessedAddresses, Substitute.For()); + sut.SetDelegations(stateProvider, [tuple], accessedAddresses, Substitute.For()); Assert.That(stateProvider.HasCode(tuple.Authority), Is.EqualTo(shouldInsert)); } [Test] - public void InsertFromAuthorizations_AuthorityHasCode_NoCodeIsInserted() + public void SetDelegations_AuthorityHasCode_NoCodeIsInserted() { PrivateKey authority = TestItem.PrivateKeyA; Address codeSource = TestItem.AddressB; @@ -90,13 +90,13 @@ public void InsertFromAuthorizations_AuthorityHasCode_NoCodeIsInserted() }; HashSet
accessedAddresses = new(); - sut.InsertFromAuthorizations(mockWorldState, tuples, accessedAddresses, Substitute.For()); + sut.SetDelegations(mockWorldState, tuples, accessedAddresses, Substitute.For()); mockWorldState.DidNotReceive().InsertCode(Arg.Any
(), Arg.Any>(), Arg.Any()); } [Test] - public void InsertFromAuthorizations_AuthorityHasDelegatedCode_CodeIsInserted() + public void SetDelegations_AuthorityHasDelegatedCode_CodeIsInserted() { PrivateKey authority = TestItem.PrivateKeyA; Address codeSource = TestItem.AddressB; @@ -114,14 +114,14 @@ public void InsertFromAuthorizations_AuthorityHasDelegatedCode_CodeIsInserted() CreateAuthorizationTuple(authority, 1, codeSource, 0), }; - sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For>(), Substitute.For()); + sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); Assert.That(stateProvider.GetCode(authority.Address).Slice(3), Is.EqualTo(codeSource.Bytes)); } [TestCase(true)] [TestCase(false)] - public void InsertFromAuthorizations_AuthorityAccountExistsOrNot_NonceIsIncrementedByOne(bool accountExists) + public void SetDelegations_AuthorityAccountExistsOrNot_NonceIsIncrementedByOne(bool accountExists) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); @@ -137,13 +137,13 @@ public void InsertFromAuthorizations_AuthorityAccountExistsOrNot_NonceIsIncremen CreateAuthorizationTuple(authority, 1, codeSource, 0), }; - sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For>(), Substitute.For()); + sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); Assert.That(stateProvider.GetNonce(authority.Address), Is.EqualTo((UInt256)1)); } [Test] - public void InsertFromAuthorizations_FourAuthorizationInTotalButOneHasInvalidNonce_ResultContainsThreeAddresses() + public void SetDelegations_FourAuthorizationInTotalButOneHasInvalidNonce_ResultContainsThreeAddresses() { CodeInfoRepository sut = new(1); var tuples = new[] @@ -154,13 +154,13 @@ public void InsertFromAuthorizations_FourAuthorizationInTotalButOneHasInvalidNon CreateAuthorizationTuple(TestItem.PrivateKeyD, 1, TestItem.AddressF, 1), }; HashSet
addresses = new(); - sut.InsertFromAuthorizations(Substitute.For(), tuples, addresses, Substitute.For()); + sut.SetDelegations(Substitute.For(), tuples, addresses, Substitute.For()); addresses.Should().BeEquivalentTo([TestItem.AddressA, TestItem.AddressB, TestItem.AddressD]); } [Test] - public void InsertFromAuthorizations_AuthorizationsHasOneExistingAccount_ResultHaveOneRefund() + public void SetDelegations_AuthorizationsHasOneExistingAccount_ResultHaveOneRefund() { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); @@ -174,7 +174,7 @@ public void InsertFromAuthorizations_AuthorizationsHasOneExistingAccount_ResultH }; stateProvider.CreateAccount(TestItem.AddressA, 0); - int refunds = sut.InsertFromAuthorizations(stateProvider, tuples, Substitute.For>(), Substitute.For()); + int refunds = sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); refunds.Should().Be(1); } @@ -221,7 +221,7 @@ public static IEnumerable CountsAsAccessedCases() } [TestCaseSource(nameof(CountsAsAccessedCases))] - public void InsertFromAuthorizations_CombinationOfValidAndInvalidTuples_AddsTheCorrectAddressesToAccessedAddresses(AuthorizationTuple[] tuples, Address[] shouldCountAsAccessed) + public void SetDelegations_CombinationOfValidAndInvalidTuples_AddsTheCorrectAddressesToAccessedAddresses(AuthorizationTuple[] tuples, Address[] shouldCountAsAccessed) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); @@ -231,7 +231,7 @@ public void InsertFromAuthorizations_CombinationOfValidAndInvalidTuples_AddsTheC stateProvider.CreateAccount(TestItem.AddressA, 0); ISet
accessedAddresses = new HashSet
(); - sut.InsertFromAuthorizations(stateProvider, tuples, accessedAddresses, Substitute.For()); + sut.SetDelegations(stateProvider, tuples, accessedAddresses, Substitute.For()); accessedAddresses.Count.Should().Be(shouldCountAsAccessed.Length); accessedAddresses.Should().Contain(shouldCountAsAccessed); diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index eaf12167e32..b9e6fb5796c 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -68,10 +68,6 @@ public CodeInfoRepository(ulong chainId, ConcurrentDictionary kvp.Key, kvp => CreateCachedPrecompile(kvp, precompileCache)); } - public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec) - { - return GetCachedCodeInfo(worldState, codeSource, vmSpec, out _); - } public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec, out Address? delegationAddress) { delegationAddress = null; @@ -128,19 +124,6 @@ static void MissingCode(Address codeSource, in ValueHash256 codeHash) } } - public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) - { - if (!_codeCache.TryGet(codeHash, out CodeInfo? codeInfo)) - { - codeInfo = new(initCode.ToArray()); - - // Prime the code cache as likely to be used by more txs - _codeCache.Set(codeHash, codeInfo); - } - - return codeInfo; - } - public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) { CodeInfo codeInfo = new(code); @@ -156,7 +139,7 @@ public void InsertCode(IWorldState state, ReadOnlyMemory code, Address cod /// and return all authority addresses that was accessed and amount of autorization refunds. /// eip-7702 ///
- public int InsertFromAuthorizations( + public int SetDelegations( IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, @@ -168,25 +151,28 @@ public int InsertFromAuthorizations( { if (authTuple is null) continue; - authTuple.Authority = authTuple.Authority ?? _ethereumEcdsa.RecoverAddress(authTuple); - string? error; - if (!IsValidForExecution(authTuple, worldState, _ethereumEcdsa.ChainId, accessedAddresses, out error)) + authTuple.Authority ??= _ethereumEcdsa.RecoverAddress(authTuple); + + if (!IsValidForExecution(authTuple, worldState, _ethereumEcdsa.ChainId, accessedAddresses, out _)) continue; - if (worldState.AccountExists(authTuple.Authority)) + if (!worldState.AccountExists(authTuple.Authority!)) + { + worldState.CreateAccount(authTuple.Authority, 0, 1); + } + else { refunds++; worldState.IncrementNonce(authTuple.Authority); } - else - worldState.CreateAccount(authTuple.Authority, 0, 1); InsertDelegationCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); } + return refunds; - void InsertDelegationCode(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) + static void InsertDelegationCode(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) { byte[] authorizedBuffer = new byte[Eip7702Constants.DelegationHeader.Length + Address.Size]; Eip7702Constants.DelegationHeader.CopyTo(authorizedBuffer); @@ -240,8 +226,7 @@ private bool IsValidForExecution( } accessedAddresses.Add(authorizationTuple.Authority); - if (stateProvider.HasCode(authorizationTuple.Authority) - && !HasDelegatedCode(stateProvider, authorizationTuple.Authority)) + if (stateProvider.HasCode(authorizationTuple.Authority) && !HasDelegatedCode(stateProvider, authorizationTuple.Authority)) { error = $"Authority ({authorizationTuple.Authority}) has code deployed."; return false; @@ -255,11 +240,8 @@ private bool IsValidForExecution( error = null; return true; - } - private bool HasDelegatedCode(IWorldState worldState, Address source) - { - return + static bool HasDelegatedCode(IWorldState worldState, Address source) => Eip7702Constants.IsDelegatedCode(InternalGetCachedCode(worldState, source).MachineCode.Span); } @@ -312,7 +294,8 @@ private class CachedPrecompile( return result; } } - internal sealed class CodeLruCache + + private sealed class CodeLruCache { private const int CacheCount = 16; private const int CacheMax = CacheCount - 1; diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index f1646fbbd2c..75d53926e24 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -16,9 +16,8 @@ public interface ICodeInfoRepository { CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec, out Address? delegationAddress); ValueHash256 GetExecutableCodeHash(IWorldState worldState, Address address); - CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec); - int InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec); + int SetDelegations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec); bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress); } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 03f84af265f..71e8211e0f3 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -154,7 +154,7 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon int delegationRefunds = 0; if (spec.IsEip7702Enabled && tx.HasAuthorizationList) { - delegationRefunds = _codeInfoRepository.InsertFromAuthorizations(WorldState, tx.AuthorizationList, _accessedAddresses, spec); + delegationRefunds = _codeInfoRepository.SetDelegations(WorldState, tx.AuthorizationList, _accessedAddresses, spec); } ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository, _accessedAddresses); diff --git a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs index c403307fa89..78df76244d3 100644 --- a/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Facade/OverridableCodeInfoRepository.cs @@ -25,8 +25,6 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR : codeInfoRepository.GetCachedCodeInfo(worldState, codeSource, vmSpec); } - public CodeInfo GetOrAdd(ValueHash256 codeHash, ReadOnlySpan initCode) => codeInfoRepository.GetOrAdd(codeHash, initCode); - public void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec) => codeInfoRepository.InsertCode(state, code, codeOwner, spec); @@ -45,8 +43,8 @@ public void SetCodeOverwrite( _codeOverwrites[key] = value; } - public int InsertFromAuthorizations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec) => - codeInfoRepository.InsertFromAuthorizations(worldState, authorizations, accessedAddresses, spec); + public int SetDelegations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec) => + codeInfoRepository.SetDelegations(worldState, authorizations, accessedAddresses, spec); public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => codeInfoRepository.IsDelegation(worldState, address, out delegatedAddress); From fbc68222f2d464f72ccd184af2d80630db0c5d8d Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 14:15:39 +0200 Subject: [PATCH 448/551] More renames --- .../Nethermind.Evm.Test/CodeInfoRepositoryTests.cs | 6 +++--- src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs | 2 +- src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs | 2 +- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 5 ++--- .../Nethermind.Facade/OverridableCodeInfoRepository.cs | 4 ++-- .../Nethermind.TxPool/Filters/DeployedCodeFilter.cs | 3 +-- src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs | 2 +- 7 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 5a7e81802a1..3c6d5e1e78d 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -284,7 +284,7 @@ public void IsDelegation_CodeIsNotDelegation_ReturnsFalse(byte[] code) stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); CodeInfoRepository sut = new(1); - sut.IsDelegation(stateProvider, TestItem.AddressA, out _).Should().Be(false); + sut.TryGetDelegatedAddress(stateProvider, TestItem.AddressA, out _).Should().Be(false); } @@ -314,7 +314,7 @@ public void IsDelegation_CodeIsDelegation_ReturnsTrue(byte[] code) stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); CodeInfoRepository sut = new(1); - sut.IsDelegation(stateProvider, TestItem.AddressA, out _).Should().Be(true); + sut.TryGetDelegatedAddress(stateProvider, TestItem.AddressA, out _).Should().Be(true); } [TestCaseSource(nameof(DelegationCodeCases))] @@ -329,7 +329,7 @@ public void IsDelegation_CodeIsDelegation_CorrectDelegationAddressIsSet(byte[] c CodeInfoRepository sut = new(1); Address result; - sut.IsDelegation(stateProvider, TestItem.AddressA, out result); + sut.TryGetDelegatedAddress(stateProvider, TestItem.AddressA, out result); result.Should().Be(new Address(code.Slice(3, Address.Size))); } diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index b9e6fb5796c..1335c1254eb 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -266,7 +266,7 @@ private CodeInfo CreateCachedPrecompile( ConcurrentDictionary, bool)> cache) => new(new CachedPrecompile(originalPrecompile.Key.Value, originalPrecompile.Value.Precompile!, cache)); - public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => + public bool TryGetDelegatedAddress(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => TryGetDelegatedAddress(InternalGetCachedCode(worldState, address).MachineCode.Span, out delegatedAddress); private class CachedPrecompile( diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index 75d53926e24..04e483b394c 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -18,7 +18,7 @@ public interface ICodeInfoRepository ValueHash256 GetExecutableCodeHash(IWorldState worldState, Address address); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec); int SetDelegations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec); - bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress); + bool TryGetDelegatedAddress(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress); } public static class CodeInfoRepositoryExtensions diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 13b6cc29b22..a10ae2dcd7d 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -482,7 +482,7 @@ private bool ChargeAccountAccessGas(ref long gasAvailable, EvmState vmState, Add bool notOutOfGas = ChargeAccountGas(ref gasAvailable, vmState, address, spec); return notOutOfGas && chargeForDelegation - && vmState.Env.TxExecutionContext.CodeInfoRepository.IsDelegation(_state, address, out Address delegated) + && vmState.Env.TxExecutionContext.CodeInfoRepository.TryGetDelegatedAddress(_state, address, out Address delegated) ? ChargeAccountGas(ref gasAvailable, vmState, delegated, spec) : notOutOfGas; @@ -1901,8 +1901,7 @@ private CallResult ExecuteCode accessedAddresses, IReleaseSpec spec) => codeInfoRepository.SetDelegations(worldState, authorizations, accessedAddresses, spec); - public bool IsDelegation(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => - codeInfoRepository.IsDelegation(worldState, address, out delegatedAddress); + public bool TryGetDelegatedAddress(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => + codeInfoRepository.TryGetDelegatedAddress(worldState, address, out delegatedAddress); public ValueHash256 GetExecutableCodeHash(IWorldState worldState, Address address) => codeInfoRepository.GetExecutableCodeHash(worldState, address); diff --git a/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs b/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs index 636c738a778..75c0950b911 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs @@ -17,8 +17,7 @@ public AcceptTxResult Accept(Transaction tx, ref TxFilteringState state, TxHandl { return specProvider.GetCurrentHeadSpec().IsEip3607Enabled && state.SenderAccount.HasCode - && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || - !codeInfoRepository.IsDelegation(worldState, tx.SenderAddress!, out _)) + && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.TryGetDelegatedAddress(worldState, tx.SenderAddress!, out _)) ? AcceptTxResult.SenderIsContract : AcceptTxResult.Accepted; } diff --git a/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs b/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs index f139fa05e3d..d17ff4fbf71 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs @@ -13,6 +13,6 @@ public bool IsValid(Address sender) { return specProvider.GetCurrentHeadSpec().IsEip3607Enabled && worldState.HasCode(sender) - && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.IsDelegation(worldState, sender, out _)); + && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.TryGetDelegatedAddress(worldState, sender, out _)); } } From cbde5c8cadf64ee2d25358a696159be170eaef45 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 15:32:56 +0200 Subject: [PATCH 449/551] More refactors --- .../Producers/DevBlockproducerTests.cs | 2 +- .../Nethermind.Blockchain.Test/ReorgTests.cs | 8 +- .../ChainHeadInfoProvider.cs | 17 +- .../CliqueBlockProducerTests.cs | 8 +- .../InitializeBlockchainAuRa.cs | 15 +- .../CensorshipDetectorTests.cs | 6 +- .../Processing/ReadOnlyTxProcessingEnv.cs | 2 +- .../Blockchain/TestBlockchain.cs | 19 +- .../Nethermind.Core/AuthorizationTuple.cs | 2 + .../CodeInfoRepositoryTests.cs | 442 +++++++++--------- .../ConsolidationRequestProcessorTest.cs | 2 +- .../EvmPooledMemoryTests.cs | 2 +- .../Tracing/GasEstimationTests.cs | 2 +- .../TransactionProcessorEip4844Tests.cs | 2 +- .../TransactionProcessorEip7702Tests.cs | 2 +- .../TransactionProcessorFeeTests.cs | 2 +- .../TransactionProcessorTests.cs | 2 +- .../VirtualMachineTestsBase.cs | 2 +- .../WithdrawalRequestsProcessorTests.cs | 2 +- .../Nethermind.Evm/CodeInfoRepository.cs | 103 +--- .../Nethermind.Evm/ICodeInfoRepository.cs | 4 +- .../TransactionProcessor.cs | 74 ++- .../Nethermind.Evm/VirtualMachine.cs | 4 +- .../OverridableCodeInfoRepository.cs | 8 +- .../SimulateReadOnlyBlocksProcessingEnv.cs | 2 +- .../Steps/InitializeBlockchain.cs | 12 +- .../Modules/ParityRpcModuleTests.cs | 6 +- .../Modules/Trace/ParityStyleTracerTests.cs | 2 +- .../SyncThreadTests.cs | 8 +- .../NonceManagerTests.cs | 5 +- .../Nethermind.TxPool.Test/TxPoolTests.cs | 4 +- .../Filters/DeployedCodeFilter.cs | 4 +- .../Filters/IsValidTxSender.cs | 4 +- .../IChainHeadInfoProvider.cs | 14 +- src/Nethermind/Nethermind.TxPool/TxPool.cs | 25 +- 35 files changed, 395 insertions(+), 423 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs index be6b11b8c65..e3cf1c589bd 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Producers/DevBlockproducerTests.cs @@ -59,7 +59,7 @@ public void Test() LimboLogs.Instance); StateReader stateReader = new(trieStore, dbProvider.GetDb(DbNames.State), LimboLogs.Instance); BlockhashProvider blockhashProvider = new(blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new( blockhashProvider, specProvider, diff --git a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs index 66dda5cb578..d6b528724d0 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/ReorgTests.cs @@ -49,18 +49,16 @@ public void Setup() .WithSpecProvider(specProvider) .TestObject; + CodeInfoRepository codeInfoRepository = new(); TxPool.TxPool txPool = new( ecdsa, new BlobTxStorage(), - new ChainHeadInfoProvider(specProvider, _blockTree, stateProvider), + new ChainHeadInfoProvider(specProvider, _blockTree, stateProvider, codeInfoRepository), new TxPoolConfig(), new TxValidator(specProvider.ChainId), LimboLogs.Instance, - transactionComparerProvider.GetDefaultComparer(), - new CodeInfoRepository(specProvider.ChainId), - stateProvider); + transactionComparerProvider.GetDefaultComparer()); BlockhashProvider blockhashProvider = new(_blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); VirtualMachine virtualMachine = new( blockhashProvider, specProvider, diff --git a/src/Nethermind/Nethermind.Blockchain/ChainHeadInfoProvider.cs b/src/Nethermind/Nethermind.Blockchain/ChainHeadInfoProvider.cs index 8a0b721db9f..5edff57e926 100644 --- a/src/Nethermind/Nethermind.Blockchain/ChainHeadInfoProvider.cs +++ b/src/Nethermind/Nethermind.Blockchain/ChainHeadInfoProvider.cs @@ -17,28 +17,31 @@ namespace Nethermind.Blockchain { public class ChainHeadInfoProvider : IChainHeadInfoProvider { - public ChainHeadInfoProvider(ISpecProvider specProvider, IBlockTree blockTree, IStateReader stateReader) - : this(new ChainHeadSpecProvider(specProvider, blockTree), blockTree, new ChainHeadReadOnlyStateProvider(blockTree, stateReader)) + public ChainHeadInfoProvider(ISpecProvider specProvider, IBlockTree blockTree, IStateReader stateReader, ICodeInfoRepository codeInfoRepository) + : this(new ChainHeadSpecProvider(specProvider, blockTree), blockTree, new ChainHeadReadOnlyStateProvider(blockTree, stateReader), codeInfoRepository) { } - public ChainHeadInfoProvider(ISpecProvider specProvider, IBlockTree blockTree, IAccountStateProvider stateProvider) - : this(new ChainHeadSpecProvider(specProvider, blockTree), blockTree, stateProvider) + public ChainHeadInfoProvider(ISpecProvider specProvider, IBlockTree blockTree, IReadOnlyStateProvider stateProvider, ICodeInfoRepository codeInfoRepository) + : this(new ChainHeadSpecProvider(specProvider, blockTree), blockTree, stateProvider, codeInfoRepository) { } - public ChainHeadInfoProvider(IChainHeadSpecProvider specProvider, IBlockTree blockTree, IAccountStateProvider stateProvider) + public ChainHeadInfoProvider(IChainHeadSpecProvider specProvider, IBlockTree blockTree, IReadOnlyStateProvider stateProvider, ICodeInfoRepository codeInfoRepository) { SpecProvider = specProvider; - AccountStateProvider = stateProvider; + ReadOnlyStateProvider = stateProvider; HeadNumber = blockTree.BestKnownNumber; + CodeInfoRepository = codeInfoRepository; blockTree.BlockAddedToMain += OnHeadChanged; } public IChainHeadSpecProvider SpecProvider { get; } - public IAccountStateProvider AccountStateProvider { get; } + public IReadOnlyStateProvider ReadOnlyStateProvider { get; } + + public ICodeInfoRepository CodeInfoRepository { get; } public long HeadNumber { get; private set; } diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs index 35869348401..2307c1bb2a0 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs @@ -109,15 +109,14 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f ITransactionComparerProvider transactionComparerProvider = new TransactionComparerProvider(specProvider, blockTree); + CodeInfoRepository codeInfoRepository = new(); TxPool.TxPool txPool = new(_ethereumEcdsa, new BlobTxStorage(), - new ChainHeadInfoProvider(new FixedForkActivationChainHeadSpecProvider(GoerliSpecProvider.Instance), blockTree, stateProvider), + new ChainHeadInfoProvider(new FixedForkActivationChainHeadSpecProvider(GoerliSpecProvider.Instance), blockTree, stateProvider, codeInfoRepository), new TxPoolConfig(), new TxValidator(goerliSpecProvider.ChainId), _logManager, - transactionComparerProvider.GetDefaultComparer(), - new CodeInfoRepository(specProvider.ChainId), - stateProvider); + transactionComparerProvider.GetDefaultComparer()); _pools[privateKey] = txPool; BlockhashProvider blockhashProvider = new(blockTree, specProvider, stateProvider, LimboLogs.Instance); @@ -131,7 +130,6 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f _genesis.Header.Hash = _genesis.Header.CalculateHash(); _genesis3Validators.Header.Hash = _genesis3Validators.Header.CalculateHash(); - CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); TransactionProcessor transactionProcessor = new(goerliSpecProvider, stateProvider, new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, nodeLogManager), codeInfoRepository, diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs index 2288a552374..83f64a15ddb 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs @@ -260,25 +260,24 @@ private IComparer CreateTxPoolTxComparer(TxPriorityContract? txPrio protected override TxPool.TxPool CreateTxPool(IWorldState worldState, CodeInfoRepository codeInfoRepository) { // This has to be different object than the _processingReadOnlyTransactionProcessorSource as this is in separate thread - var txPriorityContract = TxAuRaFilterBuilders.CreateTxPrioritySources(_api); - var localDataSource = _api.TxPriorityContractLocalDataSource; + TxPriorityContract txPriorityContract = TxAuRaFilterBuilders.CreateTxPrioritySources(_api); + TxPriorityContract.LocalDataSource? localDataSource = _api.TxPriorityContractLocalDataSource; ReportTxPriorityRules(txPriorityContract, localDataSource); - var minGasPricesContractDataStore = TxAuRaFilterBuilders.CreateMinGasPricesDataStore(_api, txPriorityContract, localDataSource); + DictionaryContractDataStore? minGasPricesContractDataStore + = TxAuRaFilterBuilders.CreateMinGasPricesDataStore(_api, txPriorityContract, localDataSource); ITxFilter txPoolFilter = TxAuRaFilterBuilders.CreateAuRaTxFilterForProducer(_api, minGasPricesContractDataStore); return new TxPool.TxPool( - _api.EthereumEcdsa, + _api.EthereumEcdsa!, _api.BlobTxStorage ?? NullBlobTxStorage.Instance, - new ChainHeadInfoProvider(_api.SpecProvider, _api.BlockTree, _api.StateReader), + new ChainHeadInfoProvider(_api.SpecProvider!, _api.BlockTree!, _api.StateReader!, codeInfoRepository), NethermindApi.Config(), - _api.TxValidator, + _api.TxValidator!, _api.LogManager, CreateTxPoolTxComparer(txPriorityContract, localDataSource), - codeInfoRepository, - worldState, _api.TxGossipPolicy, new TxFilterAdapter(_api.BlockTree, txPoolFilter, _api.LogManager), txPriorityContract is not null || localDataSource is not null); diff --git a/src/Nethermind/Nethermind.Consensus.Test/CensorshipDetectorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/CensorshipDetectorTests.cs index 99dde3519db..a3ead8f5cff 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/CensorshipDetectorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/CensorshipDetectorTests.cs @@ -257,13 +257,11 @@ private TxPool.TxPool CreatePool(bool eip1559Enabled = true) return new( _ethereumEcdsa, new BlobTxStorage(), - new ChainHeadInfoProvider(_specProvider, _blockTree, _stateProvider), + new ChainHeadInfoProvider(_specProvider, _blockTree, _stateProvider, new CodeInfoRepository()), new TxPoolConfig(), new TxValidator(_specProvider.ChainId), _logManager, - _comparer, - new CodeInfoRepository(BlockchainIds.Mainnet), - _stateProvider); + _comparer); } private void BlockProcessingWorkflow(Block block) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs index cc87fa625ba..5e7d4ea28da 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/ReadOnlyTxProcessingEnv.cs @@ -48,7 +48,7 @@ public ReadOnlyTxProcessingEnv( IWorldState? worldStateToWarmUp = null ) : base(worldStateManager, readOnlyBlockTree, specProvider, logManager, worldStateToWarmUp) { - CodeInfoRepository = new CodeInfoRepository(specProvider.ChainId, (worldStateToWarmUp as IPreBlockCaches)?.Caches.PrecompileCache); + CodeInfoRepository = new CodeInfoRepository((worldStateToWarmUp as IPreBlockCaches)?.Caches.PrecompileCache); Machine = new VirtualMachine(BlockhashProvider, specProvider, CodeInfoRepository, logManager); BlockTree = readOnlyBlockTree ?? throw new ArgumentNullException(nameof(readOnlyBlockTree)); BlockhashProvider = new BlockhashProvider(BlockTree, specProvider, StateProvider, logManager); diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 6ba46d67a4f..c72cef131e1 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -181,15 +181,16 @@ protected virtual async Task Build(ISpecProvider? specProvider = ReadOnlyState = new ChainHeadReadOnlyStateProvider(BlockTree, StateReader); TransactionComparerProvider = new TransactionComparerProvider(SpecProvider, BlockTree); - TxPool = CreateTxPool(); + CodeInfoRepository codeInfoRepository = new(); + TxPool = CreateTxPool(codeInfoRepository); IChainHeadInfoProvider chainHeadInfoProvider = - new ChainHeadInfoProvider(SpecProvider, BlockTree, StateReader); + new ChainHeadInfoProvider(SpecProvider, BlockTree, StateReader, codeInfoRepository); - NonceManager = new NonceManager(chainHeadInfoProvider.AccountStateProvider); + NonceManager = new NonceManager(chainHeadInfoProvider.ReadOnlyStateProvider); _trieStoreWatcher = new TrieStoreBoundaryWatcher(WorldStateManager, BlockTree, LogManager); - CodeInfoRepository codeInfoRepository = new(SpecProvider.ChainId); + ReceiptStorage = new InMemoryReceiptStorage(blockTree: BlockTree); VirtualMachine virtualMachine = new(new BlockhashProvider(BlockTree, SpecProvider, State, LogManager), SpecProvider, codeInfoRepository, LogManager); TxProcessor = new TransactionProcessor(SpecProvider, State, virtualMachine, codeInfoRepository, LogManager); @@ -315,17 +316,15 @@ protected virtual IBlockProducerRunner CreateBlockProducerRunner() public virtual ILogManager LogManager { get; set; } = LimboLogs.Instance; - protected virtual TxPool.TxPool CreateTxPool() => + protected virtual TxPool.TxPool CreateTxPool(CodeInfoRepository codeInfoRepository) => new( EthereumEcdsa, new BlobTxStorage(), - new ChainHeadInfoProvider(new FixedForkActivationChainHeadSpecProvider(SpecProvider), BlockTree, ReadOnlyState), - new TxPoolConfig() { BlobsSupport = BlobsSupportMode.InMemory }, + new ChainHeadInfoProvider(new FixedForkActivationChainHeadSpecProvider(SpecProvider), BlockTree, ReadOnlyState, codeInfoRepository), + new TxPoolConfig { BlobsSupport = BlobsSupportMode.InMemory }, new TxValidator(SpecProvider.ChainId), LogManager, - TransactionComparerProvider.GetDefaultComparer(), - new CodeInfoRepository(SpecProvider.ChainId), - WorldStateManager.GlobalWorldState); + TransactionComparerProvider.GetDefaultComparer()); protected virtual TxPoolTxSource CreateTxPoolTxSource() { diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 061764fb0f6..69fd3b53768 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -31,4 +31,6 @@ public AuthorizationTuple( /// may be recovered at a later point. ///
public Address? Authority { get; set; } = authority; + + public override string ToString() => $"Delegation authorization from {Authority} to {CodeAddress} on chain {ChainId} with Nonce {Nonce}"; } diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 3c6d5e1e78d..bdd7f04602c 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -25,217 +25,217 @@ namespace Nethermind.Evm.Test; [TestFixture, Parallelizable] public class CodeInfoRepositoryTests { - [Test] - public void SetDelegations_AuthorityTupleIsCorrect_AuthorityIsAddedToAccessedAddresses() - { - PrivateKey authority = TestItem.PrivateKeyA; - CodeInfoRepository sut = new(1); - var tuples = new[] - { - CreateAuthorizationTuple(authority, 1, TestItem.AddressB, 0), - }; - HashSet
accessedAddresses = new(); - sut.SetDelegations(Substitute.For(), tuples, accessedAddresses, Substitute.For()); - - accessedAddresses.Should().BeEquivalentTo([authority.Address]); - } - - public static IEnumerable AuthorizationCases() - { - yield return new object[] - { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, 0), - true - }; - yield return new object[] - { - //Wrong chain id - CreateAuthorizationTuple(TestItem.PrivateKeyB, 2, TestItem.AddressB, 0), - false - }; - yield return new object[] - { - //wrong nonce - CreateAuthorizationTuple(TestItem.PrivateKeyC, 1, TestItem.AddressB, 1), - false - }; - } - - [TestCaseSource(nameof(AuthorizationCases))] - public void SetDelegations_MixOfCorrectAndWrongChainIdAndNonce_InsertsIfExpected(AuthorizationTuple tuple, bool shouldInsert) - { - IDb stateDb = new MemDb(); - IDb codeDb = new MemDb(); - TrieStore trieStore = new(stateDb, LimboLogs.Instance); - IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - CodeInfoRepository sut = new(1); - HashSet
accessedAddresses = new(); - sut.SetDelegations(stateProvider, [tuple], accessedAddresses, Substitute.For()); - - Assert.That(stateProvider.HasCode(tuple.Authority), Is.EqualTo(shouldInsert)); - } - - [Test] - public void SetDelegations_AuthorityHasCode_NoCodeIsInserted() - { - PrivateKey authority = TestItem.PrivateKeyA; - Address codeSource = TestItem.AddressB; - IWorldState mockWorldState = Substitute.For(); - mockWorldState.HasCode(authority.Address).Returns(true); - mockWorldState.GetCode(authority.Address).Returns(new byte[32]); - CodeInfoRepository sut = new(1); - var tuples = new[] - { - CreateAuthorizationTuple(authority, 1, codeSource, 0), - }; - HashSet
accessedAddresses = new(); - - sut.SetDelegations(mockWorldState, tuples, accessedAddresses, Substitute.For()); - - mockWorldState.DidNotReceive().InsertCode(Arg.Any
(), Arg.Any>(), Arg.Any()); - } - - [Test] - public void SetDelegations_AuthorityHasDelegatedCode_CodeIsInserted() - { - PrivateKey authority = TestItem.PrivateKeyA; - Address codeSource = TestItem.AddressB; - IDb stateDb = new MemDb(); - IDb codeDb = new MemDb(); - TrieStore trieStore = new(stateDb, LimboLogs.Instance); - IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - byte[] code = new byte[23]; - Eip7702Constants.DelegationHeader.CopyTo(code); - stateProvider.CreateAccount(authority.Address, 0); - stateProvider.InsertCode(authority.Address, ValueKeccak.Compute(code), code, Substitute.For()); - CodeInfoRepository sut = new(1); - var tuples = new[] - { - CreateAuthorizationTuple(authority, 1, codeSource, 0), - }; - - sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); - - Assert.That(stateProvider.GetCode(authority.Address).Slice(3), Is.EqualTo(codeSource.Bytes)); - } - - [TestCase(true)] - [TestCase(false)] - public void SetDelegations_AuthorityAccountExistsOrNot_NonceIsIncrementedByOne(bool accountExists) - { - IDb stateDb = new MemDb(); - IDb codeDb = new MemDb(); - TrieStore trieStore = new(stateDb, LimboLogs.Instance); - IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - PrivateKey authority = TestItem.PrivateKeyA; - Address codeSource = TestItem.AddressB; - if (accountExists) - stateProvider.CreateAccount(authority.Address, 0); - CodeInfoRepository sut = new(1); - var tuples = new[] - { - CreateAuthorizationTuple(authority, 1, codeSource, 0), - }; - - sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); - - Assert.That(stateProvider.GetNonce(authority.Address), Is.EqualTo((UInt256)1)); - } - - [Test] - public void SetDelegations_FourAuthorizationInTotalButOneHasInvalidNonce_ResultContainsThreeAddresses() - { - CodeInfoRepository sut = new(1); - var tuples = new[] - { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), - CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), - CreateAuthorizationTuple(TestItem.PrivateKeyC, 2, TestItem.AddressF, 0), - CreateAuthorizationTuple(TestItem.PrivateKeyD, 1, TestItem.AddressF, 1), - }; - HashSet
addresses = new(); - sut.SetDelegations(Substitute.For(), tuples, addresses, Substitute.For()); - - addresses.Should().BeEquivalentTo([TestItem.AddressA, TestItem.AddressB, TestItem.AddressD]); - } - - [Test] - public void SetDelegations_AuthorizationsHasOneExistingAccount_ResultHaveOneRefund() - { - IDb stateDb = new MemDb(); - IDb codeDb = new MemDb(); - TrieStore trieStore = new(stateDb, LimboLogs.Instance); - IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - CodeInfoRepository sut = new(1); - var tuples = new[] - { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), - CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), - }; - stateProvider.CreateAccount(TestItem.AddressA, 0); - - int refunds = sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); - - refunds.Should().Be(1); - } - public static IEnumerable CountsAsAccessedCases() - { - yield return new object[] - { - new AuthorizationTuple[] - { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), - CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), - }, - new Address[] - { - TestItem.AddressA, - TestItem.AddressB - } - }; - yield return new object[] - { - new AuthorizationTuple[] - { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), - CreateAuthorizationTuple(TestItem.PrivateKeyB, 2, TestItem.AddressF, 0), - }, - new Address[] - { - TestItem.AddressA, - } - }; - yield return new object[] - { - new AuthorizationTuple[] - { - CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), - //Bad signature - new AuthorizationTuple(1, TestItem.AddressF, 0, new Signature(new byte[65]), TestItem.AddressA) - }, - new Address[] - { - TestItem.AddressA, - } - }; - } - - [TestCaseSource(nameof(CountsAsAccessedCases))] - public void SetDelegations_CombinationOfValidAndInvalidTuples_AddsTheCorrectAddressesToAccessedAddresses(AuthorizationTuple[] tuples, Address[] shouldCountAsAccessed) - { - IDb stateDb = new MemDb(); - IDb codeDb = new MemDb(); - TrieStore trieStore = new(stateDb, LimboLogs.Instance); - IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - CodeInfoRepository sut = new(1); - stateProvider.CreateAccount(TestItem.AddressA, 0); - - ISet
accessedAddresses = new HashSet
(); - sut.SetDelegations(stateProvider, tuples, accessedAddresses, Substitute.For()); - - accessedAddresses.Count.Should().Be(shouldCountAsAccessed.Length); - accessedAddresses.Should().Contain(shouldCountAsAccessed); - } + // [Test] + // public void SetDelegations_AuthorityTupleIsCorrect_AuthorityIsAddedToAccessedAddresses() + // { + // PrivateKey authority = TestItem.PrivateKeyA; + // CodeInfoRepository sut = new(1); + // var tuples = new[] + // { + // CreateAuthorizationTuple(authority, 1, TestItem.AddressB, 0), + // }; + // HashSet
accessedAddresses = new(); + // sut.SetDelegations(Substitute.For(), tuples, accessedAddresses, Substitute.For()); + // + // accessedAddresses.Should().BeEquivalentTo([authority.Address]); + // } + // + // public static IEnumerable AuthorizationCases() + // { + // yield return new object[] + // { + // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, 0), + // true + // }; + // yield return new object[] + // { + // //Wrong chain id + // CreateAuthorizationTuple(TestItem.PrivateKeyB, 2, TestItem.AddressB, 0), + // false + // }; + // yield return new object[] + // { + // //wrong nonce + // CreateAuthorizationTuple(TestItem.PrivateKeyC, 1, TestItem.AddressB, 1), + // false + // }; + // } + // + // [TestCaseSource(nameof(AuthorizationCases))] + // public void SetDelegations_MixOfCorrectAndWrongChainIdAndNonce_InsertsIfExpected(AuthorizationTuple tuple, bool shouldInsert) + // { + // IDb stateDb = new MemDb(); + // IDb codeDb = new MemDb(); + // TrieStore trieStore = new(stateDb, LimboLogs.Instance); + // IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + // CodeInfoRepository sut = new(1); + // HashSet
accessedAddresses = new(); + // sut.SetDelegations(stateProvider, [tuple], accessedAddresses, Substitute.For()); + // + // Assert.That(stateProvider.HasCode(tuple.Authority), Is.EqualTo(shouldInsert)); + // } + // + // [Test] + // public void SetDelegations_AuthorityHasCode_NoCodeIsInserted() + // { + // PrivateKey authority = TestItem.PrivateKeyA; + // Address codeSource = TestItem.AddressB; + // IWorldState mockWorldState = Substitute.For(); + // mockWorldState.HasCode(authority.Address).Returns(true); + // mockWorldState.GetCode(authority.Address).Returns(new byte[32]); + // CodeInfoRepository sut = new(1); + // var tuples = new[] + // { + // CreateAuthorizationTuple(authority, 1, codeSource, 0), + // }; + // HashSet
accessedAddresses = new(); + // + // sut.SetDelegations(mockWorldState, tuples, accessedAddresses, Substitute.For()); + // + // mockWorldState.DidNotReceive().InsertCode(Arg.Any
(), Arg.Any>(), Arg.Any()); + // } + // + // [Test] + // public void SetDelegations_AuthorityHasDelegatedCode_CodeIsInserted() + // { + // PrivateKey authority = TestItem.PrivateKeyA; + // Address codeSource = TestItem.AddressB; + // IDb stateDb = new MemDb(); + // IDb codeDb = new MemDb(); + // TrieStore trieStore = new(stateDb, LimboLogs.Instance); + // IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + // byte[] code = new byte[23]; + // Eip7702Constants.DelegationHeader.CopyTo(code); + // stateProvider.CreateAccount(authority.Address, 0); + // stateProvider.InsertCode(authority.Address, ValueKeccak.Compute(code), code, Substitute.For()); + // CodeInfoRepository sut = new(1); + // var tuples = new[] + // { + // CreateAuthorizationTuple(authority, 1, codeSource, 0), + // }; + // + // sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); + // + // Assert.That(stateProvider.GetCode(authority.Address).Slice(3), Is.EqualTo(codeSource.Bytes)); + // } + // + // [TestCase(true)] + // [TestCase(false)] + // public void SetDelegations_AuthorityAccountExistsOrNot_NonceIsIncrementedByOne(bool accountExists) + // { + // IDb stateDb = new MemDb(); + // IDb codeDb = new MemDb(); + // TrieStore trieStore = new(stateDb, LimboLogs.Instance); + // IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + // PrivateKey authority = TestItem.PrivateKeyA; + // Address codeSource = TestItem.AddressB; + // if (accountExists) + // stateProvider.CreateAccount(authority.Address, 0); + // CodeInfoRepository sut = new(1); + // var tuples = new[] + // { + // CreateAuthorizationTuple(authority, 1, codeSource, 0), + // }; + // + // sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); + // + // Assert.That(stateProvider.GetNonce(authority.Address), Is.EqualTo((UInt256)1)); + // } + // + // [Test] + // public void SetDelegations_FourAuthorizationInTotalButOneHasInvalidNonce_ResultContainsThreeAddresses() + // { + // CodeInfoRepository sut = new(1); + // var tuples = new[] + // { + // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + // CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), + // CreateAuthorizationTuple(TestItem.PrivateKeyC, 2, TestItem.AddressF, 0), + // CreateAuthorizationTuple(TestItem.PrivateKeyD, 1, TestItem.AddressF, 1), + // }; + // HashSet
addresses = new(); + // sut.SetDelegations(Substitute.For(), tuples, addresses, Substitute.For()); + // + // addresses.Should().BeEquivalentTo([TestItem.AddressA, TestItem.AddressB, TestItem.AddressD]); + // } + // + // [Test] + // public void SetDelegations_AuthorizationsHasOneExistingAccount_ResultHaveOneRefund() + // { + // IDb stateDb = new MemDb(); + // IDb codeDb = new MemDb(); + // TrieStore trieStore = new(stateDb, LimboLogs.Instance); + // IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + // CodeInfoRepository sut = new(1); + // var tuples = new[] + // { + // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + // CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), + // }; + // stateProvider.CreateAccount(TestItem.AddressA, 0); + // + // int refunds = sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); + // + // refunds.Should().Be(1); + // } + // public static IEnumerable CountsAsAccessedCases() + // { + // yield return new object[] + // { + // new AuthorizationTuple[] + // { + // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + // CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), + // }, + // new Address[] + // { + // TestItem.AddressA, + // TestItem.AddressB + // } + // }; + // yield return new object[] + // { + // new AuthorizationTuple[] + // { + // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + // CreateAuthorizationTuple(TestItem.PrivateKeyB, 2, TestItem.AddressF, 0), + // }, + // new Address[] + // { + // TestItem.AddressA, + // } + // }; + // yield return new object[] + // { + // new AuthorizationTuple[] + // { + // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + // //Bad signature + // new AuthorizationTuple(1, TestItem.AddressF, 0, new Signature(new byte[65]), TestItem.AddressA) + // }, + // new Address[] + // { + // TestItem.AddressA, + // } + // }; + // } + // + // [TestCaseSource(nameof(CountsAsAccessedCases))] + // public void SetDelegations_CombinationOfValidAndInvalidTuples_AddsTheCorrectAddressesToAccessedAddresses(AuthorizationTuple[] tuples, Address[] shouldCountAsAccessed) + // { + // IDb stateDb = new MemDb(); + // IDb codeDb = new MemDb(); + // TrieStore trieStore = new(stateDb, LimboLogs.Instance); + // IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); + // CodeInfoRepository sut = new(1); + // stateProvider.CreateAccount(TestItem.AddressA, 0); + // + // ISet
accessedAddresses = new HashSet
(); + // sut.SetDelegations(stateProvider, tuples, accessedAddresses, Substitute.For()); + // + // accessedAddresses.Count.Should().Be(shouldCountAsAccessed.Length); + // accessedAddresses.Should().Contain(shouldCountAsAccessed); + // } public static IEnumerable NotDelegationCodeCases() { @@ -282,9 +282,9 @@ public void IsDelegation_CodeIsNotDelegation_ReturnsFalse(byte[] code) IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); stateProvider.CreateAccount(TestItem.AddressA, 0); stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); - CodeInfoRepository sut = new(1); + CodeInfoRepository sut = new(); - sut.TryGetDelegatedAddress(stateProvider, TestItem.AddressA, out _).Should().Be(false); + sut.TryGetDelegation(stateProvider, TestItem.AddressA, out _).Should().Be(false); } @@ -312,9 +312,9 @@ public void IsDelegation_CodeIsDelegation_ReturnsTrue(byte[] code) IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); stateProvider.CreateAccount(TestItem.AddressA, 0); stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); - CodeInfoRepository sut = new(1); + CodeInfoRepository sut = new(); - sut.TryGetDelegatedAddress(stateProvider, TestItem.AddressA, out _).Should().Be(true); + sut.TryGetDelegation(stateProvider, TestItem.AddressA, out _).Should().Be(true); } [TestCaseSource(nameof(DelegationCodeCases))] @@ -326,10 +326,10 @@ public void IsDelegation_CodeIsDelegation_CorrectDelegationAddressIsSet(byte[] c IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); stateProvider.CreateAccount(TestItem.AddressA, 0); stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); - CodeInfoRepository sut = new(1); + CodeInfoRepository sut = new(); Address result; - sut.TryGetDelegatedAddress(stateProvider, TestItem.AddressA, out result); + sut.TryGetDelegation(stateProvider, TestItem.AddressA, out result); result.Should().Be(new Address(code.Slice(3, Address.Size))); } @@ -348,7 +348,7 @@ public void GetCodeHash_CodeIsDelegation_ReturnsHashOfDelegated(byte[] code) stateProvider.CreateAccount(delegationAddress, 0); stateProvider.InsertCode(delegationAddress, delegationCode, Substitute.For()); - CodeInfoRepository sut = new(1); + CodeInfoRepository sut = new(); sut.GetExecutableCodeHash(stateProvider, TestItem.AddressA).Should().Be(Keccak.Compute(delegationCode).ValueHash256); } @@ -363,7 +363,7 @@ public void GetCodeHash_CodeIsNotDelegation_ReturnsCodeHashOfAddress(byte[] code stateProvider.CreateAccount(TestItem.AddressA, 0); stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); - CodeInfoRepository sut = new(1); + CodeInfoRepository sut = new(); sut.GetExecutableCodeHash(stateProvider, TestItem.AddressA).Should().Be(Keccak.Compute(code).ValueHash256); } @@ -381,7 +381,7 @@ public void GetCachedCodeInfo_CodeIsDelegation_ReturnsCodeOfDelegation(byte[] co stateProvider.CreateAccount(delegationAddress, 0); byte[] delegationCode = new byte[32]; stateProvider.InsertCode(delegationAddress, delegationCode, Substitute.For()); - CodeInfoRepository sut = new(1); + CodeInfoRepository sut = new(); CodeInfo result = sut.GetCachedCodeInfo(stateProvider, TestItem.AddressA, Substitute.For()); result.MachineCode.ToArray().Should().BeEquivalentTo(delegationCode); @@ -397,7 +397,7 @@ public void GetCachedCodeInfo_CodeIsNotDelegation_ReturnsCodeOfAddress(byte[] co stateProvider.CreateAccount(TestItem.AddressA, 0); stateProvider.InsertCode(TestItem.AddressA, code, Substitute.For()); - CodeInfoRepository sut = new(1); + CodeInfoRepository sut = new(); sut.GetCachedCodeInfo(stateProvider, TestItem.AddressA, Substitute.For()).Should().BeEquivalentTo(new CodeInfo(code)); } diff --git a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs index 28f94574ca2..923bccec301 100644 --- a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs +++ b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs @@ -49,7 +49,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - _codeInfoRepository = new CodeInfoRepository(_specProvider.ChainId); + _codeInfoRepository = new CodeInfoRepository(); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs index 49eee238201..69e75399a8f 100644 --- a/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/EvmPooledMemoryTests.cs @@ -158,7 +158,7 @@ private static string Run(byte[] input) new MemDb(), LimboLogs.Instance); ISpecProvider specProvider = new TestSpecProvider(London.Instance); - CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new( new TestBlockhashProvider(specProvider), specProvider, diff --git a/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs b/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs index e621b3e968f..c6af6bf6b3e 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Tracing/GasEstimationTests.cs @@ -362,7 +362,7 @@ public TestEnvironment() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - CodeInfoRepository codeInfoRepository = new(_specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs index ac09dfa9bbe..fcd0eda8227 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs @@ -35,7 +35,7 @@ public void Setup() _specProvider = new TestSpecProvider(Cancun.Instance); TrieStore trieStore = new(stateDb, LimboLogs.Instance); _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(_specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index c6f99137f3d..6642937d509 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -38,7 +38,7 @@ public void Setup() _specProvider = new TestSpecProvider(Prague.Instance); TrieStore trieStore = new(stateDb, LimboLogs.Instance); _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(_specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs index ee618ce0e46..574dcdbc171 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorFeeTests.cs @@ -42,7 +42,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - CodeInfoRepository codeInfoRepository = new(_specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs index e2346ec66d1..59b07b4e72a 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorTests.cs @@ -58,7 +58,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - CodeInfoRepository codeInfoRepository = new(_specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, codeInfoRepository, LimboLogs.Instance); _transactionProcessor = new TransactionProcessor(_specProvider, _stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); diff --git a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs index f30ba5e586f..6960cc8b18c 100644 --- a/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs +++ b/src/Nethermind/Nethermind.Evm.Test/VirtualMachineTestsBase.cs @@ -68,7 +68,7 @@ public virtual void Setup() TestState = new WorldState(trieStore, codeDb, logManager); _ethereumEcdsa = new EthereumEcdsa(SpecProvider.ChainId); IBlockhashProvider blockhashProvider = new TestBlockhashProvider(SpecProvider); - CodeInfoRepository = new CodeInfoRepository(SpecProvider.ChainId); + CodeInfoRepository = new CodeInfoRepository(); Machine = new VirtualMachine(blockhashProvider, SpecProvider, CodeInfoRepository, logManager); _processor = new TransactionProcessor(SpecProvider, TestState, Machine, CodeInfoRepository, logManager); } diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs index c805ffae5f8..8ba566e8171 100644 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -47,7 +47,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - _codeInfoRepository = new CodeInfoRepository(_specProvider.ChainId); + _codeInfoRepository = new CodeInfoRepository(); VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index 1335c1254eb..f5b74c5634e 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -16,7 +16,6 @@ using Nethermind.Evm.Precompiles.Bls; using Nethermind.Evm.Precompiles.Snarks; using Nethermind.State; -using Nethermind.Int256; using Nethermind.Crypto; namespace Nethermind.Evm; @@ -26,7 +25,6 @@ public class CodeInfoRepository : ICodeInfoRepository private static readonly FrozenDictionary _precompiles = InitializePrecompiledContracts(); private static readonly CodeLruCache _codeCache = new(); private readonly FrozenDictionary _localPrecompiles; - private readonly EthereumEcdsa _ethereumEcdsa; private static FrozenDictionary InitializePrecompiledContracts() { @@ -60,9 +58,8 @@ private static FrozenDictionary InitializePrecompiledCon }.ToFrozenDictionary(); } - public CodeInfoRepository(ulong chainId, ConcurrentDictionary, bool)>? precompileCache = null) + public CodeInfoRepository(ConcurrentDictionary, bool)>? precompileCache = null) { - _ethereumEcdsa = new EthereumEcdsa(chainId); _localPrecompiles = precompileCache is null ? _precompiles : _precompiles.ToFrozenDictionary(kvp => kvp.Key, kvp => CreateCachedPrecompile(kvp, precompileCache)); @@ -86,7 +83,7 @@ public CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IR return cachedCodeInfo; } - private static CodeInfo InternalGetCachedCode(IWorldState worldState, Address codeSource) + private static CodeInfo InternalGetCachedCode(IReadOnlyStateProvider worldState, Address codeSource) { CodeInfo? cachedCodeInfo = null; ValueHash256 codeHash = worldState.GetCodeHash(codeSource); @@ -134,53 +131,14 @@ public void InsertCode(IWorldState state, ReadOnlyMemory code, Address cod _codeCache.Set(codeHash, codeInfo); } - /// - /// Insert code delegations from transaction authorization_list authorized by signature, - /// and return all authority addresses that was accessed and amount of autorization refunds. - /// eip-7702 - /// - public int SetDelegations( - IWorldState worldState, - AuthorizationTuple?[] authorizations, - ISet
accessedAddresses, - IReleaseSpec spec) + public void SetDelegation(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) { - int refunds = 0; - //TODO optimize - foreach (AuthorizationTuple? authTuple in authorizations) - { - if (authTuple is null) - continue; - - authTuple.Authority ??= _ethereumEcdsa.RecoverAddress(authTuple); - - if (!IsValidForExecution(authTuple, worldState, _ethereumEcdsa.ChainId, accessedAddresses, out _)) - continue; - - if (!worldState.AccountExists(authTuple.Authority!)) - { - worldState.CreateAccount(authTuple.Authority, 0, 1); - } - else - { - refunds++; - worldState.IncrementNonce(authTuple.Authority); - } - - InsertDelegationCode(worldState, authTuple.CodeAddress, authTuple.Authority, spec); - } - - return refunds; - - static void InsertDelegationCode(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) - { - byte[] authorizedBuffer = new byte[Eip7702Constants.DelegationHeader.Length + Address.Size]; - Eip7702Constants.DelegationHeader.CopyTo(authorizedBuffer); - codeSource.Bytes.CopyTo(authorizedBuffer, Eip7702Constants.DelegationHeader.Length); - ValueHash256 codeHash = ValueKeccak.Compute(authorizedBuffer); - state.InsertCode(authority, codeHash, authorizedBuffer.AsMemory(), spec); - _codeCache.Set(codeHash, new CodeInfo(authorizedBuffer)); - } + byte[] authorizedBuffer = new byte[Eip7702Constants.DelegationHeader.Length + Address.Size]; + Eip7702Constants.DelegationHeader.CopyTo(authorizedBuffer); + codeSource.Bytes.CopyTo(authorizedBuffer, Eip7702Constants.DelegationHeader.Length); + ValueHash256 codeHash = ValueKeccak.Compute(authorizedBuffer); + state.InsertCode(authority, codeHash, authorizedBuffer.AsMemory(), spec); + _codeCache.Set(codeHash, new CodeInfo(authorizedBuffer)); } /// @@ -204,47 +162,6 @@ public ValueHash256 GetExecutableCodeHash(IWorldState worldState, Address addres : codeHash; } - /// - /// Determines if a is wellformed according to spec. - /// - private bool IsValidForExecution( - AuthorizationTuple authorizationTuple, - IWorldState stateProvider, - ulong chainId, - ISet
accessedAddresses, - [NotNullWhen(false)] out string? error) - { - if (authorizationTuple.Authority is null) - { - error = "Bad signature."; - return false; - } - if (authorizationTuple.ChainId != 0 && chainId != authorizationTuple.ChainId) - { - error = $"Chain id ({authorizationTuple.ChainId}) does not match."; - return false; - } - accessedAddresses.Add(authorizationTuple.Authority); - - if (stateProvider.HasCode(authorizationTuple.Authority) && !HasDelegatedCode(stateProvider, authorizationTuple.Authority)) - { - error = $"Authority ({authorizationTuple.Authority}) has code deployed."; - return false; - } - UInt256 authNonce = stateProvider.GetNonce(authorizationTuple.Authority); - if (authNonce != authorizationTuple.Nonce) - { - error = $"Skipping tuple in authorization_list because nonce is set to {authorizationTuple.Nonce}, but authority ({authorizationTuple.Authority}) has {authNonce}."; - return false; - } - - error = null; - return true; - - static bool HasDelegatedCode(IWorldState worldState, Address source) => - Eip7702Constants.IsDelegatedCode(InternalGetCachedCode(worldState, source).MachineCode.Span); - } - /// /// Parses delegation code to extract the contained address. /// Assumes is delegation code! @@ -266,7 +183,7 @@ private CodeInfo CreateCachedPrecompile( ConcurrentDictionary, bool)> cache) => new(new CachedPrecompile(originalPrecompile.Key.Value, originalPrecompile.Value.Precompile!, cache)); - public bool TryGetDelegatedAddress(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => + public bool TryGetDelegation(IReadOnlyStateProvider worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => TryGetDelegatedAddress(InternalGetCachedCode(worldState, address).MachineCode.Span, out delegatedAddress); private class CachedPrecompile( diff --git a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs index 04e483b394c..b2f0a4a176d 100644 --- a/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/ICodeInfoRepository.cs @@ -17,8 +17,8 @@ public interface ICodeInfoRepository CodeInfo GetCachedCodeInfo(IWorldState worldState, Address codeSource, IReleaseSpec vmSpec, out Address? delegationAddress); ValueHash256 GetExecutableCodeHash(IWorldState worldState, Address address); void InsertCode(IWorldState state, ReadOnlyMemory code, Address codeOwner, IReleaseSpec spec); - int SetDelegations(IWorldState worldState, AuthorizationTuple?[] authorizations, ISet
accessedAddresses, IReleaseSpec spec); - bool TryGetDelegatedAddress(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress); + void SetDelegation(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec); + bool TryGetDelegation(IReadOnlyStateProvider worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress); } public static class CodeInfoRepositoryExtensions diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 71e8211e0f3..3ed03a0e952 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -151,11 +151,7 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon if (commit) WorldState.Commit(spec, tracer.IsTracingState ? tracer : NullTxTracer.Instance, commitStorageRoots: false); _accessedAddresses.Clear(); - int delegationRefunds = 0; - if (spec.IsEip7702Enabled && tx.HasAuthorizationList) - { - delegationRefunds = _codeInfoRepository.SetDelegations(WorldState, tx.AuthorizationList, _accessedAddresses, spec); - } + int delegationRefunds = ProcessDelegations(tx, spec, _accessedAddresses); ExecutionEnvironment env = BuildExecutionEnvironment(tx, in blCtx, spec, effectiveGasPrice, _codeInfoRepository, _accessedAddresses); @@ -209,6 +205,74 @@ protected virtual TransactionResult Execute(Transaction tx, in BlockExecutionCon return TransactionResult.Ok; } + private int ProcessDelegations(Transaction tx, IReleaseSpec spec, HashSet
accessedAddresses) + { + int refunds = 0; + if (spec.IsEip7702Enabled && tx.HasAuthorizationList) + { + foreach (AuthorizationTuple authTuple in tx.AuthorizationList) + { + authTuple.Authority ??= Ecdsa.RecoverAddress(authTuple); + + if (!IsValidForExecution(authTuple, accessedAddresses, out _)) + { + if (Logger.IsDebug) Logger.Debug($"Delegation {authTuple} is invalid"); + } + else + { + if (!WorldState.AccountExists(authTuple.Authority!)) + { + WorldState.CreateAccount(authTuple.Authority, 0, 1); + } + else + { + refunds++; + WorldState.IncrementNonce(authTuple.Authority); + } + + _codeInfoRepository.SetDelegation(WorldState, authTuple.CodeAddress, authTuple.Authority, spec); + } + } + + } + + return refunds; + + bool IsValidForExecution( + AuthorizationTuple authorizationTuple, + ISet
accessedAddresses, + [NotNullWhen(false)] out string? error) + { + if (authorizationTuple.Authority is null) + { + error = "Bad signature."; + return false; + } + if (authorizationTuple.ChainId != 0 && SpecProvider.ChainId != authorizationTuple.ChainId) + { + error = $"Chain id ({authorizationTuple.ChainId}) does not match."; + return false; + } + + accessedAddresses.Add(authorizationTuple.Authority); + + if (WorldState.HasCode(authorizationTuple.Authority) && !_codeInfoRepository.TryGetDelegation(WorldState, authorizationTuple.Authority, out _)) + { + error = $"Authority ({authorizationTuple.Authority}) has code deployed."; + return false; + } + UInt256 authNonce = WorldState.GetNonce(authorizationTuple.Authority); + if (authNonce != authorizationTuple.Nonce) + { + error = $"Skipping tuple in authorization_list because nonce is set to {authorizationTuple.Nonce}, but authority ({authorizationTuple.Authority}) has {authNonce}."; + return false; + } + + error = null; + return true; + } + } + protected virtual IReleaseSpec GetSpec(Transaction tx, BlockHeader header) => SpecProvider.GetSpec(header); private static void UpdateMetrics(ExecutionOptions opts, UInt256 effectiveGasPrice) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index a10ae2dcd7d..52515d0954d 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -482,7 +482,7 @@ private bool ChargeAccountAccessGas(ref long gasAvailable, EvmState vmState, Add bool notOutOfGas = ChargeAccountGas(ref gasAvailable, vmState, address, spec); return notOutOfGas && chargeForDelegation - && vmState.Env.TxExecutionContext.CodeInfoRepository.TryGetDelegatedAddress(_state, address, out Address delegated) + && vmState.Env.TxExecutionContext.CodeInfoRepository.TryGetDelegation(_state, address, out Address delegated) ? ChargeAccountGas(ref gasAvailable, vmState, delegated, spec) : notOutOfGas; @@ -1901,7 +1901,7 @@ private CallResult ExecuteCode accessedAddresses, IReleaseSpec spec) => - codeInfoRepository.SetDelegations(worldState, authorizations, accessedAddresses, spec); + public void SetDelegation(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) => + codeInfoRepository.SetDelegation(state, codeSource, authority, spec); - public bool TryGetDelegatedAddress(IWorldState worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => - codeInfoRepository.TryGetDelegatedAddress(worldState, address, out delegatedAddress); + public bool TryGetDelegation(IReadOnlyStateProvider worldState, Address address, [NotNullWhen(true)] out Address? delegatedAddress) => + codeInfoRepository.TryGetDelegation(worldState, address, out delegatedAddress); public ValueHash256 GetExecutableCodeHash(IWorldState worldState, Address address) => codeInfoRepository.GetExecutableCodeHash(worldState, address); diff --git a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs index 4087bd3b633..5196c1850ac 100644 --- a/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs +++ b/src/Nethermind/Nethermind.Facade/Simulate/SimulateReadOnlyBlocksProcessingEnv.cs @@ -70,7 +70,7 @@ public SimulateReadOnlyBlocksProcessingEnv( BlockhashProvider = new SimulateBlockhashProvider(new BlockhashProvider(BlockTree, specProvider, StateProvider, logManager), BlockTree); StateProvider = WorldStateManager.GlobalWorldState; StateReader = WorldStateManager.GlobalStateReader; - CodeInfoRepository = new OverridableCodeInfoRepository(new CodeInfoRepository(specProvider.ChainId)); + CodeInfoRepository = new OverridableCodeInfoRepository(new CodeInfoRepository()); VirtualMachine = new SimulateVirtualMachine(new VirtualMachine(BlockhashProvider, specProvider, CodeInfoRepository, logManager)); _transactionProcessor = new SimulateTransactionProcessor(SpecProvider, StateProvider, VirtualMachine, CodeInfoRepository, _logManager, validate); _blockValidator = CreateValidator(); diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs index 5a08cb38095..c1a6045955e 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs @@ -59,7 +59,7 @@ protected virtual Task InitBlockchain() IStateReader stateReader = setApi.StateReader!; PreBlockCaches? preBlockCaches = (_api.WorldState as IPreBlockCaches)?.Caches; - CodeInfoRepository codeInfoRepository = new(_api.SpecProvider!.ChainId, preBlockCaches?.PrecompileCache); + CodeInfoRepository codeInfoRepository = new(preBlockCaches?.PrecompileCache); ITxPool txPool = _api.TxPool = CreateTxPool(_api.WorldState!, codeInfoRepository); ReceiptCanonicalityMonitor receiptCanonicalityMonitor = new(getApi.ReceiptStorage, _api.LogManager); @@ -81,17 +81,17 @@ protected virtual Task InitBlockchain() setApi.BlockValidator = CreateBlockValidator(); IChainHeadInfoProvider chainHeadInfoProvider = - new ChainHeadInfoProvider(getApi.SpecProvider!, getApi.BlockTree!, stateReader); + new ChainHeadInfoProvider(getApi.SpecProvider!, getApi.BlockTree!, stateReader, codeInfoRepository); // TODO: can take the tx sender from plugin here maybe ITxSigner txSigner = new WalletTxSigner(getApi.Wallet, getApi.SpecProvider!.ChainId); TxSealer nonceReservingTxSealer = new(txSigner, getApi.Timestamper); - INonceManager nonceManager = new NonceManager(chainHeadInfoProvider.AccountStateProvider); + INonceManager nonceManager = new NonceManager(chainHeadInfoProvider.ReadOnlyStateProvider); setApi.NonceManager = nonceManager; setApi.TxSender = new TxPoolSender(txPool, nonceReservingTxSealer, nonceManager, getApi.EthereumEcdsa!); - setApi.TxPoolInfoProvider = new TxPoolInfoProvider(chainHeadInfoProvider.AccountStateProvider, txPool); + setApi.TxPoolInfoProvider = new TxPoolInfoProvider(chainHeadInfoProvider.ReadOnlyStateProvider, txPool); setApi.GasPriceOracle = new GasPriceOracle(getApi.BlockTree!, getApi.SpecProvider, _api.LogManager, blocksConfig.MinGasPrice); BlockCachePreWarmer? preWarmer = blocksConfig.PreWarmStateOnBlockProcessing ? new(new(_api.WorldStateManager!, _api.BlockTree!, _api.SpecProvider, _api.LogManager, _api.WorldState), _api.SpecProvider, _api.LogManager, preBlockCaches) @@ -204,13 +204,11 @@ protected virtual IBlockProductionPolicy CreateBlockProductionPolicy() => protected virtual TxPool.TxPool CreateTxPool(IWorldState worldState, CodeInfoRepository codeInfoRepository) => new(_api.EthereumEcdsa!, _api.BlobTxStorage ?? NullBlobTxStorage.Instance, - new ChainHeadInfoProvider(_api.SpecProvider!, _api.BlockTree!, _api.StateReader!), + new ChainHeadInfoProvider(_api.SpecProvider!, _api.BlockTree!, _api.StateReader!, codeInfoRepository), _api.Config(), _api.TxValidator!, _api.LogManager, CreateTxPoolTxComparer(), - codeInfoRepository, - worldState, _api.TxGossipPolicy); protected IComparer CreateTxPoolTxComparer() => _api.TransactionComparerProvider!.GetDefaultComparer(); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs index 034835b207e..708dd5575c1 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/ParityRpcModuleTests.cs @@ -76,13 +76,11 @@ public void Initialize() _txPool = new TxPool.TxPool(_ethereumEcdsa, new BlobTxStorage(), - new ChainHeadInfoProvider(new FixedForkActivationChainHeadSpecProvider(specProvider), _blockTree, stateProvider), + new ChainHeadInfoProvider(new FixedForkActivationChainHeadSpecProvider(specProvider), _blockTree, stateProvider, new CodeInfoRepository()), new TxPoolConfig(), new TxValidator(specProvider.ChainId), LimboLogs.Instance, - new TransactionComparerProvider(specProvider, _blockTree).GetDefaultComparer(), - new CodeInfoRepository(specProvider.ChainId), - stateProvider); + new TransactionComparerProvider(specProvider, _blockTree).GetDefaultComparer()); _receiptStorage = new InMemoryReceiptStorage(); diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs index e31803491b3..e34f98389d9 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Trace/ParityStyleTracerTests.cs @@ -64,7 +64,7 @@ public void Setup() _stateReader = new StateReader(trieStore, codeDb, LimboLogs.Instance); BlockhashProvider blockhashProvider = new(_blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); VirtualMachine virtualMachine = new(blockhashProvider, specProvider, codeInfoRepository, LimboLogs.Instance); TransactionProcessor transactionProcessor = new(specProvider, stateProvider, virtualMachine, codeInfoRepository, LimboLogs.Instance); diff --git a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs index e768d0ca11e..c86dfbb240b 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/SyncThreadTests.cs @@ -269,17 +269,15 @@ private SyncTestContext CreateSyncManager(int index) ITransactionComparerProvider transactionComparerProvider = new TransactionComparerProvider(specProvider, tree); + CodeInfoRepository codeInfoRepository = new(); TxPool.TxPool txPool = new(ecdsa, new BlobTxStorage(), - new ChainHeadInfoProvider(specProvider, tree, stateReader), + new ChainHeadInfoProvider(specProvider, tree, stateReader, codeInfoRepository), new TxPoolConfig(), new TxValidator(specProvider.ChainId), logManager, - transactionComparerProvider.GetDefaultComparer(), - new CodeInfoRepository(specProvider.ChainId), - stateProvider); + transactionComparerProvider.GetDefaultComparer()); BlockhashProvider blockhashProvider = new(tree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); VirtualMachine virtualMachine = new(blockhashProvider, specProvider, codeInfoRepository, logManager); Always sealValidator = Always.Valid; diff --git a/src/Nethermind/Nethermind.TxPool.Test/NonceManagerTests.cs b/src/Nethermind/Nethermind.TxPool.Test/NonceManagerTests.cs index 574d7b7e0c0..a78fcb377b2 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/NonceManagerTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/NonceManagerTests.cs @@ -11,6 +11,7 @@ using Nethermind.Core.Specs; using Nethermind.Core.Test.Builders; using Nethermind.Db; +using Nethermind.Evm; using Nethermind.Int256; using Nethermind.Logging; using Nethermind.Specs; @@ -42,8 +43,8 @@ public void Setup() _blockTree.Head.Returns(block); _blockTree.FindBestSuggestedHeader().Returns(Build.A.BlockHeader.WithNumber(10000000).TestObject); - _headInfo = new ChainHeadInfoProvider(_specProvider, _blockTree, _stateProvider); - _nonceManager = new NonceManager(_headInfo.AccountStateProvider); + _headInfo = new ChainHeadInfoProvider(_specProvider, _blockTree, _stateProvider, new CodeInfoRepository()); + _nonceManager = new NonceManager(_headInfo.ReadOnlyStateProvider); } [Test] diff --git a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs index b61b9760331..eb3d88ddf0f 100644 --- a/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs +++ b/src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.cs @@ -1747,7 +1747,7 @@ private TxPool CreatePool( txStorage ??= new BlobTxStorage(); _headInfo = chainHeadInfoProvider; - _headInfo ??= new ChainHeadInfoProvider(specProvider, _blockTree, _stateProvider); + _headInfo ??= new ChainHeadInfoProvider(specProvider, _blockTree, _stateProvider, new CodeInfoRepository()); return new TxPool( _ethereumEcdsa, @@ -1757,8 +1757,6 @@ private TxPool CreatePool( new TxValidator(_specProvider.ChainId), _logManager, transactionComparerProvider.GetDefaultComparer(), - new CodeInfoRepository(specProvider.ChainId), - _stateProvider, ShouldGossip.Instance, incomingTxFilter, thereIsPriorityContract); diff --git a/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs b/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs index 75c0950b911..33b4e404fef 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs @@ -11,13 +11,13 @@ namespace Nethermind.TxPool.Filters /// /// Filters out transactions that sender has any code deployed. If is enabled. /// - internal sealed class DeployedCodeFilter(IWorldState worldState, ICodeInfoRepository codeInfoRepository, IChainHeadSpecProvider specProvider) : IIncomingTxFilter + internal sealed class DeployedCodeFilter(IReadOnlyStateProvider worldState, ICodeInfoRepository codeInfoRepository, IChainHeadSpecProvider specProvider) : IIncomingTxFilter { public AcceptTxResult Accept(Transaction tx, ref TxFilteringState state, TxHandlingOptions txHandlingOptions) { return specProvider.GetCurrentHeadSpec().IsEip3607Enabled && state.SenderAccount.HasCode - && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.TryGetDelegatedAddress(worldState, tx.SenderAddress!, out _)) + && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.TryGetDelegation(worldState, tx.SenderAddress!, out _)) ? AcceptTxResult.SenderIsContract : AcceptTxResult.Accepted; } diff --git a/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs b/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs index d17ff4fbf71..85b1abadff8 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; @@ -13,6 +13,6 @@ public bool IsValid(Address sender) { return specProvider.GetCurrentHeadSpec().IsEip3607Enabled && worldState.HasCode(sender) - && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.TryGetDelegatedAddress(worldState, sender, out _)); + && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.TryGetDelegation(worldState, sender, out _)); } } diff --git a/src/Nethermind/Nethermind.TxPool/IChainHeadInfoProvider.cs b/src/Nethermind/Nethermind.TxPool/IChainHeadInfoProvider.cs index 457322785a4..9ad2b03a828 100644 --- a/src/Nethermind/Nethermind.TxPool/IChainHeadInfoProvider.cs +++ b/src/Nethermind/Nethermind.TxPool/IChainHeadInfoProvider.cs @@ -4,7 +4,9 @@ using System; using Nethermind.Core; using Nethermind.Core.Specs; +using Nethermind.Evm; using Nethermind.Int256; +using Nethermind.State; namespace Nethermind.TxPool { @@ -12,15 +14,17 @@ public interface IChainHeadInfoProvider { IChainHeadSpecProvider SpecProvider { get; } - IAccountStateProvider AccountStateProvider { get; } + IReadOnlyStateProvider ReadOnlyStateProvider { get; } - public long HeadNumber { get; } + ICodeInfoRepository CodeInfoRepository { get; } - public long? BlockGasLimit { get; } + long HeadNumber { get; } - public UInt256 CurrentBaseFee { get; } + long? BlockGasLimit { get; } - public UInt256 CurrentPricePerBlobGas { get; } + UInt256 CurrentBaseFee { get; } + + UInt256 CurrentPricePerBlobGas { get; } event EventHandler HeadChanged; } diff --git a/src/Nethermind/Nethermind.TxPool/TxPool.cs b/src/Nethermind/Nethermind.TxPool/TxPool.cs index 696fce03e01..288f1455117 100644 --- a/src/Nethermind/Nethermind.TxPool/TxPool.cs +++ b/src/Nethermind/Nethermind.TxPool/TxPool.cs @@ -16,10 +16,8 @@ using Nethermind.Core.Specs; using Nethermind.Core.Timers; using Nethermind.Crypto; -using Nethermind.Evm; using Nethermind.Int256; using Nethermind.Logging; -using Nethermind.State; using Nethermind.TxPool.Collections; using Nethermind.TxPool.Filters; using static Nethermind.TxPool.Collections.TxDistinctSortedPool; @@ -93,8 +91,6 @@ public TxPool(IEthereumEcdsa ecdsa, ITxValidator validator, ILogManager? logManager, IComparer comparer, - ICodeInfoRepository codeInfoRepository, - IWorldState worldState, ITxGossipPolicy? transactionsGossipPolicy = null, IIncomingTxFilter? incomingTxFilter = null, bool thereIsPriorityContract = false) @@ -105,7 +101,7 @@ public TxPool(IEthereumEcdsa ecdsa, _headInfo = chainHeadInfoProvider ?? throw new ArgumentNullException(nameof(chainHeadInfoProvider)); _txPoolConfig = txPoolConfig; _blobReorgsSupportEnabled = txPoolConfig.BlobsSupport.SupportsReorgs(); - _accounts = _accountCache = new AccountCache(_headInfo.AccountStateProvider); + _accounts = _accountCache = new AccountCache(_headInfo.ReadOnlyStateProvider); _specProvider = _headInfo.SpecProvider; MemoryAllowance.MemPoolSize = txPoolConfig.Size; @@ -125,35 +121,36 @@ public TxPool(IEthereumEcdsa ecdsa, _headInfo.HeadChanged += OnHeadChange; - _preHashFilters = new IIncomingTxFilter[] - { + _preHashFilters = + [ new NotSupportedTxFilter(txPoolConfig, _logger), new GasLimitTxFilter(_headInfo, txPoolConfig, _logger), new PriorityFeeTooLowFilter(_logger), new FeeTooLowFilter(_headInfo, _transactions, _blobTransactions, thereIsPriorityContract, _logger), new MalformedTxFilter(_specProvider, validator, _logger) - }; + ]; - List postHashFilters = new() - { + List postHashFilters = + [ new NullHashTxFilter(), // needs to be first as it assigns the hash new AlreadyKnownTxFilter(_hashCache, _logger), new UnknownSenderFilter(ecdsa, _logger), - new TxTypeTxFilter(_transactions, _blobTransactions), // has to be after UnknownSenderFilter as it uses sender + new TxTypeTxFilter(_transactions, + _blobTransactions), // has to be after UnknownSenderFilter as it uses sender new BalanceZeroFilter(thereIsPriorityContract, _logger), new BalanceTooLowFilter(_transactions, _blobTransactions, _logger), new LowNonceFilter(_logger), // has to be after UnknownSenderFilter as it uses sender new FutureNonceFilter(txPoolConfig), new GapNonceFilter(_transactions, _blobTransactions, _logger), - new RecoverAuthorityFilter(ecdsa), - }; + new RecoverAuthorityFilter(ecdsa) + ]; if (incomingTxFilter is not null) { postHashFilters.Add(incomingTxFilter); } - postHashFilters.Add(new DeployedCodeFilter(worldState, codeInfoRepository, _specProvider)); + postHashFilters.Add(new DeployedCodeFilter(chainHeadInfoProvider.ReadOnlyStateProvider, chainHeadInfoProvider.CodeInfoRepository, _specProvider)); _postHashFilters = postHashFilters.ToArray(); From 2a9da1c4f85ca902a6ebba2157dff88837d78c61 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Thu, 26 Sep 2024 15:40:05 +0200 Subject: [PATCH 450/551] fixes --- .../Ethereum.Test.Base/BlockchainTestBase.cs | 2 +- .../Ethereum.Test.Base/GeneralTestBase.cs | 2 +- .../Core/CodeInfoRepositoryBenchmark.cs | 48 +++++++++---------- .../Nethermind.Evm.Benchmark/EvmBenchmarks.cs | 2 +- .../MultipleUnsignedOperations.cs | 2 +- .../StaticCallBenchmarks.cs | 2 +- .../EthModuleBenchmarks.cs | 2 +- .../Eth62ProtocolHandlerBenchmarks.cs | 6 +-- .../Filters/IsValidTxSender.cs | 2 +- 9 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs index d958f3d2ec0..ba62c18508e 100644 --- a/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs @@ -149,7 +149,7 @@ protected async Task RunTest(BlockchainTest test, Stopwatch? IHeaderValidator headerValidator = new HeaderValidator(blockTree, Sealer, specProvider, _logManager); IUnclesValidator unclesValidator = new UnclesValidator(blockTree, headerValidator, _logManager); IBlockValidator blockValidator = new BlockValidator(txValidator, headerValidator, unclesValidator, specProvider, _logManager); - CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); IVirtualMachine virtualMachine = new VirtualMachine( blockhashProvider, specProvider, diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index 6bf188363ec..efe378faefe 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -75,7 +75,7 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) TrieStore trieStore = new(stateDb, _logManager); WorldState stateProvider = new(trieStore, codeDb, _logManager); IBlockhashProvider blockhashProvider = new TestBlockhashProvider(); - CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); IVirtualMachine virtualMachine = new VirtualMachine( blockhashProvider, specProvider, diff --git a/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs index bdaf9ed2841..0a10a0aeae4 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs @@ -50,7 +50,7 @@ public void GlobalSetup() _accessedAddresses = new HashSet
(); _ethereumEcdsa = new(1); - sut = new(1); + sut = new(); var list = new List(); var rnd = new Random(); var addressBuffer = new byte[20]; @@ -83,27 +83,27 @@ static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chai } } - [Benchmark] - public void Build1Tuples() - { - sut.InsertFromAuthorizations(_stateProvider, Tuples1, _accessedAddresses, _spec); - } - - [Benchmark] - public void Build5Tuples() - { - sut.InsertFromAuthorizations(_stateProvider, Tuples5, _accessedAddresses, _spec); - } - - [Benchmark] - public void Build10Tuples() - { - sut.InsertFromAuthorizations(_stateProvider, Tuples10, _accessedAddresses, _spec); - } - - [Benchmark] - public void Build100Tuples() - { - sut.InsertFromAuthorizations(_stateProvider, Tuples100, _accessedAddresses, _spec); - } + // [Benchmark] + // public void Build1Tuples() + // { + // sut.InsertFromAuthorizations(_stateProvider, Tuples1, _accessedAddresses, _spec); + // } + // + // [Benchmark] + // public void Build5Tuples() + // { + // sut.InsertFromAuthorizations(_stateProvider, Tuples5, _accessedAddresses, _spec); + // } + // + // [Benchmark] + // public void Build10Tuples() + // { + // sut.InsertFromAuthorizations(_stateProvider, Tuples10, _accessedAddresses, _spec); + // } + // + // [Benchmark] + // public void Build100Tuples() + // { + // sut.InsertFromAuthorizations(_stateProvider, Tuples100, _accessedAddresses, _spec); + // } } diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs index 08367798dd2..be98ea39aab 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/EvmBenchmarks.cs @@ -44,7 +44,7 @@ public void GlobalSetup() _stateProvider = new WorldState(trieStore, codeDb, new OneLoggerLogManager(NullLogger.Instance)); _stateProvider.CreateAccount(Address.Zero, 1000.Ether()); _stateProvider.Commit(_spec); - CodeInfoRepository codeInfoRepository = new(BlockchainIds.Mainnet); + CodeInfoRepository codeInfoRepository = new(); _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, LimboLogs.Instance); _environment = new ExecutionEnvironment diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs index 491674460e7..3b3853d5fc5 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/MultipleUnsignedOperations.cs @@ -76,7 +76,7 @@ public void GlobalSetup() _stateProvider.Commit(_spec); Console.WriteLine(MuirGlacier.Instance); - CodeInfoRepository codeInfoRepository = new(BlockchainIds.Mainnet); + CodeInfoRepository codeInfoRepository = new(); _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, new OneLoggerLogManager(NullLogger.Instance)); _environment = new ExecutionEnvironment diff --git a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs index 4af14dd0d99..12c12742ed7 100644 --- a/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs +++ b/src/Nethermind/Nethermind.Evm.Benchmark/StaticCallBenchmarks.cs @@ -87,7 +87,7 @@ public void GlobalSetup() _stateProvider.Commit(_spec); Console.WriteLine(MuirGlacier.Instance); - CodeInfoRepository codeInfoRepository = new(BlockchainIds.Mainnet); + CodeInfoRepository codeInfoRepository = new(); _virtualMachine = new VirtualMachine(_blockhashProvider, MainnetSpecProvider.Instance, codeInfoRepository, new OneLoggerLogManager(NullLogger.Instance)); _environment = new ExecutionEnvironment diff --git a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs index 1a2cbeceebb..fc14ad0f119 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Benchmark/EthModuleBenchmarks.cs @@ -82,7 +82,7 @@ public void GlobalSetup() new SyncConfig(), LimboLogs.Instance); _blockhashProvider = new BlockhashProvider(blockTree, specProvider, stateProvider, LimboLogs.Instance); - CodeInfoRepository codeInfoRepository = new(specProvider.ChainId); + CodeInfoRepository codeInfoRepository = new(); _virtualMachine = new VirtualMachine(_blockhashProvider, specProvider, codeInfoRepository, LimboLogs.Instance); Block genesisBlock = Build.A.Block.Genesis.TestObject; diff --git a/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs b/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs index a63ad0ef40e..538ae8f1ff6 100644 --- a/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs +++ b/src/Nethermind/Nethermind.Network.Benchmark/Eth62ProtocolHandlerBenchmarks.cs @@ -59,13 +59,11 @@ public void SetUp() TxPool.TxPool txPool = new TxPool.TxPool( ecdsa, new BlobTxStorage(), - new ChainHeadInfoProvider(new FixedForkActivationChainHeadSpecProvider(MainnetSpecProvider.Instance), tree, stateProvider), + new ChainHeadInfoProvider(new FixedForkActivationChainHeadSpecProvider(MainnetSpecProvider.Instance), tree, stateProvider, new CodeInfoRepository()), new TxPoolConfig(), new TxValidator(TestBlockchainIds.ChainId), LimboLogs.Instance, - new TransactionComparerProvider(specProvider, tree).GetDefaultComparer(), - new CodeInfoRepository(specProvider.ChainId), - stateProvider); + new TransactionComparerProvider(specProvider, tree).GetDefaultComparer()); ISyncServer syncSrv = Substitute.For(); BlockHeader head = Build.A.BlockHeader.WithNumber(1).TestObject; syncSrv.Head.Returns(head); diff --git a/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs b/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs index 85b1abadff8..f9077d6c966 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/IsValidTxSender.cs @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; From 254ff42f0194a4ce5befb98b510091fb59cf167f Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 27 Sep 2024 12:59:42 +0200 Subject: [PATCH 451/551] changes from review --- .../Ethereum.Test.Base/JsonToEthereumTest.cs | 27 +++---------------- .../Ethereum.Test.Base/TransactionJson.cs | 4 +-- .../FullPruning/FullPruner.cs | 1 - .../Processing/RecoverSignature.cs | 4 +-- .../Crypto/EthereumEcdsaTests.cs | 2 +- .../Nethermind.Crypto/EthereumEcdsa.cs | 4 +-- .../CodeInfoRepositoryTests.cs | 2 +- .../TransactionProcessorEip7702Tests.cs | 2 +- .../Eip7702/AuthorizationTupleDecoder.cs | 6 +++-- 9 files changed, 17 insertions(+), 35 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index 86d2f1a34ca..3af12961248 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -127,7 +127,7 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t { Transaction transaction = new(); - transaction.Type = string.IsNullOrEmpty(transactionJson.Type) ? TxType.Legacy : (TxType)ParseFromHex(transactionJson.Type); + transaction.Type = transactionJson.Type; transaction.Value = transactionJson.Value[postStateJson.Indexes.Value]; transaction.GasLimit = transactionJson.GasLimit[postStateJson.Indexes.Gas]; transaction.GasPrice = transactionJson.GasPrice ?? transactionJson.MaxPriorityFeePerGas ?? 0; @@ -163,10 +163,10 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t transaction.AuthorizationList = transactionJson.AuthorizationList .Select(i => new AuthorizationTuple( - ParseFromHex(i.ChainId), + System.Convert.ToUInt64(i.ChainId, 16), new Address(i.Address), - ParseFromHex(i.Nonce), - ParseFromHex(i.V), + System.Convert.ToUInt64(i.Nonce, 16), + System.Convert.ToUInt64(i.V, 16), Bytes.FromHexString(i.R), Bytes.FromHexString(i.S))).ToArray(); if (transaction.AuthorizationList.Any()) @@ -176,24 +176,6 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t } return transaction; - - static ulong ParseFromHex(string i) - { - Span bytes = stackalloc byte[8]; - var bytes1 = Bytes.FromHexString(i).AsSpan(); - if (bytes1.Length <= 8) - { - bytes1.Reverse(); - bytes1.CopyTo(bytes); - } - else - { - throw new InvalidDataException("Transaction json contains an invalid value for uint64."); - } - - var result = BitConverter.ToUInt64(bytes); - return result; - } } private static void ProcessAccessList(AccessListItemJson[]? accessList, AccessList.Builder builder) @@ -244,7 +226,6 @@ public static IEnumerable Convert(string name, GeneralStateTes } List blockchainTests = new(); - Console.WriteLine($"Loaded {testJson}"); foreach (KeyValuePair postStateBySpec in testJson.Post) { int iterationNumber = 0; diff --git a/src/Nethermind/Ethereum.Test.Base/TransactionJson.cs b/src/Nethermind/Ethereum.Test.Base/TransactionJson.cs index 63cc1bcd655..83c4884f835 100644 --- a/src/Nethermind/Ethereum.Test.Base/TransactionJson.cs +++ b/src/Nethermind/Ethereum.Test.Base/TransactionJson.cs @@ -8,8 +8,8 @@ namespace Ethereum.Test.Base { public class TransactionJson { - public string Type { get; set; } - public string Sender { get; set; } + public TxType Type { get; set; } + public Address Sender { get; set; } public byte[][]? Data { get; set; } public long[]? GasLimit { get; set; } public UInt256? GasPrice { get; set; } diff --git a/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs b/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs index e951e03226a..b8c6ef1331f 100644 --- a/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs +++ b/src/Nethermind/Nethermind.Blockchain/FullPruning/FullPruner.cs @@ -138,7 +138,6 @@ await WaitForMainChainChange((e) => } catch (Exception e) { - Console.Out.WriteLine($"Its {e}"); if (_logger.IsError) _logger.Error("full pruning failed. ", e); } finally diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 22d7e5d0894..fc9d27261b0 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -81,14 +81,14 @@ public void RecoverData(Block block) if (tx.HasAuthorizationList) { - Parallel.For(0, tx.AuthorizationList.Length, (i) => + for(int i = 0; i < tx.AuthorizationList.Length; i++) { AuthorizationTuple tuple = tx.AuthorizationList[i]; if (tuple.Authority is null) { tuple.Authority = poolTx.AuthorizationList[i].Authority; } - }); + } } if (_logger.IsTrace) _logger.Trace($"Recovered {tx.SenderAddress} sender for {tx.Hash} (tx pool cached value: {sender})"); diff --git a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs index 28c28d275e8..31b0d960b2d 100644 --- a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs @@ -98,7 +98,7 @@ public void RecoverAddress_AuthorizationTupleOfDifferentSize_RecoversAddressCorr private static AuthorizationTuple CreateAuthorizationTuple(ulong chainId, Address codeAddress, ulong nonce) { AuthorizationTupleDecoder decoder = new(); - RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); + using NettyRlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; rlp.Data.AsSpan().CopyTo(code.Slice(1)); diff --git a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs index 5a7622d309e..e5ab8d50b36 100644 --- a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs @@ -55,7 +55,7 @@ public void Sign(PrivateKey privateKey, Transaction tx, bool isEip155Enabled) public AuthorizationTuple Sign(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) { - RlpStream rlp = _tupleDecoder.EncodeWithoutSignature(chainId, codeAddress, nonce); + using NettyRlpStream rlp = _tupleDecoder.EncodeWithoutSignature(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; rlp.Data.AsSpan().CopyTo(code.Slice(1)); @@ -118,7 +118,7 @@ public bool Verify(Address sender, Transaction tx) { Span buffer = stackalloc byte[128]; buffer[0] = Eip7702Constants.Magic; - RlpStream stream = _tupleDecoder.EncodeWithoutSignature(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); + using NettyRlpStream stream = _tupleDecoder.EncodeWithoutSignature(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); stream.Data.AsSpan().CopyTo(buffer.Slice(1)); return RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(buffer.Slice(0, stream.Data.Length + 1))); } diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index bdd7f04602c..3b1c7440053 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -405,7 +405,7 @@ public void GetCachedCodeInfo_CodeIsNotDelegation_ReturnsCodeOfAddress(byte[] co private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) { AuthorizationTupleDecoder decoder = new(); - RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); + using NettyRlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; rlp.Data.AsSpan().CopyTo(code.Slice(1)); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 6642937d509..49758597266 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -506,7 +506,7 @@ private void DeployCode(Address codeSource, byte[] code) private AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) { AuthorizationTupleDecoder decoder = new(); - RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); + using NettyRlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; rlp.Data.AsSpan().CopyTo(code.Slice(1)); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 5190ccba14c..b3e7dfcc80d 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using DotNetty.Buffers; using Nethermind.Core; using Nethermind.Int256; using Nethermind.Serialization.Rlp.Eip2930; @@ -81,11 +82,12 @@ public void Encode(RlpStream stream, AuthorizationTuple item, RlpBehaviors rlpBe stream.Encode(new UInt256(item.AuthoritySignature.S, true)); } - public RlpStream EncodeWithoutSignature(ulong chainId, Address codeAddress, ulong nonce) + public NettyRlpStream EncodeWithoutSignature(ulong chainId, Address codeAddress, ulong nonce) { int contentLength = GetContentLengthWithoutSig(chainId, codeAddress, nonce); var totalLength = Rlp.LengthOfSequence(contentLength); - RlpStream stream = new(totalLength); + IByteBuffer byteBuffer = PooledByteBufferAllocator.Default.Buffer(totalLength); + NettyRlpStream stream = new(byteBuffer); EncodeWithoutSignature(stream, chainId, codeAddress, nonce); return stream; } From 76129adbf92057212648acc3b40226fdcf56486f Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 27 Sep 2024 15:25:00 +0200 Subject: [PATCH 452/551] decoder netty fix --- .../Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs | 2 +- src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs | 6 +++--- .../Nethermind.Evm.Test/CodeInfoRepositoryTests.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs index 31b0d960b2d..5c479c8445d 100644 --- a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs @@ -101,7 +101,7 @@ private static AuthorizationTuple CreateAuthorizationTuple(ulong chainId, Addres using NettyRlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; - rlp.Data.AsSpan().CopyTo(code.Slice(1)); + rlp.AsSpan().CopyTo(code.Slice(1)); EthereumEcdsa ecdsa = new(1); PrivateKey signer = Build.A.PrivateKey.TestObject; Signature sig = ecdsa.Sign(signer, Keccak.Compute(code)); diff --git a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs index e5ab8d50b36..b9322e27394 100644 --- a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs @@ -58,7 +58,7 @@ public AuthorizationTuple Sign(PrivateKey signer, ulong chainId, Address codeAdd using NettyRlpStream rlp = _tupleDecoder.EncodeWithoutSignature(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; - rlp.Data.AsSpan().CopyTo(code.Slice(1)); + rlp.AsSpan().CopyTo(code.Slice(1)); Signature sig = Sign(signer, Keccak.Compute(code)); return new AuthorizationTuple(chainId, codeAddress, nonce, sig); } @@ -119,8 +119,8 @@ public bool Verify(Address sender, Transaction tx) Span buffer = stackalloc byte[128]; buffer[0] = Eip7702Constants.Magic; using NettyRlpStream stream = _tupleDecoder.EncodeWithoutSignature(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); - stream.Data.AsSpan().CopyTo(buffer.Slice(1)); - return RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(buffer.Slice(0, stream.Data.Length + 1))); + stream.AsSpan().CopyTo(buffer.Slice(1)); + return RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(buffer.Slice(0, stream.Length + 1))); } public static ulong CalculateV(ulong chainId, bool addParity = true) => chainId * 2 + 35ul + (addParity ? 1u : 0u); diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 3b1c7440053..82e30798ca1 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -408,7 +408,7 @@ private static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ul using NettyRlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); Span code = stackalloc byte[rlp.Length + 1]; code[0] = Eip7702Constants.Magic; - rlp.Data.AsSpan().CopyTo(code.Slice(1)); + rlp.AsSpan().CopyTo(code.Slice(1)); EthereumEcdsa ecdsa = new(1); Signature sig = ecdsa.Sign(signer, Keccak.Compute(code)); From 70a3390eaa9c5967c7eba6e4b7f898b5827ca263 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 27 Sep 2024 15:39:10 +0200 Subject: [PATCH 453/551] also check auth sig in recovery --- .../Processing/RecoverSignature.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index fc9d27261b0..2eacb5eb4b9 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; +using System.Linq; using System.Runtime.CompilerServices; using System.Threading.Tasks; using Nethermind.Core; @@ -61,7 +62,7 @@ public void RecoverData(Block block) // Don't access txPool in Parallel loop as increases contention foreach (Transaction tx in txs) { - if (!ShouldRecoverSender(tx)) + if (!ShouldRecoverSignatures(tx)) continue; Transaction? poolTx = null; @@ -110,7 +111,7 @@ public void RecoverData(Block block) Parallel.For(0, txs.Length, i => { Transaction tx = txs[i]; - if (!ShouldRecoverSender(tx)) return; + if (!ShouldRecoverSignatures(tx)) return; tx.SenderAddress = _ecdsa.RecoverAddress(tx, useSignatureChainId); RecoverAuthorities(tx); @@ -121,7 +122,7 @@ public void RecoverData(Block block) { foreach (Transaction tx in txs) { - if (!ShouldRecoverSender(tx)) continue; + if (!ShouldRecoverSignatures(tx)) continue; tx.SenderAddress = _ecdsa.RecoverAddress(tx, useSignatureChainId); RecoverAuthorities(tx); @@ -155,7 +156,7 @@ void RecoverAuthorities(Transaction tx) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static bool ShouldRecoverSender(Transaction tx) - => tx.IsSigned && tx.SenderAddress is null; + private static bool ShouldRecoverSignatures(Transaction tx) + => tx.IsSigned && tx.SenderAddress is null || (tx.HasAuthorizationList && tx.AuthorizationList.Any(a=>a.Authority is null)); } } From ab855fb5f81e427cadec916ab1c97204e64bea3f Mon Sep 17 00:00:00 2001 From: ak88 Date: Sat, 28 Sep 2024 12:49:18 +0200 Subject: [PATCH 454/551] move sign func to extension --- .../Processing/RecoverSignature.cs | 8 +-- .../Nethermind.Crypto/EthereumEcdsa.cs | 56 ++++++++++--------- .../Nethermind.Crypto/IEthereumEcdsa.cs | 3 +- .../Nethermind.Crypto/NullEthereumEcdsa.cs | 7 +-- .../OptimismEthereumEcdsa.cs | 2 + 5 files changed, 39 insertions(+), 37 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 2eacb5eb4b9..a1c77f5d9b2 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -82,7 +82,7 @@ public void RecoverData(Block block) if (tx.HasAuthorizationList) { - for(int i = 0; i < tx.AuthorizationList.Length; i++) + for (int i = 0; i < tx.AuthorizationList.Length; i++) { AuthorizationTuple tuple = tx.AuthorizationList[i]; if (tuple.Authority is null) @@ -142,14 +142,14 @@ void RecoverAuthorities(Transaction tx) { Parallel.ForEach(tx.AuthorizationList, (tuple) => { - tuple.Authority = _ecdsa.RecoverAddress(tuple); + tuple.Authority ??= _ecdsa.RecoverAddress(tuple); }); } else { foreach (AuthorizationTuple tuple in tx.AuthorizationList.AsSpan()) { - tuple.Authority = _ecdsa.RecoverAddress(tuple); + tuple.Authority ??= _ecdsa.RecoverAddress(tuple); } } } @@ -157,6 +157,6 @@ void RecoverAuthorities(Transaction tx) [MethodImpl(MethodImplOptions.AggressiveInlining)] private static bool ShouldRecoverSignatures(Transaction tx) - => tx.IsSigned && tx.SenderAddress is null || (tx.HasAuthorizationList && tx.AuthorizationList.Any(a=>a.Authority is null)); + => tx.IsSigned && tx.SenderAddress is null || (tx.HasAuthorizationList && tx.AuthorizationList.Any(a => a.Authority is null)); } } diff --git a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs index b9322e27394..164057d4334 100644 --- a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs @@ -37,32 +37,6 @@ public EthereumEcdsa(ulong chainId) _chainIdValue = chainId; } - public void Sign(PrivateKey privateKey, Transaction tx, bool isEip155Enabled) - { - if (tx.Type != TxType.Legacy) - { - tx.ChainId = _chainIdValue; - } - - Hash256 hash = Keccak.Compute(Rlp.Encode(tx, true, isEip155Enabled, _chainIdValue).Bytes); - tx.Signature = Sign(privateKey, hash); - - if (tx.Type == TxType.Legacy && isEip155Enabled) - { - tx.Signature.V = tx.Signature.V + 8 + 2 * _chainIdValue; - } - } - - public AuthorizationTuple Sign(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) - { - using NettyRlpStream rlp = _tupleDecoder.EncodeWithoutSignature(chainId, codeAddress, nonce); - Span code = stackalloc byte[rlp.Length + 1]; - code[0] = Eip7702Constants.Magic; - rlp.AsSpan().CopyTo(code.Slice(1)); - Signature sig = Sign(signer, Keccak.Compute(code)); - return new AuthorizationTuple(chainId, codeAddress, nonce, sig); - } - /// /// /// @@ -143,4 +117,34 @@ public bool Verify(Address sender, Transaction tx) return !success ? null : PublicKey.ComputeAddress(publicKey.Slice(1, 64)); } } + + public static class EthereumEcdsaExtension + { + + public static AuthorizationTuple Sign(this IEthereumEcdsa ecdsa, PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) + { + using NettyRlpStream rlp = AuthorizationTupleDecoder.Instance.EncodeWithoutSignature(chainId, codeAddress, nonce); + Span preImage = stackalloc byte[rlp.Length + 1]; + preImage[0] = Eip7702Constants.Magic; + rlp.AsSpan().CopyTo(preImage.Slice(1)); + Signature sig = ecdsa.Sign(signer, Keccak.Compute(preImage)); + return new AuthorizationTuple(chainId, codeAddress, nonce, sig); + } + + public static void Sign(this IEthereumEcdsa ecdsa, PrivateKey privateKey, Transaction tx, bool isEip155Enabled = true) + { + if (tx.Type != TxType.Legacy) + { + tx.ChainId = ecdsa.ChainId; + } + + Hash256 hash = Keccak.Compute(Rlp.Encode(tx, true, isEip155Enabled, ecdsa.ChainId).Bytes); + tx.Signature = ecdsa.Sign(privateKey, hash); + + if (tx.Type == TxType.Legacy && isEip155Enabled) + { + tx.Signature.V = tx.Signature.V + 8 + 2 * ecdsa.ChainId; + } + } + } } diff --git a/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs index abe5e3c89e3..b421c8d336b 100644 --- a/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs @@ -10,12 +10,11 @@ namespace Nethermind.Crypto { public interface IEthereumEcdsa : IEcdsa { - void Sign(PrivateKey privateKey, Transaction tx, bool isEip155Enabled = true); + ulong ChainId { get; } Address? RecoverAddress(Transaction tx, bool useSignatureChainId = false); Address? RecoverAddress(AuthorizationTuple tuple); Address? RecoverAddress(Signature signature, Hash256 message); Address? RecoverAddress(Span signatureBytes, Hash256 message); bool Verify(Address sender, Transaction tx); - AuthorizationTuple Sign(PrivateKey authority, ulong chainId, Address codeAddress, ulong nonce); } } diff --git a/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs index 4b8f931244c..5688559906a 100644 --- a/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs @@ -12,6 +12,8 @@ public class NullEthereumEcdsa : IEthereumEcdsa { public static NullEthereumEcdsa Instance { get; } = new(); + public ulong ChainId => 0; + private NullEthereumEcdsa() { } @@ -60,10 +62,5 @@ public bool Verify(Address sender, Transaction tx) { throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); } - - public AuthorizationTuple Sign(PrivateKey authority, ulong chainId, Address codeAddress, ulong nonce) - { - throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); - } } } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs b/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs index ea5c652a91c..61560c6dc8a 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs @@ -12,6 +12,8 @@ public class OptimismEthereumEcdsa : Ecdsa, IEthereumEcdsa { private readonly IEthereumEcdsa _ethereumEcdsa; + public ulong ChainId => _ethereumEcdsa.ChainId; + public OptimismEthereumEcdsa(IEthereumEcdsa ethereumEcdsa) { _ethereumEcdsa = ethereumEcdsa; From e28f66672fa9c1e5a80c37708f1185c043bc5761 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 30 Sep 2024 14:34:29 +0200 Subject: [PATCH 455/551] changes from review --- .../Validators/TxValidatorTests.cs | 2 +- .../Processing/RecoverSignature.cs | 2 +- src/Nethermind/Nethermind.Core/Transaction.cs | 5 +- .../Nethermind.Crypto/EthereumEcdsa.cs | 92 ---------------- .../EthereumEcdsaExtensions.cs | 103 ++++++++++++++++++ .../Nethermind.Crypto/IEthereumEcdsa.cs | 3 - .../Nethermind.Crypto/NullEthereumEcdsa.cs | 10 -- .../Filters/DeployedCodeFilter.cs | 6 +- 8 files changed, 112 insertions(+), 111 deletions(-) create mode 100644 src/Nethermind/Nethermind.Crypto/EthereumEcdsaExtensions.cs diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 486000e7bb9..361a3039607 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -60,7 +60,7 @@ public void Zero_r_is_not_valid() txValidator.IsWellFormed(tx, MuirGlacier.Instance).AsBool().Should().BeFalse(); } - private static byte CalculateV() => (byte)EthereumEcdsa.CalculateV(TestBlockchainIds.ChainId); + private static byte CalculateV() => (byte)EthereumEcdsaExtensions.CalculateV(TestBlockchainIds.ChainId); [Test, Timeout(Timeout.MaxTestTime)] public void Zero_s_is_not_valid() diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index a1c77f5d9b2..66f7998dae5 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -157,6 +157,6 @@ void RecoverAuthorities(Transaction tx) [MethodImpl(MethodImplOptions.AggressiveInlining)] private static bool ShouldRecoverSignatures(Transaction tx) - => tx.IsSigned && tx.SenderAddress is null || (tx.HasAuthorizationList && tx.AuthorizationList.Any(a => a.Authority is null)); + => tx.IsSigned && (tx.SenderAddress is null || (tx.HasAuthorizationList && tx.AuthorizationList.Any(a => a.Authority is null))); } } diff --git a/src/Nethermind/Nethermind.Core/Transaction.cs b/src/Nethermind/Nethermind.Core/Transaction.cs index 636383d152a..987af864482 100644 --- a/src/Nethermind/Nethermind.Core/Transaction.cs +++ b/src/Nethermind/Nethermind.Core/Transaction.cs @@ -321,7 +321,10 @@ public class GeneratedTransaction : Transaction { } /// /// System transaction that is to be executed by the node without including in the block. /// - public class SystemTransaction : Transaction { } + public class SystemTransaction : Transaction + { + private new const long GasLimit = 30_000_000L; + } /// /// Used inside Transaction::GetSize to calculate encoded transaction size diff --git a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs index 164057d4334..deecd2c9d11 100644 --- a/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs @@ -37,68 +37,6 @@ public EthereumEcdsa(ulong chainId) _chainIdValue = chainId; } - /// - /// - /// - /// - /// - /// - public bool Verify(Address sender, Transaction tx) - { - Address? recovered = RecoverAddress(tx); - return recovered?.Equals(sender) ?? false; - } - - /// - /// - /// - /// - /// - /// - public Address? RecoverAddress(Transaction tx, bool useSignatureChainId = false) - { - if (tx.Signature is null) - { - throw new InvalidDataException("Cannot recover sender address from a transaction without a signature."); - } - - useSignatureChainId &= tx.Signature.ChainId.HasValue; - - // feels like it is the same check twice - bool applyEip155 = useSignatureChainId - || tx.Signature.V == CalculateV(_chainIdValue, false) - || tx.Signature.V == CalculateV(_chainIdValue, true); - - ulong chainId; - switch (tx.Type) - { - case TxType.Legacy when useSignatureChainId: - chainId = tx.Signature.ChainId.Value; - break; - case TxType.Legacy: - chainId = _chainIdValue; - break; - default: - chainId = tx.ChainId!.Value; - break; - } - Hash256 hash = Keccak.Compute(Rlp.Encode(tx, true, applyEip155, chainId).Bytes); - - return RecoverAddress(tx.Signature, hash); - } - - [SkipLocalsInit] - public Address? RecoverAddress(AuthorizationTuple tuple) - { - Span buffer = stackalloc byte[128]; - buffer[0] = Eip7702Constants.Magic; - using NettyRlpStream stream = _tupleDecoder.EncodeWithoutSignature(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); - stream.AsSpan().CopyTo(buffer.Slice(1)); - return RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(buffer.Slice(0, stream.Length + 1))); - } - - public static ulong CalculateV(ulong chainId, bool addParity = true) => chainId * 2 + 35ul + (addParity ? 1u : 0u); - public Address? RecoverAddress(Signature signature, Hash256 message) { return RecoverAddress(signature.BytesWithRecovery, message); @@ -117,34 +55,4 @@ public bool Verify(Address sender, Transaction tx) return !success ? null : PublicKey.ComputeAddress(publicKey.Slice(1, 64)); } } - - public static class EthereumEcdsaExtension - { - - public static AuthorizationTuple Sign(this IEthereumEcdsa ecdsa, PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) - { - using NettyRlpStream rlp = AuthorizationTupleDecoder.Instance.EncodeWithoutSignature(chainId, codeAddress, nonce); - Span preImage = stackalloc byte[rlp.Length + 1]; - preImage[0] = Eip7702Constants.Magic; - rlp.AsSpan().CopyTo(preImage.Slice(1)); - Signature sig = ecdsa.Sign(signer, Keccak.Compute(preImage)); - return new AuthorizationTuple(chainId, codeAddress, nonce, sig); - } - - public static void Sign(this IEthereumEcdsa ecdsa, PrivateKey privateKey, Transaction tx, bool isEip155Enabled = true) - { - if (tx.Type != TxType.Legacy) - { - tx.ChainId = ecdsa.ChainId; - } - - Hash256 hash = Keccak.Compute(Rlp.Encode(tx, true, isEip155Enabled, ecdsa.ChainId).Bytes); - tx.Signature = ecdsa.Sign(privateKey, hash); - - if (tx.Type == TxType.Legacy && isEip155Enabled) - { - tx.Signature.V = tx.Signature.V + 8 + 2 * ecdsa.ChainId; - } - } - } } diff --git a/src/Nethermind/Nethermind.Crypto/EthereumEcdsaExtensions.cs b/src/Nethermind/Nethermind.Crypto/EthereumEcdsaExtensions.cs new file mode 100644 index 00000000000..3b7d939c936 --- /dev/null +++ b/src/Nethermind/Nethermind.Crypto/EthereumEcdsaExtensions.cs @@ -0,0 +1,103 @@ +// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.IO; +using System.Runtime.CompilerServices; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Serialization.Rlp; + +namespace Nethermind.Crypto +{ + public static class EthereumEcdsaExtensions + { + public static AuthorizationTuple Sign(this IEthereumEcdsa ecdsa, PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) + { + using NettyRlpStream rlp = AuthorizationTupleDecoder.Instance.EncodeWithoutSignature(chainId, codeAddress, nonce); + Span preImage = stackalloc byte[rlp.Length + 1]; + preImage[0] = Eip7702Constants.Magic; + rlp.AsSpan().CopyTo(preImage.Slice(1)); + Signature sig = ecdsa.Sign(signer, Keccak.Compute(preImage)); + return new AuthorizationTuple(chainId, codeAddress, nonce, sig); + } + + public static void Sign(this IEthereumEcdsa ecdsa, PrivateKey privateKey, Transaction tx, bool isEip155Enabled = true) + { + if (tx.Type != TxType.Legacy) + { + tx.ChainId = ecdsa.ChainId; + } + + Hash256 hash = Keccak.Compute(Rlp.Encode(tx, true, isEip155Enabled, ecdsa.ChainId).Bytes); + tx.Signature = ecdsa.Sign(privateKey, hash); + + if (tx.Type == TxType.Legacy && isEip155Enabled) + { + tx.Signature.V = tx.Signature.V + 8 + 2 * ecdsa.ChainId; + } + } + + /// + /// + /// + /// + /// + /// + public static bool Verify(this IEthereumEcdsa ecdsa, Address sender, Transaction tx) + { + Address? recovered = ecdsa.RecoverAddress(tx); + return recovered?.Equals(sender) ?? false; + } + + /// + /// + /// + /// + /// + /// + public static Address? RecoverAddress(this IEthereumEcdsa ecdsa, Transaction tx, bool useSignatureChainId = false) + { + if (tx.Signature is null) + { + throw new InvalidDataException("Cannot recover sender address from a transaction without a signature."); + } + + useSignatureChainId &= tx.Signature.ChainId.HasValue; + + // feels like it is the same check twice + bool applyEip155 = useSignatureChainId + || tx.Signature.V == CalculateV(ecdsa.ChainId, false) + || tx.Signature.V == CalculateV(ecdsa.ChainId, true); + + ulong chainId; + switch (tx.Type) + { + case TxType.Legacy when useSignatureChainId: + chainId = tx.Signature.ChainId.Value; + break; + case TxType.Legacy: + chainId = ecdsa.ChainId; + break; + default: + chainId = tx.ChainId!.Value; + break; + } + Hash256 hash = Keccak.Compute(Rlp.Encode(tx, true, applyEip155, chainId).Bytes); + + return ecdsa.RecoverAddress(tx.Signature, hash); + } + + public static ulong CalculateV(ulong chainId, bool addParity = true) => chainId * 2 + 35ul + (addParity ? 1u : 0u); + + [SkipLocalsInit] + public static Address? RecoverAddress(this IEthereumEcdsa ecdsa, AuthorizationTuple tuple) + { + Span buffer = stackalloc byte[128]; + buffer[0] = Eip7702Constants.Magic; + using NettyRlpStream stream = AuthorizationTupleDecoder.Instance.EncodeWithoutSignature(tuple.ChainId, tuple.CodeAddress, tuple.Nonce); + stream.AsSpan().CopyTo(buffer.Slice(1)); + return ecdsa.RecoverAddress(tuple.AuthoritySignature, Keccak.Compute(buffer.Slice(0, stream.Length + 1))); + } + } +} diff --git a/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs index b421c8d336b..67f17f74d5b 100644 --- a/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/IEthereumEcdsa.cs @@ -11,10 +11,7 @@ namespace Nethermind.Crypto public interface IEthereumEcdsa : IEcdsa { ulong ChainId { get; } - Address? RecoverAddress(Transaction tx, bool useSignatureChainId = false); - Address? RecoverAddress(AuthorizationTuple tuple); Address? RecoverAddress(Signature signature, Hash256 message); Address? RecoverAddress(Span signatureBytes, Hash256 message); - bool Verify(Address sender, Transaction tx); } } diff --git a/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs b/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs index 5688559906a..78ff585916f 100644 --- a/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Crypto/NullEthereumEcdsa.cs @@ -33,11 +33,6 @@ public CompressedPublicKey RecoverCompressedPublicKey(Signature signature, Hash2 throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); } - public void Sign(PrivateKey privateKey, Transaction tx, bool _) - { - throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); - } - public Address RecoverAddress(Transaction tx, bool useSignatureChainId = false) { throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); @@ -57,10 +52,5 @@ public bool Verify(Address sender, Transaction tx) { throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); } - - public Address? RecoverAddress(AuthorizationTuple tuple) - { - throw new InvalidOperationException($"{nameof(NullEthereumEcdsa)} does not expect any calls"); - } } } diff --git a/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs b/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs index 33b4e404fef..1eb06f8dcc8 100644 --- a/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs +++ b/src/Nethermind/Nethermind.TxPool/Filters/DeployedCodeFilter.cs @@ -15,9 +15,9 @@ internal sealed class DeployedCodeFilter(IReadOnlyStateProvider worldState, ICod { public AcceptTxResult Accept(Transaction tx, ref TxFilteringState state, TxHandlingOptions txHandlingOptions) { - return specProvider.GetCurrentHeadSpec().IsEip3607Enabled - && state.SenderAccount.HasCode - && (!specProvider.GetCurrentHeadSpec().IsEip7702Enabled || !codeInfoRepository.TryGetDelegation(worldState, tx.SenderAddress!, out _)) + return worldState.IsInvalidContractSender(specProvider.GetCurrentHeadSpec(), + tx.SenderAddress!, + () => codeInfoRepository.TryGetDelegation(worldState, tx.SenderAddress!, out _)) ? AcceptTxResult.SenderIsContract : AcceptTxResult.Accepted; } From 2963ac257988d6114adb8230fd177a654636a5f1 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 2 Oct 2024 00:29:39 +0200 Subject: [PATCH 456/551] fix tests --- .../Crypto/EthereumEcdsaTests.cs | 34 ++++++------------ .../TransactionProcessorEip7702Tests.cs | 36 ++++++------------- 2 files changed, 22 insertions(+), 48 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs index 5c479c8445d..64d98d18dea 100644 --- a/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs @@ -79,34 +79,22 @@ public void Sign_generic_network() Assert.That(address, Is.EqualTo(key.Address)); } - public static IEnumerable AuthorityTupleTestCaseSources() + [Test] + [Repeat(3)] + public void RecoverAddress_AuthorizationTupleOfDifferentSize_RecoversAddressCorrectly() { - yield return CreateAuthorizationTuple(ulong.MaxValue, Build.A.Address.TestObjectInternal, ulong.MaxValue); - yield return CreateAuthorizationTuple(1, Address.Zero, 0); - } + PrivateKey signer = Build.A.PrivateKey.TestObject; + AuthorizationTuple authorizationTuple = new EthereumEcdsa(BlockchainIds.GenericNonRealNetwork) + .Sign(signer, + TestContext.CurrentContext.Random.NextULong(), + Build.A.Address.TestObjectInternal, + TestContext.CurrentContext.Random.NextULong()); - [TestCaseSource(nameof(AuthorityTupleTestCaseSources))] - public void RecoverAddress_AuthorizationTupleOfDifferentSize_RecoversAddressCorrectly(AuthorizationTuple authorization) - { EthereumEcdsa ecdsa = new(BlockchainIds.GenericNonRealNetwork); - Address? authority = ecdsa.RecoverAddress(authorization); - - Assert.That(authority, Is.EqualTo(authorization.Authority)); - } - - private static AuthorizationTuple CreateAuthorizationTuple(ulong chainId, Address codeAddress, ulong nonce) - { - AuthorizationTupleDecoder decoder = new(); - using NettyRlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); - Span code = stackalloc byte[rlp.Length + 1]; - code[0] = Eip7702Constants.Magic; - rlp.AsSpan().CopyTo(code.Slice(1)); - EthereumEcdsa ecdsa = new(1); - PrivateKey signer = Build.A.PrivateKey.TestObject; - Signature sig = ecdsa.Sign(signer, Keccak.Compute(code)); + Address? authority = ecdsa.RecoverAddress(authorizationTuple); - return new AuthorizationTuple(chainId, codeAddress, nonce, sig, signer.Address); + Assert.That(authority, Is.EqualTo(signer.Address)); } } } diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 49758597266..999058985e8 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -63,7 +63,7 @@ public void Execute_TxHasAuthorizationWithCodeThatSavesCallerAddress_ExpectedAdd .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(100_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, 0)) + .WithAuthorizationCode(_ethereumEcdsa.Sign(signer, _specProvider.ChainId, codeSource, 0)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -98,7 +98,7 @@ public void Execute_TxHasAuthorizationCodeButAuthorityHasCode_NoAuthorizedCodeIs .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, 0)) + .WithAuthorizationCode(_ethereumEcdsa.Sign(signer, _specProvider.ChainId, codeSource, 0)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -135,7 +135,7 @@ public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_ .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(600_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer, _specProvider.ChainId, codeSource, nonce)) + .WithAuthorizationCode(_ethereumEcdsa.Sign(signer, _specProvider.ChainId, codeSource, nonce)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -178,7 +178,7 @@ public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorag .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(100_000) - .WithAuthorizationCode(CreateAuthorizationTuple(signer, chainId, codeSource, nonce)) + .WithAuthorizationCode(_ethereumEcdsa.Sign(signer, chainId, codeSource, nonce)) .SignedAndResolved(_ethereumEcdsa, sender, true) .TestObject; Block block = Build.A.Block.WithNumber(long.MaxValue) @@ -207,7 +207,7 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c .WithTo(signer.Address) .WithGasLimit(GasCostOf.Transaction + GasCostOf.NewAccount * count) .WithAuthorizationCode(Enumerable.Range(0, count) - .Select(i => CreateAuthorizationTuple( + .Select(i => _ethereumEcdsa.Sign( signer, _specProvider.ChainId, TestItem.AddressC, @@ -256,7 +256,7 @@ public void Execute_TxWithDelegationRunsOutOfGas_DelegationRefundIsStillApplied( .WithTo(codeSource) .WithGasLimit(gasLimit) .WithAuthorizationCode( - CreateAuthorizationTuple( + _ethereumEcdsa.Sign( sender, _specProvider.ChainId, Address.Zero, @@ -295,7 +295,7 @@ public void Execute_TxAuthorizationListWithBALANCE_WarmAccountReadGasIsCharged() .WithTo(signer.Address) .WithGasLimit(60_000) .WithAuthorizationCode( - CreateAuthorizationTuple( + _ethereumEcdsa.Sign( signer, _specProvider.ChainId, codeSource, @@ -343,12 +343,12 @@ public void Execute_AuthorizationListHasSameAuthorityButDifferentCode_OnlyLastIn DeployCode(secondCodeSource, secondCode); AuthorizationTuple[] authList = [ - CreateAuthorizationTuple( + _ethereumEcdsa.Sign( signer, _specProvider.ChainId, firstCodeSource, 0), - CreateAuthorizationTuple( + _ethereumEcdsa.Sign( signer, _specProvider.ChainId, secondCodeSource, @@ -393,7 +393,7 @@ public void Execute_FirstTxHasAuthorizedCodeThatIncrementsAndSecondDoesNot_Stora .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(60_000) - .WithAuthorizationCode(CreateAuthorizationTuple( + .WithAuthorizationCode(_ethereumEcdsa.Sign( signer, _specProvider.ChainId, codeSource, @@ -481,7 +481,7 @@ public void Execute_DelegatedCodeUsesEXTOPCODES_StoresExpectedValue(byte[] code, .WithType(TxType.SetCode) .WithTo(signer.Address) .WithGasLimit(100_000) - .WithAuthorizationCode(CreateAuthorizationTuple( + .WithAuthorizationCode(_ethereumEcdsa.Sign( signer, _specProvider.ChainId, codeSource, @@ -502,18 +502,4 @@ private void DeployCode(Address codeSource, byte[] code) _stateProvider.CreateAccountIfNotExists(codeSource, 0); _stateProvider.InsertCode(codeSource, ValueKeccak.Compute(code), code, _specProvider.GetSpec(MainnetSpecProvider.PragueActivation)); } - - private AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) - { - AuthorizationTupleDecoder decoder = new(); - using NettyRlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); - Span code = stackalloc byte[rlp.Length + 1]; - code[0] = Eip7702Constants.Magic; - rlp.Data.AsSpan().CopyTo(code.Slice(1)); - - Signature sig = _ethereumEcdsa.Sign(signer, Keccak.Compute(code)); - - return new AuthorizationTuple(chainId, codeAddress, nonce, sig); - } - } From 1be004e76a510215b3ee17e2517e1aa663a45a6f Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 2 Oct 2024 11:58:45 +0200 Subject: [PATCH 457/551] refactor codeinforepo test --- .../CodeInfoRepositoryTests.cs | 212 ------------------ .../TransactionProcessorEip7702Tests.cs | 120 +++++++++- 2 files changed, 114 insertions(+), 218 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 82e30798ca1..7bb81c5a729 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -25,218 +25,6 @@ namespace Nethermind.Evm.Test; [TestFixture, Parallelizable] public class CodeInfoRepositoryTests { - // [Test] - // public void SetDelegations_AuthorityTupleIsCorrect_AuthorityIsAddedToAccessedAddresses() - // { - // PrivateKey authority = TestItem.PrivateKeyA; - // CodeInfoRepository sut = new(1); - // var tuples = new[] - // { - // CreateAuthorizationTuple(authority, 1, TestItem.AddressB, 0), - // }; - // HashSet
accessedAddresses = new(); - // sut.SetDelegations(Substitute.For(), tuples, accessedAddresses, Substitute.For()); - // - // accessedAddresses.Should().BeEquivalentTo([authority.Address]); - // } - // - // public static IEnumerable AuthorizationCases() - // { - // yield return new object[] - // { - // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressB, 0), - // true - // }; - // yield return new object[] - // { - // //Wrong chain id - // CreateAuthorizationTuple(TestItem.PrivateKeyB, 2, TestItem.AddressB, 0), - // false - // }; - // yield return new object[] - // { - // //wrong nonce - // CreateAuthorizationTuple(TestItem.PrivateKeyC, 1, TestItem.AddressB, 1), - // false - // }; - // } - // - // [TestCaseSource(nameof(AuthorizationCases))] - // public void SetDelegations_MixOfCorrectAndWrongChainIdAndNonce_InsertsIfExpected(AuthorizationTuple tuple, bool shouldInsert) - // { - // IDb stateDb = new MemDb(); - // IDb codeDb = new MemDb(); - // TrieStore trieStore = new(stateDb, LimboLogs.Instance); - // IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - // CodeInfoRepository sut = new(1); - // HashSet
accessedAddresses = new(); - // sut.SetDelegations(stateProvider, [tuple], accessedAddresses, Substitute.For()); - // - // Assert.That(stateProvider.HasCode(tuple.Authority), Is.EqualTo(shouldInsert)); - // } - // - // [Test] - // public void SetDelegations_AuthorityHasCode_NoCodeIsInserted() - // { - // PrivateKey authority = TestItem.PrivateKeyA; - // Address codeSource = TestItem.AddressB; - // IWorldState mockWorldState = Substitute.For(); - // mockWorldState.HasCode(authority.Address).Returns(true); - // mockWorldState.GetCode(authority.Address).Returns(new byte[32]); - // CodeInfoRepository sut = new(1); - // var tuples = new[] - // { - // CreateAuthorizationTuple(authority, 1, codeSource, 0), - // }; - // HashSet
accessedAddresses = new(); - // - // sut.SetDelegations(mockWorldState, tuples, accessedAddresses, Substitute.For()); - // - // mockWorldState.DidNotReceive().InsertCode(Arg.Any
(), Arg.Any>(), Arg.Any()); - // } - // - // [Test] - // public void SetDelegations_AuthorityHasDelegatedCode_CodeIsInserted() - // { - // PrivateKey authority = TestItem.PrivateKeyA; - // Address codeSource = TestItem.AddressB; - // IDb stateDb = new MemDb(); - // IDb codeDb = new MemDb(); - // TrieStore trieStore = new(stateDb, LimboLogs.Instance); - // IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - // byte[] code = new byte[23]; - // Eip7702Constants.DelegationHeader.CopyTo(code); - // stateProvider.CreateAccount(authority.Address, 0); - // stateProvider.InsertCode(authority.Address, ValueKeccak.Compute(code), code, Substitute.For()); - // CodeInfoRepository sut = new(1); - // var tuples = new[] - // { - // CreateAuthorizationTuple(authority, 1, codeSource, 0), - // }; - // - // sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); - // - // Assert.That(stateProvider.GetCode(authority.Address).Slice(3), Is.EqualTo(codeSource.Bytes)); - // } - // - // [TestCase(true)] - // [TestCase(false)] - // public void SetDelegations_AuthorityAccountExistsOrNot_NonceIsIncrementedByOne(bool accountExists) - // { - // IDb stateDb = new MemDb(); - // IDb codeDb = new MemDb(); - // TrieStore trieStore = new(stateDb, LimboLogs.Instance); - // IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - // PrivateKey authority = TestItem.PrivateKeyA; - // Address codeSource = TestItem.AddressB; - // if (accountExists) - // stateProvider.CreateAccount(authority.Address, 0); - // CodeInfoRepository sut = new(1); - // var tuples = new[] - // { - // CreateAuthorizationTuple(authority, 1, codeSource, 0), - // }; - // - // sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); - // - // Assert.That(stateProvider.GetNonce(authority.Address), Is.EqualTo((UInt256)1)); - // } - // - // [Test] - // public void SetDelegations_FourAuthorizationInTotalButOneHasInvalidNonce_ResultContainsThreeAddresses() - // { - // CodeInfoRepository sut = new(1); - // var tuples = new[] - // { - // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), - // CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), - // CreateAuthorizationTuple(TestItem.PrivateKeyC, 2, TestItem.AddressF, 0), - // CreateAuthorizationTuple(TestItem.PrivateKeyD, 1, TestItem.AddressF, 1), - // }; - // HashSet
addresses = new(); - // sut.SetDelegations(Substitute.For(), tuples, addresses, Substitute.For()); - // - // addresses.Should().BeEquivalentTo([TestItem.AddressA, TestItem.AddressB, TestItem.AddressD]); - // } - // - // [Test] - // public void SetDelegations_AuthorizationsHasOneExistingAccount_ResultHaveOneRefund() - // { - // IDb stateDb = new MemDb(); - // IDb codeDb = new MemDb(); - // TrieStore trieStore = new(stateDb, LimboLogs.Instance); - // IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - // CodeInfoRepository sut = new(1); - // var tuples = new[] - // { - // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), - // CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), - // }; - // stateProvider.CreateAccount(TestItem.AddressA, 0); - // - // int refunds = sut.SetDelegations(stateProvider, tuples, Substitute.For>(), Substitute.For()); - // - // refunds.Should().Be(1); - // } - // public static IEnumerable CountsAsAccessedCases() - // { - // yield return new object[] - // { - // new AuthorizationTuple[] - // { - // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), - // CreateAuthorizationTuple(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), - // }, - // new Address[] - // { - // TestItem.AddressA, - // TestItem.AddressB - // } - // }; - // yield return new object[] - // { - // new AuthorizationTuple[] - // { - // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), - // CreateAuthorizationTuple(TestItem.PrivateKeyB, 2, TestItem.AddressF, 0), - // }, - // new Address[] - // { - // TestItem.AddressA, - // } - // }; - // yield return new object[] - // { - // new AuthorizationTuple[] - // { - // CreateAuthorizationTuple(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), - // //Bad signature - // new AuthorizationTuple(1, TestItem.AddressF, 0, new Signature(new byte[65]), TestItem.AddressA) - // }, - // new Address[] - // { - // TestItem.AddressA, - // } - // }; - // } - // - // [TestCaseSource(nameof(CountsAsAccessedCases))] - // public void SetDelegations_CombinationOfValidAndInvalidTuples_AddsTheCorrectAddressesToAccessedAddresses(AuthorizationTuple[] tuples, Address[] shouldCountAsAccessed) - // { - // IDb stateDb = new MemDb(); - // IDb codeDb = new MemDb(); - // TrieStore trieStore = new(stateDb, LimboLogs.Instance); - // IWorldState stateProvider = new WorldState(trieStore, codeDb, LimboLogs.Instance); - // CodeInfoRepository sut = new(1); - // stateProvider.CreateAccount(TestItem.AddressA, 0); - // - // ISet
accessedAddresses = new HashSet
(); - // sut.SetDelegations(stateProvider, tuples, accessedAddresses, Substitute.For()); - // - // accessedAddresses.Count.Should().Be(shouldCountAsAccessed.Length); - // accessedAddresses.Should().Contain(shouldCountAsAccessed); - // } - public static IEnumerable NotDelegationCodeCases() { byte[] rndAddress = new byte[20]; diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 999058985e8..2c1419b58f9 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -17,9 +17,9 @@ using NUnit.Framework; using System.Collections.Generic; using Nethermind.Core.Crypto; -using Nethermind.Serialization.Rlp; using System; using System.Linq; +using Nethermind.Int256; namespace Nethermind.Evm.Test; @@ -78,8 +78,15 @@ public void Execute_TxHasAuthorizationWithCodeThatSavesCallerAddress_ExpectedAdd Assert.That(new Address(cell.ToArray()), Is.EqualTo(sender.Address)); } - [Test] - public void Execute_TxHasAuthorizationCodeButAuthorityHasCode_NoAuthorizedCodeIsExecuted() + public static IEnumerable DelegatedAndNotDelegatedCodeCases() + { + byte[] delegatedCode = new byte[23]; + Eip7702Constants.DelegationHeader.CopyTo(delegatedCode); + yield return new object[] { delegatedCode, true }; + yield return new object[] { Prepare.EvmCode.Op(Instruction.GAS).Done, false }; + } + [TestCaseSource(nameof(DelegatedAndNotDelegatedCodeCases))] + public void Execute_TxHasAuthorizationCodeButAuthorityHasCode_OnlyInsertIfExistingCodeIsDelegated(byte[] authorityCode, bool shouldInsert) { PrivateKey sender = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; @@ -92,7 +99,7 @@ public void Execute_TxHasAuthorizationCodeButAuthorityHasCode_NoAuthorizedCodeIs .Op(Instruction.SSTORE) .Done; DeployCode(codeSource, code); - DeployCode(signer.Address, Prepare.EvmCode.Op(Instruction.GAS).Done); + DeployCode(signer.Address, authorityCode); Transaction tx = Build.A.Transaction .WithType(TxType.SetCode) @@ -108,9 +115,11 @@ public void Execute_TxHasAuthorizationCodeButAuthorityHasCode_NoAuthorizedCodeIs _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); - ReadOnlySpan cell = _stateProvider.Get(new StorageCell(signer.Address, 0)); + ReadOnlySpan signerCode = _stateProvider.GetCode(signer.Address); - Assert.That(cell.ToArray(), Is.EquivalentTo(new[] { 0x0 })); + byte[] expectedCode = shouldInsert ? [..Eip7702Constants.DelegationHeader, ..codeSource.Bytes] : authorityCode; + + Assert.That(signerCode.ToArray(), Is.EquivalentTo(expectedCode)); } public static IEnumerable SenderSignerCases() @@ -497,6 +506,105 @@ public void Execute_DelegatedCodeUsesEXTOPCODES_StoresExpectedValue(byte[] code, Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EquivalentTo(expectedValue)); } + public static IEnumerable CountsAsAccessedCases() + { + EthereumEcdsa ethereumEcdsa = new(BlockchainIds.GenericNonRealNetwork); + + yield return new object[] + { + new AuthorizationTuple[] + { + ethereumEcdsa.Sign(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + ethereumEcdsa.Sign(TestItem.PrivateKeyB, 1, TestItem.AddressF, 0), + }, + new Address[] + { + TestItem.AddressA, + TestItem.AddressB + } + }; + yield return new object[] + { + new AuthorizationTuple[] + { + ethereumEcdsa.Sign(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + ethereumEcdsa.Sign(TestItem.PrivateKeyB, 2, TestItem.AddressF, 0), + }, + new Address[] + { + TestItem.AddressA, + } + }; + yield return new object[] + { + new AuthorizationTuple[] + { + ethereumEcdsa.Sign(TestItem.PrivateKeyA, 1, TestItem.AddressF, 0), + //Bad signature + new AuthorizationTuple(1, TestItem.AddressF, 0, new Signature(new byte[65]), TestItem.AddressA) + }, + new Address[] + { + TestItem.AddressA, + } + }; + } + + [TestCaseSource(nameof(CountsAsAccessedCases))] + public void Execute_CombinationOfValidAndInvalidTuples_AddsTheCorrectAddressesToAccessedAddresses(AuthorizationTuple[] tuples, Address[] shouldCountAsAccessed) + { + PrivateKey sender = TestItem.PrivateKeyA; + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(TestItem.AddressB) + .WithGasLimit(100_000) + .WithAuthorizationCode(tuples) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + + AccessTxTracer txTracer = new AccessTxTracer(); + TransactionResult result = _transactionProcessor.Execute(tx, block.Header, txTracer); + Assert.That(txTracer.AccessList.Select(a=>a.Address), Is.SupersetOf(shouldCountAsAccessed)); + } + + [TestCase(true)] + [TestCase(false)] + public void Execute_AuthorityAccountExistsOrNot_NonceIsIncrementedByOne(bool accountExists) + { + PrivateKey authority = TestItem.PrivateKeyA; + PrivateKey sender = TestItem.PrivateKeyB; + + if (accountExists) + _stateProvider.CreateAccount(authority.Address, 0); + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + + AuthorizationTuple[] tuples = + { + _ethereumEcdsa.Sign(authority, 1, sender.Address, 0), + }; + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(TestItem.AddressB) + .WithGasLimit(100_000) + .WithAuthorizationCode(tuples) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + TransactionResult result = _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + + Assert.That(_stateProvider.GetNonce(authority.Address), Is.EqualTo((UInt256)1)); + } + private void DeployCode(Address codeSource, byte[] code) { _stateProvider.CreateAccountIfNotExists(codeSource, 0); From eeb4ff9232354530af965e1003c9dd3f6ebf41b4 Mon Sep 17 00:00:00 2001 From: ak88 Date: Mon, 30 Sep 2024 17:11:16 +0200 Subject: [PATCH 458/551] base class for processors --- .../Requests/ConsensusRequestsProcessor.cs | 4 +- .../Requests/ConsolidationRequestProcessor.cs | 51 +++++---------- ...uestsProcessor.cs => IRequestProcessor.cs} | 7 +-- .../Requests/RequestProcessor.cs | 52 ++++++++++++++++ .../Requests/WithdrawalRequestsProcessor.cs | 62 ++++++------------- .../ConsolidationRequestProcessorTest.cs | 2 +- .../WithdrawalRequestsProcessorTests.cs | 2 +- 7 files changed, 92 insertions(+), 88 deletions(-) rename src/Nethermind/Nethermind.Consensus/Requests/{IWithdrawalRequestsProcessor.cs => IRequestProcessor.cs} (56%) create mode 100644 src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs index cefc5943b0c..cbc155d1d9c 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs @@ -28,8 +28,8 @@ public void ProcessRequests(Block block, IWorldState state, TxReceipt[] receipts using ArrayPoolList requestsList = new(receipts.Length * 2); requestsList.AddRange(_depositsProcessor.ProcessDeposits(block, receipts, spec)); - requestsList.AddRange(_withdrawalRequestsProcessor.ReadWithdrawalRequests(block, state, spec)); - requestsList.AddRange(_consolidationRequestsProcessor.ReadConsolidationRequests(block, state, spec)); + requestsList.AddRange(_withdrawalRequestsProcessor.ReadRequests(block, state, spec)); + requestsList.AddRange(_consolidationRequestsProcessor.ReadRequests(block, state, spec)); ConsensusRequest[] requests = requestsList.ToArray(); Hash256 root = new RequestsTrie(requests).RootHash; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs index 12f57a5f583..9d18024b080 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs @@ -6,59 +6,36 @@ using Nethermind.Core; using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Specs; -using Nethermind.Crypto; -using Nethermind.Evm; -using Nethermind.Evm.Tracing; using Nethermind.Evm.TransactionProcessing; -using Nethermind.Int256; using Nethermind.State; namespace Nethermind.Consensus.Requests; // https://eips.ethereum.org/EIPS/eip-7251#block-processing -public class ConsolidationRequestsProcessor(ITransactionProcessor transactionProcessor) +public class ConsolidationRequestsProcessor(ITransactionProcessor transactionProcessor) : RequestProcessor(transactionProcessor), IRequestProcessor { - private const long GasLimit = 30_000_000L; private const int SizeOfClass = 20 + 48 + 48; - public IEnumerable ReadConsolidationRequests(Block block, IWorldState state, IReleaseSpec spec) + public IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec) { - if (!spec.ConsolidationRequestsEnabled) - yield break; - - Address eip7251Account = spec.Eip7251ContractAddress; - if (!state.AccountExists(eip7251Account)) - yield break; - - CallOutputTracer tracer = new(); - - Transaction? transaction = new() - { - Value = UInt256.Zero, - Data = Array.Empty(), - To = spec.Eip7251ContractAddress, - SenderAddress = Address.SystemUser, - GasLimit = GasLimit, - GasPrice = UInt256.Zero, - }; - transaction.Hash = transaction.CalculateHash(); - - transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); - var result = tracer.ReturnValue; - if (result == null || result.Length == 0) - yield break; - - Memory memory = result.AsMemory(); - int count = memory.Length / SizeOfClass; + return base.ReadRequests(block, state, spec, spec.Eip7251ContractAddress); + } + protected override bool IsEnabledInSpec(IReleaseSpec spec) + { + return spec.ConsolidationRequestsEnabled; + } + protected override IEnumerable ParseResult(Memory result) + { + int count = result.Length / SizeOfClass; for (int i = 0; i < count; ++i) { int offset = i * SizeOfClass; ConsolidationRequest request = new() { - SourceAddress = new Address(memory.Slice(offset, 20).ToArray()), - SourcePubkey = memory.Slice(offset + 20, 48), - TargetPubkey = memory.Slice(offset + 68, 48) + SourceAddress = new Address(result.Slice(offset, 20).ToArray()), + SourcePubkey = result.Slice(offset + 20, 48), + TargetPubkey = result.Slice(offset + 68, 48) }; yield return request; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IRequestProcessor.cs similarity index 56% rename from src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs rename to src/Nethermind/Nethermind.Consensus/Requests/IRequestProcessor.cs index ba396ed1441..6f33453fdfb 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/IWithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/IRequestProcessor.cs @@ -1,15 +1,14 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System.Collections.Generic; using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Specs; using Nethermind.State; +using System.Collections.Generic; namespace Nethermind.Consensus.Requests; -public interface IWithdrawalRequestsProcessor +public interface IRequestProcessor { - IEnumerable ReadWithdrawalRequests(Block block, IWorldState state, IReleaseSpec spec); + IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs new file mode 100644 index 00000000000..f5ad8f9ef30 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs @@ -0,0 +1,52 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; +using Nethermind.State; + +namespace Nethermind.Consensus.Requests; + +public abstract class RequestProcessor(ITransactionProcessor transactionProcessor) +{ + private const long GasLimit = 30_000_000L; + + public IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec, Address contractAddress) + { + if (!IsEnabledInSpec(spec)) + return Array.Empty(); + + if (!state.AccountExists(contractAddress)) + return Array.Empty(); + + CallOutputTracer tracer = new(); + + Transaction? transaction = new() + { + Value = UInt256.Zero, + Data = Array.Empty(), + To = contractAddress, + SenderAddress = Address.SystemUser, + GasLimit = GasLimit, + GasPrice = UInt256.Zero, + }; + transaction.Hash = transaction.CalculateHash(); + + transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); + var result = tracer.ReturnValue; + if (result == null || result.Length == 0) + return Array.Empty(); + return ParseResult(tracer.ReturnValue); + } + + + protected abstract bool IsEnabledInSpec(IReleaseSpec spec); + protected abstract IEnumerable ParseResult(Memory result); +} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs index 192f9ef62ea..86483add1a0 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs @@ -8,63 +8,39 @@ using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; -using Nethermind.Crypto; -using Nethermind.Evm; -using Nethermind.Evm.Tracing; using Nethermind.Evm.TransactionProcessing; -using Nethermind.Int256; using Nethermind.State; namespace Nethermind.Consensus.Requests; // https://eips.ethereum.org/EIPS/eip-7002#block-processing -public class WithdrawalRequestsProcessor(ITransactionProcessor transactionProcessor) : IWithdrawalRequestsProcessor +public class WithdrawalRequestsProcessor(ITransactionProcessor transactionProcessor) : RequestProcessor(transactionProcessor), IRequestProcessor { - private const long GasLimit = 30_000_000L; private const int SizeOfClass = 20 + 48 + 8; - public IEnumerable ReadWithdrawalRequests(Block block, IWorldState state, IReleaseSpec spec) + public IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec) { - if (!spec.WithdrawalRequestsEnabled || !state.AccountExists(spec.Eip7002ContractAddress)) - { - yield break; - } + return ReadRequests(block, state, spec, spec.Eip7002ContractAddress); + } - byte[]? result = ExecuteTransaction(block, spec); - if (result?.Length > 0) - { - Memory memory = result.AsMemory(); - int count = result.Length / SizeOfClass; - for (int i = 0; i < count; ++i) - { - int offset = i * SizeOfClass; - WithdrawalRequest request = new() - { - SourceAddress = new Address(memory.Slice(offset, 20).AsArray()), - ValidatorPubkey = memory.Slice(offset + 20, 48), - Amount = BinaryPrimitives.ReadUInt64BigEndian(memory.Slice(offset + 68, 8).Span) - }; - yield return request; - } - } + protected override bool IsEnabledInSpec(IReleaseSpec spec) + { + return spec.WithdrawalRequestsEnabled; } - private byte[]? ExecuteTransaction(Block block, IReleaseSpec spec) + protected override IEnumerable ParseResult(Memory result) { - CallOutputTracer tracer = new(); - Transaction transaction = new() + int count = result.Length / SizeOfClass; + for (int i = 0; i < count; ++i) { - Value = UInt256.Zero, - Data = Array.Empty(), - To = spec.Eip7002ContractAddress, - SenderAddress = Address.SystemUser, - GasLimit = GasLimit, - GasPrice = UInt256.Zero, - }; - transaction.Hash = transaction.CalculateHash(); - - transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); - - return tracer.ReturnValue; + int offset = i * SizeOfClass; + WithdrawalRequest request = new() + { + SourceAddress = new Address(result.Slice(offset, 20).AsArray()), + ValidatorPubkey = result.Slice(offset + 20, 48), + Amount = BinaryPrimitives.ReadUInt64BigEndian(result.Slice(offset + 68, 8).Span) + }; + yield return request; + } } } diff --git a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs index 923bccec301..99973b8bc23 100644 --- a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs +++ b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs @@ -84,7 +84,7 @@ public void ShouldProcessConsolidationRequest() TargetPubkey = Bytes.FromHexString("0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000") }; - var ConsolidationRequests = ConsolidationRequestsProcessor.ReadConsolidationRequests(block, _stateProvider, spec).ToList(); + var ConsolidationRequests = ConsolidationRequestsProcessor.ReadRequests(block, _stateProvider, spec).ToList(); Assert.That(ConsolidationRequests, Has.Count.EqualTo(10)); ConsolidationRequest ConsolidationRequestResult = ConsolidationRequests[0]; diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs index 8ba566e8171..279b668e424 100644 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs @@ -83,7 +83,7 @@ public void ShouldProcessWithdrawalRequest() Amount = 0 }; - var withdrawalRequests = withdrawalRequestsProcessor.ReadWithdrawalRequests(block, _stateProvider, spec).ToList(); + var withdrawalRequests = withdrawalRequestsProcessor.ReadRequests(block, _stateProvider, spec).ToList(); Assert.That(withdrawalRequests, Has.Count.EqualTo(16)); From facba02805598f5cacd56399b02648a1bd33ea89 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 2 Oct 2024 13:04:51 +0200 Subject: [PATCH 459/551] merge fix --- .../TransactionProcessing/TransactionProcessor.cs | 2 +- .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 437fb4b848a..e030b3c9186 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -683,7 +683,7 @@ private void WarmUp(Transaction tx, BlockHeader header, IReleaseSpec spec, EvmSt } } - protected virtual void PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in byte statusCode) + protected virtual void PayFees(Transaction tx, BlockHeader header, IReleaseSpec spec, ITxTracer tracer, in TransactionSubstate substate, in long spentGas, in UInt256 premiumPerGas, in UInt256 blobBaseFee, in byte statusCode) { bool gasBeneficiaryNotDestroyed = substate?.DestroyList.Contains(header.GasBeneficiary) != true; if (statusCode == StatusCode.Failure || gasBeneficiaryNotDestroyed) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 09ca793db34..3e1e7f66cb3 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -164,7 +164,6 @@ bool GetForInnerPathExistence(KeyValuePair o) => Eip7002ContractAddress = chainSpecJson.Params.Eip7002ContractAddress ?? Eip7002Constants.WithdrawalRequestPredeployAddress, Eip7251TransitionTimestamp = chainSpecJson.Params.Eip7251TransitionTimestamp, Eip7251ContractAddress = chainSpecJson.Params.Eip7251ContractAddress ?? Eip7251Constants.ConsolidationRequestPredeployAddress, - Eip1559FeeCollector = chainSpecJson.Params.Eip1559FeeCollector, FeeCollector = chainSpecJson.Params.FeeCollector, Eip1559FeeCollectorTransition = chainSpecJson.Params.Eip1559FeeCollectorTransition, Eip1559BaseFeeMinValueTransition = chainSpecJson.Params.Eip1559BaseFeeMinValueTransition, From 60348e27cf763cbfa8ebfb45bce78b6f2fa65032 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 2 Oct 2024 13:05:22 +0200 Subject: [PATCH 460/551] comment correction --- src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 61579a2f398..0189f27f4fa 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -309,7 +309,7 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec bool IsEip6780Enabled { get; } /// - /// Transactions that allows code for EOA temporarily + /// Transactions that allows code delegation for EOA /// bool IsEip7702Enabled { get; } From 86c9df2e1c36c8d5a4633222c4fd9b34b019fa54 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 2 Oct 2024 13:15:38 +0200 Subject: [PATCH 461/551] format whitespace --- .../CliqueBlockProducerTests.cs | 48 +++++++++---------- .../TransactionProcessorEip7702Tests.cs | 6 +-- .../Nethermind.Evm/VirtualMachine.cs | 12 ++--- .../StateProviderTests.cs | 12 ++--- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs index 72d49e5a7da..a9f2092be3e 100644 --- a/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs +++ b/src/Nethermind/Nethermind.Clique.Test/CliqueBlockProducerTests.cs @@ -107,15 +107,15 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f ITransactionComparerProvider transactionComparerProvider = new TransactionComparerProvider(specProvider, blockTree); - CodeInfoRepository codeInfoRepository = new(); - TxPool.TxPool txPool = new(_ethereumEcdsa, - new BlobTxStorage(), - new ChainHeadInfoProvider(new FixedForkActivationChainHeadSpecProvider(GoerliSpecProvider.Instance), blockTree, stateProvider, codeInfoRepository), - new TxPoolConfig(), - new TxValidator(goerliSpecProvider.ChainId), - _logManager, - transactionComparerProvider.GetDefaultComparer()); - _pools[privateKey] = txPool; + CodeInfoRepository codeInfoRepository = new(); + TxPool.TxPool txPool = new(_ethereumEcdsa, + new BlobTxStorage(), + new ChainHeadInfoProvider(new FixedForkActivationChainHeadSpecProvider(GoerliSpecProvider.Instance), blockTree, stateProvider, codeInfoRepository), + new TxPoolConfig(), + new TxValidator(goerliSpecProvider.ChainId), + _logManager, + transactionComparerProvider.GetDefaultComparer()); + _pools[privateKey] = txPool; BlockhashProvider blockhashProvider = new(blockTree, specProvider, stateProvider, LimboLogs.Instance); _blockTrees.Add(privateKey, blockTree); @@ -128,21 +128,21 @@ public On CreateNode(PrivateKey privateKey, bool withGenesisAlreadyProcessed = f _genesis.Header.Hash = _genesis.Header.CalculateHash(); _genesis3Validators.Header.Hash = _genesis3Validators.Header.CalculateHash(); - TransactionProcessor transactionProcessor = new(goerliSpecProvider, stateProvider, - new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, nodeLogManager), - codeInfoRepository, - nodeLogManager); - BlockProcessor blockProcessor = new( - goerliSpecProvider, - Always.Valid, - NoBlockRewards.Instance, - new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider), - stateProvider, - NullReceiptStorage.Instance, - transactionProcessor, - new BeaconBlockRootHandler(transactionProcessor), - new BlockhashStore(goerliSpecProvider, stateProvider), - nodeLogManager); + TransactionProcessor transactionProcessor = new(goerliSpecProvider, stateProvider, + new VirtualMachine(blockhashProvider, specProvider, codeInfoRepository, nodeLogManager), + codeInfoRepository, + nodeLogManager); + BlockProcessor blockProcessor = new( + goerliSpecProvider, + Always.Valid, + NoBlockRewards.Instance, + new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider), + stateProvider, + NullReceiptStorage.Instance, + transactionProcessor, + new BeaconBlockRootHandler(transactionProcessor), + new BlockhashStore(goerliSpecProvider, stateProvider), + nodeLogManager); BlockchainProcessor processor = new(blockTree, blockProcessor, new AuthorRecoveryStep(snapshotManager), stateReader, nodeLogManager, BlockchainProcessor.Options.NoReceipts); processor.Start(); diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 2c1419b58f9..4fe6ab74f20 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -117,7 +117,7 @@ public void Execute_TxHasAuthorizationCodeButAuthorityHasCode_OnlyInsertIfExisti ReadOnlySpan signerCode = _stateProvider.GetCode(signer.Address); - byte[] expectedCode = shouldInsert ? [..Eip7702Constants.DelegationHeader, ..codeSource.Bytes] : authorityCode; + byte[] expectedCode = shouldInsert ? [.. Eip7702Constants.DelegationHeader, .. codeSource.Bytes] : authorityCode; Assert.That(signerCode.ToArray(), Is.EquivalentTo(expectedCode)); } @@ -568,9 +568,9 @@ public void Execute_CombinationOfValidAndInvalidTuples_AddsTheCorrectAddressesTo .WithTransactions(tx) .WithGasLimit(10000000).TestObject; - AccessTxTracer txTracer = new AccessTxTracer(); + AccessTxTracer txTracer = new AccessTxTracer(); TransactionResult result = _transactionProcessor.Execute(tx, block.Header, txTracer); - Assert.That(txTracer.AccessList.Select(a=>a.Address), Is.SupersetOf(shouldCountAsAccessed)); + Assert.That(txTracer.AccessList.Select(a => a.Address), Is.SupersetOf(shouldCountAsAccessed)); } [TestCase(true)] diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 7a1cb1e9b35..b5ca0aa4a7d 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -340,12 +340,12 @@ public TransactionSubstate Run(EvmState state, IWorldState worl _returnDataBuffer = Array.Empty(); previousCallOutput = ZeroPaddedSpan.Empty; - long codeDepositGasCost = CodeDepositHandler.CalculateCost(callResult.Output.Length, spec); - bool invalidCode = CodeDepositHandler.CodeIsInvalid(spec, callResult.Output); - if (gasAvailableForCodeDeposit >= codeDepositGasCost && !invalidCode) - { - ReadOnlyMemory code = callResult.Output; - codeInfoRepository.InsertCode(_state, code, callCodeOwner, spec); + long codeDepositGasCost = CodeDepositHandler.CalculateCost(callResult.Output.Length, spec); + bool invalidCode = CodeDepositHandler.CodeIsInvalid(spec, callResult.Output); + if (gasAvailableForCodeDeposit >= codeDepositGasCost && !invalidCode) + { + ReadOnlyMemory code = callResult.Output; + codeInfoRepository.InsertCode(_state, code, callCodeOwner, spec); currentState.GasAvailable -= codeDepositGasCost; diff --git a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs index 1429165fcac..e47aab57922 100644 --- a/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs +++ b/src/Nethermind/Nethermind.State.Test/StateProviderTests.cs @@ -178,12 +178,12 @@ public void Restore_in_the_middle() { byte[] code = [1]; - IWorldState provider = new WorldState(new TrieStore(new MemDb(), Logger), _codeDb, Logger); - provider.CreateAccount(_address1, 1); - provider.AddToBalance(_address1, 1, Frontier.Instance); - provider.IncrementNonce(_address1); - provider.InsertCode(_address1, new byte[] { 1 }, Frontier.Instance, false); - provider.UpdateStorageRoot(_address1, Hash2); + IWorldState provider = new WorldState(new TrieStore(new MemDb(), Logger), _codeDb, Logger); + provider.CreateAccount(_address1, 1); + provider.AddToBalance(_address1, 1, Frontier.Instance); + provider.IncrementNonce(_address1); + provider.InsertCode(_address1, new byte[] { 1 }, Frontier.Instance, false); + provider.UpdateStorageRoot(_address1, Hash2); Assert.That(provider.GetNonce(_address1), Is.EqualTo(UInt256.One)); Assert.That(provider.GetBalance(_address1), Is.EqualTo(UInt256.One + 1)); From cd151cc62d667a0cc64c102292958d8114cbe3e0 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 2 Oct 2024 13:21:36 +0200 Subject: [PATCH 462/551] benchmark fix --- .../Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs index 8ba383c4215..6a76a9c5e52 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs @@ -207,6 +207,7 @@ private class AlwaysReturnNullTxPool : ITxPool public event EventHandler NewPending; public event EventHandler RemovedPending; public event EventHandler EvictedPending; + public event EventHandler TxPoolHeadChanged; #pragma warning restore 67 public void AddPeer(ITxPoolPeer peer) From 347a63aa635f9d29f1ce60a2797edfbdc3a55e4b Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 2 Oct 2024 13:39:18 +0200 Subject: [PATCH 463/551] small test change --- src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index 7de6285c2f7..47487e7e212 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -137,19 +137,15 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) Block block = Build.A.Block.WithTransactions(test.Transaction).WithHeader(header).TestObject; - bool blockIsValid = IsValidBlock(block, specProvider); ValidationResult txIsValid = _txValidator.IsWellFormed(test.Transaction, spec); - if (txIsValid && blockIsValid) + if (txIsValid) { transactionProcessor.Execute(test.Transaction, new BlockExecutionContext(header), txTracer); } else { - if (!txIsValid) - _logger.Info($"Skipping invalid tx with error: {txIsValid.Error}"); - else - _logger.Info($"Skipping invalid block: {block.ToString(Block.Format.Short)}"); + _logger.Info($"Skipping invalid tx with error: {txIsValid.Error}"); } stopwatch.Stop(); From 464deeb20aad591e39d1d28e76a503e03962dfc5 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 4 Oct 2024 13:32:09 +0200 Subject: [PATCH 464/551] Update src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs Co-authored-by: Lukasz Rozmej --- .../Nethermind.Consensus/Processing/RecoverSignature.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 66f7998dae5..397c9dfc9a9 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -113,7 +113,7 @@ public void RecoverData(Block block) Transaction tx = txs[i]; if (!ShouldRecoverSignatures(tx)) return; - tx.SenderAddress = _ecdsa.RecoverAddress(tx, useSignatureChainId); + tx.SenderAddress ??= _ecdsa.RecoverAddress(tx, useSignatureChainId); RecoverAuthorities(tx); if (_logger.IsTrace) _logger.Trace($"Recovered {tx.SenderAddress} sender for {tx.Hash}"); }); From 59a1ae27295d7314aa861deea1c531d48f12feb9 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 4 Oct 2024 13:32:26 +0200 Subject: [PATCH 465/551] Update src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs Co-authored-by: Lukasz Rozmej --- .../Nethermind.Consensus/Processing/RecoverSignature.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 397c9dfc9a9..403f6de58d1 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -124,7 +124,7 @@ public void RecoverData(Block block) { if (!ShouldRecoverSignatures(tx)) continue; - tx.SenderAddress = _ecdsa.RecoverAddress(tx, useSignatureChainId); + tx.SenderAddress ??= _ecdsa.RecoverAddress(tx, useSignatureChainId); RecoverAuthorities(tx); if (_logger.IsTrace) _logger.Trace($"Recovered {tx.SenderAddress} sender for {tx.Hash}"); } From 4b511391d87348323968fb9d49fe5486f83f94af Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 4 Oct 2024 13:33:03 +0200 Subject: [PATCH 466/551] Update src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs Co-authored-by: Lukasz Rozmej --- .../Nethermind.Consensus/Processing/RecoverSignature.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 403f6de58d1..48038f2489a 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -140,9 +140,9 @@ void RecoverAuthorities(Transaction tx) if (tx.AuthorizationList.Length > 3) { - Parallel.ForEach(tx.AuthorizationList, (tuple) => + Parallel.ForEach(tx.AuthorizationList.Where(t => t.Authority is null), (tuple) => { - tuple.Authority ??= _ecdsa.RecoverAddress(tuple); + tuple.Authority = _ecdsa.RecoverAddress(tuple); }); } else From 9f01cf2f39add9088413cbf1acb6d163c0ea1bc1 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 4 Oct 2024 13:42:12 +0200 Subject: [PATCH 467/551] review changes --- .../AuthorizationListJson.cs | 20 ++-- .../Ethereum.Test.Base/JsonToEthereumTest.cs | 12 +- .../Core/CodeInfoRepositoryBenchmark.cs | 109 ------------------ .../InitializeBlockchainAuRa.cs | 2 +- .../Processing/RecoverSignature.cs | 29 ++--- .../Requests/RequestProcessor.cs | 3 +- .../Steps/InitializeBlockchain.cs | 4 +- .../OptimismEthereumEcdsa.cs | 21 ---- 8 files changed, 35 insertions(+), 165 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs diff --git a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs index 58912aaa9e3..a2b8b6cfcbc 100644 --- a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs +++ b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs @@ -1,20 +1,16 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Nethermind.Core; namespace Ethereum.Test.Base; public class AuthorizationListJson { - public string ChainId { get; set; } - public string Address { get; set; } - public string Nonce { get; set; } - public string V { get; set; } - public string R { get; set; } - public string S { get; set; } - public string Signer { get; set; } + public ulong ChainId { get; set; } + public Address Address { get; set; } + public ulong Nonce { get; set; } + public ulong V { get; set; } + public byte[] R { get; set; } + public byte[] S { get; set; } + public Address Signer { get; set; } } diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index 3af12961248..7d41065cd52 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -163,12 +163,12 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t transaction.AuthorizationList = transactionJson.AuthorizationList .Select(i => new AuthorizationTuple( - System.Convert.ToUInt64(i.ChainId, 16), - new Address(i.Address), - System.Convert.ToUInt64(i.Nonce, 16), - System.Convert.ToUInt64(i.V, 16), - Bytes.FromHexString(i.R), - Bytes.FromHexString(i.S))).ToArray(); + i.ChainId, + i.Address, + i.Nonce, + i.V, + i.R, + i.S)).ToArray(); if (transaction.AuthorizationList.Any()) { transaction.Type = TxType.SetCode; diff --git a/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs deleted file mode 100644 index 0a10a0aeae4..00000000000 --- a/src/Nethermind/Nethermind.Benchmark/Core/CodeInfoRepositoryBenchmark.cs +++ /dev/null @@ -1,109 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using BenchmarkDotNet.Attributes; -using Nethermind.Core.Crypto; -using Nethermind.Core.Specs; -using Nethermind.Core; -using Nethermind.Db; -using Nethermind.Evm.CodeAnalysis; -using Nethermind.Evm.Tracing; -using Nethermind.Evm; -using Nethermind.Int256; -using Nethermind.Logging; -using Nethermind.Specs; -using Nethermind.State; -using Nethermind.Trie.Pruning; -using System; -using Nethermind.Core.Test.Builders; -using Nethermind.Crypto; -using Nethermind.Serialization.Rlp; -using System.Collections.Generic; -using System.Linq; - -namespace Nethermind.Benchmarks.Core; -[MemoryDiagnoser] -public class CodeInfoRepositoryBenchmark -{ - - private IReleaseSpec _spec = MainnetSpecProvider.Instance.GetSpec(MainnetSpecProvider.PragueActivation); - - private AuthorizationTuple[] Tuples1; - private AuthorizationTuple[] Tuples5; - private AuthorizationTuple[] Tuples10; - private AuthorizationTuple[] Tuples100; - - private CodeInfoRepository sut; - private static EthereumEcdsa _ethereumEcdsa; - private WorldState _stateProvider; - private HashSet
_accessedAddresses; - - [GlobalSetup] - public void GlobalSetup() - { - TrieStore trieStore = new(new MemDb(), new OneLoggerLogManager(NullLogger.Instance)); - IKeyValueStore codeDb = new MemDb(); - - _stateProvider = new WorldState(trieStore, codeDb, new OneLoggerLogManager(NullLogger.Instance)); - _stateProvider.CreateAccount(Address.Zero, 100000000000000); - _stateProvider.Commit(_spec); - - _accessedAddresses = new HashSet
(); - _ethereumEcdsa = new(1); - sut = new(); - var list = new List(); - var rnd = new Random(); - var addressBuffer = new byte[20]; - for (int i = 0; i < 1000; i++) - { - rnd.NextBytes(addressBuffer); - PrivateKey signer = Build.A.PrivateKey.TestObject; - list.Add(CreateAuthorizationTuple( - signer, - 1, - new Address(addressBuffer), - 1)); - } - Tuples1 = list.Take(1).ToArray(); - Tuples5 = list.Skip(1).Take(5).ToArray(); - Tuples10 = list.Skip(6).Take(10).ToArray(); - Tuples100 = list.Skip(16).Take(100).ToArray(); - - static AuthorizationTuple CreateAuthorizationTuple(PrivateKey signer, ulong chainId, Address codeAddress, ulong nonce) - { - AuthorizationTupleDecoder decoder = new(); - RlpStream rlp = decoder.EncodeWithoutSignature(chainId, codeAddress, nonce); - Span code = stackalloc byte[rlp.Length + 1]; - code[0] = Eip7702Constants.Magic; - rlp.Data.AsSpan().CopyTo(code.Slice(1)); - - Signature sig = _ethereumEcdsa.Sign(signer, Keccak.Compute(code)); - - return new AuthorizationTuple(chainId, codeAddress, nonce, sig, signer.Address); - } - } - - // [Benchmark] - // public void Build1Tuples() - // { - // sut.InsertFromAuthorizations(_stateProvider, Tuples1, _accessedAddresses, _spec); - // } - // - // [Benchmark] - // public void Build5Tuples() - // { - // sut.InsertFromAuthorizations(_stateProvider, Tuples5, _accessedAddresses, _spec); - // } - // - // [Benchmark] - // public void Build10Tuples() - // { - // sut.InsertFromAuthorizations(_stateProvider, Tuples10, _accessedAddresses, _spec); - // } - // - // [Benchmark] - // public void Build100Tuples() - // { - // sut.InsertFromAuthorizations(_stateProvider, Tuples100, _accessedAddresses, _spec); - // } -} diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs index 83f64a15ddb..d2a3952e8f0 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs @@ -257,7 +257,7 @@ private IComparer CreateTxPoolTxComparer(TxPriorityContract? txPrio return CreateTxPoolTxComparer(); } - protected override TxPool.TxPool CreateTxPool(IWorldState worldState, CodeInfoRepository codeInfoRepository) + protected override TxPool.TxPool CreateTxPool(CodeInfoRepository codeInfoRepository) { // This has to be different object than the _processingReadOnlyTransactionProcessorSource as this is in separate thread TxPriorityContract txPriorityContract = TxAuRaFilterBuilders.CreateTxPrioritySources(_api); diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index 48038f2489a..e85f6e6a764 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -78,19 +78,7 @@ public void RecoverData(Block block) Address sender = poolTx?.SenderAddress; if (sender is not null) { - tx.SenderAddress = sender; - - if (tx.HasAuthorizationList) - { - for (int i = 0; i < tx.AuthorizationList.Length; i++) - { - AuthorizationTuple tuple = tx.AuthorizationList[i]; - if (tuple.Authority is null) - { - tuple.Authority = poolTx.AuthorizationList[i].Authority; - } - } - } + tx.SenderAddress = sender; if (_logger.IsTrace) _logger.Trace($"Recovered {tx.SenderAddress} sender for {tx.Hash} (tx pool cached value: {sender})"); } @@ -98,6 +86,21 @@ public void RecoverData(Block block) { recoverFromEcdsa++; } + + if (tx.HasAuthorizationList) + { + for (int i = 0; i < tx.AuthorizationList.Length; i++) + { + if (poolTx.AuthorizationList[i].Authority is not null) + { + tx.AuthorizationList[i].Authority = poolTx.AuthorizationList[i].Authority; + } + else + { + recoverFromEcdsa++; + } + } + } } if (recoverFromEcdsa == 0) diff --git a/src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs index f5ad8f9ef30..c9c40c8dcd1 100644 --- a/src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Linq; using Nethermind.Core; using Nethermind.Core.Specs; using Nethermind.Crypto; @@ -42,7 +43,7 @@ public IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); var result = tracer.ReturnValue; if (result == null || result.Length == 0) - return Array.Empty(); + return Enumerable.Empty(); return ParseResult(tracer.ReturnValue); } diff --git a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs index b2fc7b5bb59..62754cb2fb2 100644 --- a/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs +++ b/src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs @@ -59,7 +59,7 @@ protected virtual Task InitBlockchain() IStateReader stateReader = setApi.StateReader!; PreBlockCaches? preBlockCaches = (_api.WorldState as IPreBlockCaches)?.Caches; CodeInfoRepository codeInfoRepository = new(preBlockCaches?.PrecompileCache); - ITxPool txPool = _api.TxPool = CreateTxPool(_api.WorldState!, codeInfoRepository); + ITxPool txPool = _api.TxPool = CreateTxPool(codeInfoRepository); ReceiptCanonicalityMonitor receiptCanonicalityMonitor = new(getApi.ReceiptStorage, _api.LogManager); getApi.DisposeStack.Push(receiptCanonicalityMonitor); @@ -200,7 +200,7 @@ protected virtual IHealthHintService CreateHealthHintService() => protected virtual IBlockProductionPolicy CreateBlockProductionPolicy() => new BlockProductionPolicy(_api.Config()); - protected virtual TxPool.TxPool CreateTxPool(IWorldState worldState, CodeInfoRepository codeInfoRepository) => + protected virtual TxPool.TxPool CreateTxPool(CodeInfoRepository codeInfoRepository) => new(_api.EthereumEcdsa!, _api.BlobTxStorage ?? NullBlobTxStorage.Instance, new ChainHeadInfoProvider(_api.SpecProvider!, _api.BlockTree!, _api.StateReader!, codeInfoRepository), diff --git a/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs b/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs index 61560c6dc8a..16c2e6b8cf8 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismEthereumEcdsa.cs @@ -18,28 +18,7 @@ public OptimismEthereumEcdsa(IEthereumEcdsa ethereumEcdsa) { _ethereumEcdsa = ethereumEcdsa; } - - public void Sign(PrivateKey privateKey, Transaction tx, bool isEip155Enabled = true) => _ethereumEcdsa.Sign(privateKey, tx, isEip155Enabled); - - public Address? RecoverAddress(Transaction tx, bool useSignatureChainId = false) - { - if (tx.Signature is null && tx.IsOPSystemTransaction) - { - return Address.Zero; - } - return _ethereumEcdsa.RecoverAddress(tx, useSignatureChainId); - } - public Address? RecoverAddress(Signature signature, Hash256 message) => _ethereumEcdsa.RecoverAddress(signature, message); public Address? RecoverAddress(Span signatureBytes, Hash256 message) => _ethereumEcdsa.RecoverAddress(signatureBytes, message); - - public bool Verify(Address sender, Transaction tx) => _ethereumEcdsa.Verify(sender, tx); - - public Address? RecoverAddress(AuthorizationTuple tuple) => _ethereumEcdsa.RecoverAddress(tuple); - - public AuthorizationTuple Sign(PrivateKey authority, ulong chainId, Address codeAddress, ulong nonce) - { - return _ethereumEcdsa.Sign(authority, chainId, codeAddress, nonce); - } } From 0800ee304f45355751e73f7c4f4d348799ac3b12 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 4 Oct 2024 13:48:34 +0200 Subject: [PATCH 468/551] use existing nulltxpool --- .../Core/RecoverSignaturesBenchmark.cs | 104 +----------------- 1 file changed, 1 insertion(+), 103 deletions(-) diff --git a/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs index 6a76a9c5e52..0b7655985fe 100644 --- a/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Core/RecoverSignaturesBenchmark.cs @@ -41,7 +41,7 @@ public class RecoverSignaturesBenchmark public void GlobalSetup() { _ethereumEcdsa = new(_specProvider.ChainId); - _sut = new(_ethereumEcdsa, new AlwaysReturnNullTxPool(), _specProvider, NullLogManager.Instance); + _sut = new(_ethereumEcdsa, NullTxPool.Instance, _specProvider, NullLogManager.Instance); var rnd = new Random(); @@ -199,107 +199,5 @@ public void Recover10TxSignaturesWith0AuthoritySignatures() { _sut.RecoverData(_block10TxWith0AuthSigs); } - - private class AlwaysReturnNullTxPool : ITxPool - { -#pragma warning disable 67 - public event EventHandler NewDiscovered; - public event EventHandler NewPending; - public event EventHandler RemovedPending; - public event EventHandler EvictedPending; - public event EventHandler TxPoolHeadChanged; -#pragma warning restore 67 - - public void AddPeer(ITxPoolPeer peer) - { - throw new NotImplementedException(); - } - - public bool ContainsTx(Hash256 hash, TxType txType) - { - throw new NotImplementedException(); - } - - public Transaction GetBestTx() - { - throw new NotImplementedException(); - } - - public IEnumerable GetBestTxOfEachSender() - { - throw new NotImplementedException(); - } - - public UInt256 GetLatestPendingNonce(Address address) - { - throw new NotImplementedException(); - } - - public int GetPendingBlobTransactionsCount() - { - throw new NotImplementedException(); - } - - public IDictionary GetPendingLightBlobTransactionsBySender() - { - throw new NotImplementedException(); - } - - public Transaction[] GetPendingTransactions() - { - throw new NotImplementedException(); - } - - public IDictionary GetPendingTransactionsBySender() - { - throw new NotImplementedException(); - } - - public Transaction[] GetPendingTransactionsBySender(Address address) - { - throw new NotImplementedException(); - } - - public int GetPendingTransactionsCount() - { - throw new NotImplementedException(); - } - - public bool IsKnown(Hash256 hash) - { - throw new NotImplementedException(); - } - - public void RemovePeer(PublicKey nodeId) - { - throw new NotImplementedException(); - } - - public bool RemoveTransaction(Hash256 hash) - { - throw new NotImplementedException(); - } - - public AcceptTxResult SubmitTx(Transaction tx, TxHandlingOptions handlingOptions) - { - throw new NotImplementedException(); - } - - public bool TryGetBlobAndProof(byte[] blobVersionedHash, [NotNullWhen(true)] out byte[] blob, [NotNullWhen(true)] out byte[] proof) - { - throw new NotImplementedException(); - } - - public bool TryGetPendingBlobTransaction(Hash256 hash, [NotNullWhen(true)] out Transaction blobTransaction) - { - throw new NotImplementedException(); - } - - public bool TryGetPendingTransaction(Hash256 hash, [NotNullWhen(true)] out Transaction transaction) - { - transaction = null; - return false; - } - } } } From 7b51ea193c120e25d4a37a95a66b158a3436b4f4 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 4 Oct 2024 13:52:59 +0200 Subject: [PATCH 469/551] format --- .../Nethermind.Consensus/Processing/RecoverSignature.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs index e85f6e6a764..1799871edd7 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/RecoverSignature.cs @@ -78,7 +78,7 @@ public void RecoverData(Block block) Address sender = poolTx?.SenderAddress; if (sender is not null) { - tx.SenderAddress = sender; + tx.SenderAddress = sender; if (_logger.IsTrace) _logger.Trace($"Recovered {tx.SenderAddress} sender for {tx.Hash} (tx pool cached value: {sender})"); } From 03db79c65fab2f22a9c99e5749711a540fe21e72 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 4 Oct 2024 14:10:12 +0200 Subject: [PATCH 470/551] cosmetic --- .../Nethermind.Evm.Test/CodeInfoRepositoryTests.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs index 7bb81c5a729..f83b9b9846d 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeInfoRepositoryTests.cs @@ -62,7 +62,7 @@ public static IEnumerable NotDelegationCodeCases() }; } [TestCaseSource(nameof(NotDelegationCodeCases))] - public void IsDelegation_CodeIsNotDelegation_ReturnsFalse(byte[] code) + public void TryGetDelegation_CodeIsNotDelegation_ReturnsFalse(byte[] code) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); @@ -92,7 +92,7 @@ public static IEnumerable DelegationCodeCases() }; } [TestCaseSource(nameof(DelegationCodeCases))] - public void IsDelegation_CodeIsDelegation_ReturnsTrue(byte[] code) + public void TryGetDelegation_CodeTryGetDelegation_ReturnsTrue(byte[] code) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); @@ -106,7 +106,7 @@ public void IsDelegation_CodeIsDelegation_ReturnsTrue(byte[] code) } [TestCaseSource(nameof(DelegationCodeCases))] - public void IsDelegation_CodeIsDelegation_CorrectDelegationAddressIsSet(byte[] code) + public void TryGetDelegation_CodeTryGetDelegation_CorrectDelegationAddressIsSet(byte[] code) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); @@ -123,7 +123,7 @@ public void IsDelegation_CodeIsDelegation_CorrectDelegationAddressIsSet(byte[] c } [TestCaseSource(nameof(DelegationCodeCases))] - public void GetCodeHash_CodeIsDelegation_ReturnsHashOfDelegated(byte[] code) + public void GetExecutableCodeHash_CodeTryGetDelegation_ReturnsHashOfDelegated(byte[] code) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); @@ -142,7 +142,7 @@ public void GetCodeHash_CodeIsDelegation_ReturnsHashOfDelegated(byte[] code) } [TestCaseSource(nameof(NotDelegationCodeCases))] - public void GetCodeHash_CodeIsNotDelegation_ReturnsCodeHashOfAddress(byte[] code) + public void GetExecutableCodeHash_CodeIsNotDelegation_ReturnsCodeHashOfAddress(byte[] code) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); @@ -157,7 +157,7 @@ public void GetCodeHash_CodeIsNotDelegation_ReturnsCodeHashOfAddress(byte[] code } [TestCaseSource(nameof(DelegationCodeCases))] - public void GetCachedCodeInfo_CodeIsDelegation_ReturnsCodeOfDelegation(byte[] code) + public void GetCachedCodeInfo_CodeTryGetDelegation_ReturnsCodeOfDelegation(byte[] code) { IDb stateDb = new MemDb(); IDb codeDb = new MemDb(); From 86d8135467ed4bec54350ca58e141e0209b35f5f Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Sat, 5 Oct 2024 16:58:27 +0530 Subject: [PATCH 471/551] add flat encoding and requests as a side car --- .../ExecutionRequestProcessor.cs | 143 ++++++++++++++++++ .../IExecutionRequestProcessor.cs | 15 ++ .../Messages/BlockErrorMessages.cs | 2 +- .../Processing/BlockProcessor.cs | 13 +- .../Requests/ConsensusRequestsProcessor.cs | 39 ----- .../Requests/ConsolidationRequestProcessor.cs | 44 ------ .../Requests/DepositsProcessor.cs | 55 ------- .../Requests/IConsensusRequestsProcessor.cs | 13 -- .../Requests/IDepositsProcessor.cs | 14 -- .../Requests/IRequestProcessor.cs | 14 -- .../Requests/RequestProcessor.cs | 52 ------- .../Requests/WithdrawalRequestsProcessor.cs | 46 ------ .../Validators/BlockValidator.cs | 91 +---------- src/Nethermind/Nethermind.Core/Block.cs | 16 +- src/Nethermind/Nethermind.Core/BlockHeader.cs | 12 +- .../ConsensusRequests/ConsensusRequest.cs | 78 ---------- .../ConsensusRequests/ConsolidationRequest.cs | 31 ---- .../ConsensusRequests/Deposit.cs | 36 ----- .../ConsensusRequests/WithdrawalRequest.cs | 33 ---- .../ExecutionRequest/ExecutionRequest.cs | 61 ++++++++ .../Data/ExecutionPayload.cs | 24 +-- .../Data/ExecutionPayloadV4.cs | 73 +-------- .../Data/GetPayloadV4Result.cs | 9 +- .../EngineRpcModule.Prague.cs | 26 ++-- .../EngineRpcModule.cs | 4 - .../Handlers/GetPayloadV4Handler.cs | 2 +- .../IEngineRpcModule.Prague.cs | 15 +- .../Nethermind.Merge.Plugin/MergePlugin.cs | 2 - .../BlockDecoder.cs | 102 +------------ .../ConsensusRequestDecoder.cs | 130 ---------------- .../ConsolidationRequestDecoder.cs | 58 ------- .../DepositDecoder.cs | 89 ----------- .../HeaderDecoder.cs | 10 +- .../WithdrawalRequestDecoder.cs | 67 -------- .../Nethermind.State/Proofs/RequestsTrie.cs | 35 ----- 35 files changed, 290 insertions(+), 1164 deletions(-) create mode 100644 src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs create mode 100644 src/Nethermind/Nethermind.Consensus/ExecutionRequests/IExecutionRequestProcessor.cs delete mode 100644 src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs delete mode 100644 src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs delete mode 100644 src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs delete mode 100644 src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs delete mode 100644 src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs delete mode 100644 src/Nethermind/Nethermind.Consensus/Requests/IRequestProcessor.cs delete mode 100644 src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs delete mode 100644 src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs delete mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs delete mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs delete mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs delete mode 100644 src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs create mode 100644 src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs delete mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs delete mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs delete mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs delete mode 100644 src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs delete mode 100644 src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs new file mode 100644 index 00000000000..addcfc859de --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -0,0 +1,143 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Collections.Generic; +using System.Linq; +using Nethermind.Abi; +using Nethermind.Core; +using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Crypto; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; +using Nethermind.State; + +namespace Nethermind.Consensus.ExecutionRequests; + +public class ExecutionRequestsProcessor(ITransactionProcessor transactionProcessor) : IExecutionRequestProcessor +{ + private readonly AbiSignature _depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); + private readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; + private const int depositRequestsBytesSize = 48 + 32 + 8 + 96 + 8; + private const int withdrawalRequestsBytesSize = 20 + 48 + 8; + private const int consolidationRequestsBytesSize = 20 + 48 + 48; + + private const long GasLimit = 30_000_000L; + + public IEnumerable ProcessDeposits(TxReceipt[] receipts, IReleaseSpec spec) + { + if (!spec.DepositsEnabled) + yield break; + + for (int i = 0; i < receipts.Length; i++) + { + LogEntry[]? logEntries = receipts[i].Logs; + if (logEntries is not null) + { + for (var j = 0; j < logEntries.Length; j++) + { + LogEntry log = logEntries[j]; + if (log.LoggersAddress == spec.DepositContractAddress) + { + yield return DecodeDepositRequest(log); + } + } + } + } + } + + private ExecutionRequest DecodeDepositRequest(LogEntry log) + { + object[] result = _abiEncoder.Decode(AbiEncodingStyle.None, _depositEventABI, log.Data); + List flattenedResult = new List(); + + foreach (var item in result) + { + if (item is byte[] byteArray) + { + flattenedResult.AddRange(byteArray); + } + else + { + throw new InvalidOperationException("Decoded ABI result contains non-byte array elements."); + } + } + + // make sure the flattened result is of the correct size + if (flattenedResult.Count != depositRequestsBytesSize) + { + throw new InvalidOperationException($"Decoded ABI result has incorrect size. Expected {depositRequestsBytesSize} bytes, got {flattenedResult.Count} bytes."); + } + + return new ExecutionRequest + { + RequestType = (byte)ExecutionRequestType.Deposit, + RequestData = flattenedResult.ToArray() + }; + } + + + private IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec, Address contractAddress) + { + bool IsWithdrawalRequests = contractAddress == spec.Eip7002ContractAddress; + + int requestBytesSize = IsWithdrawalRequests ? withdrawalRequestsBytesSize : consolidationRequestsBytesSize; + + if (!(IsWithdrawalRequests ? spec.WithdrawalRequestsEnabled : spec.ConsolidationRequestsEnabled)) + yield break; + + if (!state.AccountExists(contractAddress)) + yield break; + + CallOutputTracer tracer = new(); + + Transaction? transaction = new() + { + Value = UInt256.Zero, + Data = Array.Empty(), + To = contractAddress, + SenderAddress = Address.SystemUser, + GasLimit = GasLimit, + GasPrice = UInt256.Zero, + }; + transaction.Hash = transaction.CalculateHash(); + + transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); + var result = tracer.ReturnValue; + if (result == null || result.Length == 0) + yield break; + + int requestCount = result.Length / requestBytesSize; + + for (int i = 0; i < requestCount; i++) + { + int offset = i * requestBytesSize; + yield return new ExecutionRequest + { + RequestType = (byte)(IsWithdrawalRequests ? ExecutionRequestType.WithdrawalRequest : ExecutionRequestType.ConsolidationRequest), + RequestData = result.Slice(offset, requestBytesSize).ToArray() + }; + } + + } + + public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) + { + if (!spec.RequestsEnabled) + return; + + List requests = + [ + .. ProcessDeposits(receipts, spec), + .. ReadRequests(block, state, spec, spec.Eip7002ContractAddress), + .. ReadRequests(block, state, spec, spec.Eip7251ContractAddress), + ]; + block.Header.RequestsHash = requests.ToArray().CalculateRoot(); + block.ExecutionRequests = requests.ToArray(); + } +} diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/IExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/IExecutionRequestProcessor.cs new file mode 100644 index 00000000000..82ba3149ed9 --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/IExecutionRequestProcessor.cs @@ -0,0 +1,15 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System.Collections.Generic; +using Nethermind.Core; +using Nethermind.Core.ExecutionRequest; +using Nethermind.Core.Specs; +using Nethermind.State; + +namespace Nethermind.Consensus.ExecutionRequests; + +public interface IExecutionRequestProcessor +{ + public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec); +} diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index b40be7bc3aa..76aadc4cd71 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -120,6 +120,6 @@ public static string InvalidTxInBlock(int i) => public static string MissingRequests => "MissingRequests: Requests cannot be null in block when EIP-6110 or EIP-7002 are activated."; public static string RequestsNotEnabled => "RequestsNotEnabled: Requests must be null in block when EIP-6110 and EIP-7002 are not activated."; - public static string InvalidRequestsRoot(Hash256? expected, Hash256? actual) => $"InvalidRequestsRoot: Requests root hash mismatch in block: expected {expected}, got {actual}"; + public static string InvalidRequestsHash(Hash256? expected, Hash256? actual) => $"InvalidRequestsHash: Requests root hash mismatch in block: expected {expected}, got {actual}"; public static string InvalidRequestsOrder => "InvalidRequestsOrder: Requests are not in the correct order in block."; } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index a152ed5e551..e867db92bf2 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -12,13 +12,14 @@ using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Blockchain.Blocks; using Nethermind.Blockchain.Receipts; -using Nethermind.Consensus.Requests; +using Nethermind.Consensus.ExecutionRequests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Eip2930; +using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Evm; @@ -46,7 +47,7 @@ public partial class BlockProcessor( IWithdrawalProcessor? withdrawalProcessor = null, IReceiptsRootCalculator? receiptsRootCalculator = null, IBlockCachePreWarmer? preWarmer = null, - IConsensusRequestsProcessor? consensusRequestsProcessor = null) + IExecutionRequestProcessor? executionRequestProcessor = null) : IBlockProcessor { private readonly ILogger _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); @@ -60,8 +61,7 @@ public partial class BlockProcessor( private readonly IRewardCalculator _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); private readonly IBlockProcessor.IBlockTransactionsExecutor _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); private readonly IBlockhashStore _blockhashStore = blockHashStore ?? throw new ArgumentNullException(nameof(blockHashStore)); - - private readonly IConsensusRequestsProcessor _consensusRequestsProcessor = consensusRequestsProcessor ?? new ConsensusRequestsProcessor(transactionProcessor); + private readonly IExecutionRequestProcessor _executionRequestProcessor = executionRequestProcessor ?? new ExecutionRequestsProcessor(transactionProcessor); private Task _clearTask = Task.CompletedTask; private const int MaxUncommittedBlocks = 64; @@ -307,7 +307,8 @@ protected virtual TxReceipt[] ProcessBlock( header.ReceiptsRoot = _receiptsRootCalculator.GetReceiptsRoot(receipts, spec, block.ReceiptsRoot); ApplyMinerRewards(block, blockTracer, spec); _withdrawalProcessor.ProcessWithdrawals(block, spec); - _consensusRequestsProcessor.ProcessRequests(block, _stateProvider, receipts, spec); + + _executionRequestProcessor.ProcessExecutionRequests(block, _stateProvider, receipts, spec); ReceiptsTracer.EndBlockTrace(); @@ -389,7 +390,7 @@ private Block PrepareBlockForProcessing(Block suggestedBlock) ReceiptsRoot = bh.ReceiptsRoot, BaseFeePerGas = bh.BaseFeePerGas, WithdrawalsRoot = bh.WithdrawalsRoot, - RequestsRoot = bh.RequestsRoot, + RequestsHash = bh.RequestsHash, IsPostMerge = bh.IsPostMerge, ParentBeaconBlockRoot = bh.ParentBeaconBlockRoot }; diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs deleted file mode 100644 index cbc155d1d9c..00000000000 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsensusRequestsProcessor.cs +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Collections.Generic; -using System.Linq; -using Nethermind.Core; -using Nethermind.Core.Collections; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Crypto; -using Nethermind.Core.Specs; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.State; -using Nethermind.State.Proofs; - -namespace Nethermind.Consensus.Requests; - -public class ConsensusRequestsProcessor(ITransactionProcessor transactionProcessor) : IConsensusRequestsProcessor -{ - private readonly ConsolidationRequestsProcessor _consolidationRequestsProcessor = new(transactionProcessor); - private readonly WithdrawalRequestsProcessor _withdrawalRequestsProcessor = new(transactionProcessor); - private readonly IDepositsProcessor _depositsProcessor = new DepositsProcessor(); - - public void ProcessRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) - { - if (!spec.RequestsEnabled) - return; - - using ArrayPoolList requestsList = new(receipts.Length * 2); - - requestsList.AddRange(_depositsProcessor.ProcessDeposits(block, receipts, spec)); - requestsList.AddRange(_withdrawalRequestsProcessor.ReadRequests(block, state, spec)); - requestsList.AddRange(_consolidationRequestsProcessor.ReadRequests(block, state, spec)); - - ConsensusRequest[] requests = requestsList.ToArray(); - Hash256 root = new RequestsTrie(requests).RootHash; - block.Body.Requests = requests; - block.Header.RequestsRoot = root; - } -} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs deleted file mode 100644 index 9d18024b080..00000000000 --- a/src/Nethermind/Nethermind.Consensus/Requests/ConsolidationRequestProcessor.cs +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Specs; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.State; - -namespace Nethermind.Consensus.Requests; - -// https://eips.ethereum.org/EIPS/eip-7251#block-processing -public class ConsolidationRequestsProcessor(ITransactionProcessor transactionProcessor) : RequestProcessor(transactionProcessor), IRequestProcessor -{ - private const int SizeOfClass = 20 + 48 + 48; - - public IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec) - { - return base.ReadRequests(block, state, spec, spec.Eip7251ContractAddress); - } - protected override bool IsEnabledInSpec(IReleaseSpec spec) - { - return spec.ConsolidationRequestsEnabled; - } - protected override IEnumerable ParseResult(Memory result) - { - int count = result.Length / SizeOfClass; - - for (int i = 0; i < count; ++i) - { - int offset = i * SizeOfClass; - ConsolidationRequest request = new() - { - SourceAddress = new Address(result.Slice(offset, 20).ToArray()), - SourcePubkey = result.Slice(offset + 20, 48), - TargetPubkey = result.Slice(offset + 68, 48) - }; - - yield return request; - } - } -} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs deleted file mode 100644 index 79e37ef79cc..00000000000 --- a/src/Nethermind/Nethermind.Consensus/Requests/DepositsProcessor.cs +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using Nethermind.Abi; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Specs; - -namespace Nethermind.Consensus.Requests; - -public class DepositsProcessor : IDepositsProcessor -{ - private readonly AbiSignature _depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); - private readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; - - public IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec) - { - if (!spec.DepositsEnabled) - { - yield break; - } - - for (int i = 0; i < receipts.Length; i++) - { - LogEntry[]? logEntries = receipts[i].Logs; - if (logEntries is not null) - { - for (var j = 0; j < logEntries.Length; j++) - { - LogEntry log = logEntries[j]; - if (log.LoggersAddress == spec.DepositContractAddress) - { - yield return DecodeDeposit(log); - } - } - } - } - - Deposit DecodeDeposit(LogEntry log) - { - object[] result = _abiEncoder.Decode(AbiEncodingStyle.None, _depositEventABI, log.Data); - - return new Deposit - { - Pubkey = (byte[])result[0], - WithdrawalCredentials = (byte[])result[1], - Amount = BitConverter.ToUInt64((byte[])result[2], 0), - Signature = (byte[])result[3], - Index = BitConverter.ToUInt64((byte[])result[4], 0) - }; - } - } -} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs deleted file mode 100644 index 00ead1e8647..00000000000 --- a/src/Nethermind/Nethermind.Consensus/Requests/IConsensusRequestsProcessor.cs +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core; -using Nethermind.Core.Specs; -using Nethermind.State; - -namespace Nethermind.Consensus.Requests; - -public interface IConsensusRequestsProcessor -{ - void ProcessRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec); -} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs deleted file mode 100644 index f73cdaa4556..00000000000 --- a/src/Nethermind/Nethermind.Consensus/Requests/IDepositsProcessor.cs +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Collections.Generic; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Specs; - -namespace Nethermind.Consensus.Requests; - -public interface IDepositsProcessor -{ - IEnumerable ProcessDeposits(Block block, TxReceipt[] receipts, IReleaseSpec spec); -} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/IRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/IRequestProcessor.cs deleted file mode 100644 index 6f33453fdfb..00000000000 --- a/src/Nethermind/Nethermind.Consensus/Requests/IRequestProcessor.cs +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core; -using Nethermind.Core.Specs; -using Nethermind.State; -using System.Collections.Generic; - -namespace Nethermind.Consensus.Requests; - -public interface IRequestProcessor -{ - IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec); -} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs deleted file mode 100644 index f5ad8f9ef30..00000000000 --- a/src/Nethermind/Nethermind.Consensus/Requests/RequestProcessor.cs +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using Nethermind.Core; -using Nethermind.Core.Specs; -using Nethermind.Crypto; -using Nethermind.Evm; -using Nethermind.Evm.Tracing; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.Int256; -using Nethermind.State; - -namespace Nethermind.Consensus.Requests; - -public abstract class RequestProcessor(ITransactionProcessor transactionProcessor) -{ - private const long GasLimit = 30_000_000L; - - public IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec, Address contractAddress) - { - if (!IsEnabledInSpec(spec)) - return Array.Empty(); - - if (!state.AccountExists(contractAddress)) - return Array.Empty(); - - CallOutputTracer tracer = new(); - - Transaction? transaction = new() - { - Value = UInt256.Zero, - Data = Array.Empty(), - To = contractAddress, - SenderAddress = Address.SystemUser, - GasLimit = GasLimit, - GasPrice = UInt256.Zero, - }; - transaction.Hash = transaction.CalculateHash(); - - transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); - var result = tracer.ReturnValue; - if (result == null || result.Length == 0) - return Array.Empty(); - return ParseResult(tracer.ReturnValue); - } - - - protected abstract bool IsEnabledInSpec(IReleaseSpec spec); - protected abstract IEnumerable ParseResult(Memory result); -} diff --git a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs b/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs deleted file mode 100644 index 86483add1a0..00000000000 --- a/src/Nethermind/Nethermind.Consensus/Requests/WithdrawalRequestsProcessor.cs +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Buffers.Binary; -using System.Collections.Generic; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Extensions; -using Nethermind.Core.Specs; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.State; - -namespace Nethermind.Consensus.Requests; - -// https://eips.ethereum.org/EIPS/eip-7002#block-processing -public class WithdrawalRequestsProcessor(ITransactionProcessor transactionProcessor) : RequestProcessor(transactionProcessor), IRequestProcessor -{ - private const int SizeOfClass = 20 + 48 + 8; - - public IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec) - { - return ReadRequests(block, state, spec, spec.Eip7002ContractAddress); - } - - protected override bool IsEnabledInSpec(IReleaseSpec spec) - { - return spec.WithdrawalRequestsEnabled; - } - - protected override IEnumerable ParseResult(Memory result) - { - int count = result.Length / SizeOfClass; - for (int i = 0; i < count; ++i) - { - int offset = i * SizeOfClass; - WithdrawalRequest request = new() - { - SourceAddress = new Address(result.Slice(offset, 20).AsArray()), - ValidatorPubkey = result.Slice(offset + 20, 48), - Amount = BinaryPrimitives.ReadUInt64BigEndian(result.Slice(offset + 68, 8).Span) - }; - yield return request; - } - } -} diff --git a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs index 1e3aa152eed..e76762d38da 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/BlockValidator.cs @@ -2,9 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; using System.Text; using Nethermind.Blockchain; using Nethermind.Consensus.Messages; @@ -15,7 +12,6 @@ using Nethermind.Evm; using Nethermind.Int256; using Nethermind.Logging; -using Nethermind.Serialization.Rlp; using Nethermind.State.Proofs; using Nethermind.TxPool; @@ -138,11 +134,6 @@ public bool ValidateSuggestedBlock(Block block, out string? errorMessage, bool v { return false; } - - if (!ValidateRequests(block, spec, out errorMessage)) - { - return false; - } } return true; @@ -221,10 +212,10 @@ public bool ValidateProcessedBlock(Block processedBlock, TxReceipt[] receipts, B error ??= BlockErrorMessages.InvalidParentBeaconBlockRoot; } - if (processedBlock.Header.RequestsRoot != suggestedBlock.Header.RequestsRoot) + if (processedBlock.Header.RequestsHash != suggestedBlock.Header.RequestsHash) { - if (_logger.IsWarn) _logger.Warn($"- requests root : expected {suggestedBlock.Header.RequestsRoot}, got {processedBlock.Header.RequestsRoot}"); - error ??= BlockErrorMessages.InvalidRequestsRoot(suggestedBlock.Header.RequestsRoot, processedBlock.Header.RequestsRoot); + if (_logger.IsWarn) _logger.Warn($"- requests root : expected {suggestedBlock.Header.RequestsHash}, got {processedBlock.Header.RequestsHash}"); + error ??= BlockErrorMessages.InvalidRequestsHash(suggestedBlock.Header.RequestsHash, processedBlock.Header.RequestsHash); } for (int i = 0; i < processedBlock.Transactions.Length; i++) @@ -283,65 +274,6 @@ private bool ValidateWithdrawals(Block block, IReleaseSpec spec, out string? err return true; } - public bool ValidateRequests(Block block, out string? error) => - ValidateRequests(block, _specProvider.GetSpec(block.Header), out error); - - private bool ValidateRequests(Block block, IReleaseSpec spec, out string? error) - { - if (spec.RequestsEnabled && block.Requests is null) - { - error = BlockErrorMessages.MissingRequests; - - if (_logger.IsWarn) _logger.Warn(error); - - return false; - } - - if (!spec.RequestsEnabled && block.Requests is not null) - { - error = BlockErrorMessages.RequestsNotEnabled; - - if (_logger.IsWarn) _logger.Warn(error); - - return false; - } - - if (!ValidateRequestsHashMatches(block, out Hash256 requestsRoot)) - { - error = BlockErrorMessages.InvalidRequestsRoot(block.Header.RequestsRoot, requestsRoot); - if (_logger.IsWarn) _logger.Warn($"DepositsRoot root hash mismatch in block {block.ToString(Block.Format.FullHashAndNumber)}: expected {block.Header.RequestsRoot}, got {requestsRoot}"); - - return false; - } - - // validate that the requests types are in ascending order - if (!ValidateRequestsOrder(block, out error)) - { - if (_logger.IsWarn) _logger.Warn(error); - return false; - } - - error = null; - return true; - } - - public static bool ValidateRequestsOrder(Block block, out string? error) - { - if (block.Requests is not null) - { - for (int i = 1; i < block.Requests.Length; i++) - { - if (block.Requests[i].Type < block.Requests[i - 1].Type) - { - error = BlockErrorMessages.InvalidRequestsOrder; - return false; - } - } - } - error = null; - return true; - } - private bool ValidateTransactions(Block block, IReleaseSpec spec, out string? errorMessage) { Transaction[] transactions = block.Transactions; @@ -426,8 +358,7 @@ private bool ValidateEip4844Fields(Block block, IReleaseSpec spec, out string? e public static bool ValidateBodyAgainstHeader(BlockHeader header, BlockBody toBeValidated) => ValidateTxRootMatchesTxs(header, toBeValidated, out _) && ValidateUnclesHashMatches(header, toBeValidated, out _) - && ValidateWithdrawalsHashMatches(header, toBeValidated, out _) - && ValidateRequestsHashMatches(header, toBeValidated, out _); + && ValidateWithdrawalsHashMatches(header, toBeValidated, out _); public static bool ValidateTxRootMatchesTxs(Block block, out Hash256 txRoot) => ValidateTxRootMatchesTxs(block.Header, block.Body, out txRoot); @@ -455,20 +386,6 @@ public static bool ValidateWithdrawalsHashMatches(BlockHeader header, BlockBody return (withdrawalsRoot = new WithdrawalTrie(body.Withdrawals).RootHash) == header.WithdrawalsRoot; } - public static bool ValidateRequestsHashMatches(Block block, out Hash256? requestsRoot) => - ValidateRequestsHashMatches(block.Header, block.Body, out requestsRoot); - - private static bool ValidateRequestsHashMatches(BlockHeader header, BlockBody body, out Hash256? requestsRoot) - { - if (body.Requests == null) - { - requestsRoot = null; - return header.RequestsRoot is null; - } - - return (requestsRoot = new RequestsTrie(body.Requests).RootHash) == header.RequestsRoot; - } - private static string Invalid(Block block) => $"Invalid block {block.ToString(Block.Format.FullHashAndNumber)}:"; } diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index b5d5049cccb..57ebf3b5726 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -4,10 +4,8 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; -using Nethermind.Core.ConsensusRequests; using System.Text.Json.Serialization; using Nethermind.Core.Collections; using System.Text.Unicode; @@ -29,11 +27,10 @@ public Block(BlockHeader header, BlockBody body) public Block(BlockHeader header, IEnumerable transactions, IEnumerable uncles, - IEnumerable? withdrawals = null, - IEnumerable? requests = null) + IEnumerable? withdrawals = null) { Header = header ?? throw new ArgumentNullException(nameof(header)); - Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray(), requests?.ToArray()); + Body = new(transactions.ToArray(), uncles.ToArray(), withdrawals?.ToArray()); } public Block(BlockHeader header) : this( @@ -41,8 +38,7 @@ public Block(BlockHeader header) : this( new( null, null, - header.WithdrawalsRoot is null ? null : Array.Empty(), - header.RequestsRoot is null ? null : Array.Empty()) + header.WithdrawalsRoot is null ? null : Array.Empty()) ) { } @@ -67,7 +63,6 @@ public Transaction[] Transactions public BlockHeader[] Uncles => Body.Uncles; // do not add setter here public Withdrawal[]? Withdrawals => Body.Withdrawals; // do not add setter here - public ConsensusRequest[]? Requests => Body.Requests; // do not add setter here public Hash256? Hash => Header.Hash; // do not add setter here @@ -120,7 +115,10 @@ public Transaction[] Transactions public Hash256? WithdrawalsRoot => Header.WithdrawalsRoot; // do not add setter here public Hash256? ParentBeaconBlockRoot => Header.ParentBeaconBlockRoot; // do not add setter here - public Hash256? RequestsRoot => Header.RequestsRoot; // do not add setter here + public Hash256? RequestsHash => Header.RequestsHash; // do not add setter here + + [JsonIgnore] + public ExecutionRequest.ExecutionRequest[]? ExecutionRequests { get; set; } [JsonIgnore] public ArrayPoolList? AccountChanges { get; set; } diff --git a/src/Nethermind/Nethermind.Core/BlockHeader.cs b/src/Nethermind/Nethermind.Core/BlockHeader.cs index 1ddd19503b9..e0331c5a04f 100644 --- a/src/Nethermind/Nethermind.Core/BlockHeader.cs +++ b/src/Nethermind/Nethermind.Core/BlockHeader.cs @@ -28,7 +28,7 @@ public BlockHeader( ulong? blobGasUsed = null, ulong? excessBlobGas = null, Hash256? parentBeaconBlockRoot = null, - Hash256? requestsRoot = null) + Hash256? requestsHash = null) { ParentHash = parentHash; UnclesHash = unclesHash; @@ -39,7 +39,7 @@ public BlockHeader( Timestamp = timestamp; ExtraData = extraData; ParentBeaconBlockRoot = parentBeaconBlockRoot; - RequestsRoot = requestsRoot; + RequestsHash = requestsHash; BlobGasUsed = blobGasUsed; ExcessBlobGas = excessBlobGas; } @@ -72,13 +72,13 @@ public BlockHeader( public UInt256 BaseFeePerGas { get; set; } public Hash256? WithdrawalsRoot { get; set; } public Hash256? ParentBeaconBlockRoot { get; set; } - public Hash256? RequestsRoot { get; set; } + public Hash256? RequestsHash { get; set; } public ulong? BlobGasUsed { get; set; } public ulong? ExcessBlobGas { get; set; } public bool HasBody => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash) || (UnclesHash is not null && UnclesHash != Keccak.OfAnEmptySequenceRlp) || (WithdrawalsRoot is not null && WithdrawalsRoot != Keccak.EmptyTreeHash) - || (RequestsRoot is not null && RequestsRoot != Keccak.EmptyTreeHash); + || (RequestsHash is not null && RequestsHash != Keccak.EmptyTreeHash); public bool HasTransactions => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash); @@ -119,9 +119,9 @@ public string ToString(string indent) } builder.AppendLine($"{indent}IsPostMerge: {IsPostMerge}"); builder.AppendLine($"{indent}TotalDifficulty: {TotalDifficulty}"); - if (RequestsRoot is not null) + if (RequestsHash is not null) { - builder.AppendLine($"{indent}RequestsRoot: {RequestsRoot}"); + builder.AppendLine($"{indent}RequestsHash: {RequestsHash}"); } return builder.ToString(); diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs deleted file mode 100644 index e9e5f6d38e1..00000000000 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsensusRequest.cs +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - - -using System; -using System.Text.Json.Serialization; - -namespace Nethermind.Core.ConsensusRequests; - -public enum ConsensusRequestsType : byte -{ - Deposit = 0, - WithdrawalRequest = 1, - ConsolidationRequest = 2 -} - -public abstract class ConsensusRequest -{ - [JsonIgnore] - public ConsensusRequestsType Type { get; protected set; } -} - -public static class ConsensusRequestExtensions -{ - public static (int depositCount, int withdrawalRequestCount, int consolidationRequestCount) GetTypeCounts(this ConsensusRequest[]? requests) - { - int depositCount = 0; - int withdrawalRequestCount = 0; - int consolidationRequestCount = 0; - int length = requests?.Length ?? 0; - for (int i = 0; i < length; i++) - { - if (requests![i].Type == ConsensusRequestsType.Deposit) - { - depositCount++; - } - else if (requests[i].Type == ConsensusRequestsType.WithdrawalRequest) - { - withdrawalRequestCount++; - } - else - { - consolidationRequestCount++; - } - } - - return (depositCount, withdrawalRequestCount, consolidationRequestCount); - } - - public static (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests, ConsolidationRequest[]? consolidationRequests) SplitRequests(this ConsensusRequest[]? requests) - { - if (requests is null) return (null, null, null); - (int depositCount, int withdrawalRequestCount, int consolidationRequestCount) = requests.GetTypeCounts(); - Deposit[] deposits = new Deposit[depositCount]; - WithdrawalRequest[] withdrawalRequests = new WithdrawalRequest[withdrawalRequestCount]; - ConsolidationRequest[] consolidationRequests = new ConsolidationRequest[consolidationRequestCount]; - int depositIndex = 0; - int withdrawalRequestIndex = 0; - int consolidationRequestIndex = 0; - for (int i = 0; i < requests.Length; i++) - { - if (requests[i].Type == ConsensusRequestsType.Deposit) - { - deposits[depositIndex++] = (Deposit)requests[i]; - } - else if (requests[i].Type == ConsensusRequestsType.WithdrawalRequest) - { - withdrawalRequests[withdrawalRequestIndex++] = (WithdrawalRequest)requests[i]; - } - else - { - consolidationRequests[consolidationRequestIndex++] = (ConsolidationRequest)requests[i]; - } - } - - return (deposits, withdrawalRequests, consolidationRequests); - } -} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs deleted file mode 100644 index abf79b924a1..00000000000 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/ConsolidationRequest.cs +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only -using System; -using Nethermind.Core.Extensions; - -namespace Nethermind.Core.ConsensusRequests; - -/// -/// Represents a Deposit that has been validated at the consensus layer. -/// -public class ConsolidationRequest : ConsensusRequest -{ - public ConsolidationRequest() - { - Type = ConsensusRequestsType.ConsolidationRequest; - } - public Address? SourceAddress { get; set; } - public Memory? SourcePubkey { get; set; } - - public Memory? TargetPubkey { get; set; } - - public override string ToString() => ToString(string.Empty); - - public string ToString(string indentation) => @$"{indentation}{nameof(ConsolidationRequest)} - {{ {nameof(SourceAddress)}: {SourceAddress}, - {nameof(SourcePubkey)}: {SourcePubkey?.Span.ToHexString()}, - {nameof(TargetPubkey)}: {TargetPubkey?.Span.ToHexString()}, - }}"; - - -} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs deleted file mode 100644 index 50b46fc27c2..00000000000 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/Deposit.cs +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core.Extensions; - -namespace Nethermind.Core.ConsensusRequests; - -/// -/// Represents a Deposit that has been validated at the consensus layer. -/// -public class Deposit : ConsensusRequest -{ - public Deposit() - { - Type = ConsensusRequestsType.Deposit; - Amount = 0; - } - public Memory? Pubkey { get; set; } - public byte[]? WithdrawalCredentials { get; set; } - - public ulong Amount { get; set; } - - public byte[]? Signature { get; set; } - public ulong? Index { get; set; } - public override string ToString() => ToString(string.Empty); - - public string ToString(string indentation) => @$"{indentation}{nameof(Deposit)} - {{{nameof(Index)}: {Index}, - {nameof(WithdrawalCredentials)}: {WithdrawalCredentials?.ToHexString()}, - {nameof(Amount)}: {Amount}, - {nameof(Signature)}: {Signature?.ToHexString()}, - {nameof(Pubkey)}: {Pubkey?.Span.ToHexString()}}}"; - - -} diff --git a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs deleted file mode 100644 index f9d79f127c7..00000000000 --- a/src/Nethermind/Nethermind.Core/ConsensusRequests/WithdrawalRequest.cs +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core.Extensions; -using System.Text; - -namespace Nethermind.Core.ConsensusRequests; - -/// -/// Represents a Deposit that has been validated at the consensus layer. -/// -public class WithdrawalRequest : ConsensusRequest -{ - public WithdrawalRequest() - { - Type = ConsensusRequestsType.WithdrawalRequest; - Amount = 0; - } - public Address? SourceAddress { get; set; } - - public Memory? ValidatorPubkey { get; set; } - - public ulong Amount { get; set; } - public override string ToString() => ToString(string.Empty); - - public string ToString(string indentation) => @$"{indentation}{nameof(WithdrawalRequest)} - {{{nameof(SourceAddress)}: {SourceAddress}, - {nameof(ValidatorPubkey)}: {ValidatorPubkey?.Span.ToHexString()}, - {nameof(Amount)}: {Amount}}}"; - - -} diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs new file mode 100644 index 00000000000..f9fcec027a5 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -0,0 +1,61 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + + +using System; +using System.Collections.Generic; +using Nethermind.Core.Crypto; +using Nethermind.Core.Extensions; + +namespace Nethermind.Core.ExecutionRequest; + +public enum ExecutionRequestType : byte +{ + Deposit = 0, + WithdrawalRequest = 1, + ConsolidationRequest = 2 +} + +public class ExecutionRequest +{ + public byte RequestType { get; set; } + public byte[]? RequestData { get; set; } + + public byte[] FlatEncode() + { + byte[] encoded = new byte[RequestData!.Length + 1]; + encoded[0] = RequestType; + RequestData.CopyTo(encoded, 1); + return encoded; + } + + public override string ToString() => ToString(string.Empty); + + public string ToString(string indentation) => @$"{indentation}{nameof(ExecutionRequest)} + {{{nameof(RequestType)}: {RequestType}, + {nameof(RequestData)}: {RequestData?.ToHexString()}}}"; +} + +public static class ExecutionRequestExtensions +{ + public static byte[] FlatEncode(this ExecutionRequest[] requests) + { + List encoded = new(); + foreach (ExecutionRequest request in requests) + { + encoded.AddRange(request.FlatEncode()); + } + return encoded.ToArray(); + } + + public static Hash256 CalculateRoot(this ExecutionRequest[] requests) + { + byte[] Hashes = new byte[requests.Length * 32]; + for (int i = 0; i < requests.Length; i++) + { + Hash256 hash = new Hash256(requests[i].FlatEncode()); + hash.Bytes.CopyTo(Hashes.AsSpan(i * 32)); + } + return new Hash256(Hashes); + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index 61201fbaabc..83d0ebdb126 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -12,7 +12,7 @@ using Nethermind.Serialization.Rlp; using Nethermind.State.Proofs; using System.Text.Json.Serialization; -using Nethermind.Core.ConsensusRequests; +using Nethermind.Core.ExecutionRequest; namespace Nethermind.Merge.Plugin.Data; @@ -77,23 +77,11 @@ public byte[][] Transactions /// - /// Gets or sets a collection of as defined in - /// EIP-6110. + /// Gets or sets a collection of as defined in + /// EIP-7685. /// - public virtual Deposit[]? DepositRequests { get; set; } - - - /// - /// Gets or sets a collection of as defined in - /// EIP-7002. - /// - public virtual WithdrawalRequest[]? WithdrawalRequests { get; set; } - - /// - /// Gets or sets a collection of as defined in - /// EIP-7251. - /// - public virtual ConsolidationRequest[]? ConsolidationRequests { get; set; } + [JsonIgnore] + public virtual ExecutionRequest[]? ExecutionRequests { get; set; } /// @@ -252,7 +240,7 @@ public ValidationResult ValidateParams(IReleaseSpec spec, int version, out strin private int GetExecutionPayloadVersion() => this switch { - { DepositRequests: not null, WithdrawalRequests: not null, ConsolidationRequests: not null } => 4, + { ExecutionRequests: not null } => 4, { BlobGasUsed: not null } or { ExcessBlobGas: not null } or { ParentBeaconBlockRoot: not null } => 3, { Withdrawals: not null } => 2, _ => 1 diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs index e0d65da1215..dec34d95592 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs @@ -1,36 +1,20 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Runtime.InteropServices.JavaScript; using System.Text.Json.Serialization; using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Specs; using Nethermind.Int256; -using Nethermind.State.Proofs; namespace Nethermind.Merge.Plugin.Data; /// /// Represents an object mapping the ExecutionPayloadV4 structure of the beacon chain spec. /// -public class ExecutionPayloadV4 : ExecutionPayloadV3, IExecutionPayloadFactory +public class ExecutionPayloadV4 : ExecutionPayloadV3, IExecutionPayloadFactory { - protected new static TExecutionPayload Create(Block block) where TExecutionPayload : ExecutionPayloadV4, new() - { - TExecutionPayload executionPayload = ExecutionPayloadV3.Create(block); - ConsensusRequest[]? blockRequests = block.Requests; - (executionPayload.DepositRequests, executionPayload.WithdrawalRequests, executionPayload.ConsolidationRequests) = blockRequests?.SplitRequests() ?? ([], [], []); - return executionPayload; - } - - public new static ExecutionPayloadV4 Create(Block block) => Create(block); - public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? totalDifficulty = null) { if (!base.TryGetBlock(out block, totalDifficulty)) @@ -38,37 +22,7 @@ public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? return false; } - var depositsLength = DepositRequests?.Length ?? 0; - var withdrawalRequestsLength = WithdrawalRequests?.Length ?? 0; - var consolidationRequestsLength = ConsolidationRequests?.Length ?? 0; - var requestsCount = depositsLength + withdrawalRequestsLength + consolidationRequestsLength; - if (requestsCount > 0) - { - var requests = new ConsensusRequest[requestsCount]; - int i = 0; - for (; i < depositsLength; ++i) - { - requests[i] = DepositRequests![i]; - } - - for (; i < depositsLength + withdrawalRequestsLength; ++i) - { - requests[i] = WithdrawalRequests![i - depositsLength]; - } - - for (; i < requestsCount; ++i) - { - requests[i] = ConsolidationRequests![i - depositsLength - withdrawalRequestsLength]; - } - - block.Body.Requests = requests; - block.Header.RequestsRoot = new RequestsTrie(requests).RootHash; - } - else - { - block.Body.Requests = Array.Empty(); - block.Header.RequestsRoot = Keccak.EmptyTreeHash; - } + block.Header.RequestsHash = ExecutionRequests?.CalculateRoot(); return true; } @@ -79,23 +33,10 @@ public override bool ValidateFork(ISpecProvider specProvider) => && specProvider.GetSpec(BlockNumber, Timestamp).ConsolidationRequestsEnabled; /// - /// Gets or sets as defined in - /// EIP-6110. - /// - [JsonRequired] - public sealed override Deposit[]? DepositRequests { get; set; } - - /// - /// Gets or sets as defined in - /// EIP-7002. + /// Gets or sets as defined in + /// EIP-7685. /// - [JsonRequired] - public sealed override WithdrawalRequest[]? WithdrawalRequests { get; set; } + [JsonIgnore] + public sealed override ExecutionRequest[]? ExecutionRequests { get; set; } - /// - /// Gets or sets as defined in - /// EIP-7251. - /// - [JsonRequired] - public sealed override ConsolidationRequest[]? ConsolidationRequests { get; set; } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs index 4f13cf363bf..5db3bf94e95 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs @@ -2,8 +2,15 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Core.ExecutionRequest; using Nethermind.Int256; namespace Nethermind.Merge.Plugin.Data; -public class GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle) : GetPayloadV3Result(block, blockFees, blobsBundle); +public class GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle, ExecutionRequest[] ExecutionRequests) : GetPayloadV3Result(block, blockFees, blobsBundle) +{ + public ExecutionRequest[]? ExecutionRequests { get; } = ExecutionRequests; + + public override string ToString() => + $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}, ExecutionRequests : {ExecutionRequests?.FlatEncode()}}}"; +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs index a787498000e..9ccdb310f77 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs @@ -1,10 +1,10 @@ // SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only -using System.Collections.Generic; using System.Threading.Tasks; using Nethermind.Consensus; using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; using Nethermind.JsonRpc; using Nethermind.Merge.Plugin.Data; using Nethermind.Merge.Plugin.Handlers; @@ -13,20 +13,18 @@ namespace Nethermind.Merge.Plugin; public partial class EngineRpcModule : IEngineRpcModule { - private readonly IAsyncHandler _getPayloadHandlerV4; - - private readonly IHandler, IEnumerable> _executionGetPayloadBodiesByHashV2Handler; - private readonly IGetPayloadBodiesByRangeV2Handler _executionGetPayloadBodiesByRangeV2Handler; - - public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot) => - NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Prague); + IAsyncHandler _getPayloadHandlerV4; + + /// + /// Method parameter list is extended with parameter. + /// EIP-7685. + /// + public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, ExecutionRequest[]? ExecutionRequests) + { + executionPayload.ExecutionRequests = ExecutionRequests; + return NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Prague); + } public async Task> engine_getPayloadV4(byte[] payloadId) => await _getPayloadHandlerV4.HandleAsync(payloadId); - - public ResultWrapper> engine_getPayloadBodiesByHashV2(IReadOnlyList blockHashes) - => _executionGetPayloadBodiesByHashV2Handler.Handle(blockHashes); - - public Task>> engine_getPayloadBodiesByRangeV2(long start, long count) - => _executionGetPayloadBodiesByRangeV2Handler.Handle(start, count); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs index 3ea4863fa05..4301ad6e521 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.cs @@ -29,8 +29,6 @@ public EngineRpcModule( IForkchoiceUpdatedHandler forkchoiceUpdatedV1Handler, IHandler, IEnumerable> executionGetPayloadBodiesByHashV1Handler, IGetPayloadBodiesByRangeV1Handler executionGetPayloadBodiesByRangeV1Handler, - IHandler, IEnumerable> executionGetPayloadBodiesByHashV2Handler, - IGetPayloadBodiesByRangeV2Handler executionGetPayloadBodiesByRangeV2Handler, IHandler transitionConfigurationHandler, IHandler, IEnumerable> capabilitiesHandler, IAsyncHandler getBlobsHandler, @@ -47,8 +45,6 @@ public EngineRpcModule( _forkchoiceUpdatedV1Handler = forkchoiceUpdatedV1Handler; _executionGetPayloadBodiesByHashV1Handler = executionGetPayloadBodiesByHashV1Handler; _executionGetPayloadBodiesByRangeV1Handler = executionGetPayloadBodiesByRangeV1Handler; - _executionGetPayloadBodiesByHashV2Handler = executionGetPayloadBodiesByHashV2Handler; - _executionGetPayloadBodiesByRangeV2Handler = executionGetPayloadBodiesByRangeV2Handler; _transitionConfigurationHandler = transitionConfigurationHandler; _getBlobsHandler = getBlobsHandler; _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs index 94a16c9ff70..45f51c5df35 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs @@ -23,7 +23,7 @@ public class GetPayloadV4Handler( { protected override GetPayloadV4Result GetPayloadResultFromBlock(IBlockProductionContext context) { - return new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!)) + return new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!), context.CurrentBestBlock!.ExecutionRequests!) { ShouldOverrideBuilder = censorshipDetector?.GetCensoredBlocks().Contains(new BlockNumberHash(context.CurrentBestBlock!)) ?? false }; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs index 15f3577ce42..41b1b0d507f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Nethermind.Consensus.Producers; using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; using Nethermind.JsonRpc; using Nethermind.JsonRpc.Modules; using Nethermind.Merge.Plugin.Data; @@ -17,23 +18,11 @@ public partial interface IEngineRpcModule : IRpcModule Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", IsSharable = true, IsImplemented = true)] - Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot); + Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, ExecutionRequest[]? ExecutionRequests); [JsonRpcMethod( Description = "Returns the most recent version of an execution payload and fees with respect to the transaction set contained by the mempool.", IsSharable = true, IsImplemented = true)] public Task> engine_getPayloadV4(byte[] payloadId); - - [JsonRpcMethod( - Description = "Returns an array of execution payload bodies for the list of provided block hashes.", - IsSharable = true, - IsImplemented = true)] - ResultWrapper> engine_getPayloadBodiesByHashV2(IReadOnlyList blockHashes); - - [JsonRpcMethod( - Description = "Returns an array of execution payload bodies for the provided number range", - IsSharable = true, - IsImplemented = true)] - Task>> engine_getPayloadBodiesByRangeV2(long start, long count); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs index cb00c3fafc2..97504e3ab2b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/MergePlugin.cs @@ -358,8 +358,6 @@ public Task InitRpcModules() _api.Config().SimulateBlockProduction), new GetPayloadBodiesByHashV1Handler(_api.BlockTree, _api.LogManager), new GetPayloadBodiesByRangeV1Handler(_api.BlockTree, _api.LogManager), - new GetPayloadBodiesByHashV2Handler(_api.BlockTree, _api.LogManager), - new GetPayloadBodiesByRangeV2Handler(_api.BlockTree, _api.LogManager), new ExchangeTransitionConfigurationV1Handler(_poSSwitcher, _api.LogManager), new ExchangeCapabilitiesHandler(_api.RpcCapabilitiesProvider, _api.LogManager), new GetBlobsHandler(_api.TxPool), diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 0530f141fd8..bc1636d5511 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -5,7 +5,6 @@ using System.Buffers; using System.Collections.Generic; using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; namespace Nethermind.Serialization.Rlp { @@ -14,7 +13,6 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder private readonly HeaderDecoder _headerDecoder = new(); private readonly TxDecoder _txDecoder = TxDecoder.Instance; private readonly WithdrawalDecoder _withdrawalDecoder = new(); - private readonly ConsensusRequestDecoder _consensusRequestsDecoder = ConsensusRequestDecoder.Instance; public Block? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -55,14 +53,13 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder rlpStream.Check(unclesCheck); List? withdrawals = DecodeWithdrawals(rlpStream, blockCheck); - List? requests = DecodeRequests(rlpStream, blockCheck); if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) { rlpStream.Check(blockCheck); } - return new(header, transactions, uncleHeaders, withdrawals, requests); + return new(header, transactions, uncleHeaders, withdrawals); } @@ -99,41 +96,8 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder return withdrawals; } - private List? DecodeRequests(RlpStream rlpStream, int blockCheck) - { - List? requests = null; - if (rlpStream.Position != blockCheck) - { - bool lengthWasRead = true; - try - { - rlpStream.PeekNextRlpLength(); - } - catch - { - lengthWasRead = false; - } - - if (lengthWasRead) - { - int requestsLength = rlpStream.ReadSequenceLength(); - int requestsCheck = rlpStream.Position + requestsLength; - requests = new(); - - while (rlpStream.Position < requestsCheck) - { - requests.Add(Rlp.Decode(rlpStream)); - } - - rlpStream.Check(requestsCheck); - } - } - return requests; - } - - - private (int Total, int Txs, int Uncles, int? Withdrawals, int? Requests) GetContentLength(Block item, RlpBehaviors rlpBehaviors) + private (int Total, int Txs, int Uncles, int? Withdrawals) GetContentLength(Block item, RlpBehaviors rlpBehaviors) { int contentLength = _headerDecoder.GetLength(item.Header, rlpBehaviors); @@ -152,16 +116,7 @@ public class BlockDecoder : IRlpValueDecoder, IRlpStreamDecoder contentLength += Rlp.LengthOfSequence(withdrawalsLength.Value); } - int? consensusRequestsLength = null; - if (item.Requests is not null) - { - consensusRequestsLength = GetConsensusRequestsLength(item, rlpBehaviors); - - if (consensusRequestsLength.HasValue) - contentLength += Rlp.LengthOfSequence(consensusRequestsLength.Value); - } - - return (contentLength, txLength, unclesLength, withdrawalsLength, consensusRequestsLength); + return (contentLength, txLength, unclesLength, withdrawalsLength); } private int GetUnclesLength(Block item, RlpBehaviors rlpBehaviors) @@ -201,21 +156,6 @@ private int GetTxLength(Block item, RlpBehaviors rlpBehaviors) return withdrawalLength; } - private int? GetConsensusRequestsLength(Block item, RlpBehaviors rlpBehaviors) - { - if (item.Requests is null) - return null; - - var consensusRequestsLength = 0; - - for (int i = 0, count = item.Requests.Length; i < count; i++) - { - consensusRequestsLength += _consensusRequestsDecoder.GetLength(item.Requests[i], rlpBehaviors); - } - - return consensusRequestsLength; - } - public int GetLength(Block? item, RlpBehaviors rlpBehaviors) { if (item is null) @@ -260,14 +200,13 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) decoderContext.Check(unclesCheck); List? withdrawals = DecodeWithdrawals(ref decoderContext, blockCheck); - List? requests = DecodeRequests(ref decoderContext, blockCheck); if ((rlpBehaviors & RlpBehaviors.AllowExtraBytes) != RlpBehaviors.AllowExtraBytes) { decoderContext.Check(blockCheck); } - return new(header, transactions, uncleHeaders, withdrawals, requests); + return new(header, transactions, uncleHeaders, withdrawals); } private List? DecodeWithdrawals(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) @@ -291,27 +230,6 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) return withdrawals; } - private List? DecodeRequests(ref Rlp.ValueDecoderContext decoderContext, int blockCheck) - { - List? requests = null; - - if (decoderContext.Position != blockCheck) - { - int requestsLength = decoderContext.ReadSequenceLength(); - int requestsCheck = decoderContext.Position + requestsLength; - requests = new(); - - while (decoderContext.Position < requestsCheck) - { - requests.Add(Rlp.Decode(ref decoderContext)); - } - - decoderContext.Check(requestsCheck); - } - - return requests; - } - public Rlp Encode(Block? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) @@ -332,7 +250,7 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl return; } - (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength, int? requestsLength) = GetContentLength(item, rlpBehaviors); + (int contentLength, int txsLength, int unclesLength, int? withdrawalsLength) = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); stream.Encode(item.Header); stream.StartSequence(txsLength); @@ -356,16 +274,6 @@ public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = Rl stream.Encode(item.Withdrawals[i]); } } - - if (requestsLength.HasValue) - { - stream.StartSequence(requestsLength.Value); - - for (int i = 0; i < item.Requests.Length; i++) - { - stream.Encode(item.Requests[i]); - } - } } public static ReceiptRecoveryBlock? DecodeToReceiptRecoveryBlock(MemoryManager? memoryManager, Memory memory, RlpBehaviors rlpBehaviors) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs deleted file mode 100644 index 91ac5675f87..00000000000 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsensusRequestDecoder.cs +++ /dev/null @@ -1,130 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core.ConsensusRequests; - -namespace Nethermind.Serialization.Rlp; - -public class ConsensusRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder -{ - public static ConsensusRequestDecoder Instance { get; } = new(); - - private readonly DepositDecoder _depositDecoder = DepositDecoder.Instance; - private readonly WithdrawalRequestDecoder _withdrawalRequestDecoder = WithdrawalRequestDecoder.Instance; - private readonly ConsolidationRequestDecoder _consolidationRequestDecoder = ConsolidationRequestDecoder.Instance; - public int GetContentLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) - { - int length = item.Type switch - { - ConsensusRequestsType.ConsolidationRequest => _consolidationRequestDecoder.GetContentLength((ConsolidationRequest)item, rlpBehaviors), - ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.GetContentLength((WithdrawalRequest)item, rlpBehaviors), - ConsensusRequestsType.Deposit => _depositDecoder.GetContentLength((Deposit)item, rlpBehaviors), - _ => throw new RlpException($"Unsupported consensus request type {item.Type}") - }; - return length; - } - - public int GetLength(ConsensusRequest item, RlpBehaviors rlpBehaviors) - { - int length = item.Type switch - { - ConsensusRequestsType.ConsolidationRequest => _consolidationRequestDecoder.GetLength((ConsolidationRequest)item, rlpBehaviors), - ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.GetLength((WithdrawalRequest)item, rlpBehaviors), - ConsensusRequestsType.Deposit => _depositDecoder.GetLength((Deposit)item, rlpBehaviors), - _ => throw new RlpException($"Unsupported consensus request type {item.Type}") - }; - - if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.SkipTypedWrapping) - { - return Rlp.LengthOf((byte)item.Type) + length; - } - - return Rlp.LengthOfSequence(Rlp.LengthOf((byte)item.Type) + length); - } - - public ConsensusRequest? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (rlpStream.IsNextItemNull()) - { - rlpStream.ReadByte(); - return null; - } - - if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.None) - { - rlpStream.ReadPrefixAndContentLength(); - } - - ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)rlpStream.ReadByte(); - - ConsensusRequest result = consensusRequestsType switch - { - ConsensusRequestsType.ConsolidationRequest => _consolidationRequestDecoder.Decode(rlpStream, rlpBehaviors), - ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(rlpStream, rlpBehaviors), - ConsensusRequestsType.Deposit => _depositDecoder.Decode(rlpStream, rlpBehaviors), - - _ => throw new RlpException($"Unsupported consensus request type {consensusRequestsType}") - }; - - return result; - } - - public ConsensusRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (decoderContext.IsNextItemNull()) - { - decoderContext.ReadByte(); - return null; - } - - if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.None) - { - decoderContext.ReadPrefixAndContentLength(); - } - - ConsensusRequestsType consensusRequestsType = (ConsensusRequestsType)decoderContext.ReadByte(); - - ConsensusRequest result = consensusRequestsType switch - { - ConsensusRequestsType.ConsolidationRequest => _consolidationRequestDecoder.Decode(ref decoderContext, rlpBehaviors), - ConsensusRequestsType.WithdrawalRequest => _withdrawalRequestDecoder.Decode(ref decoderContext, rlpBehaviors), - ConsensusRequestsType.Deposit => _depositDecoder.Decode(ref decoderContext, rlpBehaviors), - _ => throw new RlpException($"Unsupported consensus request type {consensusRequestsType}") - }; - - return result; - } - - public void Encode(RlpStream stream, ConsensusRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - int contentLength = GetContentLength(item, rlpBehaviors); - int sequenceLength = Rlp.LengthOfSequence(contentLength); - - if ((rlpBehaviors & RlpBehaviors.SkipTypedWrapping) == RlpBehaviors.None) - { - stream.StartByteArray(sequenceLength + 1, false); - } - - stream.WriteByte((byte)item.Type); - switch (item.Type) - { - case ConsensusRequestsType.ConsolidationRequest: - _consolidationRequestDecoder.Encode(stream, (ConsolidationRequest)item, rlpBehaviors); - break; - case ConsensusRequestsType.WithdrawalRequest: - _withdrawalRequestDecoder.Encode(stream, (WithdrawalRequest)item, rlpBehaviors); - break; - case ConsensusRequestsType.Deposit: - _depositDecoder.Encode(stream, (Deposit)item, rlpBehaviors); - break; - } - } - - public Rlp Encode(ConsensusRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - RlpStream rlpStream = new RlpStream(GetLength(item, rlpBehaviors)); - Encode(rlpStream, item, rlpBehaviors); - return new Rlp(rlpStream.Data.ToArray()); - } -} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs deleted file mode 100644 index 99b2f3e49e8..00000000000 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ConsolidationRequestDecoder.cs +++ /dev/null @@ -1,58 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; - -namespace Nethermind.Serialization.Rlp; - -public class ConsolidationRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder -{ - public static ConsolidationRequestDecoder Instance { get; } = new(); - public int GetLength(ConsolidationRequest item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); - - public int GetContentLength(ConsolidationRequest item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.SourcePubkey) + - Rlp.LengthOf(item.TargetPubkey); - - public ConsolidationRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - int _ = rlpStream.ReadSequenceLength(); - Address sourceAddress = rlpStream.DecodeAddress(); - ArgumentNullException.ThrowIfNull(sourceAddress); - byte[] SourcePubkey = rlpStream.DecodeByteArray(); - byte[] TargetPubkey = rlpStream.DecodeByteArray(); - return new ConsolidationRequest() - { - SourceAddress = sourceAddress, - SourcePubkey = SourcePubkey, - TargetPubkey = TargetPubkey - }; - } - - public ConsolidationRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - int _ = decoderContext.ReadSequenceLength(); - Address sourceAddress = decoderContext.DecodeAddress(); - ArgumentNullException.ThrowIfNull(sourceAddress); - byte[] SourcePubkey = decoderContext.DecodeByteArray(); - byte[] TargetPubkey = decoderContext.DecodeByteArray(); - return new ConsolidationRequest() - { - SourceAddress = sourceAddress, - SourcePubkey = SourcePubkey, - TargetPubkey = TargetPubkey - }; - } - - public void Encode(RlpStream stream, ConsolidationRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - int contentLength = GetContentLength(item, rlpBehaviors); - stream.StartSequence(contentLength); - stream.Encode(item.SourceAddress); - stream.Encode(item.SourcePubkey); - stream.Encode(item.TargetPubkey); - } -} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs deleted file mode 100644 index 9fdc2a3bd1e..00000000000 --- a/src/Nethermind/Nethermind.Serialization.Rlp/DepositDecoder.cs +++ /dev/null @@ -1,89 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.ConsensusRequests; - -namespace Nethermind.Serialization.Rlp; - -public class DepositDecoder : IRlpStreamDecoder, IRlpValueDecoder -{ - public static DepositDecoder Instance { get; } = new(); - - public Deposit? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (rlpStream.IsNextItemNull()) - { - rlpStream.ReadByte(); - - return null; - } - - rlpStream.ReadSequenceLength(); - - return new() - { - Pubkey = rlpStream.DecodeByteArray(), - WithdrawalCredentials = rlpStream.DecodeByteArray(), - Amount = rlpStream.DecodeULong(), - Signature = rlpStream.DecodeByteArray(), - Index = rlpStream.DecodeULong(), - }; - } - - public Deposit? Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (decoderContext.IsNextItemNull()) - { - decoderContext.ReadByte(); - - return null; - } - - decoderContext.ReadSequenceLength(); - - return new() - { - Pubkey = decoderContext.DecodeByteArray(), - WithdrawalCredentials = decoderContext.DecodeByteArray(), - Amount = decoderContext.DecodeULong(), - Signature = decoderContext.DecodeByteArray(), - Index = decoderContext.DecodeULong(), - }; - } - - public void Encode(RlpStream stream, Deposit? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - if (item is null) - { - stream.EncodeNullObject(); - return; - } - - var contentLength = GetContentLength(item, rlpBehaviors); - - stream.StartSequence(contentLength); - stream.Encode(item.Pubkey); - stream.Encode(item.WithdrawalCredentials); - stream.Encode(item.Amount); - stream.Encode(item.Signature); - stream.Encode(item.Index.Value); - } - - public Rlp Encode(Deposit? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - var stream = new RlpStream(GetLength(item, rlpBehaviors)); - - Encode(stream, item, rlpBehaviors); - - return new(stream.Data.ToArray()); - } - - public int GetContentLength(Deposit item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOf(item.Pubkey) + - Rlp.LengthOf(item.WithdrawalCredentials) + - Rlp.LengthOf(item.Amount) + - Rlp.LengthOf(item.Signature) + - Rlp.LengthOf(item.Index); - - public int GetLength(Deposit item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); -} diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index 98dce2b0610..e70f2c9c9b6 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -92,7 +92,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder= 5 && decoderContext.Position != headerCheck) { - blockHeader.RequestsRoot = decoderContext.DecodeKeccak(); + blockHeader.RequestsHash = decoderContext.DecodeKeccak(); } } @@ -184,7 +184,7 @@ public class HeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder= 5 && rlpStream.Position != headerCheck) { - blockHeader.RequestsRoot = rlpStream.DecodeKeccak(); + blockHeader.RequestsHash = rlpStream.DecodeKeccak(); } } @@ -256,9 +256,9 @@ public void Encode(RlpStream rlpStream, BlockHeader? header, RlpBehaviors rlpBeh rlpStream.Encode(header.ParentBeaconBlockRoot); } - if (header.RequestsRoot is not null) + if (header.RequestsHash is not null) { - rlpStream.Encode(header.RequestsRoot); + rlpStream.Encode(header.RequestsHash); } } @@ -302,7 +302,7 @@ private static int GetContentLength(BlockHeader? item, RlpBehaviors rlpBehaviors + (item.ParentBeaconBlockRoot is null ? 0 : Rlp.LengthOfKeccakRlp) + (item.BlobGasUsed is null ? 0 : Rlp.LengthOf(item.BlobGasUsed.Value)) + (item.ExcessBlobGas is null ? 0 : Rlp.LengthOf(item.ExcessBlobGas.Value)) - + (item.RequestsRoot is null ? 0 : Rlp.LengthOf(item.RequestsRoot)); + + (item.RequestsHash is null ? 0 : Rlp.LengthOf(item.RequestsHash)); if (notForSealing) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs deleted file mode 100644 index 450a842cc9c..00000000000 --- a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalRequestDecoder.cs +++ /dev/null @@ -1,67 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; - -namespace Nethermind.Serialization.Rlp; - -public class WithdrawalRequestDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder -{ - public static WithdrawalRequestDecoder Instance { get; } = new(); - public int GetLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); - - public int GetContentLength(WithdrawalRequest item, RlpBehaviors rlpBehaviors) => - Rlp.LengthOf(item.SourceAddress) + Rlp.LengthOf(item.ValidatorPubkey) + - Rlp.LengthOf(item.Amount); - - public WithdrawalRequest Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - _ = rlpStream.ReadSequenceLength(); - Address sourceAddress = rlpStream.DecodeAddress(); - ArgumentNullException.ThrowIfNull(sourceAddress); - byte[] validatorPubkey = rlpStream.DecodeByteArray(); - ulong amount = rlpStream.DecodeULong(); - return new WithdrawalRequest - { - SourceAddress = sourceAddress, - ValidatorPubkey = validatorPubkey, - Amount = amount - }; - } - - public WithdrawalRequest Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - _ = decoderContext.ReadSequenceLength(); - Address sourceAddress = decoderContext.DecodeAddress(); - ArgumentNullException.ThrowIfNull(sourceAddress); - byte[] validatorPubkey = decoderContext.DecodeByteArray(); - ulong amount = decoderContext.DecodeULong(); - return new WithdrawalRequest - { - SourceAddress = sourceAddress, - ValidatorPubkey = validatorPubkey, - Amount = amount - }; - } - - public void Encode(RlpStream stream, WithdrawalRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - int contentLength = GetContentLength(item, rlpBehaviors); - stream.StartSequence(contentLength); - stream.Encode(item.SourceAddress); - stream.Encode(item.ValidatorPubkey!); - stream.Encode(item.Amount); - } - - public Rlp Encode(WithdrawalRequest item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - RlpStream rlpStream = new(GetLength(item, rlpBehaviors)); - - Encode(rlpStream, item, rlpBehaviors); - - return new Rlp(rlpStream.Data.ToArray()); - } -} diff --git a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs b/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs deleted file mode 100644 index d69e1d0c8d7..00000000000 --- a/src/Nethermind/Nethermind.State/Proofs/RequestsTrie.cs +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using Nethermind.Core.Buffers; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Crypto; -using Nethermind.Serialization.Rlp; -using Nethermind.State.Trie; -using Nethermind.Trie; - -namespace Nethermind.State.Proofs; - -public class RequestsTrie(ConsensusRequest[]? requests, bool canBuildProof = false, ICappedArrayPool? bufferPool = null) - : PatriciaTrie(requests, canBuildProof, bufferPool) -{ - private static readonly ConsensusRequestDecoder _codec = ConsensusRequestDecoder.Instance; - - protected override void Initialize(ConsensusRequest[] requests) - { - var key = 0; - - foreach (ConsensusRequest req in requests) - { - Set(Rlp.Encode(key++).Bytes, _codec.Encode(req, RlpBehaviors.SkipTypedWrapping).Bytes); - } - } - - public static Hash256 CalculateRoot(ConsensusRequest[] requests) - { - using TrackingCappedArrayPool cappedArray = new(requests.Length * 4); - Hash256 rootHash = new RequestsTrie(requests, canBuildProof: false, bufferPool: cappedArray).RootHash; - return rootHash; - } -} From 28577adc65fe78c8d055714a23393f7e09d93f20 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Sat, 5 Oct 2024 17:08:05 +0530 Subject: [PATCH 472/551] fix build error --- src/Nethermind/Nethermind.Core/BlockBody.cs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/BlockBody.cs b/src/Nethermind/Nethermind.Core/BlockBody.cs index 26b918ef28f..76658c6ab8a 100644 --- a/src/Nethermind/Nethermind.Core/BlockBody.cs +++ b/src/Nethermind/Nethermind.Core/BlockBody.cs @@ -2,28 +2,25 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using Nethermind.Core.ConsensusRequests; namespace Nethermind.Core { public class BlockBody { - public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null, ConsensusRequest[]? requests = null) + public BlockBody(Transaction[]? transactions, BlockHeader[]? uncles, Withdrawal[]? withdrawals = null) { Transactions = transactions ?? Array.Empty(); Uncles = uncles ?? Array.Empty(); Withdrawals = withdrawals; - Requests = requests; } public BlockBody() : this(null, null, null) { } - public BlockBody WithChangedTransactions(Transaction[] transactions) => new(transactions, Uncles, Withdrawals, Requests); + public BlockBody WithChangedTransactions(Transaction[] transactions) => new(transactions, Uncles, Withdrawals); - public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals, Requests); + public BlockBody WithChangedUncles(BlockHeader[] uncles) => new(Transactions, uncles, Withdrawals); - public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals, Requests); - public BlockBody WithChangedConsensusRequests(ConsensusRequest[]? consensusRequests) => new(Transactions, Uncles, Withdrawals, consensusRequests); + public BlockBody WithChangedWithdrawals(Withdrawal[]? withdrawals) => new(Transactions, Uncles, withdrawals); public static BlockBody WithOneTransactionOnly(Transaction tx) => new(new[] { tx }, null, null); @@ -32,8 +29,7 @@ public BlockBody() : this(null, null, null) { } public BlockHeader[] Uncles { get; } public Withdrawal[]? Withdrawals { get; } - public ConsensusRequest[]? Requests { get; set; } - public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0 && (Requests?.Length ?? 0) == 0; + public bool IsEmpty => Transactions.Length == 0 && Uncles.Length == 0 && (Withdrawals?.Length ?? 0) == 0; } } From f417572d6911f20061e54c71bad8dc9be1924fbe Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Sat, 5 Oct 2024 17:11:34 +0530 Subject: [PATCH 473/551] fix more build error --- src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs | 3 --- .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 6 ++---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs index 5c1919959ef..0c000b7b001 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/RlpStream.cs @@ -16,7 +16,6 @@ using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Int256; -using Nethermind.Core.ConsensusRequests; namespace Nethermind.Serialization.Rlp { @@ -27,7 +26,6 @@ public class RlpStream private static readonly BlockInfoDecoder _blockInfoDecoder = new(); private static readonly TxDecoder _txDecoder = TxDecoder.Instance; private static readonly WithdrawalDecoder _withdrawalDecoder = new(); - private static readonly ConsensusRequestDecoder _requestsDecoder = ConsensusRequestDecoder.Instance; private static readonly LogEntryDecoder _logEntryDecoder = LogEntryDecoder.Instance; private readonly CappedArray _data; @@ -89,7 +87,6 @@ public void Encode(Transaction value, RlpBehaviors rlpBehaviors = RlpBehaviors.N } public void Encode(Withdrawal value) => _withdrawalDecoder.Encode(this, value); - public void Encode(ConsensusRequest value) => _requestsDecoder.Encode(this, value); public void Encode(LogEntry value) { diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index 3e1e7f66cb3..4a64ecd8ef3 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -11,7 +11,6 @@ using System.Text.Json; using Nethermind.Config; using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Int256; using Nethermind.Serialization.Json; @@ -433,7 +432,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec var requestsEnabled = depositsEnabled || withdrawalRequestsEnabled || consolidationRequestsEnabled; if (requestsEnabled) - genesisHeader.RequestsRoot = Keccak.EmptyTreeHash; ; + genesisHeader.RequestsHash = Keccak.EmptyTreeHash; bool isEip4844Enabled = chainSpecJson.Params.Eip4844TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4844TransitionTimestamp; if (isEip4844Enabled) @@ -462,8 +461,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec genesisHeader, Array.Empty(), Array.Empty(), - Array.Empty(), - requestsEnabled ? Array.Empty() : null); + Array.Empty()); } private static void LoadAllocations(ChainSpecJson chainSpecJson, ChainSpec chainSpec) From ab9ca8ee88434bd96e5ec350fb1e0bde542d605d Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Sat, 5 Oct 2024 19:53:02 +0530 Subject: [PATCH 474/551] more build errors --- .../AuRaBlockProcessor.cs | 6 +-- .../CliqueBlockProducer.cs | 4 +- .../Producers/BlockProducerEnvFactory.cs | 10 ++-- .../Producers/BlockToProduce.cs | 6 +-- .../Builders/BlockBuilder.cs | 23 --------- .../Nethermind.Facade/Eth/BlockForRpc.cs | 6 +-- .../AuRaMergeBlockProcessor.cs | 6 +-- .../AuRaMergeBlockProducerEnvFactory.cs | 13 +++-- .../Data/ExecutionPayloadBodyV2Result.cs | 44 ---------------- .../GetPayloadBodiesByHashV2Handler.cs | 38 -------------- .../GetPayloadBodiesByRangeV2Handler.cs | 51 ------------------- .../Messages/BlockBodiesMessageSerializer.cs | 24 +-------- 12 files changed, 24 insertions(+), 207 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs delete mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs delete mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 22253956f3d..6a9b8d919b8 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -8,8 +8,8 @@ using Nethermind.Blockchain.Find; using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.AuRa.Validators; +using Nethermind.Consensus.ExecutionRequests; using Nethermind.Consensus.Processing; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; @@ -53,7 +53,7 @@ public AuRaBlockProcessor( AuRaContractGasLimitOverride? gasLimitOverride = null, ContractRewriter? contractRewriter = null, IBlockCachePreWarmer? preWarmer = null, - IConsensusRequestsProcessor? consensusRequestsProcessor = null) + IExecutionRequestProcessor? executionRequestProcessor = null) : base( specProvider, blockValidator, @@ -67,7 +67,7 @@ public AuRaBlockProcessor( logManager, withdrawalProcessor, preWarmer: preWarmer, - consensusRequestsProcessor: consensusRequestsProcessor) + executionRequestProcessor: executionRequestProcessor) { _specProvider = specProvider; _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); diff --git a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs index 0e2e2fa2a82..caf677d9099 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/CliqueBlockProducer.cs @@ -15,7 +15,6 @@ using Nethermind.Consensus.Producers; using Nethermind.Consensus.Transactions; using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Crypto; @@ -498,8 +497,7 @@ ILogManager logManager header, selectedTxs, Array.Empty(), - spec.WithdrawalsEnabled ? Enumerable.Empty() : null, - spec.RequestsEnabled ? Enumerable.Empty() : null + spec.WithdrawalsEnabled ? Enumerable.Empty() : null ); header.TxRoot = TxTrie.CalculateRoot(block.Transactions); block.Header.Author = _sealer.Address; diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index f896766bfbd..a5e28bf65e4 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -7,8 +7,8 @@ using Nethermind.Blockchain.Receipts; using Nethermind.Config; using Nethermind.Consensus.Comparers; +using Nethermind.Consensus.ExecutionRequests; using Nethermind.Consensus.Processing; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; @@ -35,7 +35,7 @@ public class BlockProducerEnvFactory : IBlockProducerEnvFactory protected readonly ITransactionComparerProvider _transactionComparerProvider; protected readonly IBlocksConfig _blocksConfig; protected readonly ILogManager _logManager; - private readonly IConsensusRequestsProcessor? _consensusRequestsProcessor; + private readonly IExecutionRequestProcessor? _executionRequestProcessor; public IBlockTransactionsExecutorFactory TransactionsExecutorFactory { get; set; } @@ -51,7 +51,7 @@ public BlockProducerEnvFactory( ITransactionComparerProvider transactionComparerProvider, IBlocksConfig blocksConfig, ILogManager logManager, - IConsensusRequestsProcessor? consensusRequestsProcessor = null) + IExecutionRequestProcessor? executionRequestProcessor = null) { _worldStateManager = worldStateManager; _blockTree = blockTree; @@ -64,7 +64,7 @@ public BlockProducerEnvFactory( _transactionComparerProvider = transactionComparerProvider; _blocksConfig = blocksConfig; _logManager = logManager; - _consensusRequestsProcessor = consensusRequestsProcessor; + _executionRequestProcessor = executionRequestProcessor; TransactionsExecutorFactory = new BlockProducerTransactionsExecutorFactory(specProvider, logManager); } @@ -159,7 +159,7 @@ protected virtual BlockProcessor CreateBlockProcessor( new BlockhashStore(_specProvider, readOnlyTxProcessingEnv.WorldState), logManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.WorldState, logManager)), - consensusRequestsProcessor: _consensusRequestsProcessor + executionRequestProcessor: _executionRequestProcessor ); } } diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs index be52d7b7203..fc8e9a4c774 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockToProduce.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; //TODO: Redo clique block producer [assembly: InternalsVisibleTo("Nethermind.Consensus.Clique")] @@ -33,9 +32,8 @@ internal class BlockToProduce : Block public BlockToProduce(BlockHeader blockHeader, IEnumerable transactions, IEnumerable uncles, - IEnumerable? withdrawals = null, - IEnumerable? requests = null) - : base(blockHeader, Array.Empty(), uncles, withdrawals, requests) + IEnumerable? withdrawals = null) + : base(blockHeader, Array.Empty(), uncles, withdrawals) { Transactions = transactions; } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index 4b5e591949b..bcd67e3caa4 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -3,7 +3,6 @@ using System; using System.Linq; -using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; using Nethermind.Crypto; @@ -276,28 +275,6 @@ public BlockBuilder WithWithdrawals(params Withdrawal[]? withdrawals) return this; } - public BlockBuilder WithConsensusRequests(int count) - { - var consensusRequests = new ConsensusRequest[count]; - - for (var i = 0; i < count; i++) - consensusRequests[i] = new Deposit(); - - return WithConsensusRequests(consensusRequests); - } - - public BlockBuilder WithConsensusRequests(params ConsensusRequest[]? requests) - { - TestObjectInternal = TestObjectInternal - .WithReplacedBody(TestObjectInternal.Body.WithChangedConsensusRequests(requests)); - - TestObjectInternal.Header.RequestsRoot = requests is null - ? null - : new RequestsTrie(requests).RootHash; - - return this; - } - public BlockBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRoot) { TestObjectInternal.Header.ParentBeaconBlockRoot = parentBeaconBlockRoot; diff --git a/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs index b0904d5552f..817037b8e7f 100644 --- a/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs @@ -12,7 +12,7 @@ using Nethermind.Serialization.Rlp; using System.Text.Json.Serialization; using System.Runtime.CompilerServices; -using Nethermind.Core.ConsensusRequests; + namespace Nethermind.Facade.Eth; @@ -83,8 +83,7 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s Uncles = block.Uncles.Select(o => o.Hash); Withdrawals = block.Withdrawals; WithdrawalsRoot = block.Header.WithdrawalsRoot; - Requests = block.Requests; - RequestsRoot = block.Header.RequestsRoot; + RequestsRoot = block.Header.RequestsHash; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] @@ -143,7 +142,6 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Hash256? ParentBeaconBlockRoot { get; set; } - public IEnumerable? Requests { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Hash256? RequestsRoot { get; set; } diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 8054855b51f..56b94bb33a8 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -6,7 +6,6 @@ using Nethermind.Blockchain.Receipts; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.Validators; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; @@ -18,6 +17,7 @@ using Nethermind.Evm.TransactionProcessing; using Nethermind.Logging; using Nethermind.State; +using Nethermind.Consensus.ExecutionRequests; namespace Nethermind.Merge.AuRa; @@ -38,7 +38,7 @@ public class AuRaMergeBlockProcessor( AuRaContractGasLimitOverride? gasLimitOverride = null, ContractRewriter? contractRewriter = null, IBlockCachePreWarmer? preWarmer = null, - IConsensusRequestsProcessor? consensusRequestsProcessor = null) + IExecutionRequestProcessor? executionRequestProcessor = null) : AuRaBlockProcessor(specProvider, blockValidator, rewardCalculator, @@ -55,7 +55,7 @@ public class AuRaMergeBlockProcessor( gasLimitOverride, contractRewriter, preWarmer, - consensusRequestsProcessor) + executionRequestProcessor) { protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) => block.IsPostMerge diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index 741930723bf..cb5bd2bdc69 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -7,9 +7,9 @@ using Nethermind.Config; using Nethermind.Consensus.AuRa.InitializationSteps; using Nethermind.Consensus.Comparers; +using Nethermind.Consensus.ExecutionRequests; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Core.Specs; @@ -24,8 +24,7 @@ namespace Nethermind.Merge.AuRa; public class AuRaMergeBlockProducerEnvFactory : BlockProducerEnvFactory { private readonly AuRaNethermindApi _auraApi; - private readonly IConsensusRequestsProcessor? _consensusRequestsProcessor; - + private readonly IExecutionRequestProcessor? _executionRequestProcessor; public AuRaMergeBlockProducerEnvFactory( AuRaNethermindApi auraApi, IWorldStateManager worldStateManager, @@ -39,7 +38,7 @@ public AuRaMergeBlockProducerEnvFactory( ITransactionComparerProvider transactionComparerProvider, IBlocksConfig blocksConfig, ILogManager logManager, - IConsensusRequestsProcessor? consensusRequestsProcessor = null) : base( + IExecutionRequestProcessor? executionRequestProcessor = null) : base( worldStateManager, blockTree, specProvider, @@ -51,10 +50,10 @@ public AuRaMergeBlockProducerEnvFactory( transactionComparerProvider, blocksConfig, logManager, - consensusRequestsProcessor) + executionRequestProcessor) { _auraApi = auraApi; - _consensusRequestsProcessor = consensusRequestsProcessor; + _executionRequestProcessor = executionRequestProcessor; } protected override BlockProcessor CreateBlockProcessor( @@ -86,7 +85,7 @@ protected override BlockProcessor CreateBlockProcessor( ), readOnlyTxProcessingEnv.TransactionProcessor, null, - consensusRequestsProcessor: _consensusRequestsProcessor); + executionRequestProcessor: _executionRequestProcessor); } protected override TxPoolTxSource CreateTxPoolTxSource( diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs deleted file mode 100644 index d929fcf6fd8..00000000000 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadBodyV2Result.cs +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Collections.Generic; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using System.Text.Json.Serialization; - -namespace Nethermind.Merge.Plugin.Data; - -public class ExecutionPayloadBodyV2Result : ExecutionPayloadBodyV1Result -{ - public ExecutionPayloadBodyV2Result( - IReadOnlyList transactions, - IReadOnlyList? withdrawals, - IReadOnlyList? deposits, - IReadOnlyList? withdrawalsRequests, - IReadOnlyList? consolidationRequests - ) - : base(transactions, withdrawals) - { - DepositRequests = deposits; - WithdrawalRequests = withdrawalsRequests; - ConsolidationRequests = consolidationRequests; - } - - /// - /// Deposit requests . - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public IReadOnlyList? DepositRequests { get; set; } - - /// - /// Withdrawal requests . - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public IReadOnlyList? WithdrawalRequests { get; set; } - - /// - /// Consolidation requests . - /// - [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public IReadOnlyList? ConsolidationRequests { get; set; } -} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs deleted file mode 100644 index 0c95bbd88b0..00000000000 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByHashV2Handler.cs +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Nethermind.Blockchain; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Crypto; -using Nethermind.JsonRpc; -using Nethermind.Logging; -using Nethermind.Merge.Plugin.Data; - -namespace Nethermind.Merge.Plugin.Handlers; - - -public class GetPayloadBodiesByHashV2Handler(IBlockTree blockTree, ILogManager logManager) - : GetPayloadBodiesByHashV1Handler(blockTree, logManager), IHandler, IEnumerable> -{ - private readonly IBlockTree _blockTree = blockTree; - - public new ResultWrapper> Handle(IReadOnlyList blockHashes) => - !CheckHashCount(blockHashes, out string? error) - ? ResultWrapper>.Fail(error!, MergeErrorCodes.TooLargeRequest) - : ResultWrapper>.Success(GetRequests(blockHashes)); - - private IEnumerable GetRequests(IReadOnlyList blockHashes) - { - for (int i = 0; i < blockHashes.Count; i++) - { - Block? block = _blockTree.FindBlock(blockHashes[i]); - (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests, ConsolidationRequest[]? consolidationRequests) = block?.Requests?.SplitRequests() ?? (null, null, null); - yield return block is null ? null : new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests, consolidationRequests); - } - } -} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs deleted file mode 100644 index f1a3107457d..00000000000 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadBodiesByRangeV2Handler.cs +++ /dev/null @@ -1,51 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Nethermind.Blockchain; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.JsonRpc; -using Nethermind.Logging; -using Nethermind.Merge.Plugin.Data; - -namespace Nethermind.Merge.Plugin.Handlers; - -public class GetPayloadBodiesByRangeV2Handler(IBlockTree blockTree, ILogManager logManager) : GetPayloadBodiesByRangeV1Handler(blockTree, logManager), IGetPayloadBodiesByRangeV2Handler -{ - public new Task>> Handle(long start, long count) - { - if (!CheckRangeCount(start, count, out string? error, out int errorCode)) - { - return ResultWrapper>.Fail(error!, errorCode); - } - - return Task.FromResult(ResultWrapper>.Success(GetRequests(start, count))); - } - - - private IEnumerable GetRequests(long start, long count) - { - var headNumber = _blockTree.Head?.Number ?? 0; - for (long i = start, c = Math.Min(start + count - 1, headNumber); i <= c; i++) - { - Block? block = _blockTree.FindBlock(i); - - if (block is null) - { - yield return null; - continue; - } - - (Deposit[]? deposits, WithdrawalRequest[]? withdrawalRequests, ConsolidationRequest[]? consolidationRequests) = block!.Requests?.SplitRequests() ?? (null, null, null); - yield return new ExecutionPayloadBodyV2Result(block.Transactions, block.Withdrawals, deposits, withdrawalRequests, consolidationRequests); - } - - yield break; - } -} diff --git a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs index c037fe6b16e..0acdae1c17d 100644 --- a/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs +++ b/src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/V62/Messages/BlockBodiesMessageSerializer.cs @@ -5,7 +5,6 @@ using DotNetty.Buffers; using Nethermind.Core; using Nethermind.Core.Buffers; -using Nethermind.Core.ConsensusRequests; using Nethermind.Serialization.Rlp; namespace Nethermind.Network.P2P.Subprotocols.Eth.V62.Messages @@ -59,7 +58,6 @@ private class BlockBodyDecoder : IRlpValueDecoder private readonly TxDecoder _txDecoder = TxDecoder.Instance; private readonly HeaderDecoder _headerDecoder = new(); private readonly WithdrawalDecoder _withdrawalDecoderDecoder = new(); - private readonly ConsensusRequestDecoder _requestsDecoder = ConsensusRequestDecoder.Instance; public int GetLength(BlockBody item, RlpBehaviors rlpBehaviors) { @@ -69,8 +67,7 @@ public int GetLength(BlockBody item, RlpBehaviors rlpBehaviors) public int GetBodyLength(BlockBody b) => Rlp.LengthOfSequence(GetTxLength(b.Transactions)) + Rlp.LengthOfSequence(GetUnclesLength(b.Uncles)) - + (b.Withdrawals is not null ? Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)) : 0) - + (b.Requests is not null ? Rlp.LengthOfSequence(GetRequestsLength(b.Requests)) : 0); + + (b.Withdrawals is not null ? Rlp.LengthOfSequence(GetWithdrawalsLength(b.Withdrawals)) : 0); private int GetTxLength(Transaction[] transactions) => transactions.Sum(t => _txDecoder.GetLength(t, RlpBehaviors.None)); @@ -78,8 +75,6 @@ public int GetBodyLength(BlockBody b) => private int GetWithdrawalsLength(Withdrawal[] withdrawals) => withdrawals.Sum(t => _withdrawalDecoderDecoder.GetLength(t, RlpBehaviors.None)); - private int GetRequestsLength(ConsensusRequest[] requests) => requests.Sum(t => _requestsDecoder.GetLength(t, RlpBehaviors.None)); - public BlockBody? Decode(ref Rlp.ValueDecoderContext ctx, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int sequenceLength = ctx.ReadSequenceLength(); @@ -94,18 +89,12 @@ public int GetBodyLength(BlockBody b) => Transaction[] transactions = ctx.DecodeArray(_txDecoder); BlockHeader[] uncles = ctx.DecodeArray(_headerDecoder); Withdrawal[]? withdrawals = null; - ConsensusRequest[]? requests = null; if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) { withdrawals = ctx.DecodeArray(_withdrawalDecoderDecoder); } - if (ctx.PeekNumberOfItemsRemaining(startingPosition + sequenceLength, 1) > 0) - { - requests = ctx.DecodeArray(_requestsDecoder); - } - - return new BlockBody(transactions, uncles, withdrawals, requests); + return new BlockBody(transactions, uncles, withdrawals); } public void Serialize(RlpStream stream, BlockBody body) @@ -131,15 +120,6 @@ public void Serialize(RlpStream stream, BlockBody body) stream.Encode(withdrawal); } } - - if (body.Requests is not null) - { - stream.StartSequence(GetRequestsLength(body.Requests)); - foreach (ConsensusRequest? request in body.Requests) - { - stream.Encode(request); - } - } } } } From e0855093329aaa348e85d384cfe7d2937db67cc8 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Sat, 5 Oct 2024 20:04:41 +0530 Subject: [PATCH 475/551] more build errors --- .../Nethermind.Consensus/Processing/BlockExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs index 6e0eab907da..ba82ee02eb8 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockExtensions.cs @@ -18,8 +18,8 @@ internal static class BlockExtensions { public static Block CreateCopy(this Block block, BlockHeader header) => block is BlockToProduce blockToProduce - ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals, blockToProduce.Requests) - : new Block(header, block.Transactions, block.Uncles, block.Withdrawals, block.Requests); + ? new BlockToProduce(header, blockToProduce.Transactions, blockToProduce.Uncles, blockToProduce.Withdrawals) + : new Block(header, block.Transactions, block.Uncles, block.Withdrawals); public static IEnumerable GetTransactions(this Block block) => block is BlockToProduce blockToProduce From aeba2a943925adfdeb8b62fa866f087d68cb3c91 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Sun, 6 Oct 2024 00:51:42 +0530 Subject: [PATCH 476/551] add requests to executionPayloadParams --- .../Processing/BlockProcessor.cs | 1 + .../Data/ExecutionPayloadV3.cs | 2 + .../Data/ExecutionPayloadV4.cs | 42 ------------------- .../Data/IExecutionPayloadParams.cs | 11 ++++- .../EngineRpcModule.Paris.cs | 3 ++ .../EngineRpcModule.Prague.cs | 5 +-- .../IEngineRpcModule.Prague.cs | 2 +- 7 files changed, 19 insertions(+), 47 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index e867db92bf2..a155ad4e73d 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -275,6 +275,7 @@ private void ValidateProcessedBlock(Block suggestedBlock, ProcessingOptions opti // Block is valid, copy the account changes as we use the suggested block not the processed one suggestedBlock.AccountChanges = block.AccountChanges; + suggestedBlock.ExecutionRequests = block.ExecutionRequests; } private bool ShouldComputeStateRoot(BlockHeader header) => diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs index f05e355b183..aa811889b97 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs @@ -5,6 +5,7 @@ using System.Text.Json.Serialization; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Specs; using Nethermind.Int256; @@ -36,6 +37,7 @@ public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? block.Header.ParentBeaconBlockRoot = ParentBeaconBlockRoot; block.Header.BlobGasUsed = BlobGasUsed; block.Header.ExcessBlobGas = ExcessBlobGas; + block.Header.RequestsHash = ExecutionRequests != null ? ExecutionRequests.CalculateRoot() : Hash256.Zero; return true; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs deleted file mode 100644 index dec34d95592..00000000000 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV4.cs +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Diagnostics.CodeAnalysis; -using System.Text.Json.Serialization; -using Nethermind.Core; -using Nethermind.Core.ExecutionRequest; -using Nethermind.Core.Specs; -using Nethermind.Int256; - -namespace Nethermind.Merge.Plugin.Data; - -/// -/// Represents an object mapping the ExecutionPayloadV4 structure of the beacon chain spec. -/// -public class ExecutionPayloadV4 : ExecutionPayloadV3, IExecutionPayloadFactory -{ - public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? totalDifficulty = null) - { - if (!base.TryGetBlock(out block, totalDifficulty)) - { - return false; - } - - block.Header.RequestsHash = ExecutionRequests?.CalculateRoot(); - - return true; - } - - public override bool ValidateFork(ISpecProvider specProvider) => - specProvider.GetSpec(BlockNumber, Timestamp).DepositsEnabled - && specProvider.GetSpec(BlockNumber, Timestamp).WithdrawalRequestsEnabled - && specProvider.GetSpec(BlockNumber, Timestamp).ConsolidationRequestsEnabled; - - /// - /// Gets or sets as defined in - /// EIP-7685. - /// - [JsonIgnore] - public sealed override ExecutionRequest[]? ExecutionRequests { get; set; } - -} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs index 46abda52dde..bc85b6a12c6 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs @@ -5,6 +5,7 @@ using System.Linq; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Serialization.Rlp; @@ -14,6 +15,7 @@ namespace Nethermind.Merge.Plugin.Data; public interface IExecutionPayloadParams { ExecutionPayload ExecutionPayload { get; } + ExecutionRequest[]? ExecutionRequests { get; set; } ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error); } @@ -22,11 +24,18 @@ public enum ValidationResult : byte { Success, Fail, Invalid }; public class ExecutionPayloadParams( TVersionedExecutionPayload executionPayload, byte[]?[] blobVersionedHashes, - Hash256? parentBeaconBlockRoot) + Hash256? parentBeaconBlockRoot, + ExecutionRequest[]? executionRequests) : IExecutionPayloadParams where TVersionedExecutionPayload : ExecutionPayload { public TVersionedExecutionPayload ExecutionPayload => executionPayload; + /// + /// Gets or sets as defined in + /// EIP-7685. + /// + public ExecutionRequest[]? ExecutionRequests { get; set; } = executionRequests; + ExecutionPayload IExecutionPayloadParams.ExecutionPayload => ExecutionPayload; public ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Paris.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Paris.cs index f5c0616b826..5e79839a472 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Paris.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Paris.cs @@ -7,6 +7,8 @@ using System.Threading.Tasks; using Nethermind.Consensus; using Nethermind.Consensus.Producers; +using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Specs; using Nethermind.JsonRpc; using Nethermind.Merge.Plugin.Data; @@ -63,6 +65,7 @@ protected async Task> ForkchoiceUpdated protected async Task> NewPayload(IExecutionPayloadParams executionPayloadParams, int version) { ExecutionPayload executionPayload = executionPayloadParams.ExecutionPayload; + executionPayload.ExecutionRequests = executionPayloadParams.ExecutionRequests; if (!executionPayload.ValidateFork(_specProvider)) { diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs index 9ccdb310f77..9bc57e4ead1 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs @@ -19,10 +19,9 @@ public partial class EngineRpcModule : IEngineRpcModule /// Method parameter list is extended with parameter. /// EIP-7685. /// - public Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, ExecutionRequest[]? ExecutionRequests) + public Task> engine_newPayloadV4(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, ExecutionRequest[]? executionRequests) { - executionPayload.ExecutionRequests = ExecutionRequests; - return NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot), EngineApiVersions.Prague); + return NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot, executionRequests), EngineApiVersions.Prague); } public async Task> engine_getPayloadV4(byte[] payloadId) => diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs index 41b1b0d507f..c092322cee2 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs @@ -18,7 +18,7 @@ public partial interface IEngineRpcModule : IRpcModule Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", IsSharable = true, IsImplemented = true)] - Task> engine_newPayloadV4(ExecutionPayloadV4 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, ExecutionRequest[]? ExecutionRequests); + Task> engine_newPayloadV4(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, ExecutionRequest[]? ExecutionRequests); [JsonRpcMethod( Description = "Returns the most recent version of an execution payload and fees with respect to the transaction set contained by the mempool.", From db27172fcced387519721226680362b63fca9fe2 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Sun, 6 Oct 2024 01:04:27 +0530 Subject: [PATCH 477/551] ensure requests are in sorted order --- .../ExecutionRequest/ExecutionRequest.cs | 12 ++++++++++++ .../Data/ExecutionPayload.cs | 6 ------ .../Data/IExecutionPayloadParams.cs | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index f9fcec027a5..9cf8d82759a 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -58,4 +58,16 @@ public static Hash256 CalculateRoot(this ExecutionRequest[] requests) } return new Hash256(Hashes); } + + public static bool IsSortedByType(this ExecutionRequest[] requests) + { + for (int i = 1; i < requests.Length; i++) + { + if (requests[i - 1].RequestType > requests[i].RequestType) + { + return false; + } + } + return true; + } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index 83d0ebdb126..3284c643b9e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -220,12 +220,6 @@ public ValidationResult ValidateParams(IReleaseSpec spec, int version, out strin return ValidationResult.Fail; } - if (spec.RequestsEnabled) - { - error = "ExecutionPayloadV4 expected"; - return ValidationResult.Fail; - } - int actualVersion = GetExecutionPayloadVersion(); error = actualVersion switch diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs index bc85b6a12c6..be6d74ace05 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs @@ -40,6 +40,22 @@ public class ExecutionPayloadParams( public ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error) { + if(spec.RequestsEnabled) + { + if (ExecutionRequests is null) + { + error = "Execution requests must be set"; + return ValidationResult.Fail; + } + + // Ensures that the execution requests types are in increasing order + if (!ExecutionRequests.IsSortedByType()) + { + error = "Execution requests are not in progressive order by type"; + return ValidationResult.Fail; + } + + } Transaction[]? transactions; try { From 812025111551b98ffb56a6565342b254693f2fad Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 7 Oct 2024 01:42:48 +0530 Subject: [PATCH 478/551] add executionRequests processor tests --- .../DepositProcessorTests.cs | 70 ----------- .../ExecutionRequestProcessorTests.cs | 117 ++++++++++++++++++ .../ExecutionRequestProcessor.cs | 1 - .../Nethermind.Core.Test/Builders/TestItem.cs | 36 ++---- .../ConsolidationRequestProcessorTest.cs | 96 -------------- .../WithdrawalRequestsProcessorTests.cs | 96 -------------- .../IGetPayloadBodiesByRangeV2Handler.cs | 14 --- 7 files changed, 128 insertions(+), 302 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs create mode 100644 src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs delete mode 100644 src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs delete mode 100644 src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs delete mode 100644 src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs diff --git a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs deleted file mode 100644 index 0ab384c1db4..00000000000 --- a/src/Nethermind/Nethermind.Consensus.Test/DepositProcessorTests.cs +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Linq; -using FluentAssertions; -using Nethermind.Abi; -using Nethermind.Consensus.Requests; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Extensions; -using Nethermind.Core.Specs; -using Nethermind.Core.Test.Builders; -using NSubstitute; -using NUnit.Framework; - - -namespace Nethermind.Consensus.Test; - -public class DepositProcessorTests -{ - [Test] - public void ShouldProcessDeposit() - { - Block block = Build.A.Block.TestObject; - DepositsProcessor depositsProcessor = new(); - - var deposit = new Deposit() - { - Amount = 32000000000, - Index = 0, - Pubkey = Bytes.FromHexString( - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"), - Signature = Bytes.FromHexString( - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003"), - WithdrawalCredentials = - Bytes.FromHexString("0000000000000000000000000000000000000000000000000000000000000002") - }; - - TxReceipt txReceipt = Build.A.Receipt.WithLogs( - Build.A.LogEntry.WithData( - Bytes.FromHexString( - "00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080040597307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000" - ) - ) - .WithAddress( - new Core.Address(Bytes.FromHexString("0x00000000219ab540356cbb839cbe05303d7705fa")) - ).TestObject - ).TestObject; - - IReleaseSpec spec = Substitute.For(); - - spec.DepositsEnabled.Returns(true); - spec.DepositContractAddress.Returns( - new Core.Address(Bytes.FromHexString("0x00000000219ab540356cbb839cbe05303d7705fa")) - ); - - var processedDeposits = depositsProcessor.ProcessDeposits(block, new[] { txReceipt }, spec).ToList(); - - Assert.That(processedDeposits, Has.Count.EqualTo(1)); - - Deposit processedDeposit = processedDeposits[0]; - - processedDeposit.Amount.Should().Be(deposit.Amount); - processedDeposit.Index.Should().Be(deposit.Index); - processedDeposit.Pubkey?.Span.SequenceEqual(deposit.Pubkey.Value.Span).Should().BeTrue(); - processedDeposit.Signature?.SequenceEqual(deposit.Signature).Should().BeTrue(); - processedDeposit.WithdrawalCredentials?.SequenceEqual(deposit.WithdrawalCredentials).Should().BeTrue(); - } -} diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs new file mode 100644 index 00000000000..f536e564ffc --- /dev/null +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -0,0 +1,117 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using System; +using System.Linq; +using Nethermind.Abi; +using Nethermind.Consensus.ExecutionRequests; +using Nethermind.Core; +using Nethermind.Core.ExecutionRequest; +using Nethermind.Core.Extensions; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.Db; +using Nethermind.Evm; +using Nethermind.Evm.Tracing; +using Nethermind.Evm.TransactionProcessing; +using Nethermind.Int256; +using Nethermind.Logging; +using Nethermind.Specs; +using Nethermind.State; +using Nethermind.Trie.Pruning; +using NSubstitute; +using NUnit.Framework; + +namespace Nethermind.Consensus.Test; + +public class ExecutionProcessorTests +{ + private ISpecProvider _specProvider; + private ITransactionProcessor _transactionProcessor; + private WorldState _stateProvider; + private static readonly UInt256 AccountBalance = 1.Ether(); + private readonly Address DepositContractAddress = Eip6110Constants.MainnetDepositContractAddress; + private readonly Address eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; + private readonly Address eip7251Account = Eip7251Constants.ConsolidationRequestPredeployAddress; + private IReleaseSpec spec; + private readonly AbiSignature _depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); + private readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; + + ExecutionRequest[] executionDepositRequests = [TestItem.ExecutionRequestA, TestItem.ExecutionRequestB, TestItem.ExecutionRequestC]; + ExecutionRequest[] executionWithdrawalRequests = [TestItem.ExecutionRequestD, TestItem.ExecutionRequestE, TestItem.ExecutionRequestF]; + ExecutionRequest[] excutionConsolidationRequests = [TestItem.ExecutionRequestG, TestItem.ExecutionRequestH, TestItem.ExecutionRequestI]; + + [SetUp] + public void Setup() + { + + + _specProvider = MainnetSpecProvider.Instance; + MemDb stateDb = new(); + TrieStore trieStore = new(stateDb, LimboLogs.Instance); + + _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); + _stateProvider.CreateAccount(eip7002Account, AccountBalance); + _stateProvider.CreateAccount(eip7251Account, AccountBalance); + _stateProvider.Commit(_specProvider.GenesisSpec); + _stateProvider.CommitTree(0); + + spec = _specProvider.GetFinalSpec(); + + spec.RequestsEnabled.Returns(true); + spec.DepositsEnabled.Returns(true); + spec.WithdrawalRequestsEnabled.Returns(true); + spec.ConsolidationRequestsEnabled.Returns(true); + + spec.DepositContractAddress.Returns(DepositContractAddress); + spec.Eip7002ContractAddress.Returns(eip7002Account); + spec.Eip7251ContractAddress.Returns(eip7251Account); + + _transactionProcessor = Substitute.For(); + + _transactionProcessor.Execute(Arg.Any(), Arg.Any(), Arg.Any()) + .Returns(ci => + { + Transaction transaction = ci.Arg(); + CallOutputTracer tracer = ci.Arg(); + if(transaction.To == eip7002Account) + { + tracer.ReturnValue = executionWithdrawalRequests.FlatEncode(); + } else if(transaction.To == eip7251Account){ + tracer.ReturnValue = excutionConsolidationRequests.FlatEncode(); + } else { + tracer.ReturnValue = Array.Empty(); + } + return new TransactionResult(); + }); + } + + [Test] + public void ShouldProcessExecutionRequests() + { + Block block = Build.A.Block.TestObject; + ExecutionRequestsProcessor executionRequestProcessor = new(_transactionProcessor); + + TxReceipt[] txReceipts = [ + Build.A.Receipt.WithLogs( + Build.A.LogEntry.WithData( + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [ TestItem.PublicKeyA.Bytes, TestItem.AddressA.Bytes, BitConverter.GetBytes((ulong)1_000_000_000), TestItem.KeccakA.Bytes.ToArray(), BitConverter.GetBytes((ulong)1)]) + ).WithAddress(DepositContractAddress).TestObject, + Build.A.LogEntry.WithData( + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [ TestItem.PublicKeyB.Bytes, TestItem.AddressB.Bytes, BitConverter.GetBytes((ulong)2_000_000_000), TestItem.KeccakB.Bytes.ToArray(), BitConverter.GetBytes((ulong)2)]) + ).WithAddress(DepositContractAddress).TestObject, + Build.A.LogEntry.WithData( + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [ TestItem.PublicKeyC.Bytes, TestItem.AddressC.Bytes, BitConverter.GetBytes((ulong)3_000_000_000), TestItem.KeccakC.Bytes.ToArray(), BitConverter.GetBytes((ulong)3)]) + ).WithAddress(DepositContractAddress).TestObject + ).TestObject + ]; + + + executionRequestProcessor.ProcessExecutionRequests(block, _stateProvider, txReceipts, spec); + + var processedRequests = block.ExecutionRequests.ToList(); + + Assert.That(processedRequests, Has.Count.EqualTo(9)); + Assert.That(processedRequests, Is.EquivalentTo(executionDepositRequests.Concat(executionWithdrawalRequests).Concat(excutionConsolidationRequests))); + } +} diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index addcfc859de..11f42f4e382 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -6,7 +6,6 @@ using System.Linq; using Nethermind.Abi; using Nethermind.Core; -using Nethermind.Core.Crypto; using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index ac8cf8e0313..b90dd0539c6 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -2,10 +2,8 @@ // SPDX-License-Identifier: LGPL-3.0-only using System; -using System.IO; +using System.Linq; using System.Net; -using System.Text.Json; -using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Crypto; using Nethermind.Int256; @@ -99,28 +97,16 @@ public static Hash256 KeccakFromNumber(int i) public static Withdrawal WithdrawalD_4Eth = new() { Address = AddressD, Index = 4, ValidatorIndex = 2004, AmountInGwei = 4_000_000_000 }; public static Withdrawal WithdrawalE_5Eth = new() { Address = AddressE, Index = 5, ValidatorIndex = 2005, AmountInGwei = 5_000_000_000 }; public static Withdrawal WithdrawalF_6Eth = new() { Address = AddressF, Index = 6, ValidatorIndex = 2006, AmountInGwei = 6_000_000_000 }; - - public static Deposit DepositA_1Eth = new() { Index = 1, Pubkey = PublicKeyA.Bytes, Amount = 1_000_000_000, WithdrawalCredentials = AddressA.Bytes, Signature = KeccakA.Bytes.ToArray() }; - public static Deposit DepositB_2Eth = new() { Index = 2, Pubkey = PublicKeyB.Bytes, Amount = 2_000_000_000, WithdrawalCredentials = AddressB.Bytes, Signature = KeccakB.Bytes.ToArray() }; - public static Deposit DepositC_3Eth = new() { Index = 3, Pubkey = PublicKeyC.Bytes, Amount = 3_000_000_000, WithdrawalCredentials = AddressC.Bytes, Signature = KeccakC.Bytes.ToArray() }; - public static Deposit DepositD_4Eth = new() { Index = 4, Pubkey = PublicKeyD.Bytes, Amount = 4_000_000_000, WithdrawalCredentials = AddressD.Bytes, Signature = KeccakD.Bytes.ToArray() }; - public static Deposit DepositE_5Eth = new() { Index = 5, Pubkey = PublicKeyE.Bytes, Amount = 5_000_000_000, WithdrawalCredentials = AddressE.Bytes, Signature = KeccakE.Bytes.ToArray() }; - public static Deposit DepositF_6Eth = new() { Index = 6, Pubkey = PublicKeyF.Bytes, Amount = 6_000_000_000, WithdrawalCredentials = AddressF.Bytes, Signature = KeccakF.Bytes.ToArray() }; - - - public static WithdrawalRequest WithdrawalRequestA = new() { SourceAddress = AddressA, ValidatorPubkey = PublicKeyA.Bytes }; - public static WithdrawalRequest WithdrawalRequestB = new() { SourceAddress = AddressB, ValidatorPubkey = PublicKeyB.Bytes }; - public static WithdrawalRequest WithdrawalRequestC = new() { SourceAddress = AddressC, ValidatorPubkey = PublicKeyC.Bytes }; - public static WithdrawalRequest WithdrawalRequestD = new() { SourceAddress = AddressD, ValidatorPubkey = PublicKeyD.Bytes }; - public static WithdrawalRequest WithdrawalRequestE = new() { SourceAddress = AddressE, ValidatorPubkey = PublicKeyE.Bytes }; - public static WithdrawalRequest WithdrawalRequestF = new() { SourceAddress = AddressF, ValidatorPubkey = PublicKeyF.Bytes }; - - public static ConsolidationRequest ConsolidationRequestA = new() { SourceAddress = AddressA, SourcePubkey = PublicKeyA.Bytes, TargetPubkey = PublicKeyB.Bytes }; - public static ConsolidationRequest ConsolidationRequestB = new() { SourceAddress = AddressB, SourcePubkey = PublicKeyB.Bytes, TargetPubkey = PublicKeyC.Bytes }; - public static ConsolidationRequest ConsolidationRequestC = new() { SourceAddress = AddressC, SourcePubkey = PublicKeyC.Bytes, TargetPubkey = PublicKeyD.Bytes }; - public static ConsolidationRequest ConsolidationRequestD = new() { SourceAddress = AddressD, SourcePubkey = PublicKeyD.Bytes, TargetPubkey = PublicKeyE.Bytes }; - public static ConsolidationRequest ConsolidationRequestE = new() { SourceAddress = AddressE, SourcePubkey = PublicKeyE.Bytes, TargetPubkey = PublicKeyF.Bytes }; - public static ConsolidationRequest ConsolidationRequestF = new() { SourceAddress = AddressF, SourcePubkey = PublicKeyF.Bytes, TargetPubkey = PublicKeyA.Bytes }; + + public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = (byte[])PublicKeyA.Bytes.Concat(AddressA.Bytes).Concat(BitConverter.GetBytes((ulong)1_000_000_000)).Concat(KeccakA.Bytes.ToArray()).Concat(BitConverter.GetBytes((ulong)1)) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = (byte[])PublicKeyB.Bytes.Concat(AddressB.Bytes).Concat(BitConverter.GetBytes((ulong)2_000_000_000)).Concat(KeccakB.Bytes.ToArray()).Concat(BitConverter.GetBytes((ulong)2)) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = (byte[])PublicKeyC.Bytes.Concat(AddressC.Bytes).Concat(BitConverter.GetBytes((ulong)3_000_000_000)).Concat(KeccakC.Bytes.ToArray()).Concat(BitConverter.GetBytes((ulong)3)) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = (byte[])AddressA.Bytes.Concat(PublicKeyA.Bytes).Concat(BitConverter.GetBytes((ulong)1_000_000_000))}; + public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = (byte[])AddressB.Bytes.Concat(PublicKeyB.Bytes).Concat(BitConverter.GetBytes((ulong)2_000_000_000))}; + public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = (byte[])AddressC.Bytes.Concat(PublicKeyC.Bytes).Concat(BitConverter.GetBytes((ulong)3_000_000_000))}; + public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = (byte[])AddressA.Bytes.Concat(PublicKeyA.Bytes).Concat(PublicKeyB.Bytes)}; + public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = (byte[])AddressB.Bytes.Concat(PublicKeyB.Bytes).Concat(PublicKeyC.Bytes)}; + public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = (byte[])AddressC.Bytes.Concat(PublicKeyC.Bytes).Concat(PublicKeyD.Bytes)}; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); diff --git a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs b/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs deleted file mode 100644 index 99973b8bc23..00000000000 --- a/src/Nethermind/Nethermind.Evm.Test/ConsolidationRequestProcessorTest.cs +++ /dev/null @@ -1,96 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Linq; -using FluentAssertions; -using Nethermind.Consensus.Requests; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Extensions; -using Nethermind.Core.Specs; -using Nethermind.Core.Test.Builders; -using Nethermind.Crypto; -using Nethermind.Db; -using Nethermind.Evm.Tracing; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.Int256; -using Nethermind.Logging; -using Nethermind.Specs; -using Nethermind.State; -using Nethermind.Trie.Pruning; -using NSubstitute; -using NUnit.Framework; - - -namespace Nethermind.Evm.Test; - -public class ConsolidationRequestProcessorTests -{ - - private ISpecProvider _specProvider; - private ITransactionProcessor _transactionProcessor; - private IWorldState _stateProvider; - - private ICodeInfoRepository _codeInfoRepository; - - private static readonly UInt256 AccountBalance = 1.Ether(); - - private readonly Address eip7251Account = Eip7251Constants.ConsolidationRequestPredeployAddress; - - [SetUp] - public void Setup() - { - _specProvider = MainnetSpecProvider.Instance; - MemDb stateDb = new(); - TrieStore trieStore = new(stateDb, LimboLogs.Instance); - _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - _stateProvider.CreateAccount(eip7251Account, AccountBalance); - _stateProvider.Commit(_specProvider.GenesisSpec); - _stateProvider.CommitTree(0); - - _codeInfoRepository = new CodeInfoRepository(); - - VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); - - _transactionProcessor = Substitute.For(); - - _transactionProcessor.Execute(Arg.Any(), Arg.Any(), Arg.Any()) - .Returns(ci => - { - CallOutputTracer tracer = ci.Arg(); - tracer.ReturnValue = Bytes.FromHexString("a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000effffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ffffffffffffffff"); - return new TransactionResult(); - }); - } - - - [Test] - public void ShouldProcessConsolidationRequest() - { - - IReleaseSpec spec = Substitute.For(); - spec.ConsolidationRequestsEnabled.Returns(true); - spec.Eip7251ContractAddress.Returns(eip7251Account); - - Block block = Build.A.Block.TestObject; - - ConsolidationRequestsProcessor ConsolidationRequestsProcessor = new(transactionProcessor: _transactionProcessor); - - var ConsolidationRequest = new ConsolidationRequest() - { - SourceAddress = new Address(Bytes.FromHexString("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), - SourcePubkey = Bytes.FromHexString("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"), - TargetPubkey = Bytes.FromHexString("0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000") - }; - - var ConsolidationRequests = ConsolidationRequestsProcessor.ReadRequests(block, _stateProvider, spec).ToList(); - - Assert.That(ConsolidationRequests, Has.Count.EqualTo(10)); - ConsolidationRequest ConsolidationRequestResult = ConsolidationRequests[0]; - - ConsolidationRequestResult.Should().BeEquivalentTo(ConsolidationRequest, options => options - .Using>(ctx => ctx.Subject.Span.SequenceEqual(ctx.Expectation.Span).Should().BeTrue()) - .WhenTypeIs>()); - } -} diff --git a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs b/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs deleted file mode 100644 index 279b668e424..00000000000 --- a/src/Nethermind/Nethermind.Evm.Test/WithdrawalRequestsProcessorTests.cs +++ /dev/null @@ -1,96 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using System.Linq; -using FluentAssertions; -using Nethermind.Consensus.Requests; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Extensions; -using Nethermind.Core.Specs; -using Nethermind.Core.Test.Builders; -using Nethermind.Crypto; -using Nethermind.Db; -using Nethermind.Evm.Tracing; -using Nethermind.Evm.TransactionProcessing; -using Nethermind.Int256; -using Nethermind.Logging; -using Nethermind.Specs; -using Nethermind.State; -using Nethermind.Trie.Pruning; -using NSubstitute; -using NUnit.Framework; - - -namespace Nethermind.Evm.Test; - -public class WithdrawalRequestProcessorTests -{ - - private ISpecProvider _specProvider; - private IEthereumEcdsa _ethereumEcdsa; - private ITransactionProcessor _transactionProcessor; - private IWorldState _stateProvider; - private ICodeInfoRepository _codeInfoRepository; - private static readonly UInt256 AccountBalance = 1.Ether(); - private readonly Address eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; - - [SetUp] - public void Setup() - { - _specProvider = MainnetSpecProvider.Instance; - MemDb stateDb = new(); - TrieStore trieStore = new(stateDb, LimboLogs.Instance); - _stateProvider = new WorldState(trieStore, new MemDb(), LimboLogs.Instance); - _stateProvider.CreateAccount(eip7002Account, AccountBalance); - _stateProvider.Commit(_specProvider.GenesisSpec); - _stateProvider.CommitTree(0); - - _codeInfoRepository = new CodeInfoRepository(); - - VirtualMachine virtualMachine = new(new TestBlockhashProvider(_specProvider), _specProvider, _codeInfoRepository, LimboLogs.Instance); - - _transactionProcessor = Substitute.For(); - - _transactionProcessor.Execute(Arg.Any(), Arg.Any(), Arg.Any()) - .Returns(ci => - { - CallOutputTracer tracer = ci.Arg(); - tracer.ReturnValue = Bytes.FromHexString("a94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008ffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000affffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cffffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000effffffffffffffffa94f5374fce5edbc8e2a8697c15331677e6ebf0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ffffffffffffffff"); - return new TransactionResult(); - }); - - _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId); - } - - - [Test] - public void ShouldProcessWithdrawalRequest() - { - IReleaseSpec spec = Substitute.For(); - spec.WithdrawalRequestsEnabled.Returns(true); - spec.Eip7002ContractAddress.Returns(eip7002Account); - - Block block = Build.A.Block.TestObject; - - WithdrawalRequestsProcessor withdrawalRequestsProcessor = new(transactionProcessor: _transactionProcessor); - - var withdrawalRequest = new WithdrawalRequest() - { - SourceAddress = new Address(Bytes.FromHexString("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")), - ValidatorPubkey = Bytes.FromHexString("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"), - Amount = 0 - }; - - var withdrawalRequests = withdrawalRequestsProcessor.ReadRequests(block, _stateProvider, spec).ToList(); - - Assert.That(withdrawalRequests, Has.Count.EqualTo(16)); - - WithdrawalRequest withdrawalRequestResult = withdrawalRequests[0]; - - withdrawalRequestResult.Should().BeEquivalentTo(withdrawalRequest, options => options - .Using>(ctx => ctx.Subject.Span.SequenceEqual(ctx.Expectation.Span).Should().BeTrue()) - .WhenTypeIs>()); - } -} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs deleted file mode 100644 index 9cd35c7d626..00000000000 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/IGetPayloadBodiesByRangeV2Handler.cs +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System.Collections.Generic; -using System.Threading.Tasks; -using Nethermind.JsonRpc; -using Nethermind.Merge.Plugin.Data; - -namespace Nethermind.Merge.Plugin.Handlers; - -public interface IGetPayloadBodiesByRangeV2Handler -{ - Task>> Handle(long start, long count); -} From f97aa5a572cbc0fdd5b377d5c187a50aeefabd41 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 7 Oct 2024 01:51:43 +0530 Subject: [PATCH 479/551] make executionRequests optional --- .../Data/IExecutionPayloadParams.cs | 2 +- .../Handlers/EngineRpcCapabilitiesProvider.cs | 9 --------- .../InvalidChainTracker/InvalidBlockInterceptor.cs | 3 +-- .../Synchronization/ChainLevelHelper.cs | 2 +- 4 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs index be6d74ace05..b196559d8b2 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs @@ -25,7 +25,7 @@ public class ExecutionPayloadParams( TVersionedExecutionPayload executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, - ExecutionRequest[]? executionRequests) + ExecutionRequest[]? executionRequests = null) : IExecutionPayloadParams where TVersionedExecutionPayload : ExecutionPayload { public TVersionedExecutionPayload ExecutionPayload => executionPayload; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs index 57d1ab5f5bd..3edcb837a34 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/EngineRpcCapabilitiesProvider.cs @@ -51,15 +51,6 @@ public EngineRpcCapabilitiesProvider(ISpecProvider specProvider) #region Prague _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.RequestsEnabled, spec.RequestsEnabled); _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.RequestsEnabled, spec.RequestsEnabled); - _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByHashV2)] = (spec.RequestsEnabled, false); - _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByRangeV2)] = (spec.RequestsEnabled, false); - #endregion - - #region Prague - _capabilities[nameof(IEngineRpcModule.engine_getPayloadV4)] = (spec.RequestsEnabled, spec.RequestsEnabled); - _capabilities[nameof(IEngineRpcModule.engine_newPayloadV4)] = (spec.RequestsEnabled, spec.RequestsEnabled); - _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByHashV2)] = (spec.RequestsEnabled, false); - _capabilities[nameof(IEngineRpcModule.engine_getPayloadBodiesByRangeV2)] = (spec.RequestsEnabled, false); #endregion } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs index 7c62b158219..aa84112421f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/InvalidChainTracker/InvalidBlockInterceptor.cs @@ -123,6 +123,5 @@ private static bool ShouldNotTrackInvalidation(Block block) => // Body does not match header, but it does not mean the hash that the header point to is invalid. !BlockValidator.ValidateTxRootMatchesTxs(block, out _) || !BlockValidator.ValidateUnclesHashMatches(block, out _) || - !BlockValidator.ValidateWithdrawalsHashMatches(block, out _) || - !BlockValidator.ValidateRequestsHashMatches(block, out _); + !BlockValidator.ValidateWithdrawalsHashMatches(block, out _); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs index 9a3f7c1ca30..3aed5334f49 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Synchronization/ChainLevelHelper.cs @@ -159,7 +159,7 @@ public bool TrySetNextBlocks(int maxCount, BlockDownloadContext context) { Block? block = _blockTree.FindBlock(hashesToRequest[i], BlockTreeLookupOptions.None); if (block is null) return false; - BlockBody blockBody = new(block.Transactions, block.Uncles, block?.Withdrawals, block?.Requests); + BlockBody blockBody = new(block.Transactions, block.Uncles, block?.Withdrawals); context.SetBody(i + offset, blockBody); } From fafb812b0972b7b9f2c92e6299adad481df4cf2f Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 7 Oct 2024 14:19:37 +0530 Subject: [PATCH 480/551] fix test errors --- .../AuRaBlockProcessor.cs | 4 +- .../ExecutionRequestProcessorTests.cs | 4 +- .../ExecutionRequestProcessor.cs | 2 +- .../IExecutionRequestProcessor.cs | 2 +- .../Processing/BlockProcessor.cs | 6 +- .../Producers/BlockProducerEnvFactory.cs | 8 +- .../Blockchain/TestBlockchain.cs | 11 +- .../Builders/ConsolidationRequestBuilder.cs | 32 --- .../Builders/DepositBuilder.cs | 45 ---- .../Builders/WithdrawalRequestBuilder.cs | 33 --- .../Encoding/BlockDecoderTests.cs | 28 --- .../Encoding/ConsensusRequestDecoderTests.cs | 214 ------------------ .../AuRaMergeBlockProcessor.cs | 4 +- .../AuRaMergeBlockProducerEnvFactory.cs | 10 +- .../InitializeBlockchainAuRaMerge.cs | 3 - .../ConsensusRequestsProcessorMock.cs | 37 --- .../EngineModuleTests.Setup.cs | 22 +- .../EngineModuleTests.V3.cs | 2 - .../EngineModuleTests.V4.cs | 21 +- .../ExecutionRequestsProcessorMock.cs | 36 +++ .../Nethermind.Optimism/OptimismPlugin.cs | 2 - 21 files changed, 79 insertions(+), 447 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/ConsolidationRequestBuilder.cs delete mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs delete mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs delete mode 100644 src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs delete mode 100644 src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs create mode 100644 src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs index 6a9b8d919b8..04e8506430f 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs @@ -53,7 +53,7 @@ public AuRaBlockProcessor( AuRaContractGasLimitOverride? gasLimitOverride = null, ContractRewriter? contractRewriter = null, IBlockCachePreWarmer? preWarmer = null, - IExecutionRequestProcessor? executionRequestProcessor = null) + IExecutionRequestsProcessor? executionRequestsProcessor = null) : base( specProvider, blockValidator, @@ -67,7 +67,7 @@ public AuRaBlockProcessor( logManager, withdrawalProcessor, preWarmer: preWarmer, - executionRequestProcessor: executionRequestProcessor) + executionRequestsProcessor: executionRequestsProcessor) { _specProvider = specProvider; _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index f536e564ffc..4adfca6c6fd 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -90,7 +90,7 @@ public void Setup() public void ShouldProcessExecutionRequests() { Block block = Build.A.Block.TestObject; - ExecutionRequestsProcessor executionRequestProcessor = new(_transactionProcessor); + ExecutionRequestsProcessor executionRequestsProcessor = new(_transactionProcessor); TxReceipt[] txReceipts = [ Build.A.Receipt.WithLogs( @@ -107,7 +107,7 @@ public void ShouldProcessExecutionRequests() ]; - executionRequestProcessor.ProcessExecutionRequests(block, _stateProvider, txReceipts, spec); + executionRequestsProcessor.ProcessExecutionRequests(block, _stateProvider, txReceipts, spec); var processedRequests = block.ExecutionRequests.ToList(); diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index 11f42f4e382..56911bf7ea4 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -18,7 +18,7 @@ namespace Nethermind.Consensus.ExecutionRequests; -public class ExecutionRequestsProcessor(ITransactionProcessor transactionProcessor) : IExecutionRequestProcessor +public class ExecutionRequestsProcessor(ITransactionProcessor transactionProcessor) : IExecutionRequestsProcessor { private readonly AbiSignature _depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); private readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/IExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/IExecutionRequestProcessor.cs index 82ba3149ed9..f0461e3a8b1 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/IExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/IExecutionRequestProcessor.cs @@ -9,7 +9,7 @@ namespace Nethermind.Consensus.ExecutionRequests; -public interface IExecutionRequestProcessor +public interface IExecutionRequestsProcessor { public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec); } diff --git a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs index a155ad4e73d..d7eba0c0542 100644 --- a/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs @@ -47,7 +47,7 @@ public partial class BlockProcessor( IWithdrawalProcessor? withdrawalProcessor = null, IReceiptsRootCalculator? receiptsRootCalculator = null, IBlockCachePreWarmer? preWarmer = null, - IExecutionRequestProcessor? executionRequestProcessor = null) + IExecutionRequestsProcessor? executionRequestsProcessor = null) : IBlockProcessor { private readonly ILogger _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); @@ -61,7 +61,7 @@ public partial class BlockProcessor( private readonly IRewardCalculator _rewardCalculator = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator)); private readonly IBlockProcessor.IBlockTransactionsExecutor _blockTransactionsExecutor = blockTransactionsExecutor ?? throw new ArgumentNullException(nameof(blockTransactionsExecutor)); private readonly IBlockhashStore _blockhashStore = blockHashStore ?? throw new ArgumentNullException(nameof(blockHashStore)); - private readonly IExecutionRequestProcessor _executionRequestProcessor = executionRequestProcessor ?? new ExecutionRequestsProcessor(transactionProcessor); + private readonly IExecutionRequestsProcessor _executionRequestsProcessor = executionRequestsProcessor ?? new ExecutionRequestsProcessor(transactionProcessor); private Task _clearTask = Task.CompletedTask; private const int MaxUncommittedBlocks = 64; @@ -309,7 +309,7 @@ protected virtual TxReceipt[] ProcessBlock( ApplyMinerRewards(block, blockTracer, spec); _withdrawalProcessor.ProcessWithdrawals(block, spec); - _executionRequestProcessor.ProcessExecutionRequests(block, _stateProvider, receipts, spec); + _executionRequestsProcessor.ProcessExecutionRequests(block, _stateProvider, receipts, spec); ReceiptsTracer.EndBlockTrace(); diff --git a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs index a5e28bf65e4..e068a1a2313 100644 --- a/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Consensus/Producers/BlockProducerEnvFactory.cs @@ -35,7 +35,7 @@ public class BlockProducerEnvFactory : IBlockProducerEnvFactory protected readonly ITransactionComparerProvider _transactionComparerProvider; protected readonly IBlocksConfig _blocksConfig; protected readonly ILogManager _logManager; - private readonly IExecutionRequestProcessor? _executionRequestProcessor; + private readonly IExecutionRequestsProcessor? _executionRequestsProcessor; public IBlockTransactionsExecutorFactory TransactionsExecutorFactory { get; set; } @@ -51,7 +51,7 @@ public BlockProducerEnvFactory( ITransactionComparerProvider transactionComparerProvider, IBlocksConfig blocksConfig, ILogManager logManager, - IExecutionRequestProcessor? executionRequestProcessor = null) + IExecutionRequestsProcessor? executionRequestsProcessor = null) { _worldStateManager = worldStateManager; _blockTree = blockTree; @@ -64,7 +64,7 @@ public BlockProducerEnvFactory( _transactionComparerProvider = transactionComparerProvider; _blocksConfig = blocksConfig; _logManager = logManager; - _executionRequestProcessor = executionRequestProcessor; + _executionRequestsProcessor = executionRequestsProcessor; TransactionsExecutorFactory = new BlockProducerTransactionsExecutorFactory(specProvider, logManager); } @@ -159,7 +159,7 @@ protected virtual BlockProcessor CreateBlockProcessor( new BlockhashStore(_specProvider, readOnlyTxProcessingEnv.WorldState), logManager, new BlockProductionWithdrawalProcessor(new WithdrawalProcessor(readOnlyTxProcessingEnv.WorldState, logManager)), - executionRequestProcessor: _executionRequestProcessor + executionRequestsProcessor: _executionRequestsProcessor ); } } diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index c22510df0be..629954c1f47 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -15,9 +15,9 @@ using Nethermind.Config; using Nethermind.Consensus; using Nethermind.Consensus.Comparers; +using Nethermind.Consensus.ExecutionRequests; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; @@ -119,7 +119,7 @@ protected TestBlockchain() public ProducedBlockSuggester Suggester { get; protected set; } = null!; - public IConsensusRequestsProcessor? ConsensusRequestsProcessor { get; protected set; } = null!; + public IExecutionRequestsProcessor? ExecutionRequestsProcessor { get; protected set; } = null!; public ChainLevelInfoRepository ChainLevelInfoRepository { get; protected set; } = null!; public static TransactionBuilder BuildSimpleTransaction => Builders.Build.A.Transaction.SignedAndResolved(TestItem.PrivateKeyA).To(AccountB); @@ -363,11 +363,6 @@ protected virtual Block GetGenesisBlock() genesisBlockBuilder.WithParentBeaconBlockRoot(Keccak.Zero); } - if (SpecProvider.GenesisSpec.RequestsEnabled) - { - genesisBlockBuilder.WithConsensusRequests(0); - } - genesisBlockBuilder.WithStateRoot(State.StateRoot); return genesisBlockBuilder.TestObject; @@ -393,7 +388,7 @@ protected virtual IBlockProcessor CreateBlockProcessor() => new BlockhashStore(SpecProvider, State), LogManager, preWarmer: CreateBlockCachePreWarmer(), - consensusRequestsProcessor: ConsensusRequestsProcessor); + executionRequestsProcessor: ExecutionRequestsProcessor); protected virtual IBlockCachePreWarmer CreateBlockCachePreWarmer() => diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/ConsolidationRequestBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/ConsolidationRequestBuilder.cs deleted file mode 100644 index 63628ef305b..00000000000 --- a/src/Nethermind/Nethermind.Core.Test/Builders/ConsolidationRequestBuilder.cs +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Core.Test.Builders; -using Nethermind.Core.ConsensusRequests; - -public class ConsolidationRequestBuilder : BuilderBase -{ - public ConsolidationRequestBuilder() => TestObject = new(); - - public ConsolidationRequestBuilder WithSourceAddress(Address sourceAddress) - { - TestObject.SourceAddress = sourceAddress; - - return this; - } - - public ConsolidationRequestBuilder WithSourcePubkey(byte[] SourcePubkey) - { - TestObject.SourcePubkey = SourcePubkey; - - return this; - } - - public ConsolidationRequestBuilder WithTargetPubkey(byte[] TargetPubkey) - { - TestObject.TargetPubkey = TargetPubkey; - - return this; - } - -} diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs deleted file mode 100644 index 48a06b77f8e..00000000000 --- a/src/Nethermind/Nethermind.Core.Test/Builders/DepositBuilder.cs +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using Nethermind.Core.ConsensusRequests; - -namespace Nethermind.Core.Test.Builders; - -public class DepositBuilder : BuilderBase -{ - public DepositBuilder() => TestObject = new(); - - public DepositBuilder WithAmount(ulong amount) - { - TestObject.Amount = amount; - - return this; - } - - public DepositBuilder WithIndex(ulong index) - { - TestObject.Index = index; - - return this; - } - - public DepositBuilder WithWithdrawalCredentials(byte[] withdrawalCredentials) - { - TestObject.WithdrawalCredentials = withdrawalCredentials; - - return this; - } - - public DepositBuilder WithSignature(byte[] signature) - { - TestObject.Signature = signature; - - return this; - } - public DepositBuilder WithPublicKey(byte[] pubKey) - { - TestObject.Pubkey = pubKey; - - return this; - } -} diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs deleted file mode 100644 index 4a80e64beca..00000000000 --- a/src/Nethermind/Nethermind.Core.Test/Builders/WithdrawalRequestBuilder.cs +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Core.Test.Builders; -using Nethermind.Core.ConsensusRequests; - -public class WithdrawalRequestBuilder : BuilderBase -{ - public WithdrawalRequestBuilder() => TestObject = new(); - - - public WithdrawalRequestBuilder WithAmount(ulong amount) - { - TestObject.Amount = amount; - - return this; - } - - public WithdrawalRequestBuilder WithSourceAddress(Address sourceAddress) - { - TestObject.SourceAddress = sourceAddress; - - return this; - } - - public WithdrawalRequestBuilder WithValidatorPubkey(byte[] ValidatorPubkey) - { - TestObject.ValidatorPubkey = ValidatorPubkey; - - return this; - } - -} diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs index e4ced1ba301..47335ed1726 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/BlockDecoderTests.cs @@ -3,7 +3,6 @@ using System; using System.IO; -using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; @@ -40,32 +39,6 @@ public BlockDecoderTests() .TestObject; } - var requests = new ConsensusRequest[8]; - - for (var i = 0; i < requests.Length; i++) - { - if (i % 2 == 0) - { - requests[i] = Build.A.Deposit - .WithIndex(long.MaxValue) - .WithPublicKey(new byte[] { (byte)i }) - .WithSignature(new byte[] { (byte)i }) - .WithWithdrawalCredentials(new byte[] { (byte)i }) - .WithAmount(int.MaxValue) - .TestObject; - } - else - { - byte[] ValidatorPubkey = new byte[48]; - ValidatorPubkey[11] = 11; - requests[i] = Build.A.WithdrawalRequest - .WithSourceAddress(TestItem.AddressA) - .WithValidatorPubkey(ValidatorPubkey) - .WithAmount(int.MaxValue) - .TestObject; - } - } - _scenarios = new[] { Build.A.Block.WithNumber(1).TestObject, @@ -120,7 +93,6 @@ public BlockDecoderTests() .WithBlobGasUsed(ulong.MaxValue) .WithExcessBlobGas(ulong.MaxValue) .WithMixHash(Keccak.EmptyTreeHash) - .WithConsensusRequests(requests) .TestObject }; } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs deleted file mode 100644 index c311fb36a7f..00000000000 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/ConsensusRequestDecoderTests.cs +++ /dev/null @@ -1,214 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using System; -using FluentAssertions; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Extensions; -using Nethermind.Evm.Tracing.GethStyle.Custom.JavaScript; -using Nethermind.Serialization.Rlp; -using NUnit.Framework; -using Nethermind.Core.Test.Builders; - -namespace Nethermind.Core.Test.Encoding; - -public class ConsensusRequestDecoderTests -{ - [Test] - public void Roundtrip_deposit() - { - ConsensusRequest deposit = new Deposit() - { - Index = long.MaxValue, - Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue - }; - - byte[] rlp = Rlp.Encode(deposit).Bytes; - ConsensusRequest decoded = Rlp.Decode(rlp); - - decoded.Should().BeEquivalentTo(deposit); - } - - [Test] - public void Roundtrip_withdrawalRequest() - { - byte[] ValidatorPubkey = new byte[48]; - ValidatorPubkey[11] = 11; - ConsensusRequest withdrawalRequest = new WithdrawalRequest() - { - SourceAddress = TestItem.AddressA, - ValidatorPubkey = ValidatorPubkey, - Amount = int.MaxValue - }; - - byte[] rlp = Rlp.Encode(withdrawalRequest).Bytes; - ConsensusRequest decoded = Rlp.Decode(rlp); - - decoded.Should().BeEquivalentTo(withdrawalRequest); - } - - [Test] - public void Roundtrip_consolidationRequest() - { - byte[] SourcePubkey = new byte[48]; - SourcePubkey[11] = 11; - byte[] TargetPubkey = new byte[48]; - TargetPubkey[22] = 22; - ConsensusRequest consolidationRequest = new ConsolidationRequest() - { - SourceAddress = TestItem.AddressA, - SourcePubkey = SourcePubkey, - TargetPubkey = TargetPubkey - }; - - byte[] rlp = Rlp.Encode(consolidationRequest).Bytes; - ConsensusRequest decoded = Rlp.Decode(rlp); - - decoded.Should().BeEquivalentTo(consolidationRequest); - } - - [Test] - public void Should_decode_deposit_with_ValueDecoderContext() - { - ConsensusRequest deposit = new Deposit() - { - Index = long.MaxValue, - Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue - }; - RlpStream stream = new(1024); - ConsensusRequestDecoder codec = ConsensusRequestDecoder.Instance; - - codec.Encode(stream, deposit); - - Rlp.ValueDecoderContext decoderContext = new(stream.Data.AsSpan()); - Deposit? decoded = (Deposit?)codec.Decode(ref decoderContext); - - decoded.Should().BeEquivalentTo(deposit); - } - - [Test] - public void Should_decode_withdrawalRequest_with_ValueDecoderContext() - { - ConsensusRequest withdrawalRequest = new WithdrawalRequest() - { - SourceAddress = TestItem.AddressA, - ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue - }; - RlpStream stream = new(1024); - ConsensusRequestDecoder codec = ConsensusRequestDecoder.Instance; - - codec.Encode(stream, withdrawalRequest); - - Rlp.ValueDecoderContext decoderContext = new(stream.Data.AsSpan()); - WithdrawalRequest? decoded = (WithdrawalRequest?)codec.Decode(ref decoderContext); - - decoded.Should().BeEquivalentTo(withdrawalRequest); - } - - [Test] - public void Should_decode_consolidationRequest_with_ValueDecoderContext() - { - ConsensusRequest consolidationRequest = new ConsolidationRequest() - { - SourceAddress = TestItem.AddressA, - SourcePubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - TargetPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes() - }; - RlpStream stream = new(1024); - ConsensusRequestDecoder codec = ConsensusRequestDecoder.Instance; - - codec.Encode(stream, consolidationRequest); - - Rlp.ValueDecoderContext decoderContext = new(stream.Data.AsSpan()); - ConsolidationRequest? decoded = (ConsolidationRequest?)codec.Decode(ref decoderContext); - - decoded.Should().BeEquivalentTo(consolidationRequest); - } - - [Test] - public void Should_encode_deposit_same_for_Rlp_Encode_and_ConsensusRequestDecoder_Encode() - { - ConsensusRequest deposit = new Deposit() - { - Index = long.MaxValue, - Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue - }; - byte[] rlp1 = ConsensusRequestDecoder.Instance.Encode(deposit).Bytes; - byte[] rlp2 = Rlp.Encode(deposit).Bytes; - - rlp1.Should().BeEquivalentTo(rlp2); - } - - [Test] - public void Should_encode_withdrawalRequest_same_for_Rlp_Encode_and_ConsensusRequestDecoder_Encode() - { - ConsensusRequest withdrawalRequest = new WithdrawalRequest() - { - SourceAddress = TestItem.AddressA, - ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue - }; - byte[] rlp1 = ConsensusRequestDecoder.Instance.Encode(withdrawalRequest).Bytes; - byte[] rlp2 = Rlp.Encode(withdrawalRequest).Bytes; - - rlp1.Should().BeEquivalentTo(rlp2); - } - - [Test] - public void Should_encode_consolidationRequest_same_for_Rlp_Encode_and_ConsensusRequestDecoder_Encode() - { - ConsensusRequest consolidationRequest = new ConsolidationRequest() - { - SourceAddress = TestItem.AddressA, - SourcePubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - TargetPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes() - }; - byte[] rlp1 = ConsensusRequestDecoder.Instance.Encode(consolidationRequest).Bytes; - byte[] rlp2 = Rlp.Encode(consolidationRequest).Bytes; - - rlp1.Should().BeEquivalentTo(rlp2); - } - - [Test] - public void Should_encode_ConsensusRequests_Array() - { - ConsensusRequest[] requests = new ConsensusRequest[] - { - new Deposit() - { - Index = long.MaxValue, - Pubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Signature = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - WithdrawalCredentials = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue - }, - new WithdrawalRequest() - { - SourceAddress = TestItem.AddressA, - ValidatorPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - Amount = int.MaxValue - }, - new ConsolidationRequest() - { - SourceAddress = TestItem.AddressA, - SourcePubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes(), - TargetPubkey = KeccakTests.KeccakOfAnEmptyString.ToBytes() - } - }; - - byte[] rlp = Rlp.Encode(requests).Bytes; - RlpStream rlpStream = new(rlp); - ConsensusRequest[] decoded = Rlp.DecodeArray(rlpStream, ConsensusRequestDecoder.Instance); - decoded.Should().BeEquivalentTo(requests); - } -} diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs index 56b94bb33a8..62a4cedd69c 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs @@ -38,7 +38,7 @@ public class AuRaMergeBlockProcessor( AuRaContractGasLimitOverride? gasLimitOverride = null, ContractRewriter? contractRewriter = null, IBlockCachePreWarmer? preWarmer = null, - IExecutionRequestProcessor? executionRequestProcessor = null) + IExecutionRequestsProcessor? executionRequestsProcessor = null) : AuRaBlockProcessor(specProvider, blockValidator, rewardCalculator, @@ -55,7 +55,7 @@ public class AuRaMergeBlockProcessor( gasLimitOverride, contractRewriter, preWarmer, - executionRequestProcessor) + executionRequestsProcessor) { protected override TxReceipt[] ProcessBlock(Block block, IBlockTracer blockTracer, ProcessingOptions options) => block.IsPostMerge diff --git a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs index cb5bd2bdc69..e95ff79e3a1 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProducerEnvFactory.cs @@ -24,7 +24,7 @@ namespace Nethermind.Merge.AuRa; public class AuRaMergeBlockProducerEnvFactory : BlockProducerEnvFactory { private readonly AuRaNethermindApi _auraApi; - private readonly IExecutionRequestProcessor? _executionRequestProcessor; + private readonly IExecutionRequestsProcessor? _executionRequestsProcessor; public AuRaMergeBlockProducerEnvFactory( AuRaNethermindApi auraApi, IWorldStateManager worldStateManager, @@ -38,7 +38,7 @@ public AuRaMergeBlockProducerEnvFactory( ITransactionComparerProvider transactionComparerProvider, IBlocksConfig blocksConfig, ILogManager logManager, - IExecutionRequestProcessor? executionRequestProcessor = null) : base( + IExecutionRequestsProcessor? executionRequestsProcessor = null) : base( worldStateManager, blockTree, specProvider, @@ -50,10 +50,10 @@ public AuRaMergeBlockProducerEnvFactory( transactionComparerProvider, blocksConfig, logManager, - executionRequestProcessor) + executionRequestsProcessor) { _auraApi = auraApi; - _executionRequestProcessor = executionRequestProcessor; + _executionRequestsProcessor = executionRequestsProcessor; } protected override BlockProcessor CreateBlockProcessor( @@ -85,7 +85,7 @@ protected override BlockProcessor CreateBlockProcessor( ), readOnlyTxProcessingEnv.TransactionProcessor, null, - executionRequestProcessor: _executionRequestProcessor); + executionRequestsProcessor: _executionRequestsProcessor); } protected override TxPoolTxSource CreateTxPoolTxSource( diff --git a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs index d37d4fb9b1a..25597d5797d 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs @@ -5,10 +5,7 @@ using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Consensus.AuRa; using Nethermind.Consensus.AuRa.InitializationSteps; -using Nethermind.Consensus.AuRa.Validators; -using Nethermind.Consensus.Withdrawals; using Nethermind.Consensus.Processing; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Transactions; using Nethermind.Core; using Nethermind.Evm.TransactionProcessing; diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs deleted file mode 100644 index 14b1b8881c1..00000000000 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ConsensusRequestsProcessorMock.cs +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -using MathNet.Numerics.Distributions; -using Nethermind.Consensus.Requests; -using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; -using Nethermind.Core.Crypto; -using Nethermind.Core.Specs; -using Nethermind.Core.Test.Builders; -using Nethermind.State; -using Nethermind.State.Proofs; - -namespace Nethermind.Merge.Plugin.Test; - -public class ConsensusRequestsProcessorMock : IConsensusRequestsProcessor -{ - public static ConsensusRequest[] Requests = - [ - TestItem.DepositA_1Eth, - TestItem.DepositB_2Eth, - TestItem.WithdrawalRequestA, - TestItem.WithdrawalRequestB, - TestItem.ConsolidationRequestA, - TestItem.ConsolidationRequestB - ]; - - public void ProcessRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) - { - if (block.IsGenesis) - return; - - block.Body.Requests = Requests; - Hash256 root = new RequestsTrie(Requests).RootHash; - block.Header.RequestsRoot = root; - } -} diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index fb20a057b19..7c5cc8162b2 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -12,9 +12,9 @@ using Nethermind.Config; using Nethermind.Consensus; using Nethermind.Consensus.Comparers; +using Nethermind.Consensus.ExecutionRequests; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Consensus.Validators; using Nethermind.Consensus.Withdrawals; @@ -59,8 +59,8 @@ protected virtual MergeTestBlockchain CreateBaseBlockchain( IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadService = null, ILogManager? logManager = null, - IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) => - new(mergeConfig, mockedPayloadService, logManager, mockedConsensusRequestsProcessor); + IExecutionRequestsProcessor? mockedExecutionRequestsProcessor = null) => + new(mergeConfig, mockedPayloadService, logManager, mockedExecutionRequestsProcessor); protected async Task CreateBlockchain( @@ -68,8 +68,8 @@ protected async Task CreateBlockchain( IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadService = null, ILogManager? logManager = null, - IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) - => await CreateBaseBlockchain(mergeConfig, mockedPayloadService, logManager, mockedConsensusRequestsProcessor) + IExecutionRequestsProcessor ? mockedExecutionRequestsProcessor = null) + => await CreateBaseBlockchain(mergeConfig, mockedPayloadService, logManager, mockedExecutionRequestsProcessor) .Build(new TestSingleReleaseSpecProvider(releaseSpec ?? London.Instance)); protected async Task CreateBlockchain(ISpecProvider specProvider, @@ -140,8 +140,6 @@ private IEngineRpcModule CreateEngineModule(MergeTestBlockchain chain, ISyncConf new BlocksConfig().SecondsPerSlot), new GetPayloadBodiesByHashV1Handler(chain.BlockTree, chain.LogManager), new GetPayloadBodiesByRangeV1Handler(chain.BlockTree, chain.LogManager), - new GetPayloadBodiesByHashV2Handler(chain.BlockTree, chain.LogManager), - new GetPayloadBodiesByRangeV2Handler(chain.BlockTree, chain.LogManager), new ExchangeTransitionConfigurationV1Handler(chain.PoSSwitcher, chain.LogManager), new ExchangeCapabilitiesHandler(capabilitiesProvider, chain.LogManager), new GetBlobsHandler(chain.TxPool), @@ -180,14 +178,14 @@ public MergeTestBlockchain ThrottleBlockProcessor(int delayMs) return this; } - public MergeTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null, IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) + public MergeTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null, IExecutionRequestsProcessor? mockedExecutionRequestsProcessor = null) { GenesisBlockBuilder = Core.Test.Builders.Build.A.Block.Genesis.Genesis.WithTimestamp(1UL); MergeConfig = mergeConfig ?? new MergeConfig() { TerminalTotalDifficulty = "0" }; PayloadPreparationService = mockedPayloadPreparationService; SyncPeerPool = Substitute.For(); LogManager = logManager ?? LogManager; - ConsensusRequestsProcessor = mockedConsensusRequestsProcessor; + ExecutionRequestsProcessor = mockedExecutionRequestsProcessor; } protected override Task AddBlocksOnStart() => Task.CompletedTask; @@ -226,7 +224,7 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT transactionComparerProvider, blocksConfig, LogManager, - ConsensusRequestsProcessor); + ExecutionRequestsProcessor); BlockProducerEnv blockProducerEnv = blockProducerEnvFactory.Create(); PostMergeBlockProducer? postMergeBlockProducer = blockProducerFactory.Create(blockProducerEnv); @@ -239,7 +237,7 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT TimeSpan.FromSeconds(MergeConfig.SecondsPerSlot), 50000); // by default we want to avoid cleanup payload effects in testing - ConsensusRequestsProcessor ??= new ConsensusRequestsProcessor(TxProcessor); + ExecutionRequestsProcessor ??= new ExecutionRequestsProcessor(TxProcessor); return new MergeBlockProducer(preMergeBlockProducer, postMergeBlockProducer, PoSSwitcher); } @@ -260,7 +258,7 @@ protected override IBlockProcessor CreateBlockProcessor() LogManager, WithdrawalProcessor, preWarmer: CreateBlockCachePreWarmer(), - consensusRequestsProcessor: ConsensusRequestsProcessor); + executionRequestsProcessor: ExecutionRequestsProcessor); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs index 6f3bf5874ef..a14c498f0d8 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V3.cs @@ -380,8 +380,6 @@ public async Task NewPayloadV3_should_verify_blob_versioned_hashes_again Substitute.For(), Substitute.For, IEnumerable>>(), Substitute.For(), - Substitute.For, IEnumerable>>(), - Substitute.For(), Substitute.For>(), Substitute.For, IEnumerable>>(), Substitute.For>(), diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 7918db73e3c..c5cba9650af 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -10,7 +10,6 @@ using Nethermind.Blockchain; using Nethermind.Consensus.Producers; using Nethermind.Core; -using Nethermind.Core.ConsensusRequests; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; @@ -111,7 +110,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid Array.Empty(), Array.Empty(), withdrawals); - GetPayloadV4Result expectedPayload = new(block, UInt256.Zero, new BlobsBundleV1(block)); + GetPayloadV4Result expectedPayload = new(block, UInt256.Zero, new BlobsBundleV1(block), ExecutionRequests: []); response = await RpcTest.TestSerializedRequest(rpc, "engine_getPayloadV4", expectedPayloadId); successResponse = chain.JsonSerializer.Deserialize(response); @@ -124,7 +123,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid })); response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV4", - chain.JsonSerializer.Serialize(ExecutionPayloadV4.Create(block)), "[]", Keccak.Zero.ToString(true)); + chain.JsonSerializer.Serialize(ExecutionPayloadV3.Create(block)), "[]", Keccak.Zero.ToString(true)); successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); @@ -171,8 +170,8 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid [Test] public async Task NewPayloadV4_reject_payload_with_bad_authorization_list_rlp() { - ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); - using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + ExecutionRequestsProcessorMock executionRequestsProcessorMock = new(); + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, executionRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); Hash256 lastHash = (await ProduceBranchV4(rpc, chain, 10, CreateParentBlockRequestOnHead(chain.BlockTree), true)) .LastOrDefault()?.BlockHash ?? Keccak.Zero; @@ -219,8 +218,8 @@ public async Task can_progress_chain_one_by_one_v4(int count) [TestCase(30)] public async Task can_progress_chain_one_by_one_v4_with_requests(int count) { - ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); - using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + ConsensusRequestsProcessorMock executionRequestsProcessorMock = new(); + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, executionRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); Hash256 lastHash = (await ProduceBranchV4(rpc, chain, count, CreateParentBlockRequestOnHead(chain.BlockTree), true)) .LastOrDefault()?.BlockHash ?? Keccak.Zero; @@ -361,8 +360,8 @@ public virtual async Task { (deposits, withdrawalRequests, consolidationRequests) = requests.SplitRequests(); } - ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); - using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + ConsensusRequestsProcessorMock executionRequestsProcessorMock = new(); + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, executionRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); ExecutionPayloadV4 executionPayload1 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); @@ -391,8 +390,8 @@ public virtual async Task (deposits, withdrawalRequests, consolidationRequests) = requests.SplitRequests(); } - ConsensusRequestsProcessorMock consensusRequestsProcessorMock = new(); - using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, consensusRequestsProcessorMock); + ConsensusRequestsProcessorMock executionRequestsProcessorMock = new(); + using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, executionRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs new file mode 100644 index 00000000000..1668f372da2 --- /dev/null +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Consensus.ExecutionRequests; +using Nethermind.Core; +using Nethermind.Core.ExecutionRequest; +using Nethermind.Core.Specs; +using Nethermind.Core.Test.Builders; +using Nethermind.State; + +namespace Nethermind.Merge.Plugin.Test; + +public class ExecutionRequestsProcessorMock : IExecutionRequestsProcessor +{ + public static ExecutionRequest[] Requests = + [ + TestItem.ExecutionRequestA, + TestItem.ExecutionRequestB, + TestItem.ExecutionRequestC, + TestItem.ExecutionRequestD, + TestItem.ExecutionRequestE, + TestItem.ExecutionRequestF, + TestItem.ExecutionRequestG, + TestItem.ExecutionRequestH, + TestItem.ExecutionRequestI + ]; + + public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) + { + if (block.IsGenesis) + return; + + block.ExecutionRequests = Requests; + block.Header.RequestsHash = Requests.CalculateRoot(); + } +} diff --git a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs index 82d7d0665c4..b4f8caef1e3 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismPlugin.cs @@ -271,8 +271,6 @@ public async Task InitRpcModules() _api.Config().SimulateBlockProduction), new GetPayloadBodiesByHashV1Handler(_api.BlockTree, _api.LogManager), new GetPayloadBodiesByRangeV1Handler(_api.BlockTree, _api.LogManager), - new GetPayloadBodiesByHashV2Handler(_api.BlockTree, _api.LogManager), - new GetPayloadBodiesByRangeV2Handler(_api.BlockTree, _api.LogManager), new ExchangeTransitionConfigurationV1Handler(_api.PoSSwitcher, _api.LogManager), new ExchangeCapabilitiesHandler(_api.RpcCapabilitiesProvider, _api.LogManager), new GetBlobsHandler(_api.TxPool), From 26cb98ef5a2e799e2fa05d1b7b977bc339be1b33 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 7 Oct 2024 14:20:15 +0530 Subject: [PATCH 481/551] format files --- .../ExecutionRequestProcessorTests.cs | 18 +++++++++++------- .../Nethermind.Core.Test/Builders/TestItem.cs | 14 +++++++------- .../EngineModuleTests.Setup.cs | 2 +- .../Data/IExecutionPayloadParams.cs | 4 ++-- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index 4adfca6c6fd..ff5cf784110 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -44,7 +44,7 @@ public class ExecutionProcessorTests [SetUp] public void Setup() { - + _specProvider = MainnetSpecProvider.Instance; MemDb stateDb = new(); @@ -74,12 +74,16 @@ public void Setup() { Transaction transaction = ci.Arg(); CallOutputTracer tracer = ci.Arg(); - if(transaction.To == eip7002Account) + if (transaction.To == eip7002Account) { tracer.ReturnValue = executionWithdrawalRequests.FlatEncode(); - } else if(transaction.To == eip7251Account){ + } + else if (transaction.To == eip7251Account) + { tracer.ReturnValue = excutionConsolidationRequests.FlatEncode(); - } else { + } + else + { tracer.ReturnValue = Array.Empty(); } return new TransactionResult(); @@ -95,13 +99,13 @@ public void ShouldProcessExecutionRequests() TxReceipt[] txReceipts = [ Build.A.Receipt.WithLogs( Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [ TestItem.PublicKeyA.Bytes, TestItem.AddressA.Bytes, BitConverter.GetBytes((ulong)1_000_000_000), TestItem.KeccakA.Bytes.ToArray(), BitConverter.GetBytes((ulong)1)]) + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyA.Bytes, TestItem.AddressA.Bytes, BitConverter.GetBytes((ulong)1_000_000_000), TestItem.KeccakA.Bytes.ToArray(), BitConverter.GetBytes((ulong)1)]) ).WithAddress(DepositContractAddress).TestObject, Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [ TestItem.PublicKeyB.Bytes, TestItem.AddressB.Bytes, BitConverter.GetBytes((ulong)2_000_000_000), TestItem.KeccakB.Bytes.ToArray(), BitConverter.GetBytes((ulong)2)]) + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyB.Bytes, TestItem.AddressB.Bytes, BitConverter.GetBytes((ulong)2_000_000_000), TestItem.KeccakB.Bytes.ToArray(), BitConverter.GetBytes((ulong)2)]) ).WithAddress(DepositContractAddress).TestObject, Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [ TestItem.PublicKeyC.Bytes, TestItem.AddressC.Bytes, BitConverter.GetBytes((ulong)3_000_000_000), TestItem.KeccakC.Bytes.ToArray(), BitConverter.GetBytes((ulong)3)]) + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyC.Bytes, TestItem.AddressC.Bytes, BitConverter.GetBytes((ulong)3_000_000_000), TestItem.KeccakC.Bytes.ToArray(), BitConverter.GetBytes((ulong)3)]) ).WithAddress(DepositContractAddress).TestObject ).TestObject ]; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index b90dd0539c6..74804f4b371 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -97,16 +97,16 @@ public static Hash256 KeccakFromNumber(int i) public static Withdrawal WithdrawalD_4Eth = new() { Address = AddressD, Index = 4, ValidatorIndex = 2004, AmountInGwei = 4_000_000_000 }; public static Withdrawal WithdrawalE_5Eth = new() { Address = AddressE, Index = 5, ValidatorIndex = 2005, AmountInGwei = 5_000_000_000 }; public static Withdrawal WithdrawalF_6Eth = new() { Address = AddressF, Index = 6, ValidatorIndex = 2006, AmountInGwei = 6_000_000_000 }; - + public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = (byte[])PublicKeyA.Bytes.Concat(AddressA.Bytes).Concat(BitConverter.GetBytes((ulong)1_000_000_000)).Concat(KeccakA.Bytes.ToArray()).Concat(BitConverter.GetBytes((ulong)1)) }; public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = (byte[])PublicKeyB.Bytes.Concat(AddressB.Bytes).Concat(BitConverter.GetBytes((ulong)2_000_000_000)).Concat(KeccakB.Bytes.ToArray()).Concat(BitConverter.GetBytes((ulong)2)) }; public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = (byte[])PublicKeyC.Bytes.Concat(AddressC.Bytes).Concat(BitConverter.GetBytes((ulong)3_000_000_000)).Concat(KeccakC.Bytes.ToArray()).Concat(BitConverter.GetBytes((ulong)3)) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = (byte[])AddressA.Bytes.Concat(PublicKeyA.Bytes).Concat(BitConverter.GetBytes((ulong)1_000_000_000))}; - public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = (byte[])AddressB.Bytes.Concat(PublicKeyB.Bytes).Concat(BitConverter.GetBytes((ulong)2_000_000_000))}; - public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = (byte[])AddressC.Bytes.Concat(PublicKeyC.Bytes).Concat(BitConverter.GetBytes((ulong)3_000_000_000))}; - public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = (byte[])AddressA.Bytes.Concat(PublicKeyA.Bytes).Concat(PublicKeyB.Bytes)}; - public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = (byte[])AddressB.Bytes.Concat(PublicKeyB.Bytes).Concat(PublicKeyC.Bytes)}; - public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = (byte[])AddressC.Bytes.Concat(PublicKeyC.Bytes).Concat(PublicKeyD.Bytes)}; + public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = (byte[])AddressA.Bytes.Concat(PublicKeyA.Bytes).Concat(BitConverter.GetBytes((ulong)1_000_000_000)) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = (byte[])AddressB.Bytes.Concat(PublicKeyB.Bytes).Concat(BitConverter.GetBytes((ulong)2_000_000_000)) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = (byte[])AddressC.Bytes.Concat(PublicKeyC.Bytes).Concat(BitConverter.GetBytes((ulong)3_000_000_000)) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = (byte[])AddressA.Bytes.Concat(PublicKeyA.Bytes).Concat(PublicKeyB.Bytes) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = (byte[])AddressB.Bytes.Concat(PublicKeyB.Bytes).Concat(PublicKeyC.Bytes) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = (byte[])AddressC.Bytes.Concat(PublicKeyC.Bytes).Concat(PublicKeyD.Bytes) }; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs index 7c5cc8162b2..17d87395035 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.Setup.cs @@ -68,7 +68,7 @@ protected async Task CreateBlockchain( IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadService = null, ILogManager? logManager = null, - IExecutionRequestsProcessor ? mockedExecutionRequestsProcessor = null) + IExecutionRequestsProcessor? mockedExecutionRequestsProcessor = null) => await CreateBaseBlockchain(mergeConfig, mockedPayloadService, logManager, mockedExecutionRequestsProcessor) .Build(new TestSingleReleaseSpecProvider(releaseSpec ?? London.Instance)); diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs index b196559d8b2..58cae2c7e72 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs @@ -40,7 +40,7 @@ public class ExecutionPayloadParams( public ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error) { - if(spec.RequestsEnabled) + if (spec.RequestsEnabled) { if (ExecutionRequests is null) { @@ -54,7 +54,7 @@ public ValidationResult ValidateParams(IReleaseSpec spec, int version, out strin error = "Execution requests are not in progressive order by type"; return ValidationResult.Fail; } - + } Transaction[]? transactions; try From e2bfb6952acd96b87647e568631f2022a4bcd2f9 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 7 Oct 2024 14:23:20 +0530 Subject: [PATCH 482/551] remove Build.Deposit.cs --- .../Nethermind.Core.Test/Builders/Build.Deposit.cs | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs deleted file mode 100644 index f8eda2c30dd..00000000000 --- a/src/Nethermind/Nethermind.Core.Test/Builders/Build.Deposit.cs +++ /dev/null @@ -1,9 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Core.Test.Builders; - -public partial class Build -{ - public DepositBuilder Deposit => new(); -} From 5bd226a13054ea0ec838d806b058dc65281762d2 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 7 Oct 2024 14:25:19 +0530 Subject: [PATCH 483/551] remove Build.WithdrawalRequest.cs --- .../Builders/Build.WithdrawalRequest.cs | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs b/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs deleted file mode 100644 index a6ac89905d4..00000000000 --- a/src/Nethermind/Nethermind.Core.Test/Builders/Build.WithdrawalRequest.cs +++ /dev/null @@ -1,9 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited -// SPDX-License-Identifier: LGPL-3.0-only - -namespace Nethermind.Core.Test.Builders; - -public partial class Build -{ - public WithdrawalRequestBuilder WithdrawalRequest => new(); -} From 9ab33a1e8283c292b24ddda1406512120faf3598 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 7 Oct 2024 14:34:07 +0530 Subject: [PATCH 484/551] requestsRoot -> requestsHash --- src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs | 2 +- src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs | 2 +- .../Validators/BlockValidatorTests.cs | 2 +- .../Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs | 4 ++-- .../Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs | 4 ++-- src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs index 09158536941..0fe03d362bc 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralStateTest.cs @@ -37,7 +37,7 @@ public class GeneralStateTest : IEthereumTest public UInt256? ParentBlobGasUsed { get; set; } public UInt256? ParentExcessBlobGas { get; set; } - public Hash256? RequestsRoot { get; set; } + public Hash256? RequestsHash { get; set; } public override string ToString() { diff --git a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs index 47487e7e212..fe604e66026 100644 --- a/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs +++ b/src/Nethermind/Ethereum.Test.Base/GeneralTestBase.cs @@ -109,7 +109,7 @@ protected EthereumTestResult RunTest(GeneralStateTest test, ITxTracer txTracer) header.ParentBeaconBlockRoot = test.CurrentBeaconRoot; header.ExcessBlobGas = test.CurrentExcessBlobGas ?? (test.Fork is Cancun ? 0ul : null); header.BlobGasUsed = BlobGasCalculator.CalculateBlobGas(test.Transaction); - header.RequestsRoot = test.RequestsRoot; + header.RequestsHash = test.RequestsHash; Stopwatch stopwatch = Stopwatch.StartNew(); IReleaseSpec? spec = specProvider.GetSpec((ForkActivation)test.CurrentNumber); diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs index 0ee1de5ced9..7f5440c3a6b 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs @@ -209,7 +209,7 @@ public void ValidateBodyAgainstHeader_BlockHasInvalidRequestRoot_ReturnsFalse() Build.A.WithdrawalRequest.TestObject }) .TestObject; - block.Header.RequestsRoot = Keccak.OfAnEmptyString; + block.Header.RequestsHash = Keccak.OfAnEmptyString; Assert.That( BlockValidator.ValidateBodyAgainstHeader(block.Header, block.Body), diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs index 81d12c7a463..f36678b4087 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockHeaderBuilder.cs @@ -196,9 +196,9 @@ public BlockHeaderBuilder WithParentBeaconBlockRoot(Hash256? parentBeaconBlockRo return this; } - public BlockHeaderBuilder WithRequestsRoot(Hash256? requestsRoot) + public BlockHeaderBuilder WithRequestsHash(Hash256? requestsHash) { - TestObjectInternal.RequestsRoot = requestsRoot; + TestObjectInternal.RequestsHash = requestsHash; return this; } } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs index 71d51a66333..50c13bfbaee 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs @@ -164,7 +164,7 @@ public void Can_encode_decode_with_WithdrawalRequestRoot() .WithBlobGasUsed(0) .WithExcessBlobGas(0) .WithParentBeaconBlockRoot(TestItem.KeccakB) - .WithRequestsRoot(Keccak.Zero).TestObject; + .WithRequestsHash(Keccak.Zero).TestObject; Rlp rlp = Rlp.Encode(header); BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); @@ -182,7 +182,7 @@ public void Can_encode_decode_with_ValidatorExitRoot_equals_to_null() .WithBlobGasUsed(0) .WithExcessBlobGas(0) .WithParentBeaconBlockRoot(TestItem.KeccakB) - .WithRequestsRoot(Keccak.Zero).TestObject; + .WithRequestsHash(Keccak.Zero).TestObject; Rlp rlp = Rlp.Encode(header); BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); diff --git a/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs b/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs index 817037b8e7f..ea8e09cdc3d 100644 --- a/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs +++ b/src/Nethermind/Nethermind.Facade/Eth/BlockForRpc.cs @@ -83,7 +83,7 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s Uncles = block.Uncles.Select(o => o.Hash); Withdrawals = block.Withdrawals; WithdrawalsRoot = block.Header.WithdrawalsRoot; - RequestsRoot = block.Header.RequestsHash; + RequestsHash = block.Header.RequestsHash; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] @@ -144,5 +144,5 @@ public BlockForRpc(Block block, bool includeFullTransactionData, ISpecProvider s public Hash256? ParentBeaconBlockRoot { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public Hash256? RequestsRoot { get; set; } + public Hash256? RequestsHash { get; set; } } From 23cba3c06a912659b93be2a95f5fe109587ed255 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 7 Oct 2024 14:38:06 +0530 Subject: [PATCH 485/551] remove test from block validator --- .../Validators/BlockValidatorTests.cs | 47 ------------------- 1 file changed, 47 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs index 7f5440c3a6b..be7cace72dc 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs @@ -199,51 +199,4 @@ public void ValidateSuggestedBlock_SuggestedBlockIsInvalid_CorrectErrorIsSet(Blo Assert.That(error, Does.StartWith(expectedError)); } - - [Test] - public void ValidateBodyAgainstHeader_BlockHasInvalidRequestRoot_ReturnsFalse() - { - Block block = Build.A.Block - .WithConsensusRequests(new ConsensusRequest[] { - Build.A.Deposit.WithIndex(0).TestObject, - Build.A.WithdrawalRequest.TestObject - }) - .TestObject; - block.Header.RequestsHash = Keccak.OfAnEmptyString; - - Assert.That( - BlockValidator.ValidateBodyAgainstHeader(block.Header, block.Body), - Is.False); - } - - [Test] - public void ValidateBodyRequests_BlockHasReuests_InOrder_ReturnsTrue() - { - Block block = Build.A.Block - .WithConsensusRequests(new ConsensusRequest[] { - Build.A.Deposit.WithIndex(0).TestObject, - Build.A.WithdrawalRequest.TestObject - }) - .TestObject; - - Assert.That( - BlockValidator.ValidateRequestsOrder(block, out string? _), - Is.True); - } - - [Test] - public void ValidateBodyRequests_BlockHasReuests_OutOfOrder_ReturnsFalse() - { - Block block = Build.A.Block - .WithConsensusRequests(new ConsensusRequest[] { - Build.A.WithdrawalRequest.TestObject, - Build.A.Deposit.WithIndex(0).TestObject - }) - .TestObject; - - Assert.That( - BlockValidator.ValidateRequestsOrder(block, out string? _), - Is.False); - } - } From 47d94d4cc204eed5206a7ea2cdaddf4baf043d9f Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 7 Oct 2024 14:42:37 +0530 Subject: [PATCH 486/551] remove undef ref --- .../Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs index be7cace72dc..69c4bad6fa7 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Consensus.Validators; -using Nethermind.Core.ConsensusRequests; using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Specs; From c92705d03fb3a70fa6575f33d52e45739e85a25e Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Mon, 7 Oct 2024 18:23:54 +0530 Subject: [PATCH 487/551] fix cast error --- .../Nethermind.Core.Test/Builders/TestItem.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index 74804f4b371..d69ce939b46 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -98,15 +98,15 @@ public static Hash256 KeccakFromNumber(int i) public static Withdrawal WithdrawalE_5Eth = new() { Address = AddressE, Index = 5, ValidatorIndex = 2005, AmountInGwei = 5_000_000_000 }; public static Withdrawal WithdrawalF_6Eth = new() { Address = AddressF, Index = 6, ValidatorIndex = 2006, AmountInGwei = 6_000_000_000 }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = (byte[])PublicKeyA.Bytes.Concat(AddressA.Bytes).Concat(BitConverter.GetBytes((ulong)1_000_000_000)).Concat(KeccakA.Bytes.ToArray()).Concat(BitConverter.GetBytes((ulong)1)) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = (byte[])PublicKeyB.Bytes.Concat(AddressB.Bytes).Concat(BitConverter.GetBytes((ulong)2_000_000_000)).Concat(KeccakB.Bytes.ToArray()).Concat(BitConverter.GetBytes((ulong)2)) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = (byte[])PublicKeyC.Bytes.Concat(AddressC.Bytes).Concat(BitConverter.GetBytes((ulong)3_000_000_000)).Concat(KeccakC.Bytes.ToArray()).Concat(BitConverter.GetBytes((ulong)3)) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = (byte[])AddressA.Bytes.Concat(PublicKeyA.Bytes).Concat(BitConverter.GetBytes((ulong)1_000_000_000)) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = (byte[])AddressB.Bytes.Concat(PublicKeyB.Bytes).Concat(BitConverter.GetBytes((ulong)2_000_000_000)) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = (byte[])AddressC.Bytes.Concat(PublicKeyC.Bytes).Concat(BitConverter.GetBytes((ulong)3_000_000_000)) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = (byte[])AddressA.Bytes.Concat(PublicKeyA.Bytes).Concat(PublicKeyB.Bytes) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = (byte[])AddressB.Bytes.Concat(PublicKeyB.Bytes).Concat(PublicKeyC.Bytes) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = (byte[])AddressC.Bytes.Concat(PublicKeyC.Bytes).Concat(PublicKeyD.Bytes) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = ([.. PublicKeyA.Bytes, ..AddressA.Bytes, ..(BitConverter.GetBytes((ulong)1_000_000_000)), ..KeccakA.Bytes.ToArray(), ..BitConverter.GetBytes((ulong)1)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = ([.. PublicKeyB.Bytes, ..AddressB.Bytes, ..(BitConverter.GetBytes((ulong)2_000_000_000)), ..KeccakB.Bytes.ToArray(), ..BitConverter.GetBytes((ulong)2)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = ([.. PublicKeyC.Bytes, ..AddressC.Bytes, ..(BitConverter.GetBytes((ulong)3_000_000_000)), ..KeccakC.Bytes.ToArray(), ..BitConverter.GetBytes((ulong)3)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = ([.. AddressA.Bytes, ..PublicKeyA.Bytes, ..(BitConverter.GetBytes((ulong)1_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = ([.. AddressB.Bytes, ..PublicKeyB.Bytes, ..(BitConverter.GetBytes((ulong)2_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = ([.. AddressC.Bytes, ..PublicKeyC.Bytes, ..(BitConverter.GetBytes((ulong)3_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes, .. PublicKeyB.Bytes]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes, .. PublicKeyC.Bytes]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes, .. PublicKeyA.Bytes]) }; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); From 5636cda9c7697bf3150dde6b2351e42ea5a143cf Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 8 Oct 2024 12:25:10 +0530 Subject: [PATCH 488/551] fix test build error --- .../EngineModuleTests.HelperFunctions.cs | 26 +-- .../EngineModuleTests.V4.cs | 158 ++---------------- 2 files changed, 21 insertions(+), 163 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index 4d8fb3051ea..63b53c88951 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -20,10 +20,10 @@ using Nethermind.Specs; using Nethermind.Specs.Forks; using Nethermind.State; -using Nethermind.Core.ConsensusRequests; using Microsoft.CodeAnalysis; using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Core.Specs; +using Nethermind.Core.ExecutionRequest; namespace Nethermind.Merge.Plugin.Test { @@ -147,10 +147,10 @@ private static ExecutionPayloadV3 CreateBlockRequestV3( return blockRequestV3; } - private static ExecutionPayloadV4 CreateBlockRequestV4(MergeTestBlockchain chain, ExecutionPayload parent, Address miner, Withdrawal[]? withdrawals = null, - ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null, ConsensusRequest[]? requests = null) + private static ExecutionPayloadV3 CreateBlockRequestV4(MergeTestBlockchain chain, ExecutionPayload parent, Address miner, Withdrawal[]? withdrawals = null, + ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null) { - ExecutionPayloadV4 blockRequestV4 = CreateBlockRequestInternal(parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, parentBeaconBlockRoot: parentBeaconBlockRoot, requests: requests); + ExecutionPayloadV3 blockRequestV4 = CreateBlockRequestInternal(parent, miner, withdrawals, blobGasUsed, excessBlobGas, transactions: transactions, parentBeaconBlockRoot: parentBeaconBlockRoot); blockRequestV4.TryGetBlock(out Block? block); var beaconBlockRootHandler = new BeaconBlockRootHandler(chain.TxProcessor); @@ -159,7 +159,7 @@ private static ExecutionPayloadV4 CreateBlockRequestV4(MergeTestBlockchain chain var blockHashStore = new BlockhashStore(chain.SpecProvider, chain.State); blockHashStore.ApplyBlockhashStateChanges(block!.Header); - chain.ConsensusRequestsProcessor?.ProcessRequests(block!, chain.State, Array.Empty(), chain.SpecProvider.GenesisSpec); + chain.ExecutionRequestsProcessor?.ProcessExecutionRequests(block!, chain.State, Array.Empty(), chain.SpecProvider.GenesisSpec); chain.State.Commit(chain.SpecProvider.GenesisSpec); chain.State.RecalculateStateRoot(); @@ -172,18 +172,9 @@ private static ExecutionPayloadV4 CreateBlockRequestV4(MergeTestBlockchain chain } private static T CreateBlockRequestInternal(ExecutionPayload parent, Address miner, Withdrawal[]? withdrawals = null, - ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null, ConsensusRequest[]? requests = null + ulong? blobGasUsed = null, ulong? excessBlobGas = null, Transaction[]? transactions = null, Hash256? parentBeaconBlockRoot = null ) where T : ExecutionPayload, new() { - Deposit[]? deposits = null; - WithdrawalRequest[]? withdrawalRequests = null; - ConsolidationRequest[]? consolidationRequests = null; - - if (requests is not null) - { - (deposits, withdrawalRequests, consolidationRequests) = requests.SplitRequests(); - } - T blockRequest = new() { ParentHash = parent.BlockHash, @@ -198,10 +189,7 @@ private static T CreateBlockRequestInternal(ExecutionPayload parent, Address Withdrawals = withdrawals, BlobGasUsed = blobGasUsed, ExcessBlobGas = excessBlobGas, - ParentBeaconBlockRoot = parentBeaconBlockRoot, - DepositRequests = deposits, - WithdrawalRequests = withdrawalRequests, - ConsolidationRequests = consolidationRequests, + ParentBeaconBlockRoot = parentBeaconBlockRoot }; blockRequest.SetTransactions(transactions ?? Array.Empty()); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index c5cba9650af..0e9f7daa77f 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -7,10 +7,10 @@ using System.Threading; using System.Threading.Tasks; using FluentAssertions; -using Nethermind.Blockchain; using Nethermind.Consensus.Producers; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; using Nethermind.Int256; @@ -18,7 +18,6 @@ using Nethermind.JsonRpc.Test; using Nethermind.Merge.Plugin.Data; using Nethermind.Specs.Forks; -using NSubstitute; using NUnit.Framework; namespace Nethermind.Merge.Plugin.Test; @@ -195,9 +194,9 @@ public async Task NewPayloadV4_reject_payload_with_bad_authorization_list_rlp() .WithExcessBlobGas(0) .TestObject; - ExecutionPayloadV4 executionPayload = ExecutionPayloadV4.Create(invalidBlock); + ExecutionPayloadV3 executionPayload = ExecutionPayloadV3.Create(invalidBlock); - var response = await rpc.engine_newPayloadV4(executionPayload, [], invalidBlock.ParentBeaconBlockRoot); + var response = await rpc.engine_newPayloadV4(executionPayload, [], invalidBlock.ParentBeaconBlockRoot, ExecutionRequests: ExecutionRequestsProcessorMock.Requests); Assert.That(response.Data.Status, Is.EqualTo("INVALID")); } @@ -218,7 +217,7 @@ public async Task can_progress_chain_one_by_one_v4(int count) [TestCase(30)] public async Task can_progress_chain_one_by_one_v4_with_requests(int count) { - ConsensusRequestsProcessorMock executionRequestsProcessorMock = new(); + ExecutionRequestsProcessorMock executionRequestsProcessorMock = new(); using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, executionRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); Hash256 lastHash = (await ProduceBranchV4(rpc, chain, count, CreateParentBlockRequestOnHead(chain.BlockTree), true)) @@ -229,7 +228,7 @@ public async Task can_progress_chain_one_by_one_v4_with_requests(int count) last!.IsGenesis.Should().BeTrue(); Block? head = chain.BlockTree.Head; - head!.Requests!.Length.Should().Be(ConsensusRequestsProcessorMock.Requests.Length); + head!.ExecutionRequests!.Length.Should().Be(ExecutionRequestsProcessorMock.Requests.Length); } private async Task> ProduceBranchV4(IEngineRpcModule rpc, @@ -246,10 +245,10 @@ private async Task> ProduceBranchV4(IEngineRpcMo parentHeader.Difficulty; for (int i = 0; i < count; i++) { - ExecutionPayloadV4? getPayloadResult = await BuildAndGetPayloadOnBranchV4(rpc, chain, parentHeader, + ExecutionPayloadV3? getPayloadResult = await BuildAndGetPayloadOnBranchV4(rpc, chain, parentHeader, parentBlock.Timestamp + 12, random ?? TestItem.KeccakA, Address.Zero); - PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero)).Data; + PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero, ExecutionRequests: ExecutionRequestsProcessorMock.Requests)).Data; payloadStatusResponse.Status.Should().Be(PayloadStatus.Valid); if (setHead) { @@ -270,7 +269,7 @@ private async Task> ProduceBranchV4(IEngineRpcMo return blocks; } - private async Task BuildAndGetPayloadOnBranchV4( + private async Task BuildAndGetPayloadOnBranchV4( IEngineRpcModule rpc, MergeTestBlockchain chain, BlockHeader parentHeader, ulong timestamp, Hash256 random, Address feeRecipient) { @@ -285,142 +284,13 @@ private async Task BuildAndGetPayloadOnBranchV4( return getPayloadResult.Data!.ExecutionPayload!; } - [Test] - public async Task getPayloadBodiesByRangeV2_should_fail_when_too_many_payloads_requested() - { - using MergeTestBlockchain chain = await CreateBlockchain(); - IEngineRpcModule rpc = CreateEngineModule(chain); - Task>> result = - rpc.engine_getPayloadBodiesByRangeV2(1, 1025); - - result.Result.ErrorCode.Should().Be(MergeErrorCodes.TooLargeRequest); - } - [Test] - public async Task getPayloadBodiesByHashV2_should_fail_when_too_many_payloads_requested() + private static IEnumerable> GetPayloadRequestsTestCases() { - using MergeTestBlockchain chain = await CreateBlockchain(); - IEngineRpcModule rpc = CreateEngineModule(chain); - Hash256[] hashes = Enumerable.Repeat(TestItem.KeccakA, 1025).ToArray(); - Task>> result = - rpc.engine_getPayloadBodiesByHashV2(hashes); - - result.Result.ErrorCode.Should().Be(MergeErrorCodes.TooLargeRequest); - } - - [Test] - public async Task getPayloadBodiesByRangeV2_should_fail_when_params_below_1() - { - using MergeTestBlockchain chain = await CreateBlockchain(); - IEngineRpcModule rpc = CreateEngineModule(chain); - Task>> result = - rpc.engine_getPayloadBodiesByRangeV2(0, 1); - - result.Result.ErrorCode.Should().Be(ErrorCodes.InvalidParams); - - result = await rpc.engine_getPayloadBodiesByRangeV2(1, 0); - - result.Result.ErrorCode.Should().Be(ErrorCodes.InvalidParams); - } - - [Test] - public async Task getPayloadBodiesByRangeV2_should_return_up_to_best_body_number() - { - IBlockTree? blockTree = Substitute.For(); - - blockTree.FindBlock(Arg.Any()) - .Returns(i => Build.A.Block.WithNumber(i.ArgAt(0)).TestObject); - blockTree.Head.Returns(Build.A.Block.WithNumber(5).TestObject); - - using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance); - chain.BlockTree = blockTree; - - IEngineRpcModule rpc = CreateEngineModule(chain); - IEnumerable payloadBodies = - rpc.engine_getPayloadBodiesByRangeV2(1, 7).Result.Data; - - payloadBodies.Count().Should().Be(5); - } - - private static IEnumerable> GetPayloadRequestsTestCases() - { - yield return ConsensusRequestsProcessorMock.Requests; - } - - [TestCaseSource(nameof(GetPayloadRequestsTestCases))] - public virtual async Task - getPayloadBodiesByHashV2_should_return_payload_bodies_in_order_of_request_block_hashes_and_null_for_unknown_hashes( - ConsensusRequest[]? requests) - { - Deposit[]? deposits = null; - WithdrawalRequest[]? withdrawalRequests = null; - ConsolidationRequest[]? consolidationRequests = null; - - if (requests is not null) - { - (deposits, withdrawalRequests, consolidationRequests) = requests.SplitRequests(); - } - ConsensusRequestsProcessorMock executionRequestsProcessorMock = new(); - using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, executionRequestsProcessorMock); - IEngineRpcModule rpc = CreateEngineModule(chain); - ExecutionPayloadV4 executionPayload1 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); - ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); - Hash256[] blockHashes = [executionPayload1.BlockHash, TestItem.KeccakA, executionPayload2.BlockHash]; - IEnumerable payloadBodies = - rpc.engine_getPayloadBodiesByHashV2(blockHashes).Data; - ExecutionPayloadBodyV2Result?[] expected = { - new (Array.Empty(), Array.Empty() , deposits, withdrawalRequests, consolidationRequests), - null, - new (Array.Empty(), Array.Empty(), deposits, withdrawalRequests,consolidationRequests), - }; - payloadBodies.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering()); - } - - [TestCaseSource(nameof(GetPayloadRequestsTestCases))] - public virtual async Task - getPayloadBodiesByRangeV2_should_return_payload_bodies_in_order_of_request_range_and_null_for_unknown_indexes( - ConsensusRequest[]? requests) - { - Deposit[]? deposits = null; - WithdrawalRequest[]? withdrawalRequests = null; - ConsolidationRequest[]? consolidationRequests = null; - - if (requests is not null) - { - (deposits, withdrawalRequests, consolidationRequests) = requests.SplitRequests(); - } - - ConsensusRequestsProcessorMock executionRequestsProcessorMock = new(); - using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, executionRequestsProcessorMock); - IEngineRpcModule rpc = CreateEngineModule(chain); - await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); - ExecutionPayloadV4 executionPayload2 = await BuildAndSendNewBlockV4(rpc, chain, true, Array.Empty()); - await rpc.engine_forkchoiceUpdatedV3(new ForkchoiceStateV1(executionPayload2.BlockHash!, - executionPayload2.BlockHash!, executionPayload2.BlockHash!)); - - IEnumerable payloadBodies = - rpc.engine_getPayloadBodiesByRangeV2(1, 3).Result.Data; - ExecutionPayloadBodyV2Result?[] expected = - { - new (Array.Empty(), Array.Empty() , deposits, withdrawalRequests, consolidationRequests), - }; - - payloadBodies.Should().BeEquivalentTo(expected, o => o.WithStrictOrdering()); - } - - [Test] - public async Task getPayloadBodiesByRangeV2_empty_response() - { - using MergeTestBlockchain chain = await CreateBlockchain(); - IEngineRpcModule rpc = CreateEngineModule(chain); - IEnumerable payloadBodies = - rpc.engine_getPayloadBodiesByRangeV2(1, 1).Result.Data; - ExecutionPayloadBodyV2Result?[] expected = Array.Empty(); - - payloadBodies.Should().BeEquivalentTo(expected); + yield return ExecutionRequestsProcessorMock.Requests; } - private async Task BuildAndSendNewBlockV4( + private async Task BuildAndSendNewBlockV4( IEngineRpcModule rpc, MergeTestBlockchain chain, bool waitForBlockImprovement, @@ -430,15 +300,15 @@ private async Task BuildAndSendNewBlockV4( ulong timestamp = Timestamper.UnixTime.Seconds; Hash256 random = Keccak.Zero; Address feeRecipient = Address.Zero; - ExecutionPayloadV4 executionPayload = await BuildAndGetPayloadResultV4(rpc, chain, head, + ExecutionPayloadV3 executionPayload = await BuildAndGetPayloadResultV4(rpc, chain, head, Keccak.Zero, head, timestamp, random, feeRecipient, withdrawals, waitForBlockImprovement); ResultWrapper executePayloadResult = - await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot); + await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot, ExecutionRequests: ExecutionRequestsProcessorMock.Requests); executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); return executionPayload; } - private async Task BuildAndGetPayloadResultV4( + private async Task BuildAndGetPayloadResultV4( IEngineRpcModule rpc, MergeTestBlockchain chain, Hash256 headBlockHash, From d2c0473d5d08cbb18982b06b0e0306037ec77f92 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 8 Oct 2024 12:34:02 +0530 Subject: [PATCH 489/551] fix requests in Aura Test --- .../Nethermind.Core.Test/Builders/TestItem.cs | 12 ++++++------ .../AuRaMergeEngineModuleTests.cs | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index d69ce939b46..06a50a4165b 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -98,12 +98,12 @@ public static Hash256 KeccakFromNumber(int i) public static Withdrawal WithdrawalE_5Eth = new() { Address = AddressE, Index = 5, ValidatorIndex = 2005, AmountInGwei = 5_000_000_000 }; public static Withdrawal WithdrawalF_6Eth = new() { Address = AddressF, Index = 6, ValidatorIndex = 2006, AmountInGwei = 6_000_000_000 }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = ([.. PublicKeyA.Bytes, ..AddressA.Bytes, ..(BitConverter.GetBytes((ulong)1_000_000_000)), ..KeccakA.Bytes.ToArray(), ..BitConverter.GetBytes((ulong)1)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = ([.. PublicKeyB.Bytes, ..AddressB.Bytes, ..(BitConverter.GetBytes((ulong)2_000_000_000)), ..KeccakB.Bytes.ToArray(), ..BitConverter.GetBytes((ulong)2)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = ([.. PublicKeyC.Bytes, ..AddressC.Bytes, ..(BitConverter.GetBytes((ulong)3_000_000_000)), ..KeccakC.Bytes.ToArray(), ..BitConverter.GetBytes((ulong)3)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = ([.. AddressA.Bytes, ..PublicKeyA.Bytes, ..(BitConverter.GetBytes((ulong)1_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = ([.. AddressB.Bytes, ..PublicKeyB.Bytes, ..(BitConverter.GetBytes((ulong)2_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = ([.. AddressC.Bytes, ..PublicKeyC.Bytes, ..(BitConverter.GetBytes((ulong)3_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = ([.. PublicKeyA.Bytes, .. AddressA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000)), .. KeccakA.Bytes.ToArray(), .. BitConverter.GetBytes((ulong)1)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = ([.. PublicKeyB.Bytes, .. AddressB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000)), .. KeccakB.Bytes.ToArray(), .. BitConverter.GetBytes((ulong)2)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = ([.. PublicKeyC.Bytes, .. AddressC.Bytes, .. (BitConverter.GetBytes((ulong)3_000_000_000)), .. KeccakC.Bytes.ToArray(), .. BitConverter.GetBytes((ulong)3)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes, .. (BitConverter.GetBytes((ulong)3_000_000_000))]) }; public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes, .. PublicKeyB.Bytes]) }; public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes, .. PublicKeyC.Bytes]) }; public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes, .. PublicKeyA.Bytes]) }; diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 13c7e2c616f..28ae0cdef12 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -13,9 +13,9 @@ using Nethermind.Consensus.AuRa.InitializationSteps; using Nethermind.Consensus.AuRa.Validators; using Nethermind.Consensus.Comparers; +using Nethermind.Consensus.ExecutionRequests; using Nethermind.Consensus.Processing; using Nethermind.Consensus.Producers; -using Nethermind.Consensus.Requests; using Nethermind.Consensus.Rewards; using Nethermind.Core; using Nethermind.Core.Crypto; @@ -46,8 +46,8 @@ protected override MergeTestBlockchain CreateBaseBlockchain( IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadService = null, ILogManager? logManager = null, - IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) - => new MergeAuRaTestBlockchain(mergeConfig, mockedPayloadService, logManager, mockedConsensusRequestsProcessor); + IExecutionRequestsProcessor? mockedExecutionRequestsProcessor = null) + => new MergeAuRaTestBlockchain(mergeConfig, mockedPayloadService, logManager, mockedExecutionRequestsProcessor); protected override Hash256 ExpectedBlockHash => new("0x990d377b67dbffee4a60db6f189ae479ffb406e8abea16af55e0469b8524cf46"); @@ -103,10 +103,10 @@ class MergeAuRaTestBlockchain : MergeTestBlockchain { private AuRaNethermindApi? _api; - public MergeAuRaTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null, IConsensusRequestsProcessor? mockedConsensusRequestsProcessor = null) - : base(mergeConfig, mockedPayloadPreparationService, logManager, mockedConsensusRequestsProcessor) + public MergeAuRaTestBlockchain(IMergeConfig? mergeConfig = null, IPayloadPreparationService? mockedPayloadPreparationService = null, ILogManager? logManager = null, IExecutionRequestsProcessor? mockedExecutionRequestsProcessor = null) + : base(mergeConfig, mockedPayloadPreparationService, logManager, mockedExecutionRequestsProcessor) { - ConsensusRequestsProcessor = mockedConsensusRequestsProcessor; + ExecutionRequestsProcessor = mockedExecutionRequestsProcessor; SealEngineType = Core.SealEngineType.AuRa; } @@ -155,7 +155,7 @@ protected override IBlockProcessor CreateBlockProcessor() new BlockhashStore(SpecProvider, State), LogManager, WithdrawalProcessor, - consensusRequestsProcessor: ConsensusRequestsProcessor, + executionRequestsProcessor: ExecutionRequestsProcessor, preWarmer: CreateBlockCachePreWarmer()); return new TestBlockProcessorInterceptor(processor, _blockProcessingThrottle); @@ -191,7 +191,7 @@ protected override IBlockProducer CreateTestBlockProducer(TxPoolTxSource txPoolT transactionComparerProvider, blocksConfig, LogManager, - ConsensusRequestsProcessor); + ExecutionRequestsProcessor); BlockProducerEnv blockProducerEnv = blockProducerEnvFactory.Create(); From f97a52418545883d7066622fb5a81e719390ee79 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 8 Oct 2024 15:53:55 +0530 Subject: [PATCH 490/551] fix hash scheme --- .../ExecutionRequestProcessorTests.cs | 27 +++++++++++-------- .../Nethermind.Core.Test/Builders/TestItem.cs | 22 ++++++++------- .../Nethermind.Core/Crypto/Signature.cs | 4 +++ .../ExecutionRequest/ExecutionRequest.cs | 17 +++++++++--- 4 files changed, 47 insertions(+), 23 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index ff5cf784110..c1658f983fd 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -39,7 +39,7 @@ public class ExecutionProcessorTests ExecutionRequest[] executionDepositRequests = [TestItem.ExecutionRequestA, TestItem.ExecutionRequestB, TestItem.ExecutionRequestC]; ExecutionRequest[] executionWithdrawalRequests = [TestItem.ExecutionRequestD, TestItem.ExecutionRequestE, TestItem.ExecutionRequestF]; - ExecutionRequest[] excutionConsolidationRequests = [TestItem.ExecutionRequestG, TestItem.ExecutionRequestH, TestItem.ExecutionRequestI]; + ExecutionRequest[] executionConsolidationRequests = [TestItem.ExecutionRequestG, TestItem.ExecutionRequestH, TestItem.ExecutionRequestI]; [SetUp] public void Setup() @@ -56,7 +56,7 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - spec = _specProvider.GetFinalSpec(); + spec = Substitute.For(); spec.RequestsEnabled.Returns(true); spec.DepositsEnabled.Returns(true); @@ -76,11 +76,11 @@ public void Setup() CallOutputTracer tracer = ci.Arg(); if (transaction.To == eip7002Account) { - tracer.ReturnValue = executionWithdrawalRequests.FlatEncode(); + tracer.ReturnValue = executionWithdrawalRequests.FlatEncodeWithoutType(); } else if (transaction.To == eip7251Account) { - tracer.ReturnValue = excutionConsolidationRequests.FlatEncode(); + tracer.ReturnValue = executionConsolidationRequests.FlatEncodeWithoutType(); } else { @@ -99,13 +99,13 @@ public void ShouldProcessExecutionRequests() TxReceipt[] txReceipts = [ Build.A.Receipt.WithLogs( Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyA.Bytes, TestItem.AddressA.Bytes, BitConverter.GetBytes((ulong)1_000_000_000), TestItem.KeccakA.Bytes.ToArray(), BitConverter.GetBytes((ulong)1)]) + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyA.Bytes.Slice(0, 48), TestItem.KeccakA.Bytes.ToArray(), BitConverter.GetBytes((ulong)1_000_000_000), TestItem.SignatureBytes, BitConverter.GetBytes((ulong)1)]) ).WithAddress(DepositContractAddress).TestObject, Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyB.Bytes, TestItem.AddressB.Bytes, BitConverter.GetBytes((ulong)2_000_000_000), TestItem.KeccakB.Bytes.ToArray(), BitConverter.GetBytes((ulong)2)]) + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyB.Bytes.Slice(0, 48), TestItem.KeccakB.Bytes.ToArray(), BitConverter.GetBytes((ulong)2_000_000_000), TestItem.SignatureBytes, BitConverter.GetBytes((ulong)2)]) ).WithAddress(DepositContractAddress).TestObject, Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyC.Bytes, TestItem.AddressC.Bytes, BitConverter.GetBytes((ulong)3_000_000_000), TestItem.KeccakC.Bytes.ToArray(), BitConverter.GetBytes((ulong)3)]) + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyC.Bytes.Slice(0, 48), TestItem.KeccakC.Bytes.ToArray(), BitConverter.GetBytes((ulong)3_000_000_000), TestItem.SignatureBytes, BitConverter.GetBytes((ulong)3)]) ).WithAddress(DepositContractAddress).TestObject ).TestObject ]; @@ -113,9 +113,14 @@ public void ShouldProcessExecutionRequests() executionRequestsProcessor.ProcessExecutionRequests(block, _stateProvider, txReceipts, spec); - var processedRequests = block.ExecutionRequests.ToList(); - - Assert.That(processedRequests, Has.Count.EqualTo(9)); - Assert.That(processedRequests, Is.EquivalentTo(executionDepositRequests.Concat(executionWithdrawalRequests).Concat(excutionConsolidationRequests))); + foreach (var (processedRequest, expectedRequest) in block.ExecutionRequests.Zip([ + .. executionDepositRequests, + .. executionWithdrawalRequests, + .. executionConsolidationRequests + ])) + { + Assert.That(processedRequest.RequestType, Is.EqualTo(expectedRequest.RequestType)); + Assert.That(processedRequest.RequestData, Is.EqualTo(expectedRequest.RequestData)); + } } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index 06a50a4165b..1902c7ee0da 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -4,8 +4,10 @@ using System; using System.Linq; using System.Net; +using DotNetty.Common.Utilities; using Nethermind.Core.Crypto; using Nethermind.Crypto; +using Nethermind.Evm.Precompiles.Bls; using Nethermind.Int256; using Nethermind.Serialization.Rlp; @@ -98,15 +100,17 @@ public static Hash256 KeccakFromNumber(int i) public static Withdrawal WithdrawalE_5Eth = new() { Address = AddressE, Index = 5, ValidatorIndex = 2005, AmountInGwei = 5_000_000_000 }; public static Withdrawal WithdrawalF_6Eth = new() { Address = AddressF, Index = 6, ValidatorIndex = 2006, AmountInGwei = 6_000_000_000 }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = ([.. PublicKeyA.Bytes, .. AddressA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000)), .. KeccakA.Bytes.ToArray(), .. BitConverter.GetBytes((ulong)1)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = ([.. PublicKeyB.Bytes, .. AddressB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000)), .. KeccakB.Bytes.ToArray(), .. BitConverter.GetBytes((ulong)2)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = ([.. PublicKeyC.Bytes, .. AddressC.Bytes, .. (BitConverter.GetBytes((ulong)3_000_000_000)), .. KeccakC.Bytes.ToArray(), .. BitConverter.GetBytes((ulong)3)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes, .. (BitConverter.GetBytes((ulong)3_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes, .. PublicKeyB.Bytes]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes, .. PublicKeyC.Bytes]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes, .. PublicKeyA.Bytes]) }; + public static byte[] SignatureBytes = [.. new Signature().Bytes, .. KeccakA.Bytes]; + + public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = ([.. PublicKeyA.Bytes.Slice(0, 48), .. KeccakA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)1)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = ([.. PublicKeyB.Bytes.Slice(0, 48), .. KeccakB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)2)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = ([.. PublicKeyC.Bytes.Slice(0, 48), .. KeccakC.Bytes, .. (BitConverter.GetBytes((ulong)3_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)3)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)1_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)2_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)3_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. PublicKeyB.Bytes.Slice(0, 48)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. PublicKeyC.Bytes.Slice(0, 48)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. PublicKeyA.Bytes.Slice(0, 48)]) }; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); diff --git a/src/Nethermind/Nethermind.Core/Crypto/Signature.cs b/src/Nethermind/Nethermind.Core/Crypto/Signature.cs index f67d8eea449..b6a189035e4 100644 --- a/src/Nethermind/Nethermind.Core/Crypto/Signature.cs +++ b/src/Nethermind/Nethermind.Core/Crypto/Signature.cs @@ -65,6 +65,10 @@ public Signature(string hexString) { } + public Signature() + { + } + public byte[] Bytes { get; } = new byte[64]; public ulong V { get; set; } diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index 9cf8d82759a..c315e8a0e54 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using System.Security.Cryptography; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -48,15 +49,25 @@ public static byte[] FlatEncode(this ExecutionRequest[] requests) return encoded.ToArray(); } + public static byte[] FlatEncodeWithoutType(this ExecutionRequest[] requests) + { + List encoded = new(); + foreach (ExecutionRequest request in requests) + { + encoded.AddRange(request.RequestData!); + } + return encoded.ToArray(); + } + public static Hash256 CalculateRoot(this ExecutionRequest[] requests) { byte[] Hashes = new byte[requests.Length * 32]; for (int i = 0; i < requests.Length; i++) { - Hash256 hash = new Hash256(requests[i].FlatEncode()); - hash.Bytes.CopyTo(Hashes.AsSpan(i * 32)); + byte[] hash = SHA256.HashData(requests[i].FlatEncode()); + hash.CopyTo(Hashes.AsSpan(i * 32)); } - return new Hash256(Hashes); + return new Hash256(SHA256.HashData(Hashes)); } public static bool IsSortedByType(this ExecutionRequest[] requests) From 548ad77399f9d95ae43ad915b09b6235a62eeaa2 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 9 Oct 2024 12:21:37 +0530 Subject: [PATCH 491/551] Update root calculation --- .../ExecutionRequestProcessorTests.cs | 2 + .../ExecutionRequestProcessor.cs | 22 +++++----- .../ExecutionRequest/ExecutionRequest.cs | 43 ++++++++++++++++--- .../ExecutionRequestsProcessorMock.cs | 2 +- .../Data/ExecutionPayloadV3.cs | 2 +- 5 files changed, 52 insertions(+), 19 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index c1658f983fd..4b29c44121d 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -122,5 +122,7 @@ .. executionConsolidationRequests Assert.That(processedRequest.RequestType, Is.EqualTo(expectedRequest.RequestType)); Assert.That(processedRequest.RequestData, Is.EqualTo(expectedRequest.RequestData)); } + + Assert.That(block.Header.RequestsHash, Is.EqualTo(block.ExecutionRequests.CalculateHash())); } } diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index 56911bf7ea4..e8b5055bb2f 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -3,9 +3,11 @@ using System; using System.Collections.Generic; +using System.Data.SqlTypes; using System.Linq; using Nethermind.Abi; using Nethermind.Core; +using Nethermind.Core.Collections; using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; @@ -83,11 +85,11 @@ private ExecutionRequest DecodeDepositRequest(LogEntry log) private IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec, Address contractAddress) { - bool IsWithdrawalRequests = contractAddress == spec.Eip7002ContractAddress; + bool isWithdrawalRequests = contractAddress == spec.Eip7002ContractAddress; - int requestBytesSize = IsWithdrawalRequests ? withdrawalRequestsBytesSize : consolidationRequestsBytesSize; + int requestBytesSize = isWithdrawalRequests ? withdrawalRequestsBytesSize : consolidationRequestsBytesSize; - if (!(IsWithdrawalRequests ? spec.WithdrawalRequestsEnabled : spec.ConsolidationRequestsEnabled)) + if (!(isWithdrawalRequests ? spec.WithdrawalRequestsEnabled : spec.ConsolidationRequestsEnabled)) yield break; if (!state.AccountExists(contractAddress)) @@ -118,7 +120,7 @@ private IEnumerable ReadRequests(Block block, IWorldState stat int offset = i * requestBytesSize; yield return new ExecutionRequest { - RequestType = (byte)(IsWithdrawalRequests ? ExecutionRequestType.WithdrawalRequest : ExecutionRequestType.ConsolidationRequest), + RequestType = (byte)(isWithdrawalRequests ? ExecutionRequestType.WithdrawalRequest : ExecutionRequestType.ConsolidationRequest), RequestData = result.Slice(offset, requestBytesSize).ToArray() }; } @@ -130,13 +132,11 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] if (!spec.RequestsEnabled) return; - List requests = - [ - .. ProcessDeposits(receipts, spec), - .. ReadRequests(block, state, spec, spec.Eip7002ContractAddress), - .. ReadRequests(block, state, spec, spec.Eip7251ContractAddress), - ]; - block.Header.RequestsHash = requests.ToArray().CalculateRoot(); + IEnumerable requests; + requests = ProcessDeposits(receipts, spec); + requests = requests.Concat(ReadRequests(block, state, spec, spec.Eip7002ContractAddress)); + requests = requests.Concat(ReadRequests(block, state, spec, spec.Eip7251ContractAddress)); + block.Header.RequestsHash = requests.CalculateHash(); block.ExecutionRequests = requests.ToArray(); } } diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index c315e8a0e54..03cd90ca49e 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -4,7 +4,9 @@ using System; using System.Collections.Generic; +using System.Data.SqlTypes; using System.Security.Cryptography; +using System.Linq; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -59,15 +61,44 @@ public static byte[] FlatEncodeWithoutType(this ExecutionRequest[] requests) return encoded.ToArray(); } - public static Hash256 CalculateRoot(this ExecutionRequest[] requests) + public static Hash256 CalculateHash(this IEnumerable requests) { - byte[] Hashes = new byte[requests.Length * 32]; - for (int i = 0; i < requests.Length; i++) + using (SHA256 sha256 = SHA256.Create()) { - byte[] hash = SHA256.HashData(requests[i].FlatEncode()); - hash.CopyTo(Hashes.AsSpan(i * 32)); + using (SHA256 sha256Inner = SHA256.Create()) + { + foreach (ExecutionRequest request in requests) + { + byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); + + // Update the outer hash with the result of each inner hash + sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); + } + // Complete the final hash computation + sha256.TransformFinalBlock(new byte[0], 0, 0); + return new Hash256(sha256.Hash!); + } + } + } + + public static Hash256 CalculateHash(this ExecutionRequest[] requests) + { + using (SHA256 sha256 = SHA256.Create()) + { + using (SHA256 sha256Inner = SHA256.Create()) + { + foreach (ExecutionRequest request in requests) + { + byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); + + // Update the outer hash with the result of each inner hash + sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); + } + // Complete the final hash computation + sha256.TransformFinalBlock(new byte[0], 0, 0); + return new Hash256(sha256.Hash!); + } } - return new Hash256(SHA256.HashData(Hashes)); } public static bool IsSortedByType(this ExecutionRequest[] requests) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs index 1668f372da2..efb14cac6cf 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs @@ -31,6 +31,6 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] return; block.ExecutionRequests = Requests; - block.Header.RequestsHash = Requests.CalculateRoot(); + block.Header.RequestsHash = Requests.CalculateHash(); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs index aa811889b97..309590838e1 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs @@ -37,7 +37,7 @@ public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? block.Header.ParentBeaconBlockRoot = ParentBeaconBlockRoot; block.Header.BlobGasUsed = BlobGasUsed; block.Header.ExcessBlobGas = ExcessBlobGas; - block.Header.RequestsHash = ExecutionRequests != null ? ExecutionRequests.CalculateRoot() : Hash256.Zero; + block.Header.RequestsHash = ExecutionRequests != null ? ExecutionRequests.CalculateHash() : Hash256.Zero; return true; } From 1c72a4e93ee18166284a086434d630eb264ab76b Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 9 Oct 2024 13:38:35 +0530 Subject: [PATCH 492/551] move requestHash calc --- .../ExecutionRequestProcessor.cs | 49 ++++++++++++++++--- .../Blockchain/TestBlockchain.cs | 5 ++ .../Builders/BlockBuilder.cs | 8 +++ .../ExecutionRequest/ExecutionRequest.cs | 20 -------- .../EngineModuleTests.V4.cs | 8 +-- 5 files changed, 59 insertions(+), 31 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index e8b5055bb2f..c9bc33697df 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -5,9 +5,11 @@ using System.Collections.Generic; using System.Data.SqlTypes; using System.Linq; +using System.Security.Cryptography; using Nethermind.Abi; using Nethermind.Core; using Nethermind.Core.Collections; +using Nethermind.Core.Crypto; using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; @@ -127,16 +129,49 @@ private IEnumerable ReadRequests(Block block, IWorldState stat } + public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec, out ExecutionRequest[] requests) + { + requests = Array.Empty(); + using (SHA256 sha256 = SHA256.Create()) + { + using (SHA256 sha256Inner = SHA256.Create()) + { + foreach (ExecutionRequest request in ProcessDeposits(receipts, spec)) + { + requests.AddRange(request); + byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); + + // Update the outer hash with the result of each inner hash + sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); + } + foreach (ExecutionRequest request in ReadRequests(block, state, spec, spec.Eip7002ContractAddress)) + { + requests.AddRange(request); + byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); + + sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); + } + + foreach (ExecutionRequest request in ReadRequests(block, state, spec, spec.Eip7251ContractAddress)) + { + requests.AddRange(request); + byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); + + sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); + } + + // Complete the final hash computation + sha256.TransformFinalBlock(new byte[0], 0, 0); + return new Hash256(sha256.Hash!); + } + } + } + public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) { if (!spec.RequestsEnabled) return; - - IEnumerable requests; - requests = ProcessDeposits(receipts, spec); - requests = requests.Concat(ReadRequests(block, state, spec, spec.Eip7002ContractAddress)); - requests = requests.Concat(ReadRequests(block, state, spec, spec.Eip7251ContractAddress)); - block.Header.RequestsHash = requests.CalculateHash(); - block.ExecutionRequests = requests.ToArray(); + block.Header.RequestsHash = CalculateRequestsHash(block, state, receipts, spec, out ExecutionRequest[] requests); + block.ExecutionRequests = requests; } } diff --git a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs index 629954c1f47..592784732df 100644 --- a/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs +++ b/src/Nethermind/Nethermind.Core.Test/Blockchain/TestBlockchain.cs @@ -22,6 +22,7 @@ using Nethermind.Consensus.Transactions; using Nethermind.Consensus.Validators; using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Core.Test.Builders; @@ -363,6 +364,10 @@ protected virtual Block GetGenesisBlock() genesisBlockBuilder.WithParentBeaconBlockRoot(Keccak.Zero); } + if (SpecProvider.GenesisSpec.RequestsEnabled) + { + genesisBlockBuilder.WithEmptyRequestsHash(); + } genesisBlockBuilder.WithStateRoot(State.StateRoot); return genesisBlockBuilder.TestObject; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index bcd67e3caa4..e8b68230935 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -4,6 +4,7 @@ using System; using System.Linq; using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Int256; @@ -247,6 +248,13 @@ public BlockBuilder WithReceiptsRoot(Hash256 keccak) return this; } + public BlockBuilder WithEmptyRequestsHash() + { + TestObjectInternal.Header.RequestsHash = Array.Empty().CalculateHash(); + TestObjectInternal.ExecutionRequests = Array.Empty(); + return this; + } + public BlockBuilder WithGasUsed(long gasUsed) { TestObjectInternal.Header.GasUsed = gasUsed; diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index 03cd90ca49e..29711de9dd4 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -61,26 +61,6 @@ public static byte[] FlatEncodeWithoutType(this ExecutionRequest[] requests) return encoded.ToArray(); } - public static Hash256 CalculateHash(this IEnumerable requests) - { - using (SHA256 sha256 = SHA256.Create()) - { - using (SHA256 sha256Inner = SHA256.Create()) - { - foreach (ExecutionRequest request in requests) - { - byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); - - // Update the outer hash with the result of each inner hash - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); - } - // Complete the final hash computation - sha256.TransformFinalBlock(new byte[0], 0, 0); - return new Hash256(sha256.Hash!); - } - } - } - public static Hash256 CalculateHash(this ExecutionRequest[] requests) { using (SHA256 sha256 = SHA256.Create()) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 0e9f7daa77f..55ea5141c9e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -25,10 +25,10 @@ namespace Nethermind.Merge.Plugin.Test; public partial class EngineModuleTests { [TestCase( - "0x948f67f47376af5d09cc39ec25a84c84774f14b2e80289064c2de73db33cc573", - "0xb8e06e1a99d81358edd0a581fef980aff00cc9c316da8119bec7a13a6e6fa167", + "0x9233c931ff3c17ae124b9aa2ca8db1c641a2dd87fa2d7e00030b274bcc33f928", + "0xe97fdbfa2fcf60073d9579d87b127cdbeffbe6c7387b9e1e836eb7f8fb2d9548", "0xa272b2f949e4a0e411c9b45542bd5d0ef3c311b5f26c4ed6b7a8d4f605a91154", - "0x96b752d22831ad92")] + "0x2fc07c25edadc149")] public virtual async Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) { @@ -122,7 +122,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid })); response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV4", - chain.JsonSerializer.Serialize(ExecutionPayloadV3.Create(block)), "[]", Keccak.Zero.ToString(true)); + chain.JsonSerializer.Serialize(ExecutionPayloadV3.Create(block)), "[]", Keccak.Zero.ToString(true), "[]"); successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); From b04c9f963119d5defff373784d062ad5eec881a0 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 9 Oct 2024 13:48:55 +0530 Subject: [PATCH 493/551] fix consensus test --- .../ExecutionRequests/ExecutionRequestProcessor.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index c9bc33697df..c933ba71b83 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -131,14 +131,14 @@ private IEnumerable ReadRequests(Block block, IWorldState stat public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec, out ExecutionRequest[] requests) { - requests = Array.Empty(); + List requestsList = new(); using (SHA256 sha256 = SHA256.Create()) { using (SHA256 sha256Inner = SHA256.Create()) { foreach (ExecutionRequest request in ProcessDeposits(receipts, spec)) { - requests.AddRange(request); + requestsList.AddRange(request); byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); // Update the outer hash with the result of each inner hash @@ -146,7 +146,7 @@ public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] } foreach (ExecutionRequest request in ReadRequests(block, state, spec, spec.Eip7002ContractAddress)) { - requests.AddRange(request); + requestsList.AddRange(request); byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); @@ -154,7 +154,7 @@ public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] foreach (ExecutionRequest request in ReadRequests(block, state, spec, spec.Eip7251ContractAddress)) { - requests.AddRange(request); + requestsList.AddRange(request); byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); @@ -162,6 +162,7 @@ public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] // Complete the final hash computation sha256.TransformFinalBlock(new byte[0], 0, 0); + requests = requestsList.ToArray(); return new Hash256(sha256.Hash!); } } From 465cbdfe8eb9fa444313a8cd81e9647ff4c35ed4 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 9 Oct 2024 16:10:45 +0530 Subject: [PATCH 494/551] fix ci tests --- src/Nethermind/Nethermind.Core/BlockHeader.cs | 3 +-- .../AuRaMergeEngineModuleTests.cs | 6 +++--- .../EngineModuleTests.V4.cs | 12 ++++++------ .../Data/ExecutionPayloadV3.cs | 2 +- .../IEngineRpcModule.Prague.cs | 2 +- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/BlockHeader.cs b/src/Nethermind/Nethermind.Core/BlockHeader.cs index e0331c5a04f..637258ff65e 100644 --- a/src/Nethermind/Nethermind.Core/BlockHeader.cs +++ b/src/Nethermind/Nethermind.Core/BlockHeader.cs @@ -77,8 +77,7 @@ public BlockHeader( public ulong? ExcessBlobGas { get; set; } public bool HasBody => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash) || (UnclesHash is not null && UnclesHash != Keccak.OfAnEmptySequenceRlp) - || (WithdrawalsRoot is not null && WithdrawalsRoot != Keccak.EmptyTreeHash) - || (RequestsHash is not null && RequestsHash != Keccak.EmptyTreeHash); + || (WithdrawalsRoot is not null && WithdrawalsRoot != Keccak.EmptyTreeHash); public bool HasTransactions => (TxRoot is not null && TxRoot != Keccak.EmptyTreeHash); diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 28ae0cdef12..df9be2d84b9 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -61,10 +61,10 @@ int ErrorCode => base.forkchoiceUpdatedV2_should_validate_withdrawals(input); [TestCase( - "0xe97d919a17fa5011ff3a08ffb07657ed9e1aaf5ff649888e5d7f605006caf598", - "0xdd9be69fe6ed616f44d53576f430c1c7720ed0e7bff59478539a4a43dbb3bf1f", + "0x1270af16dfea9b40aa9381529cb2629008fea35386041f52c07034ea8c038a05", + "0xea3bdca86662fa8b5399f2c3ff494ced747f07834740ead723ebe023852e9ea1", "0xd75d320c3a98a02ec7fe2abdcb1769bd063fec04d73f1735810f365ac12bc4ba", - "0x3c6a8926870bdeff")] + "0x7389011914b1ca84")] public override Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) => base.Should_process_block_as_expected_V4(latestValidHash, blockHash, stateRoot, payloadId); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 55ea5141c9e..4581a592b60 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -172,7 +172,7 @@ public async Task NewPayloadV4_reject_payload_with_bad_authorization_list_rlp() ExecutionRequestsProcessorMock executionRequestsProcessorMock = new(); using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, executionRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); - Hash256 lastHash = (await ProduceBranchV4(rpc, chain, 10, CreateParentBlockRequestOnHead(chain.BlockTree), true)) + Hash256 lastHash = (await ProduceBranchV4(rpc, chain, 10, CreateParentBlockRequestOnHead(chain.BlockTree), true, withRequests: true)) .LastOrDefault()?.BlockHash ?? Keccak.Zero; Transaction invalidSetCodeTx = Build.A.Transaction @@ -196,7 +196,7 @@ public async Task NewPayloadV4_reject_payload_with_bad_authorization_list_rlp() ExecutionPayloadV3 executionPayload = ExecutionPayloadV3.Create(invalidBlock); - var response = await rpc.engine_newPayloadV4(executionPayload, [], invalidBlock.ParentBeaconBlockRoot, ExecutionRequests: ExecutionRequestsProcessorMock.Requests); + var response = await rpc.engine_newPayloadV4(executionPayload, [], invalidBlock.ParentBeaconBlockRoot, executionRequests: ExecutionRequestsProcessorMock.Requests); Assert.That(response.Data.Status, Is.EqualTo("INVALID")); } @@ -220,7 +220,7 @@ public async Task can_progress_chain_one_by_one_v4_with_requests(int count) ExecutionRequestsProcessorMock executionRequestsProcessorMock = new(); using MergeTestBlockchain chain = await CreateBlockchain(Prague.Instance, null, null, null, executionRequestsProcessorMock); IEngineRpcModule rpc = CreateEngineModule(chain); - Hash256 lastHash = (await ProduceBranchV4(rpc, chain, count, CreateParentBlockRequestOnHead(chain.BlockTree), true)) + Hash256 lastHash = (await ProduceBranchV4(rpc, chain, count, CreateParentBlockRequestOnHead(chain.BlockTree), true, withRequests: true)) .LastOrDefault()?.BlockHash ?? Keccak.Zero; chain.BlockTree.HeadHash.Should().Be(lastHash); Block? last = RunForAllBlocksInBranch(chain.BlockTree, chain.BlockTree.HeadHash, b => b.IsGenesis, true); @@ -233,7 +233,7 @@ public async Task can_progress_chain_one_by_one_v4_with_requests(int count) private async Task> ProduceBranchV4(IEngineRpcModule rpc, MergeTestBlockchain chain, - int count, ExecutionPayload startingParentBlock, bool setHead, Hash256? random = null) + int count, ExecutionPayload startingParentBlock, bool setHead, Hash256? random = null, bool withRequests = false) { List blocks = new(); ExecutionPayload parentBlock = startingParentBlock; @@ -248,7 +248,7 @@ private async Task> ProduceBranchV4(IEngineRpcMo ExecutionPayloadV3? getPayloadResult = await BuildAndGetPayloadOnBranchV4(rpc, chain, parentHeader, parentBlock.Timestamp + 12, random ?? TestItem.KeccakA, Address.Zero); - PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero, ExecutionRequests: ExecutionRequestsProcessorMock.Requests)).Data; + PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero, executionRequests: withRequests? ExecutionRequestsProcessorMock.Requests : [])).Data; payloadStatusResponse.Status.Should().Be(PayloadStatus.Valid); if (setHead) { @@ -303,7 +303,7 @@ private async Task BuildAndSendNewBlockV4( ExecutionPayloadV3 executionPayload = await BuildAndGetPayloadResultV4(rpc, chain, head, Keccak.Zero, head, timestamp, random, feeRecipient, withdrawals, waitForBlockImprovement); ResultWrapper executePayloadResult = - await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot, ExecutionRequests: ExecutionRequestsProcessorMock.Requests); + await rpc.engine_newPayloadV4(executionPayload, new byte[0][], executionPayload.ParentBeaconBlockRoot, executionRequests: ExecutionRequestsProcessorMock.Requests); executePayloadResult.Data.Status.Should().Be(PayloadStatus.Valid); return executionPayload; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs index 309590838e1..609309b2e1b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs @@ -37,7 +37,7 @@ public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? block.Header.ParentBeaconBlockRoot = ParentBeaconBlockRoot; block.Header.BlobGasUsed = BlobGasUsed; block.Header.ExcessBlobGas = ExcessBlobGas; - block.Header.RequestsHash = ExecutionRequests != null ? ExecutionRequests.CalculateHash() : Hash256.Zero; + block.Header.RequestsHash = ExecutionRequests != null ? ExecutionRequests.CalculateHash() : null; return true; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs index c092322cee2..1c119acb908 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs @@ -18,7 +18,7 @@ public partial interface IEngineRpcModule : IRpcModule Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", IsSharable = true, IsImplemented = true)] - Task> engine_newPayloadV4(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, ExecutionRequest[]? ExecutionRequests); + Task> engine_newPayloadV4(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, ExecutionRequest[]? executionRequests); [JsonRpcMethod( Description = "Returns the most recent version of an execution payload and fees with respect to the transaction set contained by the mempool.", From 4e01f92decf8e276c0c65b88a488db8b35b56337 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 9 Oct 2024 16:11:14 +0530 Subject: [PATCH 495/551] format files --- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 4581a592b60..dfaf9444a88 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -248,7 +248,7 @@ private async Task> ProduceBranchV4(IEngineRpcMo ExecutionPayloadV3? getPayloadResult = await BuildAndGetPayloadOnBranchV4(rpc, chain, parentHeader, parentBlock.Timestamp + 12, random ?? TestItem.KeccakA, Address.Zero); - PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero, executionRequests: withRequests? ExecutionRequestsProcessorMock.Requests : [])).Data; + PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero, executionRequests: withRequests ? ExecutionRequestsProcessorMock.Requests : [])).Data; payloadStatusResponse.Status.Should().Be(PayloadStatus.Valid); if (setHead) { From c9cd867a76a2f121cf3fc079970448c418069ceb Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 9 Oct 2024 16:25:46 +0530 Subject: [PATCH 496/551] remove signature changes --- src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs | 2 +- src/Nethermind/Nethermind.Core/Crypto/Signature.cs | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index 1902c7ee0da..e7345b1bcf3 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -100,7 +100,7 @@ public static Hash256 KeccakFromNumber(int i) public static Withdrawal WithdrawalE_5Eth = new() { Address = AddressE, Index = 5, ValidatorIndex = 2005, AmountInGwei = 5_000_000_000 }; public static Withdrawal WithdrawalF_6Eth = new() { Address = AddressF, Index = 6, ValidatorIndex = 2006, AmountInGwei = 6_000_000_000 }; - public static byte[] SignatureBytes = [.. new Signature().Bytes, .. KeccakA.Bytes]; + public static byte[] SignatureBytes = [.. new Signature("0x9242685bf161793cc25603c231bc2f568eb630ea16aa137d2664ac80388256084f8ae3bd7535248d0bd448298cc2e2071e56992d0774dc340c368ae950852ada1c").Bytes, .. KeccakA.Bytes]; public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = ([.. PublicKeyA.Bytes.Slice(0, 48), .. KeccakA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)1)]) }; public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = ([.. PublicKeyB.Bytes.Slice(0, 48), .. KeccakB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)2)]) }; diff --git a/src/Nethermind/Nethermind.Core/Crypto/Signature.cs b/src/Nethermind/Nethermind.Core/Crypto/Signature.cs index b6a189035e4..f67d8eea449 100644 --- a/src/Nethermind/Nethermind.Core/Crypto/Signature.cs +++ b/src/Nethermind/Nethermind.Core/Crypto/Signature.cs @@ -65,10 +65,6 @@ public Signature(string hexString) { } - public Signature() - { - } - public byte[] Bytes { get; } = new byte[64]; public ulong V { get; set; } From a87a1441eb6b77b0404bd579353bb37862aaa93c Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 9 Oct 2024 20:25:30 +0530 Subject: [PATCH 497/551] optimise executionRequestProcessor --- .../ExecutionRequestProcessorTests.cs | 2 +- .../ExecutionRequests/ExecutionRequestProcessor.cs | 8 ++++---- .../Nethermind.Core.Test/Builders/BlockBuilder.cs | 3 ++- src/Nethermind/Nethermind.Core/Block.cs | 2 +- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 2 +- .../ExecutionRequestsProcessorMock.cs | 7 ++++++- .../Handlers/GetPayloadV4Handler.cs | 2 +- 7 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index 4b29c44121d..e7731326ea9 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -123,6 +123,6 @@ .. executionConsolidationRequests Assert.That(processedRequest.RequestData, Is.EqualTo(expectedRequest.RequestData)); } - Assert.That(block.Header.RequestsHash, Is.EqualTo(block.ExecutionRequests.CalculateHash())); + Assert.That(block.Header.RequestsHash, Is.EqualTo(block.ExecutionRequests.ToArray().CalculateHash())); } } diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index c933ba71b83..9827bc6b4c0 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -129,9 +129,9 @@ private IEnumerable ReadRequests(Block block, IWorldState stat } - public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec, out ExecutionRequest[] requests) + public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec, out ArrayPoolList requests) { - List requestsList = new(); + ArrayPoolList requestsList = new ArrayPoolList(0); using (SHA256 sha256 = SHA256.Create()) { using (SHA256 sha256Inner = SHA256.Create()) @@ -162,7 +162,7 @@ public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] // Complete the final hash computation sha256.TransformFinalBlock(new byte[0], 0, 0); - requests = requestsList.ToArray(); + requests = requestsList; return new Hash256(sha256.Hash!); } } @@ -172,7 +172,7 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] { if (!spec.RequestsEnabled) return; - block.Header.RequestsHash = CalculateRequestsHash(block, state, receipts, spec, out ExecutionRequest[] requests); + block.Header.RequestsHash = CalculateRequestsHash(block, state, receipts, spec, out ArrayPoolList requests); block.ExecutionRequests = requests; } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index e8b68230935..ee80f1bb81a 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using Nethermind.Core.Collections; using Nethermind.Core.Crypto; using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Specs; @@ -251,7 +252,7 @@ public BlockBuilder WithReceiptsRoot(Hash256 keccak) public BlockBuilder WithEmptyRequestsHash() { TestObjectInternal.Header.RequestsHash = Array.Empty().CalculateHash(); - TestObjectInternal.ExecutionRequests = Array.Empty(); + TestObjectInternal.ExecutionRequests = new ArrayPoolList(0); return this; } diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index 57ebf3b5726..935a1b0b900 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -118,7 +118,7 @@ public Transaction[] Transactions public Hash256? RequestsHash => Header.RequestsHash; // do not add setter here [JsonIgnore] - public ExecutionRequest.ExecutionRequest[]? ExecutionRequests { get; set; } + public ArrayPoolList? ExecutionRequests { get; set; } [JsonIgnore] public ArrayPoolList? AccountChanges { get; set; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index dfaf9444a88..9d37c53446c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -228,7 +228,7 @@ public async Task can_progress_chain_one_by_one_v4_with_requests(int count) last!.IsGenesis.Should().BeTrue(); Block? head = chain.BlockTree.Head; - head!.ExecutionRequests!.Length.Should().Be(ExecutionRequestsProcessorMock.Requests.Length); + head!.ExecutionRequests!.ToArray().Length.Should().Be(ExecutionRequestsProcessorMock.Requests.Length); } private async Task> ProduceBranchV4(IEngineRpcModule rpc, diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs index efb14cac6cf..4217bec0535 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs @@ -3,6 +3,7 @@ using Nethermind.Consensus.ExecutionRequests; using Nethermind.Core; +using Nethermind.Core.Collections; using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Specs; using Nethermind.Core.Test.Builders; @@ -30,7 +31,11 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] if (block.IsGenesis) return; - block.ExecutionRequests = Requests; + block.ExecutionRequests = new ArrayPoolList(Requests.Length); + foreach (var request in Requests) + { + block.ExecutionRequests.Add(request); + } block.Header.RequestsHash = Requests.CalculateHash(); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs index 45f51c5df35..5969ce68965 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs @@ -23,7 +23,7 @@ public class GetPayloadV4Handler( { protected override GetPayloadV4Result GetPayloadResultFromBlock(IBlockProductionContext context) { - return new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!), context.CurrentBestBlock!.ExecutionRequests!) + return new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!), context.CurrentBestBlock!.ExecutionRequests!.ToArray()) { ShouldOverrideBuilder = censorshipDetector?.GetCensoredBlocks().Contains(new BlockNumberHash(context.CurrentBestBlock!)) ?? false }; From ac01e83d81aeb0f946795f52e69e0cc116e0aa5b Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 10 Oct 2024 23:21:01 +0200 Subject: [PATCH 498/551] spec changes for 7702 --- .../AuthorizationListJson.cs | 5 +- .../Validators/TxValidatorTests.cs | 6 +- .../Validators/TxValidator.cs | 9 - .../Nethermind.Core/AuthorizationTuple.cs | 5 +- .../IntrinsicGasCalculatorTests.cs | 28 +-- .../TransactionProcessorEip7702Tests.cs | 208 +++++++++++++++++- .../Nethermind.Evm/CodeInfoRepository.cs | 5 + src/Nethermind/Nethermind.Evm/GasCostOf.cs | 2 +- .../TransactionProcessor.cs | 6 + .../Eip7702/AuthorizationTupleDecoder.cs | 8 +- 10 files changed, 239 insertions(+), 43 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs index a2b8b6cfcbc..ec6cddb6148 100644 --- a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs +++ b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core; +using Nethermind.Int256; namespace Ethereum.Test.Base; public class AuthorizationListJson @@ -10,7 +11,7 @@ public class AuthorizationListJson public Address Address { get; set; } public ulong Nonce { get; set; } public ulong V { get; set; } - public byte[] R { get; set; } - public byte[] S { get; set; } + public UInt256 R { get; set; } + public UInt256 S { get; set; } public Address Signer { get; set; } } diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index f52adce9ba7..37d27d3a37d 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Numerics; using FluentAssertions; +using Microsoft.AspNetCore.Mvc.Routing; using Nethermind.Consensus.Messages; using Nethermind.Consensus.Validators; using Nethermind.Core; @@ -528,7 +529,7 @@ public void IsWellFormed_CreateTxInSetCode_ReturnsFalse() { TransactionBuilder txBuilder = Build.A.Transaction .WithType(TxType.SetCode) - .WithAuthorizationCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) + .WithAuthorizationCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, 0, 0)) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) .WithChainId(TestBlockchainIds.ChainId) @@ -552,7 +553,7 @@ public void IsWellFormed_AuthorizationListTxInPragueSpec_ReturnsTrue() TransactionBuilder txBuilder = Build.A.Transaction .WithType(TxType.SetCode) .WithTo(TestItem.AddressA) - .WithAuthorizationCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, [], [])) + .WithAuthorizationCode(new AuthorizationTuple(0, TestItem.AddressA, 0, 0, 0, 0)) .WithMaxFeePerGas(100000) .WithGasLimit(1000000) .WithChainId(TestBlockchainIds.ChainId) @@ -622,7 +623,6 @@ public void IsWellFormed_AuthorizationTupleHasBadSignature_ReturnsFalse(ulong yP Assert.That(txValidator.IsWellFormed(tx, Prague.Instance).AsBool, Is.EqualTo(expected)); } - private static IEnumerable NonSetCodeTypes() => Enum.GetValues().Where(t => t != TxType.SetCode && t != TxType.DepositTx); diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 070ab579360..b5db9fd9eef 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -328,15 +328,6 @@ public ValidationResult IsWellFormed(Transaction transaction, IReleaseSpec relea transaction.AuthorizationList switch { null or { Length: 0 } => TxErrorMessages.MissingAuthorizationList, - var authorizationList when authorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature)) => - TxErrorMessages.InvalidAuthoritySignature, _ => ValidationResult.Success }; - - private bool ValidateAuthoritySignature(Signature signature) - { - UInt256 sValue = new(signature.SAsSpan, isBigEndian: true); - - return sValue < Secp256K1Curve.HalfNPlusOne && signature.RecoveryId is 0 or 1; - } } diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index 69fd3b53768..e12d8aa6243 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LGPL-3.0-only using Nethermind.Core.Crypto; +using Nethermind.Int256; using System; namespace Nethermind.Core; @@ -17,8 +18,8 @@ public AuthorizationTuple( Address codeAddress, ulong nonce, ulong yParity, - byte[] r, - byte[] s, + UInt256 r, + UInt256 s, Address? authority = null) : this(chainId, codeAddress, nonce, new Signature(r, s, yParity + Signature.VOffset), authority) { } diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index d1c068694da..b4dedf70ef8 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -126,8 +126,8 @@ [new AuthorizationTuple( new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)) + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ], GasCostOf.NewAccount); yield return ( @@ -136,15 +136,15 @@ [new AuthorizationTuple( new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)) + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ], GasCostOf.NewAccount * 2); yield return ( @@ -153,22 +153,22 @@ [new AuthorizationTuple( new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)) + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ], GasCostOf.NewAccount * 3); } @@ -193,8 +193,8 @@ public void Calculate_TxHasAuthorizationListBeforePrague_ThrowsInvalidDataExcept TestItem.AddressF, 0, TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextBytes(10), - TestContext.CurrentContext.Random.NextBytes(10)) + new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), + new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ) .TestObject; diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index 4fe6ab74f20..c8cb0a473a7 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -20,6 +20,7 @@ using System; using System.Linq; using Nethermind.Int256; +using Nethermind.Consensus; namespace Nethermind.Evm.Test; @@ -158,18 +159,21 @@ public void Execute_SenderAndSignerIsTheSameOrNotWithCodeThatSavesCallerAddress_ Assert.That(cellValue.ToArray(), Is.EqualTo(sender.Address.Bytes)); } - public static IEnumerable DifferentCommitValues() + + public static IEnumerable DifferentAuthorityTupleValues() { //Base case - yield return new object[] { 1ul, 0ul, TestItem.AddressA.Bytes }; + yield return new object[] { 1ul, 0ul, true }; //Wrong nonce - yield return new object[] { 1ul, 1ul, new[] { (byte)0x0 } }; + yield return new object[] { 1ul, 1ul, false }; //Wrong chain id - yield return new object[] { 2ul, 0ul, new[] { (byte)0x0 } }; + yield return new object[] { 2ul, 0ul, false }; + //Nonce is too high + yield return new object[] { 2ul, ulong.MaxValue, false }; } - [TestCaseSource(nameof(DifferentCommitValues))] - public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorageSlot(ulong chainId, ulong nonce, byte[] expectedStorageValue) + [TestCaseSource(nameof(DifferentAuthorityTupleValues))] + public void Execute_AuthorityTupleHasDifferentData_EOACodeIsEmptyOrAsExpected(ulong chainId, ulong nonce, bool expectDelegation) { PrivateKey sender = TestItem.PrivateKeyA; PrivateKey signer = TestItem.PrivateKeyB; @@ -197,8 +201,36 @@ public void Execute_CommitMessageHasDifferentData_ExpectedAddressIsSavedInStorag _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); - var actual = _stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(); - Assert.That(actual, Is.EqualTo(expectedStorageValue)); + byte[] actual = _stateProvider.GetCode(signer.Address); + Assert.That(Eip7702Constants.IsDelegatedCode(actual), Is.EqualTo(expectDelegation)); + } + + [TestCase(ulong.MaxValue, false)] + [TestCase(ulong.MaxValue - 1, true)] + public void Execute_AuthorityNonceHasMaxValueOrBelow_MaxValueNonceIsNotAllowed(ulong nonce, bool expectDelegation) + { + PrivateKey sender = TestItem.PrivateKeyA; + PrivateKey signer = TestItem.PrivateKeyB; + Address codeSource = TestItem.AddressC; + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + _stateProvider.CreateAccount(signer.Address, 0, nonce); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(100_000) + .WithAuthorizationCode(_ethereumEcdsa.Sign(signer, 0, codeSource, nonce)) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + + _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + + byte[] actual = _stateProvider.GetCode(signer.Address); + Assert.That(Eip7702Constants.IsDelegatedCode(actual), Is.EqualTo(expectDelegation)); } [TestCase(0)] @@ -235,6 +267,35 @@ public void Execute_TxHasDifferentAmountOfAuthorizedCode_UsedGasIsExpected(int c Assert.That(tracer.GasSpent, Is.EqualTo(GasCostOf.Transaction + GasCostOf.NewAccount * count)); } + public void Execute_TxHasDifferentAmount() + { + PrivateKey sender = TestItem.PrivateKeyA; + PrivateKey signer = TestItem.PrivateKeyB; + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(signer.Address) + .WithGasLimit(100_000) + .WithAuthorizationCode(Enumerable.Range(0, 2) + .Select(i => _ethereumEcdsa.Sign( + signer, + _specProvider.ChainId, + TestItem.AddressC, + 0)).ToArray()) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(100000000).TestObject; + + CallOutputTracer tracer = new(); + + _transactionProcessor.Execute(tx, block.Header, tracer); + + } + private static IEnumerable EvmExecutionErrorCases() { byte[] runOutOfGasCode = Prepare.EvmCode @@ -506,6 +567,85 @@ public void Execute_DelegatedCodeUsesEXTOPCODES_StoresExpectedValue(byte[] code, Assert.That(_stateProvider.Get(new StorageCell(signer.Address, 0)).ToArray(), Is.EquivalentTo(expectedValue)); } + public static IEnumerable EXTCODEHASHAccountSetup() + { + //yield return new object[] { + // (IWorldState state, Address account) => + // { + // //Account does not exists + // }, + // true }; + yield return new object[] { + (IWorldState state, Address account) => + { + //Account is empty + state.CreateAccount(account, 0); + var x = state.AccountExists(account); + }, + true}; + //yield return new object[] { + // (IWorldState state, Address account) => + // { + // //Account has balance + // state.CreateAccount(account, 1); + // }, + // false}; + //yield return new object[] { + // (IWorldState state, Address account) => + // { + // //Account has nonce + // state.CreateAccount(account, 0, 1); + // }, + // false}; + + //yield return new object[] { + // (IWorldState state, Address account) => + // { + // //Account has code + // state.CreateAccount(account, 0); + // state.InsertCode(account, Prepare.EvmCode.RETURN().Done, Prague.Instance); + // }, + // false}; + } + [TestCaseSource(nameof(EXTCODEHASHAccountSetup))] + public void Execute_CodeSavesEXTCODEHASHWithDifferentAccountSetup_SavesZeroIfAccountDoesNotExistsOrIsEmpty(Action setupAccount, bool expectZero) + { + PrivateKey signer = TestItem.PrivateKeyA; + PrivateKey sender = TestItem.PrivateKeyB; + Address codeSource = TestItem.AddressC; + Address target = TestItem.AddressD; + + setupAccount(_stateProvider, target); + + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + + byte[] code = Prepare.EvmCode + .PushData(signer.Address) + .Op(Instruction.EXTCODEHASH) + .Op(Instruction.PUSH0) + .Op(Instruction.SSTORE) + .Done; + + DeployCode(codeSource, code); + DeployCode(signer.Address, [.. Eip7702Constants.DelegationHeader, .. target.Bytes]); + + _stateProvider.Commit(Prague.Instance); + + Transaction tx = Build.A.Transaction + .WithTo(codeSource) + .WithGasLimit(100_000) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + + TransactionResult result = _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + + Assert.That(new UInt256(_stateProvider.Get(new StorageCell(codeSource, 0))), expectZero ? Is.EqualTo((UInt256)0) : Is.Not.EqualTo((UInt256)0)); + } + public static IEnumerable CountsAsAccessedCases() { EthereumEcdsa ethereumEcdsa = new(BlockchainIds.GenericNonRealNetwork); @@ -605,6 +745,58 @@ public void Execute_AuthorityAccountExistsOrNot_NonceIsIncrementedByOne(bool acc Assert.That(_stateProvider.GetNonce(authority.Address), Is.EqualTo((UInt256)1)); } + + [Test] + public void Execute_SetNormalDelegationAndThenSetDelegationWithZeroAddress_AccountCodeIsReset() + { + PrivateKey authority = TestItem.PrivateKeyA; + PrivateKey sender = TestItem.PrivateKeyB; + + _stateProvider.CreateAccount(authority.Address, 0); + _stateProvider.CreateAccount(sender.Address, 1.Ether()); + + AuthorizationTuple[] tuples = + { + _ethereumEcdsa.Sign(authority, 1, sender.Address, 0), + }; + + Transaction tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithTo(TestItem.AddressB) + .WithGasLimit(100_000) + .WithAuthorizationCode(tuples) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + Block block = Build.A.Block.WithNumber(long.MaxValue - 1) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + _stateProvider.CommitTree(block.Number); + + byte[] actual = _stateProvider.GetCode(authority.Address); + Assert.That(Eip7702Constants.IsDelegatedCode(actual), Is.True); + + tx = Build.A.Transaction + .WithType(TxType.SetCode) + .WithNonce(1) + .WithTo(TestItem.AddressB) + .WithGasLimit(100_000) + .WithAuthorizationCode(_ethereumEcdsa.Sign(authority, 1, Address.Zero, 1)) + .SignedAndResolved(_ethereumEcdsa, sender, true) + .TestObject; + block = Build.A.Block.WithNumber(long.MaxValue) + .WithTimestamp(MainnetSpecProvider.PragueBlockTimestamp) + .WithTransactions(tx) + .WithGasLimit(10000000).TestObject; + + _transactionProcessor.Execute(tx, block.Header, NullTxTracer.Instance); + actual = _stateProvider.GetCode(authority.Address); + + Assert.That(actual, Is.EqualTo(Array.Empty())); + Assert.That(_stateProvider.HasCode(authority.Address), Is.False); + } + private void DeployCode(Address codeSource, byte[] code) { _stateProvider.CreateAccountIfNotExists(codeSource, 0); diff --git a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs index fe631b3fb10..939352a20ac 100644 --- a/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs +++ b/src/Nethermind/Nethermind.Evm/CodeInfoRepository.cs @@ -133,6 +133,11 @@ public void InsertCode(IWorldState state, ReadOnlyMemory code, Address cod public void SetDelegation(IWorldState state, Address codeSource, Address authority, IReleaseSpec spec) { + if (codeSource == Address.Zero) + { + state.InsertCode(authority, Keccak.OfAnEmptyString, Array.Empty(), spec); + return; + } byte[] authorizedBuffer = new byte[Eip7702Constants.DelegationHeader.Length + Address.Size]; Eip7702Constants.DelegationHeader.CopyTo(authorizedBuffer); codeSource.Bytes.CopyTo(authorizedBuffer, Eip7702Constants.DelegationHeader.Length); diff --git a/src/Nethermind/Nethermind.Evm/GasCostOf.cs b/src/Nethermind/Nethermind.Evm/GasCostOf.cs index e67770b53e8..07ca52e64b0 100644 --- a/src/Nethermind/Nethermind.Evm/GasCostOf.cs +++ b/src/Nethermind/Nethermind.Evm/GasCostOf.cs @@ -62,6 +62,6 @@ public static class GasCostOf public const long AccessStorageListEntry = 1900; // eip-2930 public const long TLoad = WarmStateRead; // eip-1153 public const long TStore = WarmStateRead; // eip-1153 - public const long PerAuthBaseCost = 2500; // eip-7702 + public const long PerAuthBaseCost = 12500; // eip-7702 } } diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 3ebf373ab25..c2311e9cd83 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -254,6 +254,12 @@ bool IsValidForExecution( return false; } + if (authorizationTuple.Nonce == ulong.MaxValue) + { + error = $"Nonce ({authorizationTuple.Nonce}) must be less than 2**64 - 1."; + return false; + } + accessedAddresses.Add(authorizationTuple.Authority); if (WorldState.HasCode(authorizationTuple.Authority) && !_codeInfoRepository.TryGetDelegation(WorldState, authorizationTuple.Authority, out _)) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index b3e7dfcc80d..6c6dd9d7e1c 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -23,8 +23,8 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R Address? codeAddress = stream.DecodeAddress(); ulong nonce = stream.DecodeULong(); ulong yParity = stream.DecodeULong(); - byte[] r = stream.DecodeByteArray(); - byte[] s = stream.DecodeByteArray(); + UInt256 r = stream.DecodeUInt256(); + UInt256 s = stream.DecodeUInt256(); if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) { @@ -47,8 +47,8 @@ public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp Address? codeAddress = decoderContext.DecodeAddress(); ulong nonce = decoderContext.DecodeULong(); ulong yParity = decoderContext.DecodeULong(); - byte[] r = decoderContext.DecodeByteArray(); - byte[] s = decoderContext.DecodeByteArray(); + UInt256 r = decoderContext.DecodeUInt256(); + UInt256 s = decoderContext.DecodeUInt256(); if (!rlpBehaviors.HasFlag(RlpBehaviors.AllowExtraBytes)) { From 41f86e349f80a310a3ee858a1fa2e031c355f839 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 11 Oct 2024 12:39:00 +0200 Subject: [PATCH 499/551] Fix EXTCODEHASH for dead accounts --- .../TransactionProcessorEip7702Tests.cs | 61 +++++++++---------- .../Nethermind.Evm/VirtualMachine.cs | 4 +- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs index c8cb0a473a7..d627b8190cd 100644 --- a/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip7702Tests.cs @@ -569,43 +569,42 @@ public void Execute_DelegatedCodeUsesEXTOPCODES_StoresExpectedValue(byte[] code, public static IEnumerable EXTCODEHASHAccountSetup() { - //yield return new object[] { - // (IWorldState state, Address account) => - // { - // //Account does not exists - // }, - // true }; + yield return new object[] { + (IWorldState state, Address account) => + { + //Account does not exists + }, + true }; yield return new object[] { (IWorldState state, Address account) => { //Account is empty state.CreateAccount(account, 0); - var x = state.AccountExists(account); }, true}; - //yield return new object[] { - // (IWorldState state, Address account) => - // { - // //Account has balance - // state.CreateAccount(account, 1); - // }, - // false}; - //yield return new object[] { - // (IWorldState state, Address account) => - // { - // //Account has nonce - // state.CreateAccount(account, 0, 1); - // }, - // false}; - - //yield return new object[] { - // (IWorldState state, Address account) => - // { - // //Account has code - // state.CreateAccount(account, 0); - // state.InsertCode(account, Prepare.EvmCode.RETURN().Done, Prague.Instance); - // }, - // false}; + yield return new object[] { + (IWorldState state, Address account) => + { + //Account has balance + state.CreateAccount(account, 1); + }, + false}; + yield return new object[] { + (IWorldState state, Address account) => + { + //Account has nonce + state.CreateAccount(account, 0, 1); + }, + false}; + + yield return new object[] { + (IWorldState state, Address account) => + { + //Account has code + state.CreateAccount(account, 0); + state.InsertCode(account, Prepare.EvmCode.RETURN().Done, Prague.Instance); + }, + false}; } [TestCaseSource(nameof(EXTCODEHASHAccountSetup))] public void Execute_CodeSavesEXTCODEHASHWithDifferentAccountSetup_SavesZeroIfAccountDoesNotExistsOrIsEmpty(Action setupAccount, bool expectZero) @@ -629,7 +628,7 @@ public void Execute_CodeSavesEXTCODEHASHWithDifferentAccountSetup_SavesZeroIfAcc DeployCode(codeSource, code); DeployCode(signer.Address, [.. Eip7702Constants.DelegationHeader, .. target.Bytes]); - _stateProvider.Commit(Prague.Instance); + _stateProvider.Commit(Prague.Instance, true); Transaction tx = Build.A.Transaction .WithTo(codeSource) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index b5ca0aa4a7d..b9fa6506d3c 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -1924,7 +1924,9 @@ private CallResult ExecuteCode Date: Fri, 11 Oct 2024 13:23:16 +0200 Subject: [PATCH 500/551] readd sig check after spec change --- .../Nethermind.Consensus/Validators/TxValidator.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index b5db9fd9eef..2b8fa5b5940 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -328,6 +328,15 @@ public ValidationResult IsWellFormed(Transaction transaction, IReleaseSpec relea transaction.AuthorizationList switch { null or { Length: 0 } => TxErrorMessages.MissingAuthorizationList, + var authorizationList when authorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature)) => + TxErrorMessages.InvalidAuthoritySignature, _ => ValidationResult.Success }; + + private bool ValidateAuthoritySignature(Signature signature) + { + UInt256 sValue = new(signature.SAsSpan, isBigEndian: true); + + return sValue < Secp256K1Curve.HalfNPlusOne; + } } From 91e1c8f49e83727850ab32c5792b015433c29fa1 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 11 Oct 2024 13:50:21 +0200 Subject: [PATCH 501/551] fix test --- .../Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs index 843406aad94..3b2198eeffe 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/Eth/EthRpcModuleTests.cs @@ -1240,7 +1240,7 @@ public async Task eth_sendRawTransaction_sender_with_delegated_code_is_accepted( .WithMaxFeePerGas(9.GWei()) .WithMaxPriorityFeePerGas(9.GWei()) .WithGasLimit(GasCostOf.Transaction + GasCostOf.NewAccount) - .WithAuthorizationCode(test.EthereumEcdsa.Sign(TestItem.PrivateKeyB, 0, Address.Zero, (ulong)test.State.GetNonce(TestItem.AddressB) + 1)) + .WithAuthorizationCode(test.EthereumEcdsa.Sign(TestItem.PrivateKeyB, 0, TestItem.AddressC, (ulong)test.State.GetNonce(TestItem.AddressB) + 1)) .WithTo(TestItem.AddressA) .SignedAndResolved(TestItem.PrivateKeyB).TestObject; From 54179bfb36cde12b8f6736b82993f61cfe04b5bc Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 11 Oct 2024 14:30:17 +0200 Subject: [PATCH 502/551] Change v in spec test --- src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs | 2 +- src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs index ec6cddb6148..4abb947ac9b 100644 --- a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs +++ b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs @@ -10,7 +10,7 @@ public class AuthorizationListJson public ulong ChainId { get; set; } public Address Address { get; set; } public ulong Nonce { get; set; } - public ulong V { get; set; } + public byte RecoveryId { get; set; } public UInt256 R { get; set; } public UInt256 S { get; set; } public Address Signer { get; set; } diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index 7d41065cd52..7219b488a05 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -166,7 +166,7 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t i.ChainId, i.Address, i.Nonce, - i.V, + i.RecoveryId, i.R, i.S)).ToArray(); if (transaction.AuthorizationList.Any()) From 937ac55ee80c82bb684800bed2e43d84ef6cadaa Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 11 Oct 2024 17:17:00 +0200 Subject: [PATCH 503/551] Tuple decoder test for invalid field sizes --- .../AuthorizationTupleDecoderTests.cs | 102 ++++++++++++++++++ .../Nethermind.Core/AuthorizationTuple.cs | 4 +- .../IntrinsicGasCalculatorTests.cs | 14 +-- .../Eip7702/AuthorizationTupleDecoder.cs | 4 +- .../Nethermind.Serialization.Rlp/Rlp.cs | 24 +++++ 5 files changed, 137 insertions(+), 11 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs index 0d243601940..2910c1f8d5e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs @@ -55,6 +55,87 @@ public void DecodeValueDecoderContext_CodeAddressIsNull_ThrowsRlpException() , Throws.TypeOf()); } + public static IEnumerable WrongSizeFieldsEncodedCases() + { + yield return TupleRlpStream( + //Wrong chain size + Enumerable.Range(0, 9).Select(i=> (byte) 0xFF).ToArray(), + Address.Zero.Bytes, + Enumerable.Range(0, 8).Select(i=> (byte) 0xFF).ToArray(), + Enumerable.Range(0, 1).Select(i=> (byte) 0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i=> (byte) 0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i=> (byte) 0xFF).ToArray() + ); + + yield return TupleRlpStream( + //Wrong address size + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 19).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 1).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray() + ); + + yield return TupleRlpStream( + //Wrong address size + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 21).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 1).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray() + ); + + yield return TupleRlpStream( + //Wrong nonce size + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Address.Zero.Bytes, + Enumerable.Range(0, 9).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 1).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray() + ); + + yield return TupleRlpStream( + //Wrong yParity size + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Address.Zero.Bytes, + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 2).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray() + ); + + yield return TupleRlpStream( + //Wrong R size + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Address.Zero.Bytes, + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 1).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 33).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray() + ); + + yield return TupleRlpStream( + //Wrong S size + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Address.Zero.Bytes, + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 1).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 33).Select(i => (byte)0xFF).ToArray() + ); + } + + [TestCaseSource(nameof(WrongSizeFieldsEncodedCases))] + public void Encode_TupleHasFieldsOutsideBoundaries_ThrowsRlpException(RlpStream badEncoding) + { + AuthorizationTupleDecoder sut = new(); + + Assert.That(() => sut.Decode(badEncoding, RlpBehaviors.None), Throws.InstanceOf()); + } + private static RlpStream TupleRlpStreamWithNull() { Address? codeAddress = null; @@ -77,4 +158,25 @@ private static RlpStream TupleRlpStreamWithNull() stream.Position = 0; return stream; } + + private static RlpStream TupleRlpStream(byte[] chainId, byte[] address, byte[] nonce, byte[] yParity, byte[] r, byte[] s) + { + int length = + +Rlp.LengthOf(chainId) + + Rlp.LengthOf(address) + + Rlp.LengthOf(nonce) + + Rlp.LengthOf(yParity) + + Rlp.LengthOf(r) + + Rlp.LengthOf(s); + RlpStream stream = new RlpStream(Rlp.LengthOfSequence(length)); + stream.StartSequence(length); + stream.Encode(chainId); + stream.Encode(address); + stream.Encode(nonce); + stream.Encode(yParity); + stream.Encode(r); + stream.Encode(s); + stream.Position = 0; + return stream; + } } diff --git a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs index e12d8aa6243..55c9a2c9bbf 100644 --- a/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs +++ b/src/Nethermind/Nethermind.Core/AuthorizationTuple.cs @@ -17,10 +17,10 @@ public AuthorizationTuple( ulong chainId, Address codeAddress, ulong nonce, - ulong yParity, + byte yParity, UInt256 r, UInt256 s, - Address? authority = null) : this(chainId, codeAddress, nonce, new Signature(r, s, yParity + Signature.VOffset), authority) + Address? authority = null) : this(chainId, codeAddress, nonce, new Signature(r, s, (ulong)yParity + Signature.VOffset), authority) { } public ulong ChainId { get; } = chainId; diff --git a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs index b4dedf70ef8..6d98c21351a 100644 --- a/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/IntrinsicGasCalculatorTests.cs @@ -125,7 +125,7 @@ [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextByte(), new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ], @@ -135,14 +135,14 @@ [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextByte(), new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextByte(), new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ], @@ -152,21 +152,21 @@ [new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextByte(), new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextByte(), new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), new UInt256(TestContext.CurrentContext.Random.NextBytes(10))), new AuthorizationTuple( TestContext.CurrentContext.Random.NextULong(), new Address(TestContext.CurrentContext.Random.NextBytes(20)), TestContext.CurrentContext.Random.NextULong(), - TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextByte(), new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ], @@ -192,7 +192,7 @@ public void Calculate_TxHasAuthorizationListBeforePrague_ThrowsInvalidDataExcept 0, TestItem.AddressF, 0, - TestContext.CurrentContext.Random.NextULong(), + TestContext.CurrentContext.Random.NextByte(), new UInt256(TestContext.CurrentContext.Random.NextBytes(10)), new UInt256(TestContext.CurrentContext.Random.NextBytes(10))) ) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 6c6dd9d7e1c..5d9a2395266 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -22,7 +22,7 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R ulong chainId = stream.DecodeULong(); Address? codeAddress = stream.DecodeAddress(); ulong nonce = stream.DecodeULong(); - ulong yParity = stream.DecodeULong(); + byte yParity = stream.DecodeByte(); UInt256 r = stream.DecodeUInt256(); UInt256 s = stream.DecodeUInt256(); @@ -46,7 +46,7 @@ public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp ulong chainId = decoderContext.DecodeULong(); Address? codeAddress = decoderContext.DecodeAddress(); ulong nonce = decoderContext.DecodeULong(); - ulong yParity = decoderContext.DecodeULong(); + byte yParity = decoderContext.DecodeByte(); UInt256 r = decoderContext.DecodeUInt256(); UInt256 s = decoderContext.DecodeUInt256(); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs index b0d7efdd6de..46645bbf1e4 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs @@ -1560,6 +1560,30 @@ internal byte[][] DecodeByteArrays() return result; } + public byte DecodeByte() + { + byte byteValue = PeekByte(); + if (byteValue < 128) + { + SkipBytes(1); + return byteValue; + } + + if (byteValue == 128) + { + SkipBytes(1); + return 0; + } + + if (byteValue == 129) + { + SkipBytes(1); + return ReadByte(); + } + + throw new RlpException($"Unexpected value while decoding byte {byteValue}"); + } + public T[] DecodeArray(IRlpValueDecoder? decoder = null, bool checkPositions = true, T defaultElement = default) { From 5bd0edf4a8d1dbf264de7fbc82821d8e0eceb685 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 15 Oct 2024 12:56:33 +0530 Subject: [PATCH 504/551] address few comments --- .../ExecutionRequests/ExecutionRequestProcessor.cs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index 9827bc6b4c0..091a93312f2 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -57,13 +57,15 @@ public IEnumerable ProcessDeposits(TxReceipt[] receipts, IRele private ExecutionRequest DecodeDepositRequest(LogEntry log) { object[] result = _abiEncoder.Decode(AbiEncodingStyle.None, _depositEventABI, log.Data); - List flattenedResult = new List(); + byte[] flattenedResult = new byte[depositRequestsBytesSize]; + int offset = 0; foreach (var item in result) { if (item is byte[] byteArray) { - flattenedResult.AddRange(byteArray); + Array.Copy(byteArray, 0, flattenedResult, offset, byteArray.Length); + offset += byteArray.Length; } else { @@ -72,15 +74,15 @@ private ExecutionRequest DecodeDepositRequest(LogEntry log) } // make sure the flattened result is of the correct size - if (flattenedResult.Count != depositRequestsBytesSize) + if (offset != depositRequestsBytesSize) { - throw new InvalidOperationException($"Decoded ABI result has incorrect size. Expected {depositRequestsBytesSize} bytes, got {flattenedResult.Count} bytes."); + throw new InvalidOperationException($"Decoded ABI result has incorrect size. Expected {depositRequestsBytesSize} bytes, got {offset} bytes."); } return new ExecutionRequest { RequestType = (byte)ExecutionRequestType.Deposit, - RequestData = flattenedResult.ToArray() + RequestData = flattenedResult }; } @@ -131,7 +133,7 @@ private IEnumerable ReadRequests(Block block, IWorldState stat public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec, out ArrayPoolList requests) { - ArrayPoolList requestsList = new ArrayPoolList(0); + ArrayPoolList requestsList = new ArrayPoolList(receipts.Length * 2); using (SHA256 sha256 = SHA256.Create()) { using (SHA256 sha256Inner = SHA256.Create()) From bb4188491592d033f44904051e55e2e3aeec5fa8 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 15 Oct 2024 14:28:20 +0530 Subject: [PATCH 505/551] fix address error --- .../ExecutionRequests/ExecutionRequestProcessor.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index 091a93312f2..f02f6f70ed0 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlTypes; using System.Linq; using System.Security.Cryptography; using Nethermind.Abi; @@ -45,7 +44,7 @@ public IEnumerable ProcessDeposits(TxReceipt[] receipts, IRele for (var j = 0; j < logEntries.Length; j++) { LogEntry log = logEntries[j]; - if (log.LoggersAddress == spec.DepositContractAddress) + if (log.Address == spec.DepositContractAddress) { yield return DecodeDepositRequest(log); } From da380db47bcbe9e54e49469bb730c4e4ee5acab8 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 15 Oct 2024 16:50:32 +0530 Subject: [PATCH 506/551] optimise alocations --- .../ExecutionRequestProcessorTests.cs | 10 ++- .../ExecutionRequestProcessor.cs | 32 +++---- .../Nethermind.Core.Test/Builders/TestItem.cs | 18 ++-- .../ExecutionRequest/ExecutionRequest.cs | 84 ++++++++++++------- .../Data/GetPayloadV4Result.cs | 2 +- 5 files changed, 85 insertions(+), 61 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index e7731326ea9..4e4bd95e4e9 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -76,11 +76,15 @@ public void Setup() CallOutputTracer tracer = ci.Arg(); if (transaction.To == eip7002Account) { - tracer.ReturnValue = executionWithdrawalRequests.FlatEncodeWithoutType(); + Span buffer = new byte[executionWithdrawalRequests.GetRequestsByteSize()]; + executionWithdrawalRequests.FlatEncodeWithoutType(buffer); + tracer.ReturnValue = buffer.ToArray(); } else if (transaction.To == eip7251Account) { - tracer.ReturnValue = executionConsolidationRequests.FlatEncodeWithoutType(); + Span buffer = new byte[executionConsolidationRequests.GetRequestsByteSize()]; + executionConsolidationRequests.FlatEncodeWithoutType(buffer); + tracer.ReturnValue = buffer.ToArray(); } else { @@ -120,7 +124,7 @@ .. executionConsolidationRequests ])) { Assert.That(processedRequest.RequestType, Is.EqualTo(expectedRequest.RequestType)); - Assert.That(processedRequest.RequestData, Is.EqualTo(expectedRequest.RequestData)); + Assert.That(processedRequest.RequestData.ToArray(), Is.EqualTo(expectedRequest.RequestData.ToArray())); } Assert.That(block.Header.RequestsHash, Is.EqualTo(block.ExecutionRequests.ToArray().CalculateHash())); diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index f02f6f70ed0..3f81950cf77 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -137,29 +137,23 @@ public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] { using (SHA256 sha256Inner = SHA256.Create()) { - foreach (ExecutionRequest request in ProcessDeposits(receipts, spec)) + void ProcessAndHashRequests(IEnumerable executionRequests) { - requestsList.AddRange(request); - byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); - - // Update the outer hash with the result of each inner hash - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); - } - foreach (ExecutionRequest request in ReadRequests(block, state, spec, spec.Eip7002ContractAddress)) - { - requestsList.AddRange(request); - byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); + foreach (ExecutionRequest request in executionRequests) + { + requestsList.AddRange(request); + var internalBuffer = new byte[request.RequestData.Length + 1]; + request.FlatEncode(internalBuffer); + byte[] requestHash = sha256Inner.ComputeHash(internalBuffer); - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); + // Update the outer hash with the result of each inner hash + sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); + } } - foreach (ExecutionRequest request in ReadRequests(block, state, spec, spec.Eip7251ContractAddress)) - { - requestsList.AddRange(request); - byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); - - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); - } + ProcessAndHashRequests(ProcessDeposits(receipts, spec)); + ProcessAndHashRequests(ReadRequests(block, state, spec, spec.Eip7002ContractAddress)); + ProcessAndHashRequests(ReadRequests(block, state, spec, spec.Eip7251ContractAddress)); // Complete the final hash computation sha256.TransformFinalBlock(new byte[0], 0, 0); diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index e7345b1bcf3..9865dcb0089 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -102,15 +102,15 @@ public static Hash256 KeccakFromNumber(int i) public static byte[] SignatureBytes = [.. new Signature("0x9242685bf161793cc25603c231bc2f568eb630ea16aa137d2664ac80388256084f8ae3bd7535248d0bd448298cc2e2071e56992d0774dc340c368ae950852ada1c").Bytes, .. KeccakA.Bytes]; - public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = ([.. PublicKeyA.Bytes.Slice(0, 48), .. KeccakA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)1)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = ([.. PublicKeyB.Bytes.Slice(0, 48), .. KeccakB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)2)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = ([.. PublicKeyC.Bytes.Slice(0, 48), .. KeccakC.Bytes, .. (BitConverter.GetBytes((ulong)3_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)3)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)1_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)2_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)3_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. PublicKeyB.Bytes.Slice(0, 48)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. PublicKeyC.Bytes.Slice(0, 48)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. PublicKeyA.Bytes.Slice(0, 48)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = (byte[])([.. PublicKeyA.Bytes.Slice(0, 48), .. KeccakA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)1)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = (byte[])([.. PublicKeyB.Bytes.Slice(0, 48), .. KeccakB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)2)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = (byte[])([.. PublicKeyC.Bytes.Slice(0, 48), .. KeccakC.Bytes, .. (BitConverter.GetBytes((ulong)3_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)3)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = (byte[])([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)1_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = (byte[])([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)2_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = (byte[])([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)3_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = (byte[])([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. PublicKeyB.Bytes.Slice(0, 48)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = (byte[])([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. PublicKeyC.Bytes.Slice(0, 48)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = (byte[])([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. PublicKeyA.Bytes.Slice(0, 48)]) }; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index 29711de9dd4..eac860854ce 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -4,9 +4,7 @@ using System; using System.Collections.Generic; -using System.Data.SqlTypes; using System.Security.Cryptography; -using System.Linq; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -24,61 +22,89 @@ public class ExecutionRequest public byte RequestType { get; set; } public byte[]? RequestData { get; set; } - public byte[] FlatEncode() + public void FlatEncode(Span buffer) { - byte[] encoded = new byte[RequestData!.Length + 1]; - encoded[0] = RequestType; - RequestData.CopyTo(encoded, 1); - return encoded; + if (buffer.Length < RequestData!.Length + 1) + throw new ArgumentException("Buffer too small"); + + buffer[0] = RequestType; + RequestData.CopyTo(buffer.Slice(1)); } public override string ToString() => ToString(string.Empty); public string ToString(string indentation) => @$"{indentation}{nameof(ExecutionRequest)} {{{nameof(RequestType)}: {RequestType}, - {nameof(RequestData)}: {RequestData?.ToHexString()}}}"; + {nameof(RequestData)}: {RequestData!.ToHexString()}}}"; } public static class ExecutionRequestExtensions { - public static byte[] FlatEncode(this ExecutionRequest[] requests) + public static int GetRequestsByteSize(this ExecutionRequest[] requests) { - List encoded = new(); + int size = 0; foreach (ExecutionRequest request in requests) { - encoded.AddRange(request.FlatEncode()); + size += request.RequestData!.Length + 1; } - return encoded.ToArray(); + return size; } - public static byte[] FlatEncodeWithoutType(this ExecutionRequest[] requests) + public static void FlatEncode(this ExecutionRequest[] requests, Span buffer) { - List encoded = new(); + int currentPosition = 0; + foreach (ExecutionRequest request in requests) { - encoded.AddRange(request.RequestData!); + Span internalBuffer = new byte[request.RequestData!.Length + 1]; + request.FlatEncode(internalBuffer); + + // Ensure the buffer has enough space to accommodate the new data + if (currentPosition + internalBuffer.Length > buffer.Length) + { + throw new InvalidOperationException("Buffer is not large enough to hold all data of requests"); + } + + // Copy the internalBuffer to the buffer at the current position + internalBuffer.CopyTo(buffer.Slice(currentPosition, internalBuffer.Length)); + currentPosition += internalBuffer.Length; } - return encoded.ToArray(); } - public static Hash256 CalculateHash(this ExecutionRequest[] requests) + public static void FlatEncodeWithoutType(this ExecutionRequest[] requests, Span buffer) { - using (SHA256 sha256 = SHA256.Create()) + int currentPosition = 0; + + foreach (ExecutionRequest request in requests) { - using (SHA256 sha256Inner = SHA256.Create()) + // Ensure the buffer has enough space to accommodate the new data + if (currentPosition + request.RequestData!.Length > buffer.Length) { - foreach (ExecutionRequest request in requests) - { - byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); - - // Update the outer hash with the result of each inner hash - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); - } - // Complete the final hash computation - sha256.TransformFinalBlock(new byte[0], 0, 0); - return new Hash256(sha256.Hash!); + throw new InvalidOperationException("Buffer is not large enough to hold all data of requests"); } + + // Copy the RequestData to the buffer at the current position + request.RequestData.CopyTo(buffer.Slice(currentPosition, request.RequestData.Length)); + currentPosition += request.RequestData.Length; + } + } + + public static Hash256 CalculateHash(this IEnumerable requests) + { + using var sha256 = SHA256.Create(); + using var sha256Inner = SHA256.Create(); + foreach (ExecutionRequest request in requests) + { + var internalBuffer = new byte[request.RequestData!.Length + 1]; + request.FlatEncode(internalBuffer); + byte[] requestHash = sha256Inner.ComputeHash(internalBuffer); + + // Update the outer hash with the result of each inner hash + sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); } + // Complete the final hash computation + sha256.TransformFinalBlock(Array.Empty(), 0, 0); + return new Hash256(sha256.Hash!); } public static bool IsSortedByType(this ExecutionRequest[] requests) diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs index 5db3bf94e95..c3b7bef351a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs @@ -12,5 +12,5 @@ public class GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 bl public ExecutionRequest[]? ExecutionRequests { get; } = ExecutionRequests; public override string ToString() => - $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}, ExecutionRequests : {ExecutionRequests?.FlatEncode()}}}"; + $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}, ExecutionRequests count : {ExecutionRequests?.Length}}}"; } From 226d904a95190ab3c1aa5506819860a89b5bf37d Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 16 Oct 2024 21:27:24 +0530 Subject: [PATCH 507/551] optimize further --- .../ExecutionRequestProcessor.cs | 42 +++---------------- .../Builders/BlockBuilder.cs | 2 +- src/Nethermind/Nethermind.Core/Block.cs | 2 +- .../ExecutionRequest/ExecutionRequest.cs | 27 ++++++------ .../ExecutionRequestsProcessorMock.cs | 6 +-- .../Handlers/GetPayloadV4Handler.cs | 2 +- 6 files changed, 24 insertions(+), 57 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index 3f81950cf77..0d46820272e 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -4,11 +4,9 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Security.Cryptography; using Nethermind.Abi; using Nethermind.Core; using Nethermind.Core.Collections; -using Nethermind.Core.Crypto; using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; @@ -130,44 +128,14 @@ private IEnumerable ReadRequests(Block block, IWorldState stat } - public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec, out ArrayPoolList requests) - { - ArrayPoolList requestsList = new ArrayPoolList(receipts.Length * 2); - using (SHA256 sha256 = SHA256.Create()) - { - using (SHA256 sha256Inner = SHA256.Create()) - { - void ProcessAndHashRequests(IEnumerable executionRequests) - { - foreach (ExecutionRequest request in executionRequests) - { - requestsList.AddRange(request); - var internalBuffer = new byte[request.RequestData.Length + 1]; - request.FlatEncode(internalBuffer); - byte[] requestHash = sha256Inner.ComputeHash(internalBuffer); - - // Update the outer hash with the result of each inner hash - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); - } - } - - ProcessAndHashRequests(ProcessDeposits(receipts, spec)); - ProcessAndHashRequests(ReadRequests(block, state, spec, spec.Eip7002ContractAddress)); - ProcessAndHashRequests(ReadRequests(block, state, spec, spec.Eip7251ContractAddress)); - - // Complete the final hash computation - sha256.TransformFinalBlock(new byte[0], 0, 0); - requests = requestsList; - return new Hash256(sha256.Hash!); - } - } - } - public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) { if (!spec.RequestsEnabled) return; - block.Header.RequestsHash = CalculateRequestsHash(block, state, receipts, spec, out ArrayPoolList requests); - block.ExecutionRequests = requests; + IEnumerable requests = ProcessDeposits(receipts, spec) + .Concat(ReadRequests(block, state, spec, spec.Eip7002ContractAddress)) + .Concat(ReadRequests(block, state, spec, spec.Eip7251ContractAddress)); + block.Header.RequestsHash = requests.CalculateHash(); + block.ExecutionRequests = requests.ToArray(); } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index ee80f1bb81a..e66e47f283c 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -252,7 +252,7 @@ public BlockBuilder WithReceiptsRoot(Hash256 keccak) public BlockBuilder WithEmptyRequestsHash() { TestObjectInternal.Header.RequestsHash = Array.Empty().CalculateHash(); - TestObjectInternal.ExecutionRequests = new ArrayPoolList(0); + TestObjectInternal.ExecutionRequests = Array.Empty(); return this; } diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index 935a1b0b900..57ebf3b5726 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -118,7 +118,7 @@ public Transaction[] Transactions public Hash256? RequestsHash => Header.RequestsHash; // do not add setter here [JsonIgnore] - public ArrayPoolList? ExecutionRequests { get; set; } + public ExecutionRequest.ExecutionRequest[]? ExecutionRequests { get; set; } [JsonIgnore] public ArrayPoolList? AccountChanges { get; set; } diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index eac860854ce..07ed2b96b9a 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Security.Cryptography; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -40,7 +41,7 @@ public string ToString(string indentation) => @$"{indentation}{nameof(ExecutionR public static class ExecutionRequestExtensions { - public static int GetRequestsByteSize(this ExecutionRequest[] requests) + public static int GetRequestsByteSize(this IEnumerable requests) { int size = 0; foreach (ExecutionRequest request in requests) @@ -91,20 +92,22 @@ public static void FlatEncodeWithoutType(this ExecutionRequest[] requests, Span< public static Hash256 CalculateHash(this IEnumerable requests) { - using var sha256 = SHA256.Create(); - using var sha256Inner = SHA256.Create(); - foreach (ExecutionRequest request in requests) + using (SHA256 sha256 = SHA256.Create()) { - var internalBuffer = new byte[request.RequestData!.Length + 1]; - request.FlatEncode(internalBuffer); - byte[] requestHash = sha256Inner.ComputeHash(internalBuffer); + Span concatenatedHashes = new byte[32*requests.Count()]; + int currentPosition = 0; + // Compute sha256 for each request and concatenate them + foreach (ExecutionRequest request in requests) + { + Span requestBuffer = new byte[request.RequestData!.Length + 1]; + request.FlatEncode(requestBuffer); + sha256.ComputeHash(requestBuffer.ToArray()).CopyTo(concatenatedHashes.Slice(currentPosition, 32)); + currentPosition += 32; + } - // Update the outer hash with the result of each inner hash - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); + // Compute sha256 of the concatenated hashes + return new Hash256(sha256.ComputeHash(concatenatedHashes.ToArray())); } - // Complete the final hash computation - sha256.TransformFinalBlock(Array.Empty(), 0, 0); - return new Hash256(sha256.Hash!); } public static bool IsSortedByType(this ExecutionRequest[] requests) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs index 4217bec0535..3f2f22bfcef 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs @@ -31,11 +31,7 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] if (block.IsGenesis) return; - block.ExecutionRequests = new ArrayPoolList(Requests.Length); - foreach (var request in Requests) - { - block.ExecutionRequests.Add(request); - } + block.ExecutionRequests = Requests; block.Header.RequestsHash = Requests.CalculateHash(); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs index 6a9b458fa31..d403c8c43bb 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs @@ -24,7 +24,7 @@ public class GetPayloadV4Handler( { protected override GetPayloadV4Result GetPayloadResultFromBlock(IBlockProductionContext context) { - return new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!), context.CurrentBestBlock!.ExecutionRequests!.ToArray()) + return new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!), context.CurrentBestBlock!.ExecutionRequests!) { ShouldOverrideBuilder = censorshipDetector?.GetCensoredBlocks().Contains(new BlockNumberHash(context.CurrentBestBlock!)) ?? false }; From ad3698b1b56eec2b023c8d1eebeadea497ff8717 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 16 Oct 2024 21:41:06 +0530 Subject: [PATCH 508/551] format files --- .../Nethermind.Core/ExecutionRequest/ExecutionRequest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index 07ed2b96b9a..7e81a8abb35 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -94,7 +94,7 @@ public static Hash256 CalculateHash(this IEnumerable requests) { using (SHA256 sha256 = SHA256.Create()) { - Span concatenatedHashes = new byte[32*requests.Count()]; + Span concatenatedHashes = new byte[32 * requests.Count()]; int currentPosition = 0; // Compute sha256 for each request and concatenate them foreach (ExecutionRequest request in requests) From 76b3ff5a92508ef2a3601294d46d20c6c284b145 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 17 Oct 2024 12:08:06 +0530 Subject: [PATCH 509/551] Add flat encoding and requests as a side car (#7608) --- .../ExecutionRequestProcessorTests.cs | 10 ++- .../ExecutionRequestProcessor.cs | 48 ++--------- .../Builders/BlockBuilder.cs | 2 +- .../Nethermind.Core.Test/Builders/TestItem.cs | 18 ++-- src/Nethermind/Nethermind.Core/Block.cs | 2 +- .../ExecutionRequest/ExecutionRequest.cs | 85 +++++++++++++------ .../ExecutionRequestsProcessorMock.cs | 6 +- .../Data/GetPayloadV4Result.cs | 2 +- .../Handlers/GetPayloadV4Handler.cs | 2 +- 9 files changed, 83 insertions(+), 92 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index e7731326ea9..4e4bd95e4e9 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -76,11 +76,15 @@ public void Setup() CallOutputTracer tracer = ci.Arg(); if (transaction.To == eip7002Account) { - tracer.ReturnValue = executionWithdrawalRequests.FlatEncodeWithoutType(); + Span buffer = new byte[executionWithdrawalRequests.GetRequestsByteSize()]; + executionWithdrawalRequests.FlatEncodeWithoutType(buffer); + tracer.ReturnValue = buffer.ToArray(); } else if (transaction.To == eip7251Account) { - tracer.ReturnValue = executionConsolidationRequests.FlatEncodeWithoutType(); + Span buffer = new byte[executionConsolidationRequests.GetRequestsByteSize()]; + executionConsolidationRequests.FlatEncodeWithoutType(buffer); + tracer.ReturnValue = buffer.ToArray(); } else { @@ -120,7 +124,7 @@ .. executionConsolidationRequests ])) { Assert.That(processedRequest.RequestType, Is.EqualTo(expectedRequest.RequestType)); - Assert.That(processedRequest.RequestData, Is.EqualTo(expectedRequest.RequestData)); + Assert.That(processedRequest.RequestData.ToArray(), Is.EqualTo(expectedRequest.RequestData.ToArray())); } Assert.That(block.Header.RequestsHash, Is.EqualTo(block.ExecutionRequests.ToArray().CalculateHash())); diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index f02f6f70ed0..0d46820272e 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -4,11 +4,9 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Security.Cryptography; using Nethermind.Abi; using Nethermind.Core; using Nethermind.Core.Collections; -using Nethermind.Core.Crypto; using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; @@ -130,50 +128,14 @@ private IEnumerable ReadRequests(Block block, IWorldState stat } - public Hash256 CalculateRequestsHash(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec, out ArrayPoolList requests) - { - ArrayPoolList requestsList = new ArrayPoolList(receipts.Length * 2); - using (SHA256 sha256 = SHA256.Create()) - { - using (SHA256 sha256Inner = SHA256.Create()) - { - foreach (ExecutionRequest request in ProcessDeposits(receipts, spec)) - { - requestsList.AddRange(request); - byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); - - // Update the outer hash with the result of each inner hash - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); - } - foreach (ExecutionRequest request in ReadRequests(block, state, spec, spec.Eip7002ContractAddress)) - { - requestsList.AddRange(request); - byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); - - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); - } - - foreach (ExecutionRequest request in ReadRequests(block, state, spec, spec.Eip7251ContractAddress)) - { - requestsList.AddRange(request); - byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); - - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); - } - - // Complete the final hash computation - sha256.TransformFinalBlock(new byte[0], 0, 0); - requests = requestsList; - return new Hash256(sha256.Hash!); - } - } - } - public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) { if (!spec.RequestsEnabled) return; - block.Header.RequestsHash = CalculateRequestsHash(block, state, receipts, spec, out ArrayPoolList requests); - block.ExecutionRequests = requests; + IEnumerable requests = ProcessDeposits(receipts, spec) + .Concat(ReadRequests(block, state, spec, spec.Eip7002ContractAddress)) + .Concat(ReadRequests(block, state, spec, spec.Eip7251ContractAddress)); + block.Header.RequestsHash = requests.CalculateHash(); + block.ExecutionRequests = requests.ToArray(); } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index ee80f1bb81a..e66e47f283c 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -252,7 +252,7 @@ public BlockBuilder WithReceiptsRoot(Hash256 keccak) public BlockBuilder WithEmptyRequestsHash() { TestObjectInternal.Header.RequestsHash = Array.Empty().CalculateHash(); - TestObjectInternal.ExecutionRequests = new ArrayPoolList(0); + TestObjectInternal.ExecutionRequests = Array.Empty(); return this; } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index e7345b1bcf3..9865dcb0089 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -102,15 +102,15 @@ public static Hash256 KeccakFromNumber(int i) public static byte[] SignatureBytes = [.. new Signature("0x9242685bf161793cc25603c231bc2f568eb630ea16aa137d2664ac80388256084f8ae3bd7535248d0bd448298cc2e2071e56992d0774dc340c368ae950852ada1c").Bytes, .. KeccakA.Bytes]; - public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = ([.. PublicKeyA.Bytes.Slice(0, 48), .. KeccakA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)1)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = ([.. PublicKeyB.Bytes.Slice(0, 48), .. KeccakB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)2)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = ([.. PublicKeyC.Bytes.Slice(0, 48), .. KeccakC.Bytes, .. (BitConverter.GetBytes((ulong)3_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)3)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)1_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)2_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)3_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = ([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. PublicKeyB.Bytes.Slice(0, 48)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = ([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. PublicKeyC.Bytes.Slice(0, 48)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = ([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. PublicKeyA.Bytes.Slice(0, 48)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = (byte[])([.. PublicKeyA.Bytes.Slice(0, 48), .. KeccakA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)1)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = (byte[])([.. PublicKeyB.Bytes.Slice(0, 48), .. KeccakB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)2)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = (byte[])([.. PublicKeyC.Bytes.Slice(0, 48), .. KeccakC.Bytes, .. (BitConverter.GetBytes((ulong)3_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)3)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = (byte[])([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)1_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = (byte[])([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)2_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = (byte[])([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)3_000_000_000))]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = (byte[])([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. PublicKeyB.Bytes.Slice(0, 48)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = (byte[])([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. PublicKeyC.Bytes.Slice(0, 48)]) }; + public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = (byte[])([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. PublicKeyA.Bytes.Slice(0, 48)]) }; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index 935a1b0b900..57ebf3b5726 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -118,7 +118,7 @@ public Transaction[] Transactions public Hash256? RequestsHash => Header.RequestsHash; // do not add setter here [JsonIgnore] - public ArrayPoolList? ExecutionRequests { get; set; } + public ExecutionRequest.ExecutionRequest[]? ExecutionRequests { get; set; } [JsonIgnore] public ArrayPoolList? AccountChanges { get; set; } diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index 29711de9dd4..7e81a8abb35 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -4,9 +4,8 @@ using System; using System.Collections.Generic; -using System.Data.SqlTypes; -using System.Security.Cryptography; using System.Linq; +using System.Security.Cryptography; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -24,60 +23,90 @@ public class ExecutionRequest public byte RequestType { get; set; } public byte[]? RequestData { get; set; } - public byte[] FlatEncode() + public void FlatEncode(Span buffer) { - byte[] encoded = new byte[RequestData!.Length + 1]; - encoded[0] = RequestType; - RequestData.CopyTo(encoded, 1); - return encoded; + if (buffer.Length < RequestData!.Length + 1) + throw new ArgumentException("Buffer too small"); + + buffer[0] = RequestType; + RequestData.CopyTo(buffer.Slice(1)); } public override string ToString() => ToString(string.Empty); public string ToString(string indentation) => @$"{indentation}{nameof(ExecutionRequest)} {{{nameof(RequestType)}: {RequestType}, - {nameof(RequestData)}: {RequestData?.ToHexString()}}}"; + {nameof(RequestData)}: {RequestData!.ToHexString()}}}"; } public static class ExecutionRequestExtensions { - public static byte[] FlatEncode(this ExecutionRequest[] requests) + public static int GetRequestsByteSize(this IEnumerable requests) { - List encoded = new(); + int size = 0; foreach (ExecutionRequest request in requests) { - encoded.AddRange(request.FlatEncode()); + size += request.RequestData!.Length + 1; } - return encoded.ToArray(); + return size; } - public static byte[] FlatEncodeWithoutType(this ExecutionRequest[] requests) + public static void FlatEncode(this ExecutionRequest[] requests, Span buffer) { - List encoded = new(); + int currentPosition = 0; + foreach (ExecutionRequest request in requests) { - encoded.AddRange(request.RequestData!); + Span internalBuffer = new byte[request.RequestData!.Length + 1]; + request.FlatEncode(internalBuffer); + + // Ensure the buffer has enough space to accommodate the new data + if (currentPosition + internalBuffer.Length > buffer.Length) + { + throw new InvalidOperationException("Buffer is not large enough to hold all data of requests"); + } + + // Copy the internalBuffer to the buffer at the current position + internalBuffer.CopyTo(buffer.Slice(currentPosition, internalBuffer.Length)); + currentPosition += internalBuffer.Length; } - return encoded.ToArray(); } - public static Hash256 CalculateHash(this ExecutionRequest[] requests) + public static void FlatEncodeWithoutType(this ExecutionRequest[] requests, Span buffer) + { + int currentPosition = 0; + + foreach (ExecutionRequest request in requests) + { + // Ensure the buffer has enough space to accommodate the new data + if (currentPosition + request.RequestData!.Length > buffer.Length) + { + throw new InvalidOperationException("Buffer is not large enough to hold all data of requests"); + } + + // Copy the RequestData to the buffer at the current position + request.RequestData.CopyTo(buffer.Slice(currentPosition, request.RequestData.Length)); + currentPosition += request.RequestData.Length; + } + } + + public static Hash256 CalculateHash(this IEnumerable requests) { using (SHA256 sha256 = SHA256.Create()) { - using (SHA256 sha256Inner = SHA256.Create()) + Span concatenatedHashes = new byte[32 * requests.Count()]; + int currentPosition = 0; + // Compute sha256 for each request and concatenate them + foreach (ExecutionRequest request in requests) { - foreach (ExecutionRequest request in requests) - { - byte[] requestHash = sha256Inner.ComputeHash(request.FlatEncode()); - - // Update the outer hash with the result of each inner hash - sha256.TransformBlock(requestHash, 0, requestHash.Length, null, 0); - } - // Complete the final hash computation - sha256.TransformFinalBlock(new byte[0], 0, 0); - return new Hash256(sha256.Hash!); + Span requestBuffer = new byte[request.RequestData!.Length + 1]; + request.FlatEncode(requestBuffer); + sha256.ComputeHash(requestBuffer.ToArray()).CopyTo(concatenatedHashes.Slice(currentPosition, 32)); + currentPosition += 32; } + + // Compute sha256 of the concatenated hashes + return new Hash256(sha256.ComputeHash(concatenatedHashes.ToArray())); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs index 4217bec0535..3f2f22bfcef 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs @@ -31,11 +31,7 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] if (block.IsGenesis) return; - block.ExecutionRequests = new ArrayPoolList(Requests.Length); - foreach (var request in Requests) - { - block.ExecutionRequests.Add(request); - } + block.ExecutionRequests = Requests; block.Header.RequestsHash = Requests.CalculateHash(); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs index 5db3bf94e95..c3b7bef351a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs @@ -12,5 +12,5 @@ public class GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 bl public ExecutionRequest[]? ExecutionRequests { get; } = ExecutionRequests; public override string ToString() => - $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}, ExecutionRequests : {ExecutionRequests?.FlatEncode()}}}"; + $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}, ExecutionRequests count : {ExecutionRequests?.Length}}}"; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs index 6a9b458fa31..d403c8c43bb 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Handlers/GetPayloadV4Handler.cs @@ -24,7 +24,7 @@ public class GetPayloadV4Handler( { protected override GetPayloadV4Result GetPayloadResultFromBlock(IBlockProductionContext context) { - return new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!), context.CurrentBestBlock!.ExecutionRequests!.ToArray()) + return new(context.CurrentBestBlock!, context.BlockFees, new BlobsBundleV1(context.CurrentBestBlock!), context.CurrentBestBlock!.ExecutionRequests!) { ShouldOverrideBuilder = censorshipDetector?.GetCensoredBlocks().Contains(new BlockNumberHash(context.CurrentBestBlock!)) ?? false }; From 7a6885b6956571074b39e750d453fcdbb467004c Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 17 Oct 2024 17:17:53 +0530 Subject: [PATCH 510/551] fix requestsHash calculation --- .../PragueTests.cs | 2 +- .../ExecutionRequestProcessorTests.cs | 16 +--- .../ExecutionRequestProcessor.cs | 20 ++--- .../Builders/BlockBuilder.cs | 5 +- src/Nethermind/Nethermind.Core/Block.cs | 2 +- .../ExecutionRequest/ExecutionRequest.cs | 87 +++++++++++-------- .../EngineModuleTests.V4.cs | 14 +-- .../ExecutionRequestsProcessorMock.cs | 27 +++++- .../Data/ExecutionPayload.cs | 2 +- .../Data/ExecutionPayloadV3.cs | 2 +- .../Data/GetPayloadV4Result.cs | 4 +- .../Data/IExecutionPayloadParams.cs | 12 +-- .../EngineRpcModule.Prague.cs | 2 +- .../IEngineRpcModule.Prague.cs | 2 +- 14 files changed, 110 insertions(+), 87 deletions(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs index c6dec949795..566cab07626 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -11,7 +11,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -[Explicit("These tests are not ready yet")] +// [Explicit("These tests are not ready yet")] public class PragueTests : BlockchainTestBase { [TestCaseSource(nameof(LoadTests))] diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index 4e4bd95e4e9..5fbeb30efb7 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -113,20 +113,10 @@ public void ShouldProcessExecutionRequests() ).WithAddress(DepositContractAddress).TestObject ).TestObject ]; - - executionRequestsProcessor.ProcessExecutionRequests(block, _stateProvider, txReceipts, spec); - foreach (var (processedRequest, expectedRequest) in block.ExecutionRequests.Zip([ - .. executionDepositRequests, - .. executionWithdrawalRequests, - .. executionConsolidationRequests - ])) - { - Assert.That(processedRequest.RequestType, Is.EqualTo(expectedRequest.RequestType)); - Assert.That(processedRequest.RequestData.ToArray(), Is.EqualTo(expectedRequest.RequestData.ToArray())); - } - - Assert.That(block.Header.RequestsHash, Is.EqualTo(block.ExecutionRequests.ToArray().CalculateHash())); + Assert.That(block.Header.RequestsHash, Is.EqualTo( + ExecutionRequestExtensions.CalculateHash(executionDepositRequests, executionWithdrawalRequests, executionConsolidationRequests) + )); } } diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index 0d46820272e..d98fbc59052 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -23,9 +23,6 @@ public class ExecutionRequestsProcessor(ITransactionProcessor transactionProcess { private readonly AbiSignature _depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); private readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; - private const int depositRequestsBytesSize = 48 + 32 + 8 + 96 + 8; - private const int withdrawalRequestsBytesSize = 20 + 48 + 8; - private const int consolidationRequestsBytesSize = 20 + 48 + 48; private const long GasLimit = 30_000_000L; @@ -54,7 +51,7 @@ public IEnumerable ProcessDeposits(TxReceipt[] receipts, IRele private ExecutionRequest DecodeDepositRequest(LogEntry log) { object[] result = _abiEncoder.Decode(AbiEncodingStyle.None, _depositEventABI, log.Data); - byte[] flattenedResult = new byte[depositRequestsBytesSize]; + byte[] flattenedResult = new byte[ExecutionRequestExtensions.depositRequestsBytesSize]; int offset = 0; foreach (var item in result) @@ -71,9 +68,9 @@ private ExecutionRequest DecodeDepositRequest(LogEntry log) } // make sure the flattened result is of the correct size - if (offset != depositRequestsBytesSize) + if (offset != ExecutionRequestExtensions.depositRequestsBytesSize) { - throw new InvalidOperationException($"Decoded ABI result has incorrect size. Expected {depositRequestsBytesSize} bytes, got {offset} bytes."); + throw new InvalidOperationException($"Decoded ABI result has incorrect size. Expected {ExecutionRequestExtensions.depositRequestsBytesSize} bytes, got {offset} bytes."); } return new ExecutionRequest @@ -88,7 +85,7 @@ private IEnumerable ReadRequests(Block block, IWorldState stat { bool isWithdrawalRequests = contractAddress == spec.Eip7002ContractAddress; - int requestBytesSize = isWithdrawalRequests ? withdrawalRequestsBytesSize : consolidationRequestsBytesSize; + int requestBytesSize = isWithdrawalRequests ? ExecutionRequestExtensions.withdrawalRequestsBytesSize : ExecutionRequestExtensions.consolidationRequestsBytesSize; if (!(isWithdrawalRequests ? spec.WithdrawalRequestsEnabled : spec.ConsolidationRequestsEnabled)) yield break; @@ -132,10 +129,11 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] { if (!spec.RequestsEnabled) return; - IEnumerable requests = ProcessDeposits(receipts, spec) - .Concat(ReadRequests(block, state, spec, spec.Eip7002ContractAddress)) - .Concat(ReadRequests(block, state, spec, spec.Eip7251ContractAddress)); - block.Header.RequestsHash = requests.CalculateHash(); + IEnumerable depositRequests = ProcessDeposits(receipts, spec); + IEnumerable withdrawalRequests = ReadRequests(block, state, spec, spec.Eip7002ContractAddress); + IEnumerable consolidationRequests = ReadRequests(block, state, spec, spec.Eip7251ContractAddress); + block.Header.RequestsHash = ExecutionRequestExtensions.CalculateHash(depositRequests,withdrawalRequests , consolidationRequests); + using ArrayPoolList requests = ExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); block.ExecutionRequests = requests.ToArray(); } } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index e66e47f283c..610d54f6b1f 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using DotNetty.Common.Utilities; using Nethermind.Core.Collections; using Nethermind.Core.Crypto; using Nethermind.Core.ExecutionRequest; @@ -251,8 +252,8 @@ public BlockBuilder WithReceiptsRoot(Hash256 keccak) public BlockBuilder WithEmptyRequestsHash() { - TestObjectInternal.Header.RequestsHash = Array.Empty().CalculateHash(); - TestObjectInternal.ExecutionRequests = Array.Empty(); + TestObjectInternal.Header.RequestsHash = ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }); + TestObjectInternal.ExecutionRequests = new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }; return this; } diff --git a/src/Nethermind/Nethermind.Core/Block.cs b/src/Nethermind/Nethermind.Core/Block.cs index 57ebf3b5726..65b69d1b58f 100644 --- a/src/Nethermind/Nethermind.Core/Block.cs +++ b/src/Nethermind/Nethermind.Core/Block.cs @@ -118,7 +118,7 @@ public Transaction[] Transactions public Hash256? RequestsHash => Header.RequestsHash; // do not add setter here [JsonIgnore] - public ExecutionRequest.ExecutionRequest[]? ExecutionRequests { get; set; } + public byte[][]? ExecutionRequests { get; set; } [JsonIgnore] public ArrayPoolList? AccountChanges { get; set; } diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index 7e81a8abb35..e55c5f645f0 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -3,9 +3,11 @@ using System; +using System.Buffers; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; +using Nethermind.Core.Collections; using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; @@ -23,15 +25,6 @@ public class ExecutionRequest public byte RequestType { get; set; } public byte[]? RequestData { get; set; } - public void FlatEncode(Span buffer) - { - if (buffer.Length < RequestData!.Length + 1) - throw new ArgumentException("Buffer too small"); - - buffer[0] = RequestType; - RequestData.CopyTo(buffer.Slice(1)); - } - public override string ToString() => ToString(string.Empty); public string ToString(string indentation) => @$"{indentation}{nameof(ExecutionRequest)} @@ -41,6 +34,10 @@ public string ToString(string indentation) => @$"{indentation}{nameof(ExecutionR public static class ExecutionRequestExtensions { + public const int depositRequestsBytesSize = 48 + 32 + 8 + 96 + 8; + public const int withdrawalRequestsBytesSize = 20 + 48 + 8; + public const int consolidationRequestsBytesSize = 20 + 48 + 48; + public static int GetRequestsByteSize(this IEnumerable requests) { int size = 0; @@ -51,28 +48,7 @@ public static int GetRequestsByteSize(this IEnumerable request return size; } - public static void FlatEncode(this ExecutionRequest[] requests, Span buffer) - { - int currentPosition = 0; - - foreach (ExecutionRequest request in requests) - { - Span internalBuffer = new byte[request.RequestData!.Length + 1]; - request.FlatEncode(internalBuffer); - - // Ensure the buffer has enough space to accommodate the new data - if (currentPosition + internalBuffer.Length > buffer.Length) - { - throw new InvalidOperationException("Buffer is not large enough to hold all data of requests"); - } - - // Copy the internalBuffer to the buffer at the current position - internalBuffer.CopyTo(buffer.Slice(currentPosition, internalBuffer.Length)); - currentPosition += internalBuffer.Length; - } - } - - public static void FlatEncodeWithoutType(this ExecutionRequest[] requests, Span buffer) + public static void FlatEncodeWithoutType(this IEnumerable requests, Span buffer) { int currentPosition = 0; @@ -90,19 +66,49 @@ public static void FlatEncodeWithoutType(this ExecutionRequest[] requests, Span< } } - public static Hash256 CalculateHash(this IEnumerable requests) + public static ArrayPoolList GetFlatEncodedRequests( + IEnumerable depositRequests, + IEnumerable withdrawalRequests, + IEnumerable consolidationRequests + ){ + ArrayPoolList requests = new(3); + Span depositBuffer = new byte[depositRequests.Count()* depositRequestsBytesSize]; + Span withdrawalBuffer = new byte[withdrawalRequests.Count()* withdrawalRequestsBytesSize]; + Span consolidationBuffer = new byte[consolidationRequests.Count()* consolidationRequestsBytesSize]; + + depositRequests.FlatEncodeWithoutType(depositBuffer); + withdrawalRequests.FlatEncodeWithoutType(withdrawalBuffer); + consolidationRequests.FlatEncodeWithoutType(consolidationBuffer); + + requests.AddRange(depositBuffer.ToArray()); + requests.AddRange(withdrawalBuffer.ToArray()); + requests.AddRange(consolidationBuffer.ToArray()); + return requests; + } + + public static Hash256 CalculateHashFromFlatEncodedRequests(byte[][]? flatEncodedRequests) { + // make sure that length is exactly 3 + if (flatEncodedRequests is null || flatEncodedRequests.Length != 3) + { + throw new ArgumentException("Flat encoded requests must be an array of 3 elements"); + } + using (SHA256 sha256 = SHA256.Create()) { - Span concatenatedHashes = new byte[32 * requests.Count()]; + Span concatenatedHashes = new byte[32 * flatEncodedRequests!.Length]; int currentPosition = 0; + byte type = 0; // Compute sha256 for each request and concatenate them - foreach (ExecutionRequest request in requests) + foreach (byte[] request in flatEncodedRequests) { - Span requestBuffer = new byte[request.RequestData!.Length + 1]; - request.FlatEncode(requestBuffer); + if(type > 2) break; + Span requestBuffer = new byte[request.Length + 1]; + requestBuffer[0] = type; + request.CopyTo(requestBuffer.Slice(1)); sha256.ComputeHash(requestBuffer.ToArray()).CopyTo(concatenatedHashes.Slice(currentPosition, 32)); currentPosition += 32; + type++; } // Compute sha256 of the concatenated hashes @@ -110,6 +116,15 @@ public static Hash256 CalculateHash(this IEnumerable requests) } } + public static Hash256 CalculateHash( + IEnumerable depositRequests, + IEnumerable withdrawalRequests, + IEnumerable consolidationRequests + ){ + using ArrayPoolList requests = GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); + return CalculateHashFromFlatEncodedRequests(requests.ToArray()); + } + public static bool IsSortedByType(this ExecutionRequest[] requests) { for (int i = 1; i < requests.Length; i++) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 9d37c53446c..ba7ad560e52 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -25,10 +25,10 @@ namespace Nethermind.Merge.Plugin.Test; public partial class EngineModuleTests { [TestCase( - "0x9233c931ff3c17ae124b9aa2ca8db1c641a2dd87fa2d7e00030b274bcc33f928", - "0xe97fdbfa2fcf60073d9579d87b127cdbeffbe6c7387b9e1e836eb7f8fb2d9548", + "0xd7e58364f16b4a329b959b166f9c32323cb135669335db5dadd0344568f8dc9a", + "0xfafb92e8ece12d5fcfa867df9ae6865c5bd8aaf0b277c244552bfe869f61fb26", "0xa272b2f949e4a0e411c9b45542bd5d0ef3c311b5f26c4ed6b7a8d4f605a91154", - "0x2fc07c25edadc149")] + "0x774c6aff527bbc68")] public virtual async Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) { @@ -109,7 +109,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid Array.Empty(), Array.Empty(), withdrawals); - GetPayloadV4Result expectedPayload = new(block, UInt256.Zero, new BlobsBundleV1(block), ExecutionRequests: []); + GetPayloadV4Result expectedPayload = new(block, UInt256.Zero, new BlobsBundleV1(block), ExecutionRequests: new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }); response = await RpcTest.TestSerializedRequest(rpc, "engine_getPayloadV4", expectedPayloadId); successResponse = chain.JsonSerializer.Deserialize(response); @@ -122,7 +122,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid })); response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV4", - chain.JsonSerializer.Serialize(ExecutionPayloadV3.Create(block)), "[]", Keccak.Zero.ToString(true), "[]"); + chain.JsonSerializer.Serialize(ExecutionPayloadV3.Create(block)), "[]", Keccak.Zero.ToString(true), "[[],[],[]]"); successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); @@ -248,7 +248,7 @@ private async Task> ProduceBranchV4(IEngineRpcMo ExecutionPayloadV3? getPayloadResult = await BuildAndGetPayloadOnBranchV4(rpc, chain, parentHeader, parentBlock.Timestamp + 12, random ?? TestItem.KeccakA, Address.Zero); - PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero, executionRequests: withRequests ? ExecutionRequestsProcessorMock.Requests : [])).Data; + PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero, executionRequests: withRequests ? ExecutionRequestsProcessorMock.Requests : new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() })).Data; payloadStatusResponse.Status.Should().Be(PayloadStatus.Valid); if (setHead) { @@ -285,7 +285,7 @@ private async Task BuildAndGetPayloadOnBranchV4( } - private static IEnumerable> GetPayloadRequestsTestCases() + private static IEnumerable> GetPayloadRequestsTestCases() { yield return ExecutionRequestsProcessorMock.Requests; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs index 3f2f22bfcef..f94d14973a8 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Linq; +using DotNetty.Common.Utilities; using Nethermind.Consensus.ExecutionRequests; using Nethermind.Core; using Nethermind.Core.Collections; @@ -13,25 +15,42 @@ namespace Nethermind.Merge.Plugin.Test; public class ExecutionRequestsProcessorMock : IExecutionRequestsProcessor { - public static ExecutionRequest[] Requests = + public static ExecutionRequest[] depositRequests = [ TestItem.ExecutionRequestA, TestItem.ExecutionRequestB, - TestItem.ExecutionRequestC, + TestItem.ExecutionRequestC + ]; + + public static ExecutionRequest[] withdrawalRequests = + [ TestItem.ExecutionRequestD, TestItem.ExecutionRequestE, - TestItem.ExecutionRequestF, + TestItem.ExecutionRequestF + ]; + + public static ExecutionRequest[] consolidationsRequests = + [ TestItem.ExecutionRequestG, TestItem.ExecutionRequestH, TestItem.ExecutionRequestI ]; + public static byte[][] Requests + { + get + { + using ArrayPoolList list = ExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationsRequests); + return list.ToArray(); + } + } + public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) { if (block.IsGenesis) return; block.ExecutionRequests = Requests; - block.Header.RequestsHash = Requests.CalculateHash(); + block.Header.RequestsHash = ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(Requests); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs index 3284c643b9e..6d99a9acf4c 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayload.cs @@ -81,7 +81,7 @@ public byte[][] Transactions /// EIP-7685. /// [JsonIgnore] - public virtual ExecutionRequest[]? ExecutionRequests { get; set; } + public virtual byte[][]? ExecutionRequests { get; set; } /// diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs index 609309b2e1b..50efc558cff 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs @@ -37,7 +37,7 @@ public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? block.Header.ParentBeaconBlockRoot = ParentBeaconBlockRoot; block.Header.BlobGasUsed = BlobGasUsed; block.Header.ExcessBlobGas = ExcessBlobGas; - block.Header.RequestsHash = ExecutionRequests != null ? ExecutionRequests.CalculateHash() : null; + block.Header.RequestsHash = ExecutionRequests != null ? ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(ExecutionRequests) : null; return true; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs index c3b7bef351a..774b4f70665 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs @@ -7,9 +7,9 @@ namespace Nethermind.Merge.Plugin.Data; -public class GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle, ExecutionRequest[] ExecutionRequests) : GetPayloadV3Result(block, blockFees, blobsBundle) +public class GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle, byte[][] ExecutionRequests) : GetPayloadV3Result(block, blockFees, blobsBundle) { - public ExecutionRequest[]? ExecutionRequests { get; } = ExecutionRequests; + public byte[][]? ExecutionRequests { get; } = ExecutionRequests; public override string ToString() => $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}, ExecutionRequests count : {ExecutionRequests?.Length}}}"; diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs index 58cae2c7e72..3bf56897dba 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs @@ -15,7 +15,7 @@ namespace Nethermind.Merge.Plugin.Data; public interface IExecutionPayloadParams { ExecutionPayload ExecutionPayload { get; } - ExecutionRequest[]? ExecutionRequests { get; set; } + byte[][]? ExecutionRequests { get; set; } ValidationResult ValidateParams(IReleaseSpec spec, int version, out string? error); } @@ -25,7 +25,7 @@ public class ExecutionPayloadParams( TVersionedExecutionPayload executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, - ExecutionRequest[]? executionRequests = null) + byte[][]? executionRequests = null) : IExecutionPayloadParams where TVersionedExecutionPayload : ExecutionPayload { public TVersionedExecutionPayload ExecutionPayload => executionPayload; @@ -34,7 +34,7 @@ public class ExecutionPayloadParams( /// Gets or sets as defined in /// EIP-7685. /// - public ExecutionRequest[]? ExecutionRequests { get; set; } = executionRequests; + public byte[][]? ExecutionRequests { get; set; } = executionRequests; ExecutionPayload IExecutionPayloadParams.ExecutionPayload => ExecutionPayload; @@ -48,10 +48,10 @@ public ValidationResult ValidateParams(IReleaseSpec spec, int version, out strin return ValidationResult.Fail; } - // Ensures that the execution requests types are in increasing order - if (!ExecutionRequests.IsSortedByType()) + // Ensures that the execution requests has exactly three items + if (ExecutionRequests.Length != 3) { - error = "Execution requests are not in progressive order by type"; + error = "Execution requests must have exactly three items"; return ValidationResult.Fail; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs index 9bc57e4ead1..d554751d993 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/EngineRpcModule.Prague.cs @@ -19,7 +19,7 @@ public partial class EngineRpcModule : IEngineRpcModule /// Method parameter list is extended with parameter. /// EIP-7685. /// - public Task> engine_newPayloadV4(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, ExecutionRequest[]? executionRequests) + public Task> engine_newPayloadV4(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, byte[][]? executionRequests) { return NewPayload(new ExecutionPayloadParams(executionPayload, blobVersionedHashes, parentBeaconBlockRoot, executionRequests), EngineApiVersions.Prague); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs index 1c119acb908..d5b38eac8fe 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/IEngineRpcModule.Prague.cs @@ -18,7 +18,7 @@ public partial interface IEngineRpcModule : IRpcModule Description = "Verifies the payload according to the execution environment rules and returns the verification status and hash of the last valid block.", IsSharable = true, IsImplemented = true)] - Task> engine_newPayloadV4(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, ExecutionRequest[]? executionRequests); + Task> engine_newPayloadV4(ExecutionPayloadV3 executionPayload, byte[]?[] blobVersionedHashes, Hash256? parentBeaconBlockRoot, byte[][]? executionRequests); [JsonRpcMethod( Description = "Returns the most recent version of an execution payload and fees with respect to the transaction set contained by the mempool.", From 59a2be2d184847f82c1e22a940e4fe946e49071c Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 17 Oct 2024 17:47:30 +0530 Subject: [PATCH 511/551] fix test errors --- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index ba7ad560e52..bc379c62f57 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -122,7 +122,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid })); response = await RpcTest.TestSerializedRequest(rpc, "engine_newPayloadV4", - chain.JsonSerializer.Serialize(ExecutionPayloadV3.Create(block)), "[]", Keccak.Zero.ToString(true), "[[],[],[]]"); + chain.JsonSerializer.Serialize(ExecutionPayloadV3.Create(block)), "[]", Keccak.Zero.ToString(true), "[\"0x\",\"0x\",\"0x\"]"); successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); From 15fe2415c48bda4adb4e6c73c8891d33b8e012ed Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 17 Oct 2024 17:47:59 +0530 Subject: [PATCH 512/551] explicit prague tests --- src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs index 566cab07626..c6dec949795 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -11,7 +11,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -// [Explicit("These tests are not ready yet")] +[Explicit("These tests are not ready yet")] public class PragueTests : BlockchainTestBase { [TestCaseSource(nameof(LoadTests))] From 984bc07a57b36c26dcfd181e9dabd04b7dc9b41d Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 17 Oct 2024 17:48:52 +0530 Subject: [PATCH 513/551] format files --- .../ExecutionRequests/ExecutionRequestProcessor.cs | 2 +- .../ExecutionRequest/ExecutionRequest.cs | 14 ++++++++------ .../EngineModuleTests.V4.cs | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index d98fbc59052..5ced4e05f8e 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -132,7 +132,7 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] IEnumerable depositRequests = ProcessDeposits(receipts, spec); IEnumerable withdrawalRequests = ReadRequests(block, state, spec, spec.Eip7002ContractAddress); IEnumerable consolidationRequests = ReadRequests(block, state, spec, spec.Eip7251ContractAddress); - block.Header.RequestsHash = ExecutionRequestExtensions.CalculateHash(depositRequests,withdrawalRequests , consolidationRequests); + block.Header.RequestsHash = ExecutionRequestExtensions.CalculateHash(depositRequests, withdrawalRequests, consolidationRequests); using ArrayPoolList requests = ExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); block.ExecutionRequests = requests.ToArray(); } diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index e55c5f645f0..b54616fbc8c 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -70,11 +70,12 @@ public static ArrayPoolList GetFlatEncodedRequests( IEnumerable depositRequests, IEnumerable withdrawalRequests, IEnumerable consolidationRequests - ){ + ) + { ArrayPoolList requests = new(3); - Span depositBuffer = new byte[depositRequests.Count()* depositRequestsBytesSize]; - Span withdrawalBuffer = new byte[withdrawalRequests.Count()* withdrawalRequestsBytesSize]; - Span consolidationBuffer = new byte[consolidationRequests.Count()* consolidationRequestsBytesSize]; + Span depositBuffer = new byte[depositRequests.Count() * depositRequestsBytesSize]; + Span withdrawalBuffer = new byte[withdrawalRequests.Count() * withdrawalRequestsBytesSize]; + Span consolidationBuffer = new byte[consolidationRequests.Count() * consolidationRequestsBytesSize]; depositRequests.FlatEncodeWithoutType(depositBuffer); withdrawalRequests.FlatEncodeWithoutType(withdrawalBuffer); @@ -102,7 +103,7 @@ public static Hash256 CalculateHashFromFlatEncodedRequests(byte[][]? flatEncoded // Compute sha256 for each request and concatenate them foreach (byte[] request in flatEncodedRequests) { - if(type > 2) break; + if (type > 2) break; Span requestBuffer = new byte[request.Length + 1]; requestBuffer[0] = type; request.CopyTo(requestBuffer.Slice(1)); @@ -120,7 +121,8 @@ public static Hash256 CalculateHash( IEnumerable depositRequests, IEnumerable withdrawalRequests, IEnumerable consolidationRequests - ){ + ) + { using ArrayPoolList requests = GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); return CalculateHashFromFlatEncodedRequests(requests.ToArray()); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index bc379c62f57..8e80f08f34b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -248,7 +248,7 @@ private async Task> ProduceBranchV4(IEngineRpcMo ExecutionPayloadV3? getPayloadResult = await BuildAndGetPayloadOnBranchV4(rpc, chain, parentHeader, parentBlock.Timestamp + 12, random ?? TestItem.KeccakA, Address.Zero); - PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero, executionRequests: withRequests ? ExecutionRequestsProcessorMock.Requests : new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() })).Data; + PayloadStatusV1 payloadStatusResponse = (await rpc.engine_newPayloadV4(getPayloadResult, Array.Empty(), Keccak.Zero, executionRequests: withRequests ? ExecutionRequestsProcessorMock.Requests : new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() })).Data; payloadStatusResponse.Status.Should().Be(PayloadStatus.Valid); if (setHead) { From e854467445b48f0045abe4663563ae93540462c6 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 17 Oct 2024 17:55:44 +0530 Subject: [PATCH 514/551] fix aura tests --- .../AuRaMergeEngineModuleTests.cs | 6 +++--- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs index 74ec85cb3dc..9f6408ade0c 100644 --- a/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs +++ b/src/Nethermind/Nethermind.Merge.AuRa.Test/AuRaMergeEngineModuleTests.cs @@ -61,10 +61,10 @@ int ErrorCode => base.forkchoiceUpdatedV2_should_validate_withdrawals(input); [TestCase( - "0x1270af16dfea9b40aa9381529cb2629008fea35386041f52c07034ea8c038a05", - "0xea3bdca86662fa8b5399f2c3ff494ced747f07834740ead723ebe023852e9ea1", + "0xd25128557a58fe7bb6346d779cfc86a1f5bd9bff4786a118097aebdf3128f46d", + "0xcbf0d15de352e744aba609aca74846ede5fc3ffd00ca506914b498b00470cbf8", "0xd75d320c3a98a02ec7fe2abdcb1769bd063fec04d73f1735810f365ac12bc4ba", - "0x7389011914b1ca84")] + "0xc9763e9904d3fe5b")] public override Task Should_process_block_as_expected_V4(string latestValidHash, string blockHash, string stateRoot, string payloadId) => base.Should_process_block_as_expected_V4(latestValidHash, blockHash, stateRoot, payloadId); diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 8e80f08f34b..3384b7f94be 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -115,7 +115,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); - response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse + response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse { Id = successResponse.Id, Result = expectedPayload From 215df80bfe33801465693c7cf408a7e1a31a31f5 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 17 Oct 2024 17:57:36 +0530 Subject: [PATCH 515/551] format files --- .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 3384b7f94be..8e80f08f34b 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -115,7 +115,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid successResponse = chain.JsonSerializer.Deserialize(response); successResponse.Should().NotBeNull(); - response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse + response.Should().Be(chain.JsonSerializer.Serialize(new JsonRpcSuccessResponse { Id = successResponse.Id, Result = expectedPayload From 0c3dc33299a90715f55f40846fd26e09178a0445 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 17 Oct 2024 16:31:53 +0200 Subject: [PATCH 516/551] 7702 fix --- .../TransactionProcessing/TransactionProcessor.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index c2311e9cd83..8f943fc58d0 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -243,7 +243,9 @@ bool IsValidForExecution( ISet
accessedAddresses, [NotNullWhen(false)] out string? error) { - if (authorizationTuple.Authority is null) + UInt256 s = new (authorizationTuple.AuthoritySignature.SAsSpan, isBigEndian: true); + if (authorizationTuple.Authority is null + || s > Secp256K1Curve.HalfN) { error = "Bad signature."; return false; From 5eacd188339a41dc287aea96c77621b3fbb0d8be Mon Sep 17 00:00:00 2001 From: MarekM25 Date: Thu, 17 Oct 2024 17:05:24 +0200 Subject: [PATCH 517/551] update addresses --- src/Nethermind/Nethermind.Core/Eip7002Constants.cs | 2 +- src/Nethermind/Nethermind.Core/Eip7251Constants.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/Eip7002Constants.cs b/src/Nethermind/Nethermind.Core/Eip7002Constants.cs index b7f1ec1e36f..fd826e87683 100644 --- a/src/Nethermind/Nethermind.Core/Eip7002Constants.cs +++ b/src/Nethermind/Nethermind.Core/Eip7002Constants.cs @@ -5,5 +5,5 @@ namespace Nethermind.Core; public static class Eip7002Constants { - public static readonly Address WithdrawalRequestPredeployAddress = new("0x00A3ca265EBcb825B45F985A16CEFB49958cE017"); + public static readonly Address WithdrawalRequestPredeployAddress = new("0x09Fc772D0857550724b07B850a4323f39112aAaA"); } diff --git a/src/Nethermind/Nethermind.Core/Eip7251Constants.cs b/src/Nethermind/Nethermind.Core/Eip7251Constants.cs index 4fc30bd2601..7ae7e5eece1 100644 --- a/src/Nethermind/Nethermind.Core/Eip7251Constants.cs +++ b/src/Nethermind/Nethermind.Core/Eip7251Constants.cs @@ -5,5 +5,5 @@ namespace Nethermind.Core; public static class Eip7251Constants { - public static readonly Address ConsolidationRequestPredeployAddress = new("0x00b42dbF2194e931E80326D950320f7d9Dbeac02"); + public static readonly Address ConsolidationRequestPredeployAddress = new("0x01aBEa29659e5e97C95107F20bb753cD3e09bBBb"); } From d96af86789461a4bae7426412d2da271254ffc7c Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 17 Oct 2024 21:35:08 +0530 Subject: [PATCH 518/551] update executionRequestProcessor --- .../ExecutionRequests/ExecutionRequestProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index 5ced4e05f8e..f78a55c17cd 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -132,8 +132,8 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] IEnumerable depositRequests = ProcessDeposits(receipts, spec); IEnumerable withdrawalRequests = ReadRequests(block, state, spec, spec.Eip7002ContractAddress); IEnumerable consolidationRequests = ReadRequests(block, state, spec, spec.Eip7251ContractAddress); - block.Header.RequestsHash = ExecutionRequestExtensions.CalculateHash(depositRequests, withdrawalRequests, consolidationRequests); using ArrayPoolList requests = ExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); + block.Header.RequestsHash = ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(requests.ToArray()); block.ExecutionRequests = requests.ToArray(); } } From 70a5cce57709154ef9e691d14e5573872538c576 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 17 Oct 2024 21:35:59 +0530 Subject: [PATCH 519/551] format files --- .../Encoding/AuthorizationTupleDecoderTests.cs | 10 +++++----- .../TransactionProcessing/TransactionProcessor.cs | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs index 2910c1f8d5e..b6181919823 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/AuthorizationTupleDecoderTests.cs @@ -59,12 +59,12 @@ public static IEnumerable WrongSizeFieldsEncodedCases() { yield return TupleRlpStream( //Wrong chain size - Enumerable.Range(0, 9).Select(i=> (byte) 0xFF).ToArray(), + Enumerable.Range(0, 9).Select(i => (byte)0xFF).ToArray(), Address.Zero.Bytes, - Enumerable.Range(0, 8).Select(i=> (byte) 0xFF).ToArray(), - Enumerable.Range(0, 1).Select(i=> (byte) 0xFF).ToArray(), - Enumerable.Range(0, 32).Select(i=> (byte) 0xFF).ToArray(), - Enumerable.Range(0, 32).Select(i=> (byte) 0xFF).ToArray() + Enumerable.Range(0, 8).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 1).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray(), + Enumerable.Range(0, 32).Select(i => (byte)0xFF).ToArray() ); yield return TupleRlpStream( diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index c946e495808..aa155d3b22d 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -251,7 +251,7 @@ bool IsValidForExecution( ISet
accessedAddresses, [NotNullWhen(false)] out string? error) { - UInt256 s = new (authorizationTuple.AuthoritySignature.SAsSpan, isBigEndian: true); + UInt256 s = new(authorizationTuple.AuthoritySignature.SAsSpan, isBigEndian: true); if (authorizationTuple.Authority is null || s > Secp256K1Curve.HalfN) { From 18b298ca95e3f2e44f4cd8525384cbb4a653a488 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Fri, 18 Oct 2024 00:54:56 +0530 Subject: [PATCH 520/551] fix hash calc --- .../PragueTests.cs | 2 +- .../ExecutionRequest/ExecutionRequest.cs | 24 ++++++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs index c6dec949795..566cab07626 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -11,7 +11,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -[Explicit("These tests are not ready yet")] +// [Explicit("These tests are not ready yet")] public class PragueTests : BlockchainTestBase { [TestCaseSource(nameof(LoadTests))] diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index b54616fbc8c..12df7990a83 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -73,13 +73,25 @@ IEnumerable consolidationRequests ) { ArrayPoolList requests = new(3); - Span depositBuffer = new byte[depositRequests.Count() * depositRequestsBytesSize]; - Span withdrawalBuffer = new byte[withdrawalRequests.Count() * withdrawalRequestsBytesSize]; - Span consolidationBuffer = new byte[consolidationRequests.Count() * consolidationRequestsBytesSize]; + using ArrayPoolList depositBuffer = new (depositRequestsBytesSize); + using ArrayPoolList withdrawalBuffer = new (withdrawalRequestsBytesSize); + using ArrayPoolList consolidationBuffer = new (consolidationRequestsBytesSize); - depositRequests.FlatEncodeWithoutType(depositBuffer); - withdrawalRequests.FlatEncodeWithoutType(withdrawalBuffer); - consolidationRequests.FlatEncodeWithoutType(consolidationBuffer); + + foreach (ExecutionRequest request in depositRequests) + { + depositBuffer.AddRange(request.RequestData!); + } + + foreach (ExecutionRequest request in withdrawalRequests) + { + withdrawalBuffer.AddRange(request.RequestData!); + } + + foreach (ExecutionRequest request in consolidationRequests) + { + consolidationBuffer.AddRange(request.RequestData!); + } requests.AddRange(depositBuffer.ToArray()); requests.AddRange(withdrawalBuffer.ToArray()); From 430f1b31e626f3ed3d19ea9a97b346a172417b31 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Fri, 18 Oct 2024 00:56:01 +0530 Subject: [PATCH 521/551] remove explicit --- src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs index 566cab07626..c6dec949795 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -11,7 +11,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -// [Explicit("These tests are not ready yet")] +[Explicit("These tests are not ready yet")] public class PragueTests : BlockchainTestBase { [TestCaseSource(nameof(LoadTests))] From e3974bf2ff8247da38267d1bd8a7c91d5109bc70 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 17 Oct 2024 21:42:16 +0200 Subject: [PATCH 522/551] fixes for 7702 --- .../AuthorizationListJson.cs | 10 +++--- .../Ethereum.Test.Base/JsonToEthereumTest.cs | 31 +++++++++++++++---- .../TransactionProcessor.cs | 13 ++++++-- .../Eip7702/AuthorizationTupleDecoder.cs | 5 +-- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs index 4abb947ac9b..bffb5d96bbc 100644 --- a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs +++ b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs @@ -7,11 +7,11 @@ namespace Ethereum.Test.Base; public class AuthorizationListJson { - public ulong ChainId { get; set; } + public UInt256 ChainId { get; set; } public Address Address { get; set; } - public ulong Nonce { get; set; } - public byte RecoveryId { get; set; } - public UInt256 R { get; set; } - public UInt256 S { get; set; } + public UInt256 Nonce { get; set; } + public ulong V { get; set; } + public byte[] R { get; set; } + public byte[] S { get; set; } public Address Signer { get; set; } } diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index 7219b488a05..f33e7e49198 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -162,13 +162,32 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t { transaction.AuthorizationList = transactionJson.AuthorizationList - .Select(i => new AuthorizationTuple( - i.ChainId, + .Select(i => + { + UInt256 r = 0; + UInt256 s = 0; + ulong chainId = 0; + ulong nonce = 0; + try + { + r = new UInt256(i.R); + s = new UInt256(i.S); + chainId = (ulong)i.ChainId; + nonce = (ulong)i.Nonce; + } + catch (Exception) + { + + } + return new AuthorizationTuple( + chainId, i.Address, - i.Nonce, - i.RecoveryId, - i.R, - i.S)).ToArray(); + nonce, + (byte)(i.V - Signature.VOffset), + r, + s); + } + ).ToArray(); if (transaction.AuthorizationList.Any()) { transaction.Type = TxType.SetCode; diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index aa155d3b22d..40c0cc8830f 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -253,17 +253,26 @@ bool IsValidForExecution( { UInt256 s = new(authorizationTuple.AuthoritySignature.SAsSpan, isBigEndian: true); if (authorizationTuple.Authority is null - || s > Secp256K1Curve.HalfN) + || s > Secp256K1Curve.HalfN + || (authorizationTuple.AuthoritySignature.V > 28 && authorizationTuple.AuthoritySignature.V < 37)) { error = "Bad signature."; return false; } - if (authorizationTuple.ChainId != 0 && SpecProvider.ChainId != authorizationTuple.ChainId) + if ((authorizationTuple.ChainId != 0 + && SpecProvider.ChainId != authorizationTuple.ChainId) + ) { error = $"Chain id ({authorizationTuple.ChainId}) does not match."; return false; } + if (authorizationTuple.AuthoritySignature.ChainId is not null && authorizationTuple.AuthoritySignature.ChainId != authorizationTuple.ChainId) + { + error = "Bad signature."; + return false; + } + if (authorizationTuple.Nonce == ulong.MaxValue) { error = $"Nonce ({authorizationTuple.Nonce}) must be less than 2**64 - 1."; diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 5d9a2395266..dc69da2c04e 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -3,6 +3,7 @@ using DotNetty.Buffers; using Nethermind.Core; +using Nethermind.Core.Crypto; using Nethermind.Int256; using Nethermind.Serialization.Rlp.Eip2930; using System; @@ -77,7 +78,7 @@ public void Encode(RlpStream stream, AuthorizationTuple item, RlpBehaviors rlpBe stream.Encode(item.ChainId); stream.Encode(item.CodeAddress); stream.Encode(item.Nonce); - stream.Encode(item.AuthoritySignature.RecoveryId); + stream.Encode(item.AuthoritySignature.V - Signature.VOffset); stream.Encode(new UInt256(item.AuthoritySignature.R, true)); stream.Encode(new UInt256(item.AuthoritySignature.S, true)); } @@ -105,7 +106,7 @@ public void EncodeWithoutSignature(RlpStream stream, ulong chainId, Address code private static int GetContentLength(AuthorizationTuple tuple) => GetContentLengthWithoutSig(tuple.ChainId, tuple.CodeAddress, tuple.Nonce) - + Rlp.LengthOf(tuple.AuthoritySignature.RecoveryId) + + Rlp.LengthOf(tuple.AuthoritySignature.V - Signature.VOffset) + Rlp.LengthOf(new UInt256(tuple.AuthoritySignature.R.AsSpan(), true)) + Rlp.LengthOf(new UInt256(tuple.AuthoritySignature.S.AsSpan(), true)); From ca25cc8f521d17bcfc9497e9160ac123b2b09082 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 17 Oct 2024 22:01:57 +0200 Subject: [PATCH 523/551] revert test change --- .../AuthorizationListJson.cs | 8 +++--- .../Ethereum.Test.Base/JsonToEthereumTest.cs | 28 ++++--------------- 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs index bffb5d96bbc..ec6cddb6148 100644 --- a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs +++ b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs @@ -7,11 +7,11 @@ namespace Ethereum.Test.Base; public class AuthorizationListJson { - public UInt256 ChainId { get; set; } + public ulong ChainId { get; set; } public Address Address { get; set; } - public UInt256 Nonce { get; set; } + public ulong Nonce { get; set; } public ulong V { get; set; } - public byte[] R { get; set; } - public byte[] S { get; set; } + public UInt256 R { get; set; } + public UInt256 S { get; set; } public Address Signer { get; set; } } diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index f33e7e49198..87c39c50c00 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -163,31 +163,13 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t transaction.AuthorizationList = transactionJson.AuthorizationList .Select(i => - { - UInt256 r = 0; - UInt256 s = 0; - ulong chainId = 0; - ulong nonce = 0; - try - { - r = new UInt256(i.R); - s = new UInt256(i.S); - chainId = (ulong)i.ChainId; - nonce = (ulong)i.Nonce; - } - catch (Exception) - { - - } - return new AuthorizationTuple( - chainId, + new AuthorizationTuple( + i.ChainId, i.Address, - nonce, + i.Nonce, (byte)(i.V - Signature.VOffset), - r, - s); - } - ).ToArray(); + i.R, + i.S)).ToArray(); if (transaction.AuthorizationList.Any()) { transaction.Type = TxType.SetCode; From a8038c8f90c811bd3272319fa5621096dde3e928 Mon Sep 17 00:00:00 2001 From: Ahmad Bitar Date: Fri, 18 Oct 2024 00:15:02 +0300 Subject: [PATCH 524/551] real fixes for tests + one missing TxValidator.cs fix --- .../LoadPyspecTestsStrategy.cs | 2 +- .../AuthorizationListJson.cs | 8 +-- .../Ethereum.Test.Base/JsonToEthereumTest.cs | 51 ++++++++++++++++--- .../Validators/TxValidator.cs | 9 ---- 4 files changed, 49 insertions(+), 21 deletions(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs index ee879258d11..2428e569c74 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs @@ -20,7 +20,7 @@ public class LoadPyspecTestsStrategy : ITestLoadStrategy public IEnumerable Load(string testsDir, string wildcard = null) { - string testsDirectoryName = Path.Combine(AppContext.BaseDirectory, "PyTests", ArchiveVersion, ArchiveName.Split('.')[0]); + string testsDirectoryName = Path.Combine("E:/", "PyTests", ArchiveVersion, ArchiveName.Split('.')[0]); if (!Directory.Exists(testsDirectoryName)) // Prevent redownloading the fixtures if they already exists with this version and archive name DownloadAndExtract(ArchiveVersion, ArchiveName, testsDirectoryName); bool isStateTest = testsDir.Contains("state_tests", StringComparison.InvariantCultureIgnoreCase); diff --git a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs index ec6cddb6148..728fe1bd52b 100644 --- a/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs +++ b/src/Nethermind/Ethereum.Test.Base/AuthorizationListJson.cs @@ -7,11 +7,11 @@ namespace Ethereum.Test.Base; public class AuthorizationListJson { - public ulong ChainId { get; set; } + public UInt256 ChainId { get; set; } public Address Address { get; set; } - public ulong Nonce { get; set; } + public UInt256 Nonce { get; set; } public ulong V { get; set; } - public UInt256 R { get; set; } - public UInt256 S { get; set; } + public string R { get; set; } + public string S { get; set; } public Address Signer { get; set; } } diff --git a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs index 87c39c50c00..e1bfb68d9e4 100644 --- a/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs +++ b/src/Nethermind/Ethereum.Test.Base/JsonToEthereumTest.cs @@ -163,13 +163,50 @@ public static Transaction Convert(PostStateJson postStateJson, TransactionJson t transaction.AuthorizationList = transactionJson.AuthorizationList .Select(i => - new AuthorizationTuple( - i.ChainId, - i.Address, - i.Nonce, - (byte)(i.V - Signature.VOffset), - i.R, - i.S)).ToArray(); + { + if (i.ChainId > ulong.MaxValue) + { + i.ChainId = 0; + transaction.SenderAddress = Address.Zero; + } + if (i.Nonce > ulong.MaxValue) + { + i.Nonce = 0; + transaction.SenderAddress = Address.Zero; + } + UInt256 s = UInt256.Zero; + if (i.S.Length > 66) + { + i.S = "0x0"; + transaction.SenderAddress = Address.Zero; + } + else + { + s = UInt256.Parse(i.S); + } + UInt256 r = UInt256.Zero; + if (i.R.Length > 66) + { + i.R = "0x0"; + transaction.SenderAddress = Address.Zero; + } + else + { + r = UInt256.Parse(i.R); + } + if (i.V > byte.MaxValue) + { + i.V = 0; + transaction.SenderAddress = Address.Zero; + } + return new AuthorizationTuple( + i.ChainId.u0, + i.Address, + i.Nonce.u0, + (byte)i.V, + r, + s); + }).ToArray(); if (transaction.AuthorizationList.Any()) { transaction.Type = TxType.SetCode; diff --git a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs index 2b8fa5b5940..b5db9fd9eef 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/TxValidator.cs @@ -328,15 +328,6 @@ public ValidationResult IsWellFormed(Transaction transaction, IReleaseSpec relea transaction.AuthorizationList switch { null or { Length: 0 } => TxErrorMessages.MissingAuthorizationList, - var authorizationList when authorizationList.Any(a => !ValidateAuthoritySignature(a.AuthoritySignature)) => - TxErrorMessages.InvalidAuthoritySignature, _ => ValidationResult.Success }; - - private bool ValidateAuthoritySignature(Signature signature) - { - UInt256 sValue = new(signature.SAsSpan, isBigEndian: true); - - return sValue < Secp256K1Curve.HalfNPlusOne; - } } From 1e410a3acea5d1561ceba2656846a0022869e0ef Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 17 Oct 2024 23:21:55 +0200 Subject: [PATCH 525/551] revert load test strategy --- .../Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs index 2428e569c74..ee879258d11 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/LoadPyspecTestsStrategy.cs @@ -20,7 +20,7 @@ public class LoadPyspecTestsStrategy : ITestLoadStrategy public IEnumerable Load(string testsDir, string wildcard = null) { - string testsDirectoryName = Path.Combine("E:/", "PyTests", ArchiveVersion, ArchiveName.Split('.')[0]); + string testsDirectoryName = Path.Combine(AppContext.BaseDirectory, "PyTests", ArchiveVersion, ArchiveName.Split('.')[0]); if (!Directory.Exists(testsDirectoryName)) // Prevent redownloading the fixtures if they already exists with this version and archive name DownloadAndExtract(ArchiveVersion, ArchiveName, testsDirectoryName); bool isStateTest = testsDir.Contains("state_tests", StringComparison.InvariantCultureIgnoreCase); From 5e3def29febd57a1f8df8802f6e8a47395a05083 Mon Sep 17 00:00:00 2001 From: ak88 Date: Thu, 17 Oct 2024 23:27:21 +0200 Subject: [PATCH 526/551] format --- .../Nethermind.Core/ExecutionRequest/ExecutionRequest.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index 12df7990a83..d0dfa0fca4d 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -73,11 +73,11 @@ IEnumerable consolidationRequests ) { ArrayPoolList requests = new(3); - using ArrayPoolList depositBuffer = new (depositRequestsBytesSize); - using ArrayPoolList withdrawalBuffer = new (withdrawalRequestsBytesSize); - using ArrayPoolList consolidationBuffer = new (consolidationRequestsBytesSize); + using ArrayPoolList depositBuffer = new(depositRequestsBytesSize); + using ArrayPoolList withdrawalBuffer = new(withdrawalRequestsBytesSize); + using ArrayPoolList consolidationBuffer = new(consolidationRequestsBytesSize); + - foreach (ExecutionRequest request in depositRequests) { depositBuffer.AddRange(request.RequestData!); From c3827bc1f2fdaa175751a0f5237187e64a196f15 Mon Sep 17 00:00:00 2001 From: ak88 Date: Fri, 18 Oct 2024 00:27:02 +0200 Subject: [PATCH 527/551] fix test --- .../Validators/TxValidatorTests.cs | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 37d27d3a37d..96972893b1b 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -600,29 +600,6 @@ public void IsWellFormed_NullAuthorizationList_ReturnsFalse() Assert.That(txValidator.IsWellFormed(tx, Prague.Instance).AsBool, Is.False); } - private static object[] BadSignatures = - { - new object[] { 1ul, (UInt256)1, Secp256K1Curve.HalfNPlusOne, false}, - new object[] { 1ul, UInt256.Zero, Secp256K1Curve.HalfN, true }, - new object[] { 0ul, UInt256.Zero, UInt256.Zero, true }, - }; - [TestCaseSource(nameof(BadSignatures))] - public void IsWellFormed_AuthorizationTupleHasBadSignature_ReturnsFalse(ulong yParity, UInt256 r, UInt256 s, bool expected) - { - TransactionBuilder txBuilder = Build.A.Transaction - .WithType(TxType.SetCode) - .WithTo(TestItem.AddressA) - .WithAuthorizationCode(new AuthorizationTuple(0, Address.Zero, 0, new Signature(r, s, yParity + Signature.VOffset))) - .WithMaxFeePerGas(100000) - .WithGasLimit(1000000) - .WithChainId(TestBlockchainIds.ChainId) - .SignedAndResolved(); - - Transaction tx = txBuilder.TestObject; - TxValidator txValidator = new(TestBlockchainIds.ChainId); - - Assert.That(txValidator.IsWellFormed(tx, Prague.Instance).AsBool, Is.EqualTo(expected)); - } private static IEnumerable NonSetCodeTypes() => Enum.GetValues().Where(t => t != TxType.SetCode && t != TxType.DepositTx); From 0f9ce852b631a36e421e895fd47aae01b461cc61 Mon Sep 17 00:00:00 2001 From: ak88 Date: Tue, 22 Oct 2024 13:42:05 +0200 Subject: [PATCH 528/551] refactor sig check --- .../TransactionProcessing/TransactionProcessor.cs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs index 40c0cc8830f..5228b0bd003 100644 --- a/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs +++ b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs @@ -254,11 +254,13 @@ bool IsValidForExecution( UInt256 s = new(authorizationTuple.AuthoritySignature.SAsSpan, isBigEndian: true); if (authorizationTuple.Authority is null || s > Secp256K1Curve.HalfN - || (authorizationTuple.AuthoritySignature.V > 28 && authorizationTuple.AuthoritySignature.V < 37)) + //V minus the offset can only be 1 or 0 since eip-155 does not apply to Setcode signatures + || (authorizationTuple.AuthoritySignature.V - Signature.VOffset > 1)) { error = "Bad signature."; return false; } + if ((authorizationTuple.ChainId != 0 && SpecProvider.ChainId != authorizationTuple.ChainId) ) @@ -267,12 +269,6 @@ bool IsValidForExecution( return false; } - if (authorizationTuple.AuthoritySignature.ChainId is not null && authorizationTuple.AuthoritySignature.ChainId != authorizationTuple.ChainId) - { - error = "Bad signature."; - return false; - } - if (authorizationTuple.Nonce == ulong.MaxValue) { error = $"Nonce ({authorizationTuple.Nonce}) must be less than 2**64 - 1."; From dc660b4f5247db584e3543741670c3ac7f203d50 Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 23 Oct 2024 10:41:30 +0200 Subject: [PATCH 529/551] Update src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs --- .../Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs index 96972893b1b..889950e29cd 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs @@ -6,7 +6,6 @@ using System.Linq; using System.Numerics; using FluentAssertions; -using Microsoft.AspNetCore.Mvc.Routing; using Nethermind.Consensus.Messages; using Nethermind.Consensus.Validators; using Nethermind.Core; From df46327316cd23becb8219626c91079755625621 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 23 Oct 2024 17:00:53 +0530 Subject: [PATCH 530/551] fix chain spec loader --- .../Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index cb83832e663..c4845faddfe 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -12,6 +12,7 @@ using Nethermind.Config; using Nethermind.Core; using Nethermind.Core.Crypto; +using Nethermind.Core.ExecutionRequest; using Nethermind.Int256; using Nethermind.Serialization.Json; using Nethermind.Specs.ChainSpecStyle.Json; @@ -433,7 +434,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec var requestsEnabled = depositsEnabled || withdrawalRequestsEnabled || consolidationRequestsEnabled; if (requestsEnabled) - genesisHeader.RequestsHash = Keccak.EmptyTreeHash; + genesisHeader.RequestsHash = ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }); bool isEip4844Enabled = chainSpecJson.Params.Eip4844TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4844TransitionTimestamp; if (isEip4844Enabled) From cffdcd28bbb182bd3f917581a5dcc2621525b90f Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 24 Oct 2024 00:54:04 +0530 Subject: [PATCH 531/551] address ak comments --- .../PragueTests.cs | 2 +- .../ExecutionRequestProcessor.cs | 46 +++++++++++++------ .../Encoding/HeaderDecoderTests.cs | 2 +- .../ExecutionRequest/ExecutionRequest.cs | 22 ++------- 4 files changed, 39 insertions(+), 33 deletions(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs index c6dec949795..566cab07626 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -11,7 +11,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -[Explicit("These tests are not ready yet")] +// [Explicit("These tests are not ready yet")] public class PragueTests : BlockchainTestBase { [TestCaseSource(nameof(LoadTests))] diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index f78a55c17cd..13dcb7fbc6e 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -19,13 +19,42 @@ namespace Nethermind.Consensus.ExecutionRequests; -public class ExecutionRequestsProcessor(ITransactionProcessor transactionProcessor) : IExecutionRequestsProcessor +public class ExecutionRequestsProcessor : IExecutionRequestsProcessor { private readonly AbiSignature _depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); private readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; private const long GasLimit = 30_000_000L; + private readonly ITransactionProcessor _transactionProcessor; + + private readonly Transaction _withdrawalTransaction = new() + { + Value = UInt256.Zero, + Data = Array.Empty(), + To = Eip7002Constants.WithdrawalRequestPredeployAddress, + SenderAddress = Address.SystemUser, + GasLimit = GasLimit, + GasPrice = UInt256.Zero, + }; + + private readonly Transaction _consolidationTransaction = new() + { + Value = UInt256.Zero, + Data = Array.Empty(), + To = Eip7251Constants.ConsolidationRequestPredeployAddress, + SenderAddress = Address.SystemUser, + GasLimit = GasLimit, + GasPrice = UInt256.Zero, + }; + + public ExecutionRequestsProcessor(ITransactionProcessor transactionProcessor) + { + _transactionProcessor = transactionProcessor; + _withdrawalTransaction.Hash = _withdrawalTransaction.CalculateHash(); + _consolidationTransaction.Hash = _consolidationTransaction.CalculateHash(); + } + public IEnumerable ProcessDeposits(TxReceipt[] receipts, IReleaseSpec spec) { if (!spec.DepositsEnabled) @@ -95,18 +124,7 @@ private IEnumerable ReadRequests(Block block, IWorldState stat CallOutputTracer tracer = new(); - Transaction? transaction = new() - { - Value = UInt256.Zero, - Data = Array.Empty(), - To = contractAddress, - SenderAddress = Address.SystemUser, - GasLimit = GasLimit, - GasPrice = UInt256.Zero, - }; - transaction.Hash = transaction.CalculateHash(); - - transactionProcessor.Execute(transaction, new BlockExecutionContext(block.Header), tracer); + _transactionProcessor.Execute( isWithdrawalRequests? _withdrawalTransaction: _consolidationTransaction, new BlockExecutionContext(block.Header), tracer); var result = tracer.ReturnValue; if (result == null || result.Length == 0) yield break; @@ -133,7 +151,7 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] IEnumerable withdrawalRequests = ReadRequests(block, state, spec, spec.Eip7002ContractAddress); IEnumerable consolidationRequests = ReadRequests(block, state, spec, spec.Eip7251ContractAddress); using ArrayPoolList requests = ExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); - block.Header.RequestsHash = ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(requests.ToArray()); block.ExecutionRequests = requests.ToArray(); + block.Header.RequestsHash = ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(block.ExecutionRequests); } } diff --git a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs index 50c13bfbaee..26859ba2874 100644 --- a/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs +++ b/src/Nethermind/Nethermind.Core.Test/Encoding/HeaderDecoderTests.cs @@ -187,7 +187,7 @@ public void Can_encode_decode_with_ValidatorExitRoot_equals_to_null() Rlp rlp = Rlp.Encode(header); BlockHeader blockHeader = Rlp.Decode(rlp.Bytes.AsSpan()); - blockHeader.ParentBeaconBlockRoot.Should().Be(TestItem.KeccakB); + blockHeader.Should().BeEquivalentTo(header); } public static IEnumerable CancunFieldsSource() diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index d0dfa0fca4d..8d46bad0824 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -109,17 +109,17 @@ public static Hash256 CalculateHashFromFlatEncodedRequests(byte[][]? flatEncoded using (SHA256 sha256 = SHA256.Create()) { - Span concatenatedHashes = new byte[32 * flatEncodedRequests!.Length]; + byte[] concatenatedHashes = new byte[32 * flatEncodedRequests!.Length]; int currentPosition = 0; byte type = 0; + // Allocate the buffer once outside the loop + Span requestBuffer = stackalloc byte[flatEncodedRequests.Max(r => r.Length) + 1]; // Compute sha256 for each request and concatenate them foreach (byte[] request in flatEncodedRequests) { - if (type > 2) break; - Span requestBuffer = new byte[request.Length + 1]; requestBuffer[0] = type; - request.CopyTo(requestBuffer.Slice(1)); - sha256.ComputeHash(requestBuffer.ToArray()).CopyTo(concatenatedHashes.Slice(currentPosition, 32)); + request.CopyTo(requestBuffer.Slice(1, request.Length)); + sha256.ComputeHash(requestBuffer.Slice(0, request.Length + 1).ToArray()).CopyTo(concatenatedHashes.AsSpan(currentPosition, 32)); currentPosition += 32; type++; } @@ -138,16 +138,4 @@ IEnumerable consolidationRequests using ArrayPoolList requests = GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); return CalculateHashFromFlatEncodedRequests(requests.ToArray()); } - - public static bool IsSortedByType(this ExecutionRequest[] requests) - { - for (int i = 1; i < requests.Length; i++) - { - if (requests[i - 1].RequestType > requests[i].RequestType) - { - return false; - } - } - return true; - } } From 35cdbb1af43b7673d8b16add5a63270f0eff7185 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 24 Oct 2024 00:54:24 +0530 Subject: [PATCH 532/551] format files --- .../ExecutionRequests/ExecutionRequestProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index 13dcb7fbc6e..6a3c018a4d0 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -124,7 +124,7 @@ private IEnumerable ReadRequests(Block block, IWorldState stat CallOutputTracer tracer = new(); - _transactionProcessor.Execute( isWithdrawalRequests? _withdrawalTransaction: _consolidationTransaction, new BlockExecutionContext(block.Header), tracer); + _transactionProcessor.Execute(isWithdrawalRequests ? _withdrawalTransaction : _consolidationTransaction, new BlockExecutionContext(block.Header), tracer); var result = tracer.ReturnValue; if (result == null || result.Length == 0) yield break; From 480957ae0e3606bdc091897c2c70a9b67bdf644d Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 24 Oct 2024 00:56:03 +0530 Subject: [PATCH 533/551] make prague tests explicit --- src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs index 566cab07626..c6dec949795 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -11,7 +11,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -// [Explicit("These tests are not ready yet")] +[Explicit("These tests are not ready yet")] public class PragueTests : BlockchainTestBase { [TestCaseSource(nameof(LoadTests))] From 3d2e6b7f6241e34cbd69d932bd39df7a054b9d06 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 24 Oct 2024 14:56:41 +0530 Subject: [PATCH 534/551] add HeaderValidator tests --- .../Validators/BlockValidatorTests.cs | 14 ++++++++++ .../Validators/HeaderValidator.cs | 26 ++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs index 69c4bad6fa7..a06785b9d67 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs @@ -184,6 +184,20 @@ private static IEnumerable BadSuggestedBlocks() .TestObject, new CustomSpecProvider(((ForkActivation)0, Cancun.Instance)), "InsufficientMaxFeePerBlobGas"); + + yield return new TestCaseData( + Build.A.Block + .WithHeader(Build.A.BlockHeader.WithRequestsHash(Keccak.Zero).TestObject) + .TestObject, + Substitute.For(), + "RequestsNotEnabled: Requests must be null in block when EIP-6110 and EIP-7002 are not activated."); + + yield return new TestCaseData( + Build.A.Block + .TestObject, + new CustomSpecProvider(((ForkActivation)0, Prague.Instance)), + Substitute.For(), + "MissingRequests: Requests cannot be null in block when EIP-6110 or EIP-7002 are activated."); } [TestCaseSource(nameof(BadSuggestedBlocks))] diff --git a/src/Nethermind/Nethermind.Consensus/Validators/HeaderValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/HeaderValidator.cs index 8f2c3f77797..8e0f426a02b 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/HeaderValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/HeaderValidator.cs @@ -91,7 +91,31 @@ public virtual bool Validate(BlockHeader header, BlockHeader? parent, bool isUnc && ValidateTimestamp(header, parent, ref error) && ValidateBlockNumber(header, parent, ref error) && Validate1559(header, parent, spec, ref error) - && ValidateBlobGasFields(header, parent, spec, ref error); + && ValidateBlobGasFields(header, parent, spec, ref error) + && ValidateRequestsHash(header, parent, spec, ref error); + } + + private bool ValidateRequestsHash(BlockHeader header, BlockHeader parent, IReleaseSpec spec, ref string? error) + { + if (spec.RequestsEnabled) + { + if (header.RequestsHash is null) + { + if (_logger.IsWarn) _logger.Warn("RequestsHash field is not set."); + error = BlockErrorMessages.MissingRequests; + return false; + } + } + else + { + if (header.RequestsHash is not null) + { + if (_logger.IsWarn) _logger.Warn("RequestsHash field should not have value."); + error = BlockErrorMessages.RequestsNotEnabled; + return false; + } + } + return true; } private bool Validate1559(BlockHeader header, BlockHeader parent, IReleaseSpec spec, ref string? error) From 1a6b6d97ed1cc3625385dd1782ec2eeab2e194b9 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Thu, 24 Oct 2024 18:06:50 +0530 Subject: [PATCH 535/551] fix invalid executionRequest error --- .../Validators/BlockValidatorTests.cs | 1 - .../Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs index a06785b9d67..f9fc3797afb 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs @@ -196,7 +196,6 @@ private static IEnumerable BadSuggestedBlocks() Build.A.Block .TestObject, new CustomSpecProvider(((ForkActivation)0, Prague.Instance)), - Substitute.For(), "MissingRequests: Requests cannot be null in block when EIP-6110 or EIP-7002 are activated."); } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs index 3bf56897dba..b895d7a9275 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs @@ -48,11 +48,10 @@ public ValidationResult ValidateParams(IReleaseSpec spec, int version, out strin return ValidationResult.Fail; } - // Ensures that the execution requests has exactly three items if (ExecutionRequests.Length != 3) { error = "Execution requests must have exactly three items"; - return ValidationResult.Fail; + return ValidationResult.Invalid; } } From 8a025103c9bdfc3f20d681b4f43f853074dc41c9 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Fri, 25 Oct 2024 16:21:20 +0530 Subject: [PATCH 536/551] fix build error --- src/Nethermind/Nethermind.Taiko.Test/TxPoolContentListsTests.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Taiko.Test/TxPoolContentListsTests.cs b/src/Nethermind/Nethermind.Taiko.Test/TxPoolContentListsTests.cs index 7ba68003dc4..e20084942a4 100644 --- a/src/Nethermind/Nethermind.Taiko.Test/TxPoolContentListsTests.cs +++ b/src/Nethermind/Nethermind.Taiko.Test/TxPoolContentListsTests.cs @@ -75,8 +75,6 @@ public int[][] Test_TxLists_AreConstructed( Substitute.For(), Substitute.For, IEnumerable>>(), Substitute.For(), - Substitute.For, IEnumerable>>(), - Substitute.For(), Substitute.For>(), Substitute.For, IEnumerable>>(), Substitute.For>>(), From 0f7468be3c4885e80270ce71fc9c069a4e09ee7e Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Fri, 25 Oct 2024 16:25:26 +0530 Subject: [PATCH 537/551] fix test case error --- .../Validators/BlockValidatorTests.cs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs index f9fc3797afb..69c4bad6fa7 100644 --- a/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs +++ b/src/Nethermind/Nethermind.Blockchain.Test/Validators/BlockValidatorTests.cs @@ -184,19 +184,6 @@ private static IEnumerable BadSuggestedBlocks() .TestObject, new CustomSpecProvider(((ForkActivation)0, Cancun.Instance)), "InsufficientMaxFeePerBlobGas"); - - yield return new TestCaseData( - Build.A.Block - .WithHeader(Build.A.BlockHeader.WithRequestsHash(Keccak.Zero).TestObject) - .TestObject, - Substitute.For(), - "RequestsNotEnabled: Requests must be null in block when EIP-6110 and EIP-7002 are not activated."); - - yield return new TestCaseData( - Build.A.Block - .TestObject, - new CustomSpecProvider(((ForkActivation)0, Prague.Instance)), - "MissingRequests: Requests cannot be null in block when EIP-6110 or EIP-7002 are activated."); } [TestCaseSource(nameof(BadSuggestedBlocks))] From 234936b4c5dfb6c650042fc5a2eecd175d9e9bd6 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 5 Nov 2024 11:38:02 +0530 Subject: [PATCH 538/551] address PR comments --- .../PragueStateTests.cs | 2 +- .../PragueTests.cs | 2 +- .../ExecutionRequestProcessorTests.cs | 39 +++++- .../ExecutionRequestProcessor.cs | 58 +++------ .../Messages/BlockErrorMessages.cs | 2 +- .../Validators/HeaderValidator.cs | 4 +- .../Builders/BlockBuilder.cs | 4 +- .../ExecutionRequest/ExecutionRequest.cs | 115 ------------------ .../ExecutionRequestExtensions.cs | 95 +++++++++++++++ .../Data/ExecutionPayloadV3.cs | 2 +- .../Data/GetPayloadV4Result.cs | 4 +- .../ChainSpecStyle/ChainSpecLoader.cs | 2 +- 12 files changed, 159 insertions(+), 170 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs index 107b4e249f1..3aea340281d 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs @@ -8,7 +8,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -[Explicit("These tests are not ready yet")] +// [Explicit("These tests are not ready yet")] public class PragueStateTests : GeneralStateTestBase { [TestCaseSource(nameof(LoadTests))] diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs index c6dec949795..566cab07626 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -11,7 +11,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -[Explicit("These tests are not ready yet")] +// [Explicit("These tests are not ready yet")] public class PragueTests : BlockchainTestBase { [TestCaseSource(nameof(LoadTests))] diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index 5fbeb30efb7..eff996dfb51 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -6,6 +6,8 @@ using Nethermind.Abi; using Nethermind.Consensus.ExecutionRequests; using Nethermind.Core; +using Nethermind.Core.Collections; +using Nethermind.Core.Crypto; using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Extensions; using Nethermind.Core.Specs; @@ -41,11 +43,27 @@ public class ExecutionProcessorTests ExecutionRequest[] executionWithdrawalRequests = [TestItem.ExecutionRequestD, TestItem.ExecutionRequestE, TestItem.ExecutionRequestF]; ExecutionRequest[] executionConsolidationRequests = [TestItem.ExecutionRequestG, TestItem.ExecutionRequestH, TestItem.ExecutionRequestI]; - [SetUp] - public void Setup() + private void FlatEncodeWithoutType(ExecutionRequest[] requests, Span buffer) { + int currentPosition = 0; + + foreach (ExecutionRequest request in requests) + { + // Ensure the buffer has enough space to accommodate the new data + if (currentPosition + request.RequestData!.Length > buffer.Length) + { + throw new InvalidOperationException("Buffer is not large enough to hold all data of requests"); + } + // Copy the RequestData to the buffer at the current position + request.RequestData.CopyTo(buffer.Slice(currentPosition, request.RequestData.Length)); + currentPosition += request.RequestData.Length; + } + } + [SetUp] + public void Setup() + { _specProvider = MainnetSpecProvider.Instance; MemDb stateDb = new(); TrieStore trieStore = new(stateDb, LimboLogs.Instance); @@ -77,13 +95,13 @@ public void Setup() if (transaction.To == eip7002Account) { Span buffer = new byte[executionWithdrawalRequests.GetRequestsByteSize()]; - executionWithdrawalRequests.FlatEncodeWithoutType(buffer); + FlatEncodeWithoutType(executionWithdrawalRequests, buffer); tracer.ReturnValue = buffer.ToArray(); } else if (transaction.To == eip7251Account) { Span buffer = new byte[executionConsolidationRequests.GetRequestsByteSize()]; - executionConsolidationRequests.FlatEncodeWithoutType(buffer); + FlatEncodeWithoutType(executionConsolidationRequests, buffer); tracer.ReturnValue = buffer.ToArray(); } else @@ -94,6 +112,17 @@ public void Setup() }); } + + public static Hash256 CalculateHash( + ExecutionRequest[] depositRequests, + ExecutionRequest[] withdrawalRequests, + ExecutionRequest[] consolidationRequests + ) + { + using ArrayPoolList requests = ExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); + return ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(requests.ToArray()); + } + [Test] public void ShouldProcessExecutionRequests() { @@ -116,7 +145,7 @@ public void ShouldProcessExecutionRequests() executionRequestsProcessor.ProcessExecutionRequests(block, _stateProvider, txReceipts, spec); Assert.That(block.Header.RequestsHash, Is.EqualTo( - ExecutionRequestExtensions.CalculateHash(executionDepositRequests, executionWithdrawalRequests, executionConsolidationRequests) + CalculateHash(executionDepositRequests, executionWithdrawalRequests, executionConsolidationRequests) )); } } diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index 6a3c018a4d0..8b2346f1ab5 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -8,7 +8,6 @@ using Nethermind.Core; using Nethermind.Core.Collections; using Nethermind.Core.ExecutionRequest; -using Nethermind.Core.Extensions; using Nethermind.Core.Specs; using Nethermind.Crypto; using Nethermind.Evm; @@ -55,10 +54,12 @@ public ExecutionRequestsProcessor(ITransactionProcessor transactionProcessor) _consolidationTransaction.Hash = _consolidationTransaction.CalculateHash(); } - public IEnumerable ProcessDeposits(TxReceipt[] receipts, IReleaseSpec spec) + public byte[] ProcessDeposits(TxReceipt[] receipts, IReleaseSpec spec) { if (!spec.DepositsEnabled) - yield break; + return Array.Empty(); + + using ArrayPoolList depositRequests = new(receipts.Length * 2); for (int i = 0; i < receipts.Length; i++) { @@ -70,24 +71,27 @@ public IEnumerable ProcessDeposits(TxReceipt[] receipts, IRele LogEntry log = logEntries[j]; if (log.Address == spec.DepositContractAddress) { - yield return DecodeDepositRequest(log); + Span depositRequestBuffer = new byte[ExecutionRequestExtensions.DepositRequestsBytesSize]; + DecodeDepositRequest(log, depositRequestBuffer); + depositRequests.AddRange(depositRequestBuffer.ToArray()); } } } } + + return depositRequests.ToArray(); } - private ExecutionRequest DecodeDepositRequest(LogEntry log) + private void DecodeDepositRequest(LogEntry log, Span buffer) { object[] result = _abiEncoder.Decode(AbiEncodingStyle.None, _depositEventABI, log.Data); - byte[] flattenedResult = new byte[ExecutionRequestExtensions.depositRequestsBytesSize]; int offset = 0; foreach (var item in result) { if (item is byte[] byteArray) { - Array.Copy(byteArray, 0, flattenedResult, offset, byteArray.Length); + byteArray.CopyTo(buffer.Slice(offset, byteArray.Length)); offset += byteArray.Length; } else @@ -97,49 +101,29 @@ private ExecutionRequest DecodeDepositRequest(LogEntry log) } // make sure the flattened result is of the correct size - if (offset != ExecutionRequestExtensions.depositRequestsBytesSize) + if (offset != ExecutionRequestExtensions.DepositRequestsBytesSize) { - throw new InvalidOperationException($"Decoded ABI result has incorrect size. Expected {ExecutionRequestExtensions.depositRequestsBytesSize} bytes, got {offset} bytes."); + throw new InvalidOperationException($"Decoded ABI result has incorrect size. Expected {ExecutionRequestExtensions.DepositRequestsBytesSize} bytes, got {offset} bytes."); } - - return new ExecutionRequest - { - RequestType = (byte)ExecutionRequestType.Deposit, - RequestData = flattenedResult - }; } - private IEnumerable ReadRequests(Block block, IWorldState state, IReleaseSpec spec, Address contractAddress) + private byte[] ReadRequests(Block block, IWorldState state, IReleaseSpec spec, Address contractAddress) { bool isWithdrawalRequests = contractAddress == spec.Eip7002ContractAddress; - int requestBytesSize = isWithdrawalRequests ? ExecutionRequestExtensions.withdrawalRequestsBytesSize : ExecutionRequestExtensions.consolidationRequestsBytesSize; - if (!(isWithdrawalRequests ? spec.WithdrawalRequestsEnabled : spec.ConsolidationRequestsEnabled)) - yield break; + // yield break; + return Array.Empty(); if (!state.AccountExists(contractAddress)) - yield break; + throw new InvalidOperationException($"Contract address {contractAddress} does not exist in the state."); CallOutputTracer tracer = new(); _transactionProcessor.Execute(isWithdrawalRequests ? _withdrawalTransaction : _consolidationTransaction, new BlockExecutionContext(block.Header), tracer); - var result = tracer.ReturnValue; - if (result == null || result.Length == 0) - yield break; - int requestCount = result.Length / requestBytesSize; - - for (int i = 0; i < requestCount; i++) - { - int offset = i * requestBytesSize; - yield return new ExecutionRequest - { - RequestType = (byte)(isWithdrawalRequests ? ExecutionRequestType.WithdrawalRequest : ExecutionRequestType.ConsolidationRequest), - RequestData = result.Slice(offset, requestBytesSize).ToArray() - }; - } + return tracer.ReturnValue ?? Array.Empty(); } @@ -147,11 +131,7 @@ public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] { if (!spec.RequestsEnabled) return; - IEnumerable depositRequests = ProcessDeposits(receipts, spec); - IEnumerable withdrawalRequests = ReadRequests(block, state, spec, spec.Eip7002ContractAddress); - IEnumerable consolidationRequests = ReadRequests(block, state, spec, spec.Eip7251ContractAddress); - using ArrayPoolList requests = ExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); - block.ExecutionRequests = requests.ToArray(); + block.ExecutionRequests = new byte[][] { ProcessDeposits(receipts, spec), ReadRequests(block, state, spec, spec.Eip7002ContractAddress), ReadRequests(block, state, spec, spec.Eip7251ContractAddress) }; block.Header.RequestsHash = ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(block.ExecutionRequests); } } diff --git a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs index 76aadc4cd71..2c3f10a5a17 100644 --- a/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs +++ b/src/Nethermind/Nethermind.Consensus/Messages/BlockErrorMessages.cs @@ -120,6 +120,6 @@ public static string InvalidTxInBlock(int i) => public static string MissingRequests => "MissingRequests: Requests cannot be null in block when EIP-6110 or EIP-7002 are activated."; public static string RequestsNotEnabled => "RequestsNotEnabled: Requests must be null in block when EIP-6110 and EIP-7002 are not activated."; - public static string InvalidRequestsHash(Hash256? expected, Hash256? actual) => $"InvalidRequestsHash: Requests root hash mismatch in block: expected {expected}, got {actual}"; + public static string InvalidRequestsHash(Hash256? expected, Hash256? actual) => $"InvalidRequestsHash: Requests hash hash mismatch in block: expected {expected}, got {actual}"; public static string InvalidRequestsOrder => "InvalidRequestsOrder: Requests are not in the correct order in block."; } diff --git a/src/Nethermind/Nethermind.Consensus/Validators/HeaderValidator.cs b/src/Nethermind/Nethermind.Consensus/Validators/HeaderValidator.cs index 4df453a1f1a..58ae2a709b3 100644 --- a/src/Nethermind/Nethermind.Consensus/Validators/HeaderValidator.cs +++ b/src/Nethermind/Nethermind.Consensus/Validators/HeaderValidator.cs @@ -92,10 +92,10 @@ public virtual bool Validate(BlockHeader header, BlockHeader? parent, bool isUnc && ValidateBlockNumber(header, parent, ref error) && Validate1559(header, parent, spec, ref error) && ValidateBlobGasFields(header, parent, spec, ref error) - && ValidateRequestsHash(header, parent, spec, ref error); + && ValidateRequestsHash(header, spec, ref error); } - private bool ValidateRequestsHash(BlockHeader header, BlockHeader parent, IReleaseSpec spec, ref string? error) + private bool ValidateRequestsHash(BlockHeader header, IReleaseSpec spec, ref string? error) { if (spec.RequestsEnabled) { diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs index 610d54f6b1f..e2de33c5a8c 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/BlockBuilder.cs @@ -252,8 +252,8 @@ public BlockBuilder WithReceiptsRoot(Hash256 keccak) public BlockBuilder WithEmptyRequestsHash() { - TestObjectInternal.Header.RequestsHash = ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }); - TestObjectInternal.ExecutionRequests = new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }; + TestObjectInternal.Header.RequestsHash = ExecutionRequestExtensions.EmptyRequestsHash; + TestObjectInternal.ExecutionRequests = ExecutionRequestExtensions.EmptyRequests; return this; } diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs index 8d46bad0824..38c002f5c5a 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequest.cs @@ -2,13 +2,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -using System; -using System.Buffers; -using System.Collections.Generic; -using System.Linq; -using System.Security.Cryptography; -using Nethermind.Core.Collections; -using Nethermind.Core.Crypto; using Nethermind.Core.Extensions; namespace Nethermind.Core.ExecutionRequest; @@ -31,111 +24,3 @@ public string ToString(string indentation) => @$"{indentation}{nameof(ExecutionR {{{nameof(RequestType)}: {RequestType}, {nameof(RequestData)}: {RequestData!.ToHexString()}}}"; } - -public static class ExecutionRequestExtensions -{ - public const int depositRequestsBytesSize = 48 + 32 + 8 + 96 + 8; - public const int withdrawalRequestsBytesSize = 20 + 48 + 8; - public const int consolidationRequestsBytesSize = 20 + 48 + 48; - - public static int GetRequestsByteSize(this IEnumerable requests) - { - int size = 0; - foreach (ExecutionRequest request in requests) - { - size += request.RequestData!.Length + 1; - } - return size; - } - - public static void FlatEncodeWithoutType(this IEnumerable requests, Span buffer) - { - int currentPosition = 0; - - foreach (ExecutionRequest request in requests) - { - // Ensure the buffer has enough space to accommodate the new data - if (currentPosition + request.RequestData!.Length > buffer.Length) - { - throw new InvalidOperationException("Buffer is not large enough to hold all data of requests"); - } - - // Copy the RequestData to the buffer at the current position - request.RequestData.CopyTo(buffer.Slice(currentPosition, request.RequestData.Length)); - currentPosition += request.RequestData.Length; - } - } - - public static ArrayPoolList GetFlatEncodedRequests( - IEnumerable depositRequests, - IEnumerable withdrawalRequests, - IEnumerable consolidationRequests - ) - { - ArrayPoolList requests = new(3); - using ArrayPoolList depositBuffer = new(depositRequestsBytesSize); - using ArrayPoolList withdrawalBuffer = new(withdrawalRequestsBytesSize); - using ArrayPoolList consolidationBuffer = new(consolidationRequestsBytesSize); - - - foreach (ExecutionRequest request in depositRequests) - { - depositBuffer.AddRange(request.RequestData!); - } - - foreach (ExecutionRequest request in withdrawalRequests) - { - withdrawalBuffer.AddRange(request.RequestData!); - } - - foreach (ExecutionRequest request in consolidationRequests) - { - consolidationBuffer.AddRange(request.RequestData!); - } - - requests.AddRange(depositBuffer.ToArray()); - requests.AddRange(withdrawalBuffer.ToArray()); - requests.AddRange(consolidationBuffer.ToArray()); - return requests; - } - - public static Hash256 CalculateHashFromFlatEncodedRequests(byte[][]? flatEncodedRequests) - { - // make sure that length is exactly 3 - if (flatEncodedRequests is null || flatEncodedRequests.Length != 3) - { - throw new ArgumentException("Flat encoded requests must be an array of 3 elements"); - } - - using (SHA256 sha256 = SHA256.Create()) - { - byte[] concatenatedHashes = new byte[32 * flatEncodedRequests!.Length]; - int currentPosition = 0; - byte type = 0; - // Allocate the buffer once outside the loop - Span requestBuffer = stackalloc byte[flatEncodedRequests.Max(r => r.Length) + 1]; - // Compute sha256 for each request and concatenate them - foreach (byte[] request in flatEncodedRequests) - { - requestBuffer[0] = type; - request.CopyTo(requestBuffer.Slice(1, request.Length)); - sha256.ComputeHash(requestBuffer.Slice(0, request.Length + 1).ToArray()).CopyTo(concatenatedHashes.AsSpan(currentPosition, 32)); - currentPosition += 32; - type++; - } - - // Compute sha256 of the concatenated hashes - return new Hash256(sha256.ComputeHash(concatenatedHashes.ToArray())); - } - } - - public static Hash256 CalculateHash( - IEnumerable depositRequests, - IEnumerable withdrawalRequests, - IEnumerable consolidationRequests - ) - { - using ArrayPoolList requests = GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); - return CalculateHashFromFlatEncodedRequests(requests.ToArray()); - } -} diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs new file mode 100644 index 00000000000..c7f06647685 --- /dev/null +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs @@ -0,0 +1,95 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + + +using System; +using System.Buffers; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Security.Cryptography; +using Nethermind.Core.Collections; +using Nethermind.Core.Crypto; + +namespace Nethermind.Core.ExecutionRequest; + +public static class ExecutionRequestExtensions +{ + + public const int DepositRequestsBytesSize = 48 /*pubkey: Bytes48 */ + 32 /*withdrawal_credentials: Bytes32 */+ 8 /*amount: uint64*/ + 96 /*signature: Bytes96*/+ 8 /*index: uint64*/; + public const int WithdrawalRequestsBytesSize = Address.Size + 48 /*validator_pubkey: Bytes48*/ + 8 /*amount: uint64*/; + public const int ConsolidationRequestsBytesSize = Address.Size + 48 /*source_pubkey: Bytes48*/ + 48 /*target_pubkey: Bytes48*/; + + public static byte[][] EmptyRequests = new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }; + public static Hash256 EmptyRequestsHash = CalculateHashFromFlatEncodedRequests(EmptyRequests); + + public static int GetRequestsByteSize(this IEnumerable requests) + { + int size = 0; + foreach (ExecutionRequest request in requests) + { + size += request.RequestData!.Length + 1; + } + return size; + } + + [SkipLocalsInit] + public static Hash256 CalculateHashFromFlatEncodedRequests(byte[][]? flatEncodedRequests) + { + // make sure that length is exactly 3 + if (flatEncodedRequests is null || flatEncodedRequests.Length != 3) + { + throw new ArgumentException("Flat encoded requests must be an array of 3 elements"); + } + + using (SHA256 sha256 = SHA256.Create()) + { + byte[] concatenatedHashes = new byte[Hash256.Size * flatEncodedRequests!.Length]; + int currentPosition = 0; + byte type = 0; + // Allocate the buffer once outside the loop + Span requestBuffer = stackalloc byte[flatEncodedRequests.Max(r => r.Length) + 1]; + // Compute sha256 for each request and concatenate them + foreach (byte[] requests in flatEncodedRequests) + { + requestBuffer[0] = type; + requests.CopyTo(requestBuffer.Slice(1, requests.Length)); + sha256.ComputeHash(requestBuffer.Slice(0, requests.Length + 1).ToArray()).CopyTo(concatenatedHashes.AsSpan(currentPosition, 32)); + currentPosition += 32; + type++; + } + + // Compute sha256 of the concatenated hashes + return new Hash256(sha256.ComputeHash(concatenatedHashes.ToArray())); + } + } + + + // the following functions are only used in tests + public static ArrayPoolList GetFlatEncodedRequests( + ExecutionRequest[] depositRequests, + ExecutionRequest[] withdrawalRequests, + ExecutionRequest[] consolidationRequests + ) + { + ArrayPoolList requests = new(3) + { + FlatEncodeRequests(depositRequests, depositRequests.Length * DepositRequestsBytesSize), + FlatEncodeRequests(withdrawalRequests, withdrawalRequests.Length * WithdrawalRequestsBytesSize), + FlatEncodeRequests(consolidationRequests, consolidationRequests.Length * ConsolidationRequestsBytesSize) + }; + + return requests; + } + + public static byte[] FlatEncodeRequests(ExecutionRequest[] requests, int bufferSize) + { + using ArrayPoolList buffer = new(bufferSize); + + foreach (ExecutionRequest request in requests) + { + buffer.AddRange(request.RequestData!); + } + return buffer.ToArray(); + } +} diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs index 50efc558cff..62d3f85e99d 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/ExecutionPayloadV3.cs @@ -37,7 +37,7 @@ public override bool TryGetBlock([NotNullWhen(true)] out Block? block, UInt256? block.Header.ParentBeaconBlockRoot = ParentBeaconBlockRoot; block.Header.BlobGasUsed = BlobGasUsed; block.Header.ExcessBlobGas = ExcessBlobGas; - block.Header.RequestsHash = ExecutionRequests != null ? ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(ExecutionRequests) : null; + block.Header.RequestsHash = ExecutionRequests is not null ? ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(ExecutionRequests) : null; return true; } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs index 774b4f70665..e1e1fcaa934 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/GetPayloadV4Result.cs @@ -7,9 +7,9 @@ namespace Nethermind.Merge.Plugin.Data; -public class GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle, byte[][] ExecutionRequests) : GetPayloadV3Result(block, blockFees, blobsBundle) +public class GetPayloadV4Result(Block block, UInt256 blockFees, BlobsBundleV1 blobsBundle, byte[][] executionRequests) : GetPayloadV3Result(block, blockFees, blobsBundle) { - public byte[][]? ExecutionRequests { get; } = ExecutionRequests; + public byte[][]? ExecutionRequests { get; } = executionRequests; public override string ToString() => $"{{ExecutionPayload: {ExecutionPayload}, Fees: {BlockValue}, BlobsBundle blobs count: {BlobsBundle.Blobs.Length}, ShouldOverrideBuilder {ShouldOverrideBuilder}, ExecutionRequests count : {ExecutionRequests?.Length}}}"; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs index e01c4520e78..49061917fa8 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs @@ -439,7 +439,7 @@ private static void LoadGenesis(ChainSpecJson chainSpecJson, ChainSpec chainSpec var requestsEnabled = depositsEnabled || withdrawalRequestsEnabled || consolidationRequestsEnabled; if (requestsEnabled) - genesisHeader.RequestsHash = ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }); + genesisHeader.RequestsHash = ExecutionRequestExtensions.EmptyRequestsHash; bool isEip4844Enabled = chainSpecJson.Params.Eip4844TransitionTimestamp is not null && genesisHeader.Timestamp >= chainSpecJson.Params.Eip4844TransitionTimestamp; if (isEip4844Enabled) From 45340e7318d2e3c98e3ff95892ef6d76cfbdf3db Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 5 Nov 2024 11:50:19 +0530 Subject: [PATCH 539/551] fix errors --- .../EngineModuleTests.HelperFunctions.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index 0fdc704006a..41d3a6071a1 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -21,7 +21,6 @@ using Nethermind.Specs.Forks; using Nethermind.State; using Microsoft.CodeAnalysis; -using Nethermind.Core.ConsensusRequests; using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Core.Specs; using Nethermind.Specs.Test.ChainSpecStyle; From c31274eaa4ad2b0995dee1d7292b65439a7fb06d Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 5 Nov 2024 11:55:45 +0530 Subject: [PATCH 540/551] fix some more error --- .../EngineModuleTests.HelperFunctions.cs | 1 - .../Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs index 41d3a6071a1..cf6ce64cd4a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.HelperFunctions.cs @@ -23,7 +23,6 @@ using Microsoft.CodeAnalysis; using Nethermind.Blockchain.BeaconBlockRoot; using Nethermind.Core.Specs; -using Nethermind.Specs.Test.ChainSpecStyle; using Nethermind.Evm.Tracing; namespace Nethermind.Merge.Plugin.Test diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs index 8e80f08f34b..72a4a39c582 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/EngineModuleTests.V4.cs @@ -109,7 +109,7 @@ public virtual async Task Should_process_block_as_expected_V4(string latestValid Array.Empty(), Array.Empty(), withdrawals); - GetPayloadV4Result expectedPayload = new(block, UInt256.Zero, new BlobsBundleV1(block), ExecutionRequests: new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }); + GetPayloadV4Result expectedPayload = new(block, UInt256.Zero, new BlobsBundleV1(block), executionRequests: new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }); response = await RpcTest.TestSerializedRequest(rpc, "engine_getPayloadV4", expectedPayloadId); successResponse = chain.JsonSerializer.Deserialize(response); From bdae7e0fde86c4d21225ddcac4ca9ad2ae947211 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 5 Nov 2024 12:36:13 +0530 Subject: [PATCH 541/551] fix consensus test --- .../ExecutionRequestProcessorTests.cs | 2 +- .../ExecutionRequests/ExecutionRequestProcessor.cs | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index eff996dfb51..eac117ff736 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -144,7 +144,7 @@ public void ShouldProcessExecutionRequests() ]; executionRequestsProcessor.ProcessExecutionRequests(block, _stateProvider, txReceipts, spec); - Assert.That(block.Header.RequestsHash, Is.EqualTo( + Assert.That(block.Header.RequestsHash, Is.EqualTo( CalculateHash(executionDepositRequests, executionWithdrawalRequests, executionConsolidationRequests) )); } diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index 8b2346f1ab5..f80a2039323 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -112,6 +112,8 @@ private byte[] ReadRequests(Block block, IWorldState state, IReleaseSpec spec, A { bool isWithdrawalRequests = contractAddress == spec.Eip7002ContractAddress; + int requestsByteSize = isWithdrawalRequests ? ExecutionRequestExtensions.WithdrawalRequestsBytesSize : ExecutionRequestExtensions.ConsolidationRequestsBytesSize; + if (!(isWithdrawalRequests ? spec.WithdrawalRequestsEnabled : spec.ConsolidationRequestsEnabled)) // yield break; return Array.Empty(); @@ -123,8 +125,13 @@ private byte[] ReadRequests(Block block, IWorldState state, IReleaseSpec spec, A _transactionProcessor.Execute(isWithdrawalRequests ? _withdrawalTransaction : _consolidationTransaction, new BlockExecutionContext(block.Header), tracer); - return tracer.ReturnValue ?? Array.Empty(); + if (tracer.ReturnValue is null || tracer.ReturnValue.Length == 0) + { + return Array.Empty(); + } + int validLength = tracer.ReturnValue.Length - (tracer.ReturnValue.Length % requestsByteSize); + return tracer.ReturnValue.AsSpan(0, validLength).ToArray(); } public void ProcessExecutionRequests(Block block, IWorldState state, TxReceipt[] receipts, IReleaseSpec spec) From d6caf829edeb3e30a928e28172c13d4d72d0b6db Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 5 Nov 2024 15:11:15 +0530 Subject: [PATCH 542/551] fix errors --- .../ExecutionRequests/ExecutionRequestProcessor.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs index f80a2039323..46199e498da 100644 --- a/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs +++ b/src/Nethermind/Nethermind.Consensus/ExecutionRequests/ExecutionRequestProcessor.cs @@ -114,13 +114,9 @@ private byte[] ReadRequests(Block block, IWorldState state, IReleaseSpec spec, A int requestsByteSize = isWithdrawalRequests ? ExecutionRequestExtensions.WithdrawalRequestsBytesSize : ExecutionRequestExtensions.ConsolidationRequestsBytesSize; - if (!(isWithdrawalRequests ? spec.WithdrawalRequestsEnabled : spec.ConsolidationRequestsEnabled)) - // yield break; + if (!(isWithdrawalRequests ? spec.WithdrawalRequestsEnabled : spec.ConsolidationRequestsEnabled) || !state.AccountExists(contractAddress)) return Array.Empty(); - if (!state.AccountExists(contractAddress)) - throw new InvalidOperationException($"Contract address {contractAddress} does not exist in the state."); - CallOutputTracer tracer = new(); _transactionProcessor.Execute(isWithdrawalRequests ? _withdrawalTransaction : _consolidationTransaction, new BlockExecutionContext(block.Header), tracer); From 073f929cbf6d379c18628d7af7f202a54c4fa8be Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 5 Nov 2024 15:11:49 +0530 Subject: [PATCH 543/551] format files --- .../ExecutionRequestProcessorTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index eac117ff736..3da49193dcc 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -144,8 +144,8 @@ public void ShouldProcessExecutionRequests() ]; executionRequestsProcessor.ProcessExecutionRequests(block, _stateProvider, txReceipts, spec); - Assert.That(block.Header.RequestsHash, Is.EqualTo( - CalculateHash(executionDepositRequests, executionWithdrawalRequests, executionConsolidationRequests) - )); + Assert.That(block.Header.RequestsHash, Is.EqualTo( + CalculateHash(executionDepositRequests, executionWithdrawalRequests, executionConsolidationRequests) + )); } } From b00ccdcb0e9040e30736e1639f4efff370c3d865 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Tue, 5 Nov 2024 15:15:21 +0530 Subject: [PATCH 544/551] make prague tests explicit --- .../Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs | 2 +- src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs index 3aea340281d..107b4e249f1 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs @@ -8,7 +8,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -// [Explicit("These tests are not ready yet")] +[Explicit("These tests are not ready yet")] public class PragueStateTests : GeneralStateTestBase { [TestCaseSource(nameof(LoadTests))] diff --git a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs index 566cab07626..c6dec949795 100644 --- a/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs +++ b/src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueTests.cs @@ -11,7 +11,7 @@ namespace Ethereum.Blockchain.Pyspec.Test; [TestFixture] [Parallelizable(ParallelScope.All)] -// [Explicit("These tests are not ready yet")] +[Explicit("These tests are not ready yet")] public class PragueTests : BlockchainTestBase { [TestCaseSource(nameof(LoadTests))] From 3a5da76f762e73b4a3a5c6928efd68933aa925b7 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Tue, 5 Nov 2024 11:38:47 +0100 Subject: [PATCH 545/551] some refactors --- .../ExecutionRequestExtensions.cs | 58 +++++++++---------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs index c7f06647685..b2347a5db8f 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs @@ -19,8 +19,9 @@ public static class ExecutionRequestExtensions public const int DepositRequestsBytesSize = 48 /*pubkey: Bytes48 */ + 32 /*withdrawal_credentials: Bytes32 */+ 8 /*amount: uint64*/ + 96 /*signature: Bytes96*/+ 8 /*index: uint64*/; public const int WithdrawalRequestsBytesSize = Address.Size + 48 /*validator_pubkey: Bytes48*/ + 8 /*amount: uint64*/; public const int ConsolidationRequestsBytesSize = Address.Size + 48 /*source_pubkey: Bytes48*/ + 48 /*target_pubkey: Bytes48*/; + private const int RequestPartsCount = 3; - public static byte[][] EmptyRequests = new byte[][] { Array.Empty(), Array.Empty(), Array.Empty() }; + public static byte[][] EmptyRequests = [[], [], []]; public static Hash256 EmptyRequestsHash = CalculateHashFromFlatEncodedRequests(EmptyRequests); public static int GetRequestsByteSize(this IEnumerable requests) @@ -37,31 +38,29 @@ public static int GetRequestsByteSize(this IEnumerable request public static Hash256 CalculateHashFromFlatEncodedRequests(byte[][]? flatEncodedRequests) { // make sure that length is exactly 3 - if (flatEncodedRequests is null || flatEncodedRequests.Length != 3) + if (flatEncodedRequests is null || flatEncodedRequests.Length != RequestPartsCount) { throw new ArgumentException("Flat encoded requests must be an array of 3 elements"); } - using (SHA256 sha256 = SHA256.Create()) + using SHA256 sha256 = SHA256.Create(); + byte[] concatenatedHashes = new byte[Hash256.Size * RequestPartsCount]; + int currentPosition = 0; + byte type = 0; + // Allocate the buffer once outside the loop + Span requestBuffer = stackalloc byte[Math.Max(Math.Max(flatEncodedRequests[0].Length, flatEncodedRequests[1].Length), flatEncodedRequests[2].Length) + 1]; + // Compute sha256 for each request and concatenate them + foreach (byte[] requests in flatEncodedRequests) { - byte[] concatenatedHashes = new byte[Hash256.Size * flatEncodedRequests!.Length]; - int currentPosition = 0; - byte type = 0; - // Allocate the buffer once outside the loop - Span requestBuffer = stackalloc byte[flatEncodedRequests.Max(r => r.Length) + 1]; - // Compute sha256 for each request and concatenate them - foreach (byte[] requests in flatEncodedRequests) - { - requestBuffer[0] = type; - requests.CopyTo(requestBuffer.Slice(1, requests.Length)); - sha256.ComputeHash(requestBuffer.Slice(0, requests.Length + 1).ToArray()).CopyTo(concatenatedHashes.AsSpan(currentPosition, 32)); - currentPosition += 32; - type++; - } - - // Compute sha256 of the concatenated hashes - return new Hash256(sha256.ComputeHash(concatenatedHashes.ToArray())); + requestBuffer[0] = type; + requests.CopyTo(requestBuffer.Slice(1, requests.Length)); + sha256.ComputeHash(requestBuffer.Slice(0, requests.Length + 1).ToArray()).CopyTo(concatenatedHashes.AsSpan(currentPosition, Hash256.Size)); + currentPosition += Hash256.Size; + type++; } + + // Compute sha256 of the concatenated hashes + return new Hash256(sha256.ComputeHash(concatenatedHashes.ToArray())); } @@ -72,24 +71,23 @@ public static ArrayPoolList GetFlatEncodedRequests( ExecutionRequest[] consolidationRequests ) { - ArrayPoolList requests = new(3) + return new(RequestPartsCount) { FlatEncodeRequests(depositRequests, depositRequests.Length * DepositRequestsBytesSize), FlatEncodeRequests(withdrawalRequests, withdrawalRequests.Length * WithdrawalRequestsBytesSize), FlatEncodeRequests(consolidationRequests, consolidationRequests.Length * ConsolidationRequestsBytesSize) }; - return requests; - } + static byte[] FlatEncodeRequests(ExecutionRequest[] requests, int bufferSize) + { + using ArrayPoolList buffer = new(bufferSize); - public static byte[] FlatEncodeRequests(ExecutionRequest[] requests, int bufferSize) - { - using ArrayPoolList buffer = new(bufferSize); + foreach (ExecutionRequest request in requests) + { + buffer.AddRange(request.RequestData!); + } - foreach (ExecutionRequest request in requests) - { - buffer.AddRange(request.RequestData!); + return buffer.ToArray(); } - return buffer.ToArray(); } } From 236cb2defd236c1440a58fbc9ce541b52e2ff059 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Tue, 5 Nov 2024 11:42:07 +0100 Subject: [PATCH 546/551] more refactors --- .../ExecutionRequest/ExecutionRequestExtensions.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs index b2347a5db8f..33faa4d51b9 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs @@ -15,11 +15,11 @@ namespace Nethermind.Core.ExecutionRequest; public static class ExecutionRequestExtensions { - - public const int DepositRequestsBytesSize = 48 /*pubkey: Bytes48 */ + 32 /*withdrawal_credentials: Bytes32 */+ 8 /*amount: uint64*/ + 96 /*signature: Bytes96*/+ 8 /*index: uint64*/; - public const int WithdrawalRequestsBytesSize = Address.Size + 48 /*validator_pubkey: Bytes48*/ + 8 /*amount: uint64*/; - public const int ConsolidationRequestsBytesSize = Address.Size + 48 /*source_pubkey: Bytes48*/ + 48 /*target_pubkey: Bytes48*/; + public const int DepositRequestsBytesSize = PublicKeySize /*pubkey: Bytes48 */ + Hash256.Size /*withdrawal_credentials: Bytes32 */ + sizeof(ulong) /*amount: uint64*/ + 96 /*signature: Bytes96*/ + sizeof(ulong) /*index: uint64*/; + public const int WithdrawalRequestsBytesSize = Address.Size + PublicKeySize /*validator_pubkey: Bytes48*/ + sizeof(ulong) /*amount: uint64*/; + public const int ConsolidationRequestsBytesSize = Address.Size + PublicKeySize /*source_pubkey: Bytes48*/ + PublicKeySize /*target_pubkey: Bytes48*/; private const int RequestPartsCount = 3; + private const int PublicKeySize = 48; public static byte[][] EmptyRequests = [[], [], []]; public static Hash256 EmptyRequestsHash = CalculateHashFromFlatEncodedRequests(EmptyRequests); From 84cc68c349a83fe93788d131e8af8658b87c0c66 Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Tue, 5 Nov 2024 11:51:20 +0100 Subject: [PATCH 547/551] test refactor --- .../ExecutionRequestProcessorTests.cs | 6 +++--- .../Builders/TestExecutionRequest.cs | 21 +++++++++++++++++++ .../Nethermind.Core.Test/Builders/TestItem.cs | 18 ++++++++-------- .../Nethermind.Core/Extensions/Bytes.cs | 20 ++++++++++++++++++ 4 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index 3da49193dcc..14dd5cf7fa8 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -132,13 +132,13 @@ public void ShouldProcessExecutionRequests() TxReceipt[] txReceipts = [ Build.A.Receipt.WithLogs( Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyA.Bytes.Slice(0, 48), TestItem.KeccakA.Bytes.ToArray(), BitConverter.GetBytes((ulong)1_000_000_000), TestItem.SignatureBytes, BitConverter.GetBytes((ulong)1)]) + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, TestItem.ExecutionRequestA.RequestDataParts) ).WithAddress(DepositContractAddress).TestObject, Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyB.Bytes.Slice(0, 48), TestItem.KeccakB.Bytes.ToArray(), BitConverter.GetBytes((ulong)2_000_000_000), TestItem.SignatureBytes, BitConverter.GetBytes((ulong)2)]) + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, TestItem.ExecutionRequestB.RequestDataParts) ).WithAddress(DepositContractAddress).TestObject, Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, [TestItem.PublicKeyC.Bytes.Slice(0, 48), TestItem.KeccakC.Bytes.ToArray(), BitConverter.GetBytes((ulong)3_000_000_000), TestItem.SignatureBytes, BitConverter.GetBytes((ulong)3)]) + _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, TestItem.ExecutionRequestC.RequestDataParts) ).WithAddress(DepositContractAddress).TestObject ).TestObject ]; diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs new file mode 100644 index 00000000000..f078e988e46 --- /dev/null +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited +// SPDX-License-Identifier: LGPL-3.0-only + +using Nethermind.Core.Extensions; + +namespace Nethermind.Core.Test.Builders; + +public class TestExecutionRequest : ExecutionRequest.ExecutionRequest +{ + private byte[][]? _requestDataParts; + + public byte[][]? RequestDataParts + { + get => _requestDataParts; + set + { + _requestDataParts = value; + RequestData = value is null ? null : Bytes.Concat(value); + } + } +} diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs index b7724019b19..e922f4971d1 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestItem.cs @@ -112,15 +112,15 @@ public static Hash256 KeccakFromNumber(int i) public static byte[] SignatureBytes = [.. new Signature("0x9242685bf161793cc25603c231bc2f568eb630ea16aa137d2664ac80388256084f8ae3bd7535248d0bd448298cc2e2071e56992d0774dc340c368ae950852ada1c").Bytes, .. KeccakA.Bytes]; - public static ExecutionRequest.ExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestData = (byte[])([.. PublicKeyA.Bytes.Slice(0, 48), .. KeccakA.Bytes, .. (BitConverter.GetBytes((ulong)1_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)1)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestData = (byte[])([.. PublicKeyB.Bytes.Slice(0, 48), .. KeccakB.Bytes, .. (BitConverter.GetBytes((ulong)2_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)2)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestData = (byte[])([.. PublicKeyC.Bytes.Slice(0, 48), .. KeccakC.Bytes, .. (BitConverter.GetBytes((ulong)3_000_000_000)), .. SignatureBytes, .. BitConverter.GetBytes((ulong)3)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestData = (byte[])([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)1_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestData = (byte[])([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)2_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestData = (byte[])([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. (BitConverter.GetBytes((ulong)3_000_000_000))]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestData = (byte[])([.. AddressA.Bytes, .. PublicKeyA.Bytes.Slice(0, 48), .. PublicKeyB.Bytes.Slice(0, 48)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestData = (byte[])([.. AddressB.Bytes, .. PublicKeyB.Bytes.Slice(0, 48), .. PublicKeyC.Bytes.Slice(0, 48)]) }; - public static ExecutionRequest.ExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestData = (byte[])([.. AddressC.Bytes, .. PublicKeyC.Bytes.Slice(0, 48), .. PublicKeyA.Bytes.Slice(0, 48)]) }; + public static TestExecutionRequest ExecutionRequestA = new() { RequestType = 0, RequestDataParts = [PublicKeyA.Bytes.Slice(0, 48), KeccakA.Bytes.ToArray(), BitConverter.GetBytes((ulong)1_000_000_000), SignatureBytes, BitConverter.GetBytes((ulong)1)] }; + public static TestExecutionRequest ExecutionRequestB = new() { RequestType = 0, RequestDataParts = [PublicKeyB.Bytes.Slice(0, 48), KeccakB.Bytes.ToArray(), BitConverter.GetBytes((ulong)2_000_000_000), SignatureBytes, BitConverter.GetBytes((ulong)2)] }; + public static TestExecutionRequest ExecutionRequestC = new() { RequestType = 0, RequestDataParts = [PublicKeyC.Bytes.Slice(0, 48), KeccakC.Bytes.ToArray(), BitConverter.GetBytes((ulong)3_000_000_000), SignatureBytes, BitConverter.GetBytes((ulong)3)] }; + public static TestExecutionRequest ExecutionRequestD = new() { RequestType = 1, RequestDataParts = [AddressA.Bytes, PublicKeyA.Bytes.Slice(0, 48), BitConverter.GetBytes((ulong)1_000_000_000)] }; + public static TestExecutionRequest ExecutionRequestE = new() { RequestType = 1, RequestDataParts = [AddressB.Bytes, PublicKeyB.Bytes.Slice(0, 48), BitConverter.GetBytes((ulong)2_000_000_000)] }; + public static TestExecutionRequest ExecutionRequestF = new() { RequestType = 1, RequestDataParts = [AddressC.Bytes, PublicKeyC.Bytes.Slice(0, 48), BitConverter.GetBytes((ulong)3_000_000_000)] }; + public static TestExecutionRequest ExecutionRequestG = new() { RequestType = 2, RequestDataParts = [AddressA.Bytes, PublicKeyA.Bytes.Slice(0, 48), PublicKeyB.Bytes.Slice(0, 48)] }; + public static TestExecutionRequest ExecutionRequestH = new() { RequestType = 2, RequestDataParts = [AddressB.Bytes, PublicKeyB.Bytes.Slice(0, 48), PublicKeyC.Bytes.Slice(0, 48)] }; + public static TestExecutionRequest ExecutionRequestI = new() { RequestType = 2, RequestDataParts = [AddressC.Bytes, PublicKeyC.Bytes.Slice(0, 48), PublicKeyA.Bytes.Slice(0, 48)] }; public static IPEndPoint IPEndPointA = IPEndPoint.Parse("10.0.0.1"); public static IPEndPoint IPEndPointB = IPEndPoint.Parse("10.0.0.2"); diff --git a/src/Nethermind/Nethermind.Core/Extensions/Bytes.cs b/src/Nethermind/Nethermind.Core/Extensions/Bytes.cs index bbcb28b73a3..793eb56c40d 100644 --- a/src/Nethermind/Nethermind.Core/Extensions/Bytes.cs +++ b/src/Nethermind/Nethermind.Core/Extensions/Bytes.cs @@ -334,6 +334,26 @@ public static byte[] Concat(byte[] bytes, byte suffix) return result; } + public static byte[] Concat(ReadOnlySpan bytes) + { + int totalLength = 0; + foreach (byte[] byteArray in bytes) + { + totalLength += byteArray.Length; + } + + byte[] result = new byte[totalLength]; + int offset = 0; + + foreach (byte[] byteArray in bytes) + { + Array.Copy(byteArray, 0, result, offset, byteArray.Length); + offset += byteArray.Length; + } + + return result; + } + public static byte[] Reverse(byte[] bytes) { byte[] result = new byte[bytes.Length]; From 843bf5fe8bc4b0392e9826f9fc6a3fb09e89133c Mon Sep 17 00:00:00 2001 From: "lukasz.rozmej" Date: Tue, 5 Nov 2024 11:56:39 +0100 Subject: [PATCH 548/551] more refactor --- .../ExecutionRequestProcessorTests.cs | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index 14dd5cf7fa8..6184b57e887 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -31,17 +31,17 @@ public class ExecutionProcessorTests private ISpecProvider _specProvider; private ITransactionProcessor _transactionProcessor; private WorldState _stateProvider; + private IReleaseSpec _spec; private static readonly UInt256 AccountBalance = 1.Ether(); - private readonly Address DepositContractAddress = Eip6110Constants.MainnetDepositContractAddress; - private readonly Address eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; - private readonly Address eip7251Account = Eip7251Constants.ConsolidationRequestPredeployAddress; - private IReleaseSpec spec; - private readonly AbiSignature _depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); - private readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; + private static readonly Address DepositContractAddress = Eip6110Constants.MainnetDepositContractAddress; + private static readonly Address eip7002Account = Eip7002Constants.WithdrawalRequestPredeployAddress; + private static readonly Address eip7251Account = Eip7251Constants.ConsolidationRequestPredeployAddress; + private static readonly AbiSignature _depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); + private static readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; - ExecutionRequest[] executionDepositRequests = [TestItem.ExecutionRequestA, TestItem.ExecutionRequestB, TestItem.ExecutionRequestC]; - ExecutionRequest[] executionWithdrawalRequests = [TestItem.ExecutionRequestD, TestItem.ExecutionRequestE, TestItem.ExecutionRequestF]; - ExecutionRequest[] executionConsolidationRequests = [TestItem.ExecutionRequestG, TestItem.ExecutionRequestH, TestItem.ExecutionRequestI]; + private static readonly ExecutionRequest[] _executionDepositRequests = [TestItem.ExecutionRequestA, TestItem.ExecutionRequestB, TestItem.ExecutionRequestC]; + private static readonly ExecutionRequest[] _executionWithdrawalRequests = [TestItem.ExecutionRequestD, TestItem.ExecutionRequestE, TestItem.ExecutionRequestF]; + private static readonly ExecutionRequest[] _executionConsolidationRequests = [TestItem.ExecutionRequestG, TestItem.ExecutionRequestH, TestItem.ExecutionRequestI]; private void FlatEncodeWithoutType(ExecutionRequest[] requests, Span buffer) { @@ -74,16 +74,16 @@ public void Setup() _stateProvider.Commit(_specProvider.GenesisSpec); _stateProvider.CommitTree(0); - spec = Substitute.For(); + _spec = Substitute.For(); - spec.RequestsEnabled.Returns(true); - spec.DepositsEnabled.Returns(true); - spec.WithdrawalRequestsEnabled.Returns(true); - spec.ConsolidationRequestsEnabled.Returns(true); + _spec.RequestsEnabled.Returns(true); + _spec.DepositsEnabled.Returns(true); + _spec.WithdrawalRequestsEnabled.Returns(true); + _spec.ConsolidationRequestsEnabled.Returns(true); - spec.DepositContractAddress.Returns(DepositContractAddress); - spec.Eip7002ContractAddress.Returns(eip7002Account); - spec.Eip7251ContractAddress.Returns(eip7251Account); + _spec.DepositContractAddress.Returns(DepositContractAddress); + _spec.Eip7002ContractAddress.Returns(eip7002Account); + _spec.Eip7251ContractAddress.Returns(eip7251Account); _transactionProcessor = Substitute.For(); @@ -94,14 +94,14 @@ public void Setup() CallOutputTracer tracer = ci.Arg(); if (transaction.To == eip7002Account) { - Span buffer = new byte[executionWithdrawalRequests.GetRequestsByteSize()]; - FlatEncodeWithoutType(executionWithdrawalRequests, buffer); + Span buffer = new byte[_executionWithdrawalRequests.GetRequestsByteSize()]; + FlatEncodeWithoutType(_executionWithdrawalRequests, buffer); tracer.ReturnValue = buffer.ToArray(); } else if (transaction.To == eip7251Account) { - Span buffer = new byte[executionConsolidationRequests.GetRequestsByteSize()]; - FlatEncodeWithoutType(executionConsolidationRequests, buffer); + Span buffer = new byte[_executionConsolidationRequests.GetRequestsByteSize()]; + FlatEncodeWithoutType(_executionConsolidationRequests, buffer); tracer.ReturnValue = buffer.ToArray(); } else @@ -131,21 +131,21 @@ public void ShouldProcessExecutionRequests() TxReceipt[] txReceipts = [ Build.A.Receipt.WithLogs( - Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, TestItem.ExecutionRequestA.RequestDataParts) - ).WithAddress(DepositContractAddress).TestObject, - Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, TestItem.ExecutionRequestB.RequestDataParts) - ).WithAddress(DepositContractAddress).TestObject, - Build.A.LogEntry.WithData( - _abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, TestItem.ExecutionRequestC.RequestDataParts) - ).WithAddress(DepositContractAddress).TestObject + CreateLogEntry(TestItem.ExecutionRequestA.RequestDataParts), + CreateLogEntry(TestItem.ExecutionRequestB.RequestDataParts), + CreateLogEntry(TestItem.ExecutionRequestC.RequestDataParts) ).TestObject ]; - executionRequestsProcessor.ProcessExecutionRequests(block, _stateProvider, txReceipts, spec); + executionRequestsProcessor.ProcessExecutionRequests(block, _stateProvider, txReceipts, _spec); Assert.That(block.Header.RequestsHash, Is.EqualTo( - CalculateHash(executionDepositRequests, executionWithdrawalRequests, executionConsolidationRequests) + CalculateHash(_executionDepositRequests, _executionWithdrawalRequests, _executionConsolidationRequests) )); + + + static LogEntry CreateLogEntry(byte[][] requestDataParts) => + Build.A.LogEntry + .WithData(_abiEncoder.Encode(AbiEncodingStyle.None, _depositEventABI, requestDataParts!)) + .WithAddress(DepositContractAddress).TestObject; } } From 348c4ea19aee3227e92fc402d80331874c0a83e6 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 6 Nov 2024 11:36:06 +0530 Subject: [PATCH 549/551] address PR comments --- .../ExecutionRequestProcessorTests.cs | 14 ++++---- .../Builders/TestExecutionRequest.cs | 32 +++++++++++++++++++ .../ExecutionRequestExtensions.cs | 6 ++-- .../ExecutionRequestsProcessorMock.cs | 8 ++--- .../Data/IExecutionPayloadParams.cs | 2 +- 5 files changed, 47 insertions(+), 15 deletions(-) diff --git a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs index 6184b57e887..08047236ac3 100644 --- a/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs +++ b/src/Nethermind/Nethermind.Consensus.Test/ExecutionRequestProcessorTests.cs @@ -39,9 +39,9 @@ public class ExecutionProcessorTests private static readonly AbiSignature _depositEventABI = new("DepositEvent", AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes, AbiType.DynamicBytes); private static readonly AbiEncoder _abiEncoder = AbiEncoder.Instance; - private static readonly ExecutionRequest[] _executionDepositRequests = [TestItem.ExecutionRequestA, TestItem.ExecutionRequestB, TestItem.ExecutionRequestC]; - private static readonly ExecutionRequest[] _executionWithdrawalRequests = [TestItem.ExecutionRequestD, TestItem.ExecutionRequestE, TestItem.ExecutionRequestF]; - private static readonly ExecutionRequest[] _executionConsolidationRequests = [TestItem.ExecutionRequestG, TestItem.ExecutionRequestH, TestItem.ExecutionRequestI]; + private static readonly TestExecutionRequest[] _executionDepositRequests = [TestItem.ExecutionRequestA, TestItem.ExecutionRequestB, TestItem.ExecutionRequestC]; + private static readonly TestExecutionRequest[] _executionWithdrawalRequests = [TestItem.ExecutionRequestD, TestItem.ExecutionRequestE, TestItem.ExecutionRequestF]; + private static readonly TestExecutionRequest[] _executionConsolidationRequests = [TestItem.ExecutionRequestG, TestItem.ExecutionRequestH, TestItem.ExecutionRequestI]; private void FlatEncodeWithoutType(ExecutionRequest[] requests, Span buffer) { @@ -114,12 +114,12 @@ public void Setup() public static Hash256 CalculateHash( - ExecutionRequest[] depositRequests, - ExecutionRequest[] withdrawalRequests, - ExecutionRequest[] consolidationRequests + TestExecutionRequest[] depositRequests, + TestExecutionRequest[] withdrawalRequests, + TestExecutionRequest[] consolidationRequests ) { - using ArrayPoolList requests = ExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); + using ArrayPoolList requests = TestExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationRequests); return ExecutionRequestExtensions.CalculateHashFromFlatEncodedRequests(requests.ToArray()); } diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs index f078e988e46..71193f2e0de 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System.Linq; +using Nethermind.Core.Collections; +using Nethermind.Core.ExecutionRequest; using Nethermind.Core.Extensions; namespace Nethermind.Core.Test.Builders; @@ -19,3 +22,32 @@ public byte[][]? RequestDataParts } } } + +public static class TestExecutionRequestExtensions +{ + public static ArrayPoolList GetFlatEncodedRequests( + TestExecutionRequest[] depositRequests, + TestExecutionRequest[] withdrawalRequests, + TestExecutionRequest[] consolidationRequests + ) + { + return new(ExecutionRequestExtensions.RequestPartsCount) + { + FlatEncodeRequests(depositRequests, depositRequests.Length * ExecutionRequestExtensions.DepositRequestsBytesSize), + FlatEncodeRequests(withdrawalRequests, withdrawalRequests.Length * ExecutionRequestExtensions.WithdrawalRequestsBytesSize), + FlatEncodeRequests(consolidationRequests, consolidationRequests.Length * ExecutionRequestExtensions.ConsolidationRequestsBytesSize) + }; + + static byte[] FlatEncodeRequests(TestExecutionRequest[] requests, int bufferSize) + { + using ArrayPoolList buffer = new(bufferSize); + + foreach (TestExecutionRequest request in requests) + { + buffer.AddRange(request.RequestData!); + } + + return buffer.ToArray(); + } + } +} \ No newline at end of file diff --git a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs index 33faa4d51b9..a6aeb5b9a03 100644 --- a/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs +++ b/src/Nethermind/Nethermind.Core/ExecutionRequest/ExecutionRequestExtensions.cs @@ -18,11 +18,11 @@ public static class ExecutionRequestExtensions public const int DepositRequestsBytesSize = PublicKeySize /*pubkey: Bytes48 */ + Hash256.Size /*withdrawal_credentials: Bytes32 */ + sizeof(ulong) /*amount: uint64*/ + 96 /*signature: Bytes96*/ + sizeof(ulong) /*index: uint64*/; public const int WithdrawalRequestsBytesSize = Address.Size + PublicKeySize /*validator_pubkey: Bytes48*/ + sizeof(ulong) /*amount: uint64*/; public const int ConsolidationRequestsBytesSize = Address.Size + PublicKeySize /*source_pubkey: Bytes48*/ + PublicKeySize /*target_pubkey: Bytes48*/; - private const int RequestPartsCount = 3; + public const int RequestPartsCount = 3; private const int PublicKeySize = 48; - public static byte[][] EmptyRequests = [[], [], []]; - public static Hash256 EmptyRequestsHash = CalculateHashFromFlatEncodedRequests(EmptyRequests); + public static readonly byte[][] EmptyRequests = [[], [], []]; + public static readonly Hash256 EmptyRequestsHash = CalculateHashFromFlatEncodedRequests(EmptyRequests); public static int GetRequestsByteSize(this IEnumerable requests) { diff --git a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs index f94d14973a8..07bab9aed6a 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin.Test/ExecutionRequestsProcessorMock.cs @@ -15,21 +15,21 @@ namespace Nethermind.Merge.Plugin.Test; public class ExecutionRequestsProcessorMock : IExecutionRequestsProcessor { - public static ExecutionRequest[] depositRequests = + public static TestExecutionRequest[] depositRequests = [ TestItem.ExecutionRequestA, TestItem.ExecutionRequestB, TestItem.ExecutionRequestC ]; - public static ExecutionRequest[] withdrawalRequests = + public static TestExecutionRequest[] withdrawalRequests = [ TestItem.ExecutionRequestD, TestItem.ExecutionRequestE, TestItem.ExecutionRequestF ]; - public static ExecutionRequest[] consolidationsRequests = + public static TestExecutionRequest[] consolidationsRequests = [ TestItem.ExecutionRequestG, TestItem.ExecutionRequestH, @@ -40,7 +40,7 @@ public static byte[][] Requests { get { - using ArrayPoolList list = ExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationsRequests); + using ArrayPoolList list = TestExecutionRequestExtensions.GetFlatEncodedRequests(depositRequests, withdrawalRequests, consolidationsRequests); return list.ToArray(); } } diff --git a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs index b895d7a9275..ca52c480c0e 100644 --- a/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs +++ b/src/Nethermind/Nethermind.Merge.Plugin/Data/IExecutionPayloadParams.cs @@ -48,7 +48,7 @@ public ValidationResult ValidateParams(IReleaseSpec spec, int version, out strin return ValidationResult.Fail; } - if (ExecutionRequests.Length != 3) + if (ExecutionRequests.Length != ExecutionRequestExtensions.RequestPartsCount) { error = "Execution requests must have exactly three items"; return ValidationResult.Invalid; From 4633e9dcf9759d5c48564a1ae99e8f5cf3b3931c Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Wed, 6 Nov 2024 11:37:45 +0530 Subject: [PATCH 550/551] format files --- .../Nethermind.Core.Test/Builders/TestExecutionRequest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs index 71193f2e0de..ceee7b2a86b 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs @@ -50,4 +50,4 @@ static byte[] FlatEncodeRequests(TestExecutionRequest[] requests, int bufferSize return buffer.ToArray(); } } -} \ No newline at end of file +} From ab2937c050f0633dd18d6f3f89553fd348cbf81d Mon Sep 17 00:00:00 2001 From: ak88 Date: Wed, 6 Nov 2024 11:07:23 +0100 Subject: [PATCH 551/551] Small refactor for Bytes (#7729) --- .../Builders/TestExecutionRequest.cs | 3 +- .../Nethermind.Core/Extensions/Bytes.cs | 38 ++++++------------- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs b/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs index ceee7b2a86b..532c78d1b7e 100644 --- a/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs +++ b/src/Nethermind/Nethermind.Core.Test/Builders/TestExecutionRequest.cs @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited // SPDX-License-Identifier: LGPL-3.0-only +using System; using System.Linq; using Nethermind.Core.Collections; using Nethermind.Core.ExecutionRequest; @@ -18,7 +19,7 @@ public byte[][]? RequestDataParts set { _requestDataParts = value; - RequestData = value is null ? null : Bytes.Concat(value); + RequestData = value is null ? null : Bytes.Concat(value.AsSpan()); } } } diff --git a/src/Nethermind/Nethermind.Core/Extensions/Bytes.cs b/src/Nethermind/Nethermind.Core/Extensions/Bytes.cs index 793eb56c40d..628b3ebf37a 100644 --- a/src/Nethermind/Nethermind.Core/Extensions/Bytes.cs +++ b/src/Nethermind/Nethermind.Core/Extensions/Bytes.cs @@ -281,19 +281,25 @@ public static byte[] Concat(byte[] part1, byte[] part2) } public static byte[] Concat(params byte[][] parts) + { + return Concat(parts.AsSpan()); + } + + public static byte[] Concat(ReadOnlySpan bytes) { int totalLength = 0; - for (int i = 0; i < parts.Length; i++) + foreach (byte[] byteArray in bytes) { - totalLength += parts[i].Length; + totalLength += byteArray.Length; } byte[] result = new byte[totalLength]; - int position = 0; - for (int i = 0; i < parts.Length; i++) + int offset = 0; + + foreach (byte[] byteArray in bytes) { - Buffer.BlockCopy(parts[i], 0, result, position, parts[i].Length); - position += parts[i].Length; + Array.Copy(byteArray, 0, result, offset, byteArray.Length); + offset += byteArray.Length; } return result; @@ -334,26 +340,6 @@ public static byte[] Concat(byte[] bytes, byte suffix) return result; } - public static byte[] Concat(ReadOnlySpan bytes) - { - int totalLength = 0; - foreach (byte[] byteArray in bytes) - { - totalLength += byteArray.Length; - } - - byte[] result = new byte[totalLength]; - int offset = 0; - - foreach (byte[] byteArray in bytes) - { - Array.Copy(byteArray, 0, result, offset, byteArray.Length); - offset += byteArray.Length; - } - - return result; - } - public static byte[] Reverse(byte[] bytes) { byte[] result = new byte[bytes.Length];